If you’ve missed the most recent update on the Thunderbird blog (or any of the previous monthly updates), there has been a lot of momentum and progress! In the last nine months, we informed our community know that we have:
We know more improvements will follow, and we will continue to update you all on the Thunderbird blog on a monthly basis. And for all of you who are fans of our little robot dog, the K-9 app and all its associated branding will be maintained alongside Thunderbird for the foreseeable future.
Thank you to all of our users, contributors, and supporters who have helped make K-9 into a great email app with equally great values: privacy, open standards, and open development. This regeneration is only the start of K-9’s next adventure!
]]>We have always been a bit vague on when we were going to release Thunderbird for Android. At first this was because we still had to figure out what features we wanted to add to K-9 Mail before we were comfortable calling it Thunderbird. Once we had a list, we estimated how long it would take to add those features to the app. Then something happened that always happens in software projects – things took longer than expected. So we cut down on features and aimed for a release at the end of 2023. As we got closer to the end of the year, it became clear that even with the reduced set of features, the release date would have almost certainly slipped into early 2024.
We then sat together and reevaluated the situation. In the end we decided that there’s no rush. We’ll work on the features we wanted in the app in the first place, because you deserve the best mobile experience we can give you. Once those features have been added, we’ll release the app as Thunderbird for Android.
But of course you don’t have to wait until then. All our development happens out in the open. The stable version of K-9 Mail contains all of the features we have already completed. The beta version of K-9 Mail contains the feature(s) we’re currently working on.
Both stable and beta versions can be installed via F-Droid or Google Play.
Side note: Quite a few people seem to love K-9 Mail and have asked us to keep the robot dog around. We believe it should be relatively little effort to build two apps from one code base. The apps would be virtually identical and only differ in app name, app icon, and the color scheme. So our current plan is to keep K-9 Mail around.
Whether you prefer metal dogs or mythical birds, we’ve got you covered.
This announcement was also published in the Thunderbird blog.
]]>But since the end of the year company shutdown is coming up and both Wolf and I have some vacation days left, this will be the last progress report of the year, covering both November and December. If you need a refresher on where we left off previously, know that the progress report for October is only one click away.
If you’ve recently visited K-9 Mail’s page on Google Play you might have noticed that the developer name changed from “K-9 Dog Walkers” to “Mozilla Thunderbird”. That’s because we finally got around to moving the app to a developer account owned by Thunderbird.
I’d like to use this opportunity to thank Jesse Vincent, who not only founded the K-9 Mail project, but also managed the Google Play developer account for all these years. Thank you ♥️
Previously, the app asked the user to grant the permission to access contacts when the message list or compose screens were displayed.
The app asked for the contacts permission every time one of these screens was opened. That’s not as bad as it sounds. Android automatically ignores such a request after the user has selected the “deny” option twice. Unfortunately, dismissing the dialog e.g. by using the back button, doesn’t count as denying the permission request. So users who chose that option to get rid of the dialog were asked again and again. Clearly not a great experience.
So we changed it. Now, the app no longer asks for the contacts permission in those screens. Instead, asking the user to grant permissions is now part of the onboarding flow. After adding the first account, users will see the following screen:
The keen observer will have noticed that the app is now also asking for the permission to create notifications. Since the introduction of notification categories in Android 8, users have always had the option to disable some or all notifications created by an app. But starting with Android 13, users now have to explicitly grant the permission to create notifications.
While the app will work without the notification permission, you should still grant it to the app, at least for now. Currently, some errors (e.g. when sending an email has failed) are only communicated via a notification.
And don’t worry, granting the permission doesn’t mean you’ll be bombarded with notifications. You can still configure whether you want to get notifications for new messages on a per account basis.
This section has been a fixture in the last couple of progress reports. The new account setup code has been a lot of work. And we’re still not quite done yet. However, it already is in a state where it’s a vast improvement over what we had previously.
Thanks to feedback from beta testers, we identified and fixed a couple of bugs.
test@[127.0.0.1].Thanks to feedback from people who went through the manual setup flow multiple times, we identified a couple of usability issues. We made some changes like disabling auto-correct in the server name text field and copying the password entered in the incoming server settings screen to the outgoing server settings screen.
Hopefully, automatic account setup will just work for you. But if you have to use the manual setup route, at least now it should be a tiny bit less annoying.
Editing incoming or outgoing server settings is not strictly part of setting up an account. However, the same screens used in the manual account setup flow are also used when editing server settings of an existing account (e.g. by going to Settings → [Account] → Fetching mail → Incoming server).
The screens don’t behave exactly the same in both instances, so some changes were necessary. In November we finally got around to adapting the screens. And now the new UI is also used when editing server settings.
Every year Google requires Android developers to change their apps to support the new (security) features and restrictions of the Android version that was released the prior year. This is automatically enforced by only allowing developers to publish app updates on Google Play when they “target” the required Android version. This year’s deadline was August 31.
There was only one change in Android 13 that affected K-9 Mail. Once an app targets this Android version, it has to ask the user for permission before being able to create notifications. Since our plans already included adding a new screen to ask for permissions during onboarding, we didn’t spend too much time worrying about the deadline.
But due to us being busy working on other features, we only got around to adding the permission screen in November. We requested an extension to the deadline, which (to my surprise) seems to have been granted automatically. Still, there was a brief period of time where we weren’t able to publish new beta versions because we missed the extended deadline by a couple of days.
We’ll prioritize updating the app to target the latest Android version in the future.
When Push is enabled, K-9 Mail uses what the developer documentation calls “exact alarms” to periodically refresh its Push connection to the server. Starting with Android 12, apps need to request a separate permission to use exact alarms. But the permission itself was granted automatically.
In Android 14 (released in October 2023) Google changed the behavior and Android no longer pre-grants this permission to newly installed apps. However, instead of limiting this to apps targeting Android 14, for some reason they decided to extend this behavior change to apps targeting Android 13.
This unfortunate choice by the creator of Android means that Push is currently not working for users who perform a fresh install of K-9 Mail 6.712 or newer on Android 14. Upgrading from a previous version of K-9 Mail should be fine since the permission was then granted automatically in the past.
At the beginning of next year we’ll be working on adding a screen to guide the user to grant the necessary permission when enabling Push on Android 14. Until then, you can manually grant the permission by opening Android’s App info screen for the app, then enable Allow setting alarms and reminders under Alarms & reminders.
In November and December the following contributions by community members were merged into K-9 Mail:
Thanks for the contributions! ❤️
If you want to help shape future versions of the app, become a beta tester and provide feedback on new features while they are still in development.
This progress report was also published in the Thunderbird blog.
]]>All the translations of the app are provided by volunteers from the community. This work is mostly independent from software development and design work. So sometimes it’s easy for us to forget that a lot more people regularly spend time working on the app.
Dear translators, thank you for all the work you’re putting into making the app more accessible by translating it to so many languages ❤️
In October we switched to Weblate to manage translations of the app. This has a couple of reasons:
Currently K-9 Mail ships with support for the following 49 languages:
Albanian, Arabic, Basque, Belarusian, Breton, Bulgarian, Catalan, Chinese (Simplified), Chinese (Traditional), Croatian, Czech, Danish, Dutch, English, English (GB), Esperanto, Estonian, Finnish, French, Frisian, Gaelic, Galician, German, Greek, Hebrew, Hungarian, Icelandic, Indonesian, Italian, Japanese, Korean, Latvian, Lithuanian, Malayalam, Norwegian Bokmål, Persian, Polish, Portuguese (Brazil), Portuguese (Portugal), Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Turkish, Ukrainian, Welsh.
There’s an additional 7 languages where partial translations exist, but are currently not included in the app:
Armenian (36% translated), Azerbaijani (6%), Georgian (51%), Hindi (23%), Norwegian Nynorsk (43%), Tamil (16%), Vietnamese (63%).
However, some of the included translations haven’t been updated in a while. And so in addition to the 7 languages above, there’s quite a few languages that could use the help of new translators. Here’s the list of languages where less than 97% of strings have been translated:
Arabic (88%), Belarusian (89%), Breton (74%), Bulgarian (87%), Croatian (75%), Danish (92%), English (GB) (1%), Esperanto (82%), Gaelic (73%), Galician (82%), Greek (89%), Hebrew (49%), Indonesian (79%), Korean (69%), Latvian (89%), Lithuanian (87%), Malayalam (81%), Norwegian Bokmål (93%), Persian (89%), Portuguese (Portugal) (88%), Russian (88%), Serbian (79%), Slovak (71%), Slovenian (90%), Ukrainian (89%), Welsh (86%).
If you want to help out with translations for any of these, please head over to our Weblate project.
On October 31 our GitHub organization was renamed from thundernest to thunderbird. We also used this opportunity to rename the repository from k-9 to thunderbird-android.
Old links should redirect to the new location. But if you’re maintaining a website that links to our GitHub organization or repository, please update those links.
The new account setup is still our main focus. In October most of our work went on behind the scenes. The only user-visible changes were fixing a crash when entering an unsupported email address and respecting the app theme and app language settings in the account setup UI.
We also worked on replacing the screens to edit incoming and outgoing server settings. However, that work is still ongoing and not available in beta releases yet.
We’re trying to get better at documenting decisions we made about the architecture of the app. Wolf started us off by creating the following architecture decision records (ADR):
At the end of October cketti attended Make Better Email, a meeting to bring together email client authors, email server authors, and email service providers to talk about how to improve the ecosystem through the better use of open standards.
Some of the topics we talked about:
In the upcoming months this should result in new RFC drafts and a best current practice (BCP) document at the IETF.
Many thanks to both of you! ❤️
This progress report was also published in the Thunderbird blog.
]]>
Wolf continued to work on the new and improved account setup code. This mostly involved fixing bugs and improving the internal architecture, so the code will be easier to maintain in the future.
With the switch to the new account setup code, we were able to remove (some of) the old setup code. If you’re software developer, you know that being able to delete a significant amount of old code is one of the best feelings on the job. If you’re not, just take my word for it.
Wolf also started work on using the new server settings screens when editing the incoming and outgoing server of an existing account. Once that work is complete we’ll be able to delete even more old code.
Unfortunately, none of this work resulted in new screens that we could show off in this progress report. But maybe the following stats can give an idea of how busy Wolf was.

These are some of the more notable bugs we fixed in September.
Some users reported that the splash screen newer Android versions automatically display, shows a blurry app icon. The reason was that we used a bitmap that looked fine when used as regular-sized icon, but that looked blurry when being scaled up, e.g. for the splash screen.
We fixed this by converting the icon into the vector image format supported by Android. To be able to do that we had to remove some details from the icon. But the result is a sharp app icon on the splash screen.
In our new setup code we accidentally broke OAuth 2.0 support for Yahoo and AOL accounts. Apparently some people still use those email providers. So we fixed the bug.
K-9 Mail allows the user to specify what is displayed next after a message has been deleted from the message view screen. Available options are:
However, those are not the options a user could select in app settings. There were two preferences: Return to list after delete and Show next message after delete.

During one of our design meetings we quickly decided this is not a great user experience and changed it to one setting with three options.
Since the same behavior is also used after moving a message, we also used this opportunity to change the name of the setting.
In September we merged the following pull requests by external contributors:
Thank you. Your work is greatly appreciated ❤️
We didn’t release any beta or stable versions in September. However, that’s an exception. Usually we publish a couple of beta releases a month. If you want to help shape future versions of the app, become a beta tester and provide feedback on new features while they are still in development.
This progress report was also published in the Thunderbird blog.
]]>August was a relatively calm month for the K-9 Mail team, with many taking well-deserved summer vacations and attending our first Mozilla All-Hands event. Despite the quieter pace, we managed to hit a significant milestone on our journey to Thunderbird for Android: the beta release of our new account setup interface.
We’re thrilled to announce that we rolled out a beta version featuring the new account setup UI. This has been a long-awaited feature, and even though the team was partially on vacation, we managed to get it out for user testing. The initial feedback has been encouraging, and we’re eager to hear your thoughts.
You can find the K-9 Mail v6.710 beta version here:
If you’ve tried the beta, we’d love to get your feedback. What did you like? What could be improved? Your insights will help us refine the feature for its official release.
You can provide feedback through the following channels:
In August we merged the following pull requests by these awesome contributors:
This progress report was also published in the Thunderbird blog.
]]>Please enjoy this brief report of our development activities in July 2023.
Since Wolf joined in February of this year, he has spent a considerable amount of time on many of the individual pieces that make up the new and improved account setup user interface. July was the month when things started coming together. For the first time we were able to test the whole flow and not just individual parts.
Things were looking good. But a few small issues kept us busy and prevented us from releasing a beta version containing the new account setup.
We’ve done some experiments to get a better idea of how much work it will be to switch the app to Material 3, the latest version of Google’s open-source design system. We’re now cautiously optimistic. And so the current plan is switch to Material 3 before renaming the app from K-9 Mail to Thunderbird.
In July we merged the following pull requests by external contributors:
After a few busy days surrounding the Thunderbird Supernova release, we finally managed to publish the report of the security audit organized by OSTIF and performed by 7ASecurity. We’re happy to report that no high-risk vulnerabilities were found. The security audit did uncover a handful of low-to-medium risk vulnerabilities.
To learn more about this, read our blog post K-9 Mail Collaborates With OSTIF, 7ASecurity On Security Audit.
Thank you to everyone involved in making this happen!
This progress report was also published in the Thunderbird blog.
]]>If you need a refresher on what happened the previous month, read the May 2023 Progress Report.
The roadmap item we’re currently working on is Improve Account Setup. Most of our time went into working on this. However, for June there’s no exciting news to share. We mostly worked on the internal plumbing; that is important to get right, but not necessarily great material for a blog post. Hopefully there will be new screenshots to share in July’s progress report.
Having an app with a large user base means we can’t spend all of our time working on new features. Fixing bugs is a large and important part of the job. Here’s a writeup of just three of the bugs we fixed in June.
A user reported that some of their folders appear to be empty in K-9 Mail. Using the provided debug log (❤️) we were able to track this down to a message containing an invalid email address, specifically one whose local part (the text before the @ symbol) exceeds the limit of 64 characters.
The error was thrown by a newly added email address parser that is stricter than what we used before. At first it was a bit surprising that this would lead to messages in a folder not being shown. We deliberately kept this new implementation out of the code responsible for parsing emails after download and the code for displaying messages.
However, it turned out the new email address parser was used when getting the contact name belonging to an email address. This lookup is performed when loading the message list of a folder from the local database. When an error occurs during this step, an empty message list is shown to the user.
To fix this bug and limit the impact of similar problems in the future, we made the following changes:
We’re very grateful to our beta testers for finding and reporting bugs like this one. That way we can fix them before they make it into a stable release.
With the introduction of the message details screen we added a button to add a message sender or recipient to the contacts database using an installed contact app. If the email address can already be found in the contacts database, this button is hidden and tapping the participant name, email address, or contact picture opens the contacts app.
Previously the app didn’t make that distinction and tapping an email address or participant name would open the contacts app using the “show or create” action. Apparently this reliably allowed to add an email address to an existing contact. However, the “insert” action used by the details screen only allows adding the email address to an existing contact with some contacts apps, but not others 😞
We changed the action to start the contacts app from “insert” to “insert or edit”, and this seems to reliably offer the option to add the email address to an existing contact.
A user reported that the behavior when replying to a message retrieved via a mailing list was different depending on whether the message had been downloaded completely or only partially.
K-9 Mail supports only downloading parts of a message when the email exceeds a configured size. In that case also only selected parts of the message header are downloaded. Unfortunately, we forgot to include the List-Post header field that is used to determine the email address to which to reply.
The fix was simply adding List-Post to the list of header fields to fetch from the IMAP server.
In June we merged the following pull requests by external contributors:
In June 2023 we published the following beta versions:
If you want to help shape future versions of the app, become a beta tester and provide feedback on new features while they are still in development.
This progress report was also published in the Thunderbird blog.
]]>In our continued efforts to enhance the user experience, we have redesigned the account setup UI. This is the first point of contact for our users and we wanted to ensure it is as intuitive and straightforward as possible. We integrate Thunderbird’s Autoconfiguration for seamless email account setup, start the transition of our app’s UI from XML Android layouts to Jetpack Compose, and adopt Atomic Design principles for a cohesive, intuitive design.
At the heart of this transformation is the integration of Thunderbird Autoconfig. This system enables automatic configuration of most email accounts, simplifying the user experience by making the connection to email servers effortless. Users only need to enter their email address and the server settings are obtained via multiple methods. They can be sourced from a central database (ISPDB), retrieved directly from ISPs through a configuration server, drawn from provided configuration files. In cases where these methods are unsuccessful, the configuration is derived from common server names. If all else fails, manual configuration is always available. With this powerful tool, setting up an email account becomes a breeze.
Our redesigned account setup UI has been written using Jetpack Compose. Although XML layouts have long been the standard for building Android UIs, the Android ecosystem is transitioning towards Jetpack Compose as the new norm. This declarative UI toolkit has enabled us to build UIs more efficiently, with less boilerplate code and reduced likelihood of bugs. Jetpack Compose defines UI elements as composable functions written in Kotlin code. This results in more intuitive, expressive, and readable components and promotes the reuse of UI components, streamlining the UI design process. This aligns well with the implementation of our new design system.
In combination with our new design system, which follows Atomic Design principles, the account setup UI presents a cohesive and intuitive user interface. The fundamental concept of Atomic Design involves breaking down design into smaller, reusable components (atoms), which can be combined to form larger, more complex structures (molecules and organisms). This approach has allowed us to systematically deconstruct our UI interfaces into their basic components and combine them to form more complex, reusable components for the account setup UI. The result is a more structured, scalable, and efficient design system, improving the consistency and usability of our app.
We’re confident that these changes have resulted in a smoother, more user-friendly account setup process. As we prepare to release a new beta version that includes this feature, we are eager to receive your thoughts and feedback on these improvements.
When we released the overhauled message view in K‑9 Mail 6.600, the button to reply to a message changed from a menu offering Reply, Reply All, and Forward to a single button with a default action and the additional actions moving to the overflow menu (⋮). The default action in K‑9 Mail 6.600 was Reply All. Due to many complaints we changed it to Reply in K‑9 Mail 6.602.
However, it became clear that neither default works well for everyone, or even for one person in every situation. We’ll continue to work on this and hope we’ll find a solution where everyone can have their favorite behavior without forcing a significant portion of users having to dig through settings to get it.
Many thanks to all of you! ❤️
With the help of the Open Source Technology Improvement Fund we’ve hired 7ASecurity to do a security audit of K‑9 Mail. We’re happy to report that no critical issues have been found.
In May we spent a couple of days fixing most of the security issues that were identified during the audit. We’ve created entries in our issue tracker for findings that still need to be addressed.
The final report should be ready soon. We’ll announce its availability in this blog.
In May 2023 we published the following stable releases:
… and the following beta versions:
If you want to help shape future versions of the app, become a beta tester and provide feedback on new features while they are still in development.
This progress report was also published in the Thunderbird blog.
]]>Along with a couple of new features, a lot of changes and bug fixes went into the new K-9 Mail version. However, space for release notes in app stores is very limited. So we went with this list of changes:
After learning that an old bug in Android had finally been fixed in 2021, we changed the app to disable home screen widgets by default and only enable them after the user had added at least one account to K-9 Mail.
Of course we limited this to Android versions that should include the fix. However, this didn’t quite work as intended and existing home screen widgets disappeared on some devices. So we reverted the change in K-9 Mail 6.601.
With the stable release out the door, it was time for a new series of beta releases to test early versions of features and fixes that should go into the next stable release.
The first beta version (6.700) didn’t include any new features, but fixes quite a few bugs (mostly obscure crashes).
The GitHub user wh201906 contributed code to add support for the IMAP ID extension (thank you). It is used by an email client to send information about itself to the IMAP server. In turn, the server responds with some information about itself (name, software version, etc).
Unfortunately, some email providers reject clients not using this extension, even though the specification explicitly states the extension must not be used for that purpose. To make K-9 Mail work with such email providers without users having to change a setting, we decided to enable this functionality by default. Also, because we want to align our default values with Thunderbird, and it’s enabled there by default.
The information sent to the server is limited to just the app name – “K-9 Mail”. If you wish, you can disable this feature under Settings → <Account> → Fetching mail → Incoming server → Send client ID.
The main goal for the next stable release is to improve the account setup experience. Many new users are struggling with setting up an account in K-9 Mail. That’s because K-9 Mail only supports automatic account setup for a handful of large email providers. For all other email providers users have to manually enter the email server settings. And this can be a very frustrating experience.
Ideally, users only have to provide their email address and the app will figure out the rest. We’ll be adding support for Thunderbird’s Autoconfig mechanism which aims to deliver just this user experience.
Hopefully, we’ll be able to ship a first version of this in a beta release in May.
In April 2023 we published the following stable releases:
… and the following beta versions:
If you want to help shape future versions of the app, become a beta tester and provide feedback on new features while they are still in development.
This progress report was also published in the Thunderbird blog.
]]>