Skip to the content
PCBKitNew board
2 layers12.1 × 12.1 mmRouted handoff, the printed circuit board in 3D

Routed handoff

ajayasai/OpenBumpPlan

Local-first planning for IC pads → microbumps → interposer sites → package balls → PCB sites. Edit, constrain, optimize, review and export without uploading design data.

Size
12.1 × 12.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
2
Nets
2
Pads
5
Tracks, vias
4, 2
Pours
1
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
5 Sep 2026
Updated
9 Sep 2026

Overview

Routed handoff is an open-source printed circuit board by ajayasai, from the ajayasai/OpenBumpPlan repository on GitHub, published under the MIT licence. It is a 2-layer board of 12.1 × 12.1 mm with 2 parts on 2 nets, routed with 4 tracks and 2 vias.

README

README.md

OpenBumpPlan

Open-source bump planning with replayable optimization proofs and independently checked routing geometry.

Local-first planning for IC pads → microbumps → interposer sites → package balls → PCB sites. Edit, constrain, optimize, review and export without uploading design data.

v0.4.0 · MIT license · engineering alpha. This release retains scalable certified assignments, hard-constraint search with proof replay, congestion-repair routing and continuous finite-width copper checks. It is not a qualified foundry, electrical or thermal signoff tool, and superiority over commercial EDA products has not been demonstrated.

New in v0.4.0: native interchange and independent connectivity intent

Open the Interoperability Workbench after npm start, or use the planner toolbar link. Import native KiCad terminal maps, export an unrouted native board and library footprint, verify actual exported terminals against an independent source/specification, detect opens/shorts against a separate logical contract, and preview/apply hash-bound mapping ECOs atomically. The release also fixes the tiny-positive-clearance contact acceptance issue.

Exact native-format scope, CLI commands and verification protocol. Native parser and browser evidence is available in the GitHub Actions artifacts; read actual run status rather than assuming a pass. No commercial superiority or manufacturing-signoff claim is made.

Retained v0.3.1 capability: scalable continuous copper verification

The independent copper checker now uses a conservative two-dimensional bounding-volume index before its unchanged capsule/disc distance calculation. Widths, clearances, keep-outs, layer checks and acceptance tolerances are not relaxed. A separate bounded spatial-work counter prevents pathological index traversal from receiving an all-clear result.

Five measured local runs on constructed, separated L-route fixtures:

Routes / sitesPreceding verifierv0.3.1Interpretation
64 / 1287.418 ms median6.217 ms median1.19x; both complete
256 / 51229.850 ms median28.643 ms median1.04x; both complete
512 / 1,024133.533 ms median44.413 ms median3.01x; both complete
512 / 8,192Incomplete at 2,000,001 comparisonsComplete; 344.309 ms medianFull grid and review replay also pass
4,096 / 8,192IncompleteComplete; 546.007 ms medianSupplied-witness copper-only, not router capacity

These are synthetic comparisons with the frozen preceding OpenBumpPlan checker, not commercial tools. The large incomplete runs are not speedup comparisons; the new version may take longer because it finishes the work. The router and grid witness checker still support at most 512 assignments. Raw samples, input hashes, work counts and exact protocol: copper qualification. Algorithm and release notes.

Run

Use Node.js 22 or newer. No npm installation or runtime dependencies:

sh
git clone https://github.com/ajayasai/OpenBumpPlan.git
cd OpenBumpPlan
npm start

Open http://127.0.0.1:4173. dist/openbumpplan.html also bundles the app, styles and workers into one offline file. File-origin browser policies may restrict workers/storage; the local server is the preferred fallback. Export JSON for durable backups. private: true in package.json prevents accidental npm publication; the GitHub repository is public.

v0.3.1 validation: 741 Node tests and 31 standalone Chromium scenarios pass locally; the extracted source package rebuilds and passes all 741 tests again. Local native-origin navigation was blocked by administrator policy, not bypassed. Exact validation scope.

What is materially different in v0.3

CapabilityImplemented behavior and boundary
Sparse certified assignmentComplete unary-compatible candidate graph, integer-cost minimum-cost flow, no nearest-k pruning. A separate checker verifies a complete matching and every residual reduced-cost inequality.
Coupled search beyond 12 sourcesBest-first sparse assignment subproblems, hard-rule rechecks, disjoint prefix partitions, and replayable proofs. Handles more than 12 movable sources; worst-case search remains exponential and explicitly bounded.
Honest failure semanticsA stopped search is unknown or feasible-with-bound, never automatically infeasible or optimal. Valid Hall deficiencies explain some impossible scopes. Rejected mappings are not applied.
Congestion repairNegotiated-congestion rip-up/reroute after initial A* route orders fail. Temporary search collisions are never accepted as final routing evidence.
Continuous copper validationRound-capped trace widths, circular via/pad diameters, per-layer spacing and keepouts checked using continuous distances, separately from the grid rasterizer. Explicit technology inputs, not implied process signoff.
Review integritySHA-256 binds findings and routes; physical bundles also bind and recheck declared technology. The CLI accepts an independently expected technology file and trusted Ed25519 public key.
Real application integrationCancellable workers, stale-result rejection, checked/undoable Apply, self-contained proof reports, routed SVGs, CLI commands and regression tests.

The former 12-source permutation solver remains available for the crossing-weighted objective and explicit maximum-changes ECO limit. The new certified solvers minimize rounded stage L1 + changed-target penalty, not that crossing-weighted score. Do not compare the two objectives as if they were the same.

Measured qualification, not vendor marketing

The preceding v0.3.0 qualification recorded 562 Node tests and 31 Chromium scenarios: 12 planning, 11 earlier Engineering, and 8 new proof/copper workflows. The publication workflow additionally runs native-origin browser tests on GitHub's runner; consult the actual Actions result for remote status.

On 100 fixed synthetic single-layer routing instances, complete checked witnesses increased from 71 to 88, recovering 17 cases with zero complete-to-incomplete regressions. Both algorithms had identical total expansion/time ceilings; negotiation can spend more work and is not claimed to be universally faster.

A favorable 4,096-source / 8,192-site near-aligned grid with 20,224 candidate edges solved and replay-verified in approximately 1.407 s median over three local runs. This is an engine measurement—not interactive UI latency or a guarantee for difficult industrial constraints. A separate 24-movable-source example requires actual coupled constraint rejection and search, beyond the old permutation limit.

Raw results and input hashes · Validation · Algorithm semantics and proof boundaries

Try it

In Engineering, choose Load constrained example → Solve with coupled certificate → Apply checked mapping. The proof is exported with its original input project. Solving alone never mutates the project.

Choose Load routing example → Route and check copper. The displayed dimensions are synthetic demonstration inputs, not recommended manufacturing values. Export a route witness or a review bundle. Increasing widths beyond available spacing must produce a failure, not weakened rules.

CLI

sh
# Coupled integer L1/ECO optimization, with a separately replayable proof.
node scripts/cli.mjs solve-certified examples/pair-bottleneck.json solved.json --proof proof.json
node scripts/cli.mjs verify-coupled examples/pair-bottleneck.json proof.json

# Faster relaxation only: its candidate is rejected if coupled rules fail.
node scripts/cli.mjs solve-linear project.json solved.json --proof matching.json
node scripts/cli.mjs verify-assignment project.json matching.json

# Geometric routing with explicit, externally supplied technology assumptions.
node scripts/cli.mjs route-physical examples/routing-laboratory.json routes.json --pitch 10 --via-cost 10 --technology examples/copper-technology.json
node scripts/cli.mjs verify-copper examples/routing-laboratory.json routes.json --technology examples/copper-technology.json

# Bind review, geometry and technology; optionally authenticate with a trusted key.
node scripts/cli.mjs bundle examples/routing-laboratory.json review.json --routes routes.json
node scripts/cli.mjs verify-bundle review.json --project examples/routing-laboratory.json --technology examples/copper-technology.json
node scripts/cli.mjs sign-bundle review.json signed.json --key /secure/reviewer-private.pem
node scripts/cli.mjs verify-bundle signed.json --public-key /trusted/reviewer-public.pem --technology examples/copper-technology.json

# Existing import/export, checks, revision and ECO workflows remain.
node scripts/cli.mjs check examples/chiplet-demo.json
node scripts/cli.mjs solve project.json eco.json --sources P1,P2 --max-changes 1 --change-penalty 100
node scripts/cli.mjs route project.json routes.json --pitch 10 --negotiate
node scripts/cli.mjs export solved.json interface.pdf

Proof verification requires the original pre-optimization project: it determines candidate eligibility, locks and change penalties. Mathematical certificate validity does not authenticate its producer. verify-assignment checks the relaxed graph; verify-coupled also replays the configured hard constraints. A signature without a caller-supplied trusted key is not trusted.

Exit 0: the requested operation/check succeeded; 1: no passing candidate or a failed gate; 2: invalid input/usage. Routing writes partial diagnostics with a failing exit code; never mistake their existence for a passed design.

Reproduce

sh
npm test
npm run build
npm run qualify:v03
npm run qualify:copper
npm run verify:release
python tests/browser_test.py --chromium /path/to/chromium
python tests/engineering_browser_test.py --chromium /path/to/chromium
python tests/browser_v03.py --chromium /path/to/chromium
python tests/engineering_browser_test.py --native --chromium /path/to/chromium
python tests/browser_v03.py --native --chromium /path/to/chromium

Python Playwright is a test-only dependency. Managed browsers that forbid localhost navigation cannot execute native mode; do not disable their administrator policy. CI runs the native modes on its own runner.

Retained capabilities and important gaps

CSV/JSON import with explicit unit conversion; limited LEF MACRO/PIN/PORT RECT import; five-stage connectivity; die transforms; drag/reassign, locks and undo/redo; domain/pair/ground-neighbour/region rules; revision differences; SVG/PDF/JSON/CSV and interface-control exports.

JSON is authoritative. Full LEF/DEF/GDS/ODB++/IPC-2581/native-vendor round trips, route-dependent assignment co-optimization, electrically verified shielding, IR-drop/electromigration, SI/PI/thermal/mechanical signoff, foundry certification, multi-user authorization, and industrial design qualification remain unimplemented or unqualified. Competitive evidence distinguishes shipped features from these gaps.

See MIT license, security, contributing, and format. The guarded publisher is a maintainer utility for this prepared base-commit overlay, not needed to run a clone. It publishes a review branch, never directly changes main, and requires the expected base commit. Recovery of the blocked staged release.

Routed native handoff

v0.4.0 adds checked native KiCad traces, vias, pads and keepouts, a routed browser handoff panel and source-bound CLI replay. Start with the routed handoff guide and the reproducible example. Measured tests are in release qualification, native copper results, and the browser results in docs/. These are bounded engineering checks, not commercial superiority or manufacturing signoff.

Parts

2
QtyValueFootprintReferences
1ballOpenBumpPlan:Routed_ballTO
1padOpenBumpPlan:Routed_padFROM

Questions

How big is the Routed handoff PCB?

It measures 12.1 × 12.1 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Routed handoff use?

2 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Routed handoff KiCad files?

From the ajayasai/OpenBumpPlan repository on GitHub, at the commit this page was made from: the board is examples/routed-handoff/routed.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Routed handoff design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers37 × 19 mmPassive rpi hub75-adapter, the printed circuit board in 3D

    Passive rpi hub75-adapter

    hzeller/rpi-rgb-led-matrix

    Controlling up to three chains of 64x64, 32x32, 16x32 or similar RGB LED displays using Raspberry Pi GPIO

    2 parts4.4kGPL-2.0
  • 2 layersDiode template, the printed circuit board in 3D

    Diode template

    adamws/kicad-kbplacer

    KiCad plugin for automatic keyboard's key placement and routing

    2 parts547GPL-3.0
  • 2 layers20.3 × 15.2 mmL0 button, the printed circuit board in 3D

    L0 button

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    2 parts546MIT
  • 2 layers35.1 × 46.8 mmSDEX2M2 Breakout Board, the printed circuit board in 3D

    SDEX2M2 Breakout Board

    NVNTLabs/switch2-SDEX2M2

    Micro SD Express to M.2 NVME Adapter for Nintendo Switch 2

    2 parts542GPL-3.0
  • 2 layers59.3 × 36.6 mmExpansionBoardTemplate, the printed circuit board in 3D

    ExpansionBoardTemplate

    BlueSCSI/BlueSCSI-v2

    BlueSCSI v2/Ultra - an open source, open hardware, SCSI emulator using the Pi Pico PR2040 and Pico 2 RP2350

    2 parts459GPL-3.0
  • 2 layersAlpha.9mm.wire, the printed circuit board in 3D

    Alpha.9mm.wire

    ohmtech-rdi/eurorack-blocks

    Software to Hardware Prototyping for Eurorack using C++, Max/Gen~ or Faust

    2 parts410
  • 2 layers26.7 × 64 mmGpu power, the printed circuit board in 3D

    Gpu power

    dennisss/dacha

    Monorepo for awesome tools/projects/libraries

    2 parts397Apache-2.0