Development¶
nParse+ is GPL-3.0, written in Python 3.12 with PySide6, and developed at github.com/prokopto-dev/nparse-plus.
Running from source¶
Requires uv (which installs Python 3.12+ for you):
git clone https://github.com/prokopto-dev/nparse-plus.git nparseplus && cd nparseplus
uv sync
uv run python -m nparseplus
Development commands¶
uv run pytest # ~770 tests, a few seconds
uv run pytest --cov=nparseplus --cov-branch --cov-report=term-missing
uv run ruff check . && uv run ruff format .
QT_QPA_PLATFORM=offscreen uv run pytest # headless (CI does this)
uv run mkdocs serve # preview this documentation
Architecture in one paragraph¶
A log driver tails the newest eqlog_*.txt, a parser chain (one module
per EQTool parser, 1:1 ports) turns lines into typed events on an event
bus, handlers mutate services (timers, fights, triggers), and the Qt UI
reads snapshots on timers. The rule that matters: the core engine never
imports Qt — a test enforces it. The full guide lives in
CLAUDE.md
in the repo; EQTool's C# (pinned commit in
CREDITS.md)
is the source of truth for ported behavior, and its EQtoolsTests corpus
is the golden spec.
Contributing¶
- Commits follow Conventional
Commits —
feat:/fix:determine release versions (see Release flow). - Ported parser/handler behavior should match EQTool exactly; port the C# test first when in doubt. Deliberate divergences get a comment.
- Data files under
data/are generated bytools/convert_*.py— regenerate, don't hand-edit.
Roadmap¶
Planned features and the distribution parking lot live on the Roadmap page; shipped history is in the changelog.