For AI agents: Documentation index at https://cli.internetcomputer.org/llms.txt

Skip to content
ICP CLI
Feedback welcome! Report issues on GitHub, ask questions on the Forum, or chat with us on Discord.

Canister Settings Reference

Complete reference for all canister settings available in icp-cli.

Canister settings control resource allocation, behavior, and runtime configuration. They can be specified:

  1. At the canister level in icp.yaml or canister.yaml
  2. At the environment level to override per-environment

Settings

compute_allocation

Guaranteed percentage of compute capacity.

PropertyValue
TypeInteger
Range0-100
Default0 (best effort)
settings:
compute_allocation: 10

Higher values guarantee more compute but cost more cycles.

memory_allocation

Fixed memory reservation.

PropertyValue
TypeInteger or string with suffix
UnitBytes (accepts suffixes)
DefaultDynamic allocation
settings:
memory_allocation: 4gib

Memory values accept suffixes: kb (1,000), kib (1,024), mb (1,000,000), mib (1,048,576), gb (1,000,000,000), gib (1,073,741,824). Decimals are supported (e.g. 2.5gib). Raw byte counts are also accepted.

If not set, the canister uses dynamic memory allocation.

freezing_threshold

Time before the canister freezes due to low cycles.

PropertyValue
TypeInteger or string with duration suffix
UnitSeconds (accepts duration suffixes)
Default2,592,000 seconds (30 days)
settings:
freezing_threshold: 90d

Duration values accept suffixes: s (seconds), m (minutes), h (hours), d (days), w (weeks). Underscores are supported in the numeric part (e.g. 2_592_000). A bare number is treated as seconds. Raw second counts are also accepted for backwards compatibility.

The canister freezes if its cycles balance would be exhausted within this threshold.

reserved_cycles_limit

Upper limit on cycles reserved for future resource payments. When a canister allocates new storage on a subnet above 750 GiB usage, cycles are moved from its main balance into a reserved balance to pre-pay for future storage costs. This setting caps that reserved balance — memory allocations that would push it above the limit will fail. Set to 0 to disable resource reservation entirely (prevents memory allocation on subnets above 750 GiB).

PropertyValue
TypeInteger or string with suffix
UnitCycles (accepts suffixes)
IC Default5,000,000,000,000 (5T)
settings:
reserved_cycles_limit: 1t

Cycles values accept suffixes: k (thousand), m (million), b (billion), t (trillion). Decimals and underscores are supported (e.g. 1.5t, 500_000). Raw integers are also accepted.

wasm_memory_limit

Maximum heap size for the WASM module.

PropertyValue
TypeInteger or string with suffix
UnitBytes (accepts suffixes)
DefaultPlatform default
settings:
wasm_memory_limit: 1gib

wasm_memory_threshold

Memory threshold that triggers low-memory callbacks.

PropertyValue
TypeInteger or string with suffix
UnitBytes (accepts suffixes)
DefaultNone
settings:
wasm_memory_threshold: 512mib

log_memory_limit

Maximum memory for storing canister logs. Oldest logs are purged when usage exceeds this limit.

PropertyValue
TypeInteger or string with suffix
UnitBytes (accepts suffixes)
Max2 MiB
Default4096 bytes
settings:
log_memory_limit: 2mib

Memory values accept suffixes: kb (1,000), kib (1,024), mb (1,000,000), mib (1,048,576). Raw byte counts are also accepted.

log_visibility

Controls who can read canister logs.

PropertyValue
TypeString or Object
Valuescontrollers, public, or allowed_viewers object
Defaultcontrollers
# Only controllers can view logs (default)
settings:
log_visibility: controllers
# Anyone can view logs
settings:
log_visibility: public
# Specific principals can view logs
settings:
log_visibility:
allowed_viewers:
- "aaaaa-aa"
- "2vxsx-fae"

environment_variables

Runtime environment variables accessible to the canister.

PropertyValue
TypeObject (string keys; values are strings or { path: <file> })
DefaultNone
settings:
environment_variables:
API_URL: "https://api.example.com"
DEBUG: "false"
FEATURE_FLAGS: "advanced=true"

Environment variables allow the same WASM to run with different configurations.

Values from a file

A value can be read from a file instead of being written inline, which keeps values you would rather not commit — or that another tool generates — out of the manifest:

settings:
environment_variables:
API_URL: "https://api.example.com"
API_KEY:
path: ./secrets/api-key

The path is relative to the canister’s own directory — the directory holding its canister.yaml, or the project directory for a canister declared inline in icp.yaml. An environment override resolves against that same directory, not against the manifest declaring the override, so a path means the same thing wherever it is written. This matches how an init_args override resolves its path.

Surrounding whitespace is trimmed off the file’s contents, so a trailing newline does not become part of the value.

The file is read when the project is loaded, so a missing or unreadable file fails the command before anything is deployed. icp project bundle reads the file and writes the value into the bundled manifest inline — the file itself does not travel with the bundle, and a file outside the project is rejected rather than bundled.

Full Example

canisters:
- name: backend
build:
steps:
- type: script
commands:
- cargo build --target wasm32-unknown-unknown --release
- cp target/wasm32-unknown-unknown/release/backend.wasm "$ICP_WASM_OUTPUT_PATH"
settings:
compute_allocation: 5
memory_allocation: 2gib
freezing_threshold: 30d
reserved_cycles_limit: 5t
wasm_memory_limit: 1gib
wasm_memory_threshold: 512mib
log_visibility: controllers
log_memory_limit: 2mib
environment_variables:
ENV: "production"
API_BASE_URL: "https://api.example.com"

Environment Overrides

Override settings per environment:

canisters:
- name: backend
settings:
compute_allocation: 1 # Default
environments:
- name: production
network: mainnet
canisters: [backend]
settings:
backend:
compute_allocation: 20 # Production override
freezing_threshold: 90d
environment_variables:
ENV: "production"
API_KEY:
path: ./secrets/production-api-key

File references inside an override — environment_variables values and init_args alike — resolve against the referenced canister’s directory, not the directory of the manifest declaring the override. For a canister that comes from a dependency, that is the dependency’s own directory.

CLI Commands

View settings:

Terminal window
icp canister settings show my-canister

Update settings:

Terminal window
icp canister settings update my-canister --compute-allocation 10

Sync settings from configuration:

Terminal window
icp canister settings sync my-canister

See Also