Problem
Steno only ships for macOS (stable) and Windows (alpha). I love using this app on macOS, but i really want to use it on my Linux (Ubuntu 26.04) machines as well.
Proposed solution
Scoped and prototyped this on a Ubuntu 26.04 LTS (GNOME/Wayland, PipeWire) machine. Summary of findings:
- Backend (Python/CLI) is already Linux-ready.
get_user_data_dir(), the parakeet.py platform dispatcher (onnx-asr off-darwin), and stenoai.spec's non-macOS bundling branches already treat Linux the same as Windows. pip install -r requirements.txt and pyinstaller stenoai.spec both succeed on Linux with zero changes.
- System-audio (loopback) capture — the biggest open question — has a working answer. macOS/Windows capture system audio via
getDisplayMedia, which on Linux/Wayland would route through xdg-desktop-portal's ScreenCast picker (a real UX regression — a screen-share dialog just to get audio). Instead: a pw-record subprocess targeting the default sink's monitor, with PCM bridged into the renderer's existing mix graph via MediaStreamTrackGenerator. No portal, no dialog, no new packaged dependency (pw-record ships in Ubuntu's default pipewire-audio stack). Verified end-to-end against the real Electron app: real audio in, real audio in the recorded file out.
- Packaging: no
linux target existed in electron-builder config. Added one (deb + AppImage); both build successfully and the unpacked app launches and runs its full startup sequence against the real bundled backend.
- CI: added a
build-linux.yml mirroring build-windows.yml (PyInstaller backend + Electron build), not yet wired into the release/auto-update pipeline — that's a separate decision once Linux is further along.
- Found and fixed along the way:
scripts/download-ollama.sh's Linux path was broken — Ollama's GitHub releases dropped the .tgz asset in favor of .tar.zst, so the bundled-Ollama download 404's today on Linux.
Diarization (mac-only Swift/CoreML sidecar) and the mic-monitor auto-detect helper (mac-only Swift) stay unavailable on Linux, same as they already are on Windows — not a new gap.
Scope/vision
Fits the existing cross-platform direction (macOS stable, Windows alpha). This would land Linux as a third alpha-tier platform using the same CPU-only ASR path Windows already uses, no new runtime dependencies beyond what a standard Ubuntu desktop already ships.
Status
Prototyping currently on a fork (branch spike/linux-loopback-poc) — system-audio capture, the renderer bridging, packaging config, and the CI workflow are all implemented and were run but holding off on a PR until it's been validated further; this issue tracks the feature so the fork's PR has something to link to.
Problem
Steno only ships for macOS (stable) and Windows (alpha). I love using this app on macOS, but i really want to use it on my Linux (Ubuntu 26.04) machines as well.
Proposed solution
Scoped and prototyped this on a Ubuntu 26.04 LTS (GNOME/Wayland, PipeWire) machine. Summary of findings:
get_user_data_dir(), theparakeet.pyplatform dispatcher (onnx-asr off-darwin), andstenoai.spec's non-macOS bundling branches already treat Linux the same as Windows.pip install -r requirements.txtandpyinstaller stenoai.specboth succeed on Linux with zero changes.getDisplayMedia, which on Linux/Wayland would route throughxdg-desktop-portal's ScreenCast picker (a real UX regression — a screen-share dialog just to get audio). Instead: apw-recordsubprocess targeting the default sink's monitor, with PCM bridged into the renderer's existing mix graph viaMediaStreamTrackGenerator. No portal, no dialog, no new packaged dependency (pw-recordships in Ubuntu's defaultpipewire-audiostack). Verified end-to-end against the real Electron app: real audio in, real audio in the recorded file out.linuxtarget existed inelectron-builderconfig. Added one (deb+AppImage); both build successfully and the unpacked app launches and runs its full startup sequence against the real bundled backend.build-linux.ymlmirroringbuild-windows.yml(PyInstaller backend + Electron build), not yet wired into the release/auto-update pipeline — that's a separate decision once Linux is further along.scripts/download-ollama.sh's Linux path was broken — Ollama's GitHub releases dropped the.tgzasset in favor of.tar.zst, so the bundled-Ollama download 404's today on Linux.Diarization (mac-only Swift/CoreML sidecar) and the mic-monitor auto-detect helper (mac-only Swift) stay unavailable on Linux, same as they already are on Windows — not a new gap.
Scope/vision
Fits the existing cross-platform direction (macOS stable, Windows alpha). This would land Linux as a third alpha-tier platform using the same CPU-only ASR path Windows already uses, no new runtime dependencies beyond what a standard Ubuntu desktop already ships.
Status
Prototyping currently on a fork (branch
spike/linux-loopback-poc) — system-audio capture, the renderer bridging, packaging config, and the CI workflow are all implemented and were run but holding off on a PR until it's been validated further; this issue tracks the feature so the fork's PR has something to link to.