Download Latest Version l5rcm-setup.exe (66.8 MB)
Email in envelope

Get an email when there's a new version of L5RCM

Home / v3.20.0
Name Modified Size InfoDownloads / 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. pdftk has been replaced by pypdf for sheet generation: Linux users no longer need to install pdftk-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 the QT_API environment 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.txt removed), APP_VERSION as 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

Source: README.md, updated 2026-05-29