State of the Bird August 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 August 2nd 2025 and can be found here.
Things have picked up considerably since the summer lull in the northern hemisphere.
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 this is a look at how many were open and closed each month.
As you can see activity has picked up quite a bit.
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.
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
No new updates here.
pidgin3
Retrospective
Lots of work on Pidgin 3 this month!
Updates
- Cleaned up and modernize PurpleImage. We were looking to get rid of this, but GdkPixbuf is getting deprecated so we cleaned this up and backed it with GBytes as we’ll be using it going forward.
- Replaced Purple.Avatar with Purple.Image. With the above mentioned GdkPixbuf deprecations there isn’t much need for this anymore as Purple.Image will handle everything we need.
- Added an avatar-for-display property to Purple.ContactInfo. This is just like all the other
-for-displayfunctions, but for avatars. - Created Purple.Contacts. This is a simple collection of Purple.Contact instances which is used by the new Purple.ProtocolDirectory API.
- Created Purple.ProtocolDirectory. This is currently just being used to search for users but in the future will include channels as well.
- Added Purple.ConversationMembers.find_first_other. This is used to help find the ConversationMember for the non purple user in a direct message.
- Don’t show the presence icon in messages. This turned out to get really obnoxious over time.
- Made the demo protocol plugin use the active presence. This is the first step in getting a status selector going.
- Added default handlers to Purple.Account to manage the online state of conversations. These handlers will automatically mark all conversations for an account offline when the account disconnects as well as ask the protocol to refresh the conversation when the account comes back online.
- Added a Purple.ContactInfo:badges property. This allows us to set badges at a global global as well as the existing conversation level.
- Added vfuncs to Purple.Protocol for setting display names.
- Added a Purple.Conversation::displayed. This is useful for protocols so that they can avoid syncing a conversation until the user is actually looking at it.
- Removed all of the proxy code. Nearly all of our proxy stuff is supported by GProxyResolver so we didn’t really need it anymore. We do still need to add back the preferences and account settings, but there isn’t a large need for this right now.
- Moved the saved-plugins preference to GSettings. This was the last user of the preferences API.
- Removed the preferences API. Everything has been ported to GSettings now so this API was no longer necessary.
- Removed Purple.ContactInfo:username. For protocols that still use usernames should be using the id field and this field was just making everything more confusing.
- Deprecated ChangeLog.API. This was a very large and difficult to read list and most of the API changes are in the core documentation and separate articles are being written to make the changes easier to understand.
- Renamed Attachment:inline to Attachment:is-inline to fix some compiler errors on Windows.
- Ported everything to the birb string functions.
Releases
None
Future Plans
- The account options API is in the process of being replaced by a new AccountSetting API.
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 o#gplugin-plugin-library f 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
We’re still planning on doing a 2.15.0 release, but we haven’t moved forward on this at all this month.
Updates
- Cleaned up the app data file.
- Removed the auto package spec file.
Retrospective
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.
Releases
None
Future Plans
Just the same as what was mentioned above.
GPlugin
GPlugin is our GObject based plugin library that is used in Pidgin 3.
Retrospective
No activity this month.
Updates
None
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.
Updates
None
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
No activity this month.
Updates
None
Releases
None
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.
Updates
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 activity this month.
Updates
None
Releases
None
Future Plans
Continue working through the open issues and watching new IRCv3 specifications for things we should be including.
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
No activity this month.
Updates
None
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
We realized that users can’t necessarily point these protocol to different severs so we’ve been slowly correcting that.
Updates
- Fixed some compiler warnings in libymsg.
- Removed the default server from napster.
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.
One Last Thing…
We’ve gotten a fair amount of feedback when it comes to the user interface direction of Pidgin 3. The feedback is that some people prefer the simplified user interface of Pidgin 2 which is more focused on one to one chats than multiple user chat rooms.
Due to this, Gary has been playing around with an additional GTK4 interface which will reproduce the Pidgin 2 look and feel. This is still very early in development, but as it’s just another GTK4 user interface which we’re all very well versed in, it should pick up steam quickly especially since it’s cloning an existing design. However, we’re waiting on the Account Setting API before we really move forward at the moment.
So that said, the only thing left to discuss is the name. As you might have guessed, we’ve spent a fair amount of time discussing this and I’m pleased to tell you that we’re calling it Gaim 3. That’s right, we’re bringing the Gaim name back. We’ve talked to a lawyer and they believe we are in the clear when it comes to the old AOL trademark which has since expired.
We have created a Gaim category on our Discourse for additional discussion including some screen shots of what it looks like so far and Gaim 3 will be part of future State of the Birds!
Closing
We hope you all are enjoying the new format and if you have any questions of comments please leave them below!