Skip to content

Releases: pkircher29/OpenKJ

OpenKJ 3.0.1 — Qt 6 Upgrade & Build Resilience Release

Choose a tag to compare

@pkircher29 pkircher29 released this 20 Aug 20:26

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

Choose a tag to compare

@pkircher29 pkircher29 released this 06 Aug 14:26

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.