

Usage
KiCAD EDA automatic component placement tool
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 19
- Nets
- 24
- Pads
- 60
- Tracks, vias
- 0, 0
- Routed
- Not yet
- KiCad
- KiCad 0.10.19 (file 20241229)
- Created
- 11 Jan 2026
- Updated
- 19 Jan 2026
Overview
Usage is an open-source printed circuit board by glovepost, from the glovepost/atoplace repository on GitHub, published under the MIT licence. It is a 2-layer board with 19 parts on 24 nets.
Its parts include 17 resistors, 1 capacitor and 1 IC.
README
README.md
[blocked]
The AI Pair Designer for Professional PCB Layout
atoplace is an intelligent orchestration layer for PCB design that bridges the gap between schematic and physical layout. It automates the tedious 80% of design—placement optimization and DFM validation—while strictly adhering to "Manhattan" aesthetics and Signal Integrity (SI) best practices.
Designed to work seamlessly with atopile and KiCad.
🚀 Why atoplace?
PCB layout automation has historically been "black box" and "messy"—producing organic, unreadable layouts that professional engineers reject. atoplace takes a different approach:
- Human-Grade Aesthetics: We don't just minimize wirelength. We enforce grids, alignment, and orthogonal routing so the result looks like you designed it.
- Physics-First: We model high-degree nets (GND/VCC) correctly to prevent component collapse, and prioritize critical signals (USB, RF) before general routing.
- Transparent & Interactive: No lock-in. The source of truth is always your
.kicad_pcbfile. You can take over manually at any second.
✨ Key Features
- 🧩 Manhattan Legalizer: Transforms "organic" force-directed placements into professional, grid-snapped, and row-aligned layouts using PCA axis detection and Abacus-style overlap resolution.
- 🧠 Intelligent Placement: Force-directed annealing engine with a Star Model for stable high-degree net (GND/VCC) handling and adaptive damping for oscillation control.
- 🚀 A Routing*: High-performance, deterministic geometric router using a Greedy Multiplier ($w=2-3$) and Spatial Hash Indexing for O(~1) collision detection.
- 🔍 Confidence Scoring: Automated assessment of your board's routability, signal integrity risks, and DFM compliance.
- 💬 Natural Language Control: "Move the USB connector to the left edge", "Align these capacitors", "Keep the crystal near the MCU".
- 🔌 Atopile Native: First-class support for
atopileprojects withato-lock.yamlparsing, module-aware grouping, andatoplace.locksidecar persistence to preserve placements across rebuilds. - 📊 Interactive Visualization: Unified SVG delta viewer with real-time playback, layer toggles, grid customization, force vector display, routing trace visualization, and A* debug mode for step-by-step algorithm analysis.
🛠️ Installation
pip install atoplaceRequirements
- Python 3.10+
- KiCad 8.0+ (atoplace uses the
pcbnewPython API)
Pro Tip: atoplace works best when run using the Python interpreter bundled with KiCad:
macOS:
/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 -m pip install atoplaceWindows:
"C:\Program Files\KiCad\8.0\bin\python.exe" -m pip install atoplace⚡ Quick Start
1. Optimize Placement
Automatically place components with "Manhattan" legalization:
atoplace place board.kicad_pcb --grid 0.5 --constraints "USB on left edge"2. Route the Board
Route all nets using the internal A* geometric planner:
atoplace route board.kicad_pcb --visualize3. Validate Layout
Check your board against DFM rules (JLCPCB, OSH Park, etc.):
atoplace validate board.kicad_pcb --dfm jlcpcb_standard4. Interactive Mode
Refine your design using natural language:
atoplace interactive board.kicad_pcb
# > "Rotate U1 45 degrees"
# > "Move C1 closer to U1"
# > "Save"5. MCP Server (LLM Integration)
Expose atoplace tools to AI agents via the Model Context Protocol:
atoplace mcp --launchSee MCP Server section below for details.
🗺️ Roadmap
- Milestone A (Q1 2026): Solid Foundation ✅
- Manhattan Legalizer (Grid snapping & PCA Alignment).
- Physics Engine scaling (Star Model & Adaptive Damping).
- Atopile
ato-lock.yamland module hierarchy integration.
- Milestone B (Q1-Q2 2026): Routing & Persistence ✅
- A Geometric Planner* (Greedy Multiplier & Spatial Indexing).
- MCP Server with 40+ tools for LLM agent integration.
- Live KiCad IPC via kipy for real-time component manipulation (KiCad 9+).
-
atoplace.lockSidecar Persistence for atopile projects. - Unified Visualization (SVG delta viewer with routing support).
- BGA/QFN Fanout Generator (dogbone & via-in-pad strategies).
- Pin Swap Optimization (bipartite matching for crossing reduction).
- Milestone C (Q2 2026): Professional Agent 🚧
- Differential Pair Detection (auto-detect from net names).
- Differential Pair Coupled Routing.
- Deep Signal Integrity Analysis (Crosstalk/Impedance).
- Automated Manufacturing Outputs (Gerbers/BOM/PNP).
- Multi-board design support.
📂 Architecture
atoplace/
├── board/ # Board abstraction & KiCad/Atopile adapters
│ ├── abstraction.py # Board, Component, Net, Pad data models
│ ├── kicad_adapter.py # KiCad pcbnew integration
│ ├── lock_file.py # atoplace.lock sidecar persistence
│ └── atopile_adapter.py # Atopile project loader
├── placement/ # Force-directed physics & Manhattan Legalizer
│ ├── force_directed.py # Physics Engine (Star Model, adaptive damping)
│ ├── legalizer.py # Manhattan Pipeline with PCA alignment
│ ├── module_detector.py # Functional module hierarchy analysis
│ ├── constraints.py # Placement constraints (Proximity, Edge, Zone, etc.)
│ └── visualizer.py # SVG delta visualization with frame capture
├── routing/ # A* Geometric Router
│ ├── astar_router.py # Core A* with Greedy Multiplier (w=2-3)
│ ├── manager.py # Multi-phase routing pipeline
│ ├── spatial_index.py # O(~1) collision detection via spatial hashing
│ ├── obstacle_map.py # Obstacle generation from board
│ ├── diff_pairs.py # Differential pair detection
│ ├── visualizer.py # Routing visualization with A* debug
│ └── fanout/ # BGA/QFN escape routing
├── visualization/ # Unified visualization system
│ └── assets/ # External JS/CSS for HTML viewer
│ ├── svg-delta-viewer.js # Interactive SVG playback engine
│ └── styles.css # KiCad-inspired dark theme🤖 MCP Server
atoplace includes a Model Context Protocol (MCP) server that exposes 40+ PCB design tools to LLM agents like Claude. This enables conversational PCB layout design with support for placement, routing, fanout generation, and design validation.
Quick Start
Just run:
python -m atoplace.mcp.launcherThat's it! The launcher:
- Auto-detects KiCad Python on macOS, Linux, and Windows
- Starts the KiCad bridge (for pcbnew access)
- Starts the MCP server (exposes tools to LLM)
- Manages lifecycle and clean shutdown
Claude Code / Claude Desktop Configuration
Add to your MCP config:
{
"mcpServers": {
"atoplace": {
"command": "python",
"args": ["-m", "atoplace.mcp.launcher"]
}
}
}Note: Replace
pythonwith the path to your atoplace virtualenv Python if needed.
🔴 Live KiCad IPC Mode (KiCad 9+)
New! With KiCad 9+, atoplace can manipulate components in real-time without save/reload cycles. Changes appear instantly in your KiCad viewport!
Requirements:
- KiCad 9.0 or later (with IPC API enabled)
kicad-pythonpackage:pip install kicad-python
Setup:
# Install the kipy optional dependency
pip install atoplace[kipy]
# Or install directly
pip install kicad-pythonUsage:
- Open your
.kicad_pcbin KiCad 9+ PCB Editor - Start the MCP server with the kipy backend:
bash ATOPLACE_BACKEND=kipy python -m atoplace.mcp.launcher - Components move instantly as you interact with the LLM!
How it works: The kipy backend connects directly to KiCad's IPC socket and uses the official API to update component positions in real-time. Native undo/redo (Cmd/Ctrl+Z) works seamlessly.
Architecture
flowchart LR
subgraph MCP["MCP Server (Python 3.10+)"]
direction TB
FastMCP[FastMCP]
Tools[26 Layout Tools]
Context[Context Generators]
end
subgraph KiPy["KiPy Backend (KiCad 9+)"]
direction TB
IPC[KiCad IPC API]
LiveEdit[Real-time Updates]
NativeUndo[Native Undo/Redo]
end
subgraph Bridge["KiCad Bridge (KiCad 8.x)"]
direction TB
pcbnew[pcbnew API]
BoardIO[Board I/O]
UndoRedo[Undo/Redo]
end
MCP <-->|"KiCad IPC\nSocket"| KiPy
MCP <-->|"Unix Socket\nJSON-RPC"| BridgeBackend Modes:
| Mode | KiCad Version | Real-time | How it works | Status |
|---|---|---|---|---|
kipy | 9.0+ | ✅ Yes | Direct IPC API connection | Default |
ipc | 8.0+ | ❌ No | File-based bridge process | Fallback |
direct | 8.0+ | ❌ No | Direct file manipulation | Fallback |
Note: KIPY mode is the primary backend for bleeding-edge development. It provides instant visual feedback in KiCad's viewport and native undo/redo integration. The server automatically falls back to IPC or direct mode if KIPY is unavailable.
Available Tools (40+ total)
| Category | Tools |
|---|---|
| Board Management | load_board, save_board, undo, redo |
| Placement Actions | move_absolute, move_relative, rotate, place_next_to, align_components, distribute_evenly, stack_components, arrange_pattern, cluster_around, lock_components |
| Discovery | find_components, get_board_summary, get_unplaced_components |
| Routing | route_board, route_net, detect_diff_pairs, get_routing_preview, analyze_pin_swaps, optimize_pin_swaps, export_pin_constraints |
| BGA/Fanout | detect_bga_components, fanout_component, fanout_all_bgas, get_fanout_preview |
| Context | inspect_region, get_semantic_grid, get_module_map |
| Validation | check_overlaps, validate_placement, run_drc, get_crossing_analysis |
| Optimization | optimize_placement, detect_modules, parse_constraint, get_atopile_context |
Environment Variables (Optional)
| Variable | Description | Default |
|---|---|---|
ATOPLACE_BACKEND | Backend mode: kipy, ipc, or direct | kipy (with fallback) |
ATOPLACE_USE_KIPY | Enable kipy mode (1 or true) | Deprecated - use ATOPLACE_BACKEND |
KICAD_PYTHON | Override KiCad Python path | Auto-detected |
ATOPLACE_LOG | Log file location | /tmp/atoplace.log |
Default behavior: The server attempts KIPY first, then falls back to IPC, then direct mode. For bleeding-edge KiCad 9+ users, no configuration is needed - KIPY mode activates automatically when KiCad is running with IPC enabled.
Example LLM Conversation
User: Load the board at examples/dogtracker/layouts/default/default.kicad_pcb
Claude: [Calls load_board tool]
Board loaded successfully:
- 37 components
- 72 nets
User: Find all the capacitors and align them horizontally
Claude: [Calls find_components with query="C", filter_by="ref"]
Found 12 capacitors: C1, C2, C3...
[Calls align_components with refs=["C1","C2",...], axis="y"]
Aligned 12 capacitors along the Y axis.
User: Check if there are any overlaps
Claude: [Calls check_overlaps]
No overlapping components detected. The placement is valid.
User: Save the board
Claude: [Calls save_board]
Board saved to: examples/dogtracker/layouts/default/default.placed.kicad_pcb🔒 Atopile Lock File Persistence
When working with atopile projects, placement positions can be lost when ato build regenerates the KiCad board. The atoplace.lock sidecar file solves this by persisting component positions between builds.
How it works
After placement, atoplace automatically saves positions to a lock file next to the board:
my-project/
├── elec/
│ └── layout/
│ └── default/
│ ├── default.kicad_pcb
│ └── default.atoplace.lock ← Saved positions
└── ato.yamlLock File Format
version: 1
created: 2026-01-14T10:30:00
build: default
components:
U1:
x: 125.5
y: 80.0
rotation: 0.0
locked: true # User-approved position
module: mcu
C1:
x: 130.0
y: 85.5
locked: false # Auto-placed, can be re-optimizedCLI Options
| Flag | Description |
|---|---|
--use-lock | Apply saved positions before placement |
--only-locked | Only restore locked: true positions |
--save-lock/--no-save-lock | Auto-save after placement (default: on) |
--lock-all | Mark all positions as user-approved |
Workflow Example
# First placement - automatically saves lock file
atoplace place my-project/ --use-ato-modules
# After `ato build` regenerates board - restore positions
atoplace place my-project/ --use-lock
# Only restore approved positions, re-optimize others
atoplace place my-project/ --use-lock --only-locked
# Approve all current positions
atoplace place my-project/ --lock-allMerge Logic
The lock file uses Lock > Physics priority:
locked: truepositions always preserved (user-approved)locked: falsepositions used as initial hints, can be re-optimized- New components (not in lock file) placed by physics engine
📄 License
MIT License - see LICENSE for details.
🙏 Acknowledgments
- atopile: The declarative language that makes code-driven hardware possible.
- KiCad: The open-source EDA standard we build upon.
- kicad-python: Official Python bindings for KiCad's IPC API.
- Freerouting: The open-source autorouting engine.
Parts
19| Qty | Value | Footprint | References |
|---|---|---|---|
| 16 | 100Ω ±1% 100mW | UNI_ROYAL_0603WAF1000T5E:R0603 | R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16 |
| 1 | MBI_MBI5043GP_A:SSOP-24_L8.8-W4.0-P0.64-LS6.2-BL | U1 | |
| 1 | 100nF ±10% 16V X7R | Samsung_Electro_Mechanics_CL05B104KO5NNNC:C0402 | C1 |
| 1 | 309Ω ±1% 62.5mW | VO_SCR0402F309R:R0402 | R17 |
Questions
What parts does the Usage use?
19 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 Usage KiCad files?
From the glovepost/atoplace repository on GitHub, at the commit this page was made from: the board is examples/hyperion/elec/src/macroblock-mbi5043/layouts/usage/usage.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the Usage 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).
More from glovepost/atoplace
12- 2 layers24.6 × 8.1 mm

- 2 layers

- 4 layers59.3 × 39 mm

- 4 layers

- 4 layers45 × 167 mm

- 4 layers108 × 115.9 mm

- 2 layers42 × 27 mm

- 2 layers

- 2 layers

- 2 layers34.2 × 26.8 mm

- 2 layers

- 2 layers

Similar boards
- 2 layers43.9 × 27.7 mm

- 2 layers50 × 60 mm

Debate Device
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
19 parts915 - 2 layers102.9 × 96.7 mm

ISA adapter
polpo/picogus
Emulation of ISA sound cards and CD-ROM on Raspberry Pi Pico (GUS, SB/Adlib, MPU-401, Tandy, CMS, Panasonic CD-ROM) with USB mouse/joystick support
19 parts805 - 2 layers60 × 39 mm

- 2 layers70.1 × 43.2 mm

Iaq device
nkitanov/iaq_board
IAQ Board is a DIY (Do-It-Yourself) device for measuring internal air quality
19 parts396 - 2 layers80 × 80 mm

- 2 layers25.4 × 25.4 mm

Ina169
Ardumower/ardumower
Develop an open source robotic lawn mower (HW+SW reference platform)
19 parts282 - 2 layers58.4 × 28.6 mm

New rele
zmaker/arduino_cookbook
gli sketch del nuovo progetto Arduino Cookbook e dei video di YouTube
19 parts269