# caiorafael/3dev-editor architecture

> Architecture diagram of the GitHub repository caiorafael/3dev-editor, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/caiorafael/3dev-editor
- Repository: https://github.com/caiorafael/3dev-editor

## Overview

3dev editor is a desktop parametric 3D modeler: users create and edit a project as a scene, generate OpenSCAD code, and inspect a fast preview or an OpenSCAD-backed exact preview and export models. The graph separates scene/document editing, code generation, preview, and Electron project/file services. Some UI and integration wiring is unsampled; dashed links mark relationships documented by the README but not shown in the excerpts.

Main entry points: [`src/renderer/src/ui/AppShell.tsx`](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/ui/AppShell.tsx) (Editor shell), [`src/main/ipc.ts`](https://github.com/caiorafael/3dev-editor/blob/main/src/main/ipc.ts) (Electron IPC), [`src/renderer/src/preview/useBooleanGeometry.ts`](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/useBooleanGeometry.ts) (Boolean geometry hook), [`src/renderer/src/document/store.ts`](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/store.ts) (Scene state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editing["Scene editing"]
  node_shell["Editor shell<br/>[AppShell.tsx]"]
  node_scene["Scene state<br/>[store.ts]"]
  node_sceneops["Scene operations<br/>[tree.ts]"]
  node_scenegeometry["Transforms and bounds<br/>[math.ts]"]
  node_sceneformat["Document model<br/>[types.ts]"]
  node_components["Component files<br/>[files.ts]"]
  node_viewport["3D viewport<br/>[FeatureView.tsx]"]
  node_inspector["Properties inspector<br/>[Inspector.tsx]"]
end

subgraph group_preview["Geometry preview"]
  node_fastpreview["Manifold preview<br/>[manifoldPreview.ts]"]
  node_contours["Profile contours<br/>[prepareContours.ts]"]
  node_booleanhook["Boolean geometry hook"]
  node_booleanworker["Boolean worker"]
  node_exactpreview["Exact preview<br/>[ExactPreview.tsx]"]
end

subgraph group_code["OpenSCAD code"]
  node_codegen["OpenSCAD generator<br/>[openscad.ts]"]
  node_codeeditor["OpenSCAD editor<br/>[openscadEditor.ts]"]
end

subgraph group_desktop["Desktop services"]
  node_ipc["Electron IPC<br/>[ipc.ts]"]
  node_preload["Preload bridge<br/>[index.ts]"]
  node_projectfiles["Project files<br/>[projectFiles.ts]"]
  node_recents[("Recent projects<br/>[recents.ts]")]
  node_openscad["OpenSCAD runtime<br/>[openscad.ts]"]
  node_filesystem[("Local project folder")]
end

node_user(("Modeler"))
node_openscadapp["OpenSCAD"]

node_user -->|"edits model"| node_shell
node_shell -->|"updates scene"| node_scene
node_shell -.->|"shows viewport"| node_viewport
node_shell -.->|"shows properties"| node_inspector
node_scene -->|"applies edits"| node_sceneops
node_sceneops -->|"uses transforms"| node_scenegeometry
node_scene -->|"selects active file"| node_components
node_viewport -->|"reads scene"| node_scene
node_viewport -.->|"requests geometry"| node_booleanhook
node_booleanhook -->|"prepares contours"| node_contours
node_booleanhook -->|"builds mesh"| node_fastpreview
node_booleanhook -->|"dispatches heavy jobs"| node_booleanworker
node_booleanworker -->|"builds mesh"| node_fastpreview
node_fastpreview -->|"uses transforms"| node_scenegeometry
node_shell -->|"generates source"| node_codegen
node_codegen -->|"uses geometry math"| node_scenegeometry
node_codegen -->|"uses file helpers"| node_components
node_shell -.->|"offers code editing"| node_codeeditor
node_exactpreview -->|"generates source"| node_codegen
node_user -.->|"requests exact preview"| node_exactpreview
node_exactpreview -.->|"requests preview"| node_ipc
node_user -.->|"opens project"| node_preload
node_preload -.->|"bridges requests"| node_ipc
node_ipc -->|"invokes runtime"| node_openscad
node_ipc -->|"handles project files"| node_projectfiles
node_ipc -->|"manages recents"| node_recents
node_projectfiles -->|"reads and writes"| node_filesystem
node_recents -.->|"stores recents"| node_filesystem
node_openscad -.->|"runs previews and exports"| node_openscadapp

click node_shell "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/ui/AppShell.tsx"
click node_scene "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/store.ts"
click node_sceneops "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/tree.ts"
click node_scenegeometry "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/math.ts"
click node_sceneformat "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/types.ts"
click node_components "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/files.ts"
click node_viewport "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/viewport/FeatureView.tsx"
click node_inspector "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/ui/Inspector.tsx"
click node_fastpreview "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/manifoldPreview.ts"
click node_contours "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/prepareContours.ts"
click node_booleanhook "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/useBooleanGeometry.ts"
click node_booleanworker "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/booleanPreview.worker.ts"
click node_exactpreview "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/viewport/ExactPreview.tsx"
click node_codegen "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/codegen/openscad.ts"
click node_codeeditor "https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/editor/openscadEditor.ts"
click node_ipc "https://github.com/caiorafael/3dev-editor/blob/main/src/main/ipc.ts"
click node_preload "https://github.com/caiorafael/3dev-editor/blob/main/src/preload/index.ts"
click node_projectfiles "https://github.com/caiorafael/3dev-editor/blob/main/src/main/projectFiles.ts"
click node_recents "https://github.com/caiorafael/3dev-editor/blob/main/src/main/recents.ts"
click node_openscad "https://github.com/caiorafael/3dev-editor/blob/main/src/main/openscad.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_shell,node_scene,node_sceneops,node_scenegeometry,node_sceneformat,node_components,node_viewport,node_inspector toneBlue
class node_fastpreview,node_contours,node_booleanhook,node_booleanworker,node_exactpreview toneAmber
class node_codegen,node_codeeditor toneMint
class node_ipc,node_preload,node_projectfiles,node_recents,node_openscad,node_filesystem toneRose
class node_user,node_openscadapp toneIndigo
```

## Components

### Scene editing

- [Editor shell](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/ui/AppShell.tsx): `src/renderer/src/ui/AppShell.tsx`
- [Scene state](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/store.ts): `src/renderer/src/document/store.ts`
- [Scene operations](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/tree.ts): `src/renderer/src/document/tree.ts`
- [Transforms and bounds](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/math.ts): `src/renderer/src/document/math.ts`
- [Document model](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/types.ts): `src/renderer/src/document/types.ts`
- [Component files](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/document/files.ts): `src/renderer/src/document/files.ts`
- [3D viewport](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/viewport/FeatureView.tsx): `src/renderer/src/viewport/FeatureView.tsx`
- [Properties inspector](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/ui/Inspector.tsx): `src/renderer/src/ui/Inspector.tsx`

### Geometry preview

- [Manifold preview](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/manifoldPreview.ts): `src/renderer/src/preview/manifoldPreview.ts`
- [Profile contours](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/prepareContours.ts): `src/renderer/src/preview/prepareContours.ts`
- [Boolean geometry hook](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/useBooleanGeometry.ts): `src/renderer/src/preview/useBooleanGeometry.ts`
- [Boolean worker](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/preview/booleanPreview.worker.ts): `src/renderer/src/preview/booleanPreview.worker.ts`
- [Exact preview](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/viewport/ExactPreview.tsx): `src/renderer/src/viewport/ExactPreview.tsx`

### OpenSCAD code

- [OpenSCAD generator](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/codegen/openscad.ts): `src/renderer/src/codegen/openscad.ts`
- [OpenSCAD editor](https://github.com/caiorafael/3dev-editor/blob/main/src/renderer/src/editor/openscadEditor.ts): `src/renderer/src/editor/openscadEditor.ts`

### Desktop services

- [Electron IPC](https://github.com/caiorafael/3dev-editor/blob/main/src/main/ipc.ts): `src/main/ipc.ts`
- [Preload bridge](https://github.com/caiorafael/3dev-editor/blob/main/src/preload/index.ts): `src/preload/index.ts`
- [Project files](https://github.com/caiorafael/3dev-editor/blob/main/src/main/projectFiles.ts): `src/main/projectFiles.ts`
- [Recent projects](https://github.com/caiorafael/3dev-editor/blob/main/src/main/recents.ts): `src/main/recents.ts`
- [OpenSCAD runtime](https://github.com/caiorafael/3dev-editor/blob/main/src/main/openscad.ts): `src/main/openscad.ts`
- **Local project folder**

### Other components

- **Modeler**
- **OpenSCAD**

## Connections

- Modeler → Editor shell: edits model
- Editor shell → Scene state: updates scene (evidence: `src/renderer/src/ui/AppShell.tsx`)
- Editor shell → 3D viewport: shows viewport (evidence: `src/renderer/src/ui/AppShell.tsx`)
- Editor shell → Properties inspector: shows properties (evidence: `src/renderer/src/ui/AppShell.tsx`)
- Scene state → Scene operations: applies edits (evidence: `src/renderer/src/document/store.ts`)
- Scene operations → Transforms and bounds: uses transforms (evidence: `src/renderer/src/document/tree.ts`)
- Scene state → Component files: selects active file (evidence: `src/renderer/src/document/store.ts`)
- 3D viewport → Scene state: reads scene (evidence: `src/renderer/src/viewport/FeatureView.tsx`)
- 3D viewport → Boolean geometry hook: requests geometry (evidence: `src/renderer/src/viewport/FeatureView.tsx`)
- Boolean geometry hook → Profile contours: prepares contours (evidence: `src/renderer/src/preview/useBooleanGeometry.ts`)
- Boolean geometry hook → Manifold preview: builds mesh (evidence: `src/renderer/src/preview/useBooleanGeometry.ts`)
- Boolean geometry hook → Boolean worker: dispatches heavy jobs (evidence: `src/renderer/src/preview/useBooleanGeometry.ts`)
- Boolean worker → Manifold preview: builds mesh (evidence: `src/renderer/src/preview/booleanPreview.worker.ts`)
- Manifold preview → Transforms and bounds: uses transforms (evidence: `src/renderer/src/preview/manifoldPreview.ts`)
- Editor shell → OpenSCAD generator: generates source (evidence: `src/renderer/src/ui/AppShell.tsx`)
- OpenSCAD generator → Transforms and bounds: uses geometry math (evidence: `src/renderer/src/codegen/openscad.ts`)
- OpenSCAD generator → Component files: uses file helpers (evidence: `src/renderer/src/codegen/openscad.ts`)
- Editor shell → OpenSCAD editor: offers code editing
- Exact preview → OpenSCAD generator: generates source (evidence: `src/renderer/src/viewport/ExactPreview.tsx`)
- Modeler → Exact preview: requests exact preview
- Exact preview → Electron IPC: requests preview
- Modeler → Preload bridge: opens project
- Preload bridge → Electron IPC: bridges requests (evidence: `src/preload/index.ts`)
- Electron IPC → OpenSCAD runtime: invokes runtime (evidence: `src/main/ipc.ts`)
- Electron IPC → Project files: handles project files (evidence: `src/main/ipc.ts`)
- Electron IPC → Recent projects: manages recents (evidence: `src/main/ipc.ts`)
- Project files → Local project folder: reads and writes (evidence: `src/main/projectFiles.ts`)
- Recent projects → Local project folder: stores recents
- OpenSCAD runtime → OpenSCAD: runs previews and exports
