Skip to content

chore: remove the Tauri app, GPUI is the only desktop app - #3529

Merged
richiemcilroy merged 6 commits into
mainfrom
chore/remove-tauri-app
Oct 29, 2026
Merged

richiemcilroy merged 6 commits into
mainfrom
chore/remove-tauri-app

Conversation

@richiemcilroy

@richiemcilroy richiemcilroy commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

Cap has shipped as the GPUI app since 0.6.1. This removes the Tauri app (apps/desktop) and everything that only existed for it, so apps/desktop-gpui is the one desktop app in the repository. The Tauri source stays browsable at cap-v0.6.2.

flowchart LR
    subgraph before[Before]
        T[apps/desktop<br/>icons, sounds, backgrounds,<br/>music, entitlements, binaries/,<br/>Tauri CLI] --> B1[tauri bundle]
        G1[apps/desktop-gpui] --> B1
    end
    subgraph after[After]
        G2[apps/desktop-gpui<br/>icons/ assets/ packaging/<br/>binaries/ package.json] --> B2[tauri bundle]
    end
    B1 --> R[Cap.app / NSIS / deb / rpm / AppImage<br/>same identity, updater key and endpoint]
    B2 --> R
Loading

The GPUI app owns its inputs

The GPUI build and bundle read a lot straight out of apps/desktop. Those files move with git mv (byte-identical) to where the bundle already places them:

From To
src-tauri/icons/{32x32,128x128,128x128@2x,icon,Square310x310Logo}.*, icons/macos/icon.icns apps/desktop-gpui/icons/
src-tauri/icons/tray-default-icon.png apps/desktop-gpui/assets/tray/
src-tauri/sounds/*.ogg apps/desktop-gpui/assets/sounds/
src-tauri/assets/backgrounds/**, src/assets/music/*.mp3 apps/desktop-gpui/assets/{backgrounds,music}/ (same relative paths the bundle uses)
src/assets/tears-and-fireflies-adi-goldstein.mp3, packages/ui-solid/icons/cursor-{macos,windows}.svg apps/desktop-gpui/assets/onboarding/
src-tauri/Entitlements.plist, assets/dmg-background.png apps/desktop-gpui/packaging/macos/
src-tauri/assets/nsis-{header,sidebar}.bmp apps/desktop-gpui/packaging/windows/
src-tauri/test-data/clip-thumbnail-*.mp4 apps/desktop-gpui/tests/data/
src-tauri/src/recording_start_sound.rs (was #[path]-included) apps/desktop-gpui/src/app_sounds/recording_start_sound.rs
src-tauri/binaries/ (sidecar staging) apps/desktop-gpui/binaries/
  • apps/desktop-gpui/tauri.conf.json, build.rs, include_bytes! sites and the dev fallbacks in editor_sidebar.rs / editor_audio.rs point at the new paths; nothing in the GPUI app reaches into apps/desktop any more.
  • The Tauri CLI is still the packager. It moves to apps/desktop-gpui/package.json, which takes over the @cap/desktop workspace name, so bun run tauri bundle / tauri signer sign run from the app's own directory (scripts/bundle-gpui.mjs, scripts/build-macos-packages.mjs, scripts/finalize-linux-appimage.mjs).
  • scripts/bundle-gpui.test.mjs now pins the shipped identity (bundle id, updater pubkey and endpoint, cap-desktop deep link) as literals instead of comparing against the deleted Tauri configs.

Removed

  • apps/desktop, packages/ui-solid, vendor/tao, vendor/tauri-nspanel, the stray apps/src/utils/tauri.ts.
  • Root workspace member, tauri workspace dependency, and the tao / tauri-nspanel patches (Cargo.toml). Cargo.lock only loses the 212 packages nothing else uses; no version changes.
  • Tauri-only tooling: scripts/check-tauri-plugin-versions*, scripts/run-gpui-build*, scripts/verify-gpui-release-inputs.mjs, the tauri:build, check-tauri-versions and test:desktop:memory* scripts, the CI tauri-plugins job, the apps/desktop resource path filter, and --exclude cap-desktop in clippy.
  • build-gpui-binary.sh no longer stages cap-gpui-<target> as a Tauri sidecar; bundle-gpui.mjs stages the main binary itself as before.
  • scripts/linux-bundle-config.mjs drops the Tauri defaults (WebKitGTK RPM deps, GStreamer media framework). The generated apps/desktop-gpui/tauri.linux.conf.json is byte-identical to the one main writes.
  • Unused Tauri v1 dev dependencies in packages/ui.

Dev-only switch back to the Tauri app

Debug builds had a Settings > Experimental > Developer toggle that quit the GPUI app and asked scripts/dev-desktop.mjs to restart tauri dev, plus a hand-off marker file and a dev.sh gate that skipped launching while "the classic app owns the session". All of it goes (settings_pages.rs, settings_window.rs, store.rs, main.rs, the 17 strings in every locale, dev.sh). Release builds never showed it.

bun run dev:desktop now runs cap-setup, prepares the patched gpui checkout, then:

// scripts/dev-desktop.mjs
process.platform === "darwin"
	? spawn("bash", [path.join(gpuiDir, "dev.sh")], { cwd: gpuiDir, stdio: "inherit" })
	: spawn("cargo", ["run"], { cwd: gpuiDir, stdio: "inherit", env: runtimeEnvironment(process.env) });

On Windows and Linux, runtimeEnvironment puts the root target/ FFmpeg / ONNX Runtime libraries on PATH / LD_LIBRARY_PATH, matching what CI's GPUI test job does.

Releases

  • apps/desktop-gpui/Cargo.toml is the version source. sync-desktop-versions.mjs keeps the CLI in step with it, and publish.yml, publish-nightly.yml and build-linux-packages.mjs read it.
  • promote-nightly can rebuild a nightly commit from before this change with the new workflow, so desktop-release.yml also stamps apps/desktop/src-tauri/Cargo.toml when it exists, and the Windows updater re-sign step uses whichever directory holds the Tauri CLI.

Deliberately unchanged

  • crates/workspace-hack. Regenerating it after dropping the Tauri crate would also drop features Tauri had been unifying into the shipped binaries: reqwest's rustls, cookies and macOS proxy features and ort's download-binaries in the CLI, objc2's exception handling, and objc2's disable-encoding-assertions in the GPUI app. That is a behavior change for shipped artifacts and belongs in its own PR. Only the two tauri entries that would make cargo hakari error are removed from .config/hakari.toml. The cap CLI and cap-muxer feature trees match main on all four release targets, and the GPUI lockfile is untouched.
  • 0.6.0 compatibility. The store file format, so.cap.desktop identifier, cap-desktop scheme, updater key and endpoint, the web /api/releases/tauri and desktop API routes, and the "last Tauri version" download page all stay.
  • GPUI source comments that cite Tauri files (*.tsx, apps/desktop/...) as the 1:1 parity source stay as written; apps/desktop-gpui/README.md explains they point at cap-v0.6.2. Historical findings logs (crates/editor/PLAYBACK-FINDINGS.md, crates/export/EXPORT-FINDINGS.md, capcodec/) are left as records of past work.

Heads up

  • CAP_LOGO_URL (transactional emails) and the README logo now load apps/desktop-gpui/icons/Square310x310Logo.png from raw GitHub. Emails sent before this merges reference the old path, which stops resolving once it lands.
  • Local checkouts keep untracked build output under apps/desktop/ (node_modules, src-tauri/target); it can be deleted by hand.

Docs (README.md, CONTRIBUTING.md, AGENTS.md, apps/desktop-gpui/README.md, packaging/linux/README.md) describe the GPUI-only layout, the dev flow per platform, and where recordings live in development builds.

RetriggerView in GreptileConfidence Score: 5/5

The changes since the last review appear safe to merge.

Summary

Removes the old Tauri app and makes apps/desktop-gpui the only desktop app.

  • The GPUI app builds and bundles from assets in its own app tree.
  • The old Tauri desktop app and its app-only workspace pieces leave the repository.
  • Desktop development starts GPUI directly, without a switch back to Tauri.
  • Desktop packaging and release jobs use the GPUI app as their source.

Reviews (3) · Last reviewed commit: "test(desktop-gpui): drop the removed swi..." · Reviewed by Greptile

@vercel

vercel Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
cap-status Ready Ready Preview Oct 29, 2026 11:55am UTC

@richiemcilroy

Copy link
Copy Markdown
Member Author

hey @greptileai, please re-review the PR

@vercel
vercel Bot temporarily deployed to Preview – cap-status October 28, 2026 23:59 Inactive
@richiemcilroy

Copy link
Copy Markdown
Member Author

hey @greptileai, please re-review the PR

@capy-ai capy-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Capy found no issues.

View 1 other finding in Capy.

Open in Capy

@capy-ai capy-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Capy found no issues.

Open in Capy

@richiemcilroy
richiemcilroy merged commit 800ab28 into main Oct 29, 2026
69 of 71 checks passed

This branch was successfully deployed

2 active deployments
Preview – cap-web — 41386946 Deployed Oct 29, 2026 by vercel[bot]
Preview – cap-status — 41386946 Deployed Oct 29, 2026 by vercel[bot]
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