The list below gathers comments regarding KiCad's UI possible
mostly based on the "UI and usability enhancement message from Attila Kinali.
I also incorporated the comments I got from my friend Andrew Bradford.
These are marked with (bradfa).
All comments are based on kicad from bzr from about a month ago
Of the general rules of UI design, the most important one is
both internal and external. Consistency helps the user to develop a mental
model on how the application is supposed to work. This help in not needing
to remember exactly how to do X, but being able to derive the key presses,
mouse movement, etc on the spot. External consistency is a behaviour similar
to other applications, internal consistency behaviour that is similar within
the application itself.
One example where Kicad fails with internal consistency are the symbol
component editors compared to the schematic and layout entry respectively.
Even though they do very similar things, they work differently.
An example where Kicad fails with external consistency is the use of the
mouse wheel. While all EDA, CAD and simple drawing applications I've used
in the past have the following mapping:
wheel -> up/down
shift-wheel -> left/right
ctrl-wheel -> zoom
Kicad has the following mapping:
wheel -> zoom
shift-wheel -> up/down
ctrl-wheel -> left/right
And this is probably my biggest gripe with Kicad. Even after several
of using Kicad, I still use the wrong one in the first try. If possible,
I would advise to change this before the release, as the release will
attract a lot of people who have never used Kicad before and they will
for sure stumble over this as I have. Especially as this cannot be changed
in any of the preferences menus.
The second most important rule of UI is to make things explicit. Do
hide the state a certain tool is in, but show it somewhere. For example,
the push-and-shove router only works with the OpenGL canvas. This is highly
non-obvious. I had to look at Tomasz introduction video twice to spot the
hint that I have to change the canvas. Also, the different canvases behave
differently. This is not a good idea. If there is need to have multiple
canvas types, then make them behave exactly the same, or at least as far
as possible and warn the user when he is trying to do something that the
current canvas type does not support. But better still: remove all canvas
types but one.
In a similar vein, why the heck is dragging behaviour of tracks hidden
the track settings context menu? It took me half a day to figure out why
dragging tracks moved the whole track element instead of drag the track
elastically. Even though I guessed it was some setting somewhere, I could
not find it in any preferences menu. A good way to at least alleviate
this issue is to put all persistent settings into one big (tool-)global
preferences dialog. If you have a look at commercial EDA/CAD tools, they
have homogenous preferences dialogs, with hundreds if not thousands of
settings. Yes, this is cumbersome. But at least you have a chance to find
a setting there, even if it means to check each sub-dialog.
The place where Kicad has done this right are the lists of key
Heck, I love this! I wish more tools had an accessible list like this,
that is only two mouse clicks away!
Hot keys mapping
The third rule most important rule (in an CAD like application) is the
placement of keys and symbols. The farther they are apart the more mouse
and hand movement is necessary to use them. E.g. a wire is placed pressing
W, but to end it, one has to press K. While this would be ok if one had
both hands on the keyboard, but for this task the right hand rests on the
mouse and draws the wire. So one has to either lift the right hand from
the mouse or move the left hand over to the right half of the keyboard.
While the first is a natural movement, but has a long distance, the second
one is an "un-natural" movement and forces one to look on the keyboard to
find the right key. Yes, one can change the key settings. But honestly, how
many people will do this? Most, especially casual users, will just live
with the default settings (and even for "professional" users it is usually
a good idea to stick with the defaults, as it helps when working in different
There were also requests for unification of the hot key mapping
eeschema and pcbnew. Perhaps similar actions could be assigned to the same
key (e.g. 'place wire'/eeschema & 'add new track'/pcbnew, 'add
component'/eeschema & 'add footprint'/pcbnew, changing grid size, add 'find
next item' in pcbnew).
Ok, now for the real part:
- (bradfa) Make a wizard for the creation of a project, which allows
- Whether the default libraries should be used or not
- Paper size
- (bradfa, me) Create a way to gracefully handle changes of
symbols and footprints. Currently, they get silently replaced, which can
(and often does) lead to problems. Either cache the symbols/footprints
in the project or versionize them such that changes can be caught.
Orson: I think this is handled by 'rescue old components' dialog.
- The mouse wheel and navigation (as mentioned above).
Make it consistent with other EDA, CAD and drawing applications:
wheel -> up/down, shift-wheel -> left/right, ctrl-wheel -> zoom
- (bradfa) Allow for copy/paste and a move ability across pages. This
be hard given the way the selection and copy/cut operations work with the
drag a box around things workflow. Not sure what the right way to solve
it is, but it should be solved.
- Fix the drawing issues (ghost lines etc). Yes, I know, this is most
a bug in wx. But it is annoying as hell. So if wx needs to be fixed, then
- Get rid of plot vs print. Use one that does the right thing
- Orson: There are cases when the user may get a really long error
message (e.g. after
starting cvpcb with fp-lib-table misconfigured). It could be shown in a scrollable
text field instead of a huge message box (WX_HTML_REPORTER?) I am sure there are cases
when the error message does fit on the screen, and surely it does not allow to copy
paste the message.
- Orson: Be sure that everything option available on toolbar and in
context menus is also
available in the window menu. There are also cases, when right click context menu lacks
entries related to the current activity (e.g. when zone drawing tool is active, there should
be entries for refilling/unfilling all zones, even though it is not directly related to drawing,
or switching arc posture is available exclusively with a hotkey now).
- Print by default in color. We are in the year 2015. Most people have
printers these days. If you think it should configurable, then make a config
option somewhere, that is global and does not revert to the other thing
when you use a different path for printing.
- Make powersymbols global netlabels that do not depend on being in
library. Heck, this is the most cumbersome way to define power symbols I have
ever seen! For every new power rail I define, I need to create a new power
symbol. And above all, it has to be in a library called "power", which of
course is not documented. Additionally, this masks power symbols with the
same name. The "right" way to do it, would be have specially marked symbols,
(have a property POWERSYMBOL) that have a name field which doubles as the
net label. This way, one can create one symbol of the right form, set it
in the schematic, and change its label according to the needs.
- Create a junction automatically, when a wire is passing over a
This is useful when, e.g. placing a dozen blocking C's. Then you just
pass with the wire once over all, instead of having to stop at each C.
Actually better still: When a pin or a wire ends on a wire, connect them,
even if there is no junction.
- When creating/placing netlabels: remember the last created label.
It is normal to set a label at multiple places at once, and also
to have multiple labels that are named similarly.
As advanced feature: if the label ends in a number, automatically increment
- (bradfa) Allow for non-hierarchical multi-sheet schematics.
big parts or boards where there are many big parts (think 1000 pin BGA
and 64 bit wide DDR3 and other "modern computer things") it's simply
easier and more elegant looking to organize a common set of parts across
more than one non-hierarchical sheet. Being forced to use hierarchy
means either I'm going to have to use a bigger sheet (which I can't
print, most people can't print on A3 size paper, let alone larger) or I
have to break my single unit of schematic up into yet another hierarchy,
which for things like DDR, especially in something like a 64 bit wide of
x8 chips, is hard to fit onto one page.
Schematic Symbol editor
- Explicitly make it clear which symbol is being edited. The name
placed somewhere prominently. Either in the title bar or in a corner of the
- Allow for multiple symbol editor windows to be open, for easy copy&paste.
- Add a pane with a view of the library. This would allow for faster
of the symbol one wants to edit/view.
- Get rid of the double-confirm needed to save a changed symbol (why
do I need
to save the changes of the symbol and then again save the changes of the
* Orson: I am not sure if footprints added in the 'Footprint Filter'
tab in the
symbol editor are actually used anywhere. They could be used as the first entries
shown after clicking 'Assign Footprint' in the schematic editor? There could be
a popup menu, e.g. for a resistor:
0603 0805 THT 3mm THT 5mm Other..
Where 'Other..' launches the footprint viewer offering all libraries and entries.
- Orson: Search field in cvpcb.
- Orson: When assigning a footprint in eeschema, one of the buttons in
the footprint viewer
is labeled 'Insert footprint in board', but it actually assigns the footprint. It might be
a bit confusing.
- Orson: 'Save Current Library As' in the menu does not work as
expected. Instead, there is
a button on the toolbar that serves this purpose - it should be moved to the menu. Then, once
you save it, you have to manually add it to the libraries list (maybe it could be proposed when a new
library is created?) and set as the current library.
- Orson: Missing copy/duplicate.
- Orson: How about getting rid of 'Edit pins per part or per body
style'? It is really confusing if
you activate it - maybe a better description would work here, if we want to preserve the functionality.
- Orson: Hot keys to control the grid size.
- Orson: Selecting current library: after typing a few characters,
make it possible to pick the library
with arrows and confirm with Enter.
- Orson: if a library is modified and changes are discarded, user will
be asked every time if he wants
to discard the changes on closing the symbol editor
- Orson: If in a multi-unit part, units are not interchangeable -
disable 'Common to all units' property for
for graphics (https://answers.launchpad.net/kicad/+question/272225).
- Allow copy/paste of pins
- Make the central point of a pin the end that points towards the
name. This point is which the user wants to place
at the edge of the component rectangle/outline.
- Make the pins "snatch" to the component outline, so they move together with the outline-edge if it is moved.
< azonenberg> The most flexible option, to me, seems to be adding new GAL hotkeys for grid snap and pad/track snap
- I do not really like the idea of having the board on a sheet, though
can understand the reasoning. IMHO it comes from the old pen and pencil
times, when people drew on pre-made sheets of paper. Today, I don't really
see a point here. Yes, having some text describing the layout somewhere
(the sheet header) is nice, but why place the frame as well?
- Start with a board creation wizard. In 99% of the cases people will
with a rectangular PCB of a predetermined size. A wizard would allow for
a quick and easy creation of the board shape without the need to place
a number of lines precisely. The wizard should also create an automatic
keep out line around the PCB (there is usally a 0.5mm to 1mm keepout
at the board edges for production reasons. For PCB separation by scoring
this goes up to 2-3mm).
To make be able to call this wizard at a later stage (or not call it at all)
would be also a good idea.
- Make board edges a polygon line. I.e. disallow the breaking up of
shape by moving a single line. Breaking of a polygon should be explicit,
when the user demands it, i.e. to insert another line shape. And those should
"snap" automatically into the polygon again and be not be broken until
- All components should be placed next to each other, sorted by sheet
are on. Not on top of each other.
- Allow placing explicitly a single via. And do not remove the
netlabel of a
via if it's not connected to any track. The reason for this is simple: after
a layout is finished, I hunt for places where the ground (or power plane)
connectivity is not good over different layers (think long parallel tracks
on the bottom layer that carry high frequency signals, the ground between
the tracks becomes a long (but wide) wire itself. Adding a via every now
and then connects the ground to the ground plane on another layer.)
Currently the only way to do this is to place a track that starts at some
GND pin and runs in a zig-zag course over the PCB.
- Allow to place a track in the middle of nowhere. Reason is similar
Orson: it should be already possible
- Allow to set the net of a track/via explicitly. Not only while
the track/setting the via, but also afterwards.
- Make all canvas feature complete and equivalent. (reason given
IMHO make the OpenGL canvas the default one. It's the one with the nicest
features. Also it does not screw up every time one draws a track.
- Allow rotations in both directions. (probably R, shift-R). Make R
that goes in clock-wise direction, which is the "natural" direction for most
- The important key shortcuts are all over the keyboard, which means
the user has to constantly move his hands around (see above).
- Switching of trace width is.. meh.. the default canvas allows only
pre-defined values (which is nice in theory, but not when you have to add
every allowable line width explicitly into the settings). The OpenGL canvas
allows to set to a value. Which is IMHO nicer, but there should be some
"remembering" of old used values that present themselves in a drop down menu.
- All dialogs for creating something (planes, etc) should remember
settings that have been previous used. Chances are high I want to create
another instance with the same settings.
- Give unconnected pins a "No Net" label instead of a random
The random netlabel is confusing. One does automatically want to find
the other component/pin that connects to it.
- Create an un-select key shortcut.
Orson: It is available under ESC in the GAL canvases. If you want to unselect
individual parts, it can be done with Shift+LMB.
- Zooming centers the window at the point where the mouse pointer
pointing to. This sudden jump is very annoying. Instead the point the mouse
pointer is pointing to should be kept fixed and the zoomed window moved
Orson: There is a huge battle on the subject, currently it is selectable in
the General preferences dialog ("Center and warp cursor on zoom").
- When moving parts references, highlight the part it belongs to.
Orson: there is a line that points to the parent module
- Make highlighting and masking levels configurable by sliders
(Altium does that in a very cool way)
- Place a small scale at the lower right corner. It is often very hard
judge how large something is, when doing the layout. A ruler would allow
to have a quick look, to verify that one is actually drawing something
roughly 1mm in size and not 10mm in size.
- Allow for different line thickness on non-copper planes.
- Allow for arbitrary shapes (rectangles, circles, rings, polygons)
non-copper planes (e.g. for modifying the paste mask or solder mask)
- Add a "undo" for tracks while drawing them. If I am drawing a
and realize I've passed a component on the wrong side and thus have ended
up in the wrong spot, I want to be able to backtrack to the place I went
wrong and continue from there. Currently, I either have to cancel the track
and start from zero again, or place the track and delete the part that is
wrong and start from there.
- Have a toggle (key shortcut) between "show all layers" and "show
layer". In complex boards with more then 8 layer (sometimes even from 6 up)
the other layers start to confuse and I want to disable them. But from time
to time i need to know where I am and need to quickly reenable them.
- Enabling/disabling layers takes way too much time when area fills
involved. I have here a simple design of 10x8cm board, with few components
(two dozen in total), but it already takes a second to enable/disable
a single layer.
- BUG: Two area fills with the same priority but different nets will
when drawn over eachother. The right thing to do here is to draw the area
fills in a specific order and to cut later ones off when they get too close
to another fill. Of course, this will then need some form of configuration
in which order the fills are drawn (could replace the priority).
- Mouse drag behaviour "interactive" is what people would expect
Please make it the default.
- Allow the grid to be changed with a key command that makes the
- Allow the grid to be switched off completely.
- Make pin snap-in radius configurable.
- Evaluate the best option for net highlighting (see
High contrast mode is meant for displaying the active layer in color, while the others are shown using low-contrast
grey shades, so it is easy to keep focus on a single layer. Net highlighting marks all objects belonging to the same
net with a bright color to facilitate board connections tracking. The main question is: what mode should have the
priority when both high contrast mode and net highlighting are enabled at the same time? Is it more important to
preserve single layer view or see items on all layers belonging to the same net?
- Decide whether the PNS router should also handle track removal (see
The main reason behind the current implementation is that vast majority of successful drawing software (e.g. Corel,
Adobe, GIMP, Inkscape) offer tools that perform exclusively a single operation (either add or remove tracks, not
both at the same time). The new tools are trying to mimic behaviour known from other widely used software packages,
so KiCad becomes more intuitive to use.
- Improve context menus in the GAL canvases: add options that are
currently handled exclusively with hot keys (e.g. change
line width, change arc direction), display zone-related operations when the zone drawing tool is active, always show
the common menu entries (e.g. zoom/grid settings).
- Orson: When starting a new board, spread footprints instead of
stacking them in one point. Also remove the footprint and
track mode switches (the ones available on the top toolbar).
- Orson: Make it possible to remove multiple libraries (selected ones) in the footprint manager window.
- Explicitly make it clear which symbol is being edited. The name should be placed somewhere prominently. Either in the title bar or in a corner of the window.
- Allow for multiple symbol editor windows to be open, for easy copy&paste.
- Add a pane with a view of the library. This would allow for faster selection of the symbol one wants to edit/view.
- Make measurements easy and intuitive. The current "press space and watch the status line" is not! This requires at least an explicit command.
- Allow the grid to be changed with a key command that makes the grid smaller/larger.
- Allow the grid to be switched off completely (especially important for measuring things).
- Create a "snap to nearest center/vertex" option (also important for
Orson: temporarily disabled with a key modifier (e.g. Alt)?
- Orson: Add button/menu entry for creating a new library (currently
the only way is to use
'Save footprint in a new library'). After creating a new library (i.e. picking the folder
where .kicad_mod files will be stored), the user should be offered to add the library to
the fp-lib-table: either global or project-specific one, if it is available).
- Orson: Footprint editor should automatically switch to the just
created library (no matter
if it was done with currently non-existent 'create a new library' or 'save the footprint in
a new library').
- Orson: !! Refreshing the library list requires restarting the
whole program, once a library
is added using the Footprint Library Manager or Footprint Library Wizard. Edit: not entirely true,
need to check why I had to reopen KiCad at one point..
- Orson: Even though a footprint is saved, there is a dialog shown on
quit asking whether you
want to save the footprint (and threatening you the current one is going to be lost).
It also does not allow you to save it, if there is no active library
set (which is usually the case if you start creating a new footprint, without selecting the
active library first). (related bug report)
- Orson: Hot keys for grid size switching.
- Orson: I liked a feature in the symbol editor that allows you to
launch the 'Properties' window
for the currently placed entity.
- Orson: mirror, missing hotkey for flip
- Orson: context menu for all tools (at least grid/zoom, etc.)
- Orson: for some strange reason THT pads have Silkscreen layer enabled by default
- KiCad gripes list (summarized here)
- Usability test (Tim Hutt)
- KiCad Usability (David Perrenoud)
- Possibly low-hanging fruit usability improvement (Henner Zeller)
- Evaluation du logiciel de CAO électronique KiCad (might be outdated)
- KiCad footprint creation woes (contains a youtube video)
- Wishlist based on the bug tracker contents
- Some feedback from Simon Ludborzs, here and here (thanks to Timofonic).
- Assessment of Big Mess o' Wires (thanks to Timofonic).