Versioning & API Compatibility
Tayra follows Semantic Versioning 2.0 to give commercial customers confidence when upgrading.
Version Scheme
| Increment | Meaning |
|---|---|
| Major (X.0.0) | Breaking changes to the public API surface |
| Minor (0.X.0) | New features, backward-compatible additions |
| Patch (0.0.X) | Bug fixes, performance improvements, no API changes |
Deprecation Policy
Tayra uses a two-minor-version deprecation window:
- Minor N: A symbol is marked
[Obsolete("Use X instead. Will be removed in vN+2.")] - Minor N+1: The obsolete symbol remains available with the compiler warning
- Minor N+2: The symbol is removed
This gives customers at least two minor release cycles to migrate away from deprecated APIs.
Public API Surface Tracking
Tayra uses Microsoft.CodeAnalysis.PublicApiAnalyzers to track the public API surface of every shipped package.
Each packable project contains two files:
PublicAPI.Shipped.txt- API surface included in the last releasePublicAPI.Unshipped.txt- New API additions not yet released
How It Works
- Adding a public member without updating
PublicAPI.Unshipped.txtcauses a build error (RS0016) - Removing a shipped public member without marking it as removed causes a build error (RS0017)
- This ensures accidental breaking changes are caught at build time, not after release
Workflow for Contributors
Adding a new public API:
- Add the new type/member in code
- Build - the compiler will emit RS0016 with the exact symbol string
- Add that symbol string to
PublicAPI.Unshipped.txt
Releasing a new version:
- Move all entries from
PublicAPI.Unshipped.txttoPublicAPI.Shipped.txt - Clear
PublicAPI.Unshipped.txt(keep only#nullable enable)
Removing a public API:
- Mark the member as
[Obsolete](see deprecation policy above) - After the deprecation window, remove the code
- Move the symbol from
PublicAPI.Shipped.txtand prefix with*REMOVED*
Stability Guarantees
- Tayra.Core: Stable. Breaking changes only in major versions.
- Integration packages (Marten, Wolverine, EF Core, ASP.NET Core): Follow their upstream framework's major version cycle.
- Key store packages: Stable. Provider-specific options may evolve with the upstream SDK.
- Internal APIs (classes/methods not in
PublicAPI.Shipped.txt): May change without notice between any versions.
