stable-memory
Installation
SKILL.md
Stable Memory & Canister Upgrades
What This Is
Stable memory is persistent storage on Internet Computer that survives canister upgrades. Whether ordinary variables survive depends on the language:
- Rust -- heap data (
thread_local! { RefCell<T> }, plainstatics) is wiped on every upgrade. Any data you care about must live in stable memory, either throughic-stable-structuresor by serializing it yourself inpre_upgrade/post_upgrade. - Motoko -- enhanced orthogonal persistence is on by default, so
letandvarin apersistent actoralready survive upgrades with nostablekeyword and no upgrade hooks. Onlytransientdeclarations are wiped.
Prerequisites
- For Motoko: mops with
core = "2.0.0"in mops.toml, andmoc >= 1.7.0(dot notation onMap/Listneeds it) - For Rust:
ic-stable-structures = "0.7"in Cargo.toml
Canister IDs
No external canister dependencies. Stable memory is a local canister feature.
Mistakes That Break Your Build
- Using
thread_local! { RefCell<T> }for user data (Rust) -- This is heap memory. It is wiped on every canister upgrade. All user data, balances, settings stored this way will vanish aftericp deploy. UseStableBTreeMapinstead.