We are ecstatic to announce that we have released the second alpha version of Pidgin 3.0!!! This release has an official version number of 2.96.0. We will continue releasing in this fashion until we are ready for 3.0.0 which will be the release we consider ready for end users. You can read more about our development phases here.
The release can be found on SourceForge and should show up on Flathub Beta shortly.
If you don’t want to use the Flathub Beta method, there are build instructions in the README.md for building a Flatpak locally or installing into a meson devenv. Both methods avoid installing directly to your OS installation which is the preferred method as there is no easy way to uninstall the application at this time.
About
Just like the previous releases, this is a timed release. It is a snapshot of what we currently have and is something we think other tinkerers and developers may want to start playing with, but again, it is not meant for end users.
Most things are not implemented, the user interface has not been polished at all, and there are so, so many bugs. As such we are asking that packagers please do not package this for your users yet as the potential support requests will be too much for us to handle at this time.
Looking forward, Alpha 3 is scheduled for 2026-09-30 and will have a version number of 2.97.0.
We have a bunch of tickets entered for Alpha 3 and you can keep an eye on the Burn down Chart for Alpha 3 to stay informed.
As always, priorities and possibilities can and will change, so even if something is listed for this release that doesn’t mean it will be in the release until it’s actually completed.
If you would like monthly updates, be sure to check out the #state-of-the-bird::tag posts!
Highlights
This has been a very busy cycle. Like usual, we didn’t get through quite everything I wanted to, but we still made a lot of really good progress!!
Notifications
We removed the purple-toast and notification-sound plugins and built support for them directly into Pidgin. You can configure everything from the preferences with additional settings coming in the future.
Conversation Member Avatars
We now display the avatars of conversation members. There's still a lot of work to do regarding avatars, but this adds a nice touch to the user interface.
Scheduler User Interface
Purple 3 has a scheduler built-in to simplify tasks and let the user know what's going on. For example, this is where you will be able to see how long before a re-connection attempt is made for an account, but that isn't implemented quite yet.
Zulip Direct Messages
We didn't capture a screenshot, but direct messages and group direct messages are now implemented in Zulip.
QR Code Support
Many protocols now allow users to log in by scanning a QR Code. In Pidgin 2, people have implemented this with some ingenuity involving the requests API, but we now added direct support for it in Purple and the user interfaces.
While this works, it's a stop gap until we get the new authentication API finalized and implemented.
ChangeLog
As always the complete list of every change in this release is below.
We have a new ChangeLog format with this release. We've removed the separate sections and instead put the section at the start of the change message. We've also reordered the change information like author, review request, and related issues. If you have any comments, be sure to leave them below.
- Flatpak: Update the runtime to GNOME 50Gary Kramlich, RR 4509
- General: Simplify compiler warning flag setupElliott Sales de Andrade, RR 4505
- Purple: Standardize credential provider managementElliott Sales de Andrade, RR 4515
- Purple: Plug a few memory leaks in some managersGary Kramlich, RR 4522
- Purple: normalize the ConversationManagerSeagullBackend resource pathsGary Kramlich, RR 4521
- Purple: Update the contact manager seagull backend test to use the test uiGary Kramlich, RR 4517
- Purple: Add additional parameters to the ContactManagerBackend load vfuncsGary Kramlich, RR 4519
- Purple: Remove AccountManagerNoopBackendGary Kramlich, RR 4518
- Purple: remove BadgeManager.get_defaultGary Kramlich, RR 4523
- Purple: Remove the rest of the get_default methods for managersGary Kramlich, RR 4524
- Purple: Implement the people vfuncs for ContactManagerSeagullBackendGary Kramlich, RR 4520, PIDGIN-17687
- Purple: Add ConversationMember.is_accountGary Kramlich, RR 4527
- Purple: Add a Conversation::new-message signalGary Kramlich, RR 4528
- Purple: Add ConversationManager::conversation-new-message signalGary Kramlich, RR 4529
- PurpleToast: Update to use the new Purple.ConversationManager::conversation-new-message signalGary Kramlich, RR 4530
- Purple: remove the notification-sound pluginGary Kramlich, RR 4532
- Pidgin: Add support for playing a sound when a message is receivedGary Kramlich, RR 4531
- Pidgin: Add core and ui properties to ApplicationGary Kramlich, RR 4533
- Purple: Make PurpleCredentialProvider implement GInitableElliott Sales de Andrade, RR 4516, PIDGIN-18154
- Purple: Fix some issues with ContactManagerSeagullBackendGary Kramlich, RR 4536
- Purple: remove unused dependency on sqlite3Gary Kramlich, RR 4537
- Pidgin: Create a manager for soundsGary Kramlich, RR 4535
- Wincred: Consistently name wincredGary Kramlich, RR 4538
- Pidgin: Add a NotificationPref pageGary Kramlich, RR 4540
- Pidgin: Add settings and everything for notificationsGary Kramlich, RR 4541
- Purple: remove the purple-toast pluginGary Kramlich, RR 4542
- Pidgin: Add a keybinding to close windows when escape is pressedGary Kramlich, RR 4544
- Purple: Make Image implement Gio.Icon and Gio.LoadableIconGary Kramlich, RR 4545, PIDGIN-18161
- Pidgin: Update the contact list to use the avatar-for-display propertyGary Kramlich, RR 4546
- Pidgin: Display ConversationMember avatarsGary Kramlich, RR 4547
- Windows: Remove a bunch of old and unnecessary Windows stuffGary Kramlich, RR 4549
- Zulip: Create channels when connectingGary Kramlich, RR 4551
- Pidgin: Don't send notifications if we don't have a titleGary Kramlich, RR 4556
- Purple: Add ConversationMembers.remove_all_membersGary Kramlich, RR 4553
- Zulip: Cleanup channel creation on connectGary Kramlich, RR 4554
- Zulip: Clean up the handling of creating contactsGary Kramlich, RR 4555
- Zulip: Create existing dms on creationGary Kramlich, RR 4557
- Zulip: Implement sending messages for DMsGary Kramlich, RR 4559
- Zulip: Add some constants for message typesGary Kramlich, RR 4560
- Zulip: Add support for deserializing display-recipientsGary Kramlich, RR 4561
- Purple: Fix a memory leak in the ContactManagerGary Kramlich, RR 4568
- Zulip: Properly implement sending for dms and group dmsGary Kramlich, RR 4562
- Purple: Add some missing properties to ConversationManagerSeagullBackendGary Kramlich, RR 4569
- Purple: Stop using the glib aliases for intrinsic typesGary Kramlich, RR 4570
- Pidgin: Stop using the glib aliases for intrinsic typesGary Kramlich, RR 4571
- Protocols: Stop using the glib aliases for intrinsic typesGary Kramlich, RR 4572
- Purple: Add a request_page async pair to UiGary Kramlich, RR 4573
- Purple: Add subtitle and title properties to RequestPageGary Kramlich, RR 4586
- Demo: Migrate the request fields action to Purple.Ui.request_page_asyncGary Kramlich, RR 4587
- Purple: Notify the n-items property when we shouldGary Kramlich, RR 4599, PIDGIN-18105
- Pidgin: Create a dialog for interacting with the schedulerGary Kramlich, RR 4600, PIDGIN-18105
- Purple: Add RequestFieldQRCodeGary Kramlich, RR 4603, PIDGIN-18163
- Demo: Add a QR Code to the request fields actionGary Kramlich, RR 4604, PIDGIN-18165
- Zulip: add support of receiving dm messagesGary Kramlich, RR 4563
- Zulip: Add support for receiving typing notificationsGary Kramlich, RR 4564
- Zulip: Add support for sending typing notificationsGary Kramlich, RR 4565
- Purple: Moved G_BEGIN_DECLS to include all PurpleProtocol declarationsCole Blakley, RR 4615
- General: Add Cole Blakley to the COPYRIGHT fileGary Kramlich, RR 4616
- Purple: Make RequestFieldImage use an ImageGary Kramlich, RR 4614, PIDGIN-18166
- Purple: Fix the location of G_BEGIN_DECLS in the request fieldsGary Kramlich, RR 4617
- Demo: gettext says we shouldn't translate email addressesGary Kramlich, RR 4625
- Purple: add an alt-text property to RequestFieldQRCodeGary Kramlich, RR 4621
- Purple: Fix the location of some G_BEGIN_DECLSGary Kramlich, RR 4618
- Pidgin: Fix the location of some G_BEGIN_DECLSGary Kramlich, RR 4619
- General: Update the convey plans to what we currently supportGary Kramlich, RR 4620
- Pidgin: Remove the old request API implementationGary Kramlich, RR 4622
- Purple: add a close signal to RequestPage and a function to call itGary Kramlich, RR 4623
- Purple: Rework RequestFieldAccount to use a list modelGary Kramlich, RR 4624
- Purple: Make Purple.RequestFieldList implement Gio.ListModelGary Kramlich, RR 4626
- Purple: Fix a memory leak in PurplePresenceManagerGary Kramlich, RR 4630
- Purple: Make RequestFieldChoice implement GListModelGary Kramlich, RR 4627, PIDGIN-18167
- Purple: Split up the resource files into separate resourcesGary Kramlich, RR 4628
- Purple: Use a composite key for all tables in the ConversationManagerSeagullBackendGary Kramlich, RR 4629
- IdleXScreenSaver: remove the dependency on GDKGary Kramlich, RR 4631
- Purple: move the idle-xscreensaver plugin to libpurpleGary Kramlich, RR 4632
- Demo: Remove support for the old request_fields apiGary Kramlich, RR 4633
- Purple: Add an alt-text property to ImageGary Kramlich, RR 4634, PIDGIN-18171
- Purple: Create a QrCode objectGary Kramlich, RR 4641
- IRCv3: depend on Ibis 0.16.0Gary Kramlich, RR 4649
- Purple: Add a vfunc to the Ui to present QR Codes to the userGary Kramlich, RR 4639
- Demo: Add an action to present a QR CodeGary Kramlich, RR 4640
- Pidgin: Implement Purple.Ui.present_qr_codeGary Kramlich, RR 4642
- Purple: Remove RequestFieldQrCodeGary Kramlich, RR 4651
- Purple: Replace Connection.connect with an async pairGary Kramlich, RR 4650
- Flatpak: add qrencode to the flatpakGary Kramlich, RR 4652
- Purple: Conversation::member-added and Conversation::member-removed signalsGary Kramlich, RR 4655
- Pidgin: Create PidginRequestPageGary Kramlich, RR 4654
- Purple: Add Conversation.create_messageGary Kramlich, RR 4656
- Flip: Add a coin flip pluginGary Kramlich, RR 4657
- Purple: Make Account.request_password_async use Ui.request_page_asyncGary Kramlich, RR 4658
- Purple: Remove the request APIGary Kramlich, RR 4659
- Purple: Remove Account:remember-passwordGary Kramlich, RR 4662
- Purple: Remove disabled pluginsGary Kramlich, RR 4660
- Pidgin: Remove disabled pluginsGary Kramlich, RR 4661
- Pidgin: remove all of the icons we are not currently usingGary Kramlich, RR 4664
- Purple: some minor documentation cleanups in the credential provider docsGary Kramlich, RR 4665
- IRCv3: Add an account setting for requiring a passwordGary Kramlich, RR 4663
- Prepare for the 2.96.0 (Alpha 2) releaseGary Kramlich, RR 4667
Thank You!
Thank you everyone for your continued support of Pidgin, it means a lot to us!
If you’re interested in contributing, you can check out our Contributing Guide to get started.
Also be sure to check out our merch store!
And if you’re feeling generous, you can learn how to donate to the project on our Donation Page.
Discuss this on our forum.