:: In active development. Codebase tracks the dev branch. Explore at your own risk. Official release coming soon.
Skip to content

vesl at a glance

Fourteen verifiable primitives, one composition command, typed at every seam. The hard parts ship as grafts; you write the application.

Building a verifiable app means weeks of crypto code, custom state machines, replay-attack logic, and a hand-rolled HTTP server — before you ship a feature. vesl-nockup gives you all four as composable primitives. Drop in Merkle commitments, STARK proofs, RBAC, an audit log, or a settlement queue with one command. Drive the kernel from typed Rust with compile-time drift detection. Test against the real kernel, not a mock. Boot a production HTTP server out of the box.

YOUR DOMAINAPP-SPECIFIC CAUSES, PEEKS, RUST HANDLERSVESLGRAFT LIBRARY, VESL-CORE SDK, VESL-HULL HTTP, NOCKUP GRAFT CLINOCKCHAINNOCK, HOON, HOONC, NOCKAPP, JAM, TIP5

What ships

  • 14 grafts across four families plus a placeholder. See the graft library below.
  • Typed Rust SDKvesl-core exports Mint, Guard, Settle, one build_*_poke per cause, and effect decoders for every cell-payload variant.
  • Real-kernel test harnessvesl-test boots the same out.jam your app does. What you test is what your users get.
  • HTTP server out of the boxvesl-hull mounts /commit, /settle, /verify, /tx/{tx_id}, /status, /health. API-key auth, body-limit, rate-limit included.
  • Live updates preserve state — edit Hoon, recompile, restart; accumulated state survives via PMA. A new feature is a sub-minute deploy.
  • Loud failurescompile.sh verifies its artifact, lints refuse to compose corrupted Hoon, verify-jam detects stale kernels, assert_kernel_cause_tag! turns hull/kernel drift into a compile error.

Ten lines, end to end

rust
// Example: register a Merkle root, settle a note against it.
use vesl_core::{Mint, build_settle_register_poke, build_settle_note_poke};

let mut mint = Mint::new();
let root = mint.commit(&[b"first-license"]);

app.poke(SystemWire.to_wire(), build_settle_register_poke(1, &root)).await?;
app.poke(SystemWire.to_wire(), build_settle_note_poke(1, 1, &root, b"first-license")).await?;
// %settle-registered + %settle-noted — Merkle-rooted, replay-protected.

Three commands to a running verifiable kernel

bash
nockup project init                              # scaffold from the vesl template
nockup graft inject --apply hoon/app/app.hoon    # compose the grafts in
cargo +nightly run --release                     # boot the hull

About 80 lines per graft. Your domain logic stays five to ten lines of Hoon per cause; everything else is composed.

The Graft Library

Fourteen grafts ship today, organized into three families plus a placeholder. Each is a Hoon library plus a sibling TOML manifest; drop them into your kernel and they compose at injection time.

Commitment family — Merkle commitments and proofs.

  • mint-graft — publish a Merkle root that future proofs verify against.
  • guard-graft — publish a root and check whether items belong to it.
  • settle-graft — publish a root, verify items against it, and record each settlement once (no double-counting).
  • forge-graft — generate zero-knowledge (STARK) proofs over committed data.

State family — durable application state primitives.

  • kv-graft — string-keyed key-value store.
  • counter-graft — named integer counters.
  • queue-graft — FIFO job queue with stable IDs.
  • rbac-graft — public-key role and permission table.
  • registry-graft — strict structured registry with create / update / delete.

Behavior family — observe or constrain how the kernel processes incoming messages.

  • validate-graft — pre-flight checks before a message reaches domain logic.
  • log-graft — append-only audit trail.
  • clock-graft — deterministic event clock.
  • batch-graft — buffer settlements and flush in batches.

Reserved: intent-graft, for future multi-party coordination. Not yet active. The trellis pattern (one kernel, multiple hull=@ namespaces) layers cleanly across all three families.

Grafts / The 5-Family Graft Taxonomy has the canonical table with priority bands and member roles. Per-Graft Rust Snippets shows one realistic poke per graft.

Where vesl ends and nockchain begins

Nock is nockchain's combinator calculus. JAM serialization, tip5 hashing, the STARK proving stack, and the deterministic Nock interpreter are all nockchain's primitives — not vesl's. vesl runs a Hoon kernel inside nockchain's NockApp and ships a graft library plus a Rust SDK on top. It does not invent determinism, proving, or the noun model. The foundation's properties (post-quantum cryptographic primitives, transparent STARKs without trusted setup, byte-for-byte reproducible execution) are inherited — vesl makes them composable into your app surface.

Where to start

  • Quickstart — three commands from empty directory to %settle-registered + %settle-noted.
  • Build a Real App — compose five grafts into a license registry, end to end.
  • NockApp Anatomy — the conceptual layout (hull, grafts, domain) every other page assumes.
  • Grafts — the 14-graft catalog with per-graft Rust snippets.
  • Production Checklist — pre-ship verification surface.
  • Glossary — every term used on this page, defined.

See Also