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 |
|---|---|---|
Create custom JS library (lib/gl_immediate_shim.js) that fixes two Emscripten LEGACY_GL_EMULATION issues without modifying KiCad source: 1. Color-per-vertex requirement: Emscripten requires glColor before each glVertex, but standard OpenGL uses persistent "current color". The shim tracks color state and auto-injects before each vertex. 2. Missing double-precision functions: glVertex2d, glVertex3d, glColor3d, glColor4d are unimplemented in Emscripten (wontfix). The shim provides these as wrappers to float variants. Update test code to use standard OpenGL patterns (color set once, multiple vertices) to verify the shim works correctly. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
| cmake | ||
| core | ||
| docs | ||
| kicad@4bfed3f174 | ||
| lib | ||
| patches | ||
| scripts | ||
| stubs | ||
| tests | ||
| wxwidgets@54beb85efd | ||
| wxWidgets-wasm-reference@293bd9feba | ||
| .gitignore | ||
| .gitmodules | ||
| 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.