Skip to content

Repository files navigation

Ludex

Ludex

Your personal video game library — track what you play, what you want to play and what you have finished, with ratings, dates, a journal, statistics and single-player game discovery.

English · Español · Français · Português

Download License Platform Electron JavaScript


Ludex is a desktop app for Windows (not a website) built with Electron. It uses the Steam catalog to search for games and pull cover art, genres, descriptions, screenshots and HowLongToBeat play times — all without an API key or signing in. Your data is stored only on your PC.

Features

  • Library by status: Playing, Paused, Completed, Dropped, Want to play and Wishlist.
  • Add games manually (outside Steam) with your own cover image — console exclusives, retro, physical games.
  • Wishlist prices: current Steam price and discount badge on every wishlist game, plus a startup alert when wishlist games go on sale.
  • Random picker with filters (status, genre/tag and HowLongToBeat length) to decide what to play next.
  • Star rating (half stars), finish date, tags and a journal/review (with optional spoiler hiding).
  • Chronological log of the games you finish, grouped by month.
  • Custom collections to group games your way.
  • Filters by genre and tag, plus search within your library.
  • Rich detail (from Steam): description, genres, release date, developer, screenshots (with a viewer) and HowLongToBeat hours.
  • Preview before adding: clicking a game on Home or in the Steam search opens its detail (screenshots, genres, length, price) — nothing is saved until you choose to add it.
  • Statistics and a Year in Review (Wrapped) that you can export as an image to share, including completion rate, longest streak, average length and this year vs. last.
  • Home with single-player / story game recommendations (Steam's most popular and most wishlisted), hiding the ones you already own.
  • Ludex AI: a chat that helps you decide what to play, analyses your backlog, describes your player profile, builds plans for a weekend or a month and sets you challenges. It runs entirely on your PC — see Ludex AI below.
  • Taste Lab and Gaming DNA: a two-minute this or that test and a player profile in ten dimensions — each one showing its confidence, its coverage and the evidence behind it, including how your taste has shifted over the months. Local and deterministic, like the rest.
  • Eight complete themes — not just an accent colour: each one changes the typography, the corners, the spacing and the shape of every control. Plus cover size and a dynamic background taken from the cover art.
  • Custom title bar, a loading screen drawn for each theme, and backups: automatic daily copies (last 5 kept) plus manual export/import.
  • Four languages (Spanish, English, French and Portuguese) and a first-run setup to pick your language and theme.
  • Auto-update: updates itself from GitHub releases.

Screenshots

Home Your library
Gaming DNA Taste Lab
Game detail Ludex AI
Log Statistics
Eight themes Loading screen

Each shot uses a different theme — the app ships with eight, and they change far more than the accent colour.

Ludex AI

The button in the bottom-right corner opens a chat that reasons about your own library. Ask it in your own words — "I have two hours and want something with a good story", "what's been waiting longest?", "make me a plan for the weekend", "what kind of player am I?" — or use the suggestion buttons.

There is no LLM and no cloud. It needs no account, no API key, no subscription, no downloaded model and no internet connection. Nothing about your library, ratings, journal or questions ever leaves your computer. It is a set of deterministic engines over the data Ludex already has:

Engine What it does
PreferenceEngine Works out your favourite topics, usual length, average rating and completion rate, weighting each game by status.
ScoringEngine Scores a game with eight weighted factors. A factor it cannot compute is excluded and the rest are rescaled — it never counts as zero.
RecommendationEngine What to play, similar games, comparisons and "something outside my taste".
BacklogAnalyzer Sorts your backlog into buckets and spots quick wins.
GamingProfileEngine Hard metrics plus player traits, each with the evidence behind it.
PlanningEngine Fits games into the hours a weekend, a week or a month gives you.
ChallengeEngine Builds challenges from real data, varying them by deterministic rotation.
NaturalLanguageParser Turns a sentence into an intent plus entities, with a confidence score.
LearningEngine Learns from what you finish, dismiss or add. Slowly, and it forgets what you stop reinforcing.
TasteLabEngine Runs Taste Lab: an adaptive test that turns comparisons into declared preferences.
GamingDNAEngine Blends what you declared, what your library shows and what it has learned into ten dimensions, archetypes and your evolution.
ResponseGenerator Explains why it suggested something. It returns i18n keys, never text.

The only part with a memory of its own is LearningEngine, stored in learning.json, separate from your library. You can see everything it has learned in Settings, and export, import or delete it there. Deleting it never touches your games.

Two rules run through all of it: it never invents data — if it cannot work something out it says so and tells you what it would need — and it is deterministic, so the same library and the same question always give the same answer. Every percentage shows the coverage: how much of the score is based on data you actually have.

Taste Lab and Gaming DNA

Taste Lab is a two-minute test that asks Ludex's two questions in a row: which of these two appeals more? It never asks "do you like RPGs? yes/no" — you pick between two things, and picking is far more telling than rating a list.

  • It is adaptive: the next question is the one that resolves the most uncertainty, and the follow-up questions only appear once a leaning is visible.
  • It asks with games from your own library whenever Ludex has real metadata for them. Every attribute shown on a card comes from the game's actual tags, genres or HowLongToBeat length. If a game cannot be described from real data it is not used, and the test falls back to abstract comparisons.
  • Answers are stored as declared preferences inside learning.json, next to what the LearningEngine observes. There is no second database.
  • Retaking it recalibrates rather than resets: new answers are averaged into the old ones.

Gaming DNA turns that into ten dimensions — story, gameplay, exploration, action, strategy, difficulty, completionism, experimentation, long and short sessions — each one built from up to three sources:

Source Where it comes from Weight
Declared Your Taste Lab answers Capped
Observed Your library: tags, status, ratings, lengths Grows with your library, and is the largest
Learned What the LearningEngine has seen you do Middle

That ordering is deliberate: your behaviour can end up contradicting your answers, and it wins. Say strategy is not for you, then spend six months finishing strategy games, and the profile follows what you did.

Every dimension shows its confidence, its coverage (how many games back it) and its evidence. A dimension without enough data shows "not enough data" instead of a number, and archetypes are only claimed when at least two dimensions support them. There is no Weekend Warrior archetype because Ludex does not record when you play, and inventing it would break the one rule that matters here.

Your evolution reconstructs the profile as it was months ago from the data itself — games you had by then, and the gestures recorded up to that date, replayed through the same LearningEngine. If there is not enough history it says so rather than drawing an empty chart. It compares you only with yourself: no rankings, no other users.

Everything is computed on your machine, and the whole thing works with no connection at all.

Download

  1. Go to Releases and download Ludex-Setup-x.y.z.exe.
  2. Run it and follow the installer.

Since it is not digitally signed, Windows may show SmartScreen: click More info -> Run anyway.

After installing, Ludex updates itself: on launch it checks for a new version, downloads it in the background and prompts you to restart and install.

Where is my data stored?

In C:\Users\<your user>\AppData\Roaming\Ludex\games.json. No cloud, no accounts, no telemetry. You can copy that file as a backup (or use Settings -> Export library).

Build from source

Requires Node.js.

npm install      # install dependencies
npm start        # run in development
npm test         # run the test suite
npm run dist     # build the installer into release\

Project structure

assets/                  App and installer icon
docs/screenshots/        README screenshots
src/
  main.js                Main process (data, Steam, HLTB, updates)
  preload.js             Secure renderer <-> main bridge
  renderer/
    index.html           UI
    styles.css           Styles (dark theme, responsive)
    app.js               UI logic
    ai/                  Ludex AI (local, deterministic, no network)
      core.js            Namespace, shared helpers and the coordinator
      preferences.js     PreferenceEngine
      scoring.js         ScoringEngine (weights and renormalization)
      recommend.js       RecommendationEngine
      backlog.js         BacklogAnalyzer
      profile.js         GamingProfileEngine
      planning.js        PlanningEngine
      challenge.js       ChallengeEngine
      learning.js        LearningEngine + declared preferences (learning.json)
      gamingDNA.js       GamingDNAEngine (dimensions, archetypes, evolution)
      tasteLab.js        TasteLabEngine (adaptive question bank)
      parser.js          NaturalLanguageParser
      response.js        ResponseGenerator (returns i18n keys)
    assets/              Material Symbols icon font (local)
tests/                   node --test (no dev dependencies)

Every file in src/renderer/ai/ is a plain script that registers itself under globalThis.Ludex.AI (the project has no bundler) and also exports with module.exports, so the engines can be tested with npm test without launching Electron. They are pure functions over the games array: no network, no state, no second database.

Tech

  • Electron (no UI framework) + electron-builder (NSIS installer) + electron-updater (auto-update).
  • Icons: Material Symbols by Google, embedded locally.
  • Game data: public Steam APIs (storesearch, appdetails, featuredcategories, filtered search) and HowLongToBeat — no API key.

Note when building on Windows: if the first build fails while unpacking winCodeSign (macOS symlinks), enable Windows Developer Mode or run the terminal as administrator.

Contributing

Issues and pull requests are welcome. Found a bug or have an idea? Open an issue.

License

MIT — free to use, modify and share.

The MIT license requires keeping the copyright notice (Jose Luis (Xzorez)) in any copy or derivative. If you reuse this code, a visible credit in your app's about/credits screen is greatly appreciated.

Made with Electron.

About

Tu biblioteca personal de videojuegos para Windows: apunta, puntua y descubre juegos de un jugador. Hecho con Electron.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages