> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usenullis.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Nullis

> Policy-as-code for private on-chain finance — prove you're allowed, execute the exact action, never expose the person.

**Apps publish a financial policy. Users prove they satisfy it privately. Soroban executes the exact permitted action — without identifying or tracking the user.**

Nullis is a policy-as-code execution layer for Stellar. An app publishes what it requires — a corridor, a limit, an asset, an expiry. A user proves, in zero knowledge and **on-chain**, that they satisfy it. Soroban then executes the exact permitted action atomically, and every decision — success *and* rejection — emits an inspectable **Privacy Receipt**. The app learns the answer, never the person.

<Info>
  **Private if allowed. Blocked if not. Verified on-chain.** Nullis is live on Stellar testnet: a real Noir/UltraHonk zero-knowledge proof is verified inside a Soroban contract, gating an actual 100 USDC payment.
</Info>

## The one thing most privacy projects miss

Most privacy-finance projects prove **one statement** — a solvency proof, a single compliance check, an age credential. Nullis answers the harder question:

> Can any supported private policy safely authorize an **exact** on-chain action?

Not "proof-only." **Proof-to-action, atomically.** Verification and execution are one step — never split.

<CardGroup cols={2}>
  <Card title="The problem" icon="scale-unbalanced" href="/concepts/problem">
    Why on-chain finance forces a false choice between compliance and privacy.
  </Card>

  <Card title="How it works" icon="diagram-project" href="/concepts/architecture">
    One engine, five layers, one atomic call. The full architecture.
  </Card>

  <Card title="verify_and_execute" icon="bolt" href="/concepts/verify-and-execute">
    The core primitive, step by step — proof to payment in one transaction.
  </Card>

  <Card title="Claim-safety" icon="shield-halved" href="/concepts/claim-safety">
    Exactly what the circuit proves vs. what the contract enforces.
  </Card>
</CardGroup>

## See it for yourself

<CardGroup cols={3}>
  <Card title="Watch the 3-min demo" icon="play" href="https://youtu.be/__jVDiYdoAA" />

  <Card title="Live app" icon="globe" href="https://www.usenullis.xyz/" />

  <Card title="The real-ZK payment tx" icon="cube" href="https://stellar.expert/explorer/testnet/tx/214d788bf9e842332d43fbd88fba2e190a6f388dd0f1a098ca76a6e4427e6703" />
</CardGroup>

## What runs today

<CardGroup cols={2}>
  <Card title="Real on-chain ZK" icon="lock">
    A Noir/UltraHonk proof is verified **on Stellar testnet** inside `verify_and_execute`, gating a real USDC payment. The credential secret never leaves the prover.
  </Card>

  <Card title="One atomic primitive" icon="bolt">
    Load policy → check root & revocation → verify proof → check expiry & action → check nullifier → execute → emit receipt. One call.
  </Card>

  <Card title="Replay-proof" icon="ban">
    A domain-separated nullifier is consumed on-chain. The same proof cannot be spent twice.
  </Card>

  <Card title="Unlinkable across apps" icon="user-secret">
    The same credential produces a different nullifier in every app — a reusable credential without a reusable tracking identifier.
  </Card>
</CardGroup>

<Tip>
  New here? Read [The problem](/concepts/problem) for the "why", then [How it works](/concepts/architecture) for the "how". Want to run it? Jump to the [Quickstart](/quickstart).
</Tip>
