Achronyme 0.1.2 is published: detached verification preserves operational errors and global JSON output arrow_right_alt

Introduction

What Achronyme is, how its host and circuit execution paths fit together, and which versions are published.

Achronyme is a programming language for capability-scoped host programs and zero-knowledge circuits.

Write ordinary code, make concurrent and external effects explicit, and decide which deterministic statements become proofs. The same source language feeds separate execution, witness, and constraint machines instead of pretending all three jobs have the same runtime requirements.

Current versions

SurfacePublished stableSource receipt
Compiler and CLI0.1.2cd7a6e66
Editor and LSP0.3.1Compatible; LSP built from core b1774e88
Web package and server0.1.2Pinned to core cd7a6e66

The CLI, WASM package, and deployed web service use core revision cd7a6e66e133bebd8e2026e321a4c85023c311f7. Editor 0.3.1 remains compatible because 0.1.2 does not change the language or LSP contracts. See the 0.1.2 release notes for the detached verification fixes and compatibility statement.

Host execution

General programs support closures, collections, structured concurrency, owned file and TCP resources, and explicit runtime limits:

fn work(value) {
    await yield_now()
    return value * 2
}

let total = concurrent {
    let left = spawn work(10)
    let right = spawn work(11)
    await left + await right
}

The interpreter is portable. LLVM 21 ORC JIT accelerates supported host code, and ach aot creates native executables. Filesystem and network access remain denied until the operator supplies exact grants.

Circuit compilation

circuit multiply(product: Public, a: Witness, b: Witness) {
    assert_eq(a * b, product)
}
ach circuit multiply.ach --inputs "product=42,a=6,b=7"

The R1CS path emits snarkjs-compatible .r1cs and .wtns artifacts. Achronyme can also import Circom templates, compute complex witnesses through Artik, and stage repeated template expansion through Lysis.

Inline proofs

let secret = 0p42
let commitment = poseidon(secret, 0p7)

let proof = prove(commitment: Public) {
    assert_eq(poseidon(secret, 0p7), commitment)
}

Proof generation fails closed unless a key source is selected:

# Local development only
ach --insecure-dev-setup run proof.ach

# Ceremony-derived production key store
ach --trusted-key-dir ./trusted-keys run proof.ach

Detached verification uses ach verify and does not require project configuration or a proving key. Operational artifact errors remain distinct from a cryptographically invalid proof.

The three machines

  • Akron runs host programs, structured tasks, owned resources, and proof values through the interpreter, JIT, or AOT path.
  • Artik executes deterministic witness programs, including native bigint operations used by ECDSA-scale Circom circuits.
  • Lysis stages template instantiation and emits shared constraint bodies without eager memory expansion.
Flowchart diagram10 nodes, 10 edgesach runach circuitinlineSource (.ach)Parser → ASTPratt + recursive descentprove { } blockcompile + witness + verify (inline)Bytecode → VMrun modeSSA IR + Optimizecircuit modeR1CSGroth16PlonkishKZG-PlonK.r1cs + .wtnssnarkjs compatibleGates + Lookupscopy constraintsNative proof

Where to continue

Navigation