Skip to content

Desktop app for macOS and Windows (1.13.0) - #165

Merged
Timothysit merged 7 commits into
mainfrom
feature/desktop-app
Oct 21, 2026
Merged

Timothysit merged 7 commits into
mainfrom
feature/desktop-app

Conversation

@Timothysit

@Timothysit Timothysit commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

A double-clickable MEA-NAP for people who don't use a terminal: a .dmg for Macs (Apple silicon and Intel) and a per-user Setup.exe for Windows, each with Python and every dependency inside (OASIS and the spike sorters included). Plan, decisions and status: python/DESKTOP_APP_PLAN.md.

Merge together with publishing the v1.13.0 release. The README and install docs link to the latest release's downloads, which only exist once this workflow has attached them to an official (non-pre-release) release.

  • packaging/: entry point, PyInstaller spec, icon, Inno Setup script, build_app.py.
  • .github/workflows/desktop-app.yml: builds macOS arm64, macOS Intel and Windows x64, times a cold and a warm start, runs the smoke test on the built app, and attaches the .dmg/Setup.exe to official releases. Also runs by hand and on PRs that touch the packaging.
  • meanap.frozen: what a frozen app lacks (python -m re-entry, bundled MATLAB images, a console on Windows), each a no-op from a clone.
  • Faster start: PyInstaller's matplotlib hook gave every launch, and every worker process, a new temporary config folder, so matplotlib re-scanned all system fonts each time. The app now keeps a lasting cache. There's also a splash screen before the pipeline imports, a "window ready N s" line in the log, and --time-startup.
  • Intel Macs: numba 0.62 / llvmlite 0.45 / numpy 2.3 through a platform marker (the last versions with Intel-Mac wheels). The lock is unchanged for every other platform. Extensions built from source in CI target macOS 12.
  • In the app, the versions dialog checks GitHub's latest release and links to the download.
  • Unsigned: docs/python/installation.md covers Chrome's download warning, SmartScreen, and macOS "Open Anyway".
  • MEA-NAP 1.12.0 → 1.13.0.

Tested: all three builds pass the smoke test in CI (imports and extras, numba, steps 1–4 with worker processes, the GUI). python/test_desktop_app.py passes. Real-device checks: Windows (works; the slow start was fixed afterwards), Apple-silicon Mac (Gatekeeper step). Not yet tried on a real Intel Mac.

🤖 Generated with Claude Code

https://claude.ai/code/session_01X78uDckMcD2xCkAo9Hj7g8

Timothysit and others added 7 commits October 21, 2026 14:11
A PyInstaller build with Python and every dependency inside (OASIS and
the spike sorters included), for people who don't use a terminal:

- packaging/: entry point, spec, icon, Inno Setup installer (per-user,
  no admin rights), build_app.py; built + smoke-tested by
  .github/workflows/desktop-app.yml on official releases, by hand, and on
  PRs that touch the packaging.
- meanap.frozen: the few things a frozen app lacks (python -m re-entry,
  bundled MATLAB images, a console on Windows) as no-ops from a clone.
- The app's version dialog checks GitHub's latest release over HTTPS and
  links to the download, instead of the git-based switcher.
- meanap.app_smoke (--smoke-test): imports, numba, steps 1-4 on synthetic
  recordings with worker processes, and the GUI, run on the built app.

Plan and status: python/DESKTOP_APP_PLAN.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…en, startup timing

PyInstaller's matplotlib hook gives every launch a fresh temporary
MPLCONFIGDIR, so the app (and each worker process) re-scanned every
system font on each start. Keep a lasting cache folder instead.
Show a splash before the main window's pipeline imports, log how long
the window took, and add --time-startup (run cold + warm in CI).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
numba/llvmlite stopped shipping Intel-Mac wheels after 0.62/0.45, so Intel
Macs resolve to those (and numpy 2.3) via a platform marker; every other
platform's lock is unchanged. Add a macos-15-intel job, build for the
native architecture, and compile source-only extensions for macOS 12.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Timothysit
Timothysit marked this pull request as ready for review October 21, 2026 20:11
@Timothysit
Timothysit merged commit b4ad10c into main Oct 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant