Handling No Fit Components in Designs


I’ve been attempting to figure out how to handle No Fit components for a while now. I’m using a mix of Altium and KiCAD (work and home) and I don’t know a good way of dealing with them yet.

I’ve been putting “ref-NF” in my designs, but then you have to deal with the footprint reference having the “-NF” on the PCB. There are also designator errors when adding a new component. You can double up on a reference because C4 is now “C4-NF”. In space constrained boards, this is a big problem. In the BOM it’s okay, but I’ve had questions about the quantities from manufacturers (rightly so). There are 4 designators, but only quantity of 3 needed?

To combat the manufacturer question (and remove the amount of post-processing on the BOM), I thought of doing “NF-ref”, but it has the same problems when doing the design. You can double up references and have space issues. It at least splits out the lines in the BOM for the No Fit components.

I know in Altium that you can specify a component to be excluded from the BOM in the schematic (and a note could be placed on the schematic that it’s a NF component so it’s not forgotten). In KiCAD is there a way to do this? I know I could create a field like “No Fit” and if “yes” then exclude from the BOM. This would require some new code to be written for the BOM generation script as far as I know.

But is there a better way? Do no fits belong in the BOM at all? What about assembly? Is there a way to exclude them from pick and place? Or to clarify that it’s a no fit if doing hand assembly?

So many questions and I would love to hear what other people are doing for this.


In Altium, my footprints have a parameter that is “Populated” and by default it is assigned to YES. In schematic, I will modify the component instances that should not be populated to DNI (Do Not Install). This parameter then gets exported to the BOM. with explicit instructions as to what is populated and not populated.

This system is not perfect but it is what I do. Also for a very formal release, I will add a note to the assembly drawing calling out what res des are “Do not populate”

Part of the issue is that there are a lot of names for the same function:
No Fit (NF)
Do Not Install (DNI)
No Pop(ulate) (NP)

In my opinion, all components (including DNI) should be on the BOM because they appear in the silk and Pick and place files, CM’s will as the question if they find a part that is in those files but not on BOM.

Also, the assembly drawing is gospel for a CM so I do think that this is the most clear place to put the requirement. BOM is secondary and sufficient too, just not as formal.

Altium does have a “Board Variant” feature which would be the way to manage this with a tool. I tried using it once but failed. I don’t know to be honest how it marks DNI except that it places a giant red X through the component in the schematic.

Personally, I don’t like the idea of having a -NF added to the reference des but it probably works fine with little communication. The issues that I see are that if affects your Silk so if you ever want to populated, that gets confusing. Also the fact that C4-NF and C4 are two unique ref des. I’m also paranoid that EDA parsing tool might choke on having a - in a ref des.


Hey @LukeBeno, thanks for the thoughts. I have a couple of follow up questions for you.

Is there a field in your BOM that is shows DNI status? How do you handle mixed fitted and not fitted components. For example you use a 10nF cap 10 times, but only 7 are fitted? Do you remove the DNI components from the quantity, but leave all of the designators in the BOM? Also do you have issues remembering later what parts are not fitted? Or do you leave yourself comments on the schematic? I ask because one of the boards I’m working with has around 500 components and I have no way of just remembering or seeing at a glance what is no fit or not.

Also what kind of assembly drawings do you export? How do you add notes? I’m still pretty new to the manufacturing side of PCBs / generating assembly information for manufacturers and don’t really know what I’m doing there.

Thanks for the reply though, very useful information!


I leave unpopulated components on the schematic and in the BOM. I give them a Value of “DNP”. I leave the Manufacturer, Manufacturer’s Part Number, and Description fields with the original component info in case I ever want to restore the component. Never had a CM complain - when they see DNP in the Value field that’s enough.


Humm, that’s an interesting idea @JuliaTruchsess.

I don’t currently use Value that way in KiCAD. But I like the idea. Using the visible field in the schematic to mark the no fit status. This pulls the component out of the grouping, but leaves everything else intact.

I’d have to add a field to the BOMs, like with Luke’s suggestion, but I also get the marking on the schematic. Since most of the time if it’s no fit, who cares what the value was going to be. It only matters when it’s added and that can easily be looked up.

Now if only the Altium files I am working with were consistent in what the visible field was! They use a mix of “Comment” and “Value” and who knows what other special fields. And if only the Altium BOM generation didn’t take literally 45 minutes to complete! I still can’t believe it. It has to be something with my BOM template as there are a lot of macros, but for the life of me I don’t understand why.

Anyone else have a good idea? I’m still open to new ideas and since it’s just me at work at the moment, I have free reign on implementing new ideas.


I have a separate custom field in KiCad for “Population”. I also created another one called “Value Modifier” because I want to keep “10 uF” in the value field and “16V X7R” in another field.

The key point in all of this is to use a different BOM export tool than the standard. The KiBom plugin allows you to modify your export using a .ini file, which is critical in this case. Otherwise I kept running into a similar problem I think you’re describing: all of the parts, regardless of DNP status, got exported onto a single line (when grouping by MPN). The KiBom allows you to group by more things, including population during export. That is very helpful, as are many other of its functions.

I realized I have never made a video about this. I’ll try to this week!


In my case, Altium will automatically kick the BOM item to a new line if it identifies that not all of its parameters are the same (including Populate=DNI vs Populate = YES). Sounds like this is not a default feature of Kicad which I do not currently have much experience with. Chris is the expert here.

I think that Chris also recently did a video on assembly drawings. While they are not exactly needed in the process, as you build thousands of assemblies, they are useful because they are the contract between you and the CM, in theory if they violate a requirement in the ASM drawing, you can reject the assembly. This includes things like how to clean the board, strangulate, label, etc.


@ChrisGammell I went on a KiCAD BOM Tool bender for my last project and ended up writing (re-writing?) a new script based on one of the included scripts. I wanted to use a template I made and it was the easiest way of doing it that I could find. I don’t think adding it would be so hard… he said before dying before getting the coding right

I did try KIBOM, but it seemed a little messy. I might go back and try it again though. I’m a sucker for a nicely formatted BOM. The other thing I do is include PCB Information in the BOM (Copper weight, layers, colors, etc). So it was easier to include that on my own.

@LukeBeno Ah okay, so you are grouping the parts by population status. No, it’s not a default feature of KiCAD at the moment. BOM generation in KiCAD is very “how ya doing” to borrow from EEVBlog. KiCAD’s not my immediate concern as I was asking more for work. But I figured if I was asking for work, why not see how other people do it in KiCAD too.

We are working on getting some boards ready for full scale production and I’m running into that whole “Drawings are gospel” thing and “What is a BOM, where is my drawing!”. Mostly because the BOM and drawing are out of date due to many, many reasons. And I’ve had questions about how the BOM was set up with mixed fits and not fits. But I didn’t know any better and neither did my more experienced co-worker who has since left.

I’ll have to watch that video Chris did then!


No worries, we’ve all been there! Most of these processes exist because of the same “Baptism by fire” experience that you are doing now. Everyone tweaks the process in a way that makes sense to them and their unique business situation.


I’ve actually written a standalone desktop app that parses a KiCad .sch file directly, and which outputs csv. A cool feature is that you can have it “live update” so that as you’re working on the schematic in KiCad you can see BOM changes in the app immediately (as opposed to KiCad’s modal “Edit Symbol Fields” window). It has grouping and filtering, Parts List and BOM views, section breaks, and some stats reportage. Mac version works great but unfortunately not so much under Windows :frowning: If I ever get it reasonably bug-free I’ll share it.


Odd, the image displays in the message preview :frowning:


While I have a mac in the house, it’s not mine to use. What’s the issue with the Windows version? I would offer my help, but I’m sure my programming skills are waaaaaaaaaay lower than yours. That and I don’t really need another project. haha.

It looks really nice though!

PS: the image is working now!


I’ve always used Variants in Altium to do this.

I’ve found that some assembly houses prefer that DNP components are NOT present in the BOM (it confuses them), but most understand if a component is present but marked DNP.

I’ve always used a custom BOM template for Altium excel exports that makes it pretty clear (the DNP rows are shaded a different color).



And if only the Altium BOM generation didn’t take literally 45 minutes to complete!

I’ve had success fixing this problem by turning off the supplier search in the Altium preferences. It seems like Altium tries to pull data from Digikey, Mouser, etc. every time you generate the BOM


@LukeBeno And I appreciate the help for sure! While I enjoy being thrown in, I do at least like to have a solid way of doing a thing while I’m being cooked.

@mightyohm What are your variants then? One for with DNP in the BOM and one with DNP not in the BOM? Or do you break it up into more variants based on the design somehow? I was experimenting with shading DNP rows in my template too, but since I didn’t have a way of automating it, it’s fallen on the wayside. It’s coming back to haunt me though, so it’s time to fix it!

@chia.brian I’ve looked into that before, but I’m not sure how to “turn it off”… I’ve had it on cached data in the BOM export dialog for a while. Other than that, there isn’t an “Off” button that I can see. Do I just remove Digi-key (the only supplier I have checked) from this window?

I am using AD19 at work. Mostly because I was having issues with Digi-key supplier search in AD17. And AD18 has a 3D bug where you can’t select faces on the inside of 3D models when trying to define a board shape. We use this as our PCBs are placed into enclosures and the PCB size is defined by the housing. It’s a little annoying, but it works. AD17 did have the same slow export though!


Yes, in AD19 unchecking the supplier is all I did and that seems to help. Not sure what you are using for a library but at my office we are using an Access database and network speeds/VPN also affect how fast the BOMs are generated.


@chia.brian I think I have an idea why it’s slow. I was looking back at the BOM export settings for my outjob I was just setting up and I see that “Manufacturer” and “Manufacturer Part Number” are still coming from “Server”.

Whatever -that- means. I mean sure, it likely means that it’s coming from Digi-key, but boy they could have explained that better.

What’s strange to me is that I unticked Digikey in my preferences already. And if I’m reading the blue correctly, that “Server” is unchecked, while “From Schematic” is checked. Some great UI design there. I restarted AD19 and it’s still pulling MFG/MPN from “Server”. :confused:

We don’t use libraries like most people would use in Altium I would guess. Since we don’t stock components in house, we have non-atomic libraries. Parts that we want to build with are loaded into via supplier search on the generic components. Similar to how you would with KiCAD. I’ve been toying with the idea of building a material management tool/database, but I’m too limited on my time. But I would like to start re-using components as much as possible to simplify things.

If I sound bitter, it’s just that Altium has a lot of UI and design quirks that really eat at my soul. And it doesn’t help that searching seemingly only yields Altium’s useless documentation pages over and over again. It’s really annoying because Altium has some nice feature but also some asinine ones too.

As a side note, how long does a BOM generation take for you? I started this generation attempt to see if having the supplier unchecked worked and it’s still taking a long time. There are a lot of macros and formulas in the BOM template I’m using that could maybe be an issue? but… Not sure. it took about 20 minutes to get to the “Updating fields” portion. It’s looking to take another 20 for putting everything in the file.


@ScottS I just generated a BOM with 140 line items and 495 components and it took less than 5 minutes. With the Digikey supplier it takes about 10 minutes. As I mentioned previously we use an Access Database for the components and everything the is printed on the BOM comes for the Access Database. Our database actually came from an Orcad/Pads design flow so I don’t use many of the Altium keyword parameters. For example our parameter for the manufacturer is a user parameter named “MFR” instead of “Manufacturer 1”. Not sure if Altium tries to do anything fancy with their keywords. For the BOM template we don’t have any macros but do use a few formulas.


The variants panel has the option to select “fitted” or “not fitted” for each component. For my primary variant (usually called Prototype or Production), I select “not fitted” for the DNP components, and when I export them there is a column in my BOM template that shows fitted/not fitted status. I also usually have a variant that has ALL components populated that I use for mechanical clearance checks and visualization. The shading of rows in Excel is done automatically by my BOM template, using conditional formatting in Excel.


Stepping back from detailed implementations, the traditional method for documenting variations in an assembly is on the BOM / Parts List. Usually this is depicted as several different QTY columns, each column being identified with a certain “dash number”, e.g,. -1 or -2.

In the past, I’ve used this for differentiating between a prototype and a production version of a PCB, maybe the prototype has a potentiometer but the production had two fixed resistors. The dash number can also be used to identify different grades of an assembly, say -1 might be the commercial temp range, and -2 the industrial. It can get out-of-hand if you have lots of variations.

To summarize, the top-level assembly drawing, which includes as well the schematics, the PCB, the parts list, and any mechanical items, can define several variations of the assembly simply be dash number, without needed a completely new set of drawings for each variation. If your assembly was “Wonderful Widget, P/N 201333”, the commercial temp range version might be 201333-1, and the industrial version 201333-2.