Files
2026-06-09 18:40:21 +02:00

4.9 KiB


title: Ryot created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, tracking, media-tracker, rust, graphql] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Media+Tracker, https://github.com/IgnisDa/ryot]

📚 Ryot

Tracker média tout-en-un (films, séries, animes, livres, jeux, podcasts, sports) — moderne, performant, avec app mobile React Native.

Métadonnée Valeur
Site web ryot.io
GitHub IgnisDa/ryot
License GPL-3.0
Langage principal Rust (Axum) + TypeScript
Étoiles GitHub 113
Dernière MAJ 2026-05-25
Catégorie cat-tracking

Description

Ryot (prononcez « riot ») est un tracker média auto-hébergé particulièrement ambitieux : il permet de suivre films, séries TV, animés, mangas, livres, jeux vidéo, podcasts, et même des exercices sportifs dans une seule et même application. Le projet, écrit en Rust côté back-end (Axum) avec un front React/React Native, se veut une réponse moderne et auto-hébergée à des services comme Trakt + Goodreads + MyAnimeList combinés.

Les données sont synchronisées avec les principales sources de métadonnées (TMDb, IGDB, MAL, Google Books, ListenNotes, ComicVine). L'API GraphQL permet de tout piloter, et l'app mobile (iOS/Android) est compilée depuis le même dépôt. Le projet dispose aussi d'un système d'extensions pour ajouter de nouveaux providers de métadonnées.

Ryot est plus jeune que certains concurrents (cf. app-yamtrack) mais son orientation multi-types de média, sa stack moderne (Rust, GraphQL, React Native) et son rythme de releases en font l'un des projets les plus prometteurs du moment. L'UI est en anglais uniquement, mais l'API est bien documentée.

Installation

Via Docker (recommandé)

version: "3.8"
services:
  ryot:
    image: dytes/ryot:latest
    container_name: ryot
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://ryot:***      - REDIS_URL=redis://redis:6379
      - JWT_SECRET=change...es
      - TMDB_ACCESS_TOKEN=***
      - IGDB_CLIENT_ID=***
      - IGDB_CLIENT_SECRET=***
    depends_on:
      - db
      - redis

  db:
    image: postgres:16-alpine
    container_name: ryot-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: ryot
      POSTGRES_USER: ryot
      POSTGRES_PASSWORD: changez_moi
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    container_name: ryot-redis
    restart: unless-stopped
    volumes:
      - redis_data:/data

volumes:
  pgdata:
  redis_data:

Installation manuelle

  1. Cloner : git clone https://github.com/IgnisDa/ryot.git && cd ryot
  2. Installer Rust (rustup) et Node 20+ (nvm)
  3. Compiler : cargo build --release
  4. Frontend : cd apps/frontend && pnpm install && pnpm build
  5. Migrations : cargo run --bin migration
  6. Configurer .env (cf. .env.example)
  7. Lancer : ./target/release/ryot
  8. Mobile : cd apps/mobile && pnpm install && pnpm run android|ios

Configuration

  • Créer le premier utilisateur admin via l'UI
  • Renseigner les clés API providers (TMDb, IGDB, MAL, Google Books)
  • Configurer les unités (km/miles, kg/lbs) et préférences de langue
  • Activer la synchronisation Plex/Jellyfin pour importer sa consommation existante
  • Activer les statistiques (workout + média combinés)
  • Brancher l'export vers Strava (workouts)
  • Configurer un reverse proxy HTTPS (Traefik + Let's Encrypt)

Alternatives

Open source

  • app-yamtrack — Django, plus simple, moins de catégories
  • MediaTracker — alternative Python basique
  • Kavita — mangas/comics, lecteur intégré
  • Jellyfin — serveur média avec suivi
  • Komga — comics/mangas avec suivi
  • Trakt (cloud) — référence, payant pour certaines features

Propriétaires

  • Trakt.tv Premium — référence cloud
  • MyAnimeList Plus — mangas/animes
  • Goodreads (Amazon) — livres, social
  • Letterboxd Pro — films, social
  • Backloggd — jeux + films

Sécurité

  • Changer le JWT_SECRET et garder secret (32+ caractères)
  • Activer HTTPS obligatoire (Traefik / Caddy)
  • Activer la 2FA (TOTP) sur les comptes
  • Restreindre l'accès à l'API GraphQL par IP / OIDC
  • Sauvegarder pgdata et redis régulièrement (Redis est volatile par défaut : activer AOF)
  • Mettre à jour l'image Docker (alertes Renovate/Dependabot)
  • Auditer les clés API providers (les régénérer périodiquement)

Ressources

Pages Liées