Prerequisites
Required Tools
| Tool | Version | Install | |------|---------|---------|| | Node.js | 20+ | https://nodejs.org | | pnpm | 10.12+ |corepack enable |
| Rust | 1.90.0 | https://rustup.rs |
Rust version is managed by
rust-toolchain.toml. You just need rustup installed.Linux Only: Additional Dependencies
Install GTK/WebKit dev libraries:Quick Start
Development Workflows
Choose the workflow that matches your development needs.Hot Reload (UI Development)
Best for iterating on React components. Changes hot-reload instantly.Uses Vite dev server on port 5174. Frontend changes reload without restarting.
Standalone Vite + Attach (Multi-Window Testing)
When testing with multiple notebook windows, closing the first Tauri window normally kills the Vite server. Use this workflow to avoid that:- Testing realtime collaboration
- Testing widgets across windows
- Avoiding confusion when one window close breaks others
Debug Build (Rust Development)
Best for:- Testing Rust changes
- Multiple worktrees (avoids port 5174 conflicts)
- Running the standalone binary
Rust-Only Rebuild (Fast Iteration)
When you’re only changing Rust code (not the frontend), skip the frontend rebuild:Release Builds (Local Testing)
Mostly handled by CI for preview releases. Use locally only when testing:- App bundle structure
- File associations
- Icons
Build Order and Dependencies
The UI must be built before Rust because:crates/sidecarembeds assets fromapps/sidecar/dist/at compile time via rust-embedcrates/notebookembeds assets fromapps/notebook/dist/via Tauri
xtask commands handle this automatically. If building manually:
Build Dependency Graph
Daemon Development
The notebook app connects to a background daemon (runtimed) that manages prewarmed environments and notebook document sync.
Development Mode (Per-Worktree Isolation)
In production, the Tauri app auto-installs and manages the system daemon. In development, you control the daemon yourself. Benefits:- Isolated state per worktree (no conflicts when testing across branches)
- Your code changes take effect immediately on daemon restart
- No interference with the system daemon
CONDUCTOR_WORKSPACE_PATH is set.
Non-Conductor users: Set RUNTIMED_DEV=1:
Useful Daemon Commands
Testing Against System Daemon (Production Mode)
When you need to test the full production flow (daemon auto-install, upgrades, etc.):Common Daemon Gotchas
If your daemon code changes aren’t taking effect:
If the app says “Dev daemon not running”:
- You’re in dev mode but haven’t started the dev daemon
- Run
cargo xtask dev-daemonin another terminal first
Daemon Logs Location
Production:Command Reference
xtask Commands
| Command | Description | Use When |
|---|---|---|
cargo xtask dev | Hot reload mode | Iterating on React UI |
cargo xtask vite | Standalone Vite server | Multi-window testing |
cargo xtask dev --attach | Attach to existing Vite | Connect Tauri to running Vite |
cargo xtask build | Full debug build | Testing Rust changes |
cargo xtask build --rust-only | Rust-only rebuild | Fast Rust iteration |
cargo xtask run | Run bundled binary | Test standalone app |
cargo xtask build-app | Build release .app | Testing app bundle |
cargo xtask build-dmg | Build release DMG | Distribution (usually CI) |
cargo xtask dev-daemon | Start dev daemon | Development mode |
cargo xtask install-daemon | Install system daemon | Production mode |
pnpm Commands
| Command | Description |
|---|---|
pnpm install | Install all dependencies |
pnpm build | Build all UIs |
pnpm test:run | Run JS tests |
pnpm --dir apps/notebook dev | Start notebook dev server |
pnpm --dir apps/sidecar build | Build sidecar UI |
Cargo Commands
| Command | Description |
|---|---|
cargo test | Run Rust tests |
cargo fmt | Format Rust code |
cargo clippy --all-targets -- -D warnings | Lint Rust code |
cargo build | Build Rust (debug) |
cargo build --release | Build Rust (release) |
Test Notebooks
Thenotebooks/ directory has test files:
Troubleshooting
Build Fails: “apps/sidecar/dist/ not found”
The sidecar UI needs to be built first:cargo xtask build which handles this automatically.
Build Fails: Rust Toolchain Version
Ensure you have rustup installed. The project’srust-toolchain.toml will automatically install the correct version:
Port 5174 Already in Use
Anothercargo xtask dev or cargo xtask vite is running.
Either:
- Stop the other instance
- Use
cargo xtask buildinstead (no port needed) - Use worktrees with isolated ports (Conductor sets
CONDUCTOR_PORTautomatically)
“Command not found: pnpm”
Enable corepack (ships with Node.js 16+):Changes Not Appearing
Frontend changes: Make sure you’re runningcargo xtask dev (hot reload) or rebuild with cargo xtask build.
Rust changes: Rebuild with cargo xtask build or cargo xtask build --rust-only.
Daemon changes: Restart the dev daemon (cargo xtask dev-daemon) or reinstall the system daemon (cargo xtask install-daemon).
Next Steps
- Testing Guide - Run tests and write new ones
- Architecture Deep Dive - Understand the system design
- Contributing Guidelines - Contribution workflow