| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| l5rcm-3.20.0-2_all.deb | 2026-05-30 | 5.0 MB | |
| l5rcm-setup-user.exe | 2026-05-30 | 34.5 MB | |
| l5rcm-setup.exe | 2026-05-30 | 34.5 MB | |
| l5rcm-x86_64.AppImage | 2026-05-30 | 95.4 MB | |
| README.md | 2026-05-29 | 2.6 kB | |
| v3.20.0 source code.tar.gz | 2026-05-29 | 7.1 MB | |
| v3.20.0 source code.zip | 2026-05-29 | 7.3 MB | |
| Totals: 7 Items | 183.8 MB | 0 | |
# L5RCM 3.20.0
This release closes a long modernization cycle that had been on hold since 3.17.2. The most relevant user-facing changes concern PDF sheet generation and the Windows installer, plus several fixes; under the hood the whole codebase has been moved to Python 3.11+, to PyQt6 (via qtpy), and to a new build system.
## ✨ User-facing changes
- Courtiers now export onto their dedicated PDF sheet. Courtiers were mistakenly
rendered on the bushi sheet; they now use the correct
sheet_courtier.pdf, with technique descriptions wrapping instead of running off the page. (#385, #387) - Reworked PDF generation for courtier and ninja sheets, plus a fix for the NPC-style export.
- New per-user Windows installer that no longer requires administrator privileges. (#376)
- Dice roller: saved expressions are now stored in the user data directory, and the dialog is reused instead of opening a new one every time.
- Health multiplier: changing it from Rules → Set Health Multiplier now correctly marks the character as modified, so the change is no longer silently lost on close.
- Correct version in the Windows installer. It previously always reported
3.17.0(and so did "Programs & Features"); it now reflects the real version.
## 🛠️ Under the hood
- Migrated to PyPDF.
pdftkhas been replaced bypypdffor sheet generation: Linux users no longer need to installpdftk-java, and ~10 MB of bundled binaries were removed from the repository. (#366, #368) - Migrated to qtpy / PyQt6. All code imports Qt through
qtpy, enabling support for multiple Qt bindings via theQT_APIenvironment variable. - Architectural refactor of
main.py. The main-window monolith went from ~2551 to ~374 lines, split into per-tab and per-concern mixins with their own Qt "sinks". (#374) - API-layer refactor to
L5RCMContext+contextvars, with better test isolation and context propagation to worker threads. - Modernized build. Packaging consolidated into a single
pyproject.toml(setup.py/requirements.txtremoved),APP_VERSIONas the single source of truth for the version, and a minimum requirement of Python 3.11+. - CI/CD on GitHub Actions (replacing Travis/Appveyor), a CodeQL workflow, and updated action versions.
- Added explicit minimum version floors for PyPI dependencies.
Full changelog: https://github.com/OpenNingia/l5rcm/compare/v3.17.2...v3.20.0