t4mer@notebook
Anorixo logo

Current · v1 · 2026 · Solo developer

Anorixo

A Libretro frontend for playing the games you already own. Version 1 is complete.

Free · No ROMs or BIOS included

Anorixo does not ship ROMs, BIOS files, or cores. You bring the games you already own.

Download for Windows

Windows, macOS

Windows 10 or later · 64-bit · v0.1.2 · macOS 12 or later · Apple Silicon or Intel · v0.1.2

Problem

I wanted a desktop program that stays open: a long-lived window, an event loop, memory that does not get recycled for you, and a user who can leave the app open all afternoon.

Qt showed up because I wanted that window to be native, not a WebView. The lockup says Play. Remember. Forever. The product line is Play your memories: a place for the cartridges and discs you already own, not a store, and not a ROM dump with a nicer icon.

What it is

Anorixo is a Libretro frontend for Windows and macOS. Version 1 is complete and ready to use.

The library window is Qt 6 / QML: cover grid or list, search, per-system sidebar, favorites, import, artwork, BIOS status, settings, a first-run wizard. Games live in a SQLite catalog. Missing covers and titles come from public Libretro thumbnail and DAT sources - no ScreenScraper account.

The play window is separate, and it is SDL3: video, audio, and gamepads. Pause, reset, save states, fast-forward, fullscreen. Console cores are loaded at runtime as .dll / .dylib files. The application does not embed an emulator. It loads one.

This repository does not ship ROMs, BIOS dumps, or cores. Disc systems need BIOS in the user data folder. That is a product decision, not a footnote.

Version 1

v1 is the first version I am willing to call done rather than “it compiles”.

What shipped:

  • Cover library with search, system filters, favorites, and recently played
  • ROM import, including drag-and-drop and a first-run wizard
  • Artwork and titles from public Libretro sources
  • Official Libretro cores downloaded from Settings or setup
  • An SDL3 play window with save states, screenshots, fast-forward, and fullscreen
  • Per-system keyboard bindings
  • Light and dark themes, with an accent colour that recolors the UI and the lockup
  • Optional update checks against a public JSON feed
  • A Windows setup installer and a macOS .app / DMG

I am still learning C++ and Qt in public. That does not mean the application is a sketch. v1 runs, imports, and plays.

My role

Solo. Architecture, C++, QML, packaging, the installer scars, the wrong mental models, and the notes on this site when something refused to map.

I am not claiming production Qt seniority. I used to teach C# Windows Forms, so desktop software is not a brand-new idea. This toolkit still is. Anorixo is the project I used to learn it for real, rather than collecting hello-world windows.

Engineering challenges

The interesting parts were not “can I draw a grid of covers”.

  • Two runtimes. The library is a Qt Quick event loop. Play is an SDL window with a gamepad and a core that wants the next frame. Treating those as one process with two jobs is the design. Treating them as a website with a <canvas> is the bug.
  • Cores as plugins. Libretro is a C API. The app searches a cores folder, downloads official builds when asked, and fails honestly when a BIOS file is missing. Shipping a “supported systems” list is easy. Shipping the files is not, legally or practically.
  • A catalog, not a folder listing. Import copies ROMs into a library, groups them by system, and remembers recently played. SQLite is the boring part. The less boring part is scanning, cover fetch, and metadata on a background thread so the window does not freeze while it learns a new shelf of games.
  • Cross-platform as a packaging problem. Windows wants windeployqt and cores next to the exe. macOS wants an .app, macdeployqt, and cores under Contents/PlugIns. CMake is the map. I wrote about what that file actually is.
  • QML is not Widgets, and it is not Vue. The screen is a tree of .qml files. C++ starts the engine and owns the parts that have to be close to the disk, the network, or the core. I lost time opening Qt Designer anyway. That belongs in the Problem Log.
  • Updates without a public source repo. GitHub will not let strangers read releases on a private repository. The app checks a public JSON feed instead, and tells you when a newer version exists. The download URL has to be a page anyone can open.

Technologies

C++20, Qt 6.8 (Quick, SQL, Network), QML, SDL3, SQLite, CMake, Libretro cores, Windows (MSVC) and macOS packaging.

Result

Version 1 is ready. It is a finished first release, not a 0.1 experiment I am still describing as if the window might vanish.

The useful outcome, for me, is a program that has to stay alive: a library you can browse, a play window that is not a WebView, and a stack I learned in public instead of pretending I already knew.

The C++ / Qt notes on this site are the lab notebook for this project: