Releases: dfinity/pocketic
Version 14.0.0
14.0.0 - 2026-05-26
Added
- The endpoint
/instances/takes an additional optional fielddisable_ingress_validationspecifying that
ingress validation is disabled for mainnet-like endpoints/instances/<instance_id>/api/...of the instance. - Support for canister signatures produced by the ICP mainnet in mainnet-like endpoints
/instances/<instance_id>/api/.... - A new test threshold keys subnet kind (
TestThresholdKeys): a new variant inSubnetKindand new fields inSubnetConfigSetandExtendedSubnetConfigSet.
It is an application subnet with 13 nodes holding threshold keys with namestest_key_1anddfx_test_keyfor all supported algorithms (ECDSA, Schnorr, VetKd).
Its canister range (z474k-xiaaa-aaaao-qaaaa-caitofxzgb-eaaaa-aaaao-7777q-cai) matches the mainnet subnetfuqsr-in2lc-zbcjj-ydmcw-pzq7h-4xm2z-pto4i-dcyee-5z4rz-x63ji-nae.
Changed
- The endpoints
/instances/<instance_id>/update/submit_ingress_messageand/instances/<instance_id>/read/query
accept an additional optional fieldsender_infoin the request body specifying additional information provided
by the canister with which the sender principal is associated. - The II and fiduciary subnets no longer hold threshold keys with names
test_key_1anddfx_test_key; these keys are now exclusively held by theTestThresholdKeyssubnet.
Full changelog: CHANGELOG.md
Commit hash: 73e1c9b03e4a6d49714243d90c1b766a35a9485a
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