polymarket-tui/blog/paper-trading

How to Paper-Trade Polymarket Without Risking Money

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 does

Not 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.

02Why the real book beats a simulator

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 too

Every 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 walkthrough

What 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 you

A 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.

06Going live when ready

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.

Prices and book depth are a snapshot from 2026-08-10 08:13 UTC and will have moved since. More posts on the blog index, or subscribe via RSS. Not affiliated with Polymarket; nothing here is financial advice.