Skip to content

Releases: dfinity/pocketic

Version 13.0.0

23 Mar 13:52
e9a67c2

Choose a tag to compare

13.0.0 - 2026-03-23

Added

  • The endpoint /instances/ takes an additional optional field mainnet_nns_subnet_id specifying that the NNS subnet should be created with the mainnet NNS subnet ID.
  • The CLI option --hard-ttl to 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_gateway endpoint and the http_gateway_config field of the /instances/ endpoint)
    takes a new optional field domain_custom_provider_local_file specifying 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 SubnetKind and a new field in SubnetConfigSet and ExtendedSubnetConfigSet.
  • A new optional field to specify subnet admins in SubnetSpec and SubnetConfig.
    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 SubnetSpec and SubnetConfig.
    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 the domains field 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 the canisterId query parameter). When domains is 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

26 Jan 11:44
d6026d2

Choose a tag to compare

12.0.0 - 2026-01-23

Added

  • New CLI option --mainnet-registry-version to 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-table to 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 blockmakers in 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

05 Dec 09:01
c18ce95

Choose a tag to compare

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>.
    The state_label and op_id are returned by ApiResponse::Started {state_label, op_id}.
  • New ICP features bitcoin, dogecoin, and canister_migration can be specified in the optional field icp_features in the argument of the endpoint /instances/.
  • Support for Dogecoin: PocketIC server interacts with a dogecoind process listening at an address and port specified in a new optional field dogecoind_addr of the endpoint /instances/.
  • The endpoint /instances/<instance_id>/update/canister_snapshot_download to download a canister snapshot to a given snapshot directory.
  • The endpoint /instances/<instance_id>/update/canister_snapshot_upload to upload a canister snapshot from a given snapshot directory.
  • New CLI option --mainnet-routing-table to 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-table to 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

12 Sep 11:33
10458c5

Choose a tag to compare

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/tick and /instances/<instance_id>/read/ingress_status in a loop.
  • The argument of the endpoint /instances/ takes an additional optional field icp_features specifying 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 field incomplete_state specifying 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 field initial_time specifying 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 field icp_config specifying which features not available on the ICP mainnet should be available
    in the newly created PocketIC instance (the field used to be called nonmainnet_features and be of a simple Boolean type before).
  • The argument of the endpoint /instances/ takes an additional optional field http_gateway_config specifying 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

06 Jun 08:57
e780686

Choose a tag to compare

9.0.3 - 2025-06-06

Changed

  • The endpoint /instances/<instance_id>/auto_progress sets 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/tick and /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

27 May 08:32
4b61f08

Choose a tag to compare

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

02 May 08:12
46d3b83

Choose a tag to compare

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

24 Apr 10:20
b6e0ba5

Choose a tag to compare

9.0.0 - 2025-04-23

Added

  • The GET endpoint /instances/<instance_id>/auto_progress that 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

27 Feb 13:47
fdd2a53

Choose a tag to compare

8.0.0 - 2025-02-26

Added

  • New endpoint /instances/<instance_id>/read/ingress_status to 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_time to set the current certified time on all subnets of the PocketIC instance.
  • The endpoint /instances/<instance_id>/update/tick takes an argument optionally containing the blockmaker and failed blockmakers
    for every subnet used by the endpoint node_metrics_history of the management canister.

Fixed

  • Canisters created via provisional_create_canister_with_cycles with the management canister ID as the effective canister ID
    are created on an arbitrary subnet.

Changed

  • The response type RawSubmitIngressResult is replaced by Result<RawMessageId, RejectResponse>.
  • The response types RawWasmResult and UserError in RawCanisterResult are replaced by Vec<u8> and RejectResponse.

Removed

  • The endpoint /instances/<instance_id>/update/execute_ingress_message:
    use the two endpoints /instances/<instance_id>/update/submit_ingress_message and /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

14 Nov 14:38
2d76acb

Choose a tag to compare

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 ID g4xu7-jiaaa-aaaan-aaaaq-cai) on the bitcoin subnet and configured with Network::Regtest
    and a bitcoind process 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>/_/topology returning the topology of the PocketIC instance.
  • New CLI option --log-levels to specify the log levels for PocketIC server logs (defaults to pocket_ic_server=info,tower_http=info,axum::rejection=trace).
  • New endpoint /instances/<instance_id/read/get_controllers to get the controllers of a canister.

Fixed

  • Renamed dfx_test_key1 tECDSA and tSchnorr keys to dfx_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 /_/dashboard independently
    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 1ns if the time of the corresponding PocketIC instance did not increase since the last round.
  • The endpoint /instances/<instance_id>/update/set_time returns 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-file instead.

Full changelog: CHANGELOG.md
Commit hash: 172f8c78653c93ad101af75b94251439b4ccf098