app
Adom Library
Public Made by Adomby adom
adom-lbr — the EDA library translator. Bring a component in from any supported EDA tool and convert it to any other (KiCad ⇄ Altium ⇄ EAGLE/Fusion) through one canonical adom-lbr JSON — symbol + footprint + 3D + pin↔pad map. Altium is written natively (no Altium needed). Includes the adom-lbr Manager: browse wiki components and view symbol/footprint/3D + the per-EDA layer stackup.
← Commit history
Publish 2.7.1
7 files changed
+68−43
README.md+22−22@@ -1,10 +1,10 @@ # adom-lbr -**adom-lbr — the EDA library translator. Bring a component in from any supported EDA tool and convert it to any other — KiCad ⇄ Altium ⇄ EAGLE/Fusion — through one canonical part format, with native Altium output and no local EDA software.**+**adom-lbr: the EDA library translator. Bring a component in from any supported EDA tool and convert it to any other (KiCad ⇄ Altium ⇄ EAGLE/Fusion) through one canonical part format, with native Altium output and no local EDA software.** -The **adom-lbr JSON** is Adom's own canonical part: one document carrying the symbol, footprint, 3D reference, and the pin↔pad map. adom-lbr is the translator around it — **import a component from KiCad or Altium**, then convert the adom-lbr JSON to **any** other tool: **native Altium** (`.SchLib` / `.PcbLib` / `.IntLib`), a **KiCad** `.kicad_sym` + `.kicad_mod`, or an **EAGLE/Fusion** `.lbr`. **Any EDA tool in, any EDA tool out** — the canonical JSON is the hub, so every source pairs with every target. The Altium libraries are written **natively** — the exact OLE2/CFBF binary — so no copy of Altium is needed at conversion time. Standalone Rust, no Node, no gallia.+The **adom-lbr JSON** is Adom's own canonical part: one document carrying the symbol, footprint, 3D reference, and the pin↔pad map. adom-lbr is the translator around it: **import a component from KiCad or Altium**, then convert the adom-lbr JSON to **any** other tool: **native Altium** (`.SchLib` / `.PcbLib` / `.IntLib`), a **KiCad** `.kicad_sym` + `.kicad_mod`, or an **EAGLE/Fusion** `.lbr`. **Any EDA tool in, any EDA tool out.** The canonical JSON is the hub, so every source pairs with every target. The Altium libraries are written **natively** (the exact OLE2/CFBF binary) so no copy of Altium is needed at conversion time. Standalone Rust, no Node, no gallia. -("lbr" = **Adom Library**, the adom-lbr JSON — not EAGLE's `.lbr`, which is just one of the output formats.)+("lbr" = **Adom Library**, the adom-lbr JSON, not EAGLE's `.lbr`, which is just one of the output formats.) ## Formats & targets @@ -12,26 +12,26 @@ The **adom-lbr JSON** is Adom's own canonical part: one document carrying the sy |---|---|---| | **Hub** | **adom-lbr JSON** (symbol + footprint + graphics + pin↔pad map) | the canonical format everything converts to/from | | **Import → hub** | KiCad `.kicad_sym` + `.kicad_mod` → adom-lbr JSON | bring a KiCad part in |-| **Import → hub** | **Altium `.SchLib` / `.PcbLib` / `.IntLib` → adom-lbr JSON** | bring an Altium part in — pins, pads, and silk/courtyard/fab **layers** |-| **Export → Altium** | native `.SchLib` + `.PcbLib`, or one bundled `.IntLib` | Altium Designer — written natively, no Altium needed |+| **Import → hub** | **Altium `.SchLib` / `.PcbLib` / `.IntLib` → adom-lbr JSON** | bring an Altium part in: pins, pads, and silk/courtyard/fab **layers** |+| **Export → Altium** | native `.SchLib` + `.PcbLib`, or one bundled `.IntLib` | Altium Designer, written natively, no Altium needed | | **Export → Fusion/EAGLE** | EAGLE `.lbr` (symbol + package + connects) | Autodesk Fusion 360 Electronics, EAGLE, OrCAD | | **Export → KiCad** | native `.kicad_sym` + `.kicad_mod` (layers preserved) | KiCad 6+ | | **Merge** | add a part's symbol into an existing `.SchLib` | install a part into a user's Altium library | -Altium footprint graphics keep their **layers** across the round trip — silk /+Altium footprint graphics keep their **layers** across the round trip: silk / courtyard / fab decode into neutral roles and re-encode onto the right Altium layers (outline → Mechanical 13 "Assembly Top", courtyard → Mechanical 15 "Courtyard Top"). Verified byte-exact (`Altium → JSON → Altium → JSON`). The **Send to** bar in the live app pushes the loaded library to whichever of those tools you're running (via the Adom Desktop bridge). -## adom-lbr Manager — browse the wiki, inspect any part+## adom-lbr Manager: browse the wiki, inspect any part `adom-lbr manage` opens a web app that **lists every component on the wiki**; click one and it renders the **schematic symbol**, **footprint**, and **3D model** on the fly from the part's adom-lbr JSON (or, if the page has none, from its KiCad files).-It surfaces the **footprint layer stackup** — what layer each silk / courtyard / fab /-copper element becomes in **KiCad *and* Altium**, side by side — plus a per-layer+It surfaces the **footprint layer stackup**: what layer each silk / courtyard / fab /+copper element becomes in **KiCad *and* Altium**, side by side, plus a per-layer show/hide filter, drag-to-pan / scroll-to-zoom viewers, and **hover-to-highlight** on pins & pads showing each one's number and name. @@ -39,14 +39,14 @@ on pins & pads showing each one's number and name. adom-lbr manage --port 8785 # → http://localhost:8785 (list ▸ click ▸ viewer) ``` -## The 3-column library viewer — and an interactive embed+## The 3-column library viewer, with an interactive embed  -▶ **[Open the live ADS1115 3-column viewer](https://wiki.adom.inc/api/v1/pages/john/adom-lbr/files/demo/ads1115-viewer.html)** — the exact self-contained file `adom-lbr embed` produces, served straight from this page (pan/zoom each panel; the pin→pad table is fully populated from the datasheet). It is built to sit in an `<iframe>` once the wiki enables component-page iframe embedding.+▶ **[Open the live ADS1115 3-column viewer](https://wiki.adom.inc/api/v1/pages/john/adom-lbr/files/demo/ads1115-viewer.html)**: the exact self-contained file `adom-lbr embed` produces, served straight from this page (pan/zoom each panel; the pin→pad table is fully populated from the datasheet). It is built to sit in an `<iframe>` once the wiki enables component-page iframe embedding. -`adom-lbr embed` exports a **Fusion 360-style three-column viewer** as one self-contained `.html` file: **symbol** in column 1, **footprint** in column 2, the **3D chip** in column 3 — each independently pan/zoomable — with the full **pin → pad mapping table** below, carrying each pin's **type and datasheet description**. It's built to drop straight into an `<iframe>` on a **wiki component page**: a single portable file, no server, no external assets.+`adom-lbr embed` exports a **Fusion 360-style three-column viewer** as one self-contained `.html` file: **symbol** in column 1, **footprint** in column 2, the **3D chip** in column 3 (each independently pan/zoomable) with the full **pin → pad mapping table** below, carrying each pin's **type and datasheet description**. It's built to drop straight into an `<iframe>` on a **wiki component page**: a single portable file, no server, no external assets. ```bash adom-lbr embed --dir <chip-dir> # → <mpn>-lbr-embed.html@@ -55,19 +55,19 @@ adom-lbr embed --dir <chip-dir> # → <mpn>-lbr-embed.html <iframe src="…/<mpn>-lbr-embed.html" width="100%" height="640" style="border:0"></iframe> ``` -It assembles the three renders, the pin→pad connects, and the datasheet pin descriptions from a chip directory — exactly the part data adom-symbol, adom-footprint, ds2sf and chip-thumbnailer already produce.+It assembles the three renders, the pin→pad connects, and the datasheet pin descriptions from a chip directory, exactly the part data adom-symbol, adom-footprint, ds2sf and chip-thumbnailer already produce. ## The library at a glance  -Load an `.lbr` and the viewer breaks it down at a glance — **symbols, packages, devicesets, pins, pads** — and re-lints it server-side. A green **Lint passed** badge means the library is ready to import into Fusion 360 Electronics with no surprises. The top bar carries the **Send to** targets (KiCad / Fusion / Altium / OrCAD).+Load an `.lbr` and the viewer breaks it down at a glance (**symbols, packages, devicesets, pins, pads**) and re-lints it server-side. A green **Lint passed** badge means the library is ready to import into Fusion 360 Electronics with no surprises. The top bar carries the **Send to** targets (KiCad / Fusion / Altium / OrCAD). ## The linter catches what Fusion rejects  -This is the whole point. Fusion will silently show "No Components" or refuse to place a part when a library is subtly broken — adom-lbr catches it first. Here the deviceset has **no pin-to-pad connect mappings**, so the linter flags `empty-connects` with a plain-English reason: *"Fusion cannot use this component."* It also catches missing packages, devices with no package attribute, malformed XML, and invisible symbol bodies — each with a code and a fix.+This is the whole point. Fusion will silently show "No Components" or refuse to place a part when a library is subtly broken. adom-lbr catches it first. Here the deviceset has **no pin-to-pad connect mappings**, so the linter flags `empty-connects` with a plain-English reason: *"Fusion cannot use this component."* It also catches missing packages, devices with no package attribute, malformed XML, and invisible symbol bodies, each with a code and a fix. ## Generate from the command line @@ -77,22 +77,22 @@ This is the whole point. Fusion will silently show "No Components" or refuse to ## What it does -- **`generate`** — `.kicad_sym` (+ `.kicad_mod`) → native `.lbr`, lint-checked for Fusion compatibility.-- **`lint` / `validate`** — catch the things Fusion rejects: missing connects, incomplete devicesets, bad pad maps.-- **`import`** — EAGLE `.lbr` → KiCad `.kicad_sym`.-- **Live app** — a viewer that lints the loaded `.lbr` and shows symbols / packages / devicesets / pins / pads at a glance.+- **`generate`**: `.kicad_sym` (+ `.kicad_mod`) → native `.lbr`, lint-checked for Fusion compatibility.+- **`lint` / `validate`**: catch the things Fusion rejects: missing connects, incomplete devicesets, bad pad maps.+- **`import`**: EAGLE `.lbr` → KiCad `.kicad_sym`.+- **Live app**: a viewer that lints the loaded `.lbr` and shows symbols / packages / devicesets / pins / pads at a glance. ## Send to Fusion 360 (open the `.lbr` directly), Altium / OrCAD (download the `.lbr` + import steps; native exporters on the roadmap), KiCad (converted back to `.kicad_sym`). -## Open source — check it out, vibe-code it, send it back+## Open source: check it out, vibe-code it, send it back -adom-lbr is MIT and **fully open**. The complete Rust source is in this page's **Files** tab — browse it, or grab `src/` + `Cargo.toml`.+adom-lbr is MIT and **fully open**. The complete Rust source is in this page's **Files** tab: browse it, or grab `src/` + `Cargo.toml`. 1. **Build it.** `cargo build --release` drops a standalone binary (no Node, no gallia). 2. **Point your install at your checkout.** `adompkg link john/adom-lbr ./adom-lbr` so the `adom-lbr` you run is your local copy.-3. **Vibe-code a change.** Open the folder in Claude Code and describe what you want — a new lint rule, another export target, a smarter symbol synthesizer. The lint rules live in one readable list, easy to extend.+3. **Vibe-code a change.** Open the folder in Claude Code and describe what you want: a new lint rule, another export target, a smarter symbol synthesizer. The lint rules live in one readable list, easy to extend. 4. **Send it back.** Open a **pull request** on this page (the wiki reviews and merges per-repo PRs), or start a discussion thread. Good additions get folded into the shipped app. ## Part of the Adom EDA family
SKILL.md+16−16@@ -15,13 +15,13 @@ description: > # adom-lbr -adom-lbr generator / EDA translator. The **adom-lbr JSON** — Adom's own canonical part format (symbol + footprint + 3D + pin↔pad map) — is the hub; every EDA format is a converter around it.+adom-lbr generator / EDA translator. The **adom-lbr JSON**, Adom's own canonical part format (symbol + footprint + 3D + pin↔pad map), is the hub; every EDA format is a converter around it. - **Import** a KiCad `.kicad_sym` + `.kicad_mod` into the adom-lbr JSON. - **Export** the adom-lbr JSON to **native Altium** `.SchLib` / `.PcbLib` / `.IntLib` (real OLE2/CFBF binary, no Altium at conversion time), an **EAGLE/Fusion** `.lbr`, or a **KiCad** `.kicad_sym`. - **Merge** a part's symbol into an existing `.SchLib` (install into a user's Altium library). -("lbr" here = Adom Library / the adom-lbr JSON, not EAGLE's `.lbr` — that's just one output.)+("lbr" here = Adom Library / the adom-lbr JSON, not EAGLE's `.lbr`, which is just one output.) ## Native Altium commands (both directions) @@ -53,10 +53,10 @@ export to the house convention (from the C0402 reference footprint): |---|---|---| | fab + silk (outline) | Mechanical 13 | Assembly Top | | courtyard | Mechanical 15 | Courtyard Top |-| pads | Top Layer | — |+| pads | Top Layer | n/a | -Altium stores a track/arc layer in TWO places — the layer byte **and** a tail-class-pair `[41]/[43]` (Track) — and it *renders* from the tail pair, so the+Altium stores a track/arc layer in TWO places: the layer byte **and** a tail+class-pair `[41]/[43]` (Track), and it *renders* from the tail pair, so the encoder patches both. Decode reads the layers back into the neutral roles. 3D STEP models attach to the footprint via Altium's model factory (bridge), not the native writer (the model checksum is a custom Altium algorithm).@@ -64,7 +64,7 @@ the native writer (the model checksum is a custom Altium algorithm). ### KiCad round-trip fidelity `export-kicad` writes a KiCad-valid `.kicad_sym` + `.kicad_mod`. Import captures-what a naive converter drops: rectangle **fill** (`fill outline` vs `none` — a+what a naive converter drops: rectangle **fill** (`fill outline` vs `none`, a filled cap plate stays filled), and per-symbol **pin-number / pin-name visibility** (`(pin_numbers (hide yes))`), so a KiCad→JSON→KiCad round trip keeps solid vs hollow art and shown vs hidden pin labels. Footprint silk/courtyard/fab@@ -77,9 +77,9 @@ part. `adom-lbr manage --port 8785` → open `http://localhost:8785`. - **List ▸ click ▸ viewer.** Lists every component on the wiki (wiki API); click a row to open its viewer.-- **On-the-fly render.** Fetches the part FRESH each click — prefers the page's+- **On-the-fly render.** Fetches the part FRESH each click: prefers the page's canonical adom-lbr JSON, else generates it from the page's `.kicad_sym` +- `.kicad_mod` — and renders **symbol + footprint + 3D** on the spot.+ `.kicad_mod`, and renders **symbol + footprint + 3D** on the spot. - **Layer stackup.** A table of the footprint's layers showing what each becomes in **KiCad and Altium** (e.g. Courtyard → `F.CrtYd` / Mechanical 15). Plus a per-layer show/hide **filter** on the footprint.@@ -130,13 +130,13 @@ Parses an EAGLE .lbr and converts to KiCad .kicad_sym format. Handles: Checks an existing .lbr for Fusion 360 compatibility. Outputs JSON with `passed`, `errors[]`, `warnings[]`. Checks:-- `empty-packages` — packages section empty (fatal: Fusion shows "No Components")-- `empty-connects` — device has no connect mappings (fatal)-- `device-no-package` — device element missing package attribute (fatal)-- `duplicate-pin-name` — EAGLE requires unique pin names; use @suffix for power/NC duplicates-- `connect-pad-missing` — connect references a pad that doesn't exist in the package-- `malformed-xml` — unbalanced angle brackets-- `no-symbol-layer` — nothing on layer 94 (symbol body invisible)+- `empty-packages`: packages section empty (fatal: Fusion shows "No Components")+- `empty-connects`: device has no connect mappings (fatal)+- `device-no-package`: device element missing package attribute (fatal)+- `duplicate-pin-name`: EAGLE requires unique pin names; use @suffix for power/NC duplicates+- `connect-pad-missing`: connect references a pad that doesn't exist in the package+- `malformed-xml`: unbalanced angle brackets+- `no-symbol-layer`: nothing on layer 94 (symbol body invisible) ## validate @@ -144,7 +144,7 @@ Same as lint but human-readable output. Exits 0 = valid, 2 = errors found. ## check -Validates a .kicad_sym file by local Rust validation — checks structure, pins, properties, duplicate names. Use after `import` to verify the output before sending to a desktop KiCad instance.+Validates a .kicad_sym file by local Rust validation: checks structure, pins, properties, duplicate names. Use after `import` to verify the output before sending to a desktop KiCad instance. ## Duplicate pin handling
bin/adom-lbr⋯ 1 unchanged line ⋯
install.sh+16−2@@ -1,4 +1,18 @@ #!/bin/bash set -euo pipefail-DIR="$(cd "$(dirname "$0")" && pwd)"; BIN="${HOME}/.local/bin"; mkdir -p "$BIN"-install -m 0755 "$DIR/bin/adom-lbr" "$BIN/adom-lbr"; echo "Installed adom-lbr"+DIR="$(cd "$(dirname "$0")" && pwd)"+BIN="${HOME}/.local/bin"; mkdir -p "$BIN"+install -m 0755 "$DIR/bin/adom-lbr" "$BIN/adom-lbr"+echo "Installed adom-lbr"++# Bundle sub-skills live in skills/<name>/ and are delivered to the user's skills dir.+SKILLS="${HOME}/.claude/skills"+if [ -d "$DIR/skills" ]; then+ for s in "$DIR"/skills/*/; do+ [ -d "$s" ] || continue+ name="$(basename "$s")"+ mkdir -p "$SKILLS/$name"+ cp -R "$s". "$SKILLS/$name/"+ echo "Installed skill: $name"+ done+fi
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-lbr",- "version": "2.7.0",+ "version": "2.7.1", "type": "app", "description": "adom-lbr \u2014 the EDA library translator. Bring a component in from any supported EDA tool and convert it to any other (KiCad \u21c4 Altium \u21c4 EAGLE/Fusion) through one canonical adom-lbr JSON \u2014 symbol + footprint + 3D + pin\u2194pad map. Altium is written natively (no Altium needed). Includes the adom-lbr Manager: browse wiki components and view symbol/footprint/3D + the per-EDA layer stackup.", "dependencies": {},
page.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-lbr",- "version": "2.7.0",+ "version": "2.7.1", "type": "app", "description": "adom-lbr — the EDA library translator. Bring a component in from any supported EDA tool and convert it to any other (KiCad ⇄ Altium ⇄ EAGLE/Fusion) through one canonical adom-lbr JSON — symbol + footprint + 3D + pin↔pad map. Altium is written natively (no Altium needed). Includes the adom-lbr Manager: browse wiki components and view symbol/footprint/3D + the per-EDA layer stackup.", "dependencies": {},
uninstall.sh+12−1@@ -1,3 +1,14 @@ #!/bin/bash set -euo pipefail-rm -f "${HOME}/.local/bin/adom-lbr"; echo "Uninstalled adom-lbr"+DIR="$(cd "$(dirname "$0")" && pwd)"+rm -f "${HOME}/.local/bin/adom-lbr"++# Remove any bundle sub-skills this package delivered.+SKILLS="${HOME}/.claude/skills"+if [ -d "$DIR/skills" ]; then+ for s in "$DIR"/skills/*/; do+ [ -d "$s" ] || continue+ rm -rf "$SKILLS/$(basename "$s")"+ done+fi+echo "Uninstalled adom-lbr"