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, andAes256Ciphernow take a 12-byte nonce instead of an 8-byte one. Generate 12 random bytes and pass them to the program as theu128nonce. - Node Operators: Update the Arx node image to
arcium/arx-node:v0.16.0. Nodes now rebuild MXE public keys from chain, so thepublic-inputsmount andMXE_PUBLIC_KEYS_PATHare no longer read and can be removed. Keep theprivate-sharesmount.
- AES encryption: Adds
Aes128Enc<C, T>,Aes192Enc<C, T>, andAes256Enc<C, T>alongside the Rescue-basedEnc<C, T>, forSharedandMxeowners..to_arcis()decrypts, andowner.from_arcis_aes128(data)(or_aes192,_aes256) encrypts. Each value keeps its natural byte width, so au8is one byte of ciphertext and no packing is needed.f64andArcisX25519Pubkeycannot be AES-encrypted. Queue ciphertexts withArgBuilder::aes_encrypted_bytes::<N>(ciphertext), and read them from an account withArgBuilder::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 asUnsynchronized<[u8; N]>.synchronizereconciles the nodes’ copies against anArcisConstraint(equality, Ed25519 signatures, SHA-256, base64url, andAnd,Or,AtLeast,AtMostcombinations) and returnsNonewhen no copy satisfies it.synchronize_uniquealso returnsNonewhen several different copies do. Check a source before deploying witharcium check-url <url> --data-len <bytes>. - Arcis: Adds
array::from_refandfrom_mut,slice::from_refandfrom_mut,Cell::as_slice_of_cells, comparisons onbooland on references,DefaultforRangeandRangeFull, rangecontains, and hand-writtenimpl Copy. Fixesascasts of untyped integers (let n = 300; n as u8now gives44), the evaluation order of assignments and compound assignments, enum andCellcopies that shared storage with the original, andstep_byandcountedge cases. See supported operations. - Templates:
arcium initadds 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 / u64drops from 512 to 24 rounds and from 1.3B to 72M weight. Secretf64division 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: anode_config.tomlwritten before this release parses unchanged and keeps the trusted dealer.
- Preprocessing: Adds distributed (Cerberus) preprocessing as an alternative to the trusted dealer, enabled with
distributed_preprocessinginnode_config.toml. Generate the per-node seed once witharcium generate-cerberus-seed. Every node in a cluster must use the sameparallel_preprocessing_bundlers. See node setup. - MXE authority: Adds the
arcium set-mxe-authoritycommand, 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_weightrather 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_keygenby 24.5% andadd_together_testby 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_outputbefore consuming raw output. See Handle raw outputs. - Program IDL:
init_key_recovery_execution_part1removes its two instruction arguments; the original and backup MXE program accounts remain required.queue_key_recovery_initremoves themxe_programaccount but retains themxe_programargument for PDA derivation. - Node Operators: Update the Arx node image to
arcium/arx-node:v0.14.1.
- Local development: Adds preview support for Surfpool through
arcium test --validator surfpoolandarcium localnet --validator surfpool. The legacy validator remains the default. - Callbacks: A
callback_cu_limitof0derives the limit from simulation and retries compute-budget exhaustion with a higher limit. A non-zero value remains fixed. - TypeScript reader:
subscribeComputationsnow 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_initandtry_reclaim_expired_computation_feehelpers and uses confirmed commitment inarcium_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.
- 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.
- Arcis: Adds all six range-slicing shapes, forward
RangeFromiteration, additional unary operations, and bitwise and shift operations on integer types. See supported operations. - TypeScript: Adds
@arcium-hq/stakingwith 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.
- Arcis: Adds the
Defaulttrait 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.
- 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_part1to direct calls toarcium_client::transactions::init_mxe. - Staking CLI scripts: Pass
--amountand--new-balancevalues in whole ARX instead of base units.
- Rust client: Adds
skip_init_mxe_part1toinit_mxeso 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_limitto everyqueue_computationcall, then rebuild and redeploy. - Node Operators upgrading from v0.10: Had to add fallback RPC and computation-limit settings.
- Arcis: Adds enums and
Option<T>. See supported types. - Callbacks: Supports additional instructions.
- TypeScript: Adds computation fee getters to
@arcium-hq/reader.