Four and a half years ago, an incredible piece of software changed the landscape of private trackers. Ocelot, the layer of our site managing the torrent swarm, brushed away years of XBTT cruft, instability, and thirst for CPU and replaced it with a neat, tidy, CPU-friendly package. It opened the door for smaller trackers to grow their user base and swarms without needing to significantly grow hosting expenses. Now, we are proud to announce that Ocelot has reached the version 1.0 milestone. While many developers in the past (especially those releasing proprietary software) would start their counting at version 1, we use the open source model - version 1.0 indicates the software is stable, mostly feature complete, and relatively bug-free. And indeed, after many years of small bug fixes and useful features, we feel Ocelot is ready for prime time, to be deployed anywhere. We would be lost in all of this without the developers and community members who have written features, improved routines, and submitted patches. Our thanks goes to all our contributors as we celebrate this incredible achievement! You can browse and check out the source code for Ocelot (or make a pull request!) at WhatCD/Ocelot · GitHub or download the release here. Notable changes between 0.8 and 1.0: Add a 'deleted' flag to user object to stop including removed users in returned peer lists Add a prefix to the peer list keys for randomization and smaller chance of peer id collisions Add HTTP Keep-Alive support and show request rate in the tracker stats Add read-only mode for easier testing Catch exceptions in the mysql::load_* functions Configurable max/default numwant parameter Don't disable binlogs in the peer flush sessions Don't start a reaper thread if it's already running Inline peer_is_visible and user functions Mark nonchanging parameter as const Mark users with IP = 127.0.0.1 as protected Read settings from a config file instead of a compiled object Reload torrent list, user list and client whitelist on SIGUSR1 Use atomic variables for stats Use consistent integer widths where it matters Use std::lock_guard instead of std::unique_lock for mutex