BOM Management in KiCad and EasyEDA: Export for JLCPCB
A Bill of Materials (BOM) is the complete list of every component used in your PCB design — part numbers, quantities, values, footprints, and sourcing information. Good BOM management is what separates a professional PCB design from a prototype that cannot be reproduced. For Indian engineers ordering assembled PCBs from JLCPCB, understanding how to structure and export your BOM is essential to getting accurate PCBA (PCB Assembly) quotes and error-free assembly.
This guide covers BOM generation in KiCad and EasyEDA, how to format BOMs for JLCPCB SMT assembly, component substitution strategies, and BOM management best practices.
What Is a BOM?
A BOM lists every unique component in your design along with:
- Reference designator (R1, C5, U3…)
- Value (10k, 100nF, ATmega328P…)
- Footprint/package (0402, SOIC-8, DIP-28…)
- Manufacturer and manufacturer part number (MPN)
- Quantity needed
- Unit cost (for quoting)
The BOM is used by: assembly houses for ordering components, procurement teams for cost estimation, inventory management systems, and production records for traceability.
BOM Fields and Attributes
In your EDA tool schematic, every component symbol should have these properties filled in:
| Field Name | Example | Required For JLCPCB |
|---|---|---|
| Reference | R5 | Yes |
| Value | 10k | Yes |
| Footprint | 0402 | Yes |
| MPN (or LCSC) | C17497 / RC0402FR-0710KL | Yes (LCSC# preferred) |
| Manufacturer | Yageo | Optional |
| Description | 10k resistor 1% 0.1W | Optional |
| Datasheet | URL | Optional but good practice |
BOM Generation in KiCad
Method 1: Built-in BOM Export (KiCad 7+)
- In KiCad Schematic Editor, go to Tools > Generate BOM
- The built-in BOM dialog opens. Select the output format (CSV is most useful)
- Choose fields to include: Reference, Value, Footprint, Quantity, and any custom fields you added (MPN, LCSC, etc.)
- Set “Group By” to Value + Footprint to consolidate identical parts
- Click Generate — saves as a .csv file
Method 2: KiCad BOM Script Plugins
KiCad supports Python-based BOM plugins. Popular options:
- bom_csv_grouped_by_value: Built-in KiCad plugin, groups parts by value. Good for manual ordering.
- KiCost: A Python tool that auto-fetches prices from distributors (Mouser, DigiKey, LCSC) and generates a cost-optimized BOM. Install via pip:
pip install kicost - InteractiveHtmlBom: Generates an interactive HTML BOM with PCB overlay — extremely useful for manual assembly. Download from GitHub (openscopeproject/InteractiveHtmlBom).
Adding Custom Fields in KiCad Schematic
To add LCSC part numbers to every component:
- Select a component in the schematic
- Press E to open properties
- In the “Fields” tab, click Add Field
- Name the field “LCSC” (exact capitalization matters for JLCPCB BOM import)
- Enter the LCSC part number (e.g., C17497 for a common 10k 0402 resistor)
- Repeat for all components
Tip for efficiency: Edit the symbol in the symbol library to include the LCSC field with a default value. This saves entering it on every schematic instance.
KiCad BOM CSV Column Order for JLCPCB
JLCPCB’s BOM importer expects specific column names. Configure your KiCad BOM export to match or rename columns afterward:
Required JLCPCB BOM columns:
Comment (= Value field)
Designator (= Reference, comma-separated for groups: "R1,R2,R5")
Footprint (= package description)
LCSC Part Number (= LCSC field)
BOM Generation in EasyEDA
EasyEDA Native BOM Export
- In EasyEDA Schematic Editor: go to Fabrication > BOM (Bill of Materials)
- EasyEDA auto-generates a BOM from component properties
- Review the list: verify LCSC Part Numbers are populated for all components you want assembled
- Download as CSV or XLS
Setting LCSC Part Numbers in EasyEDA
EasyEDA integrates directly with LCSC (both owned by JLCPCB parent company EasyEDA/SZLCSC):
- Search for a component in EasyEDA’s component library — LCSC part numbers are already linked for library components
- For custom components: in component properties, set the “LCSC Part Number” attribute directly
- EasyEDA’s one-click JLCPCB order automatically passes the LCSC numbers to the assembly order
JLCPCB BOM Format
When uploading your BOM to JLCPCB for SMT assembly (PCBa service), the BOM CSV must have these columns:
Comment,Designator,Footprint,LCSC Part Number
10k,"R1,R2,R3",R_0402_1005Metric,C17497
100nF,"C1,C2,C4,C5",C_0402_1005Metric,C307331
ATmega328P-AU,U1,TQFP-32,C14877
1uF,C3,C_0805_2012Metric,C28323
Important rules:
- Multiple designators for identical parts must be in a single cell, comma-separated and quoted: “R1,R2,R5”
- LCSC part numbers must be current (LCSC stock can go out of stock — verify availability before ordering)
- Footprint column is informational for JLCPCB — they use the Gerber/CPL for actual placement
- Components with no LCSC number cannot be assembled — mark them as “Do Not Place” or source externally
Basic vs Extended Library at JLCPCB
JLCPCB divides components into:
- Basic library: ~1000 most common passives and ICs. Free to use (no extra setup fee). Mark with “(Basic)” in part picker.
- Extended library: 300,000+ parts. Each unique extended part adds a ¥3 setup fee per part.
For cost optimization, use Basic library parts wherever possible (common 0402/0603 resistors and capacitors, standard logic ICs).
LCSC Part Numbers and JLCPCB Assembly
Finding LCSC Part Numbers
- Search lcsc.com directly for your component value, package, and specs
- Use yaqube.de/kicad-bom-tools for KiCad-specific LCSC lookup
- EasyEDA component library shows LCSC numbers inline
- Component Search Engine (componentsearchengine.com): enter your component, get multi-distributor links including LCSC
Verifying LCSC Availability Before Ordering
Always check LCSC stock levels before finalizing your BOM for assembly. JLCPCB will reject parts that are out of stock. Use the LCSC website or JLCPCB’s BOM upload tool which checks stock in real time during order entry.
CPL (Component Placement List)
JLCPCB requires a CPL file (also called pick-and-place or PnP file) in addition to the BOM. The CPL defines the X,Y coordinates and rotation of every SMD component to be assembled.
KiCad CPL Export
- In KiCad PCB Editor: File > Fabrication Outputs > Component Placement (.pos)
- Set: Format = CSV, Units = mm, Only SMD footprints = Yes (for JLCPCB SMT assembly)
- KiCad generates a .pos file with columns: Ref, Val, Package, PosX, PosY, Rot, Side
- JLCPCB CPL column names: Designator, Val, Package, Mid X, Mid Y, Rotation, Layer
- Rename columns to match JLCPCB’s expected names
EasyEDA CPL Export
EasyEDA’s Fabrication > PCB Fabrication File automatically includes the CPL in the download package. Named as “Gerber_PickAndPlace_*.csv”.
Common CPL Issues
- Rotation offset: KiCad’s footprint rotation origin and JLCPCB’s pick-and-place machine reference can differ by 0, 90, 180, or 270 degrees depending on the footprint. If assembled components are rotated, add offsets in the CPL file for those footprints.
- Origin mismatch: JLCPCB uses the board origin as 0,0. Ensure your board origin (set in PCB Editor) matches the expected reference point.
Source Components for Your PCB Build
Need components for manual assembly or prototyping alongside your JLCPCB order?
- Arduino UNO R3 — DIP-28 ATmega328P platform for hand-assembly prototypes
- Waveshare ESP32-S3 Nano — Module to integrate into your custom PCB design
- ESP8266 Module — WiFi module for IoT designs requiring wireless connectivity
BOM Management Best Practices
- Use LCSC numbers in every schematic component: This allows direct BOM-to-assembly-order flow and eliminates manual lookup at order time.
- Verify stock before design freeze: Check LCSC stock for all non-standard components. If a critical IC is out of stock, find alternatives early — not after PCBs arrive from the fab.
- Prefer Basic library parts for passives: Use standard E-series values (10k, 100nF, 1uF) from JLCPCB’s Basic library to minimize extended part fees and stock risk.
- Version your BOM: Keep BOM in version control (git) alongside your KiCad project. Tag BOM versions with hardware revisions.
- Separate DNP (Do Not Place) components: Mark test points, optional components, and debug features as DNP in your BOM. JLCPCB accepts DNP designators and will skip those pads.
- Document substitutions: When you substitute an equivalent part (different manufacturer, same specs), note it in the BOM “Notes” column for traceability.
Component Substitution in India
LCSC/JLCPCB primarily stocks Chinese brand components. For prototypes assembled in India (hand assembly or local assembly house), you may need to source from Indian distributors:
- Mouser India: Wide range of Vishay, Murata, TDK passives and ICs. Higher pricing than LCSC but genuine parts with full traceability.
- DigiKey India: Similar to Mouser, excellent for specialized components
- Element14 (India): Farnell/Avnet distribution, strong industrial component selection
- Robu.in, Zbotic.in: For development boards, popular modules, and project components
When substituting, verify: value, package, and critical specifications (voltage rating, tolerance, temperature coefficient for capacitors). Document in BOM with MPN cross-reference.
Frequently Asked Questions
What is the difference between BOM and CPL for JLCPCB?
The BOM (Bill of Materials) lists which components go on the board — part numbers, values, quantities. The CPL (Component Placement List) tells the pick-and-place machine where on the board to place each component — X/Y coordinates and rotation angle. Both files are required for JLCPCB’s SMT assembly service. Without the CPL, JLCPCB cannot assemble your board.
Can I use JLCPCB assembly without LCSC part numbers?
JLCPCB’s SMT assembly service requires LCSC part numbers for the components they source and assemble. If you have custom components or parts not in their library, you can ship them your components (consignment assembly) but this adds complexity and cost. For the most streamlined process, design your BOM around LCSC-available parts.
How do I handle multi-value substitutions in the BOM?
If a specific LCSC part is out of stock and you choose an equivalent, update the LCSC number in your BOM and add a note in the Description field. If the substitute has slightly different dimensions (different footprint), you will need to verify the footprint matches — JLCPCB will reject orders where the LCSC part footprint does not match your Gerber pads.
What does DNP mean in a BOM?
DNP stands for Do Not Place (or Do Not Populate). It indicates a component position exists in the PCB design but should not be assembled in the current build. Use DNP for optional features, test pads, debugging components, or parts that are assembled only in specific product variants. In JLCPCB orders, list DNP components in the BOM with “DNP” in the Designator or Note field.
Is KiCad BOM compatible with Altium BOM format?
Not directly — they use different field names and structures. For cross-tool BOM management, export both to CSV and use a mapping table to align field names. Tools like KiCost or OpenBOM provide cross-tool BOM management. The key data (reference, value, package, MPN) is the same regardless of EDA tool — only the column names differ.
Source PCB Components for Your Next Design
Find development boards, cables, and electronic components to complement your custom PCB projects at Zbotic.
Add comment