State of the Bird November 2025
The State of the Bird is a recap of what has been happening in the project.
You can find the previous posts via the state-of-the-bird tag.
Retrospective
Our last State of the Bird was November 1st 2025 and can be found here.
Numbers in general were quite low this month. I, Gary, was burned out pretty hard and took a bunch of time off. I’m still not back to 100% but things are still moving.
Metrics
We have a number of metrics we keep an eye on which you can see below.
Contributors
The number of contributors continues to fluctuate a bit, but that’s expected for a volunteer project.
If you’re interested in contributing you can find some documentation here including ways that don’t require knowing how to program.
Review Requests
Review requests are what we call our code reviews and is the way that all code is accepted into our code bases. This is a look at how many were open and closed each month.
Issues
This is a look at the number of issues that were opened in our issue tracker as well as how many were closed by month. We don’t create issues for everything we do, this is still good to look at as it will include bugs and other issues users have brought to our attention.
Commits
This is a break down of commits to each project per month. In most cases a review request is just a single commit, but this chart helps to see what projects are being worked on.
Infrastructure
Nothing new to report here. Registrations are still disabled in Hub to help avoid spam and will continue to be disabled for the foreseeable future.
We will be migrating YouTrack, TeamCity, and our static sites out of Kubernetes and onto separate VPSs in the near future.
pidgin3
Pidgin 3 is our next generation universal chat client whose goal is to give you the best experience possible when using modern chat networks.
Retrospective
Not a whole lot happened in Pidgin 3 this month, but we do have a new presence chooser. There’s a bit of work to do yet to add easy access to the presence manager and other shortcuts, but its working as is right now.
Highlights
- Make Purple.ConversationManagerSeagullBackend use strict tables (RR 4247)
- Add a disconnection message to all the disconnect methods (RR 4245)
- IRCv3: Send the quit command with a message when disconnecting (RR 4246)
- Create a basic presence chooser (RR 4244)
- IRCv3: use ibis_client_disconnect instead of doing it manuall (RR 4261)
- Create Purple.ContactManagerBackend (RR 4264)
Releases
None
Future Plans
- The account options API is in the process of being replaced by a new
AccountSettingAPI. - Finish getting presence implemented.
The following items are still in the works from the last state of the bird.
- Add persistence to the scheduler.
- Add persistence to the contact manager, this needs to be done so we can fix some issues with direct messages being restored correctly.
- Gary has started an out of tree protocol plugin to help figure out how the voice and video API will work.
As always, you can view the burn down chart for our next release here.
pidgin2
Pidgin 2 is our stable “production” release of a universal chat client. Meaning that you can use it as a single interface to many chat networks!
Retrospective
We’re still planning on doing a 2.15.0 release, but we haven’t moved forward on this at all this month.
Highlights
- Be more careful when trying to destroy the ticker window (RR 4254)
- Fix -Wchar-subscripts in ctype(3) functions (RR 4253)
Releases
None
Future Plans
We still need to finish up the build environment packages so we can upgrade GTK on windows and get that all into the installer. We also need to remember to update the spell checking dictionaries as we haven’t done that in awhile.
Gaim 3
As announced in the last State of the Bird, we’ve started an additional user interface to keep the look and feel of Pidgin 2 and Gaim before it in GTK4 and we’ve chosen to name it Gaim.
Retrospective
No new work this month. We’ve put things on pause until the account settings rewrite is finished. We need to be able to create accounts to move forward and don’t want to write a bunch of code just to rewrite it very soon afterwards.
Highlights
None
Releases
None
Future Plans
Once the account settings API is finished up we’re going to start moving pretty quickly here.
GPlugin
GPlugin is our GObject based plugin library that is used in Pidgin 3.
Retrospective
Nothing much this month, everything is working well enough for now.
Highlights
Nothing notably
Releases
None
Future Plans
We’re going to continue moving forward with the GLib.List → Gio.ListModel changes and eventually have GPlugin.Manager implement Gio.ListModel.
hasl
HASL is the Hassle-free Authentication and Security Layer library. It implements SASL in a modern and easy use way compared to the existing libraries.
Retrospective
No activity this month.
Highlights
- Add a codespell unit test (RR 4270)
Releases
None
Future Plans
We have been in the progress of implementing the SCRAM Mechanisms which will be included in the next release.
Birb
Birb is a library of GLib utilities that we use across all of our projects.
Retrospective
Some big stuff landed this month, some of which has been in the works for over a year believe it or not.
Birb.PangoFormatter is a helper to turn a Pango.AttrList into other formats. This will be used by libpurple protocols to convert the internal markup formatting to the protocol specific formats.
Birb.ResponseStream has been something we’ve been trying to get right for quite a while. It’s a GOutputStream that can be used to mock other sides of connections. This is one of the things we’ve been really waiting for to continue work on Xeme as we want to make sure we’re unit testing as much as we can, and now that it has landed, expect to see a lot more activity in Xeme.
Highlights
- Fix some incorrect whitespace (RR 4255)
- Add Birb.PangoFormatter (RR 4235)
- Create Birb.ResponseStream (RR 4248)
Releases
None
Future Plans
We need to create some basic HTML and Markdown formatters and then release 0.6.0
Xeme
Xeme is our XMPP integration library. It is the basis for both the Link Local Messaging (Bonjour) and XMPP protocols in Pidgin 3. It is still early in development and has not yet had a release.
Retrospective
Now that Birb.ResponseStream exists, we’ve started cleaning up the tree and getting it ready for development again.
Highlights
- Clean up a lot of the docs (RR 4249)
- Replace the str functions with the birb versions (RR 4250)
- Create proper error domains and remove XEME_DOMAIN (RR 4251)
- Move the stream constants to the main constants header (RR 4252)
- Add a codespell unit test (RR 4268)
Releases
None
Future Plans
The next steps here are going to be creating unit tests with Birb.ResponseStream to do initial connection and feature negotiation.
Ibis
Ibis is our IRCv3 integration library. It has seen a lot of active development as it is used in the IRCv3 protocol plugin in Pidgin 3.
We are nearing known feature completion on it and expect to do a 1.0 release in the near future.
Retrospective
Just some minor maintenance things this month.
Highlights
- Fix a documentation warning (RR 4260)
- Add a codespell unit test (RR 4266)
Releases
None
Future Plans
Continue working through the open issues and watching new IRCv3 specifications for things we should be including.
Once Birb 0.6.0 is released we will be adding outgoing formatting support.
Hiya
Hiya is a new client abstraction library for mDNS. It was created to help make implementation of the Link Local Messaging protocol easier as we would have to abstract out the different platform implementations and by putting it in a library that abstraction can be used by other projects.
Hiya has not yet had a release.
Myna
Myna is a new integration library for Matrix. It is still extremely early in development.
Seagull
Seagull is a new library we created to make working with SQLite feel more like a GLIB/GNOME library and force usage of prepared statements with named parameters and other similar things.
Retrospective
Quite a bit
Highlights
- Fix annotations for GError out parameters (RR 4259)
- Add support for reading and writing GBytes (RR 4256)
- Add a codespell unit tests (RR 4267)
Releases
- 0.6.0 was released on 2025-11-20 (Release Announcement)
Future Plans
We have a few features to fill out yet and a few ideas that need a bit more time in the oven.
More specific details can be found in our open issues.
Traversity
Traversity is a new library for traversing NATs. There are many different ways to traverse a NAT and the goal of Traversity is to hide that from developers who just need to traverse a NAT.
It is still early in development and has not yet had an official release.
retro-prpl
retro-prpl is a new repository we’ve created on GitHub. This repository contains all of the abandoned protocols that have ever lived in our code base and is meant to make them easier to study and for people to use with services like Retro AIM Server, escargot, and NINA.
Retrospective
Just some maintenance including a patch from Anthony Mallet for NetBSD.
Highlights
- Add a codespell unit test retro-prpl#70
- Avoid undefined behavior with ctype functions retro-prpl#69
Releases
None
Future Plans
We have a bunch of open issues that we could use some help testing with. If you’re interested in helping please don’t hesitate to jump in!
Closing
We have a lot to do going forward but we’re still striving hoping that the Experimental 5 release which is due 2025-12-31 will actually be Alpha 1. The distinction is whether not not we think the protocol specific APIs are stable enough for third party protocol developers.
We don’t have this well defined yet, and it’s more of a feel than anything, but we’ve had a few people tinkering with third party protocols with moderate success which is absolutely amazing!! So as they continue working on their protocols we’re getting good feedback on basically everything which is extremely helpful!
We hope you all are enjoying the new format and if you have any questions of comments please leave them below!
