hivevm/comb
Node-based visual workflow engine and UI coordinator. A browser node editor on WebGL2 with a Rust engine compiled to WebAssembly, built for tens of thousands of nodes.
- Rust
- WebAssembly
- WebGL2
- Specs + ADRs
- Language
- Rust · TypeScript
- License
- MIT
- Commits
- 22 commits
- Last update
- Oct 2026
01 / Overview
Comb is a high-performance, interactive node-editor framework for the browser, built to stay responsive with tens of thousands of nodes.
Nodes, edges, connectors and edge labels are drawn on a WebGL2 canvas with PixiJS. Users create, connect, move and delete graph elements directly on the canvas, while attribute forms stay in the host application’s HTML. Geometry runs in a Rust engine compiled to WebAssembly.
A host app passes an element to createComb, loads a graph of nodes and edges, calls fitView() and subscribes to selection changes through onSelectionChange. The full example is in examples/metric-tree/.
02 / Architecture
How it fits together
HOST
Host application
createComb · HTML attribute forms
LIBRARY
Comb
TypeScript · PixiJS · WebGL2
ENGINE
Geometry engine
Rust · WebAssembly
crates/engine
The engine's pure Rust core (ADR-0009).
crates/engine-wasm
The Rust side of the bridge, containing all WebAssembly exports (ADR-0010).
packages/comb
The library, with api, store, interaction, render and bridge modules.
examples/metric-tree
An example host application with browser tests.
03 / Decisions
Specifications and decisions
Written specifications and architecture decision records live next to the code, so the reasoning behind the design stays reviewable.
- docs/SPECIFICATION.mdSpecification
- docs/ARCHITECTURE.mdArchitecture
- docs/GLOSSARY.mdGlossary
- docs/CONVENTIONS.mdConventions
- docs/adr/Architecture Decision Records
- AGENTS.mdRules for coding agents
04 / Getting started
Try it
Run inside the Dev Container: VS Code with the Dev Containers extension (or a compatible IDE) and Docker or rootless Podman.
$ git clone https://github.com/hivevm/comb
$ cd comb
$ bun run build
$ bun run test
$ bun run example