Skip to content

Add Tauri desktop shell MVP for macOS#372

Open
woltspace-jerpint[bot] wants to merge 4 commits into
mainfrom
feat/macos-desktop-shell
Open

Add Tauri desktop shell MVP for macOS#372
woltspace-jerpint[bot] wants to merge 4 commits into
mainfrom
feat/macos-desktop-shell

Conversation

@woltspace-jerpint

Copy link
Copy Markdown
Contributor

Summary

  • add a thin Tauri 2 desktop shell around the existing Docker-backed lodge
  • keep the bundled Vite UI limited to startup and recovery, then load the shared lodge from http://127.0.0.1:7777
  • detect and launch Docker Desktop from Finder-safe locations
  • run the fixed woltspace/woltspace:latest container shape with persistent ~/.woltspace/wolts state and localhost-only port binding
  • add bounded engine logs, Finder reveal, tray open/quit behavior, notification permission/demo, and startup session deep-link handling
  • add an original icon set, frontend controller tests, linting, and build documentation

Checks completed in the Linux lodge

  • npm test — 8/8 tests pass
  • npm run lint
  • npm run build
  • git diff --check

Rust and native packaging were not run here because this environment has no Rust toolchain, Tauri Linux system libraries, or macOS SDK. A Mac agent must treat native compilation and launch as unverified until completing the steps below.

Mac build instructions

Prerequisites:

  • macOS 12+
  • Docker Desktop
  • Xcode Command Line Tools
  • Node.js 22+
  • stable Rust and the official Tauri 2 macOS prerequisites

From the repository root:

git checkout feat/macos-desktop-shell
cd desktop
npm ci
npm test
npm run lint
npm run build
cargo test --manifest-path src-tauri/Cargo.toml
cargo check --manifest-path src-tauri/Cargo.toml
npm run tauri dev
npm run tauri build

Start with desktop/README.md. The main native implementation is in desktop/src-tauri/src/docker.rs and desktop/src-tauri/src/lib.rs; the boot UI/controller lives under desktop/src/; packaging configuration is in desktop/src-tauri/tauri.conf.json.

Native validation checklist

  • launch the development app from Finder as well as Terminal
  • confirm Docker Desktop is detected when installed but stopped, launches automatically, and reaches ready state
  • confirm image woltspace/woltspace:latest runs as container woltspace
  • confirm only 127.0.0.1:7777:7777 is published
  • confirm state survives restart under ~/.woltspace/wolts
  • confirm the existing lodge fills the webview after engine health succeeds
  • confirm close-to-tray, tray reopen, tray quit, Finder reveal, bounded logs, and native notification permission/demo
  • confirm woltspace://session/<name> routes correctly on initial launch
  • report the generated .app and .dmg paths

For public distribution, configure Apple Developer ID signing and notarization in CI after the unsigned build works on a clean Mac.

Known MVP follow-ups

  • notification plumbing currently demonstrates native permission and delivery; real lodge lifecycle events still need a small versioned event bridge
  • deep links are handled by the bundled startup page; behavior after the webview has navigated to the lodge must be audited on macOS
  • the lodge currently loads Google fonts, so self-hosting those assets would improve offline-first desktop behavior

@vercel

vercel Bot commented Jul 19, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
woltspace Ready Ready Preview, Comment Jul 20, 2026 2:50pm

UXWolt and others added 3 commits July 20, 2026 10:16
The shell was authored in the Linux lodge with no Rust toolchain, so it
had never been through a Mac compile — and it didn't build:

- serde_json wasn't declared, but tauri::generate_context! expands to
  code that needs it
- docker.rs borrowed data_dir for `home` then moved it on the same line
  (E0505) — compute the candidates before the move
- `tauri dev` loaded devUrl port 1420 but `npm run dev` served Vite on
  5173, so the dev webview was dead — pin Vite to 1420 with a vite.config

Checks in the Mac lodge now green: cargo test (4/4), npm test (8/8),
lint, build. Cargo.lock added from the first clean build.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
The icon and the boot screen now wear the same pixel beaver as the web
lodge, instead of placeholder vector art — the mark, the loading screen,
and the real lodge finally read as one place.

- App icon: the beaver sitting on a mini riverbank scene (blue sky,
  snow-capped ridge, pines, grass, river, drifting clouds), regenerated
  across every platform size from desktop/assets/icon-beaver.svg.
- Boot screen: vendored the colony's sprite + landscape renderers
  (pixel-sprites.js, pixel-scene.js) so the scene paints offline, before
  the container is even reachable — that's the whole point of a boot
  screen. scene.js composes drifting clouds + a bobbing beaver + a log
  over the procedural riverbank, with a resize-aware landscape.
- Retired the old CSS moon/pines/pond vector scene and gave the footer a
  frosted bar so it reads over the river.
- eslint: added the globals the new scene code uses (clearTimeout, and
  process for the Vite config).

The vendored renderers are copied from public/static (sprites.js,
home-scene.js) with a sync note — the desktop bundle can't fetch them
from the container at boot. npm test 8/8, lint, build all green.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
The desktop shell expects woltspace/woltspace:latest but the CLI builds
bare `woltspace` and nothing is published to a registry yet. Existing
users are unaffected (we attach to their existing container); net-new
users can't pull. Documented inline so it's not lost.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
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.

0 participants