A fast, dark-mode Windows desktop app for working with PGN chess files — download games, clean and organize them, enrich the tags, and run engine analysis. It streams games one at a time, so it handles multi-gigabyte PGN files without choking, all from a single app.
Built with heavy AI assistance — the owner provided the direction, requirements, and testing.
Download games from where you actually get them:
- Chess.com — a player's full archive, or a monthly crawl by rating band
- Lichess — a player's games, or a filtered monthly database export
- Lc0 training games, PGN Mentor, and TWIC
The Chess.com and Lichess player downloads share the same filters: only games you won, only checkmates, exclude bullet, exclude non-standard variants.
Organize large collections:
- Filter (Elo, ply count, checkmates, annotation cleanup), Sort, Split, Merge, Deduplicate, and Tour Breaker (pull real tournaments out of a giant dump).
Enrich the headers:
- ECO opening tags, missing Elo fill-in, event category, ply counts, Stockfish version normalization, and annotation stripping.
Analyze:
- PGN statistics overview, UCI/Stockfish engine analysis, Elegance scoring, and a checkmate-only filter.
- Open the Releases page.
- Download the latest
PgnTools-…-win-x64.exe. - Double-click it.
It's a single self-contained file — no installer, and no .NET runtime to install separately.
Requires the .NET 10 SDK on Windows. To build the single-file executable:
.\build.cmdThat produces Build\PgnTools.Wpf.Release\PgnTools.exe. Or, while developing, just run it:
dotnet run --project PgnTools.Wpf/PgnTools.Wpf.csproj.NET 10 · WPF (Fluent dark theme) · CommunityToolkit.Mvvm · Microsoft.Extensions.DependencyInjection. The heart of the app is a streaming, low-allocation PGN reader/writer shared across every tool.
PgnTools.Wpf/— the appPgnTools/— the shared PGN engine, services, and view-models the app is built onDocs/— per-tool notes and design docsbuild.cmd— one-step local build
PGN Tools is free. If it saved you time — or it's the kind of thing you'd have happily paid for — you can drop a few bucks in the tip jar. It's genuinely appreciated and helps keep the project going.
See LICENSE.
Releases are made with a button — nothing to remember:
- Go to the repo's Actions tab → the Release workflow → Run workflow.
- Type a version (e.g.
v1.0.0) and click the green Run workflow button. - It builds the single-file exe and publishes a GitHub Release with it attached.
Regular commits and pushes never create a release — only that button does, so commit as often as you like.
