Permissionless ledgers for people and AI agents

Ship the app.
Skip the backend.

Every app drags a backend behind it: servers to defend, a database to run, a payment processor to integrate, and passwords to protect. The bill grows with every user, and every bot.

Lattice is that backend as an open network: anyone can run a node, and no one has to ask. You ship the page; people and AI agents bring their own keys and pay as they go.

app.js: sell a ticket, no server
// on a click. lattice is the user's wallet
const me = await lattice.connect();
await lattice.writeRecords({
  chainPath: ["Nexus", "testnet", "fanfare-a5688b"],
  actions: [{
    key: "own/<artist>/berlin/A12",
    oldValue: "<holder>@250", // still 250
    newValue: me,
  }],
  payments: [{ to: "<holder>", amount: "250" }],
  fee: "1",
});
// the ticket and the payment land together,
// or not at all.
Or ask your coding agent Read https://lattice.build/agents.md and build me an app on Lattice.

The problem

Most of a backend is overhead.

Little of a typical backend is your product. The rest keeps attackers out, keeps data alive, moves money, and guards logins. You pay for it whether your app takes off or not, and you answer for it when it breaks.

OverheadTodayWith Lattice
AbuseEvery bot hits your servers and your bill. A flood can take you offline.There is no server of yours to flood. Any node can answer a reader, and writers compete for room on the ledger, not on your machines.
DataA database to run, back up, scale, and keep online.Your data lives on the network. Anyone can host a copy, and readers check each value against its hash, so a stranger’s copy is as good as yours.
PaymentsA processor, a merchant account, fees per charge, chargebacks.Payment is part of the action. A purchase and what it buys land together or not at all.
AccountsA password table, resets, 2FA, breach notices.Users hold their own keys. There is no credential database to breach.
AgentsSignup forms, API keys, and a credit card no agent can get.An agent holds a key and pays as it goes, exactly like a person.

What you still write

Only the part that is your product.

  • Your rulesWhat counts as a valid action in your app: who may edit what, what a ticket costs, who can resell it. Every node enforces them, so no one, including you, can quietly break them.
  • Your pageStatic files, hosted anywhere. It reads data it can verify and asks the user’s wallet to sign and pay.

Your rules get a ledger of their own: a public record of keys and values that every node checks against those rules. Lattice calls it a chain. Another app’s rush never competes with yours for space.

Miners can secure it alongside Nexus, the root ledger, from its first block, with no validators to recruit. Its security is the hashpower that chooses to mine it.

Don’t need custom rules? Write to a ledger that already has the right ones. The apps here share Moniker’s for profiles.

put your rules on the network
lattice child create Nexus/testnet/myapp-7f3c --root node \
  --spec chain/spec.json --policy-module chain/rules.wasm
# live once your node mines its first block. no deploy fee, no approval.

Built for agents

An agent is just another key.

Today an agent stalls at every signup form, API key, and card field, because each one was built to make sure a human is there. Lattice asks for none of them.

Nothing to sign up for

An agent makes its own key and starts working. Where nodes accept zero-fee writes, it needs no money to begin.

Pays as it goes

Any action can carry a payment: buy a ticket, tip a post, rent a spot. No invoices, no account to top up.

Doesn’t have to trust you

Every value it reads is checked against its hash, so a stranger’s node can’t forge data. At worst it serves an out-of-date view, which asking a second node catches.

Your coding agent already knows it

Open agent skills teach it to run nodes, design apps, send payments, and fix what breaks.

teach Claude Code lattice
/plugin marketplace add 0xLattice/lattice-skills
/plugin install lattice@lattice-skills

Other agents: copy the skills/ folders from lattice-skills, or point them at agents.md.

Running today

Apps with no backend.

Each is a static page on GitHub Pages with no server, database, or login system of its own, and anyone can read its source. They run on testnet today, carried by public nodes that anyone can add to.

AppWhat it doesTestnet chain
MonikerOwn your name online: one profile and handle every app reads.Nexus/testnet/moniker-da6f57Open · Source
FanfareShow tickets fans own and can resell at any price.Nexus/testnet/fanfare-a5688bOpen · Source
StoaForums where posts belong to their authors and moderators only label.Nexus/testnet/stoa-41d5abOpen · Source
RaveReviews of places that no company owns. You choose whose ratings count.Nexus/testnet/rave-186079Open · Source
WheatpasteOne shared billboard. Post over anyone; the price is the only rule.Nexus/testnet/wheatpaste-acbbcfOpen · Source

Reading needs nothing. Writing needs the Selfhold wallet for Chrome. Lattice Desktop runs a full node and wallet on Mac, Linux, or Windows, but does not yet sign for web apps.

All apps, how each is built, and how to list yours →

Command-line setup

From nothing to a live app.

The command-line tools build from source with Swift 6.1 or newer, on macOS 15+ or Linux. (Just want a node and a wallet? Lattice Desktop runs both with no setup.) Develop under Nexus/testnet: once a chain launches, its rules can never change.

  1. Build and start a node

    With no peers set, the node joins the public Nexus network. A node hosts a chain only under a parent it hosts, so add the public testnet before you start it.

    node
    git clone https://github.com/0xLattice/lattice-node
    cd lattice-node && swift build -c release
    export PATH="$PWD/.build/release:$PATH"
    lattice init --root node
    # in node/lattice.json add:  "hostedChains": ["Nexus/testnet"]
    lattice up --root node
    lattice status --root node   # wait until Nexus/testnet is in sync
  2. Write your rules

    A chain is a JSON spec: block time, rewards, size limits, and the CIDs of its policy modules. Policies are WASM modules; the examples are written in Rust. Start from Moniker’s policy/ crate, or let the lattice-app-builder skill write one with you.

  3. Launch the chain

    Make a key first. The node starts hosting the chain immediately. To fund the key in genesis, set premine in the spec and add --premine-to <address>.

    launch
    lattice key generate --out ./wallet.json   # prints its address
    lattice child create Nexus/testnet/myapp-7f3c \
      --root node \
      --spec chain/spec.json \
      --policy-module chain/rules.wasm
  4. Mine it, or let others

    A chain advances when someone mines it. Pay the chain’s rewards to your key and start the bundled CPU miner; GPU miners can merge-mine it alongside Nexus. A chain with no recipient burns its rewards.

    mine
    # in node/lattice.json add:
    #   "mine": { "worker": "cpu", "workers": 2,
    #     "recipients": { "Nexus/testnet/myapp-7f3c": "<address>" } }
    lattice mine start --root node
    # once it has coin, the key can pay others:
    lattice tx send --root node --chain Nexus/testnet/myapp-7f3c \
      --key ./wallet.json --to <address> --amount 25 --fee 1
  5. Ship a page

    Read with the TypeScript SDK, which checks every value against the latest block. Write with window.lattice from the user’s wallet. Host the page anywhere static files go.

Operator CLI · RPC API · Getting started · Mining workers

Before you build

When Lattice is the wrong choice.

Protocol specification · Consensus source

Live

The network right now.

Height and peers read directly from each node’s public read surface, refreshed every 15 seconds. Browse blocks and transactions in the explorer. Want to help secure it? Run a node or mine.

Nexus genesis bafyreiggtg4ezifboyekbf4gxst2jr3mpjqcxsbmopy7w6fp46g4ngpgxa · 2026-10-04 06:19:59 UTC

ChainNodeHeightPeersStatus

Ship the app. Skip the backend.

Every line of it is on GitHub, and there is no one to ask for permission.