← 목록

One Vue app, three homes: desktop with Tauri, Android with Capacitor, and the web

devto 2026-08-19 원문 보기 ↗


I wanted a Reddit client that lived on my desktop and my phone — without maintaining two separate apps. So I built one Vue app and gave it three homes: Tauri (Rust) wraps it as a desktop app for Windows/macOS/Linux, Capacitor wraps it for Android, and it still runs as a plain web app. One UI, one set of Reddit API calls, one OAuth flow — three targets.

It works. But "just wrap your web app" hides a few things. Here's the reality.

The shape

Gotcha 1: you can't cross-compile

You cannot build a Windows .msi on your Mac. Tauri leans on each platform's native toolchain:

"Ship for all platforms" really means a CI matrix with one runner per OS. Plan for it early — it shapes your whole release pipeline.

Gotcha 2: WebView2 on older Windows

Tauri doesn't ship a browser engine; it uses the system webview. Windows 11 has WebView2; Windows 7–10 might not — and a missing webview means users open the app to a blank white window. Bundle the WebView2 bootstrapper in your installer so it self-installs. Tiny detail, terrible first impression if you miss it.

Gotcha 3: OAuth redirect is the fiddly part

In a browser, OAuth is easy: Reddit redirects to your callback URL, you read the code, done. In a packaged app there's no web server at that URL. So you register a custom scheme / deep link, let the OS hand the redirect back to the app, and pull the code out of the incoming URL — on desktop and Android, each with its own quirks. Easily the most time-consuming part, and the bit tutorials skip.

Gotcha 4: a default Rust release binary is chunky

A handful of Cargo.toml flags make a real dent:

[profile.release]
panic = "abort"      # drop the unwinding machinery
codegen-units = 1    # compile as one unit so the optimizer can do more
lto = true           # link-time optimization
opt-level = "s"      # optimize for size
strip = true         # strip symbols from the binary

Free size win, no code changes.

Was it worth it?

Yes. One Vue codebase, native apps on desktop and Android, plus a web version — without three projects to keep in sync. If you're a web dev eyeing desktop/mobile, Vue + Tauri + Capacitor is a very reasonable way in — just budget time for the packaging and OAuth reality, not the happy-path demo.

I do this kind of cross-platform / custom-tooling work as a freelance dev at dibodev.fr. Happy to get into the OAuth deep-linking or the CI matrix in the comments.