Skip to content

docs(#754): desktop consumer = Deno desktop runtime; remove Tauri; D1–D3 plan + spike#775

Merged
hellno merged 6 commits into
mainfrom
claude/deno-desktop-runtime-62m4ta
Jun 25, 2026
Merged

docs(#754): desktop consumer = Deno desktop runtime; remove Tauri; D1–D3 plan + spike#775
hellno merged 6 commits into
mainfrom
claude/deno-desktop-runtime-62m4ta

Conversation

@hellno

@hellno hellno commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

What & why

Resolves the open desktop-consumer question parked in phase-1.md §10 ("how does the desktop build consume the TanStack app after cutover"). Decision: wrap the migrated TanStack Start app in the Deno desktop runtime — the desktop app is the TanStack app, no separate consumer shim. The dormant Tauri integration is removed.

This PR is docs + repo cleanup + a throwaway spike — no app/runtime code changes. Desktop execution is deferred until after #13 cutover and tracked as three follow-up issues (below).

Spike — what was actually verified (not from marketing)

  • Host seams fall through on Deno with zero new codeserverEnv()process.env, cache → in-process memory backend. Only the cloudflare:workers import needs aliasing, which TARGET=vercel already does → Deno is a build-target swap, not a rewrite.
  • deno desktop builds + launches + renders end-to-end on macOS (hello-world; window screenshot-verified; full Chromium multi-process under the cef backend).
  • Reality checks baked into the doc: it's canary/experimental; the canary reports 2.8.3+<hash> (not the documented 2.9.0); it silently defaulted to the cef backend → pin desktop.backend. Size is --backend-selectable (cef ≈ 295 MB macOS for rendering fidelity; native webview is a later size optimization). Size is deprioritized for now.

Repo cleanup (Tauri removal)

  • .github/workflows/build.yaml: drop all commented Tauri/Rust steps + the Tauri-era OS matrix → plain ubuntu-latest (checks + Sentry).
  • CLAUDE.md: replace the stale "Desktop App (Tauri)" section (rls scripts that no longer existed) + tech-stack/deploy mentions → point at the new doc.
  • CONTRIBUTING.md, .gitignore: de-Tauri'd. (No src-tauri/, no Tauri deps existed.)

Plan — proof-driven follow-ups (all post-#13 cutover)

Files

  • New: docs/migration/desktop-deno-runtime.md (the plan), scripts/spikes/deno-desktop/ (throwaway spike — excluded from tsconfig/biome).
  • Updated: phase-1.md §10, strategy.md (deferred follow-ups + links).

Part of epic #754.

claude and others added 6 commits June 22, 2026 21:13
…spike scaffold

Resolves the open question in phase-1.md §10 (how the desktop build consumes
the TanStack app after cutover). Direction: ship the desktop app as the same
TanStack Start app wrapped by the Deno desktop runtime (auto-detects TanStack
Start; reuses the host-portability seam), not a revived Tauri. Ships after #13
cutover; Deno desktop is canary today.

- docs/migration/desktop-deno-runtime.md: full analysis — current Tauri-dormant
  state, why Deno desktop over Tauri, the local-vs-remote-server (secrets)
  decision (default to the hybrid shape), and open questions for a spike.
- phase-1.md §10 + strategy.md: point the open question at the new doc; add a
  post-#13 deferred follow-up entry and a Links reference.
- scripts/spikes/deno-desktop/: throwaway spike — Stage 1 native-window smoke
  (deno desktop), Stage 2 headless host-seam fall-through check (serverEnv →
  process.env, cache → memory backend on Deno). Excluded from tsconfig + biome
  (throwaway Deno code, not part of the Node app).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ss1ey8VzR6m53j734ji3fx
…undle bloat caveat)

Installed Deno canary and actually ran the spike. Findings folded back into the
doc + README:

- Seam fall-through PASS on Deno: serverEnv() reads process.env, cache picks the
  memory backend — host seams need zero Deno-specific code (only the
  cloudflare:workers import needs aliasing, as TARGET=vercel already does).
- `deno desktop` subcommand exists on canary and compiles a bundle; framework
  auto-detect confirmed.
- Reality-checks vs the marketing: the canary reports 2.8.3+<hash> (not the
  documented 2.9.0), and on Linux the default backend is CEF/Chromium → a
  ~1.7 GB bundle (libcef.so ~1.5 GB), undercutting the "small binaries" pitch.
  Recommendation tempered: bundle size on macOS/Windows is now a decision gate
  before committing over Tauri.

Spike hardening: run.sh gates Stage 1 on the subcommand's presence (not a
version number), makes the heavy CEF build opt-in (--build), and always runs the
cheap headless Stage 2. Added a .gitignore backstop so the ~1.7 GB build dir can
never be committed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ss1ey8VzR6m53j734ji3fx
… .app (not Tauri-small)

Ran Stage 1 on a real macOS arm64 device (the cloud sandbox was headless):
`deno desktop` built a signed Hello.app, launched it, and the window rendered
(screenshot-verified). Process tree is full Chromium multi-process.

Decisive finding: macOS uses CEF/Chromium too, NOT native WKWebView. Hello-world
.app = 295 MB (225 MB is the Chromium Embedded Framework) — Electron-class, not
Tauri-class. So the "small binaries like Tauri" pitch is false on BOTH platforms
tested (Linux ~1.7 GB, macOS 295 MB).

Recommendation updated from "lean toward Deno desktop" to an explicit DX-vs-size
tradeoff: Deno desktop wins on all-TS DX + TanStack auto-detect + the verified
host-portability seam, but loses Tauri's small-binary advantage. Tauri stays the
pick if a small native binary is a hard requirement. Still canary/experimental;
still parked behind #13 cutover. Synced phase-1.md §10 + strategy.md pointers and
the spike README findings to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ss1ey8VzR6m53j734ji3fx
…backends (webview vs cef)

Followed up on the docs: `deno desktop` supports `--backend cef|webview|raw`
(and `desktop.backend` in deno.json). My 295 MB measurement was the CEF backend
specifically — which the canary silently defaulted to, despite the docs saying
the native `webview` backend is default (another canary-vs-docs drift; pin it).

So the earlier "no small-binary advantage / Electron-class, period" conclusion
was wrong: it was CEF-only. The native `webview` backend promises Tauri-like
size from the same codebase — UNTESTED here, and it carries the classic
native-webview catch (per-OS rendering/feature inconsistency, no DevTools), which
herocast's heavy UI (TipTap, HLS embeds, wallet) is sensitive to.

Net: Deno desktop's real edge is that ONE codebase spans both size tiers
(webview small / cef consistent). Recommendation upgraded to "leading candidate,"
with `--backend webview` against herocast's real UI flagged as THE gating probe.
Synced desktop-deno-runtime.md, phase-1.md §10, strategy.md, and the spike README.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ss1ey8VzR6m53j734ji3fx
…op + proof-driven D1–D3 plan

Desktop direction is decided: wrap the TanStack app in the Deno desktop runtime,
backend pinned to `cef` (rendering fidelity; binary size deprioritized per
product call). Tauri is removed — it was already dormant (no src-tauri, no deps).

Repo cleanup:
- .github/workflows/build.yaml: drop all commented Tauri/Rust steps + the
  Tauri-era OS matrix (now plain ubuntu-latest: checks + Sentry release).
- CLAUDE.md: replace the stale "Desktop App (Tauri)" section (rls scripts that no
  longer exist) + tech-stack/deploy mentions → point at the Deno desktop doc.
- CONTRIBUTING.md "Run as a Native App": Tauri → Deno desktop direction.
- .gitignore: drop the "# tauri output" label (keep build/ ignored).

Doc rewrite (desktop-deno-runtime.md): remove the Tauri comparison and the
size-as-gate framing; reframe as a clean, proof-driven plan with 3 sequential
follow-up issues to bring desktop to users:
- D1 "it runs": TARGET=deno build + real app boots in a desktop window (proof:
  screenshot of /feeds rendering real casts; CF build stays green).
- D2 "it's correct & secure": hybrid server (server fns proxy the remote worker
  so secrets never ship) + OS-keychain key custody (proof: grep bundle = no
  secrets; live login + post; keys not in IndexedDB).
- D3 "it's shippable": code-sign/notarize + deep-link auth callback + auto-update
  (proof: a non-dev downloads/installs/logs in; update applies + rolls back).
Gated on #13 cutover + deno desktop leaving canary. Synced phase-1.md §10 +
strategy.md to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ss1ey8VzR6m53j734ji3fx
Cross-reference the three desktop follow-up issues from the plan doc, strategy.md,
and phase-1.md §10 so the proof-driven sequence is tracked against the epic.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ss1ey8VzR6m53j734ji3fx
@vercel

vercel Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
herocast Ready Ready Preview Jun 23, 2026 4:33pm

@hellno
hellno merged commit c80681e into main Jun 25, 2026
2 checks passed
@hellno
hellno deleted the claude/deno-desktop-runtime-62m4ta branch June 25, 2026 10:33
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.

2 participants