{"id":47692651,"url":"https://github.com/johnwatso/swiftminer","last_synced_at":"2026-07-29T00:00:42.808Z","repository":{"id":345612779,"uuid":"1184095956","full_name":"johnwatso/SwiftMiner","owner":"johnwatso","description":"Native macOS app for automatic Twitch Drops farming. Multi-account Twitch Drops miner built with Swift 6 and SwiftUI. Secure, fast, and AFK ready","archived":false,"fork":false,"pushed_at":"2026-07-22T03:39:21.000Z","size":49744,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-22T04:19:18.637Z","etag":null,"topics":["afk","automation","macos","multi-account","native-macos","swift","swiftui","twitch","twitch-drops","twitch-drops-miner"],"latest_commit_sha":null,"homepage":"http://swiftminer.app/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/johnwatso.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-17T08:47:59.000Z","updated_at":"2026-07-22T03:39:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"13fec16a-823d-41e1-a311-9b72a167cfd2","html_url":"https://github.com/johnwatso/SwiftMiner","commit_stats":null,"previous_names":["johnwatso/swiftminer"],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/johnwatso/SwiftMiner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwatso%2FSwiftMiner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwatso%2FSwiftMiner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwatso%2FSwiftMiner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwatso%2FSwiftMiner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnwatso","download_url":"https://codeload.github.com/johnwatso/SwiftMiner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwatso%2FSwiftMiner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36011657,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-28T02:00:06.341Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["afk","automation","macos","multi-account","native-macos","swift","swiftui","twitch","twitch-drops","twitch-drops-miner"],"created_at":"2026-04-02T15:51:26.624Z","updated_at":"2026-07-29T00:00:42.801Z","avatar_url":"https://github.com/johnwatso.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"Website/public/assets/landing/app-icon-light.webp\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"Website/public/assets/landing/app-icon-light.webp\"\u003e\n    \u003cimg src=\"Website/public/assets/landing/app-icon-light.webp\" width=\"120\" alt=\"SwiftMiner icon\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eSwiftMiner — Twitch Drops Miner and Claimer for macOS\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  A Mac app for mining and claiming Twitch Drops. Secure, lightweight, and multi-account ready.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Wildly over-engineered for collecting pixels, so you can leave it running and think about literally anything else.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003e\u003ca href=\"https://swiftminer.app\"\u003eTwitch Drops Miner for Mac\u003c/a\u003e\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-macOS%2014+-blue\" alt=\"Platform badge\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/swift-6.0-orange\" alt=\"Swift badge\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/architecture-Universal%20(Apple%20Silicon%20%2B%20Intel)-black\" alt=\"Architecture badge\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"License badge\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/status-active%20development-orange\" alt=\"Status badge\"\u003e\n\u003c/p\u003e\n\n## Highlights\n\n- Web UI for remote monitoring and management\n- Discord DM support via SwiftBot\n- Notarized by Apple for trusted macOS installs\n- Built-in update management with Sparkle\n\n**SwiftMiner** is a high-performance, native **Twitch Drops miner and claimer for macOS** designed to automate Drops farming across multiple accounts simultaneously. Built with Swift 6 and SwiftUI, it provides a lightweight, background-ready solution for progress tracking, eligible stream selection, and automatic reward claiming without the need for browser automation or heavy external dependencies.\n\nIt is written in Swift using SwiftUI and standard macOS frameworks. Each account runs in its own isolated miner, and the app provides a single interface to monitor progress, claim state, and activity.\n\nIt can be used for a single account or multiple accounts.\n\n## Acknowledgements\nSpecial thanks to [DevilXD](https://github.com/DevilXD) for creating [TwitchDropsMiner](https://github.com/DevilXD/TwitchDropsMiner), which provided the initial inspiration for SwiftMiner.\n\nSpecial thanks to [Max Hewett](https://github.com/maxhewett) for creating [ShipHook](https://github.com/maxhewett/ShipHook) and for his help throughout the project. ShipHook powers SwiftMiner's build, signing, notarization, update, and release pipeline.\n\n## Overview\n\nSwiftMiner monitors active Twitch Drop campaigns and selects streams to watch based on:\n\n- Campaign priority\n- Time remaining\n- Account eligibility\n\nEach account progresses independently. The app handles stream selection, progress tracking, and claiming completed Drops.\n\n## Why This Exists\n\nSwiftMiner started as a side project to solve a problem I had on macOS.\n\nTo mine drops for myself and a few friends, I was running multiple instances of a Twitch drops miner inside a Windows virtual machine. It worked well, but managing several accounts across multiple miner instances wasn’t particularly convenient. Updates needed to be applied to each miner individually, and if something stopped running, it could go unnoticed for a while.\n\nAnother goal of the project was to take advantage of modern Swift and macOS technologies. Coordinating multiple miners, account sessions, updates, and network requests provided a real-world use case for features such as Swift Concurrency and helped shape much of SwiftMiner’s architecture.\n\nI wanted a solution that ran natively on macOS and made it easier to manage multiple accounts from a single application. I also wanted updates, account management, and miner monitoring to be handled in one place rather than across several separate windows and processes.\n\nSwiftMiner has been built around those ideas. The goal isn’t to reinvent Twitch drop mining—it’s to make it easier to run and manage on macOS while taking advantage of the platform it runs on. \n\n## What SwiftMiner Does\n\n- Watches Twitch streams to farm Drops automatically\n- Prioritizes campaigns based on time remaining and configured order\n- Runs each account as an independent miner\n- Tracks in-progress, claimable, and completed Drops in one view\n- Automatically claims Drops when they complete\n- Supports multiple accounts running in parallel\n- Provides both a main window and a menu bar interface\n- Uses Twitch device-code login, with no embedded browser\n- Ships signed and notarized release builds for macOS\n- Supports Sparkle update checks, automatic updates, and unattended updates\n- Runs as a native macOS app built with Swift and SwiftUI\n\n## Preview\n\n### Overview\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"Website/public/assets/landing/overview-dark.webp\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"Website/public/assets/landing/overview-light.webp\"\u003e\n    \u003cimg src=\"Website/public/assets/landing/overview-light.webp\" alt=\"SwiftMiner Overview\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n### Miners\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"Website/public/assets/landing/miners-dark.webp\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"Website/public/assets/landing/miners-light.webp\"\u003e\n    \u003cimg src=\"Website/public/assets/landing/miners-light.webp\" alt=\"SwiftMiner Miners\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n### Drops\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"Website/public/assets/landing/drops-dark.webp\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"Website/public/assets/landing/drops-light.webp\"\u003e\n    \u003cimg src=\"Website/public/assets/landing/drops-light.webp\" alt=\"SwiftMiner Drops\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n### Activity Log\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"Website/public/assets/landing/activity-log-dark.webp\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"Website/public/assets/landing/activity-log-light.webp\"\u003e\n    \u003cimg src=\"Website/public/assets/landing/activity-log-light.webp\" alt=\"SwiftMiner Activity Log\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n### Discord\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"Website/public/assets/landing/discord-dark.webp\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"Website/public/assets/landing/discord-light.webp\"\u003e\n    \u003cimg src=\"Website/public/assets/landing/discord-light.webp\" alt=\"SwiftMiner Discord linking\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\n## How It Works\n\n- Each account runs its own miner engine\n- The engine fetches active campaigns and eligibility from Twitch\n- Campaigns are prioritized based on time remaining and user preference\n- A stream is selected for the active campaign\n- Watch progress is tracked via Twitch APIs\n- Completed Drops are claimed automatically\n\nThe app sits on top of these engines and presents their state in a single interface.\n\n## Install\n\nDownload the latest release from the official [Twitch Drops Miner for Mac website](https://swiftminer.app) or from [GitHub Releases](https://github.com/johnwatso/SwiftMiner/releases).\n\n1. Download the latest `.zip`\n2. Move `SwiftMiner.app` to `/Applications`\n3. Open the app and add an account\n4. Allow notifications if you want claim alerts\n\n\u003e [!TIP]\n\u003e **Security Prompt:** On first update or when enabling automatic updates, macOS may prompt for **\"App Management\"** permissions. This is expected and required for **Sparkle** to perform unattended/auto updates. You should allow this if you want the app to stay up-to-date automatically in the background.\n\nRelease builds support both Apple Silicon (`arm64`) and Intel (`x86_64`).\n\nRelease builds are signed and notarized through ShipHook, and SwiftMiner includes Sparkle support for update prompts, automatic background checks, and unattended updates when macOS allows them.\n\n\u003e [!NOTE]\n\u003e SwiftMiner aims to support both Apple Silicon and Intel Macs, along with the oldest practical macOS version. Support will only be reduced when a required SwiftMiner feature or underlying Apple framework depends on a newer OS or architecture.\n\n## Releases vs. Development Builds\n\nThe latest GitHub release is the most stable version.\n\nBuilding from the current `main` branch includes newer changes that have not been released yet. These builds may contain bugs, incomplete features, or breaking changes.\n\n\u003e [!NOTE]\n\u003e SwiftMiner is updated frequently — sometimes multiple times a day when Twitch changes behavior or bugs need a quick fix. We try to avoid shipping more than one release per day, but it can happen. Enabling automatic or unattended updates is the easiest way to stay current.\n\n## Requirements\n\n- macOS 14.0+\n- Internet access\n\n## Project Layout\n\n```text\nSources/\n  SwiftMiner/          macOS app, SwiftUI views, settings, and app resources\n  SwiftMinerCore/      mining engine, Twitch services, models, and persistence\n  SwiftMinerService/   Discord integration and embedded web-dashboard server\nTests/                 Xcode unit and integration tests\nTools/\n  SparklePublisher/    release packaging and Sparkle publishing tool\nWebsite/\n  public/              production website, help pages, release notes, appcasts\n  styles/              website stylesheet source\nDocumentation/         architecture, research, testing, and release notes\nSwiftMiner.icon/       source assets for the macOS application icon\nSwiftMiner.xcodeproj/  generated Xcode project\nproject.yml            XcodeGen source configuration\nscripts/               build, validation, and release automation\n```\n\n## Architecture\n\nSwiftMiner is a native Xcode project split between the macOS app and `SwiftMinerCore`, which contains the mining engine, Twitch services, models, and account state.\n\n## Notes and Risk\n\n\u003e [!CAUTION]\n\u003e This tool automates Twitch Drop viewing.\n\u003e\n\u003e Twitch's policies around automation are not always clearly defined, so there is some risk when using it.\n\u003e\n\u003e Proceed with caution and use at your own discretion.\n\n\u003c!-- markdownlint-disable-next-line MD028 --\u003e\n\u003e [!WARNING]\n\u003e If the same account is used to watch a stream elsewhere (e.g. in a browser or another device),\n\u003e Twitch may prioritise that session instead.\n\u003e \n\u003e This can stall drop progress or cause the miner to switch streams.\n\n\u003c!-- markdownlint-disable-next-line MD028 --\u003e\n\u003e [!WARNING]\n\u003e Twitch may change how Drops or third-party automation is handled at any time. Accounts could be affected. Use with that in mind.\n\n\u003c!-- markdownlint-disable-next-line MD028 --\u003e\n\u003e [!NOTE]\n\u003e Only one active stream per account contributes to drop progress.\n\n\u003c!-- markdownlint-disable-next-line MD028 --\u003e\n\u003e [!NOTE]\n\u003e SwiftMiner is intended for personal use on your own machines.\n\n\u003c!-- markdownlint-disable-next-line MD028 --\u003e\n\u003e [!NOTE]\n\u003e Performance depends on system resources, network conditions, and the number of accounts being managed.\n\n## Issues\n\nPlease raise a GitHub issue if something breaks, behaves unexpectedly, or needs attention.\n\nSwiftMiner depends on Twitch's private behavior for Drops, watch progress, and claiming. Changes on Twitch's side can break the app without warning. To reduce downtime, enable automatic updates or unattended updates where possible so fixes are installed as soon as they are released.\n\n## Related Docs\n\n- [Architecture Overview](Documentation/ARCHITECTURE.md)\n- [Engine Architecture](Documentation/EngineArchitecture.md)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnwatso%2Fswiftminer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnwatso%2Fswiftminer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnwatso%2Fswiftminer/lists"}