Getting Started

VisualMode is a keyboard-first design tool powered by a Rust/WASM engine with WebGPU rendering. It supports both 2D and 3D editing with vim-inspired keybindings.

PREREQUISITES

  • Private alpha browser: Chrome/Edge with WebGPU enabled
  • Firefox/Safari hardening is deferred to public-beta support work
  • Rust + wasm-pack (for engine development)
  • Vite+ with pnpm (frontend toolchain)

QUICK START

$ vp install
$ vp run dev

Private Alpha

Private alpha builds are for invited Chrome/Edge users while the engine and Project File model are still moving. Treat important work as experimental and keep separate copies until public-beta durability lands.

KNOWN ISSUES

  • Chrome/Edge are the only supported alpha browsers.
  • Project save/load is actively hardening and is not the public-beta guarantee yet.
  • Nested Screens and 3D World render targets can change as the render DAG work lands.
  • Firefox/Safari support is public-beta hardening work, not an alpha blocker.

FEEDBACK

Use the private alpha thread. Include browser, route, file name, what you expected, what happened, and the smallest set of steps that reproduces it.

Selection

Select entity
Click
Add to selection
Shift+Click
Toggle selection
Ctrl+Click
Clear selection
Esc
Box select
Drag

Editing

Create box
n
Delete selected
x
Delete (vim-style)
d+d
Yank (copy)
y+y
Paste
p
Undo
Ctrl+z
Redo
Ctrl+Shift+z
Redo (mouse input)
Ctrl+y

Gizmos

Translate gizmo
g
Rotate gizmo
r
Scale gizmo
s

Camera & Views

Orbit camera
Right-drag
Pan camera
Middle-drag
Zoom
Scroll
Front view
v+1
Right view
v+2
Top view
v+3
Isometric view
v+4

Vim Mode

Vim keys are handled by the Rust engine's keymap.

Enter insert mode
i
Enter visual mode
v
Return to normal mode
Esc
Repeat last action
.
Undo
u
Redo
Ctrl+r

Architecture

The engine is a Rust Cargo workspace compiled to WebAssembly. The frontend is SolidJS with TanStack Router, communicating with the engine via wasm-bindgen.

foundation      shared types, no GPU
├── espacio     flexbox layout engine
├── core-3d     3D World ECS and commands
├── core-2d     2D Canvas ECS and commands
├── renderer    3D WebGPU rasterizer
├── renderer-2d 2D SDF renderer
├── wasm        3D WASM boundary
├── wasm-2d     2D WASM boundary
└── cli         headless testing

Rendering runs on a Web Worker via OffscreenCanvas, keeping the main thread free for input handling. Data is transferred as zero-copy Float32Array buffers.

VISUALMODEAI