Pidgin 3.0 Alpha 2 2.96.0 has been released!

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 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 50
    Gary Kramlich, RR 4509
  • General: Simplify compiler warning flag setup
    Elliott Sales de Andrade, RR 4505
  • Purple: Standardize credential provider management
    Elliott Sales de Andrade, RR 4515
  • Purple: Plug a few memory leaks in some managers
    Gary Kramlich, RR 4522
  • Purple: normalize the ConversationManagerSeagullBackend resource paths
    Gary Kramlich, RR 4521
  • Purple: Update the contact manager seagull backend test to use the test ui
    Gary Kramlich, RR 4517
  • Purple: Add additional parameters to the ContactManagerBackend load vfuncs
    Gary Kramlich, RR 4519
  • Purple: Remove AccountManagerNoopBackend
    Gary Kramlich, RR 4518
  • Purple: remove BadgeManager.get_default
    Gary Kramlich, RR 4523
  • Purple: Remove the rest of the get_default methods for managers
    Gary Kramlich, RR 4524
  • Purple: Implement the people vfuncs for ContactManagerSeagullBackend
    Gary Kramlich, RR 4520, PIDGIN-17687
  • Purple: Add ConversationMember.is_account
    Gary Kramlich, RR 4527
  • Purple: Add a Conversation::new-message signal
    Gary Kramlich, RR 4528
  • Purple: Add ConversationManager::conversation-new-message signal
    Gary Kramlich, RR 4529
  • PurpleToast: Update to use the new Purple.ConversationManager::conversation-new-message signal
    Gary Kramlich, RR 4530
  • Purple: remove the notification-sound plugin
    Gary Kramlich, RR 4532
  • Pidgin: Add support for playing a sound when a message is received
    Gary Kramlich, RR 4531
  • Pidgin: Add core and ui properties to Application
    Gary Kramlich, RR 4533
  • Purple: Make PurpleCredentialProvider implement GInitable
    Elliott Sales de Andrade, RR 4516, PIDGIN-18154
  • Purple: Fix some issues with ContactManagerSeagullBackend
    Gary Kramlich, RR 4536
  • Purple: remove unused dependency on sqlite3
    Gary Kramlich, RR 4537
  • Pidgin: Create a manager for sounds
    Gary Kramlich, RR 4535
  • Wincred: Consistently name wincred
    Gary Kramlich, RR 4538
  • Pidgin: Add a NotificationPref page
    Gary Kramlich, RR 4540
  • Pidgin: Add settings and everything for notifications
    Gary Kramlich, RR 4541
  • Purple: remove the purple-toast plugin
    Gary Kramlich, RR 4542
  • Pidgin: Add a keybinding to close windows when escape is pressed
    Gary Kramlich, RR 4544
  • Purple: Make Image implement Gio.Icon and Gio.LoadableIcon
    Gary Kramlich, RR 4545, PIDGIN-18161
  • Pidgin: Update the contact list to use the avatar-for-display property
    Gary Kramlich, RR 4546
  • Pidgin: Display ConversationMember avatars
    Gary Kramlich, RR 4547
  • Windows: Remove a bunch of old and unnecessary Windows stuff
    Gary Kramlich, RR 4549
  • Zulip: Create channels when connecting
    Gary Kramlich, RR 4551
  • Pidgin: Don’t send notifications if we don’t have a title
    Gary Kramlich, RR 4556
  • Purple: Add ConversationMembers.remove_all_members
    Gary Kramlich, RR 4553
  • Zulip: Cleanup channel creation on connect
    Gary Kramlich, RR 4554
  • Zulip: Clean up the handling of creating contacts
    Gary Kramlich, RR 4555
  • Zulip: Create existing dms on creation
    Gary Kramlich, RR 4557
  • Zulip: Implement sending messages for DMs
    Gary Kramlich, RR 4559
  • Zulip: Add some constants for message types
    Gary Kramlich, RR 4560
  • Zulip: Add support for deserializing display-recipients
    Gary Kramlich, RR 4561
  • Purple: Fix a memory leak in the ContactManager
    Gary Kramlich, RR 4568
  • Zulip: Properly implement sending for dms and group dms
    Gary Kramlich, RR 4562
  • Purple: Add some missing properties to ConversationManagerSeagullBackend
    Gary Kramlich, RR 4569
  • Purple: Stop using the glib aliases for intrinsic types
    Gary Kramlich, RR 4570
  • Pidgin: Stop using the glib aliases for intrinsic types
    Gary Kramlich, RR 4571
  • Protocols: Stop using the glib aliases for intrinsic types
    Gary Kramlich, RR 4572
  • Purple: Add a request_page async pair to Ui
    Gary Kramlich, RR 4573
  • Purple: Add subtitle and title properties to RequestPage
    Gary Kramlich, RR 4586
  • Demo: Migrate the request fields action to Purple.Ui.request_page_async
    Gary Kramlich, RR 4587
  • Purple: Notify the n-items property when we should
    Gary Kramlich, RR 4599, PIDGIN-18105
  • Pidgin: Create a dialog for interacting with the scheduler
    Gary Kramlich, RR 4600, PIDGIN-18105
  • Purple: Add RequestFieldQRCode
    Gary Kramlich, RR 4603, PIDGIN-18163
  • Demo: Add a QR Code to the request fields action
    Gary Kramlich, RR 4604, PIDGIN-18165
  • Zulip: add support of receiving dm messages
    Gary Kramlich, RR 4563
  • Zulip: Add support for receiving typing notifications
    Gary Kramlich, RR 4564
  • Zulip: Add support for sending typing notifications
    Gary Kramlich, RR 4565
  • Purple: Moved G_BEGIN_DECLS to include all PurpleProtocol declarations
    Cole Blakley, RR 4615
  • General: Add Cole Blakley to the COPYRIGHT file
    Gary Kramlich, RR 4616
  • Purple: Make RequestFieldImage use an Image
    Gary Kramlich, RR 4614, PIDGIN-18166
  • Purple: Fix the location of G_BEGIN_DECLS in the request fields
    Gary Kramlich, RR 4617
  • Demo: gettext says we shouldn’t translate email addresses
    Gary Kramlich, RR 4625
  • Purple: add an alt-text property to RequestFieldQRCode
    Gary Kramlich, RR 4621
  • Purple: Fix the location of some G_BEGIN_DECLS
    Gary Kramlich, RR 4618
  • Pidgin: Fix the location of some G_BEGIN_DECLS
    Gary Kramlich, RR 4619
  • General: Update the convey plans to what we currently support
    Gary Kramlich, RR 4620
  • Pidgin: Remove the old request API implementation
    Gary Kramlich, RR 4622
  • Purple: add a close signal to RequestPage and a function to call it
    Gary Kramlich, RR 4623
  • Purple: Rework RequestFieldAccount to use a list model
    Gary Kramlich, RR 4624
  • Purple: Make Purple.RequestFieldList implement Gio.ListModel
    Gary Kramlich, RR 4626
  • Purple: Fix a memory leak in PurplePresenceManager
    Gary Kramlich, RR 4630
  • Purple: Make RequestFieldChoice implement GListModel
    Gary Kramlich, RR 4627, PIDGIN-18167
  • Purple: Split up the resource files into separate resources
    Gary Kramlich, RR 4628
  • Purple: Use a composite key for all tables in the ConversationManagerSeagullBackend
    Gary Kramlich, RR 4629
  • IdleXScreenSaver: remove the dependency on GDK
    Gary Kramlich, RR 4631
  • Purple: move the idle-xscreensaver plugin to libpurple
    Gary Kramlich, RR 4632
  • Demo: Remove support for the old request_fields api
    Gary Kramlich, RR 4633
  • Purple: Add an alt-text property to Image
    Gary Kramlich, RR 4634, PIDGIN-18171
  • Purple: Create a QrCode object
    Gary Kramlich, RR 4641
  • IRCv3: depend on Ibis 0.16.0
    Gary Kramlich, RR 4649
  • Purple: Add a vfunc to the Ui to present QR Codes to the user
    Gary Kramlich, RR 4639
  • Demo: Add an action to present a QR Code
    Gary Kramlich, RR 4640
  • Pidgin: Implement Purple.Ui.present_qr_code
    Gary Kramlich, RR 4642
  • Purple: Remove RequestFieldQrCode
    Gary Kramlich, RR 4651
  • Purple: Replace Connection.connect with an async pair
    Gary Kramlich, RR 4650
  • Flatpak: add qrencode to the flatpak
    Gary Kramlich, RR 4652
  • Purple: Conversation::member-added and Conversation::member-removed signals
    Gary Kramlich, RR 4655
  • Pidgin: Create PidginRequestPage
    Gary Kramlich, RR 4654
  • Purple: Add Conversation.create_message
    Gary Kramlich, RR 4656
  • Flip: Add a coin flip plugin
    Gary Kramlich, RR 4657
  • Purple: Make Account.request_password_async use Ui.request_page_async
    Gary Kramlich, RR 4658
  • Purple: Remove the request API
    Gary Kramlich, RR 4659
  • Purple: Remove Account:remember-password
    Gary Kramlich, RR 4662
  • Purple: Remove disabled plugins
    Gary Kramlich, RR 4660
  • Pidgin: Remove disabled plugins
    Gary Kramlich, RR 4661
  • Pidgin: remove all of the icons we are not currently using
    Gary Kramlich, RR 4664
  • Purple: some minor documentation cleanups in the credential provider docs
    Gary Kramlich, RR 4665
  • IRCv3: Add an account setting for requiring a password
    Gary Kramlich, RR 4663
  • Prepare for the 2.96.0 (Alpha 2) release
    Gary 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.

5 Likes