Version Policy
Keychain follows semantic versioning (https://semver.org/) rules. Each Keychain Core component release is versioned major.minor.patch
.
The key version compatibilities are SDK API compatibility and data (ciphertext) compatibility. Others compatibility include pairing (URI) format compatibility, database schema compatibility, and utility API compatibility.
From the 2.3 release line onwards, all Keychain Core packages maintain backward data compatibility. Every subsequent version of the SDK since 2.3 will decrypt and/or verify data that was encrypted and/or signed from a previous version (>=2.3). |
A planned future update might break backwards compatibility for pairing due to a change in URI data format. |
Version Components
Major
Major releases occur when there are substantial changes in functionality or when new functionality breaks API backwards compatibility. Releases within the same major release line will maintain API compatibility.
Minor
Minor releases add new features, improvements to existing features, and fixes that maintain backwards API compatibility.
Wrapper Versions
Keychain also provides wrappers for Keychain Core in other programming languages, such as Python, C# and Java. The version naming convention for the wrappers is discussed below.
Major
The major version of a wrapper always matches the major version of Keychain Core for which it is targeted.
Minor
The minor version of a wrapper is always less than or equal to the minor version of Keychain Core for which it is targeted. However, newer features or API methods may not be exposed, so some functionality might be missing.
Patch
The patch version of a wrapper is independent of the Keychain Core patch version. It is used to improve the wrapper (in this way it overlaps with minor version role as described in Keychain Core) and fix bugs.
Due to early idiosyncracies in Keychain Core v2.x, where new features were sometimes added on patch instead of minor versions, some wrappers |
Examples
The table below shows a mixture of Core and Wrapper versions and what the developer can expect for compatibility.
Note that this presumes Core v3 and beyond, on account of the idiosyncratic patch versioning used in v2. For v2 compatibility the first two rows are not guaranteed and the compatibility matrix should be referenced directly instead.
Core Version |
Wrapper Version |
Compat. |
3.4.5 |
3.4.5 |
OK (for 3.x and beyond) |
3.4.5 |
3.4.2 |
OK (for 3.x and beyond) |
3.4.5 |
3.3.7 |
Partial Compatibility - missing new Core features |
3.4.5 |
3.5.2 |
NG - wrapper may attempt to invoke API that does not exist. Application may still appear to work |
3.4.5 |
4.1.2 |
NG - Fully incompatible |
3.4.5 |
2.4.13 |
NG - Fully incompatible |