Beautiful, Secure, Privacy-Respecting Laptops, Tablets, PCs, and Phones

Hi everyone! Phew, it has been a busy and exciting time these last several weeks. Here is a fairly detailed summary of the progress that has been made on the various pieces of the Librem 5 project.


In person collaboration has taken place in a few different ways. There was a hackfest in Germany where many of the Librem 5 team members got together to hack, work, and bond. The Libre Application Summit was also attended and a talk given on the Librem 5. It was also great that one of our developers was able to attend XDC and have some fruitful discussions with the wlroots and Pengutronix folks.


The software design continues to improve so that the developers have a look to strive for. Here are some of the latest designs:

Software Work


The images are still being built based off of Debian buster but now they can be built with PureOS as the base distro. Also to clean up some cruft on the images, some SSHd host key generation scripts have been added to the image and the mass of dependencies moved into the librem5-base package.

As both the dev kits and phone will be based off of i.MX 8M SoM boards, much work has gone into bringing up the 4.18 kernel and building images for those future boards.


In phosh, there have been many bugs fixed and the code has been cleaned up. Also an effort has gone towards translations, updating the German and French translations as well as standardizing the po headers to hopefully make it less confusing for new translators.

An initial app switcher has been added and initial touch based application switching has been added.

The top panel has been cleaned up, which makes it look nicer as well as matching the design mockups a bit better.

If that isn’t enough, the first release version (0.0.1) of phosh has been tagged!

GNOME Settings

The GNOME Settings application has started being ported to the Librem 5 and continues to be worked on.


An upstream issue around starting gnome-session with debugging enabled has been fixed.

There’s been some plugin work as well. An initial WWAN plugin has been proposed upstream to handle SIM card PIN unlock.

This patched gnome-settings daemon as been added to the images until it’s upstreamed so that the SIM unlock stuff we proposed upstream is added to our image for the time being.


Some major improvements have gone into virtboard recently. Among the many bugs fixed, a notable one is that the display and scaling issues have been corrected. The input-method-v2, text-input-v3, and significant glue has been added to virtboard and input-method-v2 is in the process of being upstreamed. Virtboard now pops up and starts by default on the images and the keyboard has been improved to behave more as expected.

Similarly, some changes were upstreamed to wlroots and GTK+ in addition to what has already been mentioned. We fixed some issues affecting virtual keyboards in GTK+. It is important for cursor movements to be treated as relative to surfaces, not only the screen, so we made a patch to do just this. There was also an issue on tag generation that has been fixed and submitted upstream.


The Calls application has also seen a lot of progress recently, with many bug fixes, audio work, and an ongoing makeover to the UI. Now GTK+ Inspector can be opened on the Calls flatpak.

To prepare for the dev kits, a QMI-derived ModemManager driver for the SIMCom modems has been completed to mix QMI and the audio streaming AT commands and add call audio support. A Debian package of ModemManager has been created that contains these call audio patches.

Since the modem used on the actual phone may be different from that of the dev kits, some initial testing has begun on the Gemalto PLS8 modems.

Also, a partial UI overhaul of the Calls application has been done with more exciting UI changes to come!

There is a new daemon, Hægtesse, that has been written to ferry audio data between the modem and PulseAudio. The daemon has been integrated into our image builds to run on startup.


The libhandy library has also seen quite a bit of change since the last progress report. Besides the many minor bugs fixed, there have been a couple of widgets added. A HdyTitleBar widget was added to workaround titlebar glitches, and a HdyHeaderGroup widget was added to automatically update all header bars. The existing HdyLeaflet got an added fold property too. To assist the community in playing with libhandy, the libhandy example application has been updated with styling fixes too.

Libhandy 0.0.3 was released and uploaded to Debian unstable but a newer version, 0.0.4, was just released too.

It is really exciting to start to see libhandy being used in the wild too. Podcasts is the first third-party app to ship with libhandy! Here’s a short video demonstrating libhandy’s progress and current behavior.


Our close collaboration with the GTK+ team has led to a number of changes to separators among other things. There was a selection-mode separator styling issue reported and the look of separators was improved when separating two header bars in selection mode. Additional Adwaita fixes around separators, titlebar issues, and simplifying setting the selection mode got merged upstream.

Other fixes and documentation changes were made upstream too. For example, a fix was included upstream around the serial number while text-input is alive (needed for the keyboard).

And if you haven’t read it, take a look at Guido Gunther’s blog post on GTK+ and the application id. This will likely be helpful to those of you planning to write flatpak applications for the Librem 5.


Upower is a good candidate of API that other programs might want to use to e.g. extract battery information so several upstream documentation improvements were added.


The Contacts application needs to be made adaptive using libhandy so checkout the adaptive fork of Contacts. Changes are being submitted to upstream to eventually no longer need a fork. A simple separator styling fix and a simple size requirement fix were submitted upstream. The app menu and online accounts shortcut needed to be moved as well.


The Chatty application has some new additions and changes. Also Chatty can be built as a flatpak now too.

The “bubble-chat” view is being turned into a widget and a basic version of the msg-list widget has been finished and will be included in libhandy soon. Some GTK+ changes were needed to present libpurple conversations in separate chat-lists and the buddy list is now working too!

A libpurple plugin was tested for message logging into a SQLite database but in order for it to be useful, it will require replacing the libpurple logging functions with a custom logging-subsystem that supports the handling of SMS send-reports. There was some work done on a parser for purple log-files so that chat history is loaded into msg-bubbles now. So, the parser of the purple log-files is just a tentative solution to provide some chat history to the message-view for the time being.

We are currently working on the accounts-management. Some setup-screens have been introduced for registering XMPP accounts and for enabling/disabling them separately. Some work has also been done on the blist UI (formatting of the list entries, round icons, switching the font to bold when unread messages are available, added a timestamp) to make it look nicer.


As mentioned earlier, a newer CPU (i.MX 8) will be on the dev kits and phones versus what we started tinkering with (i.MX 6). Incidentally there has been a large effort towards bringing up a newer (4.18) kernel on the i.MX 8 CPU, as well as work done on etnaviv and mesa. Here are some of the progress highlights.

Since the dev kits and phones will have USB type-C power delivery, a patch was sent upstream to the kernel to support this.

Etnaviv now mostly works with our drm layer on arm64 and 4.18. Etnaviv was enabled in Debian’s libdrm. More offsets to sensitive states were added to etnaviv to avoid warnings and a patch was upstreamed to allow the command parser to work.

Our mesa tree is available for anyone to look at while patches are being merged upstream. The aarch64 builds of mesa have been improved. A patch for an rs alignment check was proposed and uncached mapping issues on arm64 were addressed.

We would like to thank the etnaviv maintainers of the Linux kernel, libdrm and mesa for their support since we’re building heavily on what was already there and they have been a big help in upstreaming these patches.


Since we are also investing in the Fractal end-to-end (E2E) encryption effort, it is exciting to report that the E2E module in development supports basic functionality now and we could already start working on integrating it. There is still plenty of work to be done but we’re getting there.

Hardware Work

Our hardware engineers and Nicole are working closely with the team that will be assembling the dev kits. So all of the final prototype manufacturing files (prototype fabrication and assembly drawings from KiCad) were sent to assembly team. Nicole traveled to Carlsbad (California) to assist them in building, assembling, and testing of a small print run of dev kit prototypes, to verify the soundness of our electronics design. There have been some hiccups like components being lost in the mail and needed to be reacquired, but all obstacles have been overcome thus far! Assuming all goes well with the testing of these prototypes, the full print run of the final dev kits (that will be shipped to backers) will begin very shortly.

Community Outreach

The Librem 5 team continues to work with the Plasma team and is working towards building a Plasma image to be used on the dev kit. Currently, there are Jenkins jobs to build necessary Plasma packages and the Plasma team members are working with us to fix the failures.

The developer documentation has seen some updated GTK+ documentation and a new code example.

Since we’ve received offers to help translating parts of the OS, we have begun to use a public Zanata instance to enable community to contribute translations. Currently, the phosh project is available on Zanata for translation contributions and the other projects (libhandy, calls, chatty, virtboard) will be added soon.

A big “Thanks!” goes out to all of the external teams that have helped review and merge changes into upstream projects. Everyone’s time and contribution is much appreciated!

That’s all for now folks. Stay tuned for more exciting updates to come!

Recent Posts

Related Content