Skip to main content
Arcium releases coordinate the CLI, Rust crates, TypeScript packages, and Arx node image. Start with versioning and compatibility to choose an upgrade path. For every upgrade, synchronize all Arcium components, then rebuild and test: each entry below lists additional release-specific actions.
October 23, 2026
Upgrade impact
  • Existing applications: No Arcis source changes from v0.15.0. Synchronize all Arcium dependencies, rebuild, and test. Several Arcis fixes make circuits compute what the same Rust code computes, so rerun your tests after rebuilding.
  • TypeScript applications: Aes128Cipher, Aes192Cipher, and Aes256Cipher now take a 12-byte nonce instead of an 8-byte one. Generate 12 random bytes and pass them to the program as the u128 nonce.
  • Node Operators: Update the Arx node image to arcium/arx-node:v0.16.0. Nodes now rebuild MXE public keys from chain, so the public-inputs mount and MXE_PUBLIC_KEYS_PATH are no longer read and can be removed. Keep the private-shares mount.
Changes
  • AES encryption: Adds Aes128Enc<C, T>, Aes192Enc<C, T>, and Aes256Enc<C, T> alongside the Rescue-based Enc<C, T>, for Shared and Mxe owners. .to_arcis() decrypts, and owner.from_arcis_aes128(data) (or _aes192, _aes256) encrypts. Each value keeps its natural byte width, so a u8 is one byte of ciphertext and no packing is needed. f64 and ArcisX25519Pubkey cannot be AES-encrypted. Queue ciphertexts with ArgBuilder::aes_encrypted_bytes::<N>(ciphertext), and read them from an account with ArgBuilder::packed_account. When the client public key is an instruction input, nodes cache the AES key shared with it, as they do for Rescue keys.
  • URL inputs: A computation can take a URL argument, queued with ArgBuilder::url(url, data_len). Each node fetches it, and the circuit receives the bytes as Unsynchronized<[u8; N]>. synchronize reconciles the nodes’ copies against an ArcisConstraint (equality, Ed25519 signatures, SHA-256, base64url, and And, Or, AtLeast, AtMost combinations) and returns None when no copy satisfies it. synchronize_unique also returns None when several different copies do. Check a source before deploying with arcium check-url <url> --data-len <bytes>.
  • Arcis: Adds array::from_ref and from_mut, slice::from_ref and from_mut, Cell::as_slice_of_cells, comparisons on bool and on references, Default for Range and RangeFull, range contains, and hand-written impl Copy. Fixes as casts of untyped integers (let n = 300; n as u8 now gives 44), the evaluation order of assignments and compound assignments, enum and Cell copies that shared storage with the original, and step_by and count edge cases. See supported operations.
  • Templates: arcium init adds an example #[test] to the encrypted-instructions template that runs the circuit on chosen inputs.
  • Performance: Divides by a secret with a Goldschmidt reciprocal instead of long division: u64 / u64 drops from 512 to 24 rounds and from 1.3B to 72M weight. Secret f64 division and square root are about 16% cheaper, x25519 shared-key derivation about 20%, and MXE key recovery about 25%.
September 14, 2026
Upgrade impact
  • Existing applications: No Arcis source changes from v0.14.1. Generated typed callbacks and Anchor programs require no source changes. Synchronize all Arcium dependencies, rebuild, and test.
  • TypeScript applications: No source changes from v0.14.1.
  • Node Operators: Update the Arx node image to arcium/arx-node:v0.15.0. Distributed preprocessing is opt-in: a node_config.toml written before this release parses unchanged and keeps the trusted dealer.
Changes
  • Preprocessing: Adds distributed (Cerberus) preprocessing as an alternative to the trusted dealer, enabled with distributed_preprocessing in node_config.toml. Generate the per-node seed once with arcium generate-cerberus-seed. Every node in a cluster must use the same parallel_preprocessing_bundlers. See node setup.
  • MXE authority: Adds the arcium set-mxe-authority command, and the instruction behind it, for transferring an MXE to a new authority such as a multisig vault. See deployment.
  • Computation definitions: Accepts a computation definition when cu_amount >= circuit_weight rather than only on exact equality, so a circuit can get cheaper without invalidating definitions already registered on chain. A value below the circuit weight is still rejected.
  • Arcis: Adds sort_by_cached_key, and fixes .. patterns in slices, div_ceil, each_mut, and a family of empty-array and empty-iterator cases. See supported operations.
  • Performance: Reduces mxe_keygen by 24.5% and add_together_test by 11.5%, with smaller gains across most circuits.
  • Reliability: Adds a timeout to protocol initialization so a stuck peer no longer blocks the execution pool, makes a failure after the first MXE initialization transaction resumable, and snapshots per-peer stake so fee splits no longer drift after a membership change.
July 29, 2026
Upgrade impact
  • Existing applications: Generated typed callbacks require no source changes. Synchronize all Arcium dependencies, rebuild, and test.
  • Callback integrations: The first callback instruction must target the owning MXE, callback accounts cannot be signers, and custom accounts cannot reuse the node callback authority or Arx account.
  • Raw callbacks: Call RawComputationOutputs::verify_output before consuming raw output. See Handle raw outputs.
  • Program IDL: init_key_recovery_execution_part1 removes its two instruction arguments; the original and backup MXE program accounts remain required. queue_key_recovery_init removes the mxe_program account but retains the mxe_program argument for PDA derivation.
  • Node Operators: Update the Arx node image to arcium/arx-node:v0.14.1.
Changes
  • Local development: Adds preview support for Surfpool through arcium test --validator surfpool and arcium localnet --validator surfpool. The legacy validator remains the default.
  • Callbacks: A callback_cu_limit of 0 derives the limit from simulation and retries compute-budget exhaustion with a higher limit. A non-zero value remains fixed.
  • TypeScript reader: subscribeComputations now resolves after the RPC server acknowledges the log subscription. The timeout defaults to 10 seconds and supports { ackTimeoutMs }.
  • Rust client: Adds fallible try_queue_key_recovery_init and try_reclaim_expired_computation_fee helpers and uses confirmed commitment in arcium_program_client.
  • Security and reliability: Tightens callback, computation, migration, key-recovery, and raw-output validation; redacts shared Rescue keys from logs; and routes deterministic callback failures through failure claims.
July 15, 2026
Upgrade impact
  • Existing applications: No source changes from v0.13.1. Existing initialized MXEs are unaffected.
  • New MXE deployments: Sign initialization with the deployed program’s upgrade authority. Immutable programs cannot initialize a new MXE.
  • Node Operators: Update the Arx node image.
Changes
  • Deployment: Checks the program upgrade authority before queuing MXE initialization. See the deployment guide.
  • Arx node: Reconnects stale subscriptions, applies the RPC slot buffer to computation-account fetches, tightens minimum-context checks, and supports local circuit loading.
  • Node services: Prevents the rewards server from persisting states that cannot be anchored.
July 10, 2026
Upgrade impact
  • Existing applications: No source changes from v0.12.x.
Changes
  • Arcis: Adds all six range-slicing shapes, forward RangeFrom iteration, additional unary operations, and bitwise and shift operations on integer types. See supported operations.
  • TypeScript: Adds @arcium-hq/staking with staking account readers, PDA helpers, and instruction builders.
  • Performance: Caches Rescue cipher keys between operations.
  • Circuit sources: Reserves local circuit sources for internal MXE workflows.
July 3, 2026
Upgrade impact
  • Existing applications: No source changes from v0.11.x.
Changes
  • Arcis: Adds the Default trait and qualified self paths such as <T as Trait>::item. See supported operations.
June 25, 2026
Upgrade impact
  • Existing applications: No source changes from v0.11.1.
Changes
  • Arcis: Optimizes AES circuits with a Boyar-Peralta S-box implementation.
  • MXE initialization: Validates recovery peers before submission, rejects duplicate peers in the TypeScript client, and initializes recovery-stake state with initMxePart2.
  • Program: Corrects the program epoch duration.
June 24, 2026
Upgrade impact
  • Protocol and accounts: Existing state remains compatible.
  • Existing applications: Add skip_init_mxe_part1 to direct calls to arcium_client::transactions::init_mxe.
  • Staking CLI scripts: Pass --amount and --new-balance values in whole ARX instead of base units.
Changes
  • Rust client: Adds skip_init_mxe_part1 to init_mxe so initialization can resume without repeating the first transaction.
  • CLI: Converts staking amount inputs from whole ARX to base units and corrects the ARX token mint.
  • Staking: Adds primary-stake modification and minimum-stake checks for execution pools.
June 22, 2026
Upgrade impact
  • Baseline: v0.11 is the oldest release covered by the maintained compatibility guidance. Existing MXE, Cluster, and computation-definition accounts remained compatible when upgrading from v0.10. Projects still on v0.10 or older should request a project-specific path in Arcium Discord.
  • Applications upgrading from v0.10: Had to add callback_cu_limit to every queue_computation call, then rebuild and redeploy.
  • Node Operators upgrading from v0.10: Had to add fallback RPC and computation-limit settings.
Changes
  • Arcis: Adds enums and Option<T>. See supported types.
  • Callbacks: Supports additional instructions.
  • TypeScript: Adds computation fee getters to @arcium-hq/reader.