Release Notes
- feat: a canister environment variable's value can now be read from a file, by writing
var: { path: <file> } in place of var: value. The path resolves against the canister's directory — including in an environment override, matching init_args — and surrounding whitespace is trimmed off the file's contents. The file is read when the project is loaded, so a missing file fails before anything is deployed. icp project bundle writes the value into the bundled manifest inline, rejecting a file outside the project as it does for other manifest file references.
- fix:
icp network start now explains why a Docker-based network failed to come up. A container that exited before the network was ready was reported as failed to watch docker container <id> for exit with an empty cause, discarding the actual reason (e.g. the gateway port already being taken); the container's output is now attached to the error.
- feat: Docker-based networks now show the launcher's output like non-containerized ones do. In the foreground the container's stdout and stderr are streamed to your terminal as it runs; in background mode
icp network start prints the docker logs -f <container-id> command to follow it. Previously container output was never shown at all — which on Windows, where the launcher always runs in a container, meant icp network start was silent.
- fix: a network launcher running in a container (
icp settings autocontainerize true, and always on Windows) now receives --verbose when icp -d is used, matching the non-containerized launcher.
Experimental
- feat(bundle):
icp project bundle now works on projects that declare dependencies:, which it previously refused outright. The bundle mirrors the workspace instead of flattening it: the root project's icp.yaml sits at the archive root, each dependency instance gets its own icp.yaml at the directory it occupies in the workspace, and the dependencies: declarations are preserved, each pointing at the directory its dependency occupies in the archive (the same path a plainly vendored layout already used). A shared (diamond) dependency is still a single instance, canister names stay as each project wrote them, and canister discovery (PUBLIC_CANISTER_ID:<alias>:<canister>) works in the extracted bundle exactly as it did in the source workspace.
- Every dependency must resolve to a directory inside the workspace root; one that resolves outside it (including through a symlink) is rejected, because the archive could not contain it. As a result, a vendored member that depends on a sibling cannot be bundled as a standalone project (e.g. via
ICP_PROJECT_ROOT) — bundle the workspace root instead.
- Projects with script sync steps still cannot be bundled, and the restriction now covers every project in the workspace.
Install icp-cli 1.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/dfinity/icp-cli/releases/download/v1.3.0/icp-cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/dfinity/icp-cli/releases/download/v1.3.0/icp-cli-installer.ps1 | iex"
Download icp-cli 1.3.0