A frequently updated, automatically sanitized, blacklist-filtered list of BitTorrent Trackers β rebuilt every 6 hours from 95+ community sources.
Read the Documentation β’ Report a Bug β’ Request a Feature β’ Discussions
Finding reliable and active BitTorrent trackers is a hassle: public lists are often stale, duplicated, or polluted with dead and malicious trackers. This repository solves that with a fully automated GitHub Actions pipeline that fetches, sanitizes, blacklist-filters, and publishes fresh tracker lists β with zero human intervention.
- β±οΈ Always Fresh: Lists are rebuilt every 6 hours from 95+ sources (full list).
- π« Blacklist-Filtered: Known-bad trackers (dead, malicious, flooded) are actively excluded via
blacklist.txt, built from dedicated blocklist sources. - π‘οΈ Deeply Sanitized: A multi-stage pipeline strips junk, normalizes URLs, removes duplicates, and drops private/localhost/reserved hosts.
- π₯ Crash-Safe: Built-in guards abort any update where sources mass-fail, so the published lists are never wiped by a bad run.
- π API Ready: Developer-friendly JSON endpoints for seamless app integration.
- π Verifiable: SHA-256 checksums on every update, Sigstore-signed releases, SBOM, and OpenSSF Scorecard monitoring.
- π³ Docker Support: Run the exact same engine locally with Docker or plain bash.
Add these raw links directly to your torrent client (qBittorrent, Transmission, aria2, etc.) to automatically fetch trackers:
- π₯ All Trackers β The complete, sanitized, priority-sorted list.
- π Comma-Separated β Single line, comma-joined (aria2 / paste-friendly).
- β‘ UDP Trackers β Fast, low-overhead UDP trackers.
- π HTTPS Trackers β Secure HTTPS-based trackers only.
- π’ HTTP Trackers β HTTP-based trackers (legacy support).
- πΈοΈ WebSocket Trackers β WebTorrent-compatible
ws:///wss://trackers. - π« Blacklist β Known-bad trackers we exclude (do NOT add these to your client).
Legacy note:
trackers.txtis an identical alias ofall_trackers.txt, kept so old hotlinks never break.
π CDN Mirror (jsDelivr) β faster in some regions, immune to GitHub rate limits
https://cdn.jsdelivr.net/gh/mrgusux/automatic-trackers@main/all_trackers.txt
https://cdn.jsdelivr.net/gh/mrgusux/automatic-trackers@main/udp.txt
https://cdn.jsdelivr.net/gh/mrgusux/automatic-trackers@main/https.txt
https://cdn.jsdelivr.net/gh/mrgusux/automatic-trackers@main/http.txt
https://cdn.jsdelivr.net/gh/mrgusux/automatic-trackers@main/ws.txt
qBittorrent
- Open Tools β Options β BitTorrent
- Tick Automatically add these trackers to new downloads
- Paste this URL:
https://raw.githubusercontent.com/mrgusux/automatic-trackers/main/all_trackers.txt
qBittorrent re-fetches the list automatically β set & forget. β
aria2
# One-shot run with all trackers:
aria2c --bt-tracker="$(curl -fsSL https://raw.githubusercontent.com/mrgusux/automatic-trackers/main/all_trackers_comma.txt)" <torrent-or-magnet>Or keep a local copy auto-updated with cron:
0 6 * * * curl -fsSL https://raw.githubusercontent.com/mrgusux/automatic-trackers/main/all_trackers_comma.txt -o ~/.aria2/trackers.txtTransmission
# Add all trackers to an existing torrent (ID 1):
curl -fsSL https://raw.githubusercontent.com/mrgusux/automatic-trackers/main/all_trackers.txt \
| sed '/^$/d' \
| xargs -I{} transmission-remote -t 1 -td {}Building an app or tool? Pure JSON outputs are updated alongside the raw lists:
| Endpoint | Description |
|---|---|
/api/trackers.json |
Complete tracker list as a JSON array + metadata |
/api/stats.json |
Protocol breakdown, success rate, blacklist removals |
/api/badge.json |
Shields.io endpoint for dynamic badges |
Example β extract all UDP trackers with jq:
curl -fsSL https://raw.githubusercontent.com/mrgusux/automatic-trackers/main/api/trackers.json \
| jq -r '.trackers[] | select(startswith("udp://"))'Embed the live tracker-count badge in your own project:
| Trigger | Schedule | Details |
|---|---|---|
| Automated | Every 6 hours (00:00, 06:00, 12:00, 18:00 UTC) | Cron: 0 */6 * * * |
| Manual | On-demand | Actions β Update Trackers β Run workflow (supports force_fetch and debug_mode options) |
Each run:
- β Fetches from 95+ reputable sources in parallel (with retries + cached fallback)
- π§Ή Runs the full sanitization pipeline
- π« Excludes everything found in
blacklist.txt(rebuilt fromconfig/blacklist_sources.txt) - π‘οΈ Aborts safely if results fall below the minimum-count or drop-guard thresholds
- π Generates categorized lists (UDP, HTTPS, HTTP, WebSocket) + JSON API +
SHA256SUMS.txt - πΎ Auto-commits only if data actually changed (idempotency hash check)
The whole engine is a single dependency-light bash script β scripts/update_trackers.sh. The exact same code runs in CI, Docker, and locally.
git clone https://github.com/mrgusux/automatic-trackers.git
cd automatic-trackers
make dev # check prerequisites (bash, curl, jq, ...)
make run # run the aggregator β lists written to repo root
make test # run the bats test suite
make lint # ShellCheck (rules in .shellcheckrc)# Run once - outputs land in ./output/ on your machine, then it exits:
docker compose up --build
# With tunables:
FORCE_FETCH=true DEBUG_MODE=true docker compose up --build
# Cleanup:
docker compose downβοΈ All tunables (environment variables)
| Variable | Default | Purpose |
|---|---|---|
OUTPUT_DIR |
repo root | Where output files are written |
CACHE_DIR |
/tmp/tracker_cache |
Fetch fallback cache |
MIN_TRACKER_COUNT |
150 |
Abort if fewer trackers found |
DROP_GUARD_PERCENT |
60 |
Abort if list shrinks below N% of previous |
MAX_PARALLEL_JOBS |
8 |
Parallel fetch workers |
RETRY_ATTEMPTS |
3 |
Retries per source |
TIMEOUT_SECONDS |
15 |
Per-request max time |
CONNECT_TIMEOUT |
8 |
Per-request connect timeout |
FORCE_FETCH |
false |
true = ignore cache fallback |
DEBUG_MODE |
false |
Verbose debug output |
The sanitization pipeline ensures:
- β
No private IPs (RFC-1918:
10.x,192.168.x,172.16-31.x, link-local169.254.x) - β
No localhost/loopback (
127.x,0.0.0.0,::1) - β
No reserved/example hosts (
example.com,.local,.onion,.internal) - β
Valid protocols only (
udp,http,https,ws,wss) - β No known-bad trackers (blacklist exclusion filtering)
- β Uniqueness enforced (full deduplication, normalized lowercase scheme+host)
- β No HTML/Cloudflare junk (intelligent response validation)
- β Clean encoding (BOM, CR, and control-character removal)
Checksums β regenerated on every update:
curl -fsSLO https://raw.githubusercontent.com/mrgusux/automatic-trackers/main/all_trackers.txt
curl -fsSLO https://raw.githubusercontent.com/mrgusux/automatic-trackers/main/SHA256SUMS.txt
sha256sum --check --ignore-missing SHA256SUMS.txtSignatures β every release asset is keyless-signed with Sigstore Cosign:
cosign verify-blob \
--signature all_trackers.txt.sig \
--certificate all_trackers.txt.pem \
--certificate-identity-regexp 'https://github.com/mrgusux/automatic-trackers/' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
all_trackers.txtReleases also include a CycloneDX SBOM (bom.cdx.json) and RELEASE_SHA256SUMS.txt.
automatic-trackers/
βββ .github/
β βββ workflows/
β β βββ update-trackers.yml # Main 6-hourly aggregation (thin CI wrapper)
β β βββ test.yml # bats test suite runner
β β βββ lint.yml # ShellCheck + actionlint
β β βββ checksum.yml # SHA256SUMS.txt generator
β β βββ release.yml # Automated releases
β β βββ sign-artifacts.yml # Sigstore keyless signing
β β βββ sbom.yml # CycloneDX SBOM generation
β β βββ ... # scorecard, stale, labeler, discord alerts
β βββ labeler.yml # PR auto-labeling rules
β βββ ISSUE_TEMPLATE/
βββ config/
β βββ sources.txt # All tracker source URLs (single source of truth)
β βββ blacklist_sources.txt # Known-bad tracker lists (exclusion only)
βββ scripts/
β βββ update_trackers.sh # The aggregation engine (CI + Docker + local)
βββ tests/
β βββ tracker_test.bats # Pipeline test suite
βββ api/ # Auto-generated JSON endpoints
β βββ trackers.json # All trackers as JSON array
β βββ stats.json # Statistics & metrics
β βββ badge.json # Dynamic badge data
βββ docs/ # GitHub Pages documentation
βββ all_trackers.txt # Master list (auto-committed)
βββ all_trackers_comma.txt # Comma-separated format
βββ udp.txt / https.txt / http.txt / ws.txt # Protocol-specific lists
βββ blacklist.txt # Active exclusion list (auto-built)
βββ SHA256SUMS.txt # Integrity checksums (auto-built)
βββ Dockerfile # Container runtime
βββ docker-compose.yml # Local one-shot deployment
βββ Makefile # Build automation
βββ README.md # This file
βββ SOURCES.md # Source documentation
Contributions make the open source community an amazing place to learn, inspire, and create. Any contribution is greatly appreciated β you don't even need to write code:
- π Propose a tracker source β Feature Request (good source = public, plain-text, actively maintained)
- π Report a bug β Bug Report
- π‘ Share an idea β Discussions
For code contributions:
- Read our Code of Conduct and Contributing Guidelines.
- Fork the project and create your feature branch (
git checkout -b feature/AmazingFeature). - Set up hooks and verify locally:
pre-commit install, thenmake lint test. - Commit (
git commit -m 'Add some AmazingFeature') and push. - Open a Pull Request.
See also: Governance β’ Maintainers β’ Roadmap β’ Security Policy β’ Support
Why did a tracker I use disappear from the list?
Either its upstream sources dropped it, or it entered blacklist.txt (dead / malicious / flooded). If you believe it was removed wrongly, open a bug report.
Is adding more trackers safe?
Trackers are just peer-coordination servers β adding them is the same mechanism every torrent client uses. This project distributes only publicly available tracker URLs, never content. What you download remains your responsibility.
When was the list last updated?
Check the updated_at field in api/stats.json, or look at the latest commit on the main branch.
Distributed under the MIT License. See LICENSE for more information. This project follows an open Governance Model for transparent decision-making.
This project aggregates data from 95+ open-source tracker repositories and live APIs. Special thanks to:
- ngosang/trackerslist
- XIU2/TrackersListCollection
- DeSireFire/animeTrackerList
- hezhijie0327/Trackerslist
- newTrackon live API
- All community contributors β full credits in SOURCES.md
Updated automatically every 6 hours via GitHub Actions β’ If this saves you time, a β keeps it alive!