diff --git a/docs/superpowers/specs/2026-07-19-desktop-tauri2-vue3-port-design.md b/docs/superpowers/specs/2026-07-19-desktop-tauri2-vue3-port-design.md new file mode 100644 index 0000000..02f5053 --- /dev/null +++ b/docs/superpowers/specs/2026-07-19-desktop-tauri2-vue3-port-design.md @@ -0,0 +1,191 @@ +# Design: Port n-link desktop to Tauri 2 + Vue 3 + +Date: 2026-07-19 +Status: Approved +Branch: `port/tauri2-vue3` + +## Problem + +The n-link desktop app cannot build or run on Ubuntu 26.04. `desktop/src-tauri` +pins `tauri = "1.0.0-beta.8"`, which links against `webkit2gtk-4.0`. That library +is not available on this system — only `webkit2gtk-4.1` is. The prebuilt 0.1.6 +`.deb` fails for the same reason, plus a missing `libssl.so.1.1` (only +`libssl.so.3` is present). + +This is the blocker that caused `nlink-cli` to be written as a GUI-free +workaround. This project removes the blocker properly so the GUI works. + +Tauri 2.x links against `webkit2gtk-4.1`, which is what makes the port the fix. + +### Verified environment + +| Component | State | +|---|---| +| `webkit2gtk-4.0` | absent, not installable | +| `libwebkit2gtk-4.1-dev` | available, 2.52.3-0ubuntu0.26.04.2 (not yet installed) | +| `libsoup-3.0-dev` | available, 3.6.6-1 (not yet installed) | +| `libssl` | 3 only; no 1.1 | +| `libusb-1.0` | 1.0.29, installed | +| rustc / cargo | 1.97.1 | +| node | v22.22.1 | +| yarn | **not installed** | +| TI-Nspire CX II | connected, USB `0451:e022` | + +## Scope + +In scope: + +1. `n-link-core` — port 8 components from Vue 2 to Vue 3. +2. `desktop` — port to Tauri 2, Vue 3, and Vite; bundle deb + appimage. + +Out of scope (deferred to a separate project): + +- `web` (Nuxt 2). It shares `n-link-core`, so porting core **knowingly breaks + it**. `web/` is left untouched at its current commit rather than + half-migrated. It is a browser/WebUSB product and does not bear on the + Linux GUI problem. +- Windows and macOS targets. `msi` and `dmg` are dropped from the bundle + config; they cannot be verified from this machine. + +## Decisions + +| Decision | Choice | Rationale | +|---|---|---| +| Platform targets | Linux only; deb + appimage | Fully testable here | +| Frontend stack | Vue 3 + Vite | Vue CLI 4.5 / webpack 4 fails on Node 22 (OpenSSL 3); `vue-cli-plugin-tauri` is Tauri-v1-era and abandoned | +| Shared core | Port `n-link-core` to Vue 3 | `web` deferred, accepted as broken | +| Component style | `