Umbrella tracker for the nearcore 2.13 (protocol 86) rollout across the DevEx Rust stack. Gas-key design lives in #43.
Status — 2026-07-15: cascade complete, 1 crate left ✅
The full DevEx stable pass for nearcore 2.13.0 (protocol 86) is published to crates.io. Everything below is live except near-validator, which is code-complete and green but blocked on a co-maintainer approval (r-near lacks admin on that one repo).
Recap: nearcore 2.13.0 stable shipped 2026-07-09 (near/nearcore#15957) — the 0.37.0 nearcore crates went live. We then ran the stable pass across the stack in dependency order: flip every =0.37.0-rc.2 pin → 0.37.0, drop the -rc.N from each DevEx crate, default the sandbox binary to the stable 2.13.0, and republish bottom-up (jsonrpc → sandbox/socialdb → workspaces → cli → sdk/cargo-near → validator).
nearcore 2.13.0 final is protocol 86 (not 85 — a feature stabilized between rc.2 and final).
Prior phase (2026-07-02): the whole stack shipped as release candidates pinned to =0.37.0-rc.2 while nearcore held the final crates for mainnet. This stable pass supersedes those RCs.
Published — stable, live on crates.io (none yanked)
Remaining
Follow-up
Release gotchas worth remembering
- near-sys version-bump discipline: near-sdk 5.29.0's first release-plz run failed publish-verify (
cannot find value chain_id in crate sys) because a host-fn binding was added to near-sys without bumping its version — so cargo publish --verify built near-sdk against the stale published near-sys. Plain CI passed (path-dep). Fixed by publishing near-sys 0.2.13 first (release-plz PR #1583). Any near-sys API addition must bump + publish near-sys before/with the near-sdk release that uses it.
- near-sdk 5.29.0 raised the effective contract proto floor to 85: it unconditionally imports the 3 gas-key host fns into any Promise-using contract, and those gate on protocol 85. 5.29 contracts load fine on proto ≥85 (testnet + 2.13 mainnet + a 2.13 sandbox) but link-error (
unknown or invalid import) on a proto-84 / nearcore-2.12 node. The cargo near new template and the sdk examples both resolve their sandbox to the 0.3.12 (proto-86) binary, so this is transparent there.
Post-quantum (ML-DSA-65) notes
2.13 ships initial ML-DSA-65 support. Verified end-to-end on-chain (2026-07-02, on a 2.13.0-rc.2 sandbox = proto 85; 2.13.0 stable is proto 86, behaviour unchanged): AddKey(ml-dsa-65 full-access) → on-trie handle ml-dsa-65-hash:<bs58(SHA3-256)>; view_access_key accepts the full key (nearcore hashes it to the handle server-side — the client sends the full key since the ml-dsa-65-hash: handle can't parse as a PublicKey); a transfer signed by the ML-DSA key succeeds. So near-cli online ML-DSA signing works against a 2.13 node.
Distribution-channel gotcha for on-chain tests: the S3 neard binary (what the near-sandbox Rust crate downloads) has ML-DSA + view_state pagination; the Docker image nearprotocol/sandbox of the same tag may lag — use the pre-release/master tag there.
Known 2.13 PQ limitations (not blockers): on-trie keys stored as 32-byte hashes so the full pubkey isn't recoverable (can't enumerate PQ access keys); fork-network / mirror tools skip ML-DSA-65 keys; no in-contract ML-DSA verify host fn.
Design references: #43 (NEP-611 gas keys), #47 (Ledger catch-up epic, PQ as P2).
Umbrella tracker for the nearcore 2.13 (protocol 86) rollout across the DevEx Rust stack. Gas-key design lives in #43.
Status — 2026-07-15: cascade complete, 1 crate left ✅
The full DevEx stable pass for nearcore 2.13.0 (protocol 86) is published to crates.io. Everything below is live except near-validator, which is code-complete and green but blocked on a co-maintainer approval (r-near lacks admin on that one repo).
Recap: nearcore 2.13.0 stable shipped 2026-07-09 (near/nearcore#15957) — the
0.37.0nearcore crates went live. We then ran the stable pass across the stack in dependency order: flip every=0.37.0-rc.2pin →0.37.0, drop the-rc.Nfrom each DevEx crate, default the sandbox binary to the stable2.13.0, and republish bottom-up (jsonrpc → sandbox/socialdb → workspaces → cli → sdk/cargo-near → validator).Published — stable, live on crates.io (none yanked)
0.22.00.16.00.3.12sandbox()binary →2.13.00.23.00.3.120.28.05.29.04.2.2/0.2.5/0.2.130.22.00.11.5Remaining
0.2.0— feat: support nearcore 2.13 / post-quantum ML-DSA-65 (draft) near-validator-cli-rs#41. Green, review-clean, deps all live, current with main. Blocked on a human approval only: r-near has push+triage (not admin) on this repo, so it can't self-approve or bypass the required review. A co-maintainer with write access needs to approve Coordinate Rust 2024 edition upgrades across DevEx repos #41 → then a squash-merge publishes0.2.0. This is the last crate in the cascade.Follow-up
=0.37.0-rc.2→0.37.0and DevEx-rc.N→ stable across the stack ✅ (except near-validator above)sandbox_with_version(...)pins to baresandbox()now that the default is the stable 2.13.0 binary: near-sdk examples reverted in #1586; near-workspacestests/account.rs→ chore: retire RC sandbox pin, use default sandbox() near-workspaces-rs#454 (open); near-cli / cargo-near already clean.stablenow hit Rust 1.97'suseless_borrows_in_formattingclippy lint (fixed inline in near-cli#616 viaclippy --fix+ re-fmt); consider pinning CI toolchains or a repo sweep.# ChangelogH1 breaks release-plz's release-notes extractor (the v0.16.0 GH release body was populated manually) — de-dupe in a cleanup PR.0.12.0-rc.1(hand-rolls types, no nearcore dep; outside this pin cascade).Release gotchas worth remembering
cannot find value chain_id in crate sys) because a host-fn binding was added to near-sys without bumping its version — socargo publish --verifybuilt near-sdk against the stale published near-sys. Plain CI passed (path-dep). Fixed by publishing near-sys0.2.13first (release-plz PR #1583). Any near-sys API addition must bump + publish near-sys before/with the near-sdk release that uses it.unknown or invalid import) on a proto-84 / nearcore-2.12 node. Thecargo near newtemplate and the sdk examples both resolve their sandbox to the 0.3.12 (proto-86) binary, so this is transparent there.Post-quantum (ML-DSA-65) notes
2.13 ships initial ML-DSA-65 support. Verified end-to-end on-chain (2026-07-02, on a
2.13.0-rc.2sandbox = proto 85; 2.13.0 stable is proto 86, behaviour unchanged): AddKey(ml-dsa-65 full-access) → on-trie handleml-dsa-65-hash:<bs58(SHA3-256)>;view_access_keyaccepts the full key (nearcore hashes it to the handle server-side — the client sends the full key since theml-dsa-65-hash:handle can't parse as aPublicKey); a transfer signed by the ML-DSA key succeeds. So near-cli online ML-DSA signing works against a 2.13 node.Distribution-channel gotcha for on-chain tests: the S3 neard binary (what the
near-sandboxRust crate downloads) has ML-DSA + view_state pagination; the Docker imagenearprotocol/sandboxof the same tag may lag — use thepre-release/mastertag there.Known 2.13 PQ limitations (not blockers): on-trie keys stored as 32-byte hashes so the full pubkey isn't recoverable (can't enumerate PQ access keys); fork-network / mirror tools skip ML-DSA-65 keys; no in-contract ML-DSA verify host fn.
Design references: #43 (NEP-611 gas keys), #47 (Ledger catch-up epic, PQ as P2).