{"id":13597701,"url":"https://github.com/tdjsnelling/sqtracker","last_synced_at":"2025-04-07T19:12:51.378Z","repository":{"id":142143031,"uuid":"386414814","full_name":"tdjsnelling/sqtracker","owner":"tdjsnelling","description":"A modern private BitTorrent tracker platform","archived":false,"fork":false,"pushed_at":"2024-06-18T12:53:02.000Z","size":1367,"stargazers_count":251,"open_issues_count":30,"forks_count":47,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-31T18:22:08.999Z","etag":null,"topics":["bittorrent","docker","express","mongodb","nextjs","nodejs","private-tracker","torrent","tracker","traefik"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tdjsnelling.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://paypal.me/tdjsnelling"]}},"created_at":"2021-07-15T20:25:32.000Z","updated_at":"2025-03-28T02:12:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"1698cbba-bc0a-4ebe-a4eb-5b0b81a03bd8","html_url":"https://github.com/tdjsnelling/sqtracker","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tdjsnelling%2Fsqtracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tdjsnelling%2Fsqtracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tdjsnelling%2Fsqtracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tdjsnelling%2Fsqtracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tdjsnelling","download_url":"https://codeload.github.com/tdjsnelling/sqtracker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247713258,"owners_count":20983683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bittorrent","docker","express","mongodb","nextjs","nodejs","private-tracker","torrent","tracker","traefik"],"created_at":"2024-08-01T17:00:39.380Z","updated_at":"2025-04-07T19:12:51.116Z","avatar_url":"https://github.com/tdjsnelling.png","language":"JavaScript","funding_links":["https://paypal.me/tdjsnelling"],"categories":["JavaScript"],"sub_categories":[],"readme":"# ■ sqtracker\n\n![Latest stable release](https://badgen.net/github/release/tdjsnelling/sqtracker/stable)\n[![License GPLv3](https://badgen.net/badge/license/GPLv3/blue)](./LICENSE)\n[![Client Docker image](https://badgen.net/badge/icon/sqtracker-client/blue?icon=docker\u0026label)](https://github.com/tdjsnelling/sqtracker/pkgs/container/sqtracker-client)\n[![API Docker image](https://badgen.net/badge/icon/sqtracker-api/blue?icon=docker\u0026label)](https://github.com/tdjsnelling/sqtracker/pkgs/container/sqtracker-api)\n[![Discord](https://badgen.net/discord/members/BEGXEk29Up)](https://discord.gg/BEGXEk29Up)\n\nsqtracker is a modern private BitTorrent tracker platform.\n\nIt implements all of the features required to run a private (or public) tracker and does not focus on any one specific type of content. It is suitable for running a tracker site of any kind.\n\nPlease join the [Discord server](https://discord.gg/BEGXEk29Up) for support and general chat.\n\n## Features\n\n* Accounts\n  * Registration modes (open / closed / invite only)\n  * Sending of invites\n  * Account management (2FA, password resets etc.)\n  * Bonus points system (purchase invites, upload etc.)\n  * Option to browse torrents without logging in (for search engine discovery)\n* Torrent management\n  * Uploading torrents with rich metadata (title, description, source, mediainfo, category, tags etc.)\n  * Searching torrents or browsing by category or tags\n  * Freeleech options (specific torrents, site-wide)\n  * Torrent grouping (e.g. different formats of same movie)\n  * Bookmarks\n* Upload / download tracking\n  * Track how much content each user has uploaded / downloaded\n  * Track ratios\n  * Track hit'n'runs\n  * Limit downloading per user based on ratio, HnRs, or both\n  * Award bonus points based on upload\n* User interaction\n  * Commenting on torrents and announcements\n  * Up / down voting torrents\n  * Requests system\n* Moderation\n  * Staff / admin privileges\n  * Reporting torrents to be reviewed by staff\n  * Detailed stats available to admins\n  * Wiki system\n  * Announcements / news posts\n  * Ban / unban users\n* Tracker appearance\n  * Configurable theme / CSS\n  \n## Roadmap\n\nThe roadmap is still being expanded.\n\n* Forum support \u0026 direct messages\n* Better profiles (avatar, bio etc.)\n* Premoderation option\n* Anti-cheat\n  \n## Configuration\n\nAll configuration is provided via a single JavaScript file named `config.js`. This file must export an object containing 2 keys: `envs` and `secrets`.\n\nAn example configuration can be found in `config.example.js`. This file contains examples and explanations for each config value.\n\nIf your configuration is not valid, sqtracker will fail to start.\n\n### The initial admin user\n\nOn first start up, sqtracker will create a user named `admin` with the password `admin`. A confirmation email will be sent to the admin email address you specified in your config file. Once logged in for the first time, you should change the admin password immediately. This admin user can be used to send other admin invites (normal accounts cannot send admin invites). This user cannot be deleted/banned.\n\n## Deploying\n\n### Components\n\nAn sqtracker deployment is made up of 4 separate components. These are:\n\n#### 1. The sqtracker API service\n\nThe sqtracker API service handles all actions taken by users (authentication, uploads, searching etc.), implements the BitTorrent tracker specification to handle announces and scrapes, and provides the RSS feed. \n\n#### 2. The sqtracker client service\n\nThe sqtracker client service provides the modern, responsive web interface that users interact with.\n\n#### 3. A MongoDB database\n\n[MongoDB](https://www.mongodb.com/) is a popular and powerful document-oriented database. Version 5.2 or higher is required.\n\n#### 4. A HTTP proxy server\n\nThe HTTP proxy allows the client, API, and BitTorrent tracker to all be accessible via a single endpoint.\n\nTraefik is recommended and is configured by default. An Nginx config file is also provided for those that prefer it and the `docker-compose.yml` file contains an Nginx block that can be enabled. \n\n### Deploying with Docker compose\n\nThe sqtracker platform is designed to be deployed via Docker. Once a configuration file is created, deploying is as simple as running `docker compose up -d` at the root of the project.\n\nTo get HTTPS working, you will need to change a few values:\n\n* In `docker-compose.yml`: `--certificatesresolvers.tlsresolver.acme.email=` needs to have a valid email address.\n* In `traefik.yml`: 2 instances of `` Host(`example.com`) `` need to contain your domain name.\n\nIf you change the name of any services in `docker-compose.yml`, you will also need to update the relevant host names in your `config.js` and `traefik.yml` files.\n\nsqtracker is reasonably light-weight, but you should still invest in a VPS with decent resources if you want to run a fast and performant tracker.\n\n### Deploying with a PaaS platform\n\nAlternatively, you can deploy each service individually on a PaaS cloud platform such as [Northflank](https://northflank.com).\n\nYou will need to deploy each of the 4 components listed above. The Docker images for the client and API services are published in this repository.\n\n## Adding a translation\n\nNew translations are always appreciated!\n\nTo add a new translation in your own language, create a new JSON file with your 2 character locale code in `client/locales`. For example, `client/locales/en.json`. In the `client/locales/index.js` file, you should then import your JSON file and add it to the exported object along with the existing locales.\n\nThe best place to start is to copy the `en.json` file and work through it, translating each English string.\n\nThere is also an [inlang project](https://fink.inlang.com/github.com/tdjsnelling/sqtracker) to aid with translation.\n\n### Existing translations\n\n| Language           | Contributed by                                       |\n|--------------------|------------------------------------------------------|\n| English            |                                                      |\n| Russian            | [@smlinux](https://github.com/smlinux)               |\n| Esperanto          | [@smlinux](https://github.com/smlinux)               |\n| German             | [@EchterAlsFake](https://github.com/EchterAlsFake)   |\n| Simplified Chinese | [@0EAC](https://github.com/0EAC)                     |\n| French             | [@Klaiment](https://github.com/Klaiment)             |\n| Spanish            | [@CerealKillerjs](https://github.com/CerealKillerjs) |\n| Italian            | [@NotLugozzi](https://github.com/NotLugozzi)         |\n\n## Screenshots\n\nSplash screen\n\u003cimg width=\"1663\" alt=\"splash\" src=\"https://user-images.githubusercontent.com/6264509/218762121-e7800d27-c5f1-4288-ba6e-f33c235b9b27.png\"\u003e\n\nHome\n\u003cimg width=\"1707\" alt=\"home\" src=\"https://user-images.githubusercontent.com/6264509/218762088-e604d1d6-7f6a-4910-b7ff-500e0e762056.png\"\u003e\n\nTorrent\n\u003cimg width=\"1707\" alt=\"torrent\" src=\"https://user-images.githubusercontent.com/6264509/218762124-70d00f99-287a-4efa-90ed-47db7a0be39b.png\"\u003e\n\nUpload\n\u003cimg width=\"1707\" alt=\"upload\" src=\"https://user-images.githubusercontent.com/6264509/218762133-0a359ca0-6a18-4440-80f6-6d28adba1a6f.png\"\u003e\n\nCategories\n\u003cimg width=\"1707\" alt=\"categories\" src=\"https://user-images.githubusercontent.com/6264509/218762073-b1d42889-2868-414e-af60-9fe75ba48ee1.png\"\u003e\n\nProfile\n\u003cimg width=\"1663\" alt=\"profile\" src=\"https://user-images.githubusercontent.com/6264509/218762104-238c90ab-c144-42f1-869e-bbae120f556f.png\"\u003e\n\nAccount\n\u003cimg width=\"1663\" alt=\"account\" src=\"https://user-images.githubusercontent.com/6264509/218762053-90667723-db6e-473c-8ae0-11bc635f322e.png\"\u003e\n\nAnnouncement\n\u003cimg width=\"1663\" alt=\"announcement\" src=\"https://user-images.githubusercontent.com/6264509/218762065-e91ca084-1f9a-4af5-9232-291d87625c7a.png\"\u003e\n\nRequest\n\u003cimg width=\"1663\" alt=\"request\" src=\"https://user-images.githubusercontent.com/6264509/218762116-38cf1b95-7c76-4476-9276-19f6c77c2c9a.png\"\u003e\n\nReport\n\u003cimg width=\"1707\" alt=\"report\" src=\"https://user-images.githubusercontent.com/6264509/218762109-b76bd5f1-b333-4d09-9c9a-e2fa87b3c2de.png\"\u003e\n\n## Contributing\n\nPull requests are welcome! If you fork sqtracker and think you have made some improvements, please open a pull request so other users deploying sqtracker from this repository can also get the benefits.\n\nPlease see the [CONTRIBUTING](./CONTRIBUTING.md) document for guidance on code style etc.\n\n## Donations\n\nA lot of hard work goes into building and maintaining sqtracker. If you're feeling kind, my PayPal link is in the GitHub \"Sponsor this project\" section. If you would prefer a different method, please reach out to me on Discord.\n\n## License\n\nGNU GPLv3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftdjsnelling%2Fsqtracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftdjsnelling%2Fsqtracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftdjsnelling%2Fsqtracker/lists"}