170 lines
7.6 KiB
Markdown
170 lines
7.6 KiB
Markdown
---
|
|
title: Gameyfin
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, gaming, game-manager, library, igdb, kotlin, spring-boot, vaadin, react]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Gaming, https://github.com/gameyfin/gameyfin]
|
|
---
|
|
|
|
# 🎯 Gameyfin
|
|
|
|
> **Library manager de jeux moderne en Kotlin/Spring** — scanne vos jeux, fetch les métadonnées IGDB, UI web réactive Vaadin + React.
|
|
|
|
## 📋 Informations Générales
|
|
|
|
| Champ | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [gameyfin.app](https://gameyfin.app/) |
|
|
| **GitHub** | [gameyfin/gameyfin](https://github.com/gameyfin/gameyfin) |
|
|
| **License** | AGPL-3.0 |
|
|
| **Langage** | Kotlin + Spring Boot 3 (backend) + Vaadin Hilla + React (frontend) |
|
|
| **Étoiles** | ⭐36 (catalogue) |
|
|
| **Dernière MAJ** | 2026 (v2.x) |
|
|
| **Catégorie** | [[cat-gaming\|Gaming]] |
|
|
|
|
## 📝 Description
|
|
|
|
**Gameyfin** est un **gestionnaire de bibliothèque de jeux vidéo** self-hosted, écrit en **Kotlin** avec **Spring Boot 3** côté backend et **Vaadin Hilla + React** côté frontend. C'est un projet relativement jeune (v2 réécrit from scratch) qui se positionne comme une alternative moderne et plus légère à [[app-gamevault]].
|
|
|
|
L'objectif est simple : **vous pointez Gameyfin vers un dossier de jeux, il scanne, identifie via IGDB, récupère jaquettes et métadonnées, et vous offre une UI web réactive pour parcourir, filtrer, et lancer vos jeux**. La v2 a introduit un **système de plugins** (PF4J) pour étendre les fonctionnalités : scrapers alternatifs, intégrations launchers tiers, etc.
|
|
|
|
Gameyfin se distingue de la concurrence par son **architecture 100% web** (pas de client natif à installer), son **système de plugins** flexible, et sa stack technique moderne (Kotlin, Spring, Vaadin, React). Le frontend est généré par Vaadin Hilla (qui combine Vue/React + endpoints Java typés) et reste très réactif.
|
|
|
|
**Fonctionnalités clés** :
|
|
- ✅ **Scan automatique** des dossiers de jeux
|
|
- ✅ **Match IGDB** : nom, dev, jaquette, description, trailers
|
|
- ✅ **UI web réactive** (Vaadin Hilla + React), responsive
|
|
- ✅ **Multi-bibliothèques** : plusieurs dossiers scannés, étiquetables
|
|
- ✅ **Système de plugins** (PF4J) : scrapers alternatifs, intégrations
|
|
- ✅ **Multi-utilisateurs** : comptes, partage de bibliothèque
|
|
- ✅ **Collections** : créer des regroupements thématiques
|
|
- ✅ **Tags / Filtres avancés** : plateforme, genre, année, état
|
|
- ✅ **Recherche full-text** performante
|
|
- ✅ **Pas de DRM** : Gameyfin ne gère que les jeux DRM-free (et l'assume)
|
|
|
|
## 🚀 Installation
|
|
|
|
### Option 1 : Docker Compose (recommandé)
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
gameyfin:
|
|
container_name: gameyfin
|
|
image: ghcr.io/gameyfin/gameyfin:latest
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8080:8080"
|
|
volumes:
|
|
- ./gameyfin/data:/app/data # base SQLite + cache
|
|
- /chemin/vers/jeux:/games:ro # dossier de jeux (lecture seule)
|
|
- ./gameyfin/config:/app/config # config (optionnel)
|
|
environment:
|
|
- TZ=Europe/Paris
|
|
- SERVER_PORT=8080
|
|
- GAMEYFIN_BASE_URL=http://localhost:8080 # pour IGDB et Open Graph
|
|
- ADMIN_USERNAME=admin
|
|
- ADMIN_PASSWORD=Change...t
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.gameyfin.rule=Host(`gameyfin.example.com`)"
|
|
- "traefik.http.routers.gameyfin.entrypoints=websecure"
|
|
- "traefik.http.routers.gameyfin.tls.certresolver=letsencrypt"
|
|
```
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
### Option 2 : JAR standalone
|
|
|
|
```bash
|
|
git clone https://github.com/gameyfin/gameyfin.git
|
|
cd gameyfin
|
|
./gradlew bootRun
|
|
# ou
|
|
./gradlew bootJar
|
|
java -jar build/libs/gameyfin-*.jar
|
|
```
|
|
|
|
### Option 3 : Unraid / Synology
|
|
|
|
L'image Docker est compatible — configurer via les templates communautaires.
|
|
|
|
## ⚙️ Configuration
|
|
|
|
1. **Premier compte admin** : créé au premier démarrage avec `ADMIN_USERNAME` / `ADMIN_PASSWORD`. Changer immédiatement.
|
|
2. **Ajouter une bibliothèque** : *Admin > Libraries > New* → donner un nom, pointer vers le dossier de jeux, configurer le scraper (IGDB par défaut).
|
|
3. **IGDB credentials** : créer une app Twitch ([dev.twitch.tv](https://dev.twitch.tv/console)) → obtenir Client ID + Secret → configurer dans *Admin > Settings > Integrations > IGDB*.
|
|
4. **Plugins** : *Admin > Plugins* pour activer/désactiver les scrapers alternatifs (ScreenScraper, MobyGames, ...).
|
|
5. **Multi-utilisateurs** : *Admin > Users* pour créer des comptes. Les non-admins ont accès en lecture seule à la bibliothèque partagée.
|
|
6. **Reverse proxy** : [[app-traefik]] ou [[app-caddy]] pour HTTPS. Attention, Vaadin Hilla utilise des **WebSockets** et des **endpoints serveur typés** : ne pas interférer avec les chemins `/connect/*` et `/HILLA/*`.
|
|
7. **Backup** : `./gameyfin/data/gameyfin.db` (SQLite) — sauvegarder régulièrement.
|
|
|
|
## 🔄 Alternatives
|
|
|
|
### Open Source
|
|
|
|
- [[app-gamevault]] — Concurrent direct, C#/.NET, plus mature
|
|
- **RomM** ([rommapp/romm](https://github.com/rommapp/romm)) — Magnifique UI, orienté ROMs
|
|
- **Gaseous** — ROMs/jeux IGDB, plus ancien
|
|
- **Lutris** — Game manager Linux, pas de serveur
|
|
- **Playnite** — Library manager Windows, pas de serveur
|
|
- **LaunchBox / BigBox** — Windows, freemium
|
|
- **Hydra Launcher** — Multi-platformes, open source
|
|
- **Daijishō** — Launcher Android/PC
|
|
|
|
### Propriétaires (ce que Gameyfin remplace)
|
|
|
|
- **Steam** — Modèle de référence, propriétaire
|
|
- **GOG Galaxy** — Launcher GOG
|
|
- **Epic Games Launcher** — Launcher Epic
|
|
- **EA App** — Launcher EA
|
|
- **Ubisoft Connect** — Launcher Ubisoft
|
|
- **Battle.net** — Launcher Blizzard
|
|
- **Amazon Games** — Launcher Amazon
|
|
|
|
### Comparaison rapide
|
|
|
|
| Critère | Gameyfin | GameVault | RomM | Gaseous |
|
|
| :--- | :--- | :--- | :--- | :--- |
|
|
| Type | Serveur web | Client-serveur | Serveur web | Serveur web |
|
|
| Langage | Kotlin/Spring | C#/.NET | Python/React | C#/.NET |
|
|
| Scan IGDB | ✅ | ✅ | ✅ | ✅ |
|
|
| Multi-utilisateurs | ✅ | ✅ | ✅ | ❌ |
|
|
| Plugins | ✅ PF4J | ❌ | Limité | ❌ |
|
|
| UI | Moderne | Type Steam | Très belle | Correcte |
|
|
| Licence | AGPL-3.0 | CC BY-NC-SA 4.0 | GPL-3.0 | MIT |
|
|
|
|
## 🔐 Sécurité
|
|
|
|
- **Auth obligatoire** : changer `ADMIN_PASSWORD` au premier démarrage, idéalement utiliser un mot de passe généré (`openssl rand -base64 24`).
|
|
- **HTTPS obligatoire** : [[app-traefik]] ou [[app-caddy]] avec Let's Encrypt. Vaadin Hilla ne supporte pas le mixed content.
|
|
- **Dossier jeux en `:ro`** : Gameyfin n'a pas besoin d'écrire dans les jeux eux-mêmes.
|
|
- **2FA** : non natif. Pour ajouter 2FA, mettre devant [[app-authelia]] ou [[app-authentik]].
|
|
- **Légalité des jeux** : Gameyfin gère des jeux **DRM-free uniquement**, comme GameVault. Les jeux Steam/Epic doivent être lancés via leurs launchers officiels.
|
|
- **Backups** : `./gameyfin/data/` (SQLite + cache). Le dossier de jeux source doit aussi être sauvegardé.
|
|
- **WebSockets** : bien configurer le reverse proxy pour ne pas casser les connexions temps réel Vaadin Hilla.
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Site officiel](https://gameyfin.app/)
|
|
- [GitHub gameyfin/gameyfin](https://github.com/gameyfin/gameyfin)
|
|
- [Documentation](https://gameyfin.app/docs)
|
|
- [Discord communautaire](https://discord.gg/gameyfin)
|
|
- [Release notes v2](https://github.com/gameyfin/gameyfin/releases)
|
|
|
|
## Pages Liées
|
|
|
|
- [[cat-gaming]] — Catégorie Gaming
|
|
- [[app-gamevault]] — Concurrent C#/.NET
|
|
- [[app-retrom]] — Frontend émulation moderne
|
|
- [[app-retroassembly]] — Frontend émulation WASM
|
|
- [[app-traefik]] — Reverse proxy
|
|
- [[app-authelia]] — 2FA devant l'UI
|
|
- [[recettes-docker-compose]] — Templates Docker
|
|
- [[securisation-home-lab]] — Durcir l'infra
|