VibeWire is a local-first electrical System and wiring design tool. It combines hierarchy and schematic editing, focused Subsystem diagrams, shared connector and signal libraries, collaboration, and manufacturing output in one React application.
Files under public/user-data/ are included fixtures and test data. No included System is the
product or the default documentation example.
Requirements: Node.js ^20.19.0 or >=22.12.0 (required by Vite 8), npm, and optional Python 3 for
the standalone validator.
npm install
npm run devOpen the Vite URL, normally http://localhost:5173. npm run dev starts two processes:
dev:webruns Vite and proxies/apiand/user-datato port 3001.dev:apiruns the file-backed API withtsx watch.
Both are required for working autosave. The browser has no Save button: System and library changes
schedule after about 300 ms; ordinary layout, Subsystem, and manufacturing changes schedule after
about one second. A static frontend without npm run api can render, but cannot persist edits.
The current route-style-only scheduling caveat is recorded in docs/canvas.md.
Anyone may browse. Editing requires an editor account and an explicitly activated edit session. Accounts are self-service from Log in; presence, attribution, conflicts, activity, and checkpoints are built in.
- System — hierarchy tree, enclosure sheets, interactive graph, inspector, Harness Bundles, route points, Branch Points, Shared Anchors, text, and floating images.
- Subsystem — a focused projection that stores membership and geometry while deriving all electrical topology from the System.
- Manufacturing — derived physical harnesses, cut lengths, build progress, connector guides, work attribution, BOM, and CSV export.
- Connectors — the shared fixed-type and connector-family catalog, cavity variants, part numbers, gauge ranges, and media.
- Signals — reusable signal definitions, preferred wire colors, tags, and structured or free-form properties.
Use the inspector for selected-object edits. Stable IDs and storage keys are identity; display names may change or repeat.
The complete loaded design is a System. New live System data belongs under
public/user-data/systems/, either as a flat <key>.json or a sheet directory:
public/user-data/
systems/<key>.json
systems/<key>/root.json
systems/<key>/signals.json
systems/<key>/sheets/<enclosure-id>.json
layouts.<key>.json
manufacturing.<key>.json
subsystems/<key>/<subsystem-id>.json
connectors/connector-library.json
images/
Sheet files assemble into one in-memory SystemData and are split and round-trip verified before a
save is installed. Edit sheeted Systems through VibeWire unless you understand
server/sheets.ts. Compatibility readers for older paths and names are
documented in docs/migrations.md.
src/— React UI, Zustand store, graph models, domain helpers, and client sync.server/— API, authentication, revisions, sheet I/O, history, attribution, and presence.scripts/— regression suites, validation, and migration tools.docs/— canonical product and contributor documentation.public/user-data/— versioned fixture/test Systems and sidecars.vibewire-state/— collaboration records. Most are tracked; only secrets, automatic byte-history, and rollback staging are ignored.
npm run dev # API and Vite together
npm run dev:web # Vite only
npm run dev:api # watched API only
npm run api # API without watch
npm run build # typecheck all TS projects, then build
npm run typecheck # TypeScript project build
npm run lint # ESLint
npm test # complete regression suite
npm run test:docs # documentation integrity
npm run validate # Python structural validator
npm run preview # preview the static frontendSee docs/README.md for the task-oriented documentation index,
CONTRIBUTING.md for change workflow, and CHANGELOG.md for
product history.