The list below gathers comments regarding KiCad's UI possible
mostly based on the "UI and usability
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
model on how the application is supposed to work. This help in not
to remember exactly how to do X, but being able to derive the key
mouse movement, etc on the spot. External consistency is a behaviour
to other applications, internal consistency behaviour that is similar
the application itself.
One example where Kicad fails with internal consistency are the symbol
component editors compared to the schematic and layout entry
Even though they do very similar things, they work differently.
An example where Kicad fails with external consistency is the use of
mouse wheel. While all EDA, CAD and simple drawing applications I've
in the past have the following mapping:
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
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
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
the push-and-shove router only works with the OpenGL canvas. This is
non-obvious. I had to look at Tomasz introduction video twice to spot
hint that I have to change the canvas. Also, the different canvases
differently. This is not a good idea. If there is need to have
canvas types, then make them behave exactly the same, or at least as
as possible and warn the user when he is trying to do something that
current canvas type does not support. But better still: remove all
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
dragging tracks moved the whole track element instead of drag the
elastically. Even though I guessed it was some setting somewhere, I
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
preferences dialog. If you have a look at commercial EDA/CAD tools,
have homogenous preferences dialogs, with hundreds if not thousands of
settings. Yes, this is cumbersome. But at least you have a chance to
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
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
and hand movement is necessary to use them. E.g. a wire is placed
W, but to end it, one has to press K. While this would be ok if one
both hands on the keyboard, but for this task the right hand rests on
mouse and draws the wire. So one has to either lift the right hand
the mouse or move the left hand over to the right half of the
While the first is a natural movement, but has a long distance, the
one is an "un-natural" movement and forces one to look on the keyboard
find the right key. Yes, one can change the key settings. But honestly,
many people will do this? Most, especially casual users, will just
with the default settings (and even for "professional" users it is
a good idea to stick with the defaults, as it helps when working in
There were also requests for unification of the hot key mapping
eeschema and pcbnew. Perhaps similar actions could be assigned to the
key (e.g. 'place wire'/eeschema & 'add new track'/pcbnew, 'add
component'/eeschema & 'add footprint'/pcbnew, changing grid size, add
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
(and often does) lead to problems. Either cache the
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
drag a box around things workflow. Not sure what the right way to
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,
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
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
option somewhere, that is global and does not revert to the other
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
symbol. And above all, it has to be in a library called "power",
course is not documented. Additionally, this masks power symbols
same name. The "right" way to do it, would be have specially marked
(have a property POWERSYMBOL) that have a name field which doubles
net label. This way, one can create one symbol of the right form,
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
pass with the wire once over all, instead of having to stop at each
Actually better still: When a pin or a wire ends on a wire, connect
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
(bradfa) Allow for non-hierarchical multi-sheet schematics.
big parts or boards where there are many big parts (think 1000 pin
and 64 bit wide DDR3 and other "modern computer things") it's
easier and more elegant looking to organize a common set of parts
more than one non-hierarchical sheet. Being forced to use
means either I'm going to have to use a bigger sheet (which I
print, most people can't print on A3 size paper, let alone larger)
have to break my single unit of schematic up into yet another
which for things like DDR, especially in something like a 64 bit
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
Allow for multiple symbol editor windows to be open, for easy
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
* 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
shown after clicking 'Assign Footprint' in the schematic editor? There
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
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
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
times, when people drew on pre-made sheets of paper. Today, I don't
see a point here. Yes, having some text describing the layout
(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
a quick and easy creation of the board shape without the need to
a number of lines precisely. The wizard should also create an
keep out line around the PCB (there is usally a 0.5mm to 1mm
at the board edges for production reasons. For PCB separation by
this goes up to 2-3mm).
To make be able to call this wizard at a later stage (or not call it
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
when the user demands it, i.e. to insert another line shape. And
"snap" automatically into the polygon again and be not be broken
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
a layout is finished, I hunt for places where the ground (or power
connectivity is not good over different layers (think long parallel
on the bottom layer that carry high frequency signals, the ground
the tracks becomes a long (but wide) wire itself. Adding a via every
and then connects the ground to the ground plane on another
Currently the only way to do this is to place a track that starts at
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
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
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
every allowable line width explicitly into the settings). The OpenGL
allows to set to a value. Which is IMHO nicer, but there should be
"remembering" of old used values that present themselves in a drop
All dialogs for creating something (planes, etc) should remember
settings that have been previous used. Chances are high I want to
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
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
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
pointer is pointing to should be kept fixed and the zoomed window
Orson: There is a huge battle on the subject, currently it is
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
to have a quick look, to verify that one is actually drawing
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
up in the wrong spot, I want to be able to backtrack to the place I
wrong and continue from there. Currently, I either have to cancel
and start from zero again, or place the track and delete the part
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
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
(two dozen in total), but it already takes a second to
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
fills in a specific order and to cut later ones off when they get
to another fill. Of course, this will then need some form of
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
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
Allow the grid to be changed with a key command that makes the grid
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
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
set (which is usually the case if you start creating a new
footprint, without selecting the
active library first). (related bug
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