A fast, memory-efficient parser for Star Wars: The Old Republic combat logs, built on .NET 10 and modern C#. A shared core library tails the game's log files, parses each line with zero-allocation span parsing, and exposes a live reactive stream of per-player DPS/HPS/APM stats. A transparent in-game overlay and command-line hosts render that stream.
- Zero-allocation span parsing of combat-log lines into a typed model (
ReadOnlySpan<T>/ReadOnlyMemory<T>) - Core library is AOT-compatible (no reflection)
- Live DPS / HPS / APM calculations powered by Rx.NET
- Transparent in-game overlay (Dear ImGui) — clear see-through, always-on-top, auto-pins over the SWTOR window
- Built-in mini combat log in the overlay — human-readable ability/damage feed (great for streamers showing their rotation)
- Command-line hosts for monitoring and listing logs
SwtorLogParser.Overlay.ImGui is an immediate-mode (Dear ImGui + Silk.NET/OpenGL) overlay with a genuinely transparent framebuffer:
- Clear transparency — the game shows through; an opacity slider controls the panel tint.
- Pins to the game — finds the running
swtor.exewindow, snaps over its top-right, and follows it if you move the game window. Polls and shows "Waiting for SWTOR…" until the game is up (resilient to launch order / relaunch). - Always-on-top over windowed/borderless SWTOR; never steals focus and stays out of Alt-Tab.
- Draggable via the
☰grip; adjustable font size; remembers position/opacity/font between runs. - Combat log — tick Log to expand a rolling, plain-language feed of ability events (
time player ability -> target amount (crit)), with the raw GUIDs/syntax stripped.
Fullscreen: run SWTOR in Fullscreen (Windowed) or Borderless. Exclusive fullscreen cannot be overlaid by any normal window.
Combat logging: the game must be writing combat logs (enable in-game), which land in Documents\Star Wars - The Old Republic\CombatLogs. The overlay/CLIs read the newest file.
Pre-built binaries ship on every version tag via GitHub Releases:
| Platform | Artifact | What it is |
|---|---|---|
| Windows x64 | SwtorLogParser.Overlay-vX.Y.Z-win-x64.exe |
Transparent ImGui DPS/HPS overlay |
| Windows x64 | SwtorLogParser.Cli-vX.Y.Z-win-x64.exe |
Native AOT CLI (list / monitor) |
| macOS Apple Silicon | SwtorLogParser.Overlay-vX.Y.Z-osx-arm64 |
Same ImGui overlay (portable host) |
| macOS Apple Silicon | SwtorLogParser.Cli-vX.Y.Z-osx-arm64 |
Native AOT CLI |
- SWTOR on Windows is x64; we only ship win-x64.
- SWTOR on Mac is Apple Silicon only; we only ship osx-arm64.
- Overlay UI is shared Dear ImGui code on both OSes. Windows gets extra Win32 chrome (no-activate / topmost re-assert); macOS uses GLFW topmost + transparent framebuffer.
Cut a release (maintainers):
git tag v1.3.0
git push origin v1.3.0
# → Release workflow builds + uploads artifacts to the GitHub Release# Windows
dotnet publish SwtorLogParser.Overlay.ImGui -c Release -r win-x64 --self-contained \
-p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true -o publish/overlay-win
# macOS Apple Silicon
dotnet publish SwtorLogParser.Overlay.ImGui -c Release -r osx-arm64 --self-contained \
-p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true -o publish/overlay-macOr download the pre-built overlay from Releases. On macOS: chmod +x then run the binary.
# From source (any platform with the .NET 10 SDK)
dotnet run --project SwtorLogParser.Cli -- monitor # live per-player stats
dotnet run --project SwtorLogParser.Cli -- list # list combat-log files
# Native AOT publish
dotnet publish SwtorLogParser.Cli -c Release -r win-x64 -o publish/cli-win
dotnet publish SwtorLogParser.Cli -c Release -r osx-arm64 -o publish/cli-mac-
Requirements: .NET 10 SDK. Overlay builds on Windows and macOS (GLFW/OpenGL + ImGui). Win32 host extras compile only on Windows. SWTOR with combat logging enabled for live testing.
-
VS Code: press
F5for the Overlay (ImGui) or Managed CLI launch configs;tasks.jsonprovidesbuild,test, andpublish-overlaytasks. -
CLI:
dotnet build SwtorLogParser.slnx # build the solution dotnet test SwtorLogParser.Tests # run the test suite
SwtorLogParser— the AOT-compatible core: span parser, model types, andCombatLogsMonitor(file tailing + theIObservable<PlayerStats>DPS/HPS stream, plus a per-lineCombatLogChangedevent).- Hosts are pure consumers — the overlay and CLIs subscribe to the core stream and render; no parsing logic lives in a host.