Intelligent KiCad Bill of Materials generator with inventory matching
Project description
jBOM — KiCad Bill of Materials and Placement Generator
Why jBOM?
Designing a PCB in KiCad is only part of the journey that results in a fabricated and assembled electronic product. The PCB fabrication just needs the KiCad-produced Gerber files, but the assembly process requires a Bill of Materials (BOM) and a Placement file (CPL/POS).
The common KiCad workflow has you annotate your KiCad symbols with supply chain details such as "IPN:RES-331-0603", "MFG:Yageo", "MPN:CC0603KRX7R9BB104", "LCSC:C123456", and then use KiCad's fabrication plugins to generate BOM and CPL files. This mechanism is easy to understand, and, through KiCad's web/database library integration, plugins such as Part-DB, InvenTree, PartsBox and GitPLM connect to extensive parts databases. While these this workflow has proven sufficient for many developers, it inadvertently makes it difficult to decouple supply chain evolution from a project's electronic and mechanical specifications.
jBOM solves this by separating part selection from circuit design. You design with generic values ("10k, 5%, Resistor_SMD:R_0603_1608Metric"), maintain a currated inventory file with your desired parts, and jBOM intelligently matches them at BOM generation time. Changing suppliers or cost reducing a set of projects is as simple as updating an inventory spreadsheet.
Documentation
Command line: docs/README.man1.md Python Library API: docs/README.man3.md KiCad Eeschema Integration: docs/README.man4.md jBOM Inventory File Format: docs/README.man5.md
Installation
Requires Python 3.10 or newer.
From PyPI (recommended):
# Basic installation (with only CSV inventory support)
pip install jbom
# With CSV, Excel and Numbers spreadsheet support
pip install jbom[all]
# With CSV and Excel support
pip install jbom[excel]
# With CSV and Apple Numbers support
pip install jbom[numbers]
# With Mouser Search support
pip install jbom[search]
Quick Start
Scenario: New KiCad project → JLCPCB manufacturing files.
1. Extract an inventory template
jbom inventory MyProject/ -o inventory.csv
This writes one row per unique Value + Package combination found in your schematics. IPN, Category, Value, and Package are pre-filled; supplier columns (LCSC, Manufacturer, MFGPN) are blank for you to complete.
2. Audit schematic field quality
Before filling in part numbers, verify your schematic fields are complete:
jbom audit MyProject/ -o report.csv
This checks every component against jBOM's field taxonomy and writes findings to report.csv. Open it in a spreadsheet, fill in ApprovedValue for any QUALITY_ISSUE rows, set Action to SET, then apply the fixes back to your schematic:
jbom annotate MyProject/ --repairs report.csv
Once the schematic is clean, verify your inventory covers every component:
jbom audit MyProject/ --inventory inventory.csv
3. Fill in part numbers for JLC's LCSC supplier
An inventory file maps your generic schematic values to real parts from a supplier's catalog — in this case LCSC, which JLCPCB uses for sourcing. Open inventory.csv and fill in the LCSC column for each part you want JLCPCB to source. Set Priority to 1 on rows you want matched first.
To find LCSC part numbers:
- Search interactively:
jbom search "10k 0603 resistor" --supplier lcsc - Look up manually at jlcpcb.com/parts
- Export your JLCPCB private parts library (User Center → My Inventory → My Parts Lib → Export) and load it alongside:
--inventory project.csv --inventory jlc_library.xlsx
Coming soon:
jbom inventory MyProject/ --supplier lcsc --limit 3 -o inventory.csvwill search and populate part numbers automatically.
4. Generate BOM and placement files
jbom bom MyProject/ --jlc --inventory inventory.csv
jbom pos MyProject/ --jlc
This produces MyProject.bom.csv and MyProject.pos.csv, ready to upload to JLCPCB.
Preview first without writing files: jbom bom MyProject/ --jlc --inventory inventory.csv -o console
For the full step-by-step walkthrough, options, and troubleshooting tips, see the Tutorial series.
KiCad Integration
Run jBOM directly from KiCad's Generate BOM dialog — see docs/README.man4.md for setup.
Quick summary:
- In Eeschema, go to
Tools→Generate BOM. - Add a plugin with the command:
python3 /path/to/kicad_jbom_plugin.py "%I" --inventory /path/to/inventory.csv -o "%O" --jlc - Click
Generate.
Configuration
Built-in fabricator profiles: --jlc, --pcbway, --seeed.
To create a custom profile or configure organisation-wide defaults, see docs/tutorial/README.documentation.md and docs/README.configuration.md.
Contributing
Contributions are welcome! jBOM is developed on GitHub at github.com/plocher/jBOM.
To contribute:
- Fork the repository
- Create a feature branch
- Run tests:
pytest && python -m behave --format progress - Submit a pull request
Regenerate deterministic search parity artifacts (fixture-based):
python scripts/generate_search_parity_artifacts.py
Regenerate baseline-vs-candidate parity delta evidence:
python scripts/generate_search_parity_delta_report.py
See docs/CONTRIBUTING.md for details.
License: AGPLv3 — See LICENSE file for full terms. Author: John Plocher
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jbom-6.50.0.tar.gz.
File metadata
- Download URL: jbom-6.50.0.tar.gz
- Upload date:
- Size: 516.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c20b13bed02d2074ac44da7d94b8ff50229f72485323b840db19108ef92306c
|
|
| MD5 |
d6f462b61999cd085c833b354628c123
|
|
| BLAKE2b-256 |
b3554f438bb5f5c9174ef9c264f81825b30c0f356e6e502f3fa717719ae94b41
|
File details
Details for the file jbom-6.50.0-py3-none-any.whl.
File metadata
- Download URL: jbom-6.50.0-py3-none-any.whl
- Upload date:
- Size: 269.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66418ffa9f4af90bbae6129d03c056ba83306a6cb40c37977a39b71ed680d554
|
|
| MD5 |
0e4b1d2c69cfb33155a0c01fafd68ac5
|
|
| BLAKE2b-256 |
a553cf227121297c6c7ccd0e6547e636e66b9aaf9a19af58a938b879e9ec548b
|