sqtracker is a private BitTorrent tracker platform.
It 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.
- Accounts
- Registration modes (open/closed/invite only)
- Sending of invites
- Account management (2FA, password resets etc.)
- Bonus points system
- Torrent management
- Uploading torrents with rich metadata (titles, descriptions, categories, tags etc.)
- Searching torrents or browsing by category or tags
- Freeleech options (specific torrents, sitewide)
- Upload/download tracking
- Track how much content each user has uploaded/downloaded
- Track ratios
- Limit up/downloading per user based on ratio
- Award invites based on ratio
- User interaction
- Commenting on torrents
- Up/down voting torrents
- Requests system
- Moderation
- Staff/admin privileges
- Reporting torrents to be reviewed by staff
- Detailed stats available to admins
- Announcements/news posts (for posting of tracker rules, important updates etc.)
- Ban/unban users
An sqtracker deployment is made up of 4 separate components. These are:
MongoDB is a popular and powerful document-oriented database. Version 5.2 or higher is required.
The 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.
The sqtracker client service provides the modern, responsive web interface that users interact with.
The HTTP proxy allows the client, API, and BitTorrent tracker to all be accessible via a single endpoint.
The 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.
Alternatively, you can deploy each service individually on a PaaS cloud platform such as Northflank.
If 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.
All configuration is provided via a single JavaScript file named config.js. This file must export an object containing 2 keys: envs and secrets.
A full list of configuration options is below. All are required.
If your configuration is not valid, sqtracker will fail to start.
| Key | Type | Example | Description |
|---|---|---|---|
| SQ_SITE_NAME | envs | sqtracker demo | The name of your tracker site |
| SQ_SITE_DESCRIPTION | envs | My very own private tracker | A short description of your tracker site |
| SQ_THEME_COLOUR | envs | #f45d48 | A hex colour code used as the main theme colour of your site |
| SQ_ALLOW_REGISTER | envs | invite |
Registration mode. Either open, invite or closed |
| SQ_ALLOW_ANONYMOUS_UPLOADS | envs | false |
Whether or not users can upload torrents anonymously. Either true or false |
| SQ_MINIMUM_RATIO | envs | 0.75 | Minimum allowed ratio. Below this users will not be able to download |
| SQ_BP_EARNED_PER_GB | envs | 1 | Number of bonus points awarded to a user for each GB they upload |
| SQ_BP_COST_PER_INVITE | envs | 3 | Number of bonus it costs a user to buy 1 invite (set to 0 to disable buying invites) |
| SQ_BP_COST_PER_GB | envs | 3 | Number of bonus it costs a user to buy 1 GB of upload (set to 0 to disable buying upload) |
| SQ_SITE_WIDE_FREELEECH | envs | true |
Whether or not to enable freeleech on all torrents |
| SQ_TORRENT_CATEGORIES | envs | ["Movies", "TV"] |
An array of categories available on your tracker site |
| SQ_BASE_URL | envs | https://demo.sqtracker.dev | The URL of your tracker site |
| SQ_API_URL | envs | https://demo.sqtracker.dev/api | The URL of your API. Under the recommended setup, it should be ${SQ_BASE_URL}/api |
| SQ_MONGO_URL | envs | mongodb://sq_mongodb/sq | The URL of your MongoDB server. Under the recommended setup, it should be mongodb://sq_mongodb/sq |
| SQ_MAIL_FROM_ADDRESS | envs | mail@sqtracker.dev | The address that mail will be sent from |
| SQ_SMTP_HOST | envs | smtp.example.com | The hostname of your SMTP server |
| SQ_SMTP_PORT | envs | 587 | The port of your SMTP server |
| SQ_SMTP_SECURE | envs | false |
Whether or not to force SMTP TLS: if true the connection will use TLS when connecting to server. If false (the default) then TLS is used if server supports the STARTTLS extension. In most cases set this value to true if you are connecting to port 465. For port 587 or 25 keep it false |
| SQ_JWT_SECRET | secrets | — | A secret value to sign tokens with. Should be long and random |
| SQ_SERVER_SECRET | secrets | — | A secret value to verify server requests with. Should be long and random, and different to the JWT secret |
| SQ_ADMIN_EMAIL | secrets | admin@example.com | The email address to use for the initial admin user. Must be valid |
| SQ_SMTP_USER | secrets | — | The username to authenticate with your SMTP server with |
| SQ_SMTP_PASS | secrets | — | The password to authenticate with your SMTP server with |
An example configuration can be found in config.example.js.
GNU GPLv3









