Skip to content

Stability & versioning

What you can rely on when you build against @silo-code/sdk — what's a permanent contract, what isn't, and how the surface changes over time.

The public surface

The contract is the @silo-code/sdk barrel (packages/sdk/src/index.ts) and everything it re-exports. The rule is simple:

If it isn't exported from @silo-code/sdk, it isn't public — and may change or disappear without notice.

Every exported symbol carries exactly one tag:

  • @public — part of the supported surface. Permanently licensed (MIT), documented, and covered by the versioning policy below. This is what your extension is meant to use.
  • @internal — host plumbing that happens to be exported for first-party (core.*) wiring. No guarantees — don't depend on it. The privileged @silo-code/extension-host/internal subpath is internal in its entirety and is never published to npm.

Public symbols also carry a @category (Extension Contract, Registration, Consumer Services, or Core Types) — organizational, not a stability signal.

What's stable vs. planned

The Roadmap is the source of truth for what's real. A surface marked stable is shipped and covered by this policy;

planned means designed (often in an

RFC) but not yet built — don't write against it until it lands.

Versioning (SemVer)

@silo-code/sdk follows Semantic Versioning. Against the @public surface:

BumpMeansExamples
patch (x.y.Z)No surface changedoc fixes, internal/host fixes, type-equivalent corrections
minor (x.Y.0)Additive onlya new ctx member, a new optional field, a new exported type — existing code keeps compiling
major (X.0.0)Breakingremoving/renaming a @public symbol, changing a signature, tightening a type

Moving a symbol from @internal to @public is additive (minor). Going the other way — retracting a @public symbol — is breaking (major) and follows the deprecation policy first.

Pre-1.0

The SDK is currently 0.x. By SemVer convention, while pre-1.0 a minor (0.Y.0) bump may carry a breaking change — the surface is still settling toward the all-green roadmap that marks 1.0. We aim to minimize churn and call out breaks in the changelog, but the hard guarantees above bind firmly at 1.0. Pin a version range you've tested against until then.

Deprecation policy

Before a @public symbol is removed:

  1. It's marked @deprecated in TSDoc with the replacement and the version it was deprecated in. Your editor surfaces the strikethrough; the API reference shows the notice.
  2. It keeps working for at least one major version (post-1.0).
  3. The removal is called out in the changelog for the major that drops it.

Declaring compatibility

An extension declares the SDK API version it targets via silo.engine in its manifest (e.g. "engine": "^0.1"). This is informational today; once the SDK is 1.0 the host will use it to warn on or refuse an incompatible extension. Build against the SDK version your engine range allows.

See also