Releases: BALL-Project/ball
BALLView v1.7.1
Installers built from this tag.
- macOS: download the
.dmg, double-click to mount, dragBALLView.appto/Applications. Signed + notarized (Phase 8a) — no Gatekeeper prompt expected on macOS 14+ / macOS 26+. If the cert is still pending procurement, the.dmgships unsigned: right-click → Open → confirm on first launch, or runxattr -dr com.apple.quarantine /Applications/BALLView.apponce. - Windows: download the
.exeinstaller (NSIS, per-user install to%LOCALAPPDATA%\Programs\BALLView— no admin/UAC required). Windows SmartScreen will warn on first run until the SignPath Foundation OSS signing cert lands (Phase 8b). Click More info → Run anyway to proceed. See packaging/windows/README-SMARTSCREEN.md for the full guide + integrity verification flow.
Windows installer SHA256:e8a2b19e955274d9e6adb1f68c856a67f7afa94c276e4ba09e2c63bb09b79ec7
A portable.zip(extract-and-run, no installer) is also available for users who don't want a Start Menu entry.
Build from source: see BUILD-macos.md (macOS), the GitHub Actions CI workflow at the same tag for the Linux + Windows recipes.
- Linux: four artifacts per arch (x86_64 + arm64):
.AppImage(portable, double-click to run — bundles Qt 6.8 + plugins via linuxdeploy; rememberchmod +xthen./BALLView-*.AppImage),.deb(Debian / Ubuntu 24.04+;sudo apt install ./BALLView-*.deb),.rpm(Fedora 40+ / RHEL / openSUSE;sudo dnf install ./BALLView-*.rpm), and a portable.tar.gz(extract-and-run, requires system Qt 6.8+). All Linux SKUs are LGPL — FFTW is intentionally absent (no GPL relicensing). SeeBUILD-linux.mdfor build-from-source instructions and.planning/phases/08c-packaging-linux/08c-FFTW-GPL-DECISION.mdfor the GPL rationale.
BALLView v1.7.0
Installers built from this tag.
- macOS: download the
.dmg, double-click to mount, dragBALLView.appto/Applications. Signed + notarized (Phase 8a) — no Gatekeeper prompt expected on macOS 14+ / macOS 26+. If the cert is still pending procurement, the.dmgships unsigned: right-click → Open → confirm on first launch, or runxattr -dr com.apple.quarantine /Applications/BALLView.apponce. - Windows: download the
.exeinstaller (NSIS, per-user install to%LOCALAPPDATA%\Programs\BALLView— no admin/UAC required). Windows SmartScreen will warn on first run until the SignPath Foundation OSS signing cert lands (Phase 8b). Click More info → Run anyway to proceed. See packaging/windows/README-SMARTSCREEN.md for the full guide + integrity verification flow.
Windows installer SHA256:09a76e8f15cbe7488d8cbfacbb7dbe3eaefbe3ff069de9c30a5f5bb835c713ff
A portable.zip(extract-and-run, no installer) is also available for users who don't want a Start Menu entry.
Build from source: see BUILD-macos.md (macOS), the GitHub Actions CI workflow at the same tag for the Linux + Windows recipes.
- Linux: four artifacts per arch (x86_64 + arm64):
.AppImage(portable, double-click to run — bundles Qt 6.8 + plugins via linuxdeploy; rememberchmod +xthen./BALLView-*.AppImage),.deb(Debian / Ubuntu 24.04+;sudo apt install ./BALLView-*.deb),.rpm(Fedora 40+ / RHEL / openSUSE;sudo dnf install ./BALLView-*.rpm), and a portable.tar.gz(extract-and-run, requires system Qt 6.8+). All Linux SKUs are LGPL — FFTW is intentionally absent (no GPL relicensing). SeeBUILD-linux.mdfor build-from-source instructions and.planning/phases/08c-packaging-linux/08c-FFTW-GPL-DECISION.mdfor the GPL rationale.
BALLView v1.6.2
BALLView v1.6.2 — warning-cleanup + ARM Linux + Qt 6.8 LTS baseline
Status: finalized 2026-05-17 — ready for v1.6.2 git tag (triggers release.yml artifact build).
v1.6.2 is a corrective + hygiene release for v1.6.1. Same binary surface, same supported platforms, no new user-facing features. The headlines are: Qt 6.8 LTS as the new project floor (enables ARM Linux desktop binaries), ARM Linux (ubuntu-24.04-arm) added to the CI matrix as a blocking peer of x86_64, and the Windows MSVC + Linux gcc warning surfaces cleared from ~4 000 to under ~10. Plus several latent bug fixes flushed out by the warning census (chief among them: a real va_start undefined-behavior site in PDBFile::writeRecord_ that had been latent in the PDB writer since the codebase was first targeted at C++17, and four QFile::open() discarded-bool sites where failure was silently producing zero-byte downloads).
If you're on v1.6.1, upgrading to v1.6.2 is recommended but optional — v1.6.1 functions correctly; v1.6.2 is cleaner and more diagnosable.
What's new in v1.6.2
Qt 6.8 LTS as the project-wide floor
QT_MIN_VERSION bumped from 6.5 → 6.8 LTS across all platforms. The bump was driven by ARM Linux: aqtinstall has no Linux ARM64 desktop binaries for Qt 6.5 / 6.6 / 6.7 — they were first published with Qt 6.8 LTS (October 2024). Pinning x86_64 to 6.8 too keeps the toolchain uniform across the matrix and enables consistent use of Qt 6.8+ APIs (QDomDocument::ParseOptions, QMouseEvent::globalPosition, etc.).
Build implications:
- macOS: Homebrew Qt 6.11+ satisfies the floor (no action required).
- Linux x86_64 + ARM64: CI installs Qt 6.8.3 via
jurplel/install-qt-action; users on Ubuntu 24.04 whoseapt-shipped Qt is 6.4.2 will need to install Qt 6.8+ separately. - Windows: vcpkg pulls Qt 6.8+ via the existing manifest.
ARM Linux (ubuntu-24.04-arm) added to CI as a blocking platform
The CI matrix grew a fourth blocking build job: build (linux-arm64) on ubuntu-24.04-arm (free standard GitHub-hosted runner since late 2024). Two consecutive green runs (25963533636 + 25963900386) established the ARM baseline on the new Qt 6.8 floor, after which the entry was flipped from blocking: false → blocking: true to match linux-x64 / macos-arm64 / windows-x64. ARM-specific regressions (alignment, byte-order, char-signedness defaults, pointer-truncation under LP64-vs-LLP64 differences) are now caught at PR time.
The first ARM regression caught and fixed by this matrix entry was the -Wnarrowing error on hashGrid.C's neighbour-offset table — ARM gcc defaults char to UNSIGNED, so the -1 literals in the 27×3 table tripped -Wnarrowing errors that x86_64 (signed char default) had never seen. Fix: declare the table as signed char (commit fdea8c7). Cross-platform, no behavior change.
CI cycle-time and signal improvements
paths-ignorefor docs commits. Push/PR triggers now skip the full 4-OS rebuild for.planning/**,**.md,doc/**, andLICENSE*changes (saves ~45–60 min of runner time per ROADMAP/CLAUDE.md/docs commit). Source dirs remain in-scope by default — the list is a deny-list, not allow-list.- macOS runner version aligned with OpenMS (
macos-14/ Sonoma) for known-stable parity; Windows bumpedwindows-2022→windows-2025(VS 2022 17.x with current MSVC 14.4x). - Per-TU build profiling.
Top-20 slowest TUsstep added to each platform (Phase 999.19-01); ninja-log artifact uploaded with each build for offline regression analysis. SIGPIPE-on-sort | headpipefail bug fixed so the telemetry step never silently fails a blocking job. - Windows CMake build-tree cache (Phase 999.17-01) — separate from ccache; caches the configure step's output across runs, cutting Windows job time meaningfully on warm cache.
- GitHub Actions bumps (Phase 999.20-01) —
actions/upload-artifact@v4 → v6,actions/download-artifact@v4 → v7. Both are pre-emptive bumps before the Node 20 deprecation deadline.
Warning-surface cleanup (massive)
The pre-v1.6.2 warning census measured ~4 000 warnings on linux-arm64, ~2 400 on linux-x64, ~1 800 on macos-arm64, ~700 on windows-x64 (already low after Phase 5.1). v1.6.2 cuts every platform to under ~10 actionable warnings (the residual being intentional [[deprecated]] markers on GENETICDOCK self-deprecated classes that the v2.0 cleanup phase will address).
The fixes split across two parallel work streams, both folded into v1.6.2:
Stream A — file-by-file warning category execution (commits 5ef5509, d77aab3, 94fcd73, 85d991d, 3519c34, cb392cc, c947b2d):
-Wcatch-value→ catch polymorphicBALL::Exception::*byconst&instead of by value (5ef5509, d77aab3) — 35 sites- Latin-1 source bytes → ASCII in TODO comments (94fcd73) — fixes MSVC C4828 source-encoding warnings
sprintf/vsprintf→snprintf/vsnprintfacross all platforms (85d991d) — fixes Apple SDK deprecation advisory + general security improvement-Woverloaded-virtualsweep on QSARsimpleBase.hsubclasses (3519c34, c947b2d) — addsusing SimpleBase::operator=;to ~40 derived classes, killing the largest single warning category (~2 800 hits on Linux ARM64)- Init-list reorder + dead-write removal + empty-body-loop clarification (5ef5509)
- GCC
-Wmaybe-uninitializedfalse-positive suppression on system headers (cb392cc)
Stream B — codex-reviewed shortlist execution (commits c6ecd48, 82dba3c, 24c044f, d730518, 0a75ede):
c6ecd48— Codex CLI adversarial-review-approved P0+P1 bundle: 11 fixes across 18 files- P0:
PDBFile::writeRecord_va_start UB. The function declaredvoid writeRecord_(PDB::RecordType, ...), but the C++ standard'sva_startmacro requires the anchor parameter to be a type that does not undergo default argument promotion. Enums can be int-promoted, which is undefined behavior per [cstdarg]. Real latent bug — happened to work on x86_64 gcc/clang/MSVC but UB everywhere. Fix: change signature tovoid writeRecord_(int record_type, ...), cast back to the strong enum afterva_startfor switch + format-table lookups. Callers unchanged (enum constants implicitly convert to int). - P1: Defaulted copy-assign on iterator templates.
(Const)BidirectionalIterator+(Const)RandomAccessIteratorhad user-provided copy ctors but no user-provided copy-assign, triggering-Wdeprecated-copyon ~740 template instantiations. AddedClass& operator=(const Class&) = default;to all four. - P1: Qt 6 mechanical migrations —
QMouseEvent::globalPos()→globalPosition().toPoint()(6 sites),QByteArray::count()→size()(6 sites insimpleDownloader.C),QDomDocument::setContent5-arg →ParseOptionsoverload returningParseResult(2 sites),QMenu::addAction(text, recv, slot, accel)→(text, accel, recv, slot)(4 sites). - P1: Smaller cleanups —
kekulizer.hAtomInfodefault-init all members;glRendererctor mem-init reorder to match declaration order; drop deadpm.createAlphaMask()× 2 sites; foldQTranslator::load()[[nodiscard]]result;Hash_test.Cchar*→const char*.
- P0:
82dba3c— Windows MSVC trio: silence C4834 insimpleDownloader.C:134(real latent bug — discardedQFile::open()bool was producing zero-byte downloads with no diagnostic), add cross-platform-DBOOST_BIND_GLOBAL_PLACEHOLDERS(silences Boost 1.73+ global-placeholder deprecation), pin-D_WIN32_WINNT=0x0A00on Windows (was defaulting to Windows 7 / 0x0601 with a pragma message).24c044f— Sweep 5 sibling C4834 sites missed by the original census:dockResultFile.C:586,594,602(truncated docking-file output on open failure) +downloadPDBFile.C:125+downloadElectronDensity.C:167(zero-byte temp files → cryptic downstream parser failures). All applied with the sameLog.error()-on-failure pattern.d730518—GL_SILENCE_DEPRECATIONon macOS VIEW target: Apple deprecated all of OpenGL system-wide in 10.14 (2018); BALL's renderer stays on fixed-function GL until the v2.0 Metal/MoltenVK migration (ROADMAP Phase 999.6 PIPE-01). Apple's documented escape hatch. Eliminated ~1 500 deprecation warnings on macOS.0a75ede— C4267 narrowing mop-up: 3 sites wheresize_twas implicitly narrowing toBALL::Index(32-bit on Windows LLP64). Explicitstatic_cast<Index>(container.size())atCIFFile.C:447,binaryFingerprintMethods.C:1618,conformationSet.C:46.
Coverage build now green for the first time (Phase 999.27 — commits 78ecda5, 2497369, b98b63a): three defects that were causing the non-blocking coverage (Linux, gcov, non-blocking) job to fail on every push. Root cause was simpler than originally guessed — BALL_VIEW_DEBUG=TRUE is gated on CMAKE_BUILD_TYPE STREQUAL "Debug", which the coverage job sets and the regular Linux job does not, so the offending unqualified endl (networkPreferences.C:44) only compiles under coverage. First green coverage run: 25968988067.
Test suite gatekeeper now blocking on macOS + Linux (Phase 9)
The test/ tree has been wired into ctest since v1.6.0 (commit b2bb718), but the gatekeeper ran with continue-on-error: true — test failures surfaced as JUnit artifacts but didn't fail CI. v1.6.2 flips the gatekeeper to blocking on macos-arm64 + linux-x64 + linux-arm64 (Phase 9 close, TEST-CLOSE-02, commits 866723427 + sibling edits to release.yml).
Pre-flip, the three known baseline failures from PHASE-9-BASELINE.md were triaged per 09-TRIAGE.md:
| Test | Disposition | Commit |
|---|---|---|
Directory_test |
KNOWN-PASSING — false alarm; passes when BALL_DATA_PATH is set |
45d66a4 |
AmberFF_test |
FIX — loosened additivity tolerance to PRECISION(200.0) (ARM FP drift = 141 units) |
41bfae6 |
AssignBondOrderProcessor_test2 |
QUARANTINE — WILL_FAIL TRUE Apple-arm64-only (Linux passes); fine-penalty algorith... |
BALLView v1.6.1
Unsigned best-effort installers built from this tag.
- macOS: download the
.zip, unzip, dragBALLView.appanywhere. Gatekeeper will block on first launch — right-click → Open → confirm, or runxattr -dr com.apple.quarantine BALLView.apponce before launching. - Windows: download the
.zip, extract. Windows SmartScreen will warn — choose "More info → Run anyway".
Both binaries are not code-signed or notarized. That work is Phase 8 ("Packaging & Distribution") in the roadmap.
Build from source: see BUILD-macos.md (macOS), the GitHub Actions CI workflow at the same tag for the Linux + Windows recipes.
Linux: build from source — no Linux installer in this release.
BALLView 1.6.0 — modernized foundation (macOS arm64)
⚠️ SUPERSEDED — please use v1.6.1v1.6.0 is left tagged for historical reference. It shipped with three known issues that are resolved in v1.6.1:
- macOS
BALLView.apphad empty Info.plist version strings —CFBundleVersion,CFBundleShortVersionString,CFBundleLongVersionStringwere blank. macOS preferences / sandbox identity / future notarization (Phase 8) all rely on these.- The release pipeline (
release.yml) was pinned to Qt 5 — it still installedqt@5via Homebrew and calledqt@5/bin/macdeployqt. Phase 5's Qt 6 migration of the codebase had left release.yml behind, so any re-release attempt would have failed at CMake configure.- Persisted
~/.BALLViewconfig silently shadowed compiled element / residue color defaults — even editing the in-source defaults and rebuilding had no visible effect if any saved config existed. The only workaround was deleting~/.BALLView. Phase 4.1 fix in v1.6.1.v1.6.1 also carries Phase 5.1 (warning-census cleanup across all three toolchains: C4717 getline recursion, C4311 pointer truncation, C4251 STL-member-in-DLL noise,
-Wself-assign-field,-Wformat-overflow, …), Phase 999.2 (Ninja build generator) and Phase 999.16 (precompiled-header support). Download v1.6.1 instead of v1.6.0 unless you specifically need this archival tag.
v1.6.0 — modernized foundation release. This tag marks Phase 4 (Dependency System Overhaul) complete: BALL and BALLView build green on macOS arm64, Linux x64, and Windows x64 from modern toolchains with no reliance on the dead ball_contrib tree.
What's in this release
- Modern toolchain: C++17, CMake 3.21+, Boost 1.x, Eigen3 (config-mode), TBB (config-mode), OpenBabel 3.x, FFTW, GLEW, lp_solve, libsvm, flex, bison
- Cross-platform CI: GitHub Actions matrix (macOS arm64 + Linux x64 + Windows x64 + legacy-GL grep gate); render-smoke checks on macOS and Linux
- C++17 codebase: legacy
bind2nd/mem_fun/unary_function/binary_functionfully removed; Boost.Regex POSIX C ABI replaced with the modernboost::regexC++ API - Rendering: QOpenGLWidget-based
GLRenderWindowwith compatibility-profile fixed-function GL; renderer/surface boundary (Phase 02.1) extracted as the contract for the future Phase 5 / PIPE-01 backend swap
What's NOT in this release
- Qt 6 migration — Phase 5, coming in v1.7
- Renderer-pipeline rewrite to QRhi or modern GL-core —
PIPE-01, v2; spike scoped in Phase 5 - Code signing or notarization on the binaries — Phase 8 scope (SignPath Foundation locked for Windows, Apple Developer ID + notarytool for macOS)
- Python bindings — Phase 6
Binaries
⚠️ Unsigned best-effort installer
This release ships an unsigned macOS arm64 .app as a best-effort starting point. Apple Gatekeeper will block the first launch — workaround:
- Right-click `BALLView.app` → Open → confirm in the dialog
- Or run once before first launch: `xattr -dr com.apple.quarantine BALLView.app`
A future v1.6.x point release will ship signed + notarized binaries once Phase 8 is implemented.
Why no Windows installer in this release
The Windows build through the unsigned release workflow (run 25908337693) hit a linker error: `LNK1104: cannot open file 'tbb12_debug.lib'`. Root cause is a CMake-build-config mismatch (multi-config Visual Studio generator defaults to Debug when `--config Release` isn't passed; the `x64-windows-release` vcpkg overlay triplet only builds Release variants, so the Debug lib isn't there to link). The fix is a one-line workflow change tracked as Phase 5.1 Tier D Task D4. The Windows installer will follow in a v1.6.0.1 / v1.6.1 / v1.7.0 release once that's landed and (preferably) Phase 8 signing too.
Linux
No Linux installer in this release — build from source via the recipes in the CI workflow or adapt BUILD-macos.md (the apt deps are documented in the Linux CI step).
Build from source
See `BUILD-macos.md` at the tag for the macOS-Homebrew recipe. Linux + Windows from-source recipes are in `.github/workflows/ci.yml`.
Verification
This release tag points at commit `a839729`. Source compiles green on all three platforms — verified by CI run 25899905204 on the equivalent source state (`6056f74`).
🤖 Built by GitHub Actions release workflow (`release.yml`). Co-authored by Claude Opus 4.7.