Springtale is pre-1.0 software targeting people whose safety depends on privacy. The version number is a promise about what kind of change we're allowed to ship without surprising you.
- Pre-1.0 — anything can change. We try not to break things, but we don't owe you that no breaks happen.
- The CHANGELOG is the contract. If we change something visible,
it's in
CHANGELOG.md. If it's not in the changelog, you can argue it was an unannounced break and we'll fix it forward.
When Springtale cuts 1.0 (no firm timeline; estimated post-Phase-2b), that signals:
- The HTTP API surface is stable. Endpoints don't disappear or change shape without a deprecation cycle.
- The CLI surface is stable. Subcommands don't change meaning.
- The connector manifest format is stable. Existing signed manifests continue to load.
- The configuration TOML schema is stable. Field renames go through a deprecation cycle.
- The vault file format is stable across versions within the major.
Specifically, 1.0 does not promise:
- That the internal Rust crate APIs are stable. Library consumers should pin to specific versions.
- That the database schema is stable forever. Schema migrations continue between major versions.
- That
VeilidTransportis anything other than a stub.
| Bump | Means | Examples |
|---|---|---|
Patch (1.2.3 → 1.2.4) |
Bug fix, no behaviour change | Fix a sentinel verdict, tighten a clippy lint, doc fix |
Minor (1.2.x → 1.3.0) |
New feature, additive | New connector, new CLI subcommand, new API endpoint, new cooperation module |
Major (1.x.y → 2.0.0) |
Breaking change | Removed API endpoint, renamed CLI flag, vault file format change, connector ABI bump |
When something is going away in a future major:
- The replacement is added in a minor version.
- The old surface gains a deprecation warning at the same time.
- The old surface is removed in the next major.
Minimum 2 minor versions of overlap between the deprecation warning and the removal. That's the contract.
Example:
v1.3.0: POST /rules/new added. POST /rules/create still works,
logs a deprecation warning.
v1.4.0: Same.
v1.5.0: Same.
v2.0.0: POST /rules/create removed. Only POST /rules/new exists.
If you read the CHANGELOG and act on deprecation warnings, you'll never be surprised by a removal.
Native connectors are part of the same crate graph as the daemon — if the daemon compiles, the connector works. No separate ABI concern.
WASM connectors are different. They link against the WIT world
defined in crates/springtale-wit. The WIT carries its own version
number, separate from the daemon's semver:
WIT v0.x — pre-stabilisation, can break with any release
WIT v1.x — stable. Bumps follow the WASM Component Model conventions.
A daemon at v2.x might still support WIT v1.x. We will document the support matrix in the CHANGELOG when it matters.
The vault file (vault.bin) currently lives at format version 1. The
header byte at offset 8 records the format version. If we change the
layout — e.g. moving to a new KDF, splitting into more regions, adding
a third decoy — we bump that byte and write a migration.
Format migrations happen at boot. The daemon detects an older format, prompts for the passphrase, decrypts to memory, re-encrypts in the new format, atomically swaps the file. You will be prompted explicitly; this is never silent.
See upgrade.md. Schema versions are independent of the
semver — they bump when the SQL changes, regardless of which
release brings the change.
When 1.0 lands, every API endpoint will have a stability tag. Until then, every endpoint is implicitly experimental and can change.
Future tags:
- stable — semver applies. Removal/break requires major bump.
- experimental — explicitly marked; can break in a minor.
- internal — for Tauri IPC and other in-process callers. Not for external consumers. Will not be in the public docs.
The /health and /ready endpoints will always be stable.
Some things we commit to even pre-1.0:
- No telemetry. Ever, in any version. There is no path to add it.
- No outbound connections at idle. Doctor and
springtale-cli doctorwon't call home in a release where we promised not to. Secret<T>discipline. Credentials never appear in logs, error messages, panics, orDebugoutput.rustlsonly. Nonative-tls, no OpenSSL, ever.- The vault file format never silently changes. Format-version byte at offset 8 is the contract.
These predate 1.0 and they survive past it.
Every release maps to:
- Added — new features (minor/major).
- Changed — behaviour changes (minor/major; breaking changes major only post-1.0).
- Deprecated — slated for removal (minor; removal major post-1.0).
- Removed — actually removed (major post-1.0).
- Fixed — bug fixes (patch).
- Security — security fixes (any level). Always read these.
Pre-1.0, Changed can be a breaking change. Read it.