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.

.NET 10Avalonia 11SQLitexUnit
Local data

State lives in the user’s data directory. Store files are read, never written.

Optional network services

Metadata is fetched in the background and cached. Unavailable providers do not prevent the library from opening.

Review uncertain matches

External IDs auto-merge. Fuzzy identity matches always wait for a person.

Explainable recommendations

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.

Winnow runtime: the Avalonia UI and background services share a local SQLite library. Read-only launcher readers feed identity resolution; external providers supply metadata and covers.

Module map

Where to make a change.

The domain layer has no IO dependencies. Separate assemblies handle storage, platform readers, metadata, and presentation.

01

Winnow.Core

Domain records and contracts. BCL only.

02

Winnow.Data

SQLite, Dapper, migrations, and derived bucket queries.

03

Winnow.Ingest.*

Read-only Steam, Epic, and GOG local-file readers.

04

Winnow.Resolve

Hard joins, soft-match queue, human confirmation.

05

Winnow.Enrich.*

Rate-limited, cached, soft-failing metadata clients.

06

Winnow.Recommend

Explainable scoring over longitudinal play signals.

07

Winnow.Monitor

Process discovery and session recording.

08

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