Accueil

Ce qu’il fait

Toute la bibliothèque

Les jeux GOG, Steam, Epic et itch.io s’installent, se mettent à jour et se lancent depuis Universe. Au premier lancement, il reprend ce que Lutris, Heroic et Steam ont installé, et les dossiers de ROM des émulateurs : Dolphin, PCSX2, RPCS3, Ryujinx et les autres. Les jaquettes arrivent sans clé d’API.

Une page par jeu

La page affiche le temps de jeu, les sessions, les sauvegardes, la place sur le disque et les succès, avec une bannière en jeu quand l’un d’eux se débloque. Elle compare la version installée à la dernière sortie, et garde les réglages de lancement du jeu : runner, version de Proton, résolution, limite d’images par seconde.

La page de Grand Theft Auto V : 14,8 h de jeu, la dernière partie, la version installée et une rangée de captures

Trois apparences, une bibliothèque

Universe, Switch 2 et PS5, qu’on change à chaud dans les réglages. Universe reprend Reprise, mon thème pour Pegasus. Le PS5 a pris une journée. Les thèmes des autres s’installent en extensions.

Universe L’illustration du jeu derrière tout.
Switch 2 Une rangée de jeux au-dessus d’une barre de boutons ronds.
PS5 L’univers du jeu derrière une rangée de tuiles.

Sans lien avec Nintendo ni Sony. Nintendo Switch est une marque de Nintendo ; PlayStation et PS5 sont des marques de Sony Interactive Entertainment.

HOME par-dessus le jeu

Le bouton HOME met le jeu en pause et s’ouvre par-dessus : capture d’écran, MangoHud, limite d’images par seconde, volume, reconnexion d’une manette, quitter. Un appui long sur B ouvre le menu d’alimentation.

Canapé et Steam Deck

DualSense, DualShock 4, Xbox, Switch Pro, Switch 2 Pro et 8BitDo ont chacune leurs glyphes, et chaque émulateur reçoit une manette par joueur. Sur Steam Deck, l’interface passe en 16:10, avec la limite de puissance, la fréquence du GPU et le ventilateur dans les réglages. Universe tourne dans le mode jeu de Steam, ou dans sa propre session à l’écran de connexion, sans bureau, comme une console.

Deux applications et une CLI

Universe Big Screen se pilote à la manette, en PySide6 et QML. Universe Desktop se pilote à la souris et au clavier, en GTK4, libadwaita et Rust, et met les jeux dans la recherche de GNOME. La CLI fait tout ce que font les deux, avec une sortie JSON sur chaque commande.

Universe Desktop, l’application GTK : la grille de la bibliothèque et sa barre latérale
universe                            # la bibliothèque, dernier joué en tête
universe play "dead cells"          # par id, un mot ou un bout du titre
universe login gog                  # se connecter à une boutique
universe search hades --source gog  # puis universe install <id>
universe saves backup "dead cells"  # aussi list, restore, export, cloud
universe status --json              # le jeu en cours, pour un script

Comment je l’ai construit

jours prévus au plan
~80
jour jusqu’au MVP accepté
1
commits en 38 jours
1 212
versions, de la v0.0.1 à la v0.0.13
13

Le plan

Le 11 septembre 2026, le plan comptait environ 80 jours en cinq jalons. Le MVP a été accepté le jour même, la v0.0.1 est sortie deux jours après. Depuis, 13 versions, en paquets pour l’AUR, COPR (Fedora) et Nix, plus un script d’installation pour SteamOS et Bazzite.

Écrit par des agents

L’architecture, les specs et la revue sont de moi. Le code, ce sont des agents qui l’écrivent, Claude Code et Codex, et je ne le lis pas. Les tests servent de spec, et un changement est fini quand un test montre qu’il marche. Il y en a 416 en Rust et 760 en Python. Un parcours automatique passe par chaque écran de chaque apparence, environ 6 000 appuis par apparence, et échoue au premier focus perdu ou à la première impasse.

L’architecture

Le cœur est une bibliothèque Rust sans démon. Chaque jeu tourne dans une unité systemd temporaire, et la fin de son cgroup clôt la session. On s’en sert de trois façons, sans IPC : la crate, un module Python (PyO3) et la CLI. Les modules et les sources de jeux sont des exécutables Python qui parlent JSON, et les données restent des fichiers qu’on peut lire, un game.toml par jeu et un sessions.jsonl.

25 sessions en parallèle

Le 10 octobre, j’ai dicté 16 points. Une session les a découpés en 25 tâches, les a lancées en sessions Claude parallèles, chacune dans son worktree git, puis a intégré leurs 255 commits.

La suite

La v0.1.0 est en cours : les mises à jour des jeux hors GOG, un README qui colle au site, et ce que les trois forks ont ajouté.

Plus loin, je veux faire du journal un vrai compagnon. Il écrit déjà une entrée par session à partir de l’enregistrement et des captures. J’aimerais lui parler à la voix en pleine partie, et qu’il réponde avec ce que le journal sait, ou en cherchant sur le web.

Et sur la liste : les trophées au-delà de GOG, des thèmes Wii U, Steam Big Picture et PS3, et ce que demanderaient Windows et macOS.