State of the Bird September 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 October 20th 2025 and can be found here.
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.
As you can see, Pidgin 3 activity continues to dominate everything else.
Infrastructure
Jetbrains Hub, our Identity Provider, and Reviewboard have been moved from Kubernetes to a VPS to help deal with the on going AI scrappers and other malicious users. More services will probably be moved in the future but these two had to be done sooner too keep development running.
Also registrations are currently disabled in Hub due to these issues as well, they will open back up eventually, but right now it’s easier to just leave them disabled.
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
There was a lot of maintenance this month, but we still found time to clean up a lot of the conversation window and continue working towards the new account settings API.
You can see a bunch of those changes to the conversation window here.
Highlights
- Fixed some issues scan build found (RR 4195)
- Updated the metafino.xml file so things will appear correctly in app stores (RR 4193)
- Modernized PidginPresenceIcon (RR 4210)
- Show presence messages in the members lists of conversations (RR 4216)
- Implement XEP-0302 for coloring names for all users (RR 4211)
- Added a tool-tip showing the number of available and unavailable members to the search entry in the conversation members list (RR 4217)
- Added an icon for the
streamingpresence primitive (RR 4218) - Added a
Purple.Connection.set_presencevirtual function to tell protocols when to change their presence (RR 4219) - Removed the
Purple.Connection:protocolproperty (RR 4221) - IRCv3: Clear presence messages for contacts switch to an available presence (RR 4228)
- Updated
Purple.PresenceManagerto track the active presence by an index (RR 4226) - Moved a number of virtual functions from
Purple.ProtocoltoPurple.Connection(RR 4225) - Added a
badgesproperty toPurple.Conversation(RR 4231) - Updated the credential providers to use the account id and name instead of username. (RR 4238, RR 4239, RR 4240)
- Removed the KWallet credential provier (RR 4241)
Releases
None
Future Plans
- The account options API is in the process of being replaced by a new AccountSetting API.
- 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
None
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
Nothing notable
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
We’re getting ready for the next release and doing some cleanup to get there.
Highlights
- Add
Birb.str_matches(RR 4230) - Remove
Birb.FilterandBirb.CustomFilter(RR 4236)
Releases
None
Future Plans
We have an open review request (RR 4235) which adds a base helper class for formatting a Pango.AttrList to various formats. We will add some basic HTML and Markdown formatters in the future as well.
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
No activity this month.
Highlights
None
Releases
None
Future Plans
Everything! Seriously though, we’re looking to get back to this in the near future.
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
No notable activity this month.
Highlights
None
Releases
None
Future Plans
Continue working through the open issues and watching new IRCv3 specifications for things we should be including.
Once the formatting API lands in Birb 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
Only a few changes this month driven by some serialization requires in Purple 3.
Highlights
- Fixed some issues scan build found (RR 4207)
- Add suport for
GLib.TimeZone(RR 4208)
Releases
None
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
Nothing to report on this month.
Highlights
None
Releases
None
Future Plans
Right now we didn’t add any support for protocol specific emojis because we completely forgot about them. Anyways we’re looking at creating a custom emoji theme that will include everything for these retro protocols.
We’re also trying to make sure that you can actually use this to connect to the self hosted clones, but we haven’t gotten through verifying that and fixing what doesn’t work.
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!

