How Versioning Works
Anvil2 uses semantic versioning, following the standard three-part version string:MAJOR.MINOR.PATCH
Major releases
Indicate breaking changes that may require design or engineering updates. Breaking changes to stable components and features are batched into major releases.Examples
- Large UI changes affecting multiple components
- Significant updates to foundational tokens
- Removing previously deprecated components or features
- Major changes to API or behavior
Minor releases
Add new features while maintaining backwards compatibility. Minor releases ship as needed when feature work is ready.Examples
- New components or variants
- Updated interactions
- Enhancements to patterns
- Additions to documentation
- Minor accessibility improvements
Patch releases
Contain small, safe, incremental updates. Patch releases ship as needed.Examples
- Bug fixes
- Visual polish
- Icon additions
- Documentation corrections
- Minor accessibility fixes
- Internal code improvements
Patch releases may also include breaking changes to beta features. See
Beta features below.
Consumer compatibility policy
Compatibility for Anvil2 packages is enforced by semver, the TypeScript public API, and review — not by a consumer-contract test suite against every downstream app.When a major, minor, or patch is required
Use a major when a stable consumer must change source, types, or runtime behavior to keep compiling or working after upgrade. Prefer deprecation (see below) before removal so teams can migrate inside the announced window.
Deprecation window before removals
Stable APIs are not removed in minor or patch releases.- Removals and other breaking stable changes ship in major releases.
- Major release announcements go out approximately three months ahead of the target window. That lead time is the deprecation window for planned removals and other breaking stable changes.
- Migration guidance ships with the major when removals land. Prefer adopting the replacement API during the window rather than waiting until removal day.
Beta (./beta) rules
Unstable surfaces ship under the @servicetitan/anvil2/beta subpath export (the package ./beta entry).
- Patch-only changesets: every beta change uses a patch bump, including new beta features and breaking beta API changes.
- Changelog: beta entries are prefixed with BETA so they stand out from stable notes.
- Promoting out of beta: moving an API from
@servicetitan/anvil2/betainto the stable package export is a breaking change for beta importers. Update imports to the stable path and treat the promotion as a migration, even when the API shape is unchanged. - Stable APIs are never broken in a patch. Only APIs explicitly marked beta may change incompatibly within a patch.
Maintenance lines and codemods
After a new major publishes to npmlatest, older majors can keep receiving fixes on maintenance branches:
Install a maintenance line with the matching dist-tag, for example:
@servicetitan/anvil2-codemods when a transform exists for the change. Codemods reduce mechanical upgrade work; always re-run TypeScript and visual checks after transforming.
Communications
Per-release announcements
Every Anvil2 release triggers an announcement in #ask-designsystem so teams can track what changed and when.Weekly changelog summary
A weekly batch summary of all Anvil2 package releases from the prior week is posted to #dev. This makes it easy for engineering teams to catch up on recent changes in one place.Major release announcements
Major release announcements are shared approximately three months ahead of the target release window. Initial communication goes to the Platform team for coordination, then is shared broadly in #ask-designsystem and #dev.Beta features
Some components and features are released as beta before being stabilized. Beta releases allow teams to try new features in real products and provide feedback while we continue to iterate. Semver and import-path rules for beta (patch-only changesets,BETA changelog prefix, and promoting out of @servicetitan/anvil2/beta) live under Beta (./beta) rules in the consumer compatibility policy above — keep that section as the single source of truth.
Once a beta feature has enough production usage and feedback, it graduates to stable and follows standard semver guarantees from that point forward.
Understanding Anvil2's Beta Features
A deep dive into how beta features work, what the beta label means, and what
to expect when adopting them.
Adopting Updates
To stay aligned with the system, teams should:- Review release notes when a new version is released
- Integrate minor and patch updates promptly
- Plan for major release migrations ahead of the release window
- Remove deprecated usage as part of ongoing maintenance
- Test UI behavior after upgrading the code package
- Report issues or ask questions in #ask-designsystem
Related
Changelog
Full history of Anvil2 package releases and changes.
Roadmap
See what the Anvil team is working on and what’s coming next.