NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4759 most downloaded on crates.io
Canister Developer Kit for the Internet Computer.
Last release 22 days ago
15 Sep 2026
Release timing varies
gaps range from 8 days to 4 months
Most releases are documented
notes for 31 of 42 stable releases
49 versions withdrawn
withdrawn after publishing
6 years old
98 releases · first in 2020
One column per quarter.
api::subnet_self_node_count, returning the number of nodes on the subnet. Useful for computing valid replication bounds for flexible_http_request.
api::subnet_self_node_count, returning the number of nodes on the subnet. Useful for computing valid replication bounds for flexible_http_request.api::cost_http_request_v2, pricing a canister HTTPS outcall under pricing version 2. It takes the Candid-encoded parameter record; prefer the typed wrappers in ic-cdk-management-canister.Update, query, init, and post_upgrade canister entry points now interpret an empty input vector as the Candid encoding of (), making them more lenient
init, and post_upgrade canister entry points now interpret an empty input vector as the Candid encoding of (), making them more lenient when no arguments are provided. This does not apply to methods using decode_with, which still receive the raw (empty) bytes.Added msg_caller_info_data and msg_caller_info_signer to ic_cdk::api, exposing the caller's identity attribute data and the signing canister ID respec
msg_caller_info_data and msg_caller_info_signer to ic_cdk::api, exposing the caller's identity attribute data and the signing canister ID respectively.[BREAKING] Remove all items deprecated in v0.18.0: api::call, api::stable, api::management_canister modules and legacy functions (spawn, print, caller…
api::call, api::stable, api::management_canister modules and legacy functions (spawn, print, caller, id, canister_balance, set_certified_data, set_global_timer).bitcoin_canister module to a separate crate ic-cdk-bitcoin-canister. Users should depend on ic-cdk-bitcoin-canister directly.management_canister module to a separate crate ic-cdk-management-canister. Users should depend on ic-cdk-management-canister directly. The transform-closure feature is also moved to the new crate.Support Canister Environment Variable.
env_var_* API.canister_metadataread_canister_snapshot_metadataread_canister_snapshot_dataupload_canister_snapshot_metadataupload_canister_snapshot_data[BREAKING] Updated to version 2.0 of the async executor. The spawn function now creates protected tasks that panic (or are canceled, with spawn_weak) if they outlive the canister method (with a new spawn_migratory function for tasks that are supposed to outlive the method). A trap will now cancel all protected tasks in the method it is part of. See the module docs for more information.
in_*_context) has been moved to ic_cdk::futures::internals.[BREAKING] Upgrade ic-management-canister-types which contains the changes for:
Nothing published for this version
Nothing published for this version
Nothing published for this version
The macros annotate #[allow(clippy::disallowed_methods)] above the invocation of ic_cdk::spawn.
#[allow(clippy::disallowed_methods)] above the invocation of ic_cdk::futures::spawn.The ic_cdk::futures::spawn method has a different poll order that can affect canister behavior.
While some projects may wish to enforce a disallowed-methods lint rule to prevent its use, the invocations generated by our macros are a false positive.
This annotation prevents the warning from being triggered for the macro-generated code, ensuring a clean linting experience for developers who adopt the new rule.
Restored the default skipping_quota to match the behavior of previous versions of the macros.
skipping_quota to match the behavior of previous versions of the macros.Tasks which return after canceling futures are no longer marked as trapped
ic0 v1.0.0New ic_cdk::futures function spawn_017_compat. This has the code ordering behavior of 0.17, with spawned futures run immediately instead of waiting fo
ic_cdk::futures function spawn_017_compat. This has the code ordering behavior of 0.17, with spawned futures run immediately instead of waiting for the current code to suspend.Update bitcoin regtest cycles cost to be same as the bitcoin mainnet.
root_key API. (#619)Update bitcoin regtest cycles cost to be same as the bitcoin mainnet.
fees = record {
get_current_fee_percentiles = 10_000_000 : nat;
get_utxos_maximum = 10_000_000_000 : nat;
get_block_headers_cycles_per_ten_instructions = 10 : nat;
get_current_fee_percentiles_maximum = 100_000_000 : nat;
send_transaction_per_byte = 20_000_000 : nat;
get_balance = 10_000_000 : nat;
get_utxos_cycles_per_ten_instructions = 10 : nat;
get_block_headers_base = 50_000_000 : nat;
get_utxos_base = 50_000_000 : nat;
get_balance_maximum = 100_000_000 : nat;
send_transaction_base = 5_000_000_000 : nat;
get_block_headers_maximum = 10_000_000_000 : nat;
};
You can get the fees by get_config API on the BTC Mainnet Canister.
New CDK library ic-cdk-executor containing the low-level async executor primitives previously in ic-cdk. Most users will never need to use this librar
ic-cdk-executor containing the low-level async executor primitives previously in ic-cdk. Most users will never need to use this library and should continue using the interface from ic-cdk.ic-error-types to v0.2.0 from which we re-export the RejectCode type.chore: Release alpha versions of other crates matching ic-cdk@0.18.2-…
chore: Release alpha versions of other crates matching ic-cdk@0.18.2-…
Support VetKD management canister API.
Call::take_raw_args which owns the bytes. (#601)Submodules in api are now deprecated in favor of root-level modules.
Please check Version 0.18 Guide for more details.
Call API.
.candid() decoding only when needed.update/query/init macros now support custom argument decoders via decode_with.update/query macros now support custom result encoders via encode_with.api module offers consistent System API bindings.management_canister module for convenient Management Canister calls.bitcoin_canister module for direct Bitcoin Canisters calls.api module:
cost_http_request, cost_sign_with_ecdsa, cost_sign_with_schnorr, cost_vetkd_derive_key.management_canister module accept call arguments by reference.futures module is now public to expose functionalities related to the async executor.api are now deprecated in favor of root-level modules.
api/call -> callapi/management_canister -> management_canister & bitcoin_canisterapi/stable -> stableNothing published for this version
Nothing published for this version
Nothing published for this version
Add method bitcoin_get_block_headers.
bitcoin_get_block_headers.subnet_info. (#532)
SubnetInfoArgs and SubnetInfoResult.Add AllowedViewers variant to LogVisibility enum.
AllowedViewers variant to LogVisibility enum. (#512)#[on_low_wasm_memory] for low-memory hook. (#528)Nothing published for this version
BREAKING: Add the LoadSnapshot variant to CanisterChangeDetails.
LoadSnapshot variant to CanisterChangeDetails. (#504)take_canister_snapshot, load_canister_snapshot, list_canister_snapshots, delete_canister_snapshotLoadSnapshotRecord, SnapshotId, Snapshot, TakeCanisterSnapshotArgs, LoadCanisterSnapshotArgs, DeleteCanisterSnapshotArgsNothing published for this version
Nothing published for this version
BREAKING: Stable Memory always use 64-bit addresses and stable64_* system API.
stable64_* system API. (#498)log_visibility to the management canister API types: (#497)
CanisterSettingsDefiniteCanisterSettings.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Provide safe wrapper of in_replicated_execution in ic-cdk.
in_replicated_execution in ic-cdk. (#489)ic0 to v0.23.0. (#489)wasm_memory_limit to the management canister API types: (#483)
CanisterSettingsDefiniteCanisterSettings.Management canister methods for interacting with the chunk store.
global_timer_set in ic-cdk. (#475)Upgrade ic-cdk-macros to v0.9.0.
ic-cdk-macros to v0.9.0.Add is_recovering_from_trap function for implementing trap cleanup logic.
is_recovering_from_trap function for implementing trap cleanup logic. (#456)#[update(decoding_quota = 10000, skipping_quota = 100, debug = true)]
skipping_quota limits the amount of work allowed for skipping unneeded data on the wire. If this attributes is not present, we set a default quota of 10_000. This affects ALL existing canisters, and is mainly used to improve canister throughput. See docs on the Candid library to understand the skipping cost.decoding_quota limits the total amount of work the deserializer can perform. See docs on the Candid library to understand the cost model.debug = true prints the instruction count and the decoding/skipping cost to the replica log, after a successful deserialization. The decoding/skipping cost is logged only when you have already set a quota in the attributes. The debug mode is useful to determine the right quotas above. Developers can send a few large payloads to the debugging entry point and know the actual decoding cost.call_with_config to config the same decoding quotas described above. It's strongly recommended to use call_with_config when calling third-party untrusted canisters.ic_cdk::api::call::arg_data takes ArgDecoderConfig as argument. (#465)Nothing published for this version
Nothing published for this version
Add "reserved cycles" fields to the management canister API:
reserved_cycles to CanisterStatusResponsereserved_cycles_limit to CanisterSettings and DefiniteCanisterSettingscall* methods are documented with examples and notes.### Changed - Upgrade candid to 0.10.
candid to 0.10. (#448)Nothing published for this version
Nothing published for this version
Nothing published for this version
query_stats in canister_status response.
query_stats in canister_status response. (#432)Deprecate ic_cdk::call::performance_counter() in favor of ic_cdk::performance_counter().
ic_cdk::api::performance_counter(1);ic_cdk::api::call_context_instruction_counter() as a shorthand;ic_cdk::api::call::performance_counter() in favor of ic_cdk::api::performance_counter(). (#435)cycles_burn corresponding to system API ic0.cycles_burn128.
cycles_burn corresponding to system API ic0.cycles_burn128. (#434)ic0 to 0.21.1. (#434)### Changed - Upgrade ic0 to 0.21.0.
ic0 to 0.21.0. (#433)Candid Export workflow is changed.
ic_cdk::export_candid!() to export candid.candid-extractor to extract candid from the canister WASM.Nothing published for this version
Nothing published for this version
Remove export module. Please use candid directly in your project instead of using ic_cdk::candid.
candid to 0.9. (#411)export module. Please use candid directly in your project instead of using ic_cdk::export::candid.ic_cdk_macro::import module. See below for a new way to import canisters.Export Candid: (#386)
cargo build --target wasm32-unknown-unknown \
--release \
--package "$package" --features "ic-cdk/wasi"
wasmtime "target/wasm32-unknown-unknown/release/$package.wasm" > $did_file
cargo build --target wasm32-unknown-unknown \
--release \
--package "$package"
ic-wasm "target/wasm32-unknown-unknown/release/$package.wasm" \
-o "target/wasm32-unknown-unknown/release/$package.wasm" \
metadata candid:service -v public -f $did_file
ic_cdk::export_candid!() at the end of lib.rs. In the future we may lift this requirement to provide a better DX.Import Candid: (#390)
ic_cdk_bindgen as a build dependency to generate canister bindingsuse ic_cdk_bindgen::{Builder, Config};
fn main() {
let counter = Config::new("counter");
let mut builder = Builder::new();
builder.add(counter);
builder.build(None); // default write to src/declarations
}
mod declarations;
use declarations::counter::counter;
counter.inc().await?
Nothing published for this version
Nothing published for this version
Hardcodes the fee for sign_with_ecdsa.
sign_with_ecdsa. (#407)Bitcoin API handles cycles cost under the hood.
Set caller's canister version in the field sender_canister_version of management canister call payloads.
sender_canister_version of management canister call payloads. (#401)canister_info management canister call (CanisterInfoRequest and CanisterInfoResponse). (#401)Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →