Assembly variant system and DNP

“Upcoming” sounds pretty optimistic. But the basic idea would be that each symbol can belong to one or more variant and each variant can change the symbol’s properties (at least some of them), including of course the “Do not populate” attribute. In the UI the variant system would probably be some kind of a symbol fields table.

Do you know if the variant configurable characteristics will include the graphical representation of the symbol? this is one of the things i’m currently missing from OrCAD CIS…

Where can i learn more about current work in progress on the topic?

P.S. there is a new thread opened by Fox here:

maybe is better to move there…

Now the fact that the “Variantness” is to be designed around Symbol engine is surprising to me.
Simple “Populate” / “Do not populate” bit, updated in dependece with selected Variant should work in most cases (one can always use several components connected in parallel, each carrying it’s DNP flag).
Adding support for multiple sets of properties seem a complicated software design to me.

But IMO the schematic level Version management would be the ultimate solution, where the whole schematic could be updated according to the version selected. If would give the great backend for a built-in Version control where one could easily highlight changes made between commits. Kind of “visual diff/update” tool built right into Schematic editor.

There is no work in progress on a variant system. DNP is separate from variants.

1 Like

I don’t understand what you mean, because…

That’s how it will work, of course (if it will be implemented at all in the future). See Create a PCB assembly variant system (lp:#1767218) (#2131) · Issues · KiCad / KiCad Source Code / kicad · GitLab. BTW, this seems to be the most popular feature request at the moment and some developers have reacted positively, so there’s a good chance it will be seriously considered for implementation in a future version. But there’s no actual plan.

1 Like

Maybe my misunderstanding. What I understood was, that the components would store variant information (i.e. variant A with R17 = 1k and variant B with R17 = 2k). I just focused on the “each variant can change the symbol’s properties” and imagined example resistor having different, variant-dependent parameters (like Resistance for example). I thought that I’d prefer to keep two separate resistor instances for different schematic variants.

@fred4u - that seems much more like and assembly variant than something that should be a part or component variant, as that’s something that’s dealt with during board assembly vs board fabrication.

Something like an alternative package/footprint is what I see associated with component variations…

If a part is flagged as dnp, will it also be removed from 3d renders? I hope that is the case as it useful to grab some 3d screenshots as an aid for assembly, or manuals, or…

Being able to choose different symbols for a given library part is a separate issue and isn’t what people think of when they hear “variants” usually (that word usually means assembly variants around KiCad talk)

No,but mine. As can be seen in the issue, it would do what you don’t like. I wouldn’t change only the DNP attribute, but could change some other attributes, too. However, I don’t see a reason why it couldn’t be implemented in a very simple manner first so that it would change only the DNP, and later be widened in scope.

For you it may be enough to add several components (symbols and footprints) for alternative values, but it’s not necessarily enough for some other users. Think a commercial project where there are two variants, and the components with alternative values are relatively large and the device needs to be small, so that it’s not reasonable to have serveral empty footprints. IMO changing the Value is the minimum requirement after the DNP.

But I’m not still sure what you think, saying

Technically speaking “components” wouldn’t store variant information. I don’t know if it matters, but a project would have variant information for symbols.

Variant problems a deeper as they appear. Our old Mentor Expedition had a sophisticated variant manager what was practically almost useless. Poor fellow designers what are forced to work with the variant manager by their boss. Therefore we went to manage the variants with our pick an place machine for what we wrote own interface software.

The project is FOSS and located here: CAD2Board download |

Probably we plan to adapt to Kicad input format as the number of Kicad designs will increase here.

The benefits are changes “on the fly” if a components reel finishes while assembly, You may go on running the machine by disabling a single location or component model and complete the missing part by hand before soldering.

It also allows to store diffrent values for the same copper board. Disadvantage is the schematic where we simply used a text note what value for which case.

I can’t wait to hear how and why it was useless. If variant management is implement in KiCad, it’s important to avoid possible pitfalls.

Basically it works with a variant property assigned to schematic symbol while its placed in schematic. Mentor uses a property list with flags on what happes if the symbol is copied from library to project schematic. Some properties are only template, others are filled from database or from the designer. Finally the variant property is used to control the BOM output, assembly diagramms and more. Practically you lost overview on what to use where if you dont track all the variants with pencil on paper.

The variant diffrences are best shown in a ASCII table but you cannot gain overview in graphic schematic. If you have a filter with 10 frequencies you get 10 schematics and put each one on the table to search for the small diffrences. Maybe capacitors are not only dropped but change to a inductor. Its simply to complicated to remember too much things for a variant while editing schematic as its not only a very simple modification for a few components like 115/230 Volt.

Once I have some free time I plan to do some Kicad-Mentor comparison videos and variants could be one of them

I believe that having a similar functionality like Mentor Expedition variant manager in Kicad would be a great advantage and satisfy 95 % of user needs. No problem to imagine cases where Mentor or similar industry standard variant managers are still considered insufficient.

The restriction of most variant managers is that they don’t allow variant symbol graphic and require compatible footprints (cells) in the layout. The latter is obvious as long as variants are targetting to the same PCB artwork.

A DNP attribute that is annotated in the schematic, e.g. symbol crossed out would already help a lot. Next step would be a variant value and part number field.

Yea if we were to implement variants we would do something similar to Altium not Mentor. You would be able to see schematic and 3d model differences.


@eelik & @marekr and other devs: If you feel motivated to work on the variant issues, I collected some informations from screen-dumps, tooltips with my notes from Mentors user seminars. Anyhow this feature has a low priority for me as I rarely used and perfect implementation seems much too complex. Some comments for Kicad readers are in rectangular braces and I hope you can compare with your Altium installation and use the best from all. If there are any Kicad users with a CadStar installation, I am interested to compare how Zuken solves the variant problems.


Variant Manager requires reference designator and part number of a part for its operation:

The master data source for Variant Manager can be retrieved from schematic (CAE) or ASCII netlist and is synchronized with the Variants Database what contains information about:

  1. The components used in the Master Database.

  2. The Variants available for Master design. This information is referred to as the variant definitions.

  3. The changes per variant compared to the Master design.

  4. Generation settings for the creation of CAE, CAD, Report Writer and ASCII Reports output for the Variant Designs.

  5. Links to the Variant Manager data in the Central Library .

The Variants Database is a Microsoft Access database. Common tools like MSAccess can be used to extract additional A Central Library is a collection of interrelated libraries with an improved level of integrity and consistency checking. A Central Library contains a library control file (.lmc) [Kicad-Preferences-ManageLibs is better} that maintains the inventory of the contents in the Central Library. Libraries are the storage locations for Parts (PDBs) [Note: non graphical part of Kicad Symbols], Cells [Note: Kicad footprints], Symbols [graphical part of Kicad Symbols], IBIS Models, and padstacks. [Note: There are many discussions about Kicad lib and good reasons on how to improve as it is a prerequisite for other powerful features beside the variants. Kicad already took the correct direction with introduction of V6 inheritance and V7 database but I like to keep this discussion here away].

To optimize the search speed for parts and to be able to create Report Writer databases, Variant Manager stores the parts database information in a different structure inside the Central Library. The tool to execute this task is the Variant Manager Central Library Data creator.


To create a new variant with an entry in the variants data base, the Variant Definition Display tool is available


Variants are defined by the properties, (uniqie) Name, (company) number for the Variant and Description

In the display order area you define if a variant should be displayed in the edit grid of the main menu and its order in that list.

The variant manager user interface


Highlight scrolldown menue allows Variant Manager to transmit to other tools by using cross probe highlighting. The communication can be bi-directional. To review and set the cross probe highlight settings select View->Toolbars->Cross Probe Transmit and/or Receive from the Variant Manager’s main menu. This is a toggle option that displays or un-displays the cross probe settings. Choices beside Highlight are Highlight&Fit, Select, Select&Fit.

AutoUnplace scrolldown menue allows Variant Manager to receive from other tools. If you select a symbol in schematic, it becomes DNP on the PCB. AutoLikeMaster is the opposite option. If you select in schematics, part is changed to reflect the master. The funnel symbol is a page filter, what allows to select only those parts what are on same page.

Below there is a spreadsheet to define the Variant Data. First two columns list the Master Part Number and the Reference designator of the component in the Master design. This colums are fix and cannot be edited. Columns three to n- list the Variants that are being edited. Note that the Variants that are listed in these columns can be set up in the Variants Definitions menu. Typically, defining Variant Data is done as follows:

  1. Select the Variant column and row that must be changed. Depending on the View Parameter Settings, the list of Equivalent Parts is updated to show the parts that can replace the current part.

  2. Before performing operations on the variants, you can select on grid cell or a block of grid cells. The operations are performed on the selected block. Refer to Selecting items in the edit grid for more information .You can perform one of the following operations:

A. Edit the entry in the Data Edit Grid manually without using the Variant Data Action buttons (only if one cell is selected). Key in the new part number.

B. Select a new part in the Equivalent Parts list and apply it with the Apply button. (Note: double clicking the part in the equivalent parts list automatically applies the part)

C. Select the Like Master Variant Data Action Button. This resets the current entry back to the partnumber of the Master Design.

D. Unplace the component with the Unplace Variant Data Action Button button.

The Avialable Equivalent Parts list shows all the parts that can be used to replace the current component. The following rules apply to this list:

  1. When a component is selected in the Variant Data Edit Grid, the Variant Manager looks up the part numbers that can be used to replace the current component. The criteria for this selection as well as the layout of the Equivalent Parts List are defined in the Equivalent Parts List Setup Menu Refer also to Property Matching for the equivalent parts list for more information on selection criteria.

  2. If the part number, selected in the Variant Data Edit grid, is not found in the Central Library, the title of the Equivalent Parts List is displayed in red. In this case, all parts in the Central Library are selected, regardless of the selection criteria.

  3. If the part number, selected in the Variant Data Edit Grid, is found in the Central Library, the captions of the columns in the Equivalent Parts list reflect the property values of the selected part number.

Once the list is displayed, you can select a new part number from the list. This part number is placed under the Apply Variant Data Action button where it can be used to modify variant components. Alternatively, a double click in the Equivalent Parts List immediately changes the variant cell or block being edited.

Generate schematic with the CAE Output tool


The tool for CAE Output Generation sets the flags for schematic symbols:

Replace symbols replaces existing schematic symbols when they have an entry in the column called ‘symbol’ in the variant manager data in the Central Library for the new part number. This entry is used as the new symbol name. The part represents a one-gate component [Gate is a Kicad symbol unit] Note from Mentor itself: Symbol replacement should be used with caution. The Variant Manager assumes that symbols are interchangeable. This implies that all symbols have the same origin and pin spacing. In addition, their orientations must match. Using this feature requires a thorough verification of existing symbol libraries to make sure that symbols can be interchanged easily.

Unplaced symbols options define how unplaced components are to be processed

Delete s the symbol of the unplaced component from the schematic, leaving the wires that were used to connect to the schematic. The dangling wires, resulting from this delete operation, are removed.

Change color of symbol to show the unplaced component in a different color. To change the color, select the colored box next to Change color. A color picker appears that allows you to select a different color.Note: If you want to hide an unplaced symbol, use black as the change color

Hide unplaced symbol makes the symbol invisible. The list of properties that must be made invisible can be found in the Props_NotVis_In_Unplace list in the project file

Active variants show only the variants that are contained in the edit spreadsheet. If this box is unchecked, all variants that are defined are listed. Alternatively, unplaced graphic symbols can be used to represent unplaced symbols. Symbols, which refer to an unplaced graphics symbol, are never deleted but they are replaced with their unplaced graphics symbol. Refer to Additional CAE properties required by Variant Manager for further information.

Practial steps to generate Design Capture CAE data

  1. Setup the flags in the CAE Output generation menu.

  2. Select one or more variants in the variants list. Refer to Using the variant selection list for more information.

  3. Press the Process button. The Variant Manager generates a new schematic design. The directory path for the Variant design is <variants_path><variant_name>. <variants_path> and is defined in the Project Settings menu. <variant_name> is the name of the variant being created.Properties on the symbols (value, tolerance, …) are replaced, provided there is an entry (column) for the property in the Variant Manager data in the Central Library

  4. During the generation of the schematic(s), all strings with a special syntax are replaced with their proper value.

  5. Once the schematic(s) are generated, they can be viewed and manipulated with Design Capture. A new project file is placed in the <variants_path><variant_name> directory. It should be used as the basis for traversing the new variant schematic(s)

  6. When Design View is being used, a new configuration for the variant is created. When the tool is opened it switches to this variant configuration.

  7. (Design View only) The Set to Master button can be used to activate the master configuration in Design View.


  1. Depending on the number of schematics in the project, this can be a time consuming operation.

  2. Every symbol that was changed by the Variant Manager receives the property ‘Variant Information’. This allows the use of ‘Query select’ to trace back variant symbols in a schematic

  3. In contrast to CAD output generation, CAE always creates a full copy of the original Master design.

  4. The .sbk files of the variants are prefixed with the variant name for easy recognition.

  5. If you want to include cross reference tables in your schematic pages you need to prepare the project for cross reference tables before generating the variant schematics.

Variants and instance edit designs

The schematics that are generated for the variants contain additional data of unplaced graphics symbols, new borders and cross reference tables. It is currently not possible to support this directly in designs that use instance editing (several instances of a block refer to the same schematic). For these types of designs, the following procedure is used.

  1. The master design is created using the instance edit functionality.

[Note: Instance Edit replaces the reference designators in schematic with another set of reference designators]

  1. At the time the variant is created, the master design is copied to the variant design and all multi references to one schematic are resolved. This is done, by creating copies of schematics that are referred to by multiple schematic blocks.

  2. The resulting new design tree is listed in the project file of the Variant and configuration of the master project

  3. Finally, the newly created schematics are modified to reflect the variant data.

The end result is a new project/configuration that no longer uses instance edit. Every block refers to a unique schematic and all schematics have the correct border data and cross reference tables.

Generate PCB with the CAD Output Tool


Options for unplaced components define how unplaced components are to be processed:

Unplaced padstacks replace the padstacks of unplaced components with their unplaced equivalents.

[Note: Padstack lib is on the Kicad wishlist more urgent than variant managers]

Remove nested parts if the part to be unplaced contains nested mechanical or drawing cells [Kicad footprints]

Keep Refdes . keeps the reference designators of the parts that are unplaced (selectable for Assembly and Silkscreen)

Keep Partnumber keeps the part number of the parts that are unplaced (selectable for Assembly and Silkscreen)

Keep outlines keeps the original outline of the unplaced component. The graphics on the unplaced graphics layers are still moved to the assembly or silkscreen layers, (selectable for Assembly and Silkscreen).

Active variants only to display only the variants that are contained in the edit grid

Pracital steps generating CAD data

  1. Expedition PCB is invoked on the Master design.

  2. In Expedition PCB, the Variant Manager menu application is displayed with Output->Variant Manager

  3. In the Variant Manager CAD Output Menu all flags are set for CAD output generation

  4. Select the variant to process. Refer to Using the variant selection list for more information

  5. Press the Process button The Variant Manager generates the data required to create the Variant layout and passes it on to Expedition PCB. The variant name is displayed in the title banner of the display window.

  6. In Expedition PCB you can generate the required output data for the selected variant.

  7. To reset the design back to master mode in Expedition PCB, display the popup menu with the right mouse button and select Set to master. The Variant Data is created in the design file of Master design where it can be used to create the output data.

There are further and similar menues for the Reprot Writer and ASCII reports. The report writer is a 3rd party tool needed to read the database to extract assembly positions for pick and place machines and other reports.

1 Like

Just noticed the new, bold Crossed-out “DNP” symbol in my schematic for the latest Nightly.
Nice! Previously it was only greyed out.

1 Like

I added a screenshot to show the difference.

I posted a screenshot to show what it looks like, not because I like the solution.

I quite agree with mf_ibfeew (below) that it distracts too much for a thing that is not even placed. Only greying it out is not a good solution either. What a bout a much thinner grey cross? With the same color as the part itself it won’t distract much, and when you keep the cross it also works on black and white prints.


Just to express that there are also different opinions on this DNP-cross-display: I really don’t like the cross-solution. It points the attention to a part of the schematic which in reality doesn’t deserve this attention - because it’s not populated. Like Altium also Eagle had this cross-solution - and it was distracting in both cases. I judge the “disply DNP-symbols as dimmed” as the much better solution (with the disadvantage for black&white-printout).


Totally agree, this super thick red cross makes no sense.