Attach a project #
Press ⌘K and choose Add project. Pick a git repository. The app detects how the project launches when it can, and lists the repository's worktrees.
Open a copy #
In ⌘K, every worktree of the project appears as open a copy. Choose one. Opening a copy starts it; there is no separate play button.
The copy reports its phase as the host observes it, never on a timer:
| Phase | Meaning |
|---|---|
| starting the virtual machine… | the host accepted the command and is spawning the VM |
| booting… | the guest kernel is up, the system is coming up |
| starting the desktop… | the compositor is starting |
| running | usable |
| stopping… | shutting down |
| failed to start | it did not come up; the Logs tab says why |
What you see #
A terminal, opened in ~/workspaces, and that directory is your worktree, mounted read-write over virtio-fs. Files you change in the copy change on your disk, and the other way round.
Run something:
sb run firefox
The first run fetches Firefox from the package cache into the shared store; you see the progress. The window appears on the copy's screen. A second copy that runs Firefox starts it from the store, without the download.
sb run accepts anything in nixpkgs by name, or any flake reference. See sb run.
Keys #
| Chord | Does |
|---|---|
| ⌘K | Command palette. Matches subsequences, so blndr finds Blender. |
| ⌘O | App launcher for the focused copy. |
| ⌘G | Capture the mouse and keyboard for the copy, and release them. |
| ⌘V | Paste your Mac's clipboard into the copy. |
| Ctrl+anything | Always goes to the guest, so Ctrl+C works in its shell. |
| ⌘⏎ | Focus mode: hides the rail and the chat and zooms the pane. Press again to restore. |
| ⌘</kbd> / ⌘⇧</kbd> | Split the pane right / down. |
| ⌘← / ⌘→ | Switch between copies. |
| ⌘1…⌘9 | The focused copy's app tabs. |
| ⌘L | Fold and unfold the chat. |
| Esc | Closes palettes and dialogs, and releases capture. |
A second copy of the same worktree #
⌘K → Open another copy → a second run of this worktree. The two copies share the worktree and nothing else: separate disks, separate memory, separate networks. This is how you compare two states of one project side by side.
Things that surprise people #
- File watchers in the copy do not see your edits from the Mac. Inotify does not cross virtio-fs for host writes. Run dev servers inside a copy with polling:
CHOKIDAR_USEPOLLING=1, Vite'sserver.watch.usePolling,cargo watch --poll. Latency is about half a second. - Build output lands in your real worktree.
node_modules/,target/,dist/written inside the copy appear on your disk, because the worktree is one directory, not a copy. Your.gitignoreis what keeps them out of git. - Metadata-heavy work is slower than on a local disk.
npm ciandcargo buildover virtio-fs take longer than they do natively. - Clipboard is one way. ⌘V pastes into the copy; copying out of a copy to the Mac is not there yet.