Repository: https://github.com/trailcode/EzyCad
EzyCad (Easy CAD) is an open-source CAD application for hobbyist machinists to design and edit 2D and 3D models for machining projects. It supports creating precise parts with tools for sketching, extruding, and applying geometric operations, using OpenGL, Dear ImGui, and Open CASCADE Technology (OCCT). Export models to formats like STEP or STL for CNC machines or 3D printers, or run EzyCad in your browser (WebAssembly). Project home: trailcode.github.io/EzyCad.
Not EZCAD laser software: EzyCad (with a y) is hobbyist mechanical CAD built on OCCT — unrelated to EZCAD2/EZCAD3 laser marking products.
Prebuilt Windows binaries (portable .zip containing EzyCad.exe + all required DLLs and assets) are published on the GitHub Releases page.
- Go to Releases → expand "Assets" under the latest version.
- Download
EzyCad-vX.Y.Z-windows-x64.zip(or the equivalent name), unzip, and runEzyCad.exe. - No installer is required; the zip is self-contained.
WebAssembly (browser) version: Run EzyCad directly in your browser (no download needed).
For source builds or other platforms, see the Building Instructions below.
- 2D and 3D modeling capabilities.
- Integration with Open CASCADE for geometric operations.
- Cross-platform support with Emscripten for WebAssembly builds.
- Interactive GUI built with ImGui.
Online: ezycad.readthedocs.io (built from this repo on Read the Docs).
Source: usage.md and related guides in docs/ (usage-sketch.md, usage-settings.md, usage-occt-view.md, etc.). They cover the user interface, modeling tools, keyboard shortcuts, and view controls.
Release history is in CHANGELOG.md (repository root). The user guides now live in the docs/ folder (together with building-occt.md, style guides, etc.). With the CMake Visual Studio generator, documentation files appear under a docs folder (and the two root docs at project root) on the EzyCad / EzyCad_lib targets in Solution Explorer.
Ensure the following dependencies are installed:
- CMake (minimum version 3.14.0)
- Nuget command line utility
- A C++ 20 compatible compiler (e.g., MSVC, GCC, or Clang)
- OpenGL development libraries
- Open CASCADE Technology (OCCT 8.0.0) https://github.com/Open-Cascade-SAS/OCCT
Full guide: docs/building-occt.md (Windows prebuilts, wasm/Emscripten, troubleshooting).
- See: https://dev.opencascade.org/doc/overview/html/build_upgrade__building_occt.html
- OCCT 3rd-party binaries: https://github.com/Open-Cascade-SAS/OCCT/releases/download/V8_0_0/3rdparty-vc14-64.zip
- Currently building EzyCad has only been tested with the Release build of OCCT.
- Or download pre-built binaries: https://github.com/Open-Cascade-SAS/OCCT/releases/tag/V8_0_0
- Clone the repository.
- Create a build directory, e.g.,
C:\src\EzyCad_build. - Configure the project in the build directory using CMake:
- E.g.,
cmake C:\src\EzyCad -DOpenCASCADE_DIR=C:\bin\OCCT-8_0_0_install\cmake -DOCCT_3RD_PARTY_DIR=C:\bin\3rdparty-vc14-64 OCCT_3RD_PARTY_DIRshould point to the OCCT 3rd-party distribution.- CMake will use
nugetto download additional dependencies.
- E.g.,
- Build the project.
- Ensure
nugetis installed for fetching dependencies like GLFW and GLEW. - Use Visual Studio as the IDE for debugging and building.
- Install Emscripten and activate its environment (
emsdk_env). - OCCT 8.0.0 for wasm (recommended, current default): Use the automated script
scripts\build-occt-v8-wasm.ps1(or .cmd) afteremsdk_env— see docs/building-occt.md. - Configure the EzyCad project with Emscripten (Ninja recommended now):
mkdir build_emthencd build_em- Add -Wno-dev to suppress any remaining CMake developer warnings.
emcmake cmake .. -Wno-dev -G Ninja -DOpenCASCADE_DIR=C:/path/to/occt-wasm-build/install/lib/cmake/opencascade -DCMAKE_BUILD_TYPE=Release - If configure freezes after that warning, the hang is often in
find_package(OpenCASCADE)or Emscripten compiler detection. Run with--debug-outputto see where it stops. - Build:
ninja(oremmake cmake --build . --config Release)
- Build the project.
- Serve the WebAssembly:
python.exe -m http.server 8000from the build output directory (look forEzyCad.html+EzyCad.wasm+EzyCad.data). - Or build and serve:
ninja && python.exe -m http.server 8000 - GitHub Pages HTML: After changing
web/index.htmlorweb/EzyCad.html, sync to trailcode.github.io withscripts/sync-github-pages-html.ps1(see script header). - Dear ImGui under
third_party/imgui/carries EzyCad-specific changes (font rendering); see In-tree third-party libraries at the end of this README.
- Icons from: https://wiki.freecad.org/Artwork
- Project home: trailcode.github.io/EzyCad
- Report issues or suggest features on the GitHub repository.
- Contribute by developing features and fixing bugs. Pull requests are welcome!
- Additional resources, including video tutorials and online documentation, are linked in usage.md.
- Outreach draft posts (forums, Reddit, awesome lists): agents/discoverability-outreach.md.
EzyCad is maintained by a small team and we would love more contributors. If you can help with features, bug fixes, documentation, or testing - please jump in. Every contribution helps move the project forward.
Style guides: ezycad_code_style.md for C++ in src/; ezycad_doc_style.md for user guides and Read the Docs. Both human developers and AI coding agents should follow the relevant guide.
AI / agent instructions: Short repo-local notes for coding assistants live under agents/. Root-level discovery markers are AGENTS.md and agents.md. See agents/README.md for the index (including local dev commands in agents/dev.md).
Open CASCADE (OCCT) is not vendored here. You build or install OCCT (and its binary redistributables) outside this tree and pass OpenCASCADE_DIR / OCCT_3RD_PARTY_DIR into CMake, as in Building Instructions above.
The third_party/ folder holds other libraries shipped inside the EzyCad repository (typically committed as a vendored snapshot, not fetched by CMake except where noted):
| Component | Location | Role |
|---|---|---|
| Dear ImGui | third_party/imgui/ |
Immediate-mode UI used by the application. This tree includes project-specific changes for font rendering; see imgui#7519 (comment). |
| nlohmann/json | third_party/json/ (headers under include/) |
JSON used by the project; CMake adds third_party/json/include. |
| tinyfiledialogs | third_party/tinyfiledialogs/ |
Small C helper for native file dialogs on desktop. |
| ImGuiColorTextEdit | third_party/ImGuiColorTextEdit/ |
Syntax-highlighted editor widget for the Lua and Python script consoles (upstream). |
ImGuiColorTextEdit: Prefer a full checkout under third_party/ImGuiColorTextEdit/ (see third_party/README.md). If that folder is missing, CMake FetchContent downloads upstream at a fixed commit (ca2f9f1462e3b60e56351bc466acda448c5ea50d) because the upstream repo has no release tags. To upgrade the editor, bump that SHA in CMakeLists.txt and refresh any vendored copy.
Windows note: GLFW and GLEW for MSVC are not stored under third_party/; NuGet installs them into ${CMAKE_BINARY_DIR}/thirdParty when you configure (see Notes for Windows Users).
