Maemo Leste - 2026 Excalibur release

excalibur forgejo qt6 xmpp | 2026-08-14

We are excited to bring you a new release of Maemo Leste: 'Devuan Excalibur' (Debian Trixie). That means we have finally caught up with the Debian release cycles. We used to be on 'oldoldstable', and now we're on stable. We're also already eyeing Debian Forky (currently scheduled to be released a year from now) to ensure that we'll be ready for it when it is released as stable.

We have some exciting new developments for the Excalibur release:

  • Support for more devices;
  • Revamped our image building system;
  • Added support for DTMF in the phone application;
  • Moved to a newer Linux kernel;
  • Ported our Qt modules from Qt5 to Qt6;
  • Improved and introduced new Telepathy connection managers;
  • Improved our Forgejo CI/CD instance;
  • Switched to Pipewire (from Pulseaudio);
  • Ported various additional packages from Fremantle;
  • Made various improvements to our audio stack and sphone to accommodate the; newer UCM2 parsing;
  • Decreased the number of upstream software that we had to fork, as our patches made it upstream in some cases;

Excalibur

A release like this one consists of a large set of changes that are not very exciting to read about but that have to happen anyway, such as:

Forgejo

Continuous integration

In our previous release we introduced Forgejo CI, which builds packages for leste-extras and uploads them to the extras-testing repository. That setup has now been extended to most of our packages: nearly every repository in leste and leste-extras builds on every push, for amd64, armhf and arm64, using the shared workflows in leste-cicd/forgejo-workflows. Our device images are built there as well, which we will touch on this in a follow up post.

Forgejo starts building and testing automatically when a repository receives a new git commit (or MR). Ultimately, such build artifacts will get published on our live (testing) deb mirror, but for now we still use Jenkins for actual publishing.

Jenkins

Jenkins is our legacy build system, and it is still what produces the packages in our main repositories. It has not been abandoned. In the meantime: the python2 jobs were removed, the .forgejo directory is excluded from the source packages it builds, and our dependency-resolver - the tool that figures out in what order our packages have to be built - now takes its job list straight from the Jenkins configuration instead of a hand-maintained list.

As previously mentioned, the plan is for the Forgejo CI to eventually take over from Jenkins entirely.

Keyrings

The extras keyring had its expiry date extended and its signatures fixed, and the devuan keyring package now carries the Excalibur keyrings.

Image building via debos

In our previous release post we mentioned that modernising our image building process was still on our to-do list - this has now happened. We replaced our old image builder - a collection of Zsh scripts - with debos-leste, which builds Devuan based OS images declaratively from YAML recipes. The work builds on the work done by Mobian and their mobian-recipes.

debos-leste is integrated into our Forgejo CI. For more details, see our post on image generation in Forgejo. In short, debos-leste produces 15 Maemo Leste device images in 2 hours, which is a lot faster than our previous image building setup.

Core

sphone

Sphone, our dialer, has seen some improvements.

Conversations

Conversations was ported to Qt6 and has received some performance updates. (#67589c, #5ae55, #4de0b, #c4b81)

Around 60 commits went in since last release, mostly fixes related to the Qt5 -> Qt6 switch, support for our new Matrix and XMPP connection managers (see below), and support for emojis.

Emojis

Conversations now renders colored emojis in the chat window and the overview, and you can also send them.

Other changes

Qt6 platform plugins

Maemo Leste integrates with Qt to provide an unified UI experience so that GTK and Qt applications 'look like Maemo'. These Qt platform plugins are now also available on Qt6.

Applications on Qt6

Some Qt applications are moving from Qt5 to Qt6: nomweather is Qt6 now, as well as maemo-translate (and now also supports both screen orientations). The Qt6 branch also exists for the webbrowser Jib, but is not merged yet.

mce

mce takes care of the things your phone does by itself: turning the screen on and off, dimming it, reacting to the power button, noticing that you hold the phone against your ear during a call, blinking the notification LED and keeping an eye on the battery.

Hildon

The hildon-application-manager (our GUI to install packages) had its apt worker ported to the newer libapt API, and the apt worker is now niced to 15 so that installing packages does not make the rest of the system unresponsive.

Additionally:

New Hildon themes

hildon-theme-tools, used for building Hildon themes, was brought up to date with modern gdk-pixbuf/glib, which allowed Claenker (A local LLM experiment to semi-automatically port software from Maemo Fremantle to Maemo Leste by Merlijn) to port various themes from Fremantle to Maemo Leste: blue-sky, borg, firststrike, goldrush, greenrush, hitech, itheme, meegoturkiye, nosto, plasticberry, purplerush, silverrush and maemeemo.

Theme porting mostly consisted of modernising the debian packaging, which is usually a pretty painstaking task.

Enjoy these 13 new themes!

Telepathy

Telepathy-Qt is now available for Qt6 (telepathy-qt6). In the process, we fixed a bug where contacts from tp-qt based connection managers would not show up in the addressbook (osso-abook).

In addition, Sander created two brand new connection managers: telepathy-qxmpp and telepathy-qmatrix

telepathy-qxmpp

It features:

  • contacts, presence and avatars
  • 1:1 chats and group chats
  • E2EE via OMEMO0 and OMEMO2
  • message history fetching
  • messages that stay in sync between all your devices
  • voice calls !

About OMEMO: there are two, incompatible generations of OMEMO - the widely deployed eu.siacs.conversations.axolotl, and the newer one urn:xmpp:omemo:2. Clients typically speak only one of them, which means that two encrypted-capable clients can still fail to talk to each other. As far as we know, telepathy-qxmpp is the first XMPP client that can do both, so that communications stays encrypted regardless of which client the counterparty happens to use.

It also does voice calling, and sphone is capable of handling these calls, so an XMPP call behaves like any other call on the device. This feature is currently in testing, and should arrive very soon.

Another nice feature is that messages are kept in sync between multiple devices using Carbons (XEP-0280) and MAM (XEP-0313).

telepathy-qmatrix

Built on libQuotient. It replaces telepathy-tank, which was also built on libQuotient.

It features:

  • contacts and presence
  • direct chats and rooms
  • typing notifications and read receipts
  • message history fetching
  • E2EE

This connection manager is currently in testing, and should arrive very soon.

Hardware & Drivers

New devices: Pixel 3a / OnePlus 6T

Maemo Leste now supports two Qualcomm based phones: the OnePlus 6 and 6T (sdm845) and the Google Pixel 3a and 3a XL (sdm670). Both have images that are built by debos-leste. Bluetooth works, wifi works, screen rotation works, and calls work. Modem support is in the works.

These devices run a 6.12 kernel that we package (linux-image-6.12-sdm845 and linux-image-6.12-sdm670), together with some Qualcomm userspace bits needed to bring the hardware up (start some Qualcomm daemons).

Godot 4.6.2 on Google Pixel3a

Arno1103 contributed the alsa UCM configuration for the Pixel 3a.

We don't have instructions yet on how to flash debos-leste produced images onto the device, but if you cannot wait, download the images from our Forgejo CI, and follow the standard flash instructions of e.g. mobian (fastboot).

See also Pixel3a wiki

Hildon-Application-Manager on Pixel3a
Chromium on Pixel3a
Pixel3a custom desktop
Kodi on Pixel3a
Launcher on Pixel3a
Launcher in portrait mode
Hamster Filer in portait mode (Pixel3a)
Sphone in landscape mode on Pixel3a
Modest with Gmail in landscape mode
Menu applet in portrait mode
Modest in portrait mode
Super Tux Kart on Pixel3a
Conversations menu on Pixel3a

New devices: Olimex A20 & A64

We support 2 new SBCs: A20-OLinuXino-LIME2 (armhf) and A64-OLinuXino (arm64). The schematics of OLinuXino devices are open, run mainline linux, and as such are a nice fit for Maemo Leste.

Raspberry Pi 2/3/4

This is a multi-device image, and is fully operational again; new kernel, and a new boot configuration.

Nokia N900

The wifi MAC address of the N900 is stored in the CAL area of the flash, and wl1251-cal is what reads it out and hands it to the driver. sicelo improved its boot-time initialization and removed the dependency on the external libcal library, after which freemangordon restored the libcal usage and fixed the code around it instead, so that there is only one implementation of this to maintain. The stale /etc/modprobe.d/wl1251-blacklist.conf that older installs carried around is now properly removed on upgrade.

libcal itself received a fix for printing off_t regardless of its size, and no longer does arithmetic on void pointers.

sicelo also switched the touchscreen over to libinput and fixed the UCM device priorities and the voicecall speaker.

Dillo on N900
Custom Hildon desktop
Modest with Gmail
Sphone dialer
Telegram-desktop
Conversations with slim mode

Audio

Arno1103 did a round of audio work that benefits the N900 in particular: the headset ADC mic was fixed, internal and external microphones are now two separate devices, and mixers were added and adjusted to improve volume amplification.

profiled no longer lists aac files as possible ringtones in the settings, which was confusing because they would not actually play.

Extras

leste-extras grew considerably this release (than it did for Daedalus); new software was ported from Fremantle and various other places, and packages that were non-operational in daedalus were fixed.

maemo-recorder

maemo-recorder was ported from Fremantle and is available in Maemo Leste for the first time. Next to the port itself it gained a dictaphone mode (recordings are saved automatically with a timestamped filename), Opus as a recording format, and buttons to delete the last recording.

coolkbd

coolkbd, packaged for Maemo Leste by norayr, is a small on-screen keyboard written in C directly on top of Xlib. It ships English, Russian, Armenian and function key layouts, scales for portrait and landscape, and supports long press for alternative characters.

It is an alternative to the Hildon input method. Arno1103 contributed new default key colours and new gamepad layout.

cloudgps

cloudgps is a smooth OpenGL ES tile map and navigation application, originally written for the N900 by Damian Waradzyn. cloudgps can now be used for step-by-step navigation.

Arno1103 did most of the work: OSRM instruction parsing and box sizes were fixed, routes now show street names, road references and a duration, tile downloading moved into a thread, and a number of crashes were fixed - including the segfault that broke turn-by-turn navigation and one when pressing a key belonging to an obsolete 3D buildings feature. sicelo switched its battery reporting to UPower and made it fetch its tiles over HTTPS.

nomweather-home-widget

nomweather-home-widget is a brand new hildon-desktop home widget, written in GTK by Sander, that shows the weather on the Hildon desktop. It shares some code and functionality with NOMWeather, the standalone weather GUI application.

You can tap the widget to cycle through the forecast, and it picks up changes made in the NOMWeather application (such as a different location) immediately. Being a widget that runs all day, some attention went into it not leaking memory and into dealing with Hildon hiding and showing it on rotation or when the screen turns off.

live-wallpaper

live-wallpaper shows an animated wallpaper that changes with the time of day. It did not work in our Daedalus release, and it does again now: it was ported to Excalibur and its gcc 14 compilation errors were fixed.

comics-daily

comics-daily by norayr is a web comic reader.

It switched from scraping to RSS, and got better scaling support.

barev-purple

barev-purple by norayr is a libpurple plugin for serverless, peer to peer chat over the Yggdrasil network. It is a fork of Pidgin's Bonjour protocol that addresses peers manually, so no mDNS or Avahi is involved. Maemo Leste uses it through telepathy-haze, which means the chats show up in Conversations, and accounts are created from the regular accounts dialog through rtcom-accounts-plugin-barev.

New this release:

  • avatars (XEP-0153);
  • typing notifications;
  • XMPP pings (XEP-0199), to detect dead connections;
  • static presence statuses;
  • a persistent contacts file, which survives a reconnect;
  • a pending message queue for contacts that are offline;
  • file transfer;
  • a lot of fixes around contact matching and identity - buddies are matched against the address their stream actually comes from, bare nicknames are matched by localpart, and an impersonation guard was added.

tomar

tomar (տոմար) by norayr is a new RSS/Atom reader, written in Free Pascal without any dependencies.

Paste the URL of a YouTube profile and tomar finds the feed and subscribes to it, after which videos can be watched with mpv in two resolutions - so you can follow a channel without opening a browser.

It was made usable on a phone as well: long press acts as a right click in the tree view, the tree view is tap friendly, font and splitter sizes suit small screens, and rotation is handled.

chromatika

chromatika, also by norayr, is a new image editor that applies film LUTs (HALD CLUTs) to your photos.

lagrange

lagrange is skyjake's client for Geminispace - a browser for the Gemini protocol, with tabs, bookmarks, identities (TLS client certificates), inline images and audio playback.

norayr updated the packaging for Excalibur, fixed the icon, and got the desktop file right so that it launches with OpenGL ES - which is what makes it usable on our devices.

pcsx_rearmed

pcsx_rearmed, notaz' PlayStation emulator for ARM devices, was fixed up for Excalibur by Arno1103: the t64 library dependencies were corrected, a compilation error and a wrong libpng dependency were fixed, and the old Github workflows were replaced by a Forgejo one - so it now builds on our own CI, for armhf and arm64.

kotki

kotki is our offline translation tool - it does machine translation locally on the device, without sending your text anywhere. It now has runtime support for arm64, so it can be used on devices such as the Pixel 3a.

And more

A lot of other packages were ported to Excalibur, or updated on their maemo/excalibur branch:

Virtua Racing 32X on N900
Sonic 2 on N900
Sonic 2 on Pixel3a XL

What's next

Debian Forky is scheduled to be released about a year from now, and since we are finally on stable we would very much like to stay there - so we will start looking at Forky well before it is released. For this release we will have to evaluate if we migrate our stack to GTK3 and how to deal with the various remaining porting aspects.

Other things on our list:

  • support for more devices - both phones and single board computers;
  • better support for the mapphones - we're working on various new drivers and driver fixes for the mapphone family;
  • moving away from gconf and towards gsettings;
  • AppArmor profiles for our applications;
  • automatically publishing the images our CI builds on our download mirror.

Interested?

If you have questions, are interested in specifics or helping out, or wish to have a specific package ported, please see our bugtracker.

Please also join our mailing list to stay up to date, ask questions and/or help out. Another great way to get in touch is to join the IRC channel.

If you like our work and want to see it continue, join our effort!

Sander Ferdinand and Merlijn Wajer