This release includes 2 security fixes for security teams reviewing exposed deployments.
Affected surfaces
ReleasePort's take
Light signalThe release patches stored XSS in YouTube metadata and restricts Tauri URL schemes; it also moves data storage locations and adds a region export feature.
Why it matters: Security fixes address stored XSS (HTML‑escaping titles, channel names, tags) and limit `open_url` to http/https only, reducing injection risk. Data persistence now uses ~/Documents/StemDeck/, requiring path updates in scripts or configs.
Summary
AI summaryUpdates Reliability fixes, Desktop: audio playback fixed, and Security hardening across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Medium |
Fixes stored XSS by HTML‑escaping YouTube titles, channel names, and tags. Fixes stored XSS by HTML‑escaping YouTube titles, channel names, and tags. Source: llm_adapter@2026-05-23 Confidence: low |
— |
| Security | Medium |
Restricts `open_url` Tauri command to only http/https schemes. Restricts `open_url` Tauri command to only http/https schemes. Source: llm_adapter@2026-05-23 Confidence: low |
— |
| Security | Medium |
Validates job IDs on the SSE `/events` endpoint to prevent malformed ID access. Validates job IDs on the SSE `/events` endpoint to prevent malformed ID access. Source: llm_adapter@2026-05-23 Confidence: low |
— |
| Breaking | Medium |
Moves library and stems storage from `~/Library/Application Support/` to `~/Documents/StemDeck/`. Moves library and stems storage from `~/Library/Application Support/` to `~/Documents/StemDeck/`. Source: llm_adapter@2026-05-23 Confidence: high |
— |
| Feature | Medium |
Adds Export Region button to download a trimmed mix as WAV or MP3 when a loop region is active. Adds Export Region button to download a trimmed mix as WAV or MP3 when a loop region is active. Source: llm_adapter@2026-05-23 Confidence: low |
— |
| Dependency | Medium |
Targets Python 3.12 in `run.sh` and enforces `<3.14` in `pyproject.toml` for Ubuntu 26.04 compatibility. Targets Python 3.12 in `run.sh` and enforces `<3.14` in `pyproject.toml` for Ubuntu 26.04 compatibility. Source: llm_adapter@2026-05-23 Confidence: high |
— |
| Bugfix | Medium |
Fixes Windows Export Region URL truncation caused by `cmd /c start` interpreting `&` as a separator. Fixes Windows Export Region URL truncation caused by `cmd /c start` interpreting `&` as a separator. Source: llm_adapter@2026-05-23 Confidence: high |
— |
| Bugfix | Medium |
Resolves Docker permission error by re‑chowning the `jobs/` bind‑mount before dropping privileges. Resolves Docker permission error by re‑chowning the `jobs/` bind‑mount before dropping privileges. Source: llm_adapter@2026-05-23 Confidence: high |
— |
| Bugfix | Medium |
Normalises uploaded WAV stems to 16‑bit 44.1 kHz stereo before Demucs separation, fixing silent output. Normalises uploaded WAV stems to 16‑bit 44.1 kHz stereo before Demucs separation, fixing silent output. Source: llm_adapter@2026-05-23 Confidence: high |
— |
| Bugfix | Medium |
Fixes crash when exporting MP3 stems. Fixes crash when exporting MP3 stems. Source: llm_adapter@2026-05-23 Confidence: low |
— |
| Bugfix | Medium |
Fixes audio playback issues on macOS: reuses decoded buffers to avoid duplicate downloads and waits for buffer readiness after seeking. Fixes audio playback issues on macOS: reuses decoded buffers to avoid duplicate downloads and waits for buffer readiness after seeking. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
| Refactor | Low |
Automatically clears stale WebKit cache folder on macOS upgrades, eliminating manual cleanup. Automatically clears stale WebKit cache folder on macOS upgrades, eliminating manual cleanup. Source: granite4.1:30b@2026-05-23-audit Confidence: low |
— |
Full changelog
> [!IMPORTANT]
macOS users run this after installing:
xattr -dr com.apple.quarantine /Applications/StemDeck.appmacOS Gatekeeper will block the app on launch without this step. Proper code signing is planned for a future release.
[!NOTE]
Upgrading from a previous alpha? One manual cleanup recommended.
If you experienced stale library state or broken UI after a previous upgrade, delete the old WebKit cache before launching.Option A -- Finder (recommended):
- Open Finder
- In the menu bar choose Go > Go to Folder... (or press
Shift + Cmd + G)- Paste
~/Library/WebKitand press Enter- Find the folder named
app.stemdeck.desktopand move it to Trash- Empty the Trash
Option B -- Terminal (advanced users only):
cd ~/Library/WebKit rm -rf app.stemdeck.desktopThis is a one-time step. From this release onwards, the app clears it automatically on every upgrade.
Your library is safe -- it now lives in~/Documents/StemDeck/and is untouched by this cleanup.
What's new in 0.6.0 Alpha 1
Export Region
A new Export Region button sits in the footer transport bar, to the left of Export Mix. When a loop region is active, it trims and downloads the mix for that exact time range as WAV or MP3. The button is always visible but grayed out until a loop region is set, so it is easy to discover without cluttering the interface when not in use.
Windows: export loop no longer truncates query parameters
On Windows, the previous Export Region implementation opened download URLs via cmd /c start, which interprets & as a shell command separator. This silently dropped the end parameter from the URL, causing the backend to reject the request. The URL is now passed directly to explorer.exe, bypassing the shell entirely.
Library and stems now saved to ~/Documents/StemDeck
Your entire library (metadata, folders, mix state, stem preferences, and extracted audio files) now lives in ~/Documents/StemDeck/. This makes it visible in Finder, eligible for iCloud Drive backup, and means it survives any app reinstall or upgrade without any action on your part.
Previous versions stored everything inside ~/Library/Application Support/ which is hidden from Finder and wiped on reinstall.
WebKit stale-data eliminated automatically on macOS
Every upgrade used to leave stale cached state in ~/Library/WebKit/app.stemdeck.desktop, causing inconsistent behavior that required manually deleting three system folders. That folder is now cleared automatically on version change. No user action needed, ever.
Docker: permission error and silent stems fixed
- PermissionError on job creation -- Docker was creating the
jobs/bind-mount directory as root, blocking the app user from writing. Fixed with a gosu-based entrypoint that re-chowns the directory before dropping privileges. - Silent stems from WAV uploads -- Professional WAVs (24-bit, 32-bit float, high sample rate) were passed directly to Demucs without normalisation, producing silent output. All uploads now go through ffmpeg normalisation to 16-bit 44.1 kHz stereo before separation.
- MP3 stem export crash -- Every MP3 stem download was crashing with an internal error. Fixed.
Ubuntu 26.04 / Python 3.14 compatibility
Ubuntu 26.04 ships Python 3.14 by default, but PyTorch 2.6.0 does not have wheels for it yet. run.sh now explicitly targets Python 3.12, and pyproject.toml enforces <3.14 so the installer never selects an incompatible interpreter.
Security hardening
- Stored XSS fixed -- YouTube titles, channel names, and tags are now HTML-escaped before being injected into the DOM. Previously a crafted video title could execute arbitrary JavaScript in the app.
open_urlrestricted to http/https -- The Tauri command used to open external links now blocksfile:///,ms-msdt:, and other non-web schemes.- SSE endpoint now validates job IDs -- The
/eventsendpoint was the only one missing theJOB_ID_REcheck; it now returns 404 for malformed IDs.
Reliability fixes
- Background tasks held strongly -- The sweep loop and desktop parent watchdog are now kept in a reference set so the garbage collector cannot silently discard them mid-run.
- Pipeline errors clean up job directory -- A failed pipeline now deletes the partial job directory, the same cleanup already done on cancellation.
- Atomic job capacity check -- The capacity check and job registration now happen under the registry lock, closing a race that could let one extra job slip past the limit.
- Registry persistence serialises under lock -- Concurrent job removal no longer risks writing a stale snapshot to disk.
Desktop: audio playback fixed (macOS)
- On first load -- The waveform renderer was downloading every stem WAV twice (once for visuals, once for playback), saturating WKWebView's connection pool and causing audio to chop. The renderer now reuses wavesurfer's already-decoded buffers instead.
- After seeking -- Pressing play immediately after moving the playhead caused choppiness because WKWebView had not yet buffered audio at the new position. Playback now waits for all audio elements to signal readiness before starting.
Test coverage (+16 tests)
New tests cover: sections endpoint (happy path, 404, 422 invalid color/id), file upload (extension rejection, empty file, mp3, wav), 503 capacity for both YouTube and upload paths, SSE job ID validation, and SSE connection cap.
Installing
Drop the new .app into your Applications folder and launch. Your library will be migrated automatically on first launch. No manual steps required.
Artifact build
- macOS arm64 and x64 DMGs and runtime packs will be built and inspected on a macOS Woodpecker agent before upload.
Artifact scan
- Windows portable packages will be scanned with ClamAV in CI before upload.
Artifact build
- macOS arm64 and x64 DMGs and runtime packs were built and inspected on a macOS Woodpecker agent before upload.
Artifact scan
- Windows portable packages were scanned with ClamAV in CI before upload.
Breaking Changes
- Library data moved from ~/Library/Application Support/StemDeck/ to ~/Documents/StemDeck/
- Minimum Python version enforced at <3.14 for Ubuntu compatibility
Security Fixes
- Stored XSS fixed by HTML‑escaping YouTube titles, channel names, and tags
- `open_url` command now restricts navigation to http/https schemes only
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About stemdeckapp/stemdeck
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]