User interface doc


The help doc provides no help with GUI conventions, and how to achieve basic operations. For example, how do I…

Cut/copy/paste? (It took some googling to find out that cut/copy/paste is not implemented but on the wishlist – odd).

How do I turn grid snapping on and off? (For whatever reason, in playing around I find that a connector component snaps to the grid with half a block offset. How to I turn off snapping? Many apps have a modifier key, like Shift, to temporarily turn it off.)

When I try to select/drag a component, sometimes I get an area select box, sometimes I drag the object, sometimes nothing happens. What are the conventions for doing selection and drag operations consistently?

I added a connector to the PCB design. When I try to select it with a left click I can only select a pad – I can’t seem to be able to select to whole object (unless I use an area select). However, I can (sometimes – see above) select and drag a resistor. This seems to be inconsistent GUI behavior.

…Plenty more but it would be nice to see a doc that outlines how the GUI is supposed to work (so we know what is a bug and what is a “feature”:wink:


Yes, currently we only have a “getting started” and a “library conventions” section in the docs, but no actual user interface documentation. I would welcome pull requests at to add more documentation :wink:


Since I don’t know how it should work (or can get a lot of it to work consistently for myself), it would seem ill-advised for me to attempt to document it. I could take a stab at how it should work, but that may not be appreciated by the developers.

FWIW: I have found that ExpressSCH/PCB follows most of the modern GUI conventions (which is probably why most reviews I’ve seen cite it as being so easy to use). It should serve as a good reference model for getting the GUI basics right (note the use of modifier and arrow key conventions).


Hi! Happy new year! :partying_face:

LibrePCB is in early development stage. This feature and a lot others aren’t implemented yet. They will be implemented eventually, and other features that already were implemented will be improved.

I think it is a bad decision to turn it off for whatever reasons, IMHO. Just for now, all you have to do, is to start trace from one connector at beginning of airwire, finish it in the middle, start other trace from the other connector on the other end of airwire, and join them where you finished the first. When you start the trace from connector, it automatically aligns it to its vertical or horizontal position.

There is a reference cross at the middle (usually at the middle). You should be able to select a component clicking on that cross. Also, if you want to work with traces only, and disable component selection at all, just deactivate “Top References” and “Bottom References” layers in layers window at the right side of the editor.

I hope this will help for now! :+1:


If the library element is done properly, it should also have a grab area set, which allows you to drag the element anywhere inside that grab area.

As with the software itself, the base library is also still in early development, including library conventions :slight_smile:


OK. I see the crosses. perhaps they should be a different color than the grid – I missed them early on then wondered why they were there until accidentally click-dragging one.

Perhaps turning off the grid is not right. In using Express to do several dense boards, being able to escape grid placement (e.g. shift-drag) or fine tuning placement using arrow keys has been much appreciated for making last minute adjustments without redoing a lot of surrounding stuff just to adhere to the grid.

Context menus (right-click on object) should be standard throughout the GUI. In playing around I see no way to change the width of a trace after the fact. Right-click on the trace or pad or whatever should bring up a properties menu whose properties apply to the selected object.

Note: all of these GUI conventions have been around a long time and are not unique to Express (I’ve seen them used in various drag-drop apps over the years), its just that whoever did Express seems to have done a great job of adhering to and then leveraging these conventions for use in EDA.

Thanks to everyone for your help in navigating the GUI.


Continuing with GUI deficiencies…

No bump scroll (ie. auto scroll while dragging an object).

Placing a component in a schematic such that two component nodes are coincident, the nodes do not connect (and there is no way to connect them that I have found unless you drag the components apart and then explicitly connect them).

The convention for ending a drag operation is to hit escape, or right clicking. In LP, escape pops up the library window or returns the component to the palette (both odd), and right clicking spins the component (nice, but but unconventional). For consistency (which is the name of the game in GUI design), right click should always bring up the context menu (and terminate any current action, such as drag). For alternative behavior, use modifier keys judiciously (e.g. shift or alt to spin the component when right clicking). However, keep in mind that if good use is made of the context menu then such a common action as rotation would be in the context menu, hence right clicking after a drag offers the context menu and a host of common actions, and a single left click executes it.

Please, study old apps with “good” GUI’s. These conventions are as old as the hills and for good reason: They have been learned through many hard lessons and reuse.

BTW: I’d be willing to help you guys but I stick to Java these days (except for embedded work), and avoid C++ and setting up tool chains as much as possible – life is too short. I’d be happy to help you guys test new releases though, especially for the bread and butter stuff, which is what I would like to use once LP matures.


You’re absolutely right @jonbarril. Maybe I need to clarify that I’m also not absolutely happy yet with the GUI, I just didn’t have the time to improve it. Basically all editors would need a lot of improvements, but it’s extremely time consuming to do so, thus the progress is pretty slow…