Self-hosted emergence-engineering/pcbjam (browser KiCad WASM) — CMMS embed fork. Upstream tracked as remote "upstream".
- TypeScript 49.1%
- C++ 36%
- Shell 4.2%
- C 2.9%
- JavaScript 2.6%
- Other 5.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Build system improvements: - Add wasm-opt stub for Docker build to bypass asyncify in container - Add apply-asyncify.sh script for host-side asyncify transformation - Update build-pcbnew.sh to install wasm-opt stub and add EXPORTED_RUNTIME_METHODS - Add --with-zlib=sys to wxWidgets configure for proper zlib linking - Improve update-baseline-screenshots.sh to only copy new/significantly changed files wxWidgets submodule update: - Fix EM_JS to EM_ASYNC_JS for proper Asyncify registration Test updates: - Add new baseline screenshots for bitmapbuttons, dnd, gridrenderers, printpreview, specialized tests - Add kicad-pcbnew initial screenshot - Fix wxgrid-controls.png and wxgrid-dedicated-page.png (were showing errors) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
||
| cmake | ||
| core | ||
| docker | ||
| docs | ||
| kicad@e6a59ab94a | ||
| lib | ||
| patches | ||
| scripts | ||
| stubs | ||
| tests | ||
| wasm | ||
| wxwidgets@08794a9f57 | ||
| wxWidgets-wasm-reference@293bd9feba | ||
| .dockerignore | ||
| .gitignore | ||
| .gitmodules | ||
| build.md | ||
| CLAUDE.md | ||
| CMakeLists.txt | ||
| README.md | ||
KiCad WebAssembly Port
Experimental project to run KiCad's core logic in WebAssembly.
Project Structure
kicad-wasm/
├── kicad/ # KiCad source (git submodule)
├── patches/ # Patches for KiCad source
│ └── 0001-wasm-optional-deps.patch
├── stubs/ # Stub implementations for disabled deps
│ ├── include/ # Stub headers
│ │ ├── curl/ # CURL stub headers
│ │ ├── git2.h # libgit2 stub header
│ │ ├── ngspice/ # ngspice stub headers
│ │ └── Standard_Version.hxx # OCC stub header
│ └── src/ # Stub source files
│ ├── disabled_features_stubs.cpp
│ ├── occ_stubs.cpp
│ ├── panel_git_repos_stub.cpp
│ └── kicad_git_all_stubs.cpp
├── cmake/ # CMake override modules
│ ├── FindCURL.cmake
│ ├── Findlibgit2.cmake
│ ├── Findngspice.cmake
│ └── FindOCC.cmake
├── scripts/ # Build scripts
└── docs/ # Documentation
Goals
- Phase 1: Build KiCad with optional deps disabled (curl, git, OCC, ngspice) ✅ Complete
- Phase 2: Extract core computation code as standalone library
- Phase 3: Compile core to WebAssembly
- Phase 4: Run native GUI with Wasm worker backend
- Phase 5: Browser-based UI
Documentation
Design Decisions
- Memory: Serialize/deserialize on every operation (proof of concept)
- Threading: Web Workers (browser-first design)
- Updates: Full board re-serialization
Getting Started
Prerequisites
- CMake 3.22+
- C++20 compiler (GCC 10+, Clang 12+, or MSVC 2019+)
- wxWidgets 3.2+
- Required libraries
macOS (Homebrew)
brew install cmake wxwidgets boost cairo pixman freetype harfbuzz fontconfig \
glm glew swig protobuf pkg-config nng python@3.14 zstd unixodbc
Ubuntu/Debian
sudo apt install cmake build-essential libwxgtk3.2-dev libboost-all-dev \
libcairo2-dev libpixman-1-dev libfreetype-dev libharfbuzz-dev \
libfontconfig-dev libglm-dev libglew-dev swig libprotobuf-dev \
protobuf-compiler libnng-dev python3-dev libzstd-dev
Quick Start (with dependencies disabled)
# Clone with submodules
git clone --recursive <repo-url>
cd kicad-wasm
# Apply patches to KiCad source
cd kicad
git apply ../patches/0001-wasm-optional-deps.patch
cd ..
# Build
mkdir build && cd build
cmake ../kicad \
-DCMAKE_MODULE_PATH="$(pwd)/../cmake" \
-DKICAD_USE_CURL=OFF \
-DKICAD_USE_GIT=OFF \
-DKICAD_USE_OCC=OFF \
-DKICAD_USE_NGSPICE=OFF \
-DKICAD_SCRIPTING_WXPYTHON=OFF
make -j$(nproc)
Build Options
| Option | Default | Description |
|---|---|---|
KICAD_USE_CURL |
ON | Enable network features (PCM, update check) |
KICAD_USE_GIT |
ON | Enable git integration |
KICAD_USE_OCC |
ON | Enable OpenCASCADE (STEP import/export) |
KICAD_USE_NGSPICE |
ON | Enable SPICE simulation |
KICAD_USE_DATABASE |
ON | Enable database libraries (ODBC) |
Using the Build Script
# Build with all optional deps disabled (default)
./scripts/build.sh
# Build with specific features enabled
./scripts/build.sh --with-curl --with-git
# Clean build
./scripts/build.sh --clean
# Debug build
./scripts/build.sh --debug
# Just configure, don't build
./scripts/build.sh --configure-only
# See all options
./scripts/build.sh --help
Current Status
Phase 1 Complete
- CMake override modules for optional dependencies (FindOCC, Findngspice, FindCURL, Findlibgit2)
- Stub headers and implementations for disabled features
- KiCad source patches (
patches/0001-wasm-optional-deps.patch) - Full native build verified on macOS with all optional deps disabled
Built Components
kicad- Main applicationkicad-cli- Command line interface_pcbnew.kiface- PCB editor_eeschema.kiface- Schematic editor_cvpcb.kiface- Component to footprint association_gerbview.kiface- Gerber viewer_pl_editor.kiface- Page layout editor_pcb_calculator.kiface- PCB calculator
Next Steps
- Verify build on Linux/Windows
- Begin Phase 2 (core library extraction)
License
KiCad is GPL-3.0. This wrapper/tooling follows the same license.