UI improvements

The list below gathers comments regarding KiCad's UI possible improvements,
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
(2015-08-10 r6080).


Of the general rules of UI design, the most important one is consistency,
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 and
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 weeks
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.

State clarity

The second most important rule of UI is to make things explicit. Do not
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 in
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 shortcuts.
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 between
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 to set
    - Whether the default libraries should be used or not
    - Paper size
  • (bradfa, me) Create a way to gracefully handle changes of schematic
    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 would
    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 likely
    a bug in wx. But it is annoying as hell. So if wx needs to be fixed, then
    fix wx.
  • 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).


Schematic entry

  • Print by default in color. We are in the year 2015. Most people have color
    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 the right
    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 pin.
    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
    the number.
  • (bradfa) Allow for non-hierarchical multi-sheet schematics. Especially for
    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 should be
    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 selection
    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:
      THT 3mm
      THT 5mm

    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
  • 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

Layout editor

  • I do not really like the idea of having the board on a sheet, though I
    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 start
    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 the closed
    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 they
    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 as above.
    Orson: it should be already possible
  • Allow to set the net of a track/via explicitly. Not only while drawing
    the track/setting the via, but also afterwards.
  • Make all canvas feature complete and equivalent. (reason given above)
    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 the one
    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 to use
    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 their
    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 netlabel.
    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 was
    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 to
    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) on
    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 track
    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 only active
    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 are
    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 overlap,
    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 today.
    Please make it the default.
  • Allow the grid to be changed with a key command that makes the grid
  • Allow the grid to be switched off completely.
  • Make pin snap-in radius configurable.
  • Evaluate the best option for net highlighting (see remarks).
    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 remarks).
    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.

Footprint editor

  • 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 measurement)
    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

Other sources