@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:

qtwidgets listview

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):

slint listview

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

The Next Generation Internet (NGI) funding through the NLnet Foundation had a substantial impact on the development of LibrePCB 1.x. Without this grant, LibrePCB would not be where it is today — and many other free software projects too. However, it seems the European Commission plans to stop this funding in 2025, which would be very bad news for the whole free and open-source ecosystem.

With this post we are signing the following open letter to the European Commission, as started by Les Petites Singularités, to express the importance of the NGI funding for FOSS projects like LibrePCB.


Since 2020, Next Generation Internet (NGI) programmes, part of European Commission’s Horizon programme, fund free software in Europe using a cascade funding mechanism (see for example NGI0 Commons Fund). This year, according to the Horizon Europe working draft detailing funding programmes for 2025, we notice that Next Generation Internet is not mentioned any more as part of Cluster 4.

NGI programmes have shown their strength and importance to supporting the European software infrastructure, as a generic funding instrument to fund digital commons and ensure their long-term sustainability. We find this transformation incomprehensible, moreover when NGI has proven efficient and economical to support free software as a whole, from the smallest to the most established initiatives. This ecosystem diversity backs the strength of European technological innovation, and maintaining the NGI initiative to provide structural support to software projects at the heart of worldwide innovation is key to enforce the sovereignty of a European infrastructure. Contrary to common perception, technical innovations often originate from European rather than North American programming communities, and are mostly initiated by small-scaled organisations.

Previous Cluster 4 allocated 27 million euros to:

  • "`Human centric Internet aligned with values and principles commonly shared in Europe`" ;

  • "`A flourishing internet, based on common building blocks created within NGI, that enables better control of our digital life`" ;

  • "`A structured ecosystem of talented contributors driving the creation of new internet commons and the evolution of existing internet commons`".

In the name of these challenges, more than 500 projects received NGI funding in the first 5 years, backed by 18 organisations managing these European funding consortia.

NGI contributes to a vast ecosystem, as most of its budget is allocated to fund third parties by the means of open calls, to structure commons that cover the whole Internet scope - from hardware to application, operating systems, digital identities or data traffic supervision. This third-party funding is not renewed in the current program, leaving many projects short on resources for research and innovation in Europe.

Moreover, NGI allows exchanges and collaborations across all the Euro zone countries as well as “widening countries” [1], currently both a success and an ongoing progress, likewise the Erasmus programme before us. NGI also contributes to opening and supporting longer relationships than strict project funding does. It encourages implementing projects funded as pilots, backing collaboration, identification and reuse of common elements across projects, interoperability in identification systems and beyond, and setting up development models that mix diverse scales and types of European funding schemes.

While the USA, China or Russia deploy huge public and private resources to develop software and infrastructure that massively capture private consumer data, the EU can’t afford this renunciation. Free and open source software, as supported by NGI since 2020, is by design the opposite of potential vectors for foreign interference. It lets us keep our data local and favors a community-wide economy and know-how, while allowing an international collaboration.

This is all the more essential in the current geopolitical context: the challenge of technological sovereignty is central, and free software allows to address it while acting for peace and sovereignty in the digital world as a whole.

In this perspective, we urge you to claim for preserving the NGI programme as part of the 2025 funding programme.


1. As defined by Horizon Europe, widening Member States are Bulgaria, Croatia, Cyprus, the Czech Republic, Estonia, Greece, Hungary, Latvia, Lituania, Malta, Poland, Portugal, Romania, Slovakia and Slovenia. Widening associated countries (under condition of an association agreement) include Albania, Armenia, Bosnia, Faroe Islands, Georgia, Kosovo, Moldavia, Montenegro, Morocco, North Macedonia, Serbia, Tunisia, Turkey and Ukraine. Widening overseas regions are : Guadeloupe, French Guyana, Martinique, Reunion Island, Mayotte, Saint-Martin, The Azores, Madeira, the Canary Islands.

@ubruhin
August 8, 2024

Today I’m happy to announce our new manufacturing partnership with NextPCB, a large PCB manufacturer from China!

About NextPCB

NextPCB provides PCB manufacturing and assembly services with a lot of capabilities (e.g. materials, colors, surface finish, panelization, …​) for a competitive price. See details at their capabilities sheet. In addition, they provide a free Design For Manufacturing (DFM) tool for Windows to analyze your PCB design for various manufacturing issues.

LibrePCB Fab Integration

From now on, NextPCB is available as a manufacturer on our manufacturing service LibrePCB Fab. As usual, the workflow to order a PCB is very simple, you now just have one more choice. Note that solder resist color and PCB thickness configured in LibrePCB are automatically applied when starting the order with NextPCB:

Note that currently only PCB orders (without assembly) are supported. It is planned to add support for their assembly service too in future.

Sponsorship

At this point we also want to thank NextPCB for their sponsorship of the LibrePCB project. Their donation help us a lot to keep the development ongoing — Thank you!


@ubruhin
April 3, 2024

I’m happy to announce LibrePCB 1.1.0 which was released today! Once again there are some exciting new features, check out the details below. Highlights Live Parts Information (#1313) Who didn’t already finish a PCB project and then — while ordering the parts — realized that several parts in the schematic are obsolete, not in stock or unexpectedly expensive? This is annoying and wastes time for evaluating new parts and adjusting the PCB layout again. Read more...

@ubruhin
December 30, 2023

I’m happy to announce that once again there will be a LibrePCB talk at the next FOSDEM, which takes place in February 2024! After the Open Hardware devroom did not exist at the last FOSDEM in 2023, luckily this devroom will be back at FOSDEM 2024 where I’ll give a status update about the LibrePCB project. So if you’re curious about the progress of LibrePCB (also behind the scenes), feel free to join the conference — either in person or via live stream. Read more...

@ubruhin
September 24, 2023

After a few weeks of testing the RC1 and bugfixing, finally the stable release of LibrePCB 1.0 is finished and available for download! Check out the awesome new features and the migration notes below. For the reasoning behind bumping the version number to 1.0, check out the blog post LibrePCB 1.0 Roadmap. Highlights Advanced PCB Features One of the goals of this release was to get rid of several limitations which made LibrePCB 0. Read more...

@ubruhin
August 21, 2023

I’m very excited to announce that LibrePCB 1.0 is feature-complete and that a first release candidate is available for download! About This Release Candidate LibrePCB 1.0 contains a huge amount of changes compared to the previous release. Even though we give our best to keep the quality high and do lots of testing, such large changes always come with the risk of bugs. Thus, we first provide a release candidate prior to the official stable release. Read more...

@ubruhin
May 15, 2023

As mentioned in the previous blog post, I’ll give you a short update about the status of the upcoming release which is currently in development. Time for 1.0! The original plan was that the next release after LibrePCB 0.1.7 will have the version number 0.2. But thanks to the NGI0 grant I’m now able to spend much more time for LibrePCB, allowing to include more features in the next release than initially planned. Read more...

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