One resolved System across three hosts.
The host changes by target. The System manifest, System UI package and installed app catalog do not.
Setup
Install Bun and stable Rust. Clone submodules before building:
$ git clone --recurse-submodules https://github.com/pocket-stack/pocket-desktop.git
$ cd pocket-desktop
$ bun run setup
$ bun run check
macOS
Xcode command-line tools provide the native toolchain. The first command creates a release build; the second launches it.
$ bun run build
$ bun run macos
Linux
The Linux host needs gpui's X11/Wayland, Fontconfig, Vulkan and audio development libraries. The package command emits a relocatable product directory and pocket-desktop-linux-<arch>.tar.gz.
$ bun run package:linux
$ tar -xzf dist/linux-app/pocket-desktop-linux-*.tar.gz
$ ./PocketDesktop/bin/pocket-desktopThe launcher resolves its own installation directory, sets the artifact root and gives the host the complete resolved System plan.
WebAssembly
The browser preview runs the System UI and every installed app through PocketJS's WASM engine. Each app uses an independent iframe Realm and UI instance.
$ bun run build:web
$ bun run web
# open http://127.0.0.1:4173
Validation
$ bun run check
$ bun run test:web
$ bun run test:sitetest:web drives a real headless Chrome session, double-clicks Hero and waits for the child raster to replace the System UI fallback.