External integrators build on @tikka/sdk. This policy defines how we version the public API, how long deprecated surfaces remain available, and how deprecations are announced.
Related: Release Policy · Changelog
@tikka/sdk follows Semantic Versioning: MAJOR.MINOR.PATCH.
| Bump | When |
|---|---|
| MAJOR | Breaking changes to the public API (removed exports, incompatible signature/behavior changes) |
| MINOR | Backward-compatible features or marking public API as deprecated |
| PATCH | Bug fixes and internal changes that do not alter the public contract |
Public API means exported symbols from @tikka/sdk, @tikka/sdk/read, and @tikka/sdk/write (and their published TypeDoc surface), plus documented CLI flags.
During 0.x.y pre-1.0 development, breaking changes may ship in a MINOR bump when unavoidable. Even then we prefer deprecation first and document every break under ### Removed / migration notes in the changelog.
We deprecate before we remove.
- Announce in a MINOR release (semver requires a minor bump when marking public API deprecated).
- Keep working for at least one full MINOR release cycle after announcement (example: deprecated in
0.2.0→ still present through0.3.x). - Remove only in a subsequent MAJOR release (or, while still on
0.x, the next MINOR that is explicitly documented as breaking).
Widely used APIs may get a longer window; security-driven changes may shorten it when keeping the old path would prolong exposure — always called out in the changelog.
Every public deprecation must include both:
-
JSDoc
@deprecatedon the symbol (and TypeScript declaration), naming the replacement and target removal version when known:/** * @deprecated Since 0.2.0 — use {@link SubmitResult} instead. Removal planned in 1.0.0. */ export type LegacySubmitResult = SubmitResult;
-
CHANGELOG entry under
### Deprecatedfor that SDK release (see template below). Prefer a one-line migration hint in the same entry.
Optional but encouraged: a one-time runtime warning (util.deprecate / equivalent) for call sites that still execute.
Add a dated SDK release block to the root CHANGELOG.md (Keep a Changelog style). Use this skeleton for every @tikka/sdk release:
## [sdk-vMAJOR.MINOR.PATCH] - YYYY-MM-DD
### Added
- …
### Changed
- …
### Fixed
- …
### Deprecated
- `SymbolName` — use `Replacement` instead. Removal planned in MAJOR.0.0.
Migration: …
### Removed
- `SymbolName` — was deprecated in sdk-vX.Y.0. Migration: …
### Security
- …Rules for release hygiene:
- Every
### Deprecateditem must have a matching@deprecatedJSDoc on the symbol. - Every
### Removeditem must have been listed under### Deprecatedin an earlier release (except documented security exceptions). - Breaking removals bump MAJOR (or an explicitly breaking
0.xMINOR) and include migration notes.
- SemVer bump intent is clear (PATCH / MINOR / MAJOR)
- New deprecations use
@deprecated+ changelog### Deprecated - Removals only after the deprecation window and under
### Removed - TypeDoc / README examples no longer recommend the deprecated path
- Semantic Versioning — deprecating functionality
- Keep a Changelog
- JSDoc
@deprecated