Skip to content

feat: macOS native app v0.4.0-alpha.1 - #27

Merged
thcp merged 5 commits into
mainfrom
feature/macos-native-app
May 11, 2026
Merged

thcp merged 5 commits into
mainfrom
feature/macos-native-app

Conversation

@thcp

@thcp thcp commented May 11, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Native macOS Tauri 2 app with setup wizard that downloads a self-contained Python/backend runtime pack on first launch
  • Apple Silicon (MPS) GPU acceleration; Intel CPU fallback
  • Real-time download progress bar via reqwest streaming + Tauri events (replaces blocking curl)
  • arm64 + x64 DMG builds in parallel via Woodpecker CI
  • Version stamped from CI_COMMIT_TAG at build time; defaults to LOCAL_DEV_TEST locally
  • README updated with macOS download and build instructions; SVG logo assets added
  • Bump to v0.4.0-alpha.1

Test plan

  • Run ARCH=arm64 scripts/macos/make-runtime-pack.sh + make-app.sh and open the built .app
  • Verify setup wizard completes: runtime download shows progress bar, FFmpeg downloads, MPS detected on Apple Silicon
  • Fresh install test: rm -rf ~/Library/Application\ Support/StemDeck then relaunch
  • Verify app exits cleanly (backend process stops) on window close
  • Trigger a release and confirm CI builds both arm64 and x64 DMGs and uploads all 6 artifacts

thcp added 5 commits May 11, 2026 23:28
- Tauri 2 macOS app with setup wizard that downloads and installs a
  self-contained Python/backend runtime pack on first launch
- Runtime pack download now streams via reqwest with real-time progress
  events (runtime-download-progress) replacing the blocking curl call;
  progress bar shown in setup UI with indeterminate fallback
- MPS (Apple Silicon) GPU detection and torch device selection; CUDA
  path gated to non-macOS targets
- macOS data dir uses ~/Library/Application Support/StemDeck
- macOS FFmpeg downloaded from evermeet.cx and extracted from zip
- Backend watchdog: Python process exits when parent Tauri PID disappears
- CloseRequested handler stops backend and exits cleanly
- Woodpecker CI pipeline for macOS: arm64 and x64 builds in parallel,
  DMG inspection, artifact upload to GitHub releases
- Build scripts: make-runtime-pack.sh, make-app.sh, make-dmg.sh,
  make-iconset.sh with LOCAL_DEV_TEST version default
- Version stamped from CI_COMMIT_TAG (or LOCAL_DEV_TEST) at build time
  across Cargo.toml, tauri.conf.json, package.json
- SVG logo assets, DMG packaging files, macOS README and notices
- README updated with macOS download and build instructions
- Bump version to 0.4.0-alpha.1
- urllib3 2.7.0 fixes CVE-2026-44431 (header forwarding) and
  CVE-2026-44432 (decompression-bomb bypass)
- CVE-2025-32434 (torch 2.2.2 RCE via torch.load) added to
  .trivyignore: no 2.6.x macOS x86_64 wheels exist; StemDeck
  has no untrusted torch.load path
- Wire .trivyignore into the trivy-fs CI step
Adds event: tag so that pushing a version tag (e.g. v0.4.0-alpha.1
for a pre-release) triggers the build and inspect pipeline.
Upload steps remain gated on event: release only.
When a pre-release is promoted to latest, GitHub fires a second
release event. The upload step now checks if assets already exist
for the tag and exits early, preventing --clobber from deleting
and re-uploading artifacts during the promotion window.
@thcp
thcp force-pushed the feature/macos-native-app branch from f56808c to df05094 Compare May 11, 2026 22:28
@thcp
thcp marked this pull request as ready for review May 11, 2026 22:28
@thcp
thcp merged commit f08b636 into main May 11, 2026
1 check was pending
@thcp
thcp deleted the feature/macos-native-app branch May 11, 2026 22:29
thcp added a commit that referenced this pull request Sep 9, 2026
)

1609 lines of stylesheet that no page has ever asked for.

The three HTML entry points load: variables/waves/daw (static/index.html),
mobile/styles (static/mobile/index.html), setup (desktop/ui/index.html). None
of them names this file, nothing @imports it, and no script, packaging script
or Dockerfile references it. It was last meaningfully touched in #27, before
the DAW redesign replaced it with daw.css.

Nothing to regression-test, and that is the whole argument rather than a
hopeful one: an unloaded stylesheet has no effect on rendering, so the app
already looks the way it does without it. The full e2e suite passes with it
gone, which confirms rather than establishes that.

It was not free to keep. The refusal message in #584 was styled here first and
was completely invisible, because the rules were never loaded. That cost a
debugging round and was only caught because the test asserted the computed
colour rather than the presence of a class.

Co-authored-by: Thales <>
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