• Stars
    star
    117
  • Rank 301,828 (Top 6 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 9 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Modern bittorrent tracker designed for private site use with multiple storage backends

Mika - Bittorrent Tracker

License: MIT Test Status Codacy Badge Maintainability Test Coverage Go Report Card GoDoc Lines of Code Discord chat

Mika is a torrent tracker written in the Go programming language.

It is designed exclusively for private tracker needs, chihaya is a more suitable choice for public trackers.

For the previous, 1.x code, see the legacy branch.

Documentation

The current documentation is within the docs folder. Keep in mind that these are currently either out of date with the current build, or referencing things that are not yet fully implemented.

Support & Discussion

There is currently a discord server setup for mika. You can join here.

Features (Planned)

A high level view of the features we integrate into the tracker. Some are fully implemented already, some are still in the works.

  • REST JSON API for interacting with the tracker on a separate authenticated port differing from the standard tracker port. This port is configured for TLS1.2+ only.

  • CLI for interacting with the running tracker ./mika client -h

  • Multiple storage backends which can be selected based on needs and system architecture. You can define completely different stores for the 3 types of backend interfaces we implement: Users, Torrents, Peers.

    • postgres A PostgreSQL 10+ backed store. We also use the PostGIS extension to store location data and perform geo queries.
    • mysql/mariadb A MySQL 5.1+ / MariaDB 10.1+ backed persistent storage backend. We use the POINT column for geospatial queries which is why we require these versions at minimum.
    • redis Redis provides an in-memory datastore which does get persisted to disk (if enabled in redis).
    • memory A simple in-memory storage which is not persisted anywhere.
    • custom You can easily add support for your own storage backends by implementing store.UserStore, store.PeerStore or store.TorrentStore interfaces as needed. PRs for new implementations welcomed.
  • IPv4 and IPv6 support with the ability to enable or disable the stacks. Note that v4 requests will only return v4 peers, same applies to v6.

  • Optional smarter peer selection strategies.

  • Either a single datastore read (which is cached, no future reads for the same resource made) or no database reads, depending on storage backends chosen on incoming announces/scrapes.

  • User bonus point system built into the tracker which is updated on each request instead of large batches.

  • Go / PHP based API Client examples. Contributions for other languages welcomed.

  • Client whitelists for only allowing specific torrent clients

  • Multi platform support. Should run on anything that go can target.

  • User authentication via passkey

  • Docker images for deployment

Some things we don't currently have plans to support:

  • Non-compact responses. There is no reason to use non-compact responses for a private tracker. All modern and usual whitelisted clients support it.
  • DHT bootstrapping node
  • Migrations from existing tracker systems

BEP Support

These are currently fully implemented BEPs:

  • BEP0003 The BitTorrent Protocol Specification
  • BEP0007 IPv6 Tracker Extension
  • BEP0020 Peer ID Conventions
  • BEP0021 Extension for partial seeds
  • BEP0023 Tracker Returns Compact Peer Lists
  • BEP0048 Tracker Protocol Extension: Scrape

Not currently planned, but maybe in the future:

  • BEP0008 Tracker Peer Obfuscation
  • BEP0024 Tracker Returns External IP
  • BEP0015 UDP Tracker Protocol for BitTorrent
  • BEP0041 UDP Tracker Protocol Extensions

Build Notes

The minimum required version of go for building from the source is 1.14+.

Usage

None, Don't use this yet.

More Repositories

1

uncletopia

Ansible playbook for uncletopia server cluster
SourcePawn
43
star
2

gbans

gbans is a centralized game community platform with support for global bans. It currently supports Team Fortress 2
TypeScript
43
star
3

php_rbac

Modern PHP RBAC Implementation
PHP
26
star
4

bd

Go
20
star
5

uncledane-web

Source for uncledane.com
SCSS
15
star
6

tf2_bind_gen

Tool to parse TF2 console log and generate dynamic chat binds on the fly.
Go
12
star
7

lurkr

Go
6
star
8

transmission_scripts

Set of simple scripts used to manage the transmission torrent client.
Python
5
star
9

msort

MSort is a command line media folder sorting tool. It can sort folders into sub-folders of similarly names directory prefixes. Matching is done via Regex rules which are defined in a configuration file, with grouping based of the captured regex values.
Python
5
star
10

steamid

golang VALVe SteamID conversions and resolver
Go
4
star
11

uncletopia-web

TypeScript
3
star
12

autobit

ZNC based torrent downloader
Python
2
star
13

mika-client-php

PHP client for the mika torrent tracker administration API
PHP
2
star
14

uncletopia-srcds

SourcePawn
2
star
15

dotfiles

My dotfiles which are currently built around urxvt / zsh (oh-my-zsh) / python / git / awesomewm / multiple-monitors
Perl
2
star
16

atlantaregulars

SourcePawn
1
star
17

base-srcds

Base TF2 docker image with metamod & sourcemod
Dockerfile
1
star
18

tf2bdd

Discord bot and HTTP service providing tf2_bot_detector compatible player list.
Go
1
star
19

pugbot

Discord PUG coordinator
Go
1
star
20

seedr

Go
1
star
21

unit3d-ansible

1
star
22

srcds_watch

Go
1
star
23

tf2cfg

My TF2 Config Setup
ReScript
1
star
24

docker-media-manager

Dockerfile
1
star
25

roboto

Simple twitch chat bot that learns and can generate sentences using markov chains.
Python
1
star
26

discord_log_relay

Go
1
star
27

steamweb

Go library for the steam web api https://wiki.teamfortress.com/wiki/WebAPI
Go
1
star
28

twirc

A very simple stand-alone Twitch bot that does some basic interactions with the Steam API.
Go
1
star
29

dotupdate

Small tool & library to updated users dotfiles using symlinks
Python
1
star