State lives in the user’s data directory. Store files are read, never written.
Free and open source
Build on Winnow.
Winnow combines launcher files, game metadata, and play history in a local desktop application. Explore the code, add a provider, or help improve the experience on Windows and Linux.
Metadata is fetched in the background and cached. Unavailable providers do not prevent the library from opening.
External IDs auto-merge. Fuzzy identity matches always wait for a person.
The recommender returns the signals behind each pick, not only a score.
Runtime architecture
How the app fits together.
The Avalonia UI reads one SQLite library and raises commands. Local ingest, identity resolution, session monitoring, enrichment, and recommendations run behind interfaces under the same generic host.
Module map
Where to make a change.
The domain layer has no IO dependencies. Separate assemblies handle storage, platform readers, metadata, and presentation.
Winnow.Core
Domain records and contracts. BCL only.
Winnow.Data
SQLite, Dapper, migrations, and derived bucket queries.
Winnow.Ingest.*
Read-only Steam, Epic, and GOG local-file readers.
Winnow.Resolve
Hard joins, soft-match queue, human confirmation.
Winnow.Enrich.*
Rate-limited, cached, soft-failing metadata clients.
Winnow.Recommend
Explainable scoring over longitudinal play signals.
Winnow.Monitor
Process discovery and session recording.
Winnow.App
Avalonia UI and generic-host composition root.
Build it
Two commands from source.
No cloud setup, service account, or local container stack.
PS dotnet build
PS dotnet test Browse the source