Build and run

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-desktop

The 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

Open the deployed preview →

Validation

$ bun run check
$ bun run test:web
$ bun run test:site

test:web drives a real headless Chrome session, double-clicks Hero and waits for the child raster to replace the System UI fallback.