Skip to content

feat: Linux support (.deb / .rpm / AppImage)#13

Merged
kespineira merged 2 commits into
mainfrom
feat/linux-support
May 9, 2026
Merged

feat: Linux support (.deb / .rpm / AppImage)#13
kespineira merged 2 commits into
mainfrom
feat/linux-support

Conversation

@kespineira
Copy link
Copy Markdown
Owner

Summary

  • Splits the Tauri config into platform-specific overlays (tauri.macos.conf.json, tauri.linux.conf.json) so macOS-only window chrome (vibrancy sidebar, traffic-light overlay, transparent window, macOSPrivateApi) is dropped from the Linux build instead of generating warnings or runtime breakage.
  • Adds a build-linux job to release.yml that runs after build-macos and publishes .deb, .rpm, and AppImage artifacts to the same GitHub Release using tauri-action. The Homebrew tap bump is unchanged and still scoped to macOS.
  • Extends install.sh with a Linux path: detects the AppImage in the latest release, installs to ~/.local/bin/loom-oc, and registers a ~/.local/share/applications/loom-oc.desktop entry. macOS DMG flow is preserved (and now uses hdiutil -plist to find the mount point reliably).
  • Updates the README — new platform badge, dedicated Linux install section, roadmap entry checked off.

The frontend already detects Linux/Windows (platform.svelte.ts) and only applies vibrancy via .platform-macos rules, so no UI changes were needed.

Notes

  • macos-private-api stays in [dependencies] (not gated per-target). It's only required because macOSPrivateApi: true lives in tauri.macos.conf.json, which is not merged on Linux — so the build script doesn't fail. The feature itself is internally cfg(target_os = "macos") in Tauri, making it a no-op elsewhere. A target-specific Cargo dep was tried first but Cargo didn't reliably union features for the duplicated declaration.
  • Linux job runs after macOS to avoid a race on release creation in tauri-action.
  • Linux .deb declares libwebkit2gtk-4.1-0 and libgtk-3-0 runtime deps. AppImage users on minimal distros may still need to install these manually.

Test plan

  • pnpm check (svelte-check 0 errors)
  • pnpm test (46/46)
  • pnpm build
  • cargo test --lib (55/55, tauri-build config-merge passes on macOS)
  • cargo fmt --all -- --check
  • cargo clippy --all-targets -- -D warnings
  • JSON syntax of all three tauri.*.conf.json files
  • bash -n install.sh
  • First v* tag will exercise the Linux release job end-to-end; can also be smoke-tested via workflow_dispatch or by tagging an -rc build.
  • Manual install of the resulting AppImage on a clean Ubuntu / Fedora VM.

kespineira added 2 commits May 9, 2026 16:31
Splits the Tauri config into platform-specific overlays so the macOS-only
window chrome (vibrancy sidebar, traffic-light overlay, transparent window,
macOSPrivateApi) stays out of the Linux build. Adds a build-linux job that
publishes deb/rpm/AppImage to the same GitHub Release as the macOS bundle,
extends install.sh with an AppImage path that drops a binary into
~/.local/bin and registers a .desktop entry, and updates the README.
…uild is consistent

tauri-build cross-checks the merged tauri.conf.json `app.macOSPrivateApi`
flag against the `macos-private-api` Cargo feature on every platform.
Putting the flag only in `tauri.macos.conf.json` made Linux see
"feature on, allowlist off" and fail.

Move the flag back to the base config and document why the Cargo feature
stays on for all targets — Tauri internally `cfg`-guards the API to
macOS, so it's a runtime no-op on Linux/Windows.
@kespineira kespineira merged commit 53726c6 into main May 9, 2026
7 checks passed
@kespineira kespineira deleted the feat/linux-support branch May 9, 2026 19:35
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