Skip to content

Migrate the desktop app from Tauri to native GPUI - #34

Draft
baronunread wants to merge 46 commits into
mainfrom
cinder
Draft

Migrate the desktop app from Tauri to native GPUI#34
baronunread wants to merge 46 commits into
mainfrom
cinder

Conversation

@baronunread

Copy link
Copy Markdown
Owner

What changed

The production desktop app moves from Tauri/React to a native GPUI client.

  • src-gpui/ — new GPUI application (lopload-gpui): file browser, transfer tray, onboarding, image preview, appearance toggle, settings, system tray, and signed update handling. gpui 0.2.2 / gpui-component 0.5.1 are pinned in the manifest and lockfile.
  • crates/lopload-native/ — new Rust core: S3 client, SQLite metadata, OS keychain credential storage, multipart/resumable transfers, file operations (move, trash/restore, share links), and recursive folder uploads with guard checks.
  • Build toolingCapSoftware/Cinder is the Rust runner, pinned by git rev (2a96b05) in the CI workflows; packaging uses cargo-packager (src-gpui/packager.toml).
  • Updates — GitHub release manifests are verified with a minisign public key before applying (src-gpui/src/updater.rs).
  • CI/releasebuild.yml and the new gpui-build.yml package platform-native artifacts on Ubuntu 22.04 (deb, AppImage), macOS 26 (app, dmg), and Windows (nsis, wix, portable binary). ci.yml runs cinder check/cinder test for both crates, plus real-MinIO integration tests.
  • Legacy — the Tauri/React code and its checks are still in the tree behind legacy:* npm scripts (legacy:dev, legacy:build, legacy:test); dev/build/test/check now point at the GPUI/native stack. Legacy code no longer ships as the production desktop.

Why

Tauri's webview stack meant the desktop app paid for a browser runtime and an IPC boundary on every file operation. Moving to GPUI with a native Rust core removes that layer: S3, SQLite, keychain, and transfers all run in-process, and the shipped artifacts are true platform-native packages.

Impact / risk

  • This replaces the production desktop app wholesale — it is a large surface change (~22k insertions across 33 files), not an incremental refactor.
  • Credential storage moves to the OS keychain and desktop metadata is migrated (feat: migrate existing desktop metadata); existing installs go through a migration path on first launch.
  • The updater path is new. It verifies signatures, but the release/update pipeline has not been exercised end to end against a real published release.
  • Legacy Tauri/React remains buildable but is no longer the default target, so it will drift unless someone keeps running the legacy:* scripts.

Validation

Run locally:

  • GPUI suite — 16 passed
  • Native suite — 16 passed, 5 ignored; four of the ignored real-MinIO integration tests were also run and passed
  • Legacy suite — 320 passed
  • macOS packaging exercised: .app, .dmg, and updater .zip

Not covered locally:

  • Windows and Linux release jobs are configured in CI but were not run locally.
  • macOS artifacts were ad-hoc signed, not Developer ID signed — notarization/distribution signing is untested.

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d2b7014d-7d3a-4340-a495-c73b85fbeb5c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 17, 2026

Copy link
Copy Markdown

React Doctor found no new issues. 🎉

Reviewed by React Doctor for commit b587db1.

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