Releases: dfinity/pocketic
Version 13.0.0
13.0.0 - 2026-03-23
Added
- The endpoint
/instances/takes an additional optional fieldmainnet_nns_subnet_idspecifying that the NNS subnet should be created with the mainnet NNS subnet ID. - The CLI option
--hard-ttlto specify that the PocketIC server should perform a hard exit after the provided number of seconds since its launch. - The HTTP gateway configuration (used in the
/http_gatewayendpoint and thehttp_gateway_configfield of the/instances/endpoint)
takes a new optional fielddomain_custom_provider_local_filespecifying a path to a local file that maps custom domain names to canister IDs.
The file format is one mapping per line:<domain>:<canister-id>(e.g.,my-app.example.com:rdmx6-jaaaa-aaaaa-aaadq-cai). - A new cloud engine subnet kind: a new variant in
SubnetKindand a new field inSubnetConfigSetandExtendedSubnetConfigSet. - A new optional field to specify subnet admins in
SubnetSpecandSubnetConfig.
The field can only be set for application subnets and cloud engines on a "free" cost schedule (see below)! - A new field to specify subnet cost schedule in
SubnetSpecandSubnetConfig.
The field can only be set to a non-default value for application subnets and cloud engines!
Moreover, the field has to be set to the "free" cost schedule on cloud engines!
Changed
- All subnets with mainnet canister ranges but the NNS subnet are always created with mainnet subnet IDs.
- The HTTP gateway skips authority validation (
--domain-skip-authority-validation) when thedomainsfield of the HTTP gateway
configuration is not set (i.e.,null/None), allowing requests from any domain to be served as long as the canister ID can be
resolved from the request (e.g., via a subdomain or thecanisterIdquery parameter). Whendomainsis explicitly provided,
authority validation is enforced and only requests matching the configured domains are accepted.
Full changelog: CHANGELOG.md
Commit hash: 73833bd7be577ed23403f9b23d48aa16079c23b7
Version 12.0.0
12.0.0 - 2026-01-23
Added
- New CLI option
--mainnet-registry-versionto specify the mainnet registry version to use for fetching the mainnet routing table
using the existing CLI option--fetch-mainnet-routing-table. Defaults to the latest registry version.
Changed
- The CLI option
--fetch-mainnet-routing-tableto specify that the mainnet routing table should be fetched from the mainnet registry
does not require a file path specified as--mainnet-routing-table. - The field
blockmakersin the argument of the endpoint/instances/<instance_id>/update/tick
has been flattened into an optional vector of blockmakers per subnet.
Full changelog: CHANGELOG.md
Commit hash: 08eeaf3054fd22969e46f89eb40030d15d85710e
Version 11.0.0
11.0.0 - 2025-12-05
Added
- New DELETE endpoint
/prune_graph/<state_label>/<op_id>for pruning the result of a long-running operation.
This endpoint should be called after successfully reading the result using the GET endpoint/read_graph/<state_label>/<op_id>.
Thestate_labelandop_idare returned byApiResponse::Started {state_label, op_id}. - New ICP features
bitcoin,dogecoin, andcanister_migrationcan be specified in the optional fieldicp_featuresin the argument of the endpoint/instances/. - Support for Dogecoin: PocketIC server interacts with a
dogecoindprocess listening at an address and port specified in a new optional fielddogecoind_addrof the endpoint/instances/. - The endpoint
/instances/<instance_id>/update/canister_snapshot_downloadto download a canister snapshot to a given snapshot directory. - The endpoint
/instances/<instance_id>/update/canister_snapshot_uploadto upload a canister snapshot from a given snapshot directory. - New CLI option
--mainnet-routing-tableto specify a path to a JSON file containing the mainnet routing table (used to create canisters with mainnet canister IDs).
The PocketIC server contains a hard-coded mainnet routing table used if this option is not provided. - New CLI option
--fetch-mainnet-routing-tableto specify that the mainnet routing table should be fetched from the mainnet registry
and written to the file path specified as--mainnet-routing-table.
Full changelog: CHANGELOG.md
Commit hash: d13be5a27b3331c4dc8831593eed0e3ec08b260f
Version 10.0.0
10.0.0 - 2025-09-12
Added
- The endpoint
/instances/<instance_id>/update/await_ingress_message(execute rounds on the PocketIc instance until the message is executed):
to fix a performance regression when using the two endpoints/instances/<instance_id>/update/tickand/instances/<instance_id>/read/ingress_statusin a loop. - The argument of the endpoint
/instances/takes an additional optional fieldicp_featuresspecifying ICP features (implemented by system canisters) to be enabled in the newly created PocketIC instance. - The argument of the endpoint
/instances/takes an additional optional fieldincomplete_statespecifying if incomplete state (e.g., resulting from not deleting a PocketIC instance gracefully) is allowed. - The argument of the endpoint
/instances/takes an additional optional fieldinitial_timespecifying the initial timestamp of the newly created instance or
if the new instance should make progress automatically, i.e., if PocketIC should periodically update the time of the instance to the real time and execute rounds on the subnets. - The argument of the endpoint
/instances/takes an optional fieldicp_configspecifying which features not available on the ICP mainnet should be available
in the newly created PocketIC instance (the field used to be callednonmainnet_featuresand be of a simple Boolean type before). - The argument of the endpoint
/instances/takes an additional optional fieldhttp_gateway_configspecifying that an HTTP gateway with the given configuration
should be created for the newly created instance.
Full changelog: CHANGELOG.md
Commit hash: a299620cd5e73ed21b415f2ebe3da0bb43a3649d
Version 9.0.3
9.0.3 - 2025-06-06
Changed
- The endpoint
/instances/<instance_id>/auto_progresssets the (certified) time of the PocketIC instance
to the current system time before starting to execute rounds automatically.
Removed
- The endpoint
/instances/<instance_id>/update/await_ingress_message:
use the two endpoints/instances/<instance_id>/update/tickand/instances/<instance_id>/read/ingress_status
to execute a round and fetch the status of the update call instead.
Full changelog: CHANGELOG.md
Commit hash: 8f1ef8ce78361adbc09aea4c2f0bce701c9ddb4d
Version 9.0.2
9.0.2 - 2025-05-27
Fixed
- Crash when creating a canister with a specified id on a PocketIC instance created from an existing PocketIC state.
Full changelog: CHANGELOG.md
Commit hash: 16825c5cbff83a51983d849b60c9d26b3268bbb6
Version 9.0.1
9.0.1 - 2025-04-30
Fixed
- Crash when creating multiple instances with the same subnet state directory simultaneously.
Full changelog: CHANGELOG.md
Commit hash: f195ba756bc3bf170a2888699e5e74101fdac6ba
Version 9.0.0
9.0.0 - 2025-04-23
Added
- The
GETendpoint/instances/<instance_id>/auto_progressthat returns whether the automatic progress was enabled for the PocketIC instance. - Support for VetKd if nonmainnet features are enabled on a PocketIC instance.
Changed
- The II canister always belongs to the dedicated II subnet (the II canister used to belong to the NNS subnet if no II subnet was specified).
- The II subnet size to be 34 nodes as on the ICP mainnet.
Full changelog: CHANGELOG.md
Commit hash: f90ff0b1433b110911aca96cf874b86073e5183c
Version 8.0.0
8.0.0 - 2025-02-26
Added
- New endpoint
/instances/<instance_id>/read/ingress_statusto fetch the status of an update call submitted through an ingress message.
If an optional caller is provided, the status of the update call is known, but the update call was submitted by a different caller, then an error is returned. - New endpoint
/instances/<instance_id>/update/set_certified_timeto set the current certified time on all subnets of the PocketIC instance. - The endpoint
/instances/<instance_id>/update/ticktakes an argument optionally containing the blockmaker and failed blockmakers
for every subnet used by the endpointnode_metrics_historyof the management canister.
Fixed
- Canisters created via
provisional_create_canister_with_cycleswith the management canister ID as the effective canister ID
are created on an arbitrary subnet.
Changed
- The response type
RawSubmitIngressResultis replaced byResult<RawMessageId, RejectResponse>. - The response types
RawWasmResultandUserErrorinRawCanisterResultare replaced byVec<u8>andRejectResponse.
Removed
- The endpoint
/instances/<instance_id>/update/execute_ingress_message:
use the two endpoints/instances/<instance_id>/update/submit_ingress_messageand/instances/<instance_id>/update/await_ingress_message
to submit and then await an ingress message instead.
Full changelog: CHANGELOG.md
Commit hash: 6e64281a8e0b4faa1d859f115fc138eee6e136f8
Version 7.0.0
7.0.0 - 2024-11-13
Added
- Support for IC Bitcoin API via the management canister if the bitcoin canister is installed as the bitcoin testnet canister
(canister IDg4xu7-jiaaa-aaaan-aaaaq-cai) on the bitcoin subnet and configured withNetwork::Regtest
and abitcoindprocess is listening at an address and port specified in an additional argument
of the endpoint/instances/to create a new PocketIC instance. - New endpoint
/instances/<instance_id>/_/topologyreturning the topology of the PocketIC instance. - New CLI option
--log-levelsto specify the log levels for PocketIC server logs (defaults topocket_ic_server=info,tower_http=info,axum::rejection=trace). - New endpoint
/instances/<instance_id/read/get_controllersto get the controllers of a canister.
Fixed
- Renamed
dfx_test_key1tECDSA and tSchnorr keys todfx_test_key.
Changed
- The PocketIC HTTP gateway routes requests whose paths start with
/_/and for which no canister ID can be found
directly to the PocketIC instance/replica (this only used to apply to requests for/_/dashboardindependently
of whether a canister ID could be found). - Subnet ids can be specified in
SubnetSpecs for all subnet kinds. - The certified time of a round is only bumped by
1nsif the time of the corresponding PocketIC instance did not increase since the last round. - The endpoint
/instances/<instance_id>/update/set_timereturns an error if the time of a PocketIC instance is set into the past. - Subnet sizes to match the subnet sizes on the ICP mainnet: II from 28 to 31 nodes, Fiduciary from 28 to 34 nodes.
Removed
- The CLI option
--pid: use the CLI option--port-fileinstead.
Full changelog: CHANGELOG.md
Commit hash: 172f8c78653c93ad101af75b94251439b4ccf098