Skip to content
NextOutcome
GitHub

818 tests · 18 modules · no third-party dependencies

Polymarket.
Rebuilt in Swift.

A full native iOS client for a product that only ships a website. Live order books, six category hubs, zero web views.

No signup. No API keys. Clone and run.

In active development · Unofficial, not affiliated with Polymarket.

NextOutcome World Cup 3D globe with live nation odds

Built like a terminal. Feels like an app.

01

Live order books

Bids and asks stream over WebSocket - reconnect and back-off included. Spread, depth bars, and a ladder that opens up.

Live order book with depth ladder and spread

02

A sports hub the server builds

Sports and leagues come from the API, not a hardcoded list. Live now, Starting soon, Today, Tomorrow - with running clocks and eight odds formats.

Sports hub scrolling through live games and leagues

03

Crypto, live by the minute

Countdown on the server's clock, the price to beat, candles you can pinch to zoom. When the window closes, the next one takes its place.

Live crypto window with countdown and price chart

04

The 2026 Midterms, mapped

Senate and House control, seat pictograms, and a US map coloured by each race's lean - geometry parsed from SVG paths, no map SDK.

Midterms hub with Senate and House seat dots and a US race map

05

Esports with the stream built in

A Twitch or YouTube hero behind a live-status probe, a trade ticker, and scores pushed over the sports socket.

Esports hub with live stream hero and match cards

06

A 3D globe of nation odds

Every World Cup nation's odds on a draggable SceneKit globe. Spin the planet, find the value.

3D World Cup globe with nation odds

Smaller things, done properly

Geoblock gate

The trade sheet checks Polymarket's public geoblock status on launch and refuses to open in blocked regions - enforced inside the sheet, so every entry point is covered.

Trade sheet

Amount entry on a custom number pad with tactile 3D keys, a live “to win” payout, and a receipt after you confirm. Simulated for now - it sends nothing and stores nothing.

Skeletons, not spinners

Every loading state is a shimmering shape of the content that's coming, numbers roll digit by digit, and one tap flips the app light or dark.

Breaking

The biggest 24h movers, ranked and numbered, each opening its own movers chart. A dated hero and category pills sit on top.

Discussion & holders

Comments in a swipe-to-dismiss sheet, top holders, and recent activity - per event, next to the price.

Watch-only portfolio

Track any wallet's positions, activity, and where it ranks. No keys, no custody.

On the screen

Market detail with multi-outcome rows
Market detail
Trade sheet with a custom number pad
Trade sheet
Discussion sheet with comments and holders
Discuss
Ranked list of the biggest 24h movers
24h movers
Sports hub live-now feed
Live now
Esports match detail with map winners
Match detail
Crypto live window order book and recent trades
Book & trades
World Cup knockout bracket
Knockout bracket
Full-text market search
Search

Under the hood

Clean Architecture + MVVM

Domain, Data, and Presentation layers sliced vertically by feature across 18 Swift Package modules - every hub ships as an independent unit.

Streaming-first networking

Order books and live sports ride WebSockets with automatic reconnect and exponential back-off.

Native rendering everywhere

Swift Charts for price history, SceneKit for the 3D globe, zero web views in the entire app.

  • Swift
  • SwiftUI
  • Swift Charts
  • SceneKit
  • Swift Concurrency
  • @Observable
  • URLSession
  • WebSocket
  • Keychain
  • SPM
  • GitHub Actions

Tested and CI-checked - 818 hermetic tests in ~2s across 18 targets, plus SwiftLint and an app-target build on every push.

▲ Next: on-chain trading via a vetted EIP-712 signer + backend proxy - the signer is a quarantined stub until it passes security review.

Got thoughts on NextOutcome?

Bugs, ideas, or just a reaction - I read everything.

Other markets