# SDK versions and deprecation

What is versioned, what keeps working, and how APIs are deprecated.

What is versioned:

- **The SDK**, named by `sdkVersion` in each manifest (now `0.1.0`), with its
  packages, CLI and documentation.
- **Contracts inside a package**, each with its own `schemaVersion`: the
  manifest, capability descriptors, module descriptors, portable packages and
  conversions.
- **Each Block release**, with its own semantic version. A published release is
  immutable: StillMade keeps its exact source and the contract it was built for.

What stays true:

- A published release keeps working. Installed pins never move to a newer
  version on their own, and saved projects reopen with the pinned version.
- New capabilities are additive: new optional manifest fields, port types,
  hosted operations, host API methods and templates do not change how existing
  packages behave.
- A change that would alter existing behavior ships under a new name or a new
  `schemaVersion`, and the old one keeps working for releases that use it.

Before 1.0 (`0.x`), the SDK may still change between minor versions; every
change is listed in the [changelog](/docs/changelog), and published releases
keep working regardless. From 1.0 the SDK follows semantic versioning: a major
version only for removals, and a deprecated API keeps working for at least 12
months after its replacement ships. Deprecations are marked in these docs, in
`stillmade-block validate` warnings and in the changelog, and removing an API
never changes a release that was already published with it.

**Licence.** The SDK (its packages, CLI, guides and examples) is licensed under
the [PolyForm Shield License 1.0.0](/block-sdk/LICENSE.txt). You may use and change
it, and build, publish and sell Blocks with it; you may not use it to provide a
product that competes with StillMade. Your Blocks are yours: each Block carries
the licence its creator names in its manifest, and StillMade's own Blocks use
MIT.
