TokenRunway 🛬
GitHub →

How many minutes of AI do you have left?

An always-on macOS desktop floating ball that shows your AI token runway — at a glance, across all your providers, before you hit empty.

Swift 6 + SwiftUI / AppKit macOS 14.0+ MIT License Open Source
TokenRunway floating ball showing Volcano monthly, weekly and 5-hour quota rings TokenRunway floating ball and hover card showing DeepSeek balance and last-5h spend

Why TokenRunway

“Runway” is the startup word for how long you can keep burning before you're out. TokenRunway puts that number on your desktop.

👀 Glanceable

See your remaining quota without switching away from your work or opening a browser.

🔀 Unified providers

Volcano (5h / 7d / 30d windows), DeepSeek (balance) and Kimi Code (weekly quota) rendered homogeneously; click for a full dashboard.

🔮 Prediction over reporting

Computes ETA from burn rate — “at the current pace, your 5h quota has 12 minutes left.” Know before it happens.

🌱 Low-overhead resident

Native SwiftUI + AppKit, tiny resident memory and CPU; never steals focus.

Supported providers

Adapter-first architecture: every provider maps onto one unified quota model.

ProviderWhat is shownStatus
Volcano Engine (火山引擎)5h / 7d / 30d rolling windows✅ real-verified
DeepSeekPure account balance (¥)✅ real-verified
Kimi CodeWeekly quota + rolling rate windows✅ real-verified
MiMo · ZhipuQuota / balance🚧 added, verify
OpenAI · AnthropicQuota / balance🔜 planned

Install

Build from source (Homebrew cask pending notarization).

# build
git clone https://github.com/kungf/token-runway.git
cd token-runway
swift build
# credentials — outside the repo, in ~/.trwy/config.json (chmod 600)
# { "providers": { "deepseek": { "token": "sk-..." }, "volcano": { "ak": "...", "sk": "..." } } }
# verify with the CLI
.build/debug/trwyctl all
# package & run
./Scripts/make-app.sh
open build/TokenRunway.app

No credentials? Run the real UI with synthetic data: TRWY_MOCK=mixed open build/TokenRunway.app (scenarios: healthy · warning · critical · exhausted · mixed · balance-critical).

Interactions

GestureAction
hoverfloating summary (provider + per-window percentages)
clickopen dashboard (all providers at a glance)
scrollcycle core liquid between 5h ↔ 7d (outer monthly ring unchanged)
dragmove the ball; snaps to nearest screen edge on release
right-clickmenu (refresh / pause / settings / hide)