One window for your Hyperliquid perps and your Polymarket predictions, with one net worth number.
Dugout is read-only, by construction.
- No keys. You paste public addresses. There is no private key, no seed phrase, and no signing prompt anywhere in the app.
- No backend. Every request goes from your machine straight to the public Hyperliquid and Polymarket APIs. There is no Dugout server.
- No telemetry. No analytics, no crash reporting, nothing phoning home.
- Auditable in minutes. Every outbound network call lives in exactly two files:
src/lib/hl.tsandsrc/lib/polymarket.ts. Read them and you have read the app's entire network surface.
See SECURITY.md for the full picture.
If you trade perps on Hyperliquid (or through Bullpen) and hold positions on Polymarket, your money lives in two tabs that know nothing about each other. Neither shows you the number you actually care about: what is everything worth right now, and does anything need your attention?
Dugout puts both venues in one desktop window. One total, per-venue breakdowns, and a plain-English "needs attention" row for the things that should not wait: winnings sitting unredeemed, perps drifting toward liquidation, markets about to resolve.
- One net worth number: Hyperliquid perps account value + spot balances + Polymarket position value, refreshed live.
- Dashboard: per-venue summary cards and a needs-attention row that only appears when something is actually true (redeemable winnings, a perp within 15% of liquidation, a market resolving within 48 hours).
- Perps tab: full positions table with entry, mark, liquidation price, distance to liquidation, leverage, and unrealized PnL. Sortable columns.
- Predictions tab: positions sorted by resolution date, with a humanized countdown and a "Ready to redeem" group floated to the top. Click a row to open the market on polymarket.com.
- Profiles: track multiple people or accounts, each with a Hyperliquid address, a Polymarket address, or both. Switch from the header.
- Tray icon: left-click to show or hide the window.
Everything is stored locally (localStorage in the app's webview). Nothing leaves your machine except the API reads.
v0.1 is build-from-source. Installers arrive with a later tag via GitHub Releases.
Prerequisites: Node 20+, Rust stable, and the Tauri 2 system dependencies for your OS.
git clone https://github.com/ramenxbt/dugout
cd dugout
npm install
npm run tauri:buildThe bundle lands in src-tauri/target/release/bundle/. For development:
npm run tauri:devsrc/
lib/
hl.ts Hyperliquid info API client (all HL network calls)
polymarket.ts Polymarket data API client (all PM network calls)
aggregate.ts merges multi-wallet HL snapshots, values spot in USD
derive.ts shared derived values (liq distance, day PnL, redeemables)
profiles.ts profile storage and validation (localStorage)
format.ts number, currency, and countdown formatting
hooks/
useAggregateSnapshot.ts polls Hyperliquid every 5s
usePolymarket.ts polls Polymarket every 15s
components/ dashboard, perps, predictions, profiles, onboarding
src-tauri/ minimal Rust shell: one window plus a tray icon
The webview calls both public APIs directly. The Rust side does no networking at all.
- v0.2: alerts and a menu-bar ticker mode
- v0.3: trade analytics
- v0.4: smart-money feed
- v0.5: digests and exports