
@ubruhin
March 24, 2025
Today we released LibrePCB 1.3.0 with an interactive HTML BOM export, several bugfixes and more! See the full changelog below.
Highlights
Note that this is mainly a bugfix release and most features currently in development will land in the LibrePCB 2.0 release which still takes some time. Nevertheless there are some noteworthy changes in this release.
Interactive HTML BOM (#1485)
Printing out the assembly plan and the BOM for manual PCB assembly and marking the assembled parts line by line is no longer required thanks to a new output job. Instead of a PDF, you’ll get the assembly plan as a HTML file which is interactive — you can sort, filter, search or mark parts as assembled using a web browser. Instead of a paper sheet, you could use your laptop or tablet on your desk while assembling the PCB step by step.
The HTML/CSS/JS core of this feature is from the existing Ineractive HTML BOM project, already well known as a KiCad plugin. In LibrePCB, this is now a built-in feature!
KiCad v9 Compatibility (#1492)
As KiCad v9 was released with some changes in its library file format, we updated our KiCad library importer to support that new file format. Of course older file formats are still supported, and actually their compatibility was even improved too in this release.
Initial Usage of Rust (#1477)
Though not directly relevant for our users, this change is still noteworthy as it highly affects the development of LibrePCB. After more than 10 years of implementing LibrePCB entirely in C++, this release contains the very first code written in the Rust programming language.
The reasoning behind this is explained in the blog post NGI0 Grant for LibrePCB 2.0. While this is not directly visible in the LibrePCB application, users still profit indirectly from potentially higher stability and faster development.
In this release, there are two software modules implemented in Rust: The interactive HTML BOM generator mentioned above, and the library for reading and writing ZIP files.
Changelog
DRC:
-
Report vias as useless if connected on less than 2 layers (#1487)
Credits
This release was part of the NGI0 Commons grant we receive from NLnet, which was a huge help for us to get this work done. We are very thankful for their support.
Also a big thank you to our sponsors and to the community helping us with translations, pull requests, donations and other contributions! 🎉
Code contributors of this release: @ubruhin, @connorslade
Download
The release can be downloaded for all major operating systems from our download page.
If you like LibrePCB, please consider making a small
donation to support the
ongoing development.
Thank you!

@ubruhin
December 1, 2024
I’m happy to announce that LibrePCB 1.2.0 has been released today! Beside various general improvements and bugfixes, it contains a lot of new powerful features to increase productivity. See the highlights & full changelog below.
Highlights
KiCad Library Import (#1468)
It’s not a secret that KiCad is the most popular EDA tool in the open-hardware community, and therefore many LibrePCB users worked with KiCad before. To help them getting started with LibrePCB, we implemented an importer for KiCad libraries so those already created library elements don’t need to be created again with LibrePCB.
In addition, even non-KiCad users could use this feature to import library elements from publicly available KiCad libraries instead of creating them manually. Thanks to the large KiCad community, there are a lot of such libraries! 😀
Due to the complexity of such imports, there are some limitations and the quality of the output never matches manually created elements. Please check out the details and usage recommendations here. |
Datasheet Overlay for Footprints (#1450)
Drawing footprints can be error-prone — one wrong X- or Y coordinate of a pad and the package might not be solderable. To review your footprints more easily, the footprint editor allows you to set the package drawing from a datasheet as background image, so you’ll immediately see if any pad of polygon is off.
The image can either be directly captured as a screenshot, pasted from the clipboard, or loaded from a file:
Open Datasheets From Schematic (#1460)
Circuit design means reading datasheets a lot. For most parts more complex than a resistor or capacitor, you need to read its datasheet or other documentation.
Therefore the library editor now allows you to add datasheet URLs to components and devices. Those will then be available in the context menu in the schematic editor for easy access. In addition, parts which have an MPN & manufacturer specified also offer a Search datasheet menu item which will look for a datasheet in the Internet.
Whenever possible, datasheets are downloaded and opened with the local PDF reader. They are cached to keep them available without accessing the Internet again.
Specctra DSN Export / SES Import (#1457)
From time to time people ask whether LibrePCB contains an autorouter. Though there are different opinions about whether autorouters are useful or not, and even though LibrePCB still doesn’t have one built-in, luckily you can now use an external autorouter like Freerouting for LibrePCB boards!
This is possible by supporting the Specctra DSN/SES exchange format, which also allows routing a LibrePCB board manually with an external tool to circumvent the still rudimentary integrated trace routing tools.
Productivity Improvements
In addition to the already mentioned features, there have been several more noteworthy features implemented which increase productivity a lot:
For instructions how to use these new features, please check out the corresponding links which provide short videos. It’s really worth getting to know those features! |
Dark Theme on Windows (#1391)
Thanks to a contribution from mi4code, LibrePCB on Windows now automatically uses a dark theme if Windows itself is set to a dark theme. Also for macOS and Linux (which already supported dark theme) there are some dark theme improvements and fixes.
Important Deployment Changes
Please note that for this release we had to make some changes to our deployment:
|
Changelog
Library Editor:
-
Implement KiCad library import (#1468)
-
Symbol editor: Support mass import of pins through clipboard (#1431)
-
Package editor: Support displaying datasheet image overlay (#1450)
-
Package editor: Add tool to move & align objects (#1432)
-
Package editor: Add tool to interactively re-number pads (#1433)
-
Package editor: Support copying properties to other objects (#1412)
-
Package editor: Support uppercase STEP file suffixes (#1422)
-
Package check: Warn about thin silkscreen lines (#1415)
-
Component editor: Automatically set gate suffixes (#1464)
-
Component editor: Fix conflicting component signal names (#1463)
-
Component check: Warn about missing pin-signal connections (#1466)
-
Symbol/package check: Warn about non-centered symbols/packages (#1467)
-
Eagle import: Fix unreadable log messages with dark theme (#1451)
DRC:
-
Fix false-positive board<→copper clearance errors (#1442)
Miscellaneous:
-
Implement automatic dark theme for Windows (#1391)
-
Support specifying & opening datasheets in editors (#1460)
-
Refactor & speed up plane rebuilds & DRC with multithreading (#1459)
-
Delete old temporary files at application startup (#1452)
-
Qt6: Fix temporarily closing windows when opening 3D viewer (#1381)
-
Windows: Fix encoding issues in auto-detected full user name (#1382)
-
Fix possibly wrong language of theme color names (#1389)
-
Fix colors of BOM/PnP table rows with dark theme (#1407)
-
Fix zero-length traces/lines not being rendered (#1441)
-
Fix deserialization of pressfit pads (#1444)
-
Fix OpenGL 3D viewers for Qt > 6.6 (#1469)
-
Fix possibly laggy UI when worker threads are running (#1408)
-
Replace pick&place icon from Icons8 (#1395)
Building/Packaging/Deployment:
-
MacOS: Ship the CLI in the same bundle as the GUI app (#1378)
-
MacOS: Build binaries with macOS 13 (#1438)
-
Linux: Ship the CLI in the same AppImage as the GUI app (#1380)
-
Use Qt6 by default & remove Qt5 CI jobs (#1377)
-
Drop support for Qt < 5.12 and CMake < 3.16 (#1385)
-
Snap/Flatpak: Fix opening keyboard shortcuts PDF (#1383)
-
Fix compile error in
libs/optional
with Clang 19.x (#1456) -
Windows: Fix compile error caused by OpenGL headers (058ccaf8)
-
Fix license identifier in AppStream Metainfo XML (#1384)
-
Update REUSE copyright metadata (#1404)
Credits
This release was part of the NGI0 Commons grant we receive from NLnet, which was a huge help for us to get this work done. We are very thankful for their support.
Also a big thank you to our sponsors and to the community helping us with translations, pull requests, donations and other contributions! 🎉
Download
The release can be downloaded for all major operating systems from our download page.
If you like LibrePCB, please consider making a small
donation to support the
ongoing development.
Thank you!

@ubruhin
October 17, 2024
Today I am very proud to announce that the LibrePCB project receives support from the NGI0 Commons Fund to develop LibrePCB 2.0. This allows us to implement a lot of exciting features and improvements, see details below.
About the NGI0 Commons Fund
NGI0 Commons is a fund established by NLnet with financial support from the European Commission’s Next Generation Internet programme, and additional funding by the Swiss State Secretariat for Education, Research and Innovation (SERI).
It’s the second time we receive funding through NGI0. LibrePCB 1.0 and 1.1 were major outcomes of our first grant, together with our first video tutorials — important milestones in the history of LibrePCB.
LibrePCB 2.0 Roadmap
The overall goal of the new grant is to release LibrePCB 2.0. Due to the huge amount of work, I expect it will keep me busy for the next 12 months. But some of the new features will be made available earlier in a LibrePCB 1.2 release. And of course due to the nature of software development, plans might need to be adjusted if unexpected issues occur.
New Features
The following features are planned to be contained in either LibrePCB 1.2 or 2.0:
-
Schematic buses
-
Images in schematics
-
KiCad library import
-
Interactive HTML BOM
-
Specctra DSN export / SES import
-
Advanced board design rules
-
And several more…
C++ → Rust
In addition, the plan is to start moving away from C++ towards the Rust programming language. Generally I like to work with proven, mature, stable, widely available tooling which was one reason to choose C++ more than 10 years ago when I started with LibrePCB. C++ is simply available on any platform and code written 10 years ago is still working fine today, so we can focus on new features rather than keeping the code compatible with new toolchain versions. However, more than a decade later, the situation is a bit different:
-
Rust 1.0 was released ~2 years after the LibrePCB project was born
-
Today, ~9 years after its 1.0 release, it’s a widely used programming language, backed by large companies, and probably will last for a long time
-
Rust provides not only a compiler, but a whole ecosystem including a build system and package management to simplify project administration
-
Although Rust is also a low-level, fast, non-garbage-collected programming language, it’s much safer than C++ (memory safety, compile-time checks, …), leading in more reliable applications
-
There exist tons of Rust libraries, which are way easier to integrate than C++ libraries which are difficult to share
-
The Rust community is already huge (with lots of smart people) and still growing fast
Given the advantages of Rust over C++, I think we should really give it a try and do a first attempt of integrating Rust into the LibrePCB code base. Of course a complete migration is totally out of scope — we have to start with small steps and gather experience with C++ interoperability.
Completely New UI
However, our biggest problem at the moment is the user interface. As you might have noticed, LibrePCB consists of many individual windows and modal dialogs, packed full of controls. With every new feature, the UI gets more and more cluttered and thus more complicated (beside the inconvenience of having many windows opened at the same time). This does not follow our vision of an easy to use, intuitive UI.
Unfortunately, with our current UI toolkit (QtWidgets) it’s almost impossible to design more dynamic, flexible, responsive UIs. Also it consumes a lot of time, even simple things in the UI require to write tons of error-prone code. In addition, the platform-dependent look of Qt often leads to issues like unreadable text colors or layouting errors. All these things caused the development of new features to stuck because either something is almost impossible to implement with Qt, or I’m afraid of writing so much code for it.
As an example, one item in this custom list view requires ~580 lines of code:
To pave the way for new features (and in general to future-proof LibrePCB), I was therefore looking for alternatives to QtWidgets. Unfortunately there aren’t many options:
-
Stick with QtWidgets, but use custom stylesheets to heavily adjust its look (example: OBS Studio) — that even increases the effort for UI development and doesn’t fix the limitations of QtWidgets.
-
QML: Luckily it’s part of Qt so it wouldn’t be a huge new dependency. Probably it would be usable for LibrePCB, but it’s error-prone because it gets interpreted at runtime, and the licensing situation of QML (or Qt in general) doesn’t really go into the right direction (getting more and more commercial).
-
Slint: A pretty young UI framework implemented in Rust (but providing a C++ API), with a declarative UI language which gets interpreted at compile-time and a very powerful live preview. Unfortunately it still lacks a lot of basic features and I haven’t seen any large project using Slint yet, so there’s not really a proof that it will work for LibrePCB.
Of course there are many other UI frameworks out there, but nothing really suitable for LibrePCB (no C++ API, too bloated, not cross-platform, …).
At first glance, QML seemed to be the only reasonable way to go, despite its own issues. However, after playing around with Slint too, I was impressed by its very neat declarative language and the powerful toolchain — compared to QML, it’s a real pleasure and very efficient to create UIs. The interaction with C++ is very basic, but seems to cover the most important use-cases. And even though many features are missing (e.g. menus, tooltips, drag&drop, …), lots of things could be implemented manually.
During my experiments, I tried to quickly create a listview like the one from the library manager. Compared to the ~580 lines of code for QtWidgets, a custom list item in Slint takes only ~200 lines of code, and it’s even more responsive (e.g. hover effects):
Now I’m convinced we should give Slint a real chance, thus it’s part of the LibrePCB 2.0 roadmap.
I hope you are now as excited as I am! 😀

@ubruhin
August 23, 2024

@ubruhin
August 8, 2024

@ubruhin
April 3, 2024

@ubruhin
December 30, 2023

@ubruhin
September 24, 2023
August 21, 2023
May 15, 2023
April 13, 2023
October 3, 2022
September 8, 2022
January 28, 2022
November 2, 2021
October 4, 2020
May 3, 2020
January 3, 2020
November 30, 2019
July 14, 2019
April 21, 2019
March 20, 2019
December 3, 2018
November 25, 2018
November 4, 2018
October 21, 2018
September 15, 2018
April 21, 2018
January 2, 2018
October 30, 2017
September 13, 2017