NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #356 most downloaded on crates.io
Atomically swappable Arc
Last release 3 months ago
28 Jun 2026
Ships unpredictably
gaps range from 2 weeks to 1.8 years
Nearly every release is documented
notes for 37 of 38 stable releases
8 versions withdrawn
withdrawn after publishing
8 years old
47 releases · first in 2018
Document RefCnt must not panic (#208).
* One more SeqCst :-| (#204).
Committing so it doesn't break again.
Committing so it doesn't break again.
One column per quarter.
Proper version gate of the Pin.
Proper version gate of the Pin.
Pin (since 1.39 - we are not using only Pin, but also
Pin::into_inner, #197).Some more careful orderings (#195).
Fix (hopefully) crash on ARM (#164).
Fix docs build (mutually exclusive features, #112).
Support building for no_std using nightly Rust compiler
Adds a new feature experimental-thread-local that enables building for no_std targets.
If this feature is not enabled, the crate is identical as before,
still allowing for compilation using Rust stable >= 1.38.0.
The experimental-thread-local feature makes use of experimental features thread_local
and lazy_cell, thus requiring a nightly Rust compiler.
Support for std::sync::RwLock is dropped in no_std builds.
experimental-thread-local. Needs nightly
compiler. No stability guarantees with this feature (#93).Fix a data race reported by MIRI.
AccessConvert wrapper is needed less often in practice (#77).bug: Insufficient synchronization on weak platforms (#76).
bug: Insufficient synchronization on weak platforms (#76).
Never observed in practice (it's suspected practical weak platforms like ARM are still stronger than the model), but still technically UB.
docs: Mention triomphe's ThinArc around the fat-pointer limitations.
* Support serde (by a feature).
Allow const-initializing ArcSwapOption (const_empty method).
const_empty method).More helpful description of the AsRaw trait (isn't implemented for owned Arc/Option ).
AsRaw trait (isn't implemented for owned
Arc/Option<Arc>).* Cache doc improvements.
Don't leave threads running in tests/doctests. It's a bad form and annoys miri.
Making the writers lock-free. Soft-removing the IndependentStrategy, as it is no longer needed (hidden and the same as the DafultStrategy).
Fix soundness bug around access::Map. Technically a breaking change, but unlikely to bite and breaking seems to be the least bad option. #45.
Remove Clone implementation. People are often confused by it and it is easy to emulate by hand in the rare case it is actually needed.
Avoid from_ptr(as_ptr()). Slight change in RefCnt::inc which technically is API breaking change, but this one should not matter in practice.
load_signal_safe. It only complicates things and it is niche;
signal-hook-registry has its own simplified version.from_ptr(as_ptr()). Slight change in RefCnt::inc which technically
is API breaking change, but this one should not matter in practice.From<T: RefCnt>, Default).rcu_unwap, the whole concept is a trap.Strategy, as a high level way to choose how exactly the
locking happens.
Nothing published for this version
Rename the unstable-weak to weak feature. The support is now available on 1.45 (currently in beta).
unstable-weak to weak feature. The support is now available on
1.45 (currently in beta).Adjust to Weak::as_ptr from std (the weak pointer support, relying on unstable features).
Weak::as_ptr from std (the weak pointer support, relying on
unstable features).* Added Guard::from_inner.
Guard::from_inner.Top-level docs rewrite (less rambling, hopefully more readable).
Fix the Display implementation on Guard to correctly delegate to the underlying Display implementation.
Display implementation on Guard to correctly delegate to the
underlying Display implementation.The Access functionality ‒ ability to pass a handle to subpart of held data to somewhere with the ability to update itself.
FnMut as well as Fn.Mapped caches ‒ to allow giving access to parts of config only.
Terminology of getting the data unified to load.
load.Guard now.Arc/Option<Arc> or similar.Cache got moved to top level of the crate.Nothing published for this version
Prevention against UB due to dropping Guards and overflowing the guard counter (aborting instead, such problem is very degenerate anyway and wouldn't
Tweak slot allocation to take smaller performance hit if some leases are held.
Fix Send/Sync for Guard and Lease (they were broken in the safe but uncomfortable direction ‒ not implementing them even if they could).
Lease >::unwrap(), expect() and into_option() for convenient use.
Lease<Option<_>>::unwrap(), expect() and into_option() for convenient
use.Use the correct #[deprecated] syntax.
#[deprecated] syntax.Another locking store (PrivateSharded) to complement the global and private unsharded ones.
PrivateSharded) to complement the global and private
unsharded ones.Updates to documentation, made it hopefully easier to digest.
lease method internally, making it faster in optimistic
cases.Another potentially weak ordering discovered (with even less practical effect than the previous).
Increased potentially weak ordering (probably without any practical effect).
* Documentation link fix.
More tests (some randomized property testing).
compare_and_swap no longer takes &Guard as current as that is a sure way to create a deadlock.
compare_and_swap no longer takes &Guard as current as that is a sure way
to create a deadlock.Lease for temporary storage, which doesn't suffer from contention
like load, but doesn't block writes like Guard. The downside is it slows
down with number of held by the current thread.compare_and_swap and rcu uses leases.ArcSwap as small as the pointer itself, by making the
shards/counters and generation ID global. This comes at a theoretical cost of
more contention when different threads use different instances.Added an ArcSwapOption, which allows storing NULL values (as None) as well as a valid pointer.
ArcSwapOption, which allows storing NULL values (as None) as well
as a valid pointer.compare_and_swap accepts borrowed Arc as current and doesn't consume one
ref count.peek_signal_safe as the only async signal safe method to use
inside signal handlers. This removes the footgun with dropping the Arc
returned from load inside a signal handler.The peek method to use the Arc inside without incrementing the reference count.
peek method to use the Arc inside without incrementing the reference
count.Documentation fix (swap is *not* lock-free in current implementation).
More freedom in the rcu and rcu_unwrap return types.
rcu and rcu_unwrap return types.Added some primitive benchmarks.
rcu support.compare_and_swap support.* Initial implementation.
Your coding agent can read these notes before it upgrades. Set up the MCP server →