tag:github.com,2008:https://github.com/dfinity/sdk/releases Release notes from sdk 2026-03-02T22:42:25Z tag:github.com,2008:Repository/198344153/0.31.0 2026-03-03T16:15:35Z 0.31.0 <h3>chore!: <code>dfx generate</code> now imports <code>@icp-sdk/core</code> instead of <code>@dfinity/</code> packages</h3> <p>It is possible to restore the previous behavior by replacing uses of <code>dfx generate</code> with e.g. <code>dfx generate &amp;&amp; find src/declarations -type f -exec perl -i -pe 's|@dfinity/|@icp-sdk/core/|g' {} +</code>.<br> Most projects will want to substitute this in the frontend's <code>package.json</code>, in the <code>"prebuild"</code> step.</p> <h3>feat: support for canister ID migration</h3> <p>Canister ID migration can be performed using <code>dfx canister migrate-id</code><br> and its status can be checked out using <code>dfx canister migration-status</code>.</p> <h3>feat: Wasm optimization failure issues a warning instead of error</h3> <p>The optimization functionality provided by `ic_wasm::optimize" cannot handle Wasm modules that contains 64-bit table.<br> Instead of blocking the build, such optimization failure will issue a warning.</p> <h3>fix: prevent panic on terminals with limited color support</h3> <p>Fixed a panic that could occur when running <code>dfx</code> on terminals lacking color support. The <code>term</code> crate has been replaced with raw ANSI escape codes, and colors are now only emitted when stderr is a TTY and the <code>NO_COLOR</code> environment variable is not set.</p> <h2>Dependencies</h2> <h3>Motoko</h3> <p>Updated Motoko to <a href="https://github.com/dfinity/motoko/releases/tag/1.1.0">1.1.0</a></p> <h3>Replica</h3> <p>Updated replica to commit b0a37d0119a5df1dad84e50dc8717b77978d8f04.<br> This incorporates the following executed proposals:</p> <ul> <li><a href="https://dashboard.internetcomputer.org/proposal/139937" rel="nofollow">139937</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139766" rel="nofollow">139766</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139674" rel="nofollow">139674</a></li> </ul> <h3>Frontend canister</h3> <ul> <li>Module hash: 04e565b3425fe7510ee16b02adcfe3f01abc9a2725c82a21cb08969241debd62</li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3908375072" data-permission-text="Title is private" data-url="https://github.com/dfinity/sdk/issues/4474" data-hovercard-type="pull_request" data-hovercard-url="/dfinity/sdk/pull/4474/hovercard" href="https://github.com/dfinity/sdk/pull/4474">#4474</a></li> </ul> lwshang tag:github.com,2008:Repository/198344153/0.31.0-beta.1 2026-01-22T16:24:40Z 0.31.0-beta.1 <h3>chore!: <code>dfx generate</code> now imports <code>@icp-sdk/core</code> instead of <code>@dfinity/</code> packages</h3> <p>It is possible to restore the previous behavior by replacing uses of <code>dfx generate</code> with e.g. <code>dfx generate &amp;&amp; find src/declarations -type f -exec perl -i -pe 's|@dfinity/|@icp-sdk/core/|g' {} +</code>.<br> Most projects will want to substitute this in the frontend's <code>package.json</code>, in the <code>"prebuild"</code> step.</p> <h3>feat: support for canister ID migration</h3> <p>Canister ID migration can be performed using <code>dfx canister migrate-id</code><br> and its status can be checked out using <code>dfx canister migration-status</code>.</p> <h3>feat: Wasm optimization failure issues a warning instead of error</h3> <p>The optimization functionality provided by `ic_wasm::optimize" cannot handle Wasm modules that contains 64-bit table.<br> Instead of blocking the build, such optimization failure will issue a warning.</p> <h3>fix: prevent panic on terminals with limited color support</h3> <p>Fixed a panic that could occur when running <code>dfx</code> on terminals lacking color support. The <code>term</code> crate has been replaced with raw ANSI escape codes, and colors are now only emitted when stderr is a TTY and the <code>NO_COLOR</code> environment variable is not set.</p> <h2>Dependencies</h2> <h3>Motoko</h3> <p>Updated Motoko to <a href="https://github.com/dfinity/motoko/releases/tag/1.0.0">1.0.0</a></p> <h3>Replica</h3> <p>Updated replica to commit b0a37d0119a5df1dad84e50dc8717b77978d8f04.<br> This incorporates the following executed proposals:</p> <ul> <li><a href="https://dashboard.internetcomputer.org/proposal/139937" rel="nofollow">139937</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139766" rel="nofollow">139766</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139674" rel="nofollow">139674</a></li> </ul> <h3>Frontend canister</h3> <ul> <li>Module hash: 2830d9934ea6ec87e35e3a8b56dda562a3b09c1f94cd1fa3c0db3c2e41a4340c</li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3788210658" data-permission-text="Title is private" data-url="https://github.com/dfinity/sdk/issues/4455" data-hovercard-type="pull_request" data-hovercard-url="/dfinity/sdk/pull/4455/hovercard" href="https://github.com/dfinity/sdk/pull/4455">#4455</a></li> </ul> github-actions[bot] tag:github.com,2008:Repository/198344153/0.31.0-beta.0 2026-01-15T16:24:47Z 0.31.0-beta.0 <h3>chore!: <code>dfx generate</code> now imports <code>@icp-sdk/core</code> instead of <code>@dfinity/</code> packages</h3> <p>It is possible to restore the previous behavior by replacing uses of <code>dfx generate</code> with e.g. <code>dfx generate &amp;&amp; find src/declarations -type f -exec perl -i -pe 's|@dfinity/|@icp-sdk/core/|g' {} +</code>.<br> Most projects will want to substitute this in the frontend's <code>package.json</code>, in the <code>"prebuild"</code> step.</p> <h3>feat: support for canister ID migration</h3> <p>Canister ID migration can be performed using <code>dfx canister migrate-id</code><br> and its status can be checked out using <code>dfx canister migration-status</code>.</p> <h3>feat: Wasm optimization failure issues a warning instead of error</h3> <p>The optimization functionality provided by `ic_wasm::optimize" cannot handle Wasm modules that contains 64-bit table.<br> Instead of blocking the build, such optimization failure will issue a warning.</p> <h3>fix: prevent panic on terminals with limited color support</h3> <p>Fixed a panic that could occur when running <code>dfx</code> on terminals lacking color support. The <code>term</code> crate has been replaced with raw ANSI escape codes, and colors are now only emitted when stderr is a TTY and the <code>NO_COLOR</code> environment variable is not set.</p> <h2>Dependencies</h2> <h3>Motoko</h3> <p>Updated Motoko to <a href="https://github.com/dfinity/motoko/releases/tag/1.0.0">1.0.0</a></p> <h3>Replica</h3> <p>Updated replica to elected commit 035a2c7a2b19bc7ce7c4d977169583eb64b0e3cb.<br> This incorporates the following executed proposals:</p> <ul> <li><a href="https://dashboard.internetcomputer.org/proposal/139937" rel="nofollow">139937</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139766" rel="nofollow">139766</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139674" rel="nofollow">139674</a></li> </ul> <h3>Frontend canister</h3> <ul> <li>Module hash: 2830d9934ea6ec87e35e3a8b56dda562a3b09c1f94cd1fa3c0db3c2e41a4340c</li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3788210658" data-permission-text="Title is private" data-url="https://github.com/dfinity/sdk/issues/4455" data-hovercard-type="pull_request" data-hovercard-url="/dfinity/sdk/pull/4455/hovercard" href="https://github.com/dfinity/sdk/pull/4455">#4455</a></li> </ul> github-actions[bot] tag:github.com,2008:Repository/198344153/0.30.2 2026-01-23T13:34:28Z 0.30.2 <h3>Improve frontend canister sync logic</h3> <p>Previously, committing frontend canister changes happened in multiple batches defined by simple heuristics that would likely not exceed the ingress message size limit.<br> Now, the ingress message size limit is respected more explicitly, and also a limit of total content size per batch since all content in the batch newly gets hashed in the canister.</p> <h2>Dependencies</h2> <h3>Frontend canister</h3> <p>Sets the <code>ic_env</code> cookie for all HTML files only if the canister environment changed in the <code>commit_batch</code> method.</p> <p>Use canister self-calls to avoid hitting instruction limits during <code>commit_batch</code>, <code>compute_evidence</code>, and <code>compute_state_hash</code>.</p> <ul> <li>Module hash: 63d122d0149a29f4e48603efdd7d2bce656a6a83bac1e3207897c68e8e225bb6</li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3781791471" data-permission-text="Title is private" data-url="https://github.com/dfinity/sdk/issues/4450" data-hovercard-type="pull_request" data-hovercard-url="/dfinity/sdk/pull/4450/hovercard" href="https://github.com/dfinity/sdk/pull/4450">#4450</a></li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3757932469" data-permission-text="Title is private" data-url="https://github.com/dfinity/sdk/issues/4446" data-hovercard-type="pull_request" data-hovercard-url="/dfinity/sdk/pull/4446/hovercard" href="https://github.com/dfinity/sdk/pull/4446">#4446</a></li> </ul> <h3>Motoko</h3> <p>Updated Motoko to <a href="https://github.com/dfinity/motoko/releases/tag/0.16.3">0.16.3</a></p> <h3>Candid</h3> <p>Updated candid_parser to 0.2.4.</p> github-actions[bot] tag:github.com,2008:Repository/198344153/0.30.2-beta.2 2026-01-08T15:33:23Z 0.30.2-beta.2 No content. github-actions[bot] tag:github.com,2008:Repository/198344153/0.30.2-beta.1 2025-12-23T18:26:32Z 0.30.2-beta.1 No content. github-actions[bot] tag:github.com,2008:Repository/198344153/0.30.2-beta.0 2025-12-19T12:37:57Z 0.30.2-beta.0 <h3>Improve frontend canister sync logic</h3> <p>Previously, committing frontend canister changes happened in multiple batches defined by simple heuristics that would likely not exceed the ingress message size limit.<br> Now, the ingress message size limit is respected more explicitly, and also a limit of total content size per batch since all content in the batch newly gets hashed in the canister.</p> <h2>Dependencies</h2> <h3>Motoko</h3> <p>Updated Motoko to <a href="https://github.com/dfinity/motoko/releases/tag/0.16.3">0.16.3</a></p> <h3>Candid</h3> <p>Updated candid_parser to 0.2.4.</p> github-actions[bot] tag:github.com,2008:Repository/198344153/0.30.1 2026-01-23T13:50:30Z 0.30.1 <h3>feat: asset sync now prints the target asset canister state hash in <code>--verbose</code> mode</h3> <p>If an asset canister is updated and <code>--verbose</code> is enabled, <code>dfx</code> will now print the state hash of the local assets before syncing. Calling <code>compute_state_hash</code> on the asset canister after syncing will eventually return the same hash.</p> <h3>feat: support dogecoin for the local dev environment</h3> <p>You can now launch a network with <code>dfx start --enable-dogeoin</code> to run the dogecoin<br> integration locally.</p> <h3>feat: improved the canister snapshot download/upload feature</h3> <p>Improved the canister snapshot download/upload feature by</p> <ul> <li>adding progress bars to snapshot download/upload</li> <li>streaming snapshot download/upload directly to/from disk.</li> <li>supporting download/upload with resuming.</li> <li>supporting download/upload with concurrency, default to 3 tasks in parallel.</li> </ul> <h3>fix: use <code>pocket-ic</code> to init BTC canisters</h3> <p>The custom logic was prone to becoming outdated, such as not adapting to changing cycles fees.<br> By using <code>pocket-ic</code>, which gets updated frequently, the BTC integration is significanly less likely to break.</p> <h3>fix: <code>dfx start --enable-bitcoin</code> will add <code>--bitcoin-node 127.0.0.1:18444</code> unless nodes are specified in dfx.json</h3> <h3>chore: Bump cdk to 0.19 in project template.</h3> <h2>Dependencies</h2> <h3>Replica</h3> <p>Updated replica to elected commit 724ae4101bfdd8d4443126a6a8b1ec5ca9b68a12.</p> <p>This incorporates the following executed proposals:</p> <ul> <li><a href="https://dashboard.internetcomputer.org/proposal/139570" rel="nofollow">139570</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139480" rel="nofollow">139480</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139403" rel="nofollow">139403</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139317" rel="nofollow">139317</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139192" rel="nofollow">139192</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139079" rel="nofollow">139079</a></li> </ul> <h3>Frontend canister</h3> <h4>feat: <code>list</code> returns more info about assets</h4> <p>Asset info now contains the fields <code>max_age: opt nat64;</code>, <code>headers: opt vec HeaderField;</code>, <code>allow_raw_access: opt bool;</code>, and ``is_aliased: opt bool;` in addition to the previously returned ones.</p> <h4>feat!: <code>list</code> is now paginated</h4> <p><code>list</code> now returns info about up to 100 assets instead of all assets in the canister. <code>start</code> allows specifying the offset at which the list of assets should start. <code>length</code> allows specifying a smaller limit if e.g. headers are too large to return the default number of assets. The full argument to <code>list</code> is now <code>(record { start: opt nat; length: opt nat })</code>.</p> <h4>feat: <code>compute_state_hash</code></h4> <p>The function <code>compute_state_hash</code> works similar to <code>compute_evidence</code>, but instead of computing a hash over a batch of changes, it computes a hash over the full asset canister content. This can be used to verify the integrity of assets e.g. between a live and a local deployment. (This will only work if builds are deterministic. If there are e.g. timestamps hidden in filenames then hashes will not match.)</p> <h4>feat: <code>get_state_info</code> returns last asset change timestamp and state hash</h4> <ul> <li>Module hash: 15a6366a4823baf994f314a55ddbdda333dff11cbcc5114caebfe444e5eae3b6</li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3705264632" data-permission-text="Title is private" data-url="https://github.com/dfinity/sdk/issues/4434" data-hovercard-type="pull_request" data-hovercard-url="/dfinity/sdk/pull/4434/hovercard" href="https://github.com/dfinity/sdk/pull/4434">#4434</a></li> </ul> github-actions[bot] tag:github.com,2008:Repository/198344153/0.30.1-beta.2 2026-01-23T13:50:27Z 0.30.1-beta.2 <h3>feat: asset sync now prints the target asset canister state hash in <code>--verbose</code> mode</h3> <p>If an asset canister is updated and <code>--verbose</code> is enabled, <code>dfx</code> will now print the state hash of the local assets before syncing. Calling <code>compute_state_hash</code> on the asset canister after syncing will eventually return the same hash.</p> <h3>feat: support dogecoin for the local dev environment</h3> <p>You can now launch a network with <code>dfx start --enable-dogeoin</code> to run the dogecoin<br> integration locally.</p> <h3>feat: improved the canister snapshot download/upload feature</h3> <p>Improved the canister snapshot download/upload feature by</p> <ul> <li>adding progress bars to snapshot download/upload</li> <li>streaming snapshot download/upload directly to/from disk.</li> <li>supporting download/upload with resuming.</li> <li>supporting download/upload with concurrency, default to 3 tasks in parallel.</li> </ul> <h3>fix: use <code>pocket-ic</code> to init BTC canisters</h3> <p>The custom logic was prone to becoming outdated, such as not adapting to changing cycles fees.<br> By using <code>pocket-ic</code>, which gets updated frequently, the BTC integration is significanly less likely to break.</p> <h3>fix: <code>dfx start --enable-bitcoin</code> will add <code>--bitcoin-node 127.0.0.1:18444</code> unless nodes are specified in dfx.json</h3> <h3>chore: Bump cdk to 0.19 in project template.</h3> <h2>Dependencies</h2> <h3>Replica</h3> <p>Updated replica to elected commit 724ae4101bfdd8d4443126a6a8b1ec5ca9b68a12.</p> <p>This incorporates the following executed proposals:</p> <ul> <li><a href="https://dashboard.internetcomputer.org/proposal/139570" rel="nofollow">139570</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139480" rel="nofollow">139480</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139403" rel="nofollow">139403</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139317" rel="nofollow">139317</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139192" rel="nofollow">139192</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139079" rel="nofollow">139079</a></li> </ul> <h3>Frontend canister</h3> <h4>feat: <code>list</code> returns more info about assets</h4> <p>Asset info now contains the fields <code>max_age: opt nat64;</code>, <code>headers: opt vec HeaderField;</code>, <code>allow_raw_access: opt bool;</code>, and ``is_aliased: opt bool;` in addition to the previously returned ones.</p> <h4>feat!: <code>list</code> is now paginated</h4> <p><code>list</code> now returns info about up to 100 assets instead of all assets in the canister. <code>start</code> allows specifying the offset at which the list of assets should start. <code>length</code> allows specifying a smaller limit if e.g. headers are too large to return the default number of assets. The full argument to <code>list</code> is now <code>(record { start: opt nat; length: opt nat })</code>.</p> <h4>feat: <code>compute_state_hash</code></h4> <p>The function <code>compute_state_hash</code> works similar to <code>compute_evidence</code>, but instead of computing a hash over a batch of changes, it computes a hash over the full asset canister content. This can be used to verify the integrity of assets e.g. between a live and a local deployment. (This will only work if builds are deterministic. If there are e.g. timestamps hidden in filenames then hashes will not match.)</p> <h4>feat: <code>get_state_info</code> returns last asset change timestamp and state hash</h4> <ul> <li>Module hash: 15a6366a4823baf994f314a55ddbdda333dff11cbcc5114caebfe444e5eae3b6</li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3705264632" data-permission-text="Title is private" data-url="https://github.com/dfinity/sdk/issues/4434" data-hovercard-type="pull_request" data-hovercard-url="/dfinity/sdk/pull/4434/hovercard" href="https://github.com/dfinity/sdk/pull/4434">#4434</a></li> </ul> github-actions[bot] tag:github.com,2008:Repository/198344153/0.30.1-beta.1 2026-01-23T13:50:26Z 0.30.1-beta.1 <h3>feat: asset sync now prints the target asset canister state hash in <code>--verbose</code> mode</h3> <p>If an asset canister is updated and <code>--verbose</code> is enabled, <code>dfx</code> will now print the state hash of the local assets before syncing. Calling <code>compute_state_hash</code> on the asset canister after syncing will eventually return the same hash.</p> <h3>feat: support dogecoin for the local dev environment</h3> <p>You can now launch a network with <code>dfx start --enable-dogeoin</code> to run the dogecoin<br> integration locally.</p> <h3>feat: improved the canister snapshot download/upload feature</h3> <p>Improved the canister snapshot download/upload feature by</p> <ul> <li>adding progress bars to snapshot download/upload</li> <li>streaming snapshot download/upload directly to/from disk.</li> <li>supporting download/upload with resuming.</li> <li>supporting download/upload with concurrency, default to 3 tasks in parallel.</li> </ul> <h3>fix: use <code>pocket-ic</code> to init BTC canisters</h3> <p>The custom logic was prone to becoming outdated, such as not adapting to changing cycles fees.<br> By using <code>pocket-ic</code>, which gets updated frequently, the BTC integration is significanly less likely to break.</p> <h3>fix: <code>dfx start --enable-bitcoin</code> will add <code>--bitcoin-node 127.0.0.1:18444</code> unless nodes are specified in dfx.json</h3> <h3>chore: Bump cdk to 0.19 in project template.</h3> <h2>Dependencies</h2> <h3>Replica</h3> <p>Updated replica to elected commit 724ae4101bfdd8d4443126a6a8b1ec5ca9b68a12.</p> <p>This incorporates the following executed proposals:</p> <ul> <li><a href="https://dashboard.internetcomputer.org/proposal/139570" rel="nofollow">139570</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139480" rel="nofollow">139480</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139403" rel="nofollow">139403</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139317" rel="nofollow">139317</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139192" rel="nofollow">139192</a></li> <li><a href="https://dashboard.internetcomputer.org/proposal/139079" rel="nofollow">139079</a></li> </ul> <h3>Frontend canister</h3> <h4>feat: <code>list</code> returns more info about assets</h4> <p>Asset info now contains the fields <code>max_age: opt nat64;</code>, <code>headers: opt vec HeaderField;</code>, <code>allow_raw_access: opt bool;</code>, and ``is_aliased: opt bool;` in addition to the previously returned ones.</p> <h4>feat!: <code>list</code> is now paginated</h4> <p><code>list</code> now returns info about up to 100 assets instead of all assets in the canister. <code>start</code> allows specifying the offset at which the list of assets should start. <code>length</code> allows specifying a smaller limit if e.g. headers are too large to return the default number of assets. The full argument to <code>list</code> is now <code>(record { start: opt nat; length: opt nat })</code>.</p> <h4>feat: <code>compute_state_hash</code></h4> <p>The function <code>compute_state_hash</code> works similar to <code>compute_evidence</code>, but instead of computing a hash over a batch of changes, it computes a hash over the full asset canister content. This can be used to verify the integrity of assets e.g. between a live and a local deployment. (This will only work if builds are deterministic. If there are e.g. timestamps hidden in filenames then hashes will not match.)</p> <ul> <li>Module hash: 51e80aa7ecbb94ba477bbc910c934794db674d9c441c3f013b8e09390facb389</li> <li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3684910968" data-permission-text="Title is private" data-url="https://github.com/dfinity/sdk/issues/4428" data-hovercard-type="pull_request" data-hovercard-url="/dfinity/sdk/pull/4428/hovercard" href="https://github.com/dfinity/sdk/pull/4428">#4428</a></li> </ul> github-actions[bot]