tag:github.com,2008:https://github.com/dfinity/sdk/releasesRelease notes from sdk2026-03-02T22:42:25Ztag:github.com,2008:Repository/198344153/0.31.02026-03-03T16:15:35Z0.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 && 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>lwshangtag:github.com,2008:Repository/198344153/0.31.0-beta.12026-01-22T16:24:40Z0.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 && 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.02026-01-15T16:24:47Z0.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 && 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.22026-01-23T13:34:28Z0.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.22026-01-08T15:33:23Z0.30.2-beta.2No content.github-actions[bot]tag:github.com,2008:Repository/198344153/0.30.2-beta.12025-12-23T18:26:32Z0.30.2-beta.1No content.github-actions[bot]tag:github.com,2008:Repository/198344153/0.30.2-beta.02025-12-19T12:37:57Z0.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.12026-01-23T13:50:30Z0.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.22026-01-23T13:50:27Z0.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.12026-01-23T13:50:26Z0.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]