Releases: pkircher29/OpenKJ
Release list
OpenKJ 3.0.1 — Qt 6 Upgrade & Build Resilience Release
OpenKJ 3.0.1 — Qt 6 Upgrade & Build Resilience Release
OpenKJ 3.0.1 modernizes the codebase to compile cleanly against modern Qt 6, improves Windows GStreamer CI download resilience, and resolves deprecation issues across Windows, Linux, and macOS.
What's Changed in 3.0.1
🚀 Qt 6 Modernization & Upgrades (PR #3 by @salfter & fixes)
- CMake & Qt 6 Libraries: Upgraded build configuration to locate and link against Qt6 components (\Gui, \Sql, \Network, \Widgets, \Concurrent, \Svg, \PrintSupport).
- XML & String Modernization: Updated XML element comparison to Qt 6 \QAnyStringView\ UTF-16 literals in singer/song import.
- Database & File Handling (\dbupdater.cpp): Replaced deprecated \QStringRef\ with sorted \QVector<QPair<QString, QString>>\ using binary lookup (\std::lower_bound) to eliminate string reference lifetimes / memory leaks.
- Multi-Display & Screen Handling (\dlgcdg.cpp, \dlgsettings.cpp): Replaced obsolete \QDesktopWidget\ with modern \QGuiApplication::screens()\ and proper monitor index lookup.
- Regex Modernization (\dlgeditsong.cpp, \dlgsongshoppurchase.cpp, \okarchive.cpp): Migrated all legacy \QRegExp\ usage to \QRegularExpression\ / \QRegularExpressionValidator.
- DateTime & Enum Alignment: Replaced deprecated \setTime_t()\ with \QDateTime::fromSecsSinceEpoch()\ in requests model and wrapped integer alignment bitwise math in \QVariant::fromValue(Qt::Alignment(...)).
- Layouts: Updated \layout->setMargin(0)\ to \layout->setContentsMargins(0, 0, 0, 0).
🛠️ CI/CD & Build Matrix Enhancements
- Resilient Windows GStreamer Resolution: Added dynamic multi-candidate version checking for GStreamer MSIs to survive upstream freedesktop.org URL purging.
- Cross-Platform Qt 6 Matrix:
- Windows: Qt 6.7.2 MSVC 2022 x64 build with Inno Setup installer (.exe) & portable package (.zip).
- Linux: Ubuntu 24.04 Qt 6 native build (.tar.gz).
- macOS: Apple Silicon / Homebrew Qt 6 build (.tar.gz).
Full Diff & Commits
- Full Compare Diff: v3.0.0...v3.0.1
- \fad73d1\ fix(ci): remove nonexistent module arguments for Qt 6 desktop install
- \�3ff1bb3\ fix(ci): fix CMake Darwin control flow and correct Qt 6.7.2 MSVC architecture
- \7aba5d6d\ ci: fix Qt 6 CI build across macOS, Windows, and Linux
- \12e8595d\ fix(build): restore Qt 6 Windows compilation
- \d4c9a179\ chore: bump version to 3.0.1
- \28a21da9\ ci: update all GitHub Actions workflows to build and package with Qt 6
- \c26d46e0\ Merge pull request #3 from salfter/qt6: changes needed to build against Qt 6
- \397b0d49\ changes needed to build against Qt 6 (sourced from https://github.com/mattlanglands/OpenKJ)
- \5ce1da49\ ci: make Windows GStreamer download resilient to upstream removals
OpenKJ 3.0.0 — Community Maintenance Release
Hey OpenKJ Community,
Like many of you, I've relied on OpenKJ to run shows for years. Development upstream has slowed to a crawl, and the builds most of us are running carry bugs that have been there a long time.
Rather than let it sit, I went through the codebase properly — not a quick patch, a full reliability and security audit across playback, the database layer, networking, and the build system.
Free and open source, as OpenKJ has always been.
This is a community maintenance release: a reliability and security audit of the OpenKJ codebase, with native builds for Windows, Linux, and macOS. It does not replace or represent upstream OpenKJ.
What's fixed
Crashes and memory safety
- Two confirmed GStreamer double-unrefs — one on media backend teardown, one in audio recording
- Undefined behavior in CD+G scrolling, and the oversized per-call stack buffers behind it
- A use-after-free in background directory scanning
- Uninitialized software-video image formats; malformed frames are now rejected safely
Data loss
- Singer history refresh was clearing valid history instead of loading it
- Songbook uploads silently dropped rows at every 1,000-song boundary
- Recordings now wait for EOS so encoded files finalize cleanly
Security
- User-controlled SQL operations converted to prepared statements with bound parameters
- Legacy card/CVV persistence disabled and purged
Performance and stability
- Songbook PDF generation: N+1 database access replaced with a single ordered query
- SongShop login failures and malformed replies no longer trap the UI in an endless event loop
The complete audit, with reasoning for each fix, is in RELEASE_NOTES.md.
Downloads
| Platform | File | Notes |
|---|---|---|
| Windows x64 | OpenKJ-3.0.0-Windows-x64.zip |
Portable — unzip and run OpenKJ.exe. Bundles Qt and GStreamer, so it is a large download; slimming this is planned for the next release. |
| macOS arm64 | OpenKJ-3.0.0-macOS-arm64.tar.gz |
Contains OpenKJ.app |
| Linux x64 | OpenKJ-3.0.0-Linux-x64.tar.gz |
Dynamically linked; see the bundled runtime-dependencies.txt for what to install |
Also available
- OpenKJ-compatible web hosting — $5/month. If you pay for online songbook and request hosting, compatible servers are available at half the usual price. Same protocol, same workflow; point OpenKJ at the server and paste your API key. Switching back is just as easy.
- Auto-KJ — a separate modern platform with a 60-day trial and one-click import of your OpenKJ singer history and song database. There are no forced upgrades; OpenKJ remains free.