State of the Bird September 2025

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 September 16th 2025 and can be found here.

This State of the Bird is a bit late due to a number of reasons, the biggest of which is that Gary kept forgetting to finish it. Also the Charts plugin in Discourse got broken so we started looking at alternatives but luckily the plugin got fixed and we now have some code to automatically gather some of the metrics.

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.

2025-04 | 2025-05 | 2025-06 | 2025-07 | 2025-08 | 2025-09 Developers | 2 | 2 | 2 | 2 | 1 | 2 | Crazy Patch Writers | 0 | 1 | 0 | 0 | 1 | 1 | Casual | 0 | 1 | 1 | 0 | 1 | 0

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.

2025-04 | 2025-05 | 2025-06 | 2025-07 | 2025-08 | 2025-09 Open | 44 | 26 | 20 | 42 | 61 | 48 | Closed | 43 | 22 | 25 | 39 | 57 | 56 |

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.

2025-04 | 2025-05 | 2025-06 | 2025-07 | 2025-08 | 2025-09 Open | 16 | 6 | 11 | 11 | 16 | 6 | Closed | 6 | 5 | 10 | 3 | 11 | 7 |

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.

2025-04 | 2025-05 | 2025-06 | 2025-07 | 2025-08 | 2025-09 | Pidgin 3 | 28 | 15 | 10 | 25 | 51 | 46 | Pidgin 2 | 0 | 0 | 4 | 0 | 2 | 0 | Gaim 3 | 0 | 0 | 0 | 0 | 0 | 0 | GPlugin | 0 | 2 | 0 | 4 | 0 | 1 | HASL | 0 | 1 | 4 | 2 | 0 | 0 | Birb | 0 | 5 | 0 | 1 | 0 | 7 | Xeme | 0 | 0 | 0 | 1 | 0 | 0 | Ibis | 11 | 0 | 0 | 0 | 0 | 2 | Hiya | 2 | 0 | 0 | 0 | 0 | 0 | Myna | 0 | 0 | 0 | 2 | 0 | 0 | Seagull | 0 | 0 | 13 | 3 | 0 | 1 | Traversity | 0 | 0 | 0 | 0 | 0 | 0 | retro-purple | 0 | 38 | 48 | 0 | 3 | 0 |

Infrastructure

No new updates here.

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

Lots of work on Pidgin 3 this month including a new application icon! Feel free to discuss it at https://discourse.imfreedom.org/t/new-application-icon-for-pidgin-3/.

The big work this month that we were trying to get into the release was that we’re completely overhauling the account setting and user splits APIs. However, this had some dependencies we didn’t expect related to the credential providers using the account username to keep track of accounts. Needless to say, this wasn’t finished for the 2.93.0 release, but we’re going to keep chipping away at it.

Another huge thing we finished this month is the start of the migration guide for developers. This was a huge undertaking and still needs to have all the user interface stuff added to it, but it’s still a huge milestone. It can be viewed here. We need to finish the architecture documentation too which will help fill in some of the finer points that aren’t covered in the migration guide.

Also as previously mentioned in the Experimental 4 release announcement, we now have a setting for toggling light/dark mode!

demonstration of switching color schemes

Highlights

  • Add a Pidgin.Badges widget to contacts in the contact list
  • Import our new application icon from the one and only Hylke Bons
  • Create Purple.AccountSetting
  • Add Purple.AccountSettings
  • Add Purple.Protocol.get_default_account_settings
  • Create Purple.AccountSettingStringList
  • Update the default account settings handler to include user splits
  • Port IRCv3 to the new account settings
  • Add Purple.Account:disconnected to complement Purple.Account:connected
  • Fix settings initialization in network prefs
  • Fix parenting of Account Manager window on initial startup
  • A first pass at documenting how to migrate from purple 2
  • macOS: fix some issues with the macOS native files
  • macOS: hide duplicate menu items
  • Stop setting XDG_RUNTIME_DIR in devenv
  • Add a dark/light color scheme setting
  • Add remove all and update methods to Purple.AccountSettings
  • Make sure accounts have names when saving and loading
  • Add the account name to the account editor
  • Update Pidgin.AccountDisplay to use the Purple.Account:name property
  • Update libpurple to use Purple.Account:name when referring to accounts
  • Update pidgin to use Purple.Account:name when referring to accounts
  • A few cleanups in the account api
  • Create Purple.ConversationManagerBackend
  • Update Purple.ConversationManager to use a Purple.ConversationManagerBackend
  • Create Purple.ConversationManagerSeagullBackend
  • IRCv3: Only send WHO on our own joins

Releases

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 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

  • 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.

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

  • Fix detection of Lua 5.4 on Gentoo

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

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

We created Birb.LocalizedString to be used with the new Account Settings in purple as well as a few maintenance things. After the release we pull in the check license header script from the pidgin repo so that other projects can use it.

Highlights

  • Create Birb.LocalizedString
  • Fix some issues with the queued output stream error
  • Add the check license header script and make it installable

Releases

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

Fixed some issues with the unit tests on windows by using stroul instead of atoi. We also renamed the nick projects by renaming nick to primary-nick, alt-nick to secondary-nick and added tertiary-nick. The old properties are still there but have been deprecated.

Highlights

  • Use strtoul instead of atoi when parsing hosts
  • Rework the nick properties

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

Just some minor maintenance this month, but we’ve got some more stuff coming as we’re using Seagull to serialize more stuff in Purple 3.

Highlights

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

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!

1 Like