Upgrade
Unlike a canister reinstall that preserves the canister identifier but no state, a canister upgrade enables you to preserve the state of a deployed canister and change the code.
For example, assume you have a dapp that manages professional profiles and social connections. If you want to add a new feature to the dapp, you need to be able to update the canister code without losing any of the previously-stored data. A canister upgrade enables you to update existing canister identifiers with program changes without losing the program state.
To preserve state when you are upgrading a canister written in Motoko, be sure to use the stable
keyword to identify the variables you want to preserve. For more information about preserving variable state in Motoko, see stable variables and upgrade methods.
To upgrade a canister, first you must:
Edit the canister's code and save the changes.
Use
dfx build <canister-name>
to compile the code into a new Wasm module.Use
dfx canister install <canister-name> --mode upgrade
to install the new Wasm module.
Errors related to canister upgrades
Common errors related to canister upgrades include: