DropPilot is a desktop app that automates Twitch Drops. It tracks your drop inventory, picks and watches an eligible stream, switches when that stream goes down, and (optionally) claims drops for you — all in the background, while staying transparent about what it's doing.
- Features
- Screenshots
- Quick start
- How it works
- Releases & updates
- Configuration & data
- Debug tools
- Troubleshooting
- Tech stack
- Acknowledgements
- License
DropPilot also stays out of your way while it works: a live status readout (scanning, watching, recovering…), claim-retry countdowns, and a one-click prompt to sign back in when your Twitch session expires. A Debug tab (off by default) adds live logs and a state snapshot for when you need to dig in.
Dark theme with demo data. (Overview is shown above.)
| Stats | Inventory | Control |
|---|---|---|
![]() |
![]() |
![]() |
npm install
npm run dev # launches the app (Vite + Electron, hot reload)The most common scripts:
| Script | Purpose |
|---|---|
npm run dev |
Run the app in development (hot reload) |
npm run build |
Build the renderer (dist/) + main & preload (dist-electron/) |
npm test |
Run the test suite (Vitest); npm run test:watch to watch |
npm run lint |
ESLint |
npm run format |
Prettier (format:check to verify) |
For local-dev details, testing conventions, commit style, and the release process,
see CONTRIBUTING.md.
DropPilot is a standard three-layer Electron app:
src/main— Electron main process: app lifecycle, the IPC handlers, JSON persistence in the user-data directory, and the entire Twitch integration (src/main/twitch: GQL client, high-level service, live PubSub events, channel tracking, watch-minute pings). All network calls happen here, never in the renderer.src/preload— the context-bridge that exposeswindow.electronAPI.src/renderer— the React UI.shared/hooks/app/useAppModel.tsis the central hook that composes auth, inventory, channels, watch ping, priority, and stats into the app state the views render.
The trickiest subsystem is the watch engine (auto-select / auto-switch / stall
recovery / target suppression). It's documented in
docs/watch-engine.md, with an end-to-end sequence diagram
in docs/watch-flow.puml.
Releases are published to GitHub Releases (Windows .exe + a macOS .dmg) and
built by CI when a v* tag is pushed. The app auto-updates on Windows and offers
two channels — stable and preview — selectable in Settings → Updates, which
also shows the in-app release history. See CONTRIBUTING.md for
how to cut a release.
Settings and stats are stored as JSON in the Electron user-data directory
(settings.json, stats.json) and managed through the in-app Settings view.
The Debug tab is off by default to keep background work minimal. Enable it in Settings → Debug tools. Debug logs are only collected while it's on; perf and CPU snapshots appear in the Debug snapshot.
- "Not logged in" → use Login with browser in the top bar.
- App feels slow → disable the Debug tab and restart.
- Need verbose logs → enable Debug tools in Settings.
Electron 42 · React 19 · Vite 7 · TypeScript · Tailwind CSS v4 · Vitest
DropPilot's drop-mining approach is heavily informed by Twitch Drops Miner by DevilXD. Much of the core behavior — stream-less watch pings, drop/campaign validation, automatic channel switching, and PubSub-based status tracking — is derived from that project. Huge thanks to DevilXD and the Twitch Drops Miner contributors.
Twitch Drops Miner is MIT-licensed (Copyright © 2024 DevilXD); its license is
reproduced in THIRD_PARTY_NOTICES.md.
MIT — see LICENSE.



