# WebUI Sync Workflow This workflow is for contributors keeping the desktop app and browser WebUI in sync. Users should experience them as one product surface: desktop adds a native host and local engine lifecycle, while chat, settings, apps, skills, and workspace UI still come from the shared WebUI. `desktop` consumes the shared WebUI build output. It must not copy, fork, or vendor `webui/src`. ## Development Run the WebUI dev server: ```sh cd desktop bun run dev:webui ``` Run the native host in another terminal: ```sh cd desktop bun run dev:app ``` The host loads `http://127.0.0.1:5173` in development, so React changes hot reload. Main/preload changes still require restarting `dev:app`. ## Release Build 1. Build the shared WebUI: ```sh bun run build --prefix webui ``` 2. Prepare the bundled Python engine: ```sh cd desktop NANOBOT_DESKTOP_ARCH=arm64 bun run prepare-engine ``` 3. Build the app: ```sh bun run make:mac:arm64 bun run make:mac:x64 ``` `electron-builder` packages `nanobot/web/dist` as `Resources/nanobot-webui`. ## Checklist - WebUI source remains host-neutral: it may branch on generic runtime capabilities, but it must not import Electron or desktop source files. ```sh rg -n "from ['\\\"]electron|desktop/src|nanobotDesktop" webui/src ``` This command should print nothing. - Native host behavior is implemented in `desktop/src`. - Provider, model, credential, and login setup stay in shared WebUI settings. Do not duplicate those flows in Electron-owned HTML. - Shared UI behavior is implemented in `webui/src` through `window.nanobotHost` and generic runtime capability checks. - Do not copy React components from `webui/src` into this folder. - Do not commit bundled runtimes, DMGs, or `node_modules`.