dfinity avatar

Stable Memory

If you're building on Internet Computer, this is your guide to not losing user data when you upgrade a canister. It covers the persistent actor pattern in Motoko (where `let` and `var` just work automatically) and StableBTreeMap with MemoryManager in Rust (because thread_local RefCell gets wiped on every deploy). The mistakes section is genuinely useful: it walks through the pre_upgrade instruction trap that bricks canisters, the type change gotchas in Motoko, and why Bound::Unbounded beats Bound::Bounded for forward compatibility. Includes working code for both languages with CBOR serialization. Read this before your first canister upgrade, not after you've lost production data.

skills.sh installs
320
GitHub stars
39
last updated
Aug 21, 2026

Install

$ npx -y skills add dfinity/icskills --skill stable-memory --agent claude-code

Installs into .claude/skills of the current project.

Files

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> }, plain statics) is wiped on every upgrade. Any data you care about must live in stable memory, either through ic-stable-structures or by serializing it yourself in pre_upgrade/post_upgrade.
  • Motoko -- enhanced orthogonal persistence is on by default, so let and var in a persistent actor already survive upgrades with no stable keyword and no upgrade hooks. Only transient declarations are wiped.

Prerequisites

  • For Motoko: mops with core = "2.0.0" in mops.toml, and moc >= 1.7.0 (dot notation on Map/List needs 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

Sponsors

Details

Repository
github.com/dfinity/icskills
Categories
Security, Rust
First seen
Jun 3, 2026

More from dfinity/icskills

All 16

Recommended

More Security
1bobmatnyc avatarspring-bootbobmatnyc/claude-mpm-skillsSpring Boot 3.x - Java framework for production-ready applications with dependency injection, REST APIs, data access, security, and actuator monitoring319skills.sh installs
2proelias7 avatarfivem-developmentproelias7/fivem-skillFiveM development best practices for any framework (vRP, QBCore, Qbox, ESX). Covers performance, security, client/server communication, cache (cacheaside + clie319skills.sh installs
3nice-wolf-studio avatarsupabase-authnice-wolf-studio/claude-code-supabase-skillsManage authentication and user operations in Supabase. Use for sign up, sign in, sign out, password resets, and user management.318skills.sh installs
4onewave-ai avatardependency-auditoronewave-ai/claude-skillsAudit npm dependencies for security vulnerabilities, outdated packages, and unused dependencies. Use when checking for security issues, updating packages, or cl318skills.sh installs
5secondsky avatarcloudflare-workers-ci-cdsecondsky/claude-skillsComplete CI/CD guide for Cloudflare Workers using GitHub Actions and GitLab CI. Use for automated testing, deployment pipelines, preview environments, secrets m318skills.sh installs
6syncfusion avatarsyncfusion-angular-speech-to-textsyncfusion/angular-ui-components-skillsImplement the Syncfusion Angular SpeechToText component. Use this skill for real-time speech-to-text conversion with text transcripts, custom button appearance 318skills.sh installs