ryot
Self-hosted web analytics tool that provides versatile platform for tracking media, fitness, and more, replacing manual methods like spreadsheets.
Open-source media and fitness tracking, honestly reviewed. No marketing fluff, just what you get when you self-host it.
TL;DR
- What it is: Open-source (GPL-3.0) self-hosted tracker for media consumption (books, movies, shows, anime, games, podcasts, music) and fitness — one dashboard to replace five SaaS accounts [README][2].
- Who it’s for: People who’ve accumulated a Trakt subscription, a Goodreads account, a Letterboxd free tier, and a fitness app and are tired of the scatter. Also anyone who wants their watch history on their own server, not somebody else’s [README][website homepage].
- Cost savings: Trakt VIP is ~$5/mo, Goodreads is free but Amazon-owned, most fitness apps charge $10–15/mo. Ryot self-hosted runs on a $5–10/mo VPS with everything included. The Pro Key for premium features adds a subscription cost, but the base tracker is free [1][README].
- Key strength: Breadth. Movies, TV, anime, manga, books, audiobooks, podcasts, music, video games, and visual novels in one interface — with automatic tracking via Jellyfin, Plex, Kodi, and Emby if you’re already running a media server [README][2].
- Key weakness: GPL-3.0 license (not MIT), a single-developer project with real upgrade friction between major versions, and pro features that require a paid key even on a self-hosted instance [1][3].
What is Ryot
Ryot — pronounced “riot”, standing for Roll Your Own Tracker — is a self-hosted platform for logging what you consume and how you exercise. The GitHub description says it plainly: “A self hosted platform for tracking various facets of your life - media, fitness and more.” [README]
The project is built in Rust (fast, low memory overhead), backed by PostgreSQL, deployable via Docker Compose, and exposes a GraphQL API for custom integrations. It ships as a Progressive Web App so you can pin it to your phone’s home screen without building a native app [README].
What separates Ryot from piecemeal alternatives is consolidation. Instead of Trakt for shows, Goodreads for books, MyAnimeList for anime, and Hevy for workouts, you get one interface, one database, and one backup. A Fosstodon user quoted on the homepage puts it directly: “I love how easy it is to quickly add a game, book, movie or show after I’m finished and write a short review. It’s probably the most used software on my home server!” [website homepage]
The project sits at 3,185 GitHub stars and is maintained primarily by a single developer (ignisda, based in New Delhi). That’s worth keeping in mind before you bet your tracking stack on it.
Why people choose it
The case for Ryot is simple enough that it doesn’t need much decoration: if you use more than two of the services it replaces, the math works.
Versus Trakt. Trakt handles TV shows and movies reasonably well, but it’s cloud-only, has hit-or-miss mobile support, and VIP costs $5/mo for features that Ryot includes in the base self-hosted install. More importantly, Trakt has no fitness tracking, no books, no games. If your media diet extends beyond Netflix, Trakt is already not enough [README][2].
Versus Goodreads. Amazon bought Goodreads in 2013 and has done almost nothing with it since. The mobile app is slow, the recommendation engine is unremarkable, and every book you mark as read contributes to Amazon’s behavioral graph. Ryot imports from Goodreads (along with 15 other sources) so you can move your history over and stop feeding that particular data silo [README][2].
Versus Letterboxd. Letterboxd is the nicest-looking movie logging app in the category, and Ryot isn’t going to beat it on social features or visual polish. If you want a rich film community and beautiful diary views, stay on Letterboxd. If you want your data on your server and you don’t care about the social layer, Ryot covers the same ground [README].
Versus fitness apps (Hevy, Strong, etc.). Dedicated fitness trackers go deeper on exercise analytics than Ryot. The 800+ exercise database and workout logging are solid, but a power lifter optimizing programming cycles will miss the depth that Hevy or Strong offer. Ryot’s fitness module is best described as good enough to eliminate the app — not best-in-class [2].
The consolidation argument. The real win is eliminating five separate data silos, five separate accounts, and five separate backup concerns. The user quoted as “Alex Liu” on the homepage: “The privacy features and self-hosting option sold me. Great for anyone who wants control over their personal data.” [website homepage] That framing is accurate. This is a privacy/sovereignty product first, a feature-complete tracker second.
Features
Based on the README, features page, and official documentation:
Media tracking:
- Tracks movies, TV shows, anime, manga, books, audiobooks, podcasts, music, video games, and visual novels [README][2]
- Add to watchlist, favorites, or custom collections [2]
- Mark media as seen — as many times as needed (rewatches, rereads) [2]
- Import from 16 sources: Goodreads, Trakt, MyAnimeList, Audiobookshelf, and more [README][2]
- Automatic tracking via Jellyfin, Plex, Kodi, Emby integrations (13 services total) [README][2]
- Review media publicly or privately [2]
- Browse by genre or curated groups (e.g., Star Wars collection) [2]
- Calendar view for upcoming releases [2]
- Watch provider lookup — which streaming service has it in your country [2]
- Consolidated activity graphs and statistics across all media types [2]
- Personalized recommendations based on watch history — Pro only [2]
- Filter presets for saved searches — Pro only [2]
- Notifications for new episodes, actor comebacks — 9 notification platforms (Discord, Ntfy, Apprise) [README][2]
Fitness:
- Workout logging with real-time tracking [2]
- 800+ exercise database with instructions; add your own custom exercises [2]
- Rest timers, supersets, exercise images [2]
- Inline exercise history while logging a workout — Pro only [2]
- Workout templates — Pro only [2]
- Progress graphs per exercise — Pro only [2]
- Body measurement tracking (weight, blood sugar, etc.) over time with trend visualization [2]
Technical:
- Written in Rust — low resource footprint [README]
- PostgreSQL backend [README]
- GraphQL API for custom integrations [README]
- OpenID Connect authentication support [README]
- PWA — installable on mobile without a native app [README]
- Docker Compose quick start; production deployment via docs [README]
- Profile sharing via access links — Pro only [2]
- Collection collaborators — Pro only [2]
- Dark and light mode [2]
What “Pro only” actually means here: Ryot Pro is a paid subscription on top of the self-hosted install. You self-host the software, but you pay for a Pro Key to unlock certain features. The key is verified against Ryot’s servers [1]. This is an important distinction — you’re not paying for hosted infrastructure, you’re paying a license fee for premium functionality, similar to how some open-source tools gate advanced features behind a commercial tier.
Pricing: SaaS vs self-hosted math
Ryot’s pricing model:
- Self-hosted base: $0 (GPL-3.0 license) — full media and fitness tracking without Pro features [README]
- Ryot Pro: subscription required for recommendations, exercise history inline, workout templates, sharing features, and collection customization. Specific monthly/yearly pricing isn’t available in the scraped data — check https://ryot.io/features for the current plans [2]
- Ryot Cloud: a managed hosted version; pricing listed on the main site (loads dynamically, not scraped) [website homepage]
- Payments processed via Paddle or Polar.sh [1]
Alternatives for comparison:
| Service | Cost | Data control |
|---|---|---|
| Trakt VIP | ~$5/mo | Cloud-only |
| Goodreads | Free (Amazon-owned) | None |
| Letterboxd Pro | ~$3/mo | Cloud-only |
| Hevy (fitness) | ~$10/mo | Cloud-only |
| Ryot self-hosted (base) | $5–10/mo VPS | Full ownership |
| Ryot self-hosted + Pro | VPS + Pro subscription | Full ownership |
The honest math: if you currently pay for Trakt VIP ($5/mo) and any fitness app ($10/mo), you’re at $15/mo minimum across two services — and that’s before Letterboxd or any other tracker. A $6 Hetzner VPS running Ryot covers all of those use cases for less, even accounting for a Pro Key subscription. The savings compound quickly if you’re currently paying for multiple fragmented services.
The caveat: you need to look up current Pro pricing, as it wasn’t available in the scraped sources. Don’t assume it’s negligible.
Deployment reality check
The README’s quick-start is two steps: create a docker-compose.yml and run docker compose up -d. That’s the honest floor for complexity — it’s one of the cleaner self-hosted setups in the category [README].
What you actually need:
- A Linux VPS (Hetzner, Contabo, or DigitalOcean; 2GB RAM minimum)
- Docker and docker-compose
- A domain and reverse proxy (Caddy or nginx) for HTTPS
- PostgreSQL — bundled in the default compose file
- Your own API credentials for TMDB, Trakt, and MyAnimeList if you use those integrations (see below)
The API credentials caveat. Starting with v9, Ryot removed its shared default API keys for TMDB, Trakt, and MyAnimeList. The migration docs explain why directly: “This change was made because the shared default API keys were hitting rate limits and exceeding free tier quotas due to Ryot’s growing popularity with many self-hosted instances, causing errors for all users.” [3] This is actually a healthy sign for the project’s growth, but it means new installs require you to register developer accounts with three separate services before movies/shows/anime metadata loads correctly. The docs have guides for each [3].
Upgrade friction is real. Ryot has gone through ten major versions. Direct skipping of major versions is not supported — you must step through each major version’s migration guide in sequence [3][4]. The v9→v10 migration required environment variable changes and a step-through at v9.6.0 before upgrading. The v8→v9 migration required obtaining new API credentials. Every major version boundary has a documented multi-step process [3][4]. For a solo non-technical founder, this is the most important limitation to understand: upgrades require reading and following migration docs, not just pulling a new Docker image.
Realistic time estimates:
- Technical user on a fresh VPS: 45–90 minutes to a working instance (add an extra 30 minutes for the three API credential registrations)
- Non-technical founder following a guide: half a day, including domain setup, reverse proxy, and API registrations
- Major version upgrade: 30–60 minutes per version boundary, including backup and step-through
Single-developer bus factor. The terms page lists the company address as a residential address in New Delhi and a personal Gmail (ignisda2001@gmail.com) [1]. This is a solo-maintained open-source project. The Discord community is active and the project is clearly loved by its users, but the development pace and long-term continuity depend on one person. That’s not a dealbreaker for personal use; it is a consideration if you’re recommending this to clients or building a workflow dependency on it.
Pros and cons
Pros
- Genuine breadth. Movies, TV, anime, manga, books, audiobooks, podcasts, music, games, visual novels — plus fitness. No other self-hosted tool covers this surface area in a single install [README][2].
- Auto-tracking from Jellyfin/Plex/Kodi/Emby. If you already run a media server, Ryot can track your watch history automatically without any manual logging [README][2].
- 16-source import. You can pull your existing history from Goodreads, Trakt, MyAnimeList, Audiobookshelf, and more — migration path exists before you commit [README][2].
- Rust backend. Low memory footprint; runs comfortably on a small VPS alongside other services [README].
- GraphQL API. Custom integrations are possible for anyone with development capability [README].
- PWA. No separate mobile app to maintain; works from the browser, installable on any device [README].
- OpenID Connect. Single sign-on with an existing identity provider — useful if you’re already running Authentik or Authelia [README].
- Active Discord community. 270+ Discord members at time of writing; the project isn’t abandoned [README].
- Clean quick-start. Two-command Docker Compose deployment is as friction-free as self-hosted setups get [README].
Cons
- GPL-3.0, not MIT. You can self-host freely, but if you want to embed Ryot in a commercial product or build a service around it, the GPL requires you to open-source your additions. Not a problem for personal use; a legal question for founders building on top of it.
- Pro features require a paid key even on self-hosted. Recommendations, inline exercise history, workout templates, and sharing features all require a subscription — on your own infrastructure [1][2]. The free self-hosted tier is functional but notably incomplete if you want the full feature set.
- Must register your own API keys for TMDB, Trakt, and MAL. Three separate developer account registrations before media metadata works correctly [3]. Manageable, but not zero effort.
- Upgrade friction between major versions. Step-through migrations required; you can’t skip versions. Each major version boundary is a documented manual process [3][4]. For non-technical users, this is the real maintenance cost.
- Single developer. The entire project depends on one person. Great community, but no team behind it [1].
- Fitness module is good, not great. 800+ exercises and workout logging are solid; power users who want advanced programming tools (periodization, volume tracking at the mesocycle level) will still want a dedicated fitness app alongside it [2].
- No native social layer. Letterboxd’s community and Trakt’s friend activity feeds don’t have an equivalent here. Sharing is possible via access links (Pro), but it’s not the same as a community platform [2].
- Localization settings moved in v10. Previously per-instance environment variables; now per-user settings. If you’ve built any automation around those env vars, factor in migration effort [3].
Who should use this / who shouldn’t
Use Ryot if:
- You’re currently paying for 2+ separate trackers (Trakt, any fitness app, etc.) and want to consolidate onto your own server.
- You run Jellyfin, Plex, or Emby and want automatic watch history without a third-party cloud service.
- You want to reclaim your media history from Goodreads, MyAnimeList, or Trakt — all three have import support.
- You’re comfortable with Docker and don’t mind reading migration docs when upgrading major versions.
- Your media consumption spans multiple categories (books AND shows AND games) and you’re tired of five separate apps.
Skip it if:
- You’re a non-technical founder with no sysadmin help. The API credential setup and upgrade migrations will frustrate you.
- You want the best-in-class experience for a single category. Letterboxd is better for movies. Hevy is better for serious lifters. Ryot wins on consolidation, not depth in any one vertical.
- You need a MIT-licensed tool to embed in a commercial product.
- You’re uncomfortable with a single-developer project for a long-term data dependency.
- You want an active social community around your media tracking — Letterboxd is the right answer there.
Consider a hybrid instead:
- Keep Letterboxd (free tier) for films and the social experience; use Ryot for everything else. The two don’t conflict.
Alternatives worth considering
- Trakt — the standard for TV/movie tracking. Cloud-only, but the ecosystem integrations are mature. VIP ~$5/mo. Choose this if you care about community features and don’t need books or fitness [README].
- Letterboxd — best-in-class for film logging. Beautiful UI, active community, good diary features. Cloud-only, Pro ~$3/mo. Not a replacement — it’s a complement if films are your primary use case [README].
- MediaTracker — the project that directly inspired Ryot (acknowledged in the README). Narrower scope (media only, no fitness), but worth comparing if you want something more focused [README].
- Goodreads — still the default for books, but Amazon-owned and stagnant. Ryot imports from it, making migration straightforward [README][2].
- Hevy / Strong — dedicated fitness tracking apps with more advanced programming features than Ryot’s workout module. Keep one alongside Ryot if you’re serious about training [2].
- Notion / Obsidian with templates — the DIY alternative. Total flexibility, zero constraints, but you’re building the tracker yourself. Choose this only if you want to own every field.
- Jellyfin — media server with basic watch history. If your use case is purely “track what I’ve watched on my server,” Jellyfin’s built-in history may be enough before adding another service.
Bottom line
Ryot earns its place on a home server for one specific person: someone who tracks multiple media categories, already pays for more than one tracking service, cares about data ownership, and is comfortable with Docker and the occasional migration guide. The consolidation argument is real — replacing Trakt, Goodreads, a fitness app, and potentially MyAnimeList with one self-hosted install is genuinely compelling. The Rust backend keeps it lean, the import tools make migration viable, and the Jellyfin/Plex integration is a clean win for anyone already running a media server.
The honest caveats are equally real: GPL-3.0 limits commercial use, Pro features cost money even on self-hosted infrastructure, major version upgrades require manual steps, and the project rests on one developer’s continued interest. None of those are dealbreakers for the target audience — someone who wants their tracking data on their own server, not someone building a product on top of it. For personal use, the math is favorable and the project clearly has an engaged user base. Just go in knowing that “self-hosted” here doesn’t mean “fire and forget” — plan thirty minutes per major version upgrade and keep backups.
Sources
- Terms of Service — Ryot (ryot.io). https://ryot.io/terms
- Features — Ryot (ryot.io). https://ryot.io/features/
- Migration Guide — Ryot Documentation (docs.ryot.io). https://docs.ryot.io/migration.html
- Migration Guide (canonical) — Ryot Documentation (docs.ryot.io). https://docs.ryot.io/migration
Primary sources:
- GitHub repository and README: https://github.com/ignisda/ryot (3,185 stars, GPL-3.0 license)
- Official website: https://ryot.io
- Features page: https://ryot.io/features/
- Documentation: https://docs.ryot.io
Features
Integrations & APIs
- REST API
Replaces
Related Analytics & Business Intelligence Tools
View all 176 →Superset
71KApache Superset is an open-source data exploration and visualization platform — connect to any SQL database, build interactive dashboards, and run ad-hoc queries.
OpenBB
63KThe open-source AI workspace for finance — connect proprietary and public data, build custom analytics apps, and deploy AI agents on your own infrastructure.
Metabase
46KOpen-source business intelligence that lets anyone in your company ask questions and learn from data. Build dashboards, run queries, and share insights without SQL.
ClickHouse
46KUltra-fast column-oriented database for real-time analytics. Process billions of rows per second with SQL. Open-source alternative to Snowflake and BigQuery.
Umami
36KSimple, fast, privacy-focused alternative to Google Analytics. Own your website data.
Umami
36KSimple, fast, privacy-focused alternative to Google Analytics. Own your website data.