A sea of prices. Arbitern takes only the confirmed spreads.

An open-source arbitrage terminal that prices every spread after fees, slippage and funding — and runs on your own server.

Open source · Self-hosted

Read the script first
$ curl -fsSL https://get.arbitern.dev | sh

Read the docs →

Adapters included

  • Binance
  • OKX
  • Bybit
  • Coinbase
  • Kraken
  • Bitget
  • Gate
  • HTX

A tern crosses oceans and eats small.

It flies a very long way, ignores almost everything below, and dives only for the small fish it is sure of. Arbitern is built the same way: three steps, and the first two are about saying no.

  1. 01Search

    Every exchange, watched at once

    Order books stream in from every exchange you connect. Each gap is spotted the moment it opens, on spot and perpetuals, and ranked by what is left after cost — not by the headline number.

    Scanner

    Ranked by net · floor 0.70%

    PairBuy → SellGrossNet
    PYTH-USDTGate → Binance3.35%+2.88%
    ENA-USDTKraken → Bybit2.48%+1.94%
    ORDI-USDTBitget → OKX2.14%+1.65%
    TIA-USDTBinance → Bybit1.65%+1.30%
    SEI-USDTBybit → HTX1.42%+1.01%
    WIF-USDTOKX → Binance1.18%+0.82%
    JUP-USDTOKX → Bitget0.96%+0.62%
  2. 02Confirm

    The full cost, checked on sight

    Fees on both sides, slippage at your size and funding come off the moment a gap appears. What still clears your floor is confirmed; what does not is passed over. That is most of the time.

    Route · WIF-USDT

    WIF-USDT · buy OKX, sell Binance

    2.1840 → 2.2098

    Gross spread+1.18%
    Taker fee · OKX−0.15%
    Taker fee · Binance−0.15%
    Expected slippage at 12,600 WIF−0.06%
    What is left+0.82%

    Listed because net stays above your 0.70% floor. Below it, the route is hidden.

  3. 03Dive

    Committed at once, both legs together

    Paired orders go out together, each with its own slippage cap and an abort floor you set. Fills, partials and aborts are written to the ledger exactly as they happened.

    Execution log
    1. 09:41:02.114Route armedWIF-USDT · OKX → Binance · 12,600 WIF
    2. 09:41:02.131Leg A sentBUY 12,600 @ 2.1840 · IOC · cap 0.05%
    3. 09:41:02.133Leg B sentSELL 12,600 @ 2.2098 · IOC · cap 0.05%
    4. 09:41:02.162Leg A filled12,600 WIF · avg 2.1841
    5. 09:41:02.170Leg B filled12,600 WIF · avg 2.2097
    6. 09:41:02.171Settlednet +0.87% after fees
    Abort if net falls below 0.70%Halt all

This is what runs on your machine.

The panel the install line gives you: exchanges, ranked routes, funding, the selected route and its books, the execution ticket and the risk bar — dense, quiet, and readable at a glance.

Arbitern
Opportunity ledger · sorted by net
PairRouteGrossNetAge
PYTH-USDTGTE → BNC3.35%+2.88%5s
ENA-USDTKRK → BYB2.48%+1.94%15s
ORDI-USDTBGT → OKX2.14%+1.65%2s
TIA-USDTBNC → BYB1.65%+1.30%7s
SEI-USDTBYB → HTX1.42%+1.01%9s
WIF-USDTOKX → BNC1.18%+0.82%3s
JUP-USDTOKX → BGT0.96%+0.62%1s
ONDO-USDCBS → KRK0.52%+0.13%12s
Funding · next settlement 02:14:33
PerpBinanceOKXBybitBitgetBest carry
WIF-PERP+0.0312%−0.0148%+0.0405%+0.0261%0.055% / 8h
TIA-PERP+0.0186%+0.0074%+0.0352%−0.0093%0.045% / 8h
ORDI-PERP−0.0421%+0.0118%+0.0067%+0.0384%0.080% / 8h
Execution tape · this session
08:04:51.204FILLEDWIF-USDTOKX → BNC12,600 WIF+0.84%
08:04:12.877ABORTEDORDI-USDTBGT → OKXnet < floor—
08:03:40.315FILLEDTIA-USDTBNC → BYB3,620 TIA+1.31%
08:02:58.090PARTIALPYTH-USDTGTE → BNC62% · hedged+2.47%
08:01:22.641SKIPPEDONDO-USDCBS → KRKvenue degraded—
07:59:47.518FILLEDSEI-USDTBYB → HTX21.5k SEI+0.97%
07:58:03.902FILLEDJUP-USDTOKX → BGT18.2k JUP+0.73%
Risk watch
InventoryBinanceOKXBybitBitget
Net Δ+$184
Margin23%
HALT ALL

Select a route to see its cost and its books.

Everything runs on your server.

One engine written in Rust, one local ledger, one web panel. The exchanges see orders from your machine and nothing else; there is no server of ours in between.

Outside

Exchanges

  • Binance
  • OKX
  • Bybit
  • Coinbase
  • Kraken
  • Bitget
  • Gate
  • HTX

Rust

Engine

  • Book aggregator
  • Cost model
  • Paired executor
  • Risk and halt

keys · encrypted at rest

Local

Ledger

Every order, fill and abort with its timestamp, on your disk.

:8080

Panel

Monitoring, routes, execution and upgrades, in your browser.

Exchanges send order books and fills to your server and receive orders from it. On your server, the Rust engine writes every order to a local ledger and streams its live state to the web panel.
  • A Rust engine

    Books, the cost model and both legs of every order live in one process, built for steady latency.

  • Keys stay local

    Encrypted at rest on your server and used only to talk to the exchanges. Trade-only keys are enough.

  • One-click upgrades

    New releases show up in the panel. One click installs it; your settings, keys and ledger stay put.

  • One adapter per exchange

    Each exchange is a single adapter in the engine. Add the one you need and send it upstream.

Running in three steps.

  1. 01

    Install

    One line installs the engine and the panel as a service on Linux or macOS. The panel opens on port 8080.

    curl -fsSL get.arbitern.dev | sh

  2. 02

    Watch on paper

    It starts in paper mode: real order books, simulated fills. No API keys needed to see what it would have taken.

    http://localhost:8080

  3. 03

    Add keys, go live

    Create trade-only keys with withdrawals off. Set the floor and size for each route, then switch the ones you trust to live.

    floor 0.70% · size $10k · live

What Arbitern will and won’t do.

  • Your keys, your server

    There is no Arbitern account and no server of ours in between. Your machine talks to the exchanges directly.

  • Open to the last line

    The engine, the cost model and the panel are all in the repository. Nothing runs that you cannot read: read it, change it, run it.

  • Confirmed, not predicted

    No forecasts and no signals to chase. A spread qualifies only when both books show it, at your size, after every cost.

  • No promised returns

    Spreads close, fills can be partial and orders can fail. One switch halts every route. Nothing on this site is a track record.

Questions

Is it really free?

Yes. Arbitern is open source. Use it, change it and run it for yourself or for your desk.

What do I need to run it?

A Linux server or a Mac. For live trading, a small server close to your exchanges’ matching engines — Tokyo or Singapore for most of them — keeps every round trip short.

How do I upgrade?

From the panel. When a new release is out it shows up there, and one click installs it and restarts the engine. Your settings, keys and ledger stay where they are.

Where are my API keys kept?

On your server, encrypted at rest, and sent nowhere but the exchange they belong to. Use trade-only keys with withdrawals turned off: Arbitern never needs to move funds off an exchange.

What does “after cost” include?

Taker fees on both exchanges, expected slippage at your order size against the live book, and funding where a perpetual is involved. Withdrawal and transfer costs are shown separately.

Can I add an exchange?

Yes. Each exchange is one adapter in the engine: an order book stream, order entry and balances. The repository has a guide for writing one.

Will it make money?

Not necessarily. A spread that clears its cost when spotted can close before both legs fill. Arbitern shows you the cost and the risk; it cannot promise an outcome.

Which exchanges are supported?

Binance, OKX, Bybit, Coinbase, Kraken, Bitget, Gate, HTX. More arrive as adapters, from us and from contributors.

Patient above the water.Quick below it.

Read the script first
$ curl -fsSL https://get.arbitern.dev | sh