Most "paper trading" tools hand you a fake account, a simulated fill engine, and prices that update on a delay. Polymarket's order book is public and free to read, which means a practice mode doesn't need any of that: it can use the real book, the real validation rules, and the real signature - and simply stop one step short of sending the order to the exchange. That is what dry-run mode is.
01What dry-run actually doesNot a sandbox - the real pipeline, minus one call
In polymarket-tui, every order - dry-run or live - goes through the same
path: it is priced against the live book, validated against the exchange's
own rules, and signed as a real EIP-712 order object. The only difference
is the last step. A live order calls post_order and the
exchange either matches or rests it. A dry-run order stops right before
that call. Nothing about the pricing, validation, or signing is
approximated to make this possible - it is the identical code path a live
order takes, run against the identical live market data, with the network
call to actually place it skipped.
That matters because it is also why dry-run defaults to on. Going live
is deliberate: press L to toggle DRY/LIVE for the session (or
set POLYMARKET_EXECUTION_LIVE=1), confirm it, and the choice
persists with your saved credentials. A session that starts in LIVE mode
announces it loudly rather than posting quietly - the app is never
careless with money it might send.
Fake liquidity teaches you the wrong lessons
A simulator that fills you instantly at the last traded price hides the two things that actually determine whether a real order works: how much depth sits at your price, and how wide the spread is between where you can buy and where you could immediately sell back. Practicing against Polymarket's live book means a thin market shows itself as thin - a 10,000-share order against 400 shares of resting depth genuinely won't fill at one price, and dry-run mode shows you that exact split, drawn from the same book a live order would have crossed.
03The checks you'd hit live, you hit here tooEvery hard block still fires
polymarket-tui's order panel runs one validation pipeline regardless of mode: is the market still open and accepting orders, is the price a multiple of the current tick, does the size clear the exchange minimum (usually 5 shares), is the price strictly between 0 and 1, and - checked against your real balance and real positions - can you actually afford a buy or cover a sell. A price sitting more than 10% from the book's midpoint, or a notional above your configured limit, surfaces as a yellow warning rather than a block, exactly as it would live. Practicing in dry-run means the first time you hit "minimum 5 shares for this market" or "price must be a multiple of 0.001" costs you nothing - you learn the rule instead of losing an order to it.
04A live walkthroughWhat the confirm card shows
Here is a real dry-run buy, priced against Polymarket's actual book as of 2026-08-10 08:13 UTC: the "no change" outcome on the Fed's September 2026 rate decision, trading at 63c bid / 64c ask on $1.10M in 24-hour volume. Typing a 10-share buy at the ask and pressing enter arms the confirm card exactly as it would for a live order:
DRY-RUN - signs, never posts
BUY 10 YES
@ 64c limit GTC
fills all ~10 now
cost $6.40
payout $10.00 if it wins
enter place esc edit
The card is not a mockup built for this post - it is what the app renders from that exact book, with the exact resting size that made "fills all ~10 now" true at that moment. A second enter would place it. In dry-run mode, that second enter instead logs the outcome and returns you to the panel, having proven the whole pipeline works without moving a dollar.
05What dry-run can't show youA signed order is not a matched one
The fill line is an estimate of what the book could absorb at the moment you drafted the order, not a report of what happened - because nothing happened. A live order posted a second later might find that depth already taken by someone else, or find more behind it. Dry-run proves your order is valid and shows you the book's shape; it cannot show you the result of a race that never ran. Your balance and positions do not change, and there is no fill notification, because the exchange never saw the order.
What it does keep is a record: every dry-run placement and cancel is
appended to the same audit log a live order would use
(~/.local/share/polymarket-tui/orders.jsonl), tagged
dry_run: true. Practice sessions leave a trail you can review
- what you would have bought, at what price, and why - even though nothing
was ever at stake.
The switch is one key, used on purpose
L toggles DRY/LIVE for the session and asks for
confirmation before it takes effect; nothing about the order panel changes
shape, so everything learned in dry-run - reading the fill line, watching
for warnings, checking the tick before you type a price - carries straight
over. That is the point of building practice on the real exchange instead
of a separate mode: there is nothing new to learn when the orders start
being real.
$ uv tool install polymarket-tui
$ polymarket-tui
The install page has Homebrew and one-liner options. Every new session starts in dry-run until you choose otherwise.