{"repo":"xiangechen/chili3d","free":true,"listed":false,"github":"https://github.com/xiangechen/chili3d","clone":"git clone https://github.com/xiangechen/chili3d.git","description":"A 3D CAD running entirely in the browser","language":"TypeScript","stars":4738,"topics":["3d","browser-based","cad","geometry","occ","occt","opencascade","three","threejs","wasm","webassembly","webcad"],"license":"AGPL-3.0","category":"cad_tool","readme_excerpt":"# Chili3D\n\nA browser-based 3D CAD application for online model design and editing.\n\n![Screenshot](./screenshots/screenshot.png)\n\n## Overview\n\n[Chili3D](https://chili3d.com) is an [open-source](https://github.com/xiangechen/chili3d) browser-based 3D CAD (Computer-Aided Design) application built with TypeScript. It achieves near-native performance by compiling OpenCascade (OCCT) to WebAssembly and integrating with Three.js, enabling powerful online modeling, editing, and rendering — all without requiring local installation.\n\nYou can access Chili3D online at:\n\n- Official website: [chili3d.com](https://chili3d.com)\n- Cloudflare deployment: [chili3d.pages.dev](https://chili3d.pages.dev)\n\n## Features\n\n### Modeling Tools\n\n- **Basic Shapes**: Create boxes, cylinders, cones, spheres, pyramids, torus, and more\n- **2D Sketching**: Draw lines, arcs, circles, ellipses, rectangles, polygons, and Bézier curves\n- **Advanced Operations**:\n    - Boolean operations (union, difference, intersection)\n    - Extrusion and revolution\n    - Sweeping and lofting\n    - Offset surfaces and thick solid\n    - Linear and circular arrays\n    - Shape checking and repair\n\n### Snapping and Tracking\n\n- **Object Snapping**: Precisely snap to geometric features (points, edges, faces)\n- **Workplane Snapping**: Snap to the current workplane for accurate planar operations\n- **Axis Tracking**: Create objects along tracked axes for precise alignment\n- **Feature Point Detection**: Automatically detect and snap to key geometric features\n- **Tracking Visualization**: Visual guides showing tracking lines and reference points\n\n### Editing Tools\n\n- **Modification**: Chamfer, fillet, trim, break, split, sew, simplify\n- **Transformation**: Move, rotate, mirror, linear array, circular array\n- **Advanced Editing**:\n    - Feature removal\n    - Sub-shape manipulation\n    - Explode compound objects\n\n### Measurement Tools\n\n- Measure angles and lengths\n- Calculate the sum of length, area, and volume\n\n### Document Management\n\n- Create, open, and save documents\n- Full undo/redo stack with transaction history\n- Import/export of industry-standard formats (STEP, IGES, BREP, STL)\n\n### User Interface\n\n- Office-style ribbon interface with contextual command organization\n- Hierarchical assembly management with flexible grouping capabilities\n- Dynamic workplane support\n- 3D viewport with camera controls and camera position recall\n- Command context panel integrated into the viewport\n\n### Plugin System\n\nChili3D supports a runtime plugin system with dynamic loading via URL parameters (`?plugin=`). Example plugins include:\n\n- **helloworld-js** / **helloworld-ts** — Demo plugins showcasing the plugin API\n- **macro** — Create, edit, and run macros to automate repetitive tasks\n- **visual-programming** — Visual programming with a node-based editor (powered by Rete.js)\n\n### Localization\n\n- **Multi-Language Support**: Built-in internationalization (i18n) with seamless locale switching\n- **Current Languages**: Chinese (zh-cn), English (en), Portuguese — Brazil (pt-br)\n- Contributions for additional languages are welcome\n\n## Architecture\n\nChili3D uses an npm workspace monorepo under `packages/` with an interface-driven, pluggable backend architecture:\n\n```\nweb ──> builder ──> app ──> core\n                  ──> i18n ──> core\n                  ──> three ──> core\n                  ──> ui ──> core + element\n                  ──> wasm ──> core\n                  ──> storage ──> core\n\nelement ──> core\n```\n\n- **`core`** — Abstract interfaces (`IShape`, `IShapeFactory`), math (`XYZ`, `Matrix4`, `Plane`), document model, reactive data (`Observable`, `Binding`, `PubSub`), `Result<T,E>`, transactions/undo/redo, commands, serialization, plugin system, service container, UI abstractions\n- **`wasm`** — Concrete `ShapeFactory` calling into OCCT via Emscripten bindings\n- **`three`** — Three.js viewport, camera controller, visual objects, highlighter, outline pass, gizmo, mesh export\n- **`element`** — Custom reactive DOM elements (radio groups, expanders, data converters)\n- **`ui`** — Application chrome: main window, ribbon/toolbar, property panels, project tree, dialogs, toast, status bar\n- **`app`** — Concrete `Application`, body node classes, command implementations, `CommandService`, `HotkeyService`\n- **`builder`** — `AppBuilder` with a fluent `.useIndexedDB().useWasmOcc().useThree().useUI().build()` chain and default ribbon layout\n- **`i18n`** — Locale data (en, zh-cn, pt-br)\n- **`storage`** — IndexedDB persistence layer\n- **`web`** — Entry point: calls `AppBuilder`, shows loading screen, parses URL parameters\n\n## Technology Stack\n\n- **Frontend**: TypeScript, Three.js (0.184)\n- **3D Kernel**: OpenCascade 8.0.0 (OCCT) compiled to WebAssembly via Emscripten\n- **Bundler**: Rspack 2\n- **Linting & Formatting**: Biome (TypeScript), clang-format (C++)\n- **Testing**: Rstest + Happy-DOM\n- **Package Manager**: npm workspaces\n\n## Changelog\n\nYou can view the full changelog [here](https://github.com/xiangechen/chili3d/releases).\n\nFor Chinese users, you can also browse the [media](https://space.bilibili.com/539380032/lists/3108412?type=season).\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js\n- npm\n\n### Installation\n\n1. Clone the repository\n\n    ```bash\n    git clone https://github.com/xiangechen/chili3d.git\n    cd chili3d\n    ```\n\n2. Install dependencies\n\n    ```bash\n    npm install\n    ```\n\n### Development\n\nStart the development server:\n\n```bash\nnpm run dev   # Launches at http://localhost:8080\n```\n\n### Building\n\nBuild the application:\n\n```bash\nnpm run build\n```\n\n### WASM Build (Optional)\n\nThe prebuilt WASM module is included in the repository. If you want to build it from source:\n\n1. Set up WebAssembly dependencies (one-time setup):\n\n    ```bash\n    npm run setup:wasm\n    ```\n\n2. Build the WebAssembly module:\n\n    ```bash\n    npm run build:wasm\n    ```\n\n### Testing & Linting\n\n```bash\nnpm run test    # Run all tests (Rstest + Happy-DOM)\nnpm run testc   # Tests with coverage\nnpm run check   # Biome lint + auto-fix\nnpm run format  # Biome + clang-format across all files\n```\n\n### Docker\n\nYou can also deploy with Docker:\n\n```bash\ndocker compose up -d   # Builds and serves the app at http://localhost:8080\n```\n\n## Code Style\n\n- **TypeScript**: Biome for linting and formatting — 4-space indent, 110-char line width, double quotes, semicolons always\n- **C++**: clang-format with WebKit style\n- Interfaces prefixed with `I` (`IShape`, `ICommand`)\n- `camelCase` functions/variables, `PascalCase` classes, `UPPER_SNAKE_CASE` constants\n- Type-only imports: `import type { IFoo } from \"...\"`\n- Pre-commit hooks via simple-git-hooks + lint-staged\n\n## Contributing\n\nWe welcome contributions! Please feel free to submit pull requests or open issues.\n\nBefore submitting a PR, run `npm run check` to ensure your code passes linting.\n\n## Contact\n\n- **Discussions**: Join our [GitHub discussions](https://github.com/xiangechen/chili3d/discussions) for general chat or questions\n- **Issues**: Use [GitHub issues](https://github.com/xiangechen/chili3d/issues) to report suggestions or bugs\n- **Email**: Contact us privately at xiangetg@msn.cn\n\n## License\n\nDistributed under the GNU Affero General Public License v3.0 (AGPL-3.0). For commercial licensing options, contact xiangetg@msn.cn.\n\nFull license details: [LICENSE](LICENSE)\n\nThe C++ WASM module (`cpp/`) is licensed under LGPL-3.0.\n\n## Analytics Notice\n\nChili3D uses [Microsoft Clarity](https://clarity.microsoft.com) for growth analytics. To disable data collection, remove the Clarity script from `public/index.html`.\n\n## Disclaimer\n\nThis software is provided \"AS IS,\" and the authors and contributors hereby disclaim all express and implied warranties. The user shall bear full responsibility for any and all risks and potential consequences arising from the use of this software. Such risks and consequences include, but are not limited to:\n\n1. Data loss, system failures, or any direct or indirect damages;\n2. Conduct violating applicable laws or regulations resulting from software usage and its consequences;\n3. All liabilities arising from the software's use for illegal purposes or activities.\n","default_branch":"main","files":882,"tree":[".github/workflows/main.yml",".gitignore",".vscode/c_cpp_properties.json",".vscode/launch.json",".vscode/settings.json","AGENTS.md","CLAUDE.md","Dockerfile","LICENSE","README.md","biome.json","compose.yml","cpp/CMakeLists.txt","cpp/CMakePresets.json","cpp/LICENSE-chili-wasm.txt","cpp/README.md","cpp/src/converter.cpp","cpp/src/factory.cpp","cpp/src/geometry.cpp","cpp/src/helps.cpp","cpp/src/mesher.cpp","cpp/src/opencascade.cpp","cpp/src/shape.cpp","cpp/src/shared.cpp","cpp/src/shared.hpp","cpp/src/transient.cpp","cpp/src/utils.cpp","cpp/src/utils.hpp","package-lock.json","package.json","packages/app/package.json","packages/app/src/application.ts","packages/app/src/bodys/arc.ts","packages/app/src/bodys/boolean.ts","packages/app/src/bodys/box.ts","packages/app/src/bodys/circle.ts","packages/app/src/bodys/cone.ts","packages/app/src/bodys/cylinder.ts","packages/app/src/bodys/ellipse.ts","packages/app/src/bodys/extrude.ts","packages/app/src/bodys/face.ts","packages/app/src/bodys/fuse.ts","packages/app/src/bodys/index.ts","packages/app/src/bodys/line.ts","packages/app/src/bodys/pipe.ts","packages/app/src/bodys/point.ts","packages/app/src/bodys/polygon.ts","packages/app/src/bodys/pyramid.ts","packages/app/src/bodys/rect.ts","packages/app/src/bodys/regularPolygon.ts","packages/app/src/bodys/revolve.ts","packages/app/src/bodys/sphere.ts","packages/app/src/bodys/sweep.ts","packages/app/src/bodys/wire.ts","packages/app/src/commands/application/index.ts","packages/app/src/commands/application/newDocument.ts","packages/app/src/commands/application/openDocument.ts","packages/app/src/commands/application/performanceTest.ts","packages/app/src/commands/application/saveDocument.ts","packages/app/src/commands/application/toFile.ts","packages/app/src/commands/application/toggleDynamicWorkplane.ts","packages/app/src/commands/application/wechatGroup.ts","packages/app/src/commands/boolean.ts","packages/app/src/commands/checkShape.module.css","packages/app/src/commands/checkShape.ts","packages/app/src/commands/create/arc.ts","packages/app/src/commands/create/arc2point.ts","packages/app/src/commands/create/arc3point.ts","packages/app/src/commands/create/arcUtils.ts","packages/app/src/commands/create/bezier.ts","packages/app/src/commands/create/box.ts","packages/app/src/commands/create/circle.ts","packages/app/src/commands/create/cone.ts","packages/app/src/commands/create/converter.ts","packages/app/src/commands/create/copySubShape.ts","packages/app/src/commands/create/curveProjection.ts","packages/app/src/commands/create/cylinder.ts","packages/app/src/commands/create/ellipse.ts","packages/app/src/commands/create/extrude.ts","packages/app/src/commands/create/group.ts","packages/app/src/commands/create/index.ts","packages/app/src/commands/create/line.ts","packages/app/src/commands/create/loft.ts","packages/app/src/commands/create/offset.ts","packages/app/src/commands/create/pipe.ts","packages/app/src/commands/create/point.ts","packages/app/src/commands/create/polygon.ts","packages/app/src/commands/create/pyramid.ts","packages/app/src/commands/create/rect.ts","packages/app/src/commands/create/refSegment.ts","packages/app/src/commands/create/regularPolygon.ts","packages/app/src/commands/create/revolve.ts","packages/app/src/commands/create/section.ts","packages/app/src/commands/create/sphere.ts","packages/app/src/commands/create/sweep.ts","packages/app/src/commands/create/thickSolid.ts","packages/app/src/commands/createActCommand.ts","packages/app/src/commands/createCommand.ts","packages/app/src/commands/delete.ts","packages/app/src/commands/folder.ts","packages/app/src/commands/importExport.ts","packages/app/src/commands/index.ts","packages/app/src/commands/measure/angle.ts","packages/app/src/commands/measure/index.ts","packages/app/src/commands/measure/length.ts","packages/app/src/commands/measure/select.module.css","packages/app/src/commands/measure/select.ts","packages/app/src/commands/modify/array.ts","packages/app/src/commands/modify/break.ts","packages/app/src/commands/modify/brush.ts","packages/app/src/commands/modify/chamfer.ts","packages/app/src/commands/modify/edgeCornerCommand.ts","packages/app/src/commands/modify/explode.ts","packages/app/src/commands/modify/extend.ts","packages/app/src/commands/modify/fillet.ts","packages/app/src/commands/modify/index.ts","packages/app/src/commands/modify/mirror.ts","packages/app/src/commands/modify/move.ts","packages/app/src/commands/modify/paintBucket.ts","packages/app/src/commands/modify/removeFeature.ts","packages/app/src/commands/modify/removeSubShapes.ts","packages/app/src/commands/modify/repair.ts","packages/app/src/commands/modify/rotate.ts","packages/app/src/commands/modify/sew.ts","packages/app/src/commands/modify/shell.ts","packages/app/src/commands/modify/simplify.ts","packages/app/src/commands/modify/split.ts","packages/app/src/commands/modify/transformedCommand.ts","packages/app/src/commands/modify/trim.ts","packages/app/src/commands/redo.ts","packages/app/src/commands/undo.ts","packages/app/src/commands/workingPlane.ts","packages/app/src/document.ts","packages/app/src/index.ts","packages/app/src/picker.ts","packages/app/src/pluginManager.ts","packages/app/src/selectionManager.ts","packages/app/src/services/commandService.ts","packages/app/src/services/hotkeyService.ts","packages/app/src/services/index.ts","packages/app/src/showPropertyEventHandler.ts","packages/app/src/utils.ts","packages/app/test/application.test.ts","packages/app/test/bodys/_utils.ts","packages/app/test/bodys/arc.test.ts","packages/app/test/bodys/boolean.test.ts","packages/app/test/bodys/box.test.ts","packages/app/test/bodys/circle.test.ts","packages/app/test/bodys/cone.test.ts","packages/app/test/bodys/cylinder.test.ts","packages/app/test/bodys/ellipse.test.ts","packages/app/test/bodys/extrude.test.ts","packages/app/test/bodys/face.test.ts","packages/app/test/bodys/fuse.test.ts","packages/app/test/bodys/line.test.ts","packages/app/test/bodys/pipe.test.ts","packages/app/test/bodys/pipeAdvanced.test.ts","packages/app/test/bodys/point.test.ts","packages/app/test/bodys/polygon.test.ts","packages/app/test/bodys/pyramid.test.ts","packages/app/test/bodys/rect.test.ts","packages/app/test/bodys/regularPolygon.test.ts","packages/app/test/bodys/revolve.test.ts","packages/app/test/bodys/sphere.test.ts","packages/app/test/bodys/sweep.test.ts","packages/app/test/bodys/wire.test.ts","packages/app/test/bodys/wireFilletBuilder.test.ts","packages/app/test/commands/application/newDocument.test.ts","packages/app/test/commands/application/openDocument.test.ts","packages/app/test/commands/application/performanceTest.test.ts","packages/app/test/commands/application/saveDocument.test.ts","packages/app/test/commands/application/toFile.test.ts","packages/app/test/commands/application/toggleDynamicWorkplane.test.ts","packages/app/test/commands/application/wechatGroup.test.ts","packages/app/test/commands/boolean.test.ts","packages/app/test/commands/checkShape.test.ts","packages/app/test/commands/commandTestUtils.ts","packages/app/test/commands/create/arc.test.ts","packages/app/test/commands/create/arc2point.test.ts","packages/app/test/commands/create/arc3point.test.ts","packages/app/test/commands/create/arcUtils.test.ts","packages/app/test/commands/create/bezier.test.ts","packages/app/test/commands/create/box.test.ts","packages/app/test/commands/create/circle.test.ts","packages/app/test/commands/create/cone.test.ts","packages/app/test/commands/create/converter.test.ts","packages/app/test/commands/create/copySubShape.test.ts","packages/app/test/commands/create/curveProjection.test.ts","packages/app/test/commands/create/cylinder.test.ts","packages/app/test/commands/create/ellipse.test.ts","packages/app/test/commands/create/extrude.test.ts","packages/app/test/commands/create/group.test.ts","packages/app/test/commands/create/groupAdvanced.test.ts","packages/app/test/commands/create/line.test.ts","packages/app/test/commands/create/loft.test.ts","packages/app/test/commands/create/offset.test.ts","packages/app/test/commands/create/pipe.test.ts","packages/app/test/commands/create/point.test.ts","packages/app/test/commands/create/polygon.test.ts","packages/app/test/commands/create/pyramid.test.ts","packages/app/test/commands/create/rect.test.ts","packages/app/test/commands/create/refSegment.test.ts","packages/app/test/commands/create/regularPolygon.test.ts","packages/app/test/commands/create/revolve.test.ts","packages/app/test/commands/create/section.test.ts","packages/app/test/commands/create/sphere.test.ts","packages/app/test/commands/create/sweep.test.ts","packages/app/test/commands/create/thickSolid.test.ts","packages/app/test/commands/createActCommand.test.ts","packages/app/test/commands/createCommand.test.ts","packages/app/test/commands/delete.test.ts","packages/app/test/commands/folder.test.ts","packages/app/test/commands/importExport.test.ts","packages/app/test/commands/measure/angle.test.ts","packages/app/test/commands/measure/length.test.ts","packages/app/test/commands/measure/select.test.ts","packages/app/test/commands/modify/array.test.ts","packages/app/test/commands/modify/break.test.ts","packages/app/test/commands/modify/brush.test.ts","packages/app/test/commands/modify/chamfer.test.ts","packages/app/test/commands/modify/explode.test.ts","packages/app/test/commands/modify/extend.test.ts","packages/app/test/commands/modify/fillet.test.ts","packages/app/test/commands/modify/mirror.test.ts","packages/app/test/commands/modify/move.test.ts","packages/app/test/commands/modify/paintBucket.test.ts","packages/app/test/commands/modify/removeFeature.test.ts","packages/app/test/commands/modify/removeSubShapes.test.ts","packages/app/test/commands/modify/repair.test.ts","packages/app/test/commands/modify/rotate.test.ts","packages/app/test/commands/modify/sew.test.ts","packages/app/test/commands/modify/shell.test.ts","packages/app/test/commands/modify/simplify.test.ts","packages/app/test/commands/modify/split.test.ts","packages/app/test/commands/modify/transformedCommand.test.ts","packages/app/test/commands/modify/trim.test.ts","packages/app/test/commands/redo.test.ts","packages/app/test/commands/undo.test.ts","packages/app/test/commands/workingPlane.test.ts","packages/app/test/document.test.ts","packages/app/test/picker.test.ts","packages/app/test/pluginManager.test.ts","packages/app/test/pluginManager.untrustedDomains.test.ts","packages/app/test/selection.test.ts","packages/app/test/services/commandService.test.ts","packages/app/test/services/hotkeyService.test.ts","packages/app/test/showPropertyEventHandler.test.ts","packages/app/test/utils.test.ts","packages/builder/package.json","packages/builder/src/appBuilder.ts","packages/builder/src/defaultDataExchange.ts","packages/builder/src/index.ts","packages/builder/src/ribbon.ts","packages/builder/test/appBuilder.test.ts","packages/builder/test/defaultDataExchange.test.ts","packages/builder/test/ribbon.test.ts","packages/core/package.json","packages/core/src/application.ts","packages/core/src/command/command.ts","packages/core/src/command/commandData.ts","packages/core/src/command/commandKeys.ts","packages/core/src/command/commandStore.ts","packages/core/src/command/decorator.ts","packages/core/src/command/index.ts","packages/core/src/command/multistepCommand.ts","packages/core/src/command/shortcutProfiles.ts","packages/core/src/config.ts","packages/core/src/constants.ts","packages/core/src/dataExchange.ts","packages/core/src/document.ts","packages/core/src/editor.ts","packages/core/src/eventHandlers/index.ts","packages/core/src/eventHandlers/nodeSelectionEventHandler.ts","packages/core/src/eventHandlers/selectionEventHandler.ts","packages/core/src/eventHandlers/shapeSelectionEventHandler.ts","packages/core/src/foundation/asyncController.ts","packages/core/src/foundation/binding.ts","packages/core/src/foundation/collection.ts","packages/core/src/foundation/comparers/NumberEqualityComparer.ts","packages/core/src/foundation/comparers/XYZEqualityComparer.ts","packages/core/src/foundation/comparers/index.ts","packages/core/src/foundation/converter.ts","packages/core/src/foundation/deepObserver.ts","packages/core/src/foundation/disposable.ts","packages/core/src/foundation/dto/index.ts","packages/core/src/foundation/equalityComparer.ts","packages/core/src/foundation/gc.ts","packages/core/src/foundation/history.ts","packages/core/src/foundation/id.ts","packages/core/src/foundation/index.ts","packages/core/src/foundation/lazy.ts","packages/core/src/foundation/linkedList.ts","packages/core/src/foundation/logger.ts","packages/core/src/foundation/messageType.ts","packages/core/src/foundation/objectStorage.ts","packages/core/src/foundation/observer.ts","packages/core/src/foundation/precision.ts","packages/core/src/foundation/pubsub.ts","packages/core/src/foundation/result.ts","packages/core/src/foundation/signal.ts","packages/core/src/foundation/storage.ts","packages/core/src/foundation/transaction.ts","packages/core/src/foundation/utils/debounce.ts","packages/core/src/foundation/utils/download.ts","packages/core/src/foundation/utils/index.ts","packages/core/src/foundation/utils/readFileAsync.ts","packages/core/src/i18n/i18n.ts","packages/core/src/i18n/index.ts","packages/core/src/i18n/keys.ts","packages/core/src/index.ts","packages/core/src/material.ts","packages/core/src/math/boundingBox.ts","packages/core/src/math/index.ts","packages/core/src/math/line.ts","packages/core/src/math/lineSegment.ts","packages/core/src/math/mathUtils.ts","packages/core/src/math/matrix4.ts","packages/core/src/math/plane.ts","packages/core/src/math/planeAngle.ts","packages/core/src/math/quaternion.ts","packages/core/src/math/ray.ts","packages/core/src/math/xy.ts","packages/core/src/math/xyz.ts","packages/core/src/model/annotation.ts","packages/core/src/model/component.ts","packages/core/src/model/facebaseNode.ts","packages/core/src/model/folderNode.ts","packages/core/src/model/geometryNode.ts","packages/core/src/model/groupNode.ts","packages/core/src/model/index.ts","packages/core/src/model/meshNode.ts","packages/core/src/model/node.ts","packages/core/src/model/shapeNode.ts","packages/core/src/model/visualNode.ts","packages/core/src/modelManager.ts","packages/core/src/navigation.ts","packages/core/src/plugin/index.ts","packages/core/src/plugin/manager.ts","packages/core/src/plugin/manifest.ts","packages/core/src/plugin/plugin.ts","packages/core/src/property.ts","packages/core/src/selection.ts","packages/core/src/selectionFilter.ts","packages/core/src/serialize/index.ts","packages/core/src/serialize/serializer.ts","packages/core/src/service.ts","packages/core/src/shape/curve.ts","packages/core/src/shape/geometry.ts","packages/core/src/shape/geometryUtils.ts","packages/core/src/shape/index.ts","packages/core/src/shape/lineType.ts","packages/core/src/shape/meshData.ts","packages/core/src/shape/meshUtils.ts","packages/core/src/shape/shape.ts","packages/core/src/shape/shapeConverter.ts","packages/core/src/shape/shapeFactory.ts","packages/core/src/shape/shapeProvider.ts","packages/core/src/shape/shapeType.ts","packages/core/src/shape/surface.ts","packages/core/src/snap/dimension.ts","packages/core/src/snap/handlers/angleSnapEventHandler.ts","packages/core/src/snap/handlers/index.ts","packages/core/src/snap/handlers/lengthSnapEventHandler.ts","packages/core/src/snap/handlers/pointSnapEventHandler.ts","packages/core/src/snap/handlers/snapEventHandler.ts","packages/core/src/snap/index.ts","packages/core/src/snap/snap.ts","packages/core/src/snap/snaps/axisSnap.ts","packages/core/src/snap/snaps/baseSnap.ts","packages/core/src/snap/snaps/index.ts","packages/core/src/snap/snaps/objectSnap.ts","packages/core/src/snap/snaps/planeSnap.ts","packages/core/src/snap/snaps/pointOnCurveSnap.ts","packages/core/src/snap/snaps/surfaceSnap.ts","packages/core/src/snap/tracking/axis.ts","packages/core/src/snap/tracking/axisTracking.ts","packages/core/src/snap/tracking/index.ts","packages/core/src/snap/tracking/objectTracking.ts","packages/core/src/snap/tracking/trackingBase.ts","packages/core/src/snap/tracking/trackingSnap.ts","packages/core/src/snapType.ts","packages/core/src/step/angleStep.ts","packages/core/src/step/index.ts","packages/core/src/step/lengthStep.ts","packages/core/src/step/pointStep.ts","packages/core/src/step/selectStep.ts","packages/core/src/step/step.ts","packages/core/src/ui/button.ts","packages/core/src/ui/combobox.ts","packages/core/src/ui/dialog.ts","packages/core/src/ui/floatPanel.ts","packages/core/src/ui/index.ts","packages/core/src/ui/ribbon.ts","packages/core/src/ui/window.ts","packages/core/src/visual/act.ts","packages/core/src/visual/cameraController.ts","packages/core/src/visual/cursorType.ts","packages/core/src/visual/detectedData.ts","packages/core/src/visual/eventHandler.ts","packages/core/src/visual/highlighter.ts"],"storefront":"/r/xiangechen","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/xiangechen/chili3d/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}