Development
Start the dev server:
pnpm dev
pnpm dev runs three steps in order (from package.json):
"dev": "pnpm run build:wasm && pnpm run build:vanilla-logger && vite"
build:wasm: compilesrust/brain_simto WebAssembly viawasm-pack.build:vanilla-logger: bundles the diagnostics logger into a standalone IIFE for the legacy reference pages (see Diagnostics Logger and Reference Pages).vite: starts the Vite dev server on port 9001.
Open http://localhost:9001 once Vite reports it is ready.
Keyboard shortcuts
The shortcuts are registered in src/events.ts:
| Key | Action |
|---|---|
Space | Toggle simulation pause. |
A | Toggle the grid helper. |
S | Toggle the axis helper. |
The diagnostics panel adds one more, handled in src/diag/logger.ts:
| Key | Action |
|---|---|
Ctrl + Shift + L | Toggle the in-app diagnostics panel. |
Hot reload
Vite handles HMR for the TypeScript and CSS. Changes to the Rust code are
not hot-reloaded: rerun pnpm run build:wasm (or restart pnpm dev) to pick up
simulation changes.
Docs site
cd docs-site
pnpm install
pnpm start # Live-editing dev server at http://localhost:3000
pnpm build # Production build, including the local search index
pnpm serve # Serve the production build
pnpm preview:search # Build, serve, and verify local search
The docs search box uses @easyops-cn/docusaurus-search-local. pnpm start
is useful for editing layout and content, but it does not serve the generated
search index. To test search, run pnpm build followed by pnpm serve, or use
pnpm preview:search.
Security note for shared dev servers
vite.config.ts sets server.fs.allow: ['..'] and binds the dev server on port
9001 with no authentication. That is convenient locally because the build serves
sibling reference directories, but it means anyone who can reach the port can
read files from the parent directory. Do not expose the dev server on a public
or shared network as-is. For sharing a build, use the static output from
pnpm build behind your own server instead.