Window shell
Tauri 2. The binary identifier is com.cadengine.app. Product name Arbor, version 0.1.0. Default window 1440×900, minimum 1100×700, centered, decorations on, drag-and-drop on. macOS minimum system version 10.15. Windows webview bootstrapper downloads if WebView2 is missing. Linux ships AppImage, deb, and rpm targets. Content security policy allows self, wasm-unsafe-eval, blob workers, and Tauri IPC — not arbitrary network geometry.
Desktop UI
React 19 + Zustand. The desktop renderer is a Vite webview, not this Next.js site. Viewport graphics use Three.js. PCB canvas uses PixiJS 8. State lives in Zustand stores (features, sketch, assembly, PCB, CAM, simulation, render). Lucide icons. That Vite tab is titled Arbor in tauri.conf.json. This marketing site is a separate Next.js export.
Kernel I/O
Rust (cad_engine_lib). The sidecar crate is still named cad_engine_lib inside arbor-cae. Dependencies: rusqlite 0.32 (bundled), serde, uuid v4, chrono, parking_lot, thiserror. Release profile: LTO, abort on panic, single codegen unit. Commands are Tauri-invoked; they do not phone a CAD cloud.
Solids
OpenCASCADE.js. The kernel worker (src/workers/cadWorker.ts) talks to OpenCASCADE.js 2.0 beta. Mesh buffers feed the Three.js viewport. Parametric history is local to the feature tree and the SQLite commit, not a hosted document. The SVG hex standoff on the home page is a marketing stand-in, not this worker.
Viewport
WebGL / Three.js. src/components/viewport/Viewport3D.tsx plus a view cube and Onshape-style orbit controls. Sketch overlay is 2D inference in the part studio. An AR viewport file exists as a scaffold only — it is not a shipping headset mode.
History / PDM
SQLite. Path: .cad_workspace/*.cad_db. Schema tables include projects, branches, commits (parent and merge parent), document_state (feature_tree JSON, content_hash), document_notes, properties_metadata, workspace_locks, plus release and version helpers in Rust. Foreign keys on. Every check-in is a row, not a cloud commit.
ECAD
PixiJS + DRC. 2D PCB canvas with snap routing. Exporters write Gerber copper and Excellon drills. DRC ships two named profiles: Standard Fab (0.15 mm trace/clearance, 0.3 mm drill, 0.1 mm annular, 0.4 mm pin pitch) and Additive / Conductive Ink (0.2 mm traces, 0.4 mm drill, 0.15 mm annular). Profiles are starting points. Read them before you mill.
CAM
2.5D pocket. Stock, WCS, tool definition, and pocket parameters live in the CAM store. pocketClearing.ts emits the zigzag. fanucPost.ts writes ISO G-code (.nc) with program number, absolute/incremental, mm units, and safe Z. This is not 5-axis. Verify on the controller.
Assembly
Local BOM + mates. Instances stay in a local bill of materials. mateMath.ts handles concentric and coincident solves. There is no PDM server locking your assembly in a region.
Sculpt
T-spline cage. FormWorkspace plus subdivision.ts. Control cage and subdivided surface sit next to BREP extrudes. Not a second clay application.
File formats
Arbor does not invent a cloud package format. Interchange is ordinary CAD and PCB files plus one local database.
- .cad_db — Local project database (SQLite, WAL).
- STEP — BREP interchange through OpenCASCADE.
- Gerber — Copper layers for mill or fab.
- Excellon — Drill files alongside Gerber.
- Fanuc NC (.nc) — Posted 2.5D pocket toolpaths.
DRC numeric limits
Standard Fab: 0.15 mm minimum trace and clearance, 0.3 mm drill, 0.1 mm annular ring, 0.4 mm pin pitch, board bounds enforced. Additive / conductive ink: 0.2 mm traces and clearance, 0.4 mm drill, 0.15 mm annular, 0.4 mm pin pitch. Both profiles live in src/pcb/drc/profiles.ts.
Honest limits
Scaffolds. Simulation and render studios exist as desktop UI. AR viewport is a scaffold. Do not treat them as certified solvers or a shipped headset mode.
CAM envelope. 2.5D pocket only. No 5-axis, no machine kinematics model, no collision certification.
DRC. Two manufacturing profiles. They do not replace a fab’s current capabilities list.
Hardware. Any machine that can run a Tauri 2 webview with WebGL and a WASM worker. There is no hosted GPU.
Do not treat output as certified. The disclaimer and terms apply. Build notes are on contribute.