Local-first Mac app shell
Build a Mac control panel in Svelte.
Mote is a menu-bar app for local tools. The native host handles windows, permissions, and macOS APIs. Your panel is ordinary Svelte you can edit live.
Edit Svelte. The app updates without rebuilding Swift.
Run Mote, change workspace/src/App.svelte, and save. Vite updates the panel while the AppKit host keeps running.
LOCAL BRIDGE
Example panel
Common Mac workflows, one panel.
Use one Svelte panel for service control, auth recovery, remote tasks, command shortcuts, logs, files, and cleanup. This example uses placeholder data.
Blueprint: placeholder data only; no private endpoints or local resource names.
Swift owns the shell.
The app owns the status item, panel, WebKit view, permissions, logs, and bounded system access. It should stay small and stable.
Boundary detail: native capability calls stay behind named bridge methods.
Svelte owns the surface.
A Mote panel is an ordinary local Svelte project. Save a file; the panel reloads. The product behavior lives in source you can inspect.
workspace/src/App.svelte workspace/src/style.css workspace/src/lib/native.ts
Edit loop
Change the panel like any other frontend.
Keep layout, state, and product workflows in Svelte. Keep privileged system access behind explicit native capabilities.
Edit Svelte
Change the panel by hand, or ask an agent to propose a source patch.
Compile locally
Preview in the same WebKit shell and keep a last-known-good build.
Call named APIs
Use typed bridge methods instead of giving the webview shell access.
Roll back
If a change breaks the panel, return to the last working workspace state.
Add Cloudflare when a panel needs the network.
Mote runs locally after dependencies are installed. If a panel needs login, remote access, routing, or model calls, those pieces can be wired in without changing the local edit loop.