◆ QUAI TERMINAL ● mainnet · cyprus-1 v0.1.0-alpha.5 unsafe_code = "forbid" 1 home ◌ coming soon

Your keys.
Your terminal.

A self-custodial wallet and trading terminal for Quai Network. QUAI and Qi, markets, swaps, NFTs and sealed messages, in one Rust binary you drive from the keyboard.

v0.1 alpha · Linux x86-64 · macOS · MIT · best in Ghostty or kitty

j ↓
▸ teaser · 75.9s · real footage, no mockups · sound on

> no browser extension to phish.

> no server holding your keys.

> no custodian to freeze you.

> nothing signed you didn't read.

> just math, and a keyboard.

2 markets & trade

Candles. Tape.
Every swap live.

Every Quainance market in one trading view: the main pools, graduated launches and tokens still on their bonding curves. Candles from 15m to 1d, volume bars, and a tape of every swap, with yours marked.

markets › pairs
markets › launches · bonding curve

⇄ routed swaps

Finds the best route, direct or through WQUAI, WQI or USDT. Price impact comes from pool reserves: you're warned above 2% and refused above 50%. Approvals are for the exact amount only.

○ launches on the curve

A token still on its bonding curve is quoted on the curve and on the exchanges, and your trade goes wherever it pays more. You can buy, sell and claim without leaving the terminal.

◎ limit orders, no order book

The wallet watches the price for you. Nothing is posted on-chain. When the target is reachable you're told once, and a fresh review waits for your signature. It never signs by itself.

▤ trader layout

From 140 columns, Markets sits beside the swap card, so the chart stays in view while you trade. You can pin a chat channel to the edge of any screen.

◧ NFTs, verified

Ownership is re-checked on-chain. Browse collections with floor, volume and holders. Buy Bazarr listings in the wallet, where the ask, the seller and the approvals are re-read before the review.

⌁ alerts & daemon

Set price, move and gas alerts. A background daemon watches every wallet when the terminal is closed and sends desktop notifications. It also feeds a Waybar module.

3 the review

Nothing signed
you didn't read.

Every transaction opens a review. Reject has focus by default. Approve & sign stays disabled until you've scrolled to the end, and a click only arms it: you sign with a key. Try the one below.

▸ review · Send QUAI

! address poisoning

This address looks like alice (0x00F4…804B), but it isn't. The first and last groups match and the middle doesn't. It has only ever sent you dust.

balance changes

− 250.0000 QUAI

− 0.0021 QUAI network fee, at most

network
Quai Mainnet · cyprus-1
from
0x 0023 60Bc 8E2A 359b E733 5B06 De43 F1c7 F040 f15a (Account 1)
to
0x 00F4 1a2B 9e1D 77c0 A1f3 0c9E d2B4 6a0F 3a4B 804B first-time recipient
amount
250 QUAI
max fee
0.0021 QUAI
read at
block #10,253,532 · ✓ confirmed by two nodes
nonce
97 · released if you reject

what happens

→ signed and broadcast; included within a few blocks and tracked in Activity

! once signed and broadcast, it can't be undone

y copies this send as the equivalent CLI command

— end of review —

0% read

  • ✓ Reviews read the chain. Balances, allowances, pair addresses and pinned contract bytecode are read first-hand every time. Nothing a review tells you comes from a cache.
  • ✓ Two nodes or none. Point it at your own node and every review is read there and witnessed by the main RPC. If the two disagree, the review is refused.
  • ✓ Contracts it was never taught. It reads the metadata CID out of the deployed bytecode and checks the fetched ABI against it by arithmetic, not trust. Then it simulates the call and prints the exact calldata you'll sign.
  • ✓ Hostile strings, neutralised. Token names are untrusted display text. Bidi overrides, zero-width characters and control codes are stripped before they reach your screen.

4 qi & privacy

Private by default.
Tor if you want it.

Quai runs two ledgers: QUAI accounts and Qi, UTXO cash that moves in denominations. Quai Terminal handles both natively. Anything that would tell a third party which addresses are yours is off until you turn it on.

trade › convert · protocol vs market
home › qi coins · denominations

◈ Qi, first-class

Coin view by denomination, a fresh address for every receive, gap-50 and deep scans, and consolidation that keeps denominations intact. Private payments go through BIP47 payment codes.

⇌ two markets, one quote

QUAI ↔ Qi, quoted two ways at once: the protocol conversion (locked for weeks) and the market route through Quainance (spendable in minutes). The one that pays more is marked.

◌ the explorer isn't told

In Private mode, the default, explorer.qu.ai never learns your addresses. Set a monitor node and every read goes to your own hardware.

⛓ Tor, fail-closed

socks5h://127.0.0.1:9050 routes every third-party lookup and node RPC through Tor. If the proxy goes down, requests fail. They never fall back to the clear.

✉ sealed messages

On-chain DMs, each encrypted to one person with HPKE and weekly keys. Every account is its own messaging identity, so you can keep one just for chat, apart from your holdings. Old keys are deleted, so a key stolen later can't read the past.

⏻ kill switches

Messaging, trading and NFTs can each be turned off. When a feature is off it's gone: hidden, refused and never polled. --offline-data cuts every third-party lookup for a single command.

5 vault & spec

Keys in the vault.
Zeroized on lock.

It's written in Rust with unsafe forbidden across the whole workspace. Here's the spec sheet.

▸ spec · cat docs/CRYPTOGRAPHY_AND_ENTROPY.md | head
language
Rust 2024 · unsafe_code = "forbid"
vault kdf
Argon2id · 256 MiB · t=3 · p=4 (a re-seal never lowers cost)
vault cipher
XChaCha20-Poly1305
on disk
atomic write · mode 0600
in memory
keys only while unlocked · zeroized on lock and on panic unwind
secrets in
hidden prompt, piped stdin or --password-fd · never argv, never env
new wallets
24 words · verification quiz · encrypted backups with verify
contracts
routers, factories, WQI and WQUAI pinned by bytecode hash
daemon
password handoff checked with SO_PEERCRED · sent once · never stored
transport
rustls · no redirects to other hosts · per-host request budgets
pictures
decoded in a helper process with no keys · seccomp allowlist on Linux
tests
860+ · devnet end-to-end suites for swaps, wraps, NFTs and messaging
license
MIT
activity › timeline
$ exit
"its keys were only in this process, which has ended"

6 tui + cli

Two faces.
One engine.

Run quai-terminal with no arguments to get the TUI. Anything the TUI does, the CLI does too, with --json output and stable exit codes. The command palette gives you the CLI form of any action with ctrl-y.

▸ zsh · ~/

    
? keys · same key, same meaning, everywhere
1–6 0
sections
hjkl
move (arrows too)
space
actions for what's selected
: ctrl-p
palette · "swap 10 wqi to usdt"
s r t
send · receive · trade
c w
convert QUAI ↔ Qi · wrap
g then a letter
jump to a screen
' then a label
jump to a labeled row
$
hide the balance
ctrl-l
lock

This page speaks the same language. Press ?.

7 themes

31 themes.
Zero browser tabs.

Quai Red, Tokyo Night, Catppuccin, Gruvbox, Nord, Rosé Pine and more. On Omarchy it follows your desktop theme live. Every palette is contrast-checked: body text ≥ 4.5:1, states ≥ 3:1. Pick one to repaint this page.

▸ theme showroom · type to filter
    first run · showroom

    0 status

    Alpha.
    Honest about it.

    The public release is coming soon. Here's where it stands today and what it won't ever do.

    recommended rig

    ▸ terminal · best in Ghostty or kitty

    Run it in a modern terminal.

    Quai Terminal speaks the kitty graphics protocol. In Ghostty and kitty, token icons, NFT thumbnails and QR codes are real bitmaps and charts are drawn with finer glyphs. You also get 24-bit color and the full keyboard protocol.

    • ✓ Ghostty and kitty: pixels, truecolor, every key
    • ✓ On a Mac? Ghostty runs natively on macOS.
    • · any other UTF-8 terminal: half-block pictures and braille charts
    • · the Linux console or --plain: text only, every feature intact
    ▸ node · fastest on your own

    Run your own Quai node.

    Point it at a local go-quai node and every read comes from your own hardware instead of a public endpoint: balances, quotes, markets, the tape, and the state behind each review. That's the fastest Quai Terminal gets. It's also the most private, because no public RPC sees which addresses you ask about.

    quai-terminal network monitor mainnet http://127.0.0.1:9200
    • ✓ reviews are confirmed by two nodes: yours, witnessed by the main RPC
    • · transactions are still broadcast through the main RPC, since a monitoring node has no hashrate behind it
    ● works today
    • QUAI + Qi on Cyprus-1, mainnet and Orchard
    • swaps across Quainance and a shortlist of QuaiSwap pools
    • LP, gauge staking, harvest
    • NFTs: gallery, transfers, Bazarr buy and list
    • sealed messages and public channels
    • Linux x86-64 · macOS (Apple Silicon, Intel)
    ◔ not yet
    • cross-zone sends and accounts
    • offline signing
    • browser / dApp integration
    • signed and notarized macOS builds
    • Seaport fills, listing creation beyond Zora asks
    ✗ never, by decision
    • bridging. It would mean holding EVM keys, and that changes the threat model.
    • launching tokens. You can trade the curves. You can't mint them here.
    • APY bait, "moon" talk. A reward APR shows — when it can't be derived. It isn't guessed.
    ▸ get ready

    Your keys. Your node. Your terminal.

    Watch the repo to hear about the public release first. If you're already running a node and aren't afraid of alpha software, the installer is live. It checks the binary against SHA256SUMS, compiles nothing and never runs as root.

    early access · alpha · read the script first

    curl -fsSL https://quaiterminal.org/install.sh | sh

    Try small amounts first. The SDK is alpha too.