Skip to content

Releases: dfinity/pocketic

Version 16.0.0

Choose a tag to compare

@mraszyk mraszyk released this 01 Sep 14:42
a980c33

16.0.0 - 2026-09-01

Added

  • The endpoint /instances/<instance_id>/update/mock_flexible_canister_http to mock the responses of the committee nodes
    of a pending flexible canister HTTP outcall, i.e. one made through the flexible_http_request management canister endpoint.
  • The endpoint /instances/<instance_id>/read/get_canister_http reports two additional fields for every pending canister HTTP
    outcall: replication, describing how the outcall is replicated across the nodes of its subnet (FullyReplicated,
    NonReplicated, or Flexible with the outcall's total_requests, min_responses, and max_responses), and
    pricing_version, reporting whether it is priced with the Legacy or the PayAsYouGo pricing model.
  • Enabling beta features (the field beta_features of icp_config when creating an instance) now enables the
    flexible_http_request management canister endpoint on subnets that charge for HTTP outcalls; without beta features that
    endpoint is only available on subnets where HTTP outcalls are free (system subnets and subnets with a free cycles cost
    schedule). Beta features also enable the pay-as-you-go pricing model, which flexible outcalls are always priced with and
    which an http_request can select through its pricing_version field.

Changed

  • The endpoint /instances/<instance_id>/auto_progress (and creating an instance with automatic progress enabled)
    only returns after the certified time of the PocketIC instance has been updated for the first time.
  • Mocked canister HTTP responses report the cycles their node actually spent on the outcall, instead of reporting no spend at
    all. This applies to /instances/<instance_id>/update/mock_canister_http and
    /instances/<instance_id>/update/mock_flexible_canister_http. The spend is derived from the size of the mocked response;
    unlike a real node, a mocked one is charged no response time, so what a mocked outcall costs does not depend on how fast the
    machine running the test is.
  • Mocking a canister HTTP response whose reject message exceeds 1 KiB now fails. Such a response is not one any node could have
    reported.
  • A node that cannot pay for gossiping its mocked reject reports an out-of-cycles reject instead of the mocked one, matching
    what a node of a real subnet does under pay-as-you-go pricing.

Full changelog: CHANGELOG.md
Commit hash: fc21803c3c3a8dd452b3b58b959751c41fecb89c

Version 15.0.0

Choose a tag to compare

@mraszyk mraszyk released this 26 Jun 12:34
07bfae0

15.0.0 - 2026-06-26

Added

  • The endpoint /instances/<instance_id>/update/delete_subnet to delete a subnet (non-named subnets only: application, cloud engine, system, or verified application subnets).
    If a state directory is configured for the instance, the deleted subnet's state directory is removed from disk.

Changed

  • Canister IDs allocated to newly created canisters without a specified canister ID.

Full changelog: CHANGELOG.md
Commit hash: 8258578e6212d445aeeafb71c1160fa4ea356d60

Version 14.0.0

Choose a tag to compare

@mraszyk mraszyk released this 27 May 10:46
d15ba7d

14.0.0 - 2026-05-26

Added

  • The endpoint /instances/ takes an additional optional field disable_ingress_validation specifying 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 in SubnetKind and new fields in SubnetConfigSet and ExtendedSubnetConfigSet.
    It is an application subnet with 13 nodes holding threshold keys with names test_key_1 and dfx_test_key for all supported algorithms (ECDSA, Schnorr, VetKd).
    Its canister range (z474k-xiaaa-aaaao-qaaaa-cai to fxzgb-eaaaa-aaaao-7777q-cai) matches the mainnet subnet fuqsr-in2lc-zbcjj-ydmcw-pzq7h-4xm2z-pto4i-dcyee-5z4rz-x63ji-nae.

Changed

  • The endpoints /instances/<instance_id>/update/submit_ingress_message and /instances/<instance_id>/read/query
    accept an additional optional field sender_info in 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_1 and dfx_test_key; these keys are now exclusively held by the TestThresholdKeys subnet.

Full changelog: CHANGELOG.md
Commit hash: 73e1c9b03e4a6d49714243d90c1b766a35a9485a

Version 13.0.0

Choose a tag to compare

@mraszyk mraszyk released this 23 Mar 13:52
e9a67c2

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

Choose a tag to compare

@mraszyk mraszyk released this 26 Jan 11:44
d6026d2

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

Choose a tag to compare

@mraszyk mraszyk released this 05 Dec 09:01
c18ce95

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

Choose a tag to compare

@mraszyk mraszyk released this 12 Sep 11:33
10458c5

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

Choose a tag to compare

@mraszyk mraszyk released this 06 Jun 08:57
e780686

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

Choose a tag to compare

@mraszyk mraszyk released this 27 May 08:32
4b61f08

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

Choose a tag to compare

@mraszyk mraszyk released this 02 May 08:12
46d3b83

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