Automatically mine timed Twitch Drops without streaming video or audio.
Twitch Drops Miner is a low-bandwidth, headless application that discovers eligible campaigns, selects an appropriate live channel, and tracks drop progress from a web dashboard. It sends Twitch watch events without downloading the stream itself.
- Low-bandwidth mining — progresses timed drops without downloading video or audio
- Automatic campaign discovery — detects active and upcoming drop campaigns
- Smart channel selection — prioritizes eligible channels, preferred games, and viewers
- Drop-name ignore rules — excludes unwanted reward names and dependent branches
- Persistent sessions — saves OAuth login state between runs
- Web dashboard — manages campaigns, channels, inventory, settings, and login status
- Headless deployment — runs locally, remotely, or in Docker without a desktop GUI
- Safe rendering — builds dynamic translated content with DOM APIs instead of raw HTML
Docker stores persistent application data in /app/data. The command below binds that
directory to ./data on the host:
docker run -d \
--name twitch-drops-miner \
-p 8080:8080 \
-v "${PWD}/data:/app/data" \
--restart unless-stopped \
rangermix/twitch-drops-miner:latestOpen http://localhost:8080.
From the repository root, build and start the included
docker-compose.yml:
docker compose up -d --buildSource installations require Python 3.12 or newer and
uv:
uv sync
uv run main.pyThen open http://localhost:8080.
- Log in with your Twitch account through the OAuth device flow.
- Wait for the miner to discover available campaigns.
- Choose the games you want to prioritize. You can also search for a game, select Add Game, and then select Reload.
- Leave the miner running while it selects eligible channels and tracks drop progress.
Inventory filters combine Active, Upcoming, and Expired as alternatives. Not Linked narrows that status result, while fully claimed campaigns stay hidden until Finished is selected. Zero-minute subscription rewards are omitted from the Inventory and Wanted Drops Queue because they cannot be earned by watching. Individually expired and non-mineable rewards are also omitted from the queue, while upcoming and sequential rewards remain visible; successful claims refresh the queue immediately. The channel list matches game names case-insensitively and keeps the actively watched channel visible while game settings are changing. Campaign totals and claim messages count only rewards that can be earned by watching. Consecutive identical no-active-campaign console prompts are collapsed until another console message appears.
Ignored Drop Keywords in Settings is empty by default. Enter one literal substring per line; surrounding whitespace and blank lines are removed, and duplicates are collapsed case-insensitively while preserving the first spelling. Matching is also case-insensitive. A matching drop and every unclaimed branch that depends on it are ignored dynamically. Prerequisite-only branches with no remaining mineable reward are shown as skipped, while a prerequisite shared by an allowed reward remains mineable. Ignored and skipped drops are never reported as claimed. This controls what the miner intentionally targets, but Twitch may still grant simultaneous progress to an ignored reward while another reward advances.
In Settings, Clear All Cache calls POST /api/cache/clear to discard local
campaign, channel, and other derived miner state while preserving your OAuth login and
settings, then reloads the data from Twitch. This is a recovery and diagnostic action;
it cannot correct inaccurate campaign metadata returned by Twitch.
Note
Your Twitch account must be linked to the relevant game accounts. Review your Twitch Drops campaigns before mining.
Warning
Avoid watching Twitch manually with the same account while the miner is running. Simultaneous viewing can cause drop-progress desynchronization.
- Docker data is stored inside the container at
/app/data; the examples persist it to./dataon the host. - Source installations store persistent data in the repository's
data/directory. - Logs can be persisted separately by mounting
./logs:/app/logs.
Contributors are credited automatically when their pull requests are merged into main.
| Contributor | Merged pull requests |
|---|---|
| @birdhimself | #41 |
| @capkz | #70 |
| @EthanBlazkowicz | #33 |
| @Knight-sys | #3 |
| @rangermix | #1 · #2 · #7 · #8 · #9 · #13 · #20 · #24 · #29 · #32 · #45 · #74 · #79 · #80 · #84 · #86 · #88 · #93 · #89 · #90 · #91 · #92 |
| @Sean-Destefano | #49 |
| @SimpliAj | #72 |
| @Stein-N | #71 |
| @vurmil | #12 · #17 |
If Twitch Drops Miner saves you time or bandwidth, you can support the project by:
- starring the repository
- reporting an issue or submitting a pull request
- buying the maintainer a coffee
This project is a modern fork of DevilXD/TwitchDropsMiner, created by @DevilXD. You can support the original author through Buy Me a Coffee or Patreon.
Original project and translation credits
- Arabic — @Bamboozul
- Chinese (Simplified) — @Suz1e, @wwj010, and @zhangminghao1989
- Chinese (Traditional) — @Ricky103403 and @LusTerCsI
- Czech — @nwvh
- Danish — @Kjerne
- French — @roobini-gamer and @Calvineries
- German — @ThisIsCyreX
- Hungarian — @centipederat
- Indonesian — @Eriza-Z
- Italian — @casungo
- Japanese — @ShimadaNanaki
- Polish — @Patriot99, co-authored with @DevilXD
- Portuguese — @zarigata
- Russian — @Sergo1217 and @kilroy98
- Spanish — @Shofuu
- Turkish — @alikdb
- Ukrainian — @Nollasko and @kilroy98
This fork is maintained with AI-assisted development tools. Changes are validated through
automated tests and code-quality checks, but users should still review updates before
deploying them. The validation suite includes GraphQL watch events and batched channel
discovery, alongside settings, full-locale translation schema and placeholder checks,
and frontend safety checks. Use the software
responsibly. Release automation verifies that the runtime, package, and lockfile versions
match before publishing tags and Docker images. Docker validation and release jobs use
the same pinned, Node-24-native Buildx and image-build action releases.
The suite also covers ignored-keyword normalization, dependency branches, the combined
expiry/ignore Wanted Queue guard, watch selection, API persistence, translated placeholder
parity, and frontend rendering. Any web/static/app.js or web/static/styles.css change
must go through the release workflow so the application version and browser asset cache key
are bumped before deployment.
