Skip to main content
A solver card is one JSON file describing your markets — the only artifact a solver has to produce to be found. One card per solver per network, filed as solvers/<network>/<name>.json; the network lives in the path, never in the card. The trust model behind cards and registries is in Discovery and Registries.

Generate the Card

solver card prints to stdout and nothing else — no file is written, nothing is uploaded. --name must match ^[a-z0-9-]+$ and must equal the filename you save it under; omit it and the daemon invents a solver-<hex> slug for you to rename. The card is built from your configured markets, not wallet state. Generation fails — with every reason reported at once — if there are no markets, a market has no enabled direction, or a price path is missing and cannot be derived from the feed URL. The web UI’s card.json panel produces the same output.

Check the Card Before You Share It

The registry enforces rules the daemon does not, so a card that generated cleanly can still be rejected:
  • A min of "0" on an enabled side is rejected. solver market add defaults mins to 0 — set --min-base and --min-quote explicitly, then regenerate.
  • Negative price_decimals is rejected. The daemon computes it as base decimals minus quote decimals, so a quote asset with more decimals than the base produces a negative value. It is also only correct for feeds quoted in display units — hand-edit it for atomic-denominated feeds.
  • name must be unique within its network directory, and at least one side must have max > 0.
Signing (discovery_pubkey + sig) is optional for an Arkade-only card — a bare card is fully valid, and for registry listing the pull request is the authentication.

Share It Privately

A card works with no registry at all. Wallets let users pin one directly — by URL or pasted JSON — under Settings → Advanced → Solvers; pinned cards join discovery like any registry entry. This is the right first step: no review latency, and you decide who sees you. Hand the file to your users in whatever channel you already share.

Run Your Own Registry

Fork arkade-os/solver-registry, replace the cards under solvers/, and enable GitHub Pages with the GitHub Actions source. The index format is identical to the public registry’s, so any client can follow your Pages URL. Forking is permissionless — clients follow a set of registries, and yours is just another entry in it. A good fit for a curated app or an institutional allow-list.

List in the Public Registry

  1. Generate the card and save it as solvers/<network>/<name>.json
  2. Open a pull request at arkade-os/solver-registry
  3. CI validates every card and reports failures in the PR summary — one broken card never blocks other networks
After merge, the reducer publishes per-network indexes at https://arkade-os.github.io/solver-registry/<network>.json, grouped by pair with the best fee_bps first. Review of the pull request is the listing gate, so merge time is a human process.

Keep the Card in Sync

Nothing updates your listing automatically — solver card only prints, and no software contacts the registry on your behalf. After changing markets, regenerate the card and open a new PR, or re-share the file with anyone who pinned it. A stale card just advertises bounds you no longer honour: offers outside them fail rather than fill.

Run a Solver

Install, secure, fund, and open a market.

Discovery

Cards, registries, and curation — the trust model.