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%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Viktor Vaczi f71136b50a Add Phase 3 test coverage: validators, ownerdrawn, popup, graphicsctx, xml, wasmedge
New test apps:
- validators: wxTextValidator, wxIntegerValidator, wxFloatingPointValidator, custom validators
- ownerdrawn: wxOwnerDrawnComboBox for custom dropdown rendering (layer/font/icon combos)
- popup: wxPopupTransientWindow for transient popups (status, palette, color picker)
- graphicsctx: wxGraphicsContext for vector graphics (partial WASM support)
- xml: wxXmlDocument for XML parsing (used 665 times in KiCad)
- wasmedge: WASM edge cases (file system, threading, fonts, clipboard, memory)

Updates:
- 35 test apps, 246 tests passing (~99% coverage)
- Document WASM limitations and future TODOs in WHATWORKS.md
- Add baseline screenshots for all new tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 18:54:40 +01:00
cmake Complete Phase 1: Build KiCad with optional dependencies disabled 2025-11-26 16:33:48 +01:00
core Add board_model library and Phase 3 wxUniversal plan 2025-11-27 09:24:31 +01:00
docs Fix wxChoice/wxComboBox dropdown rendering and add tests 2025-11-29 10:08:42 +01:00
kicad@4bfed3f174 Initial project setup for KiCad WebAssembly port 2025-11-26 10:46:44 +01:00
lib Add GL immediate mode shim for Emscripten compatibility 2025-11-28 21:22:09 +01:00
patches Add reproducible build system for wxWidgets WASM port 2025-11-27 15:30:10 +01:00
scripts Fix wxGrid test crash and add debug build support 2025-11-29 22:15:56 +01:00
stubs Complete Phase 1: Build KiCad with optional dependencies disabled 2025-11-26 16:33:48 +01:00
tests Add Phase 3 test coverage: validators, ownerdrawn, popup, graphicsctx, xml, wasmedge 2025-12-03 18:54:40 +01:00
wxwidgets@ea32dc67e2 Add wxDragDrop test app and document coverage gaps 2025-12-03 16:33:27 +01:00
wxWidgets-wasm-reference@293bd9feba Add reproducible build system for wxWidgets WASM port 2025-11-27 15:30:10 +01:00
.gitignore Add *.wasm.map to gitignore 2025-12-03 10:21:41 +01:00
.gitmodules Add reproducible build system for wxWidgets WASM port 2025-11-27 15:30:10 +01:00
CLAUDE.md Implement wxClipboard and add button finder utility for canvas testing 2025-12-03 10:19:50 +01:00
CMakeLists.txt Complete Phase 1: Build KiCad with optional dependencies disabled 2025-11-26 16:33:48 +01:00
README.md Complete Phase 1: Build KiCad with optional dependencies disabled 2025-11-26 16:33:48 +01:00

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

  1. Phase 1: Build KiCad with optional deps disabled (curl, git, OCC, ngspice) Complete
  2. Phase 2: Extract core computation code as standalone library
  3. Phase 3: Compile core to WebAssembly
  4. Phase 4: Run native GUI with Wasm worker backend
  5. 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 application
  • kicad-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.