Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MSRV & Features

What each feature unlocks, and why it is a choice, is the Cargo Features chapter's subject; this page is the cost side — which flags move the compiler floor, and how the floors are kept honest.

Minimum supported Rust version

ConfigurationMSRV
any format, tokio, tracing, telemetry, dotenv, figment1.71
watch enabled1.85 (notify 8 requires it)
schema enabled1.74 (schemars requires it)
dynamic-config-cli1.85
dynamic-config-python1.85 (PyO3), and CPython 3.9+ through abi3 — plus 3.14t, which is not abi3 (see below)
age enabled1.85 — measured, not declared (see below)
the companion crates (etcd, Consul, Vault, Firestore)1.85
dynamic-config-nats, -redis, -s31.88 (their clients require it)
dynamic-config-git1.85 (gix requires it)
dynamic-config-server1.80 (axum 0.8 requires it)
dynamic-config-store-core1.71 — it holds nothing but std, so it can never be what raises a store's floor
dynamic-config-python-remote1.88 — it carries all eight store clients, so it inherits the highest floor among them
dynamic-config-embedded1.83 (core::error::Error in no_std needs 1.81)

Only watch, schema and age raise the floor for the core crate; tokio does not.

age declares 1.74 for itself, and the figure above is 1.85 because that is what actually builds: age pulls rust-embed for its translations, which pulls sha2 0.11, which is edition 2024. The number here is the one the CI job verifies against a real toolchain, not the one a manifest claims. A companion pays for what it pulls in — a gRPC stack, a streaming client, an HTTP client — and the core stays where it is.

The Python floor has a second dimension the others do not: the interpreter. One abi3 wheel per platform covers CPython 3.9 upwards, which is why the wheel carries no per-version matrix — but a free-threaded interpreter has no stable ABI, so dynamic-config-py also ships a cp314t manylinux wheel, built against that interpreter specifically. abi3 is a default Cargo feature that build switches off, because cargo features are additive and nothing can turn abi3 off by being turned on; what actually selects the ABI is which interpreter maturin is pointed at. 3.14t and not 3.13t: PyO3 0.29 dropped 3.13t when CPython promoted free-threading from experimental to supported in 3.14. Free-Threaded CPython is the audit behind the declaration.

MSRV is treated as a breaking change, and both figures are verified in CI against the real toolchains.

Contributors: this repository sets resolver.incompatible-rust-versions = "fallback" in .cargo/config.toml. Without it, cargo resolves to the newest release of every transitive dependency and the floor silently becomes 1.85 — hashbrown 0.17, reached through toml, requires edition 2024. Generating the lockfile needs cargo 1.84 or newer.