docs/src/backwards-compatibility.md
As the Solana developer ecosystem grows, so does the need for clear expectations around breaking API and behavior changes affecting applications and tooling built for Solana. In a perfect world, Solana development could continue at a very fast pace without ever causing issues for existing developers. However, some compromises will need to be made and so this document attempts to clarify and codify the process for new releases.
MINOR version release will be compatible across all software on the
same MAJOR version.PATCH or MINOR release, a feature, API, endpoint, etc. could be marked as deprecated.MAJOR release, deprecated features will be removed in an incompatible way.The Solana RPC API, Rust SDK, CLI tooling, and SBF Program SDK are all updated and shipped
along with each Solana software release and should always be compatible between PATCH
updates of a particular MINOR version release.
edge software that contains cutting-edge features with no backward compatibility policybeta software that runs on the Solana Testnet clusterstable software that run on the Solana Mainnet Beta and Devnet clustersMAJOR version releases (e.g. 2.0.0) may contain breaking changes and removal of previously
deprecated features. Client SDKs and tooling will begin using new features and endpoints
that were enabled in the previous MAJOR version.
New features and proposal implementations are added to new MINOR version
releases (e.g. 1.4.0) and are first run on Solana's Testnet cluster. While running
on the testnet, MINOR versions are considered to be in the beta release channel. After
those changes have been patched as needed and proven to be reliable, the MINOR version will
be upgraded to the stable release channel and deployed to the Mainnet Beta cluster.
Low risk features, non-breaking changes, and security and bug fixes are shipped as part
of PATCH version releases (e.g. 1.0.11). Patches may be applied to both beta and stable
release channels.
Patch releases:
Minor releases:
Major releases:
solana-sdk - Rust SDK for creating transactions and parsing account statesolana-program - Rust SDK for writing programssolana-client - Rust client for connecting to RPC APIsolana-cli-config - Rust client for managing Solana CLI config filessolana-geyser-plugin-interface - Rust interface for developing Solana Geyser plugins.Patch releases:
Minor releases:
Major releases
Patch releases:
Minor releases:
Major releases:
New Solana runtime features are feature-switched and manually activated. Runtime features include: the introduction of new native programs, sysvars, and syscalls; and changes to their behavior. Feature activation is cluster agnostic, allowing confidence to be built on Testnet before activation on Mainnet-beta.
The release process is as follows:
Solana provides publicly available RPC API nodes for all developers to use. The Solana team will make their best effort to communicate any changes to the host, port, rate-limiting behavior, availability, etc. However, we recommend that developers rely on their own validator nodes to discourage dependence upon Solana operated nodes.
Breaking changes will be limited to MAJOR version updates. MINOR and PATCH updates should always
be backwards compatible.
The Web3.JS SDK also follows semantic versioning specifications but is shipped separately from Solana software releases.
If a new attack vector is discovered in existing code, the above processes may be circumvented in order to rapidly deploy a fix, depending on the severity of the issue.
CLI tooling json output (output --json) compatibility will be preserved; however, output directed
for a human reader is subject to change. This includes output as well as potential help, warning, or
error messages.