# Pidgin 3.0 Alpha 2 2.96.0 has been released!

**URL:** https://discourse.imfreedom.org/t/pidgin-3-0-alpha-2-2-96-0-has-been-released/398
**Category:** Pidgin
**Tags:** release
**Created:** [July 1, 2026, 3:41am UTC](https://discourse.imfreedom.org/t/pidgin-3-0-alpha-2-2-96-0-has-been-released/398 "2026-07-01T03:41:52Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![grim](https://discourse.imfreedom.org/user_avatar/discourse.imfreedom.org/grim/32/4_2.png) [@grim](https://discourse.imfreedom.org/u/grim)
#### Post date: [July 1, 2026, 3:41am UTC](https://discourse.imfreedom.org/t/pidgin-3-0-alpha-2-2-96-0-has-been-released/398/1 "2026-07-01T03:41:52Z")

</div>

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](https://discourse.imfreedom.org/t/pidgin-3-development-phases/369).

The release can be found on [SourceForge](https://sourceforge.net/projects/pidgin/files/Pidgin3/2.96.0/) and should show up on [Flathub Beta](https://docs.flathub.org/docs/for-users/installation) 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](https://issues.imfreedom.org/reports/burndown/165-5) 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.

 ![notification preferences page](https://discourse.imfreedom.org/uploads/default/original/1X/1b813653919d0c3f46ffc4154a023cf3b3faa449.png)

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

 ![conversation member avatars being displayed](https://discourse.imfreedom.org/uploads/default/original/1X/6aedbcdf7d32d097d7d57b3b359d13fab0b37eb6.png)

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

 ![scheduler user interface](https://discourse.imfreedom.org/uploads/default/original/1X/5cf82f2b2c054c355c3ee136d76b712aa618e344.png)

## Zulip Direct Messages

We didn’t capture a screenshot, but direct messages and group direct messages are now implemented in [Zulip](https://zulip.com/).

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

 ![an example qr code that just contains text](https://discourse.imfreedom.org/uploads/default/original/1X/e1310f6a800bce2a285038bd480c442022d0a62e.png)

 ![an example qr code that contains a uri](https://discourse.imfreedom.org/uploads/default/original/1X/648c604794635be260a277d4e0772a7fbc3b70ab.png)

# 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](https://docs.imfreedom.org/contributors-guide/) to get started.

Also be sure to check out our [merch store](https://imfreedom.myspreadshop.com/)!

And if you’re feeling generous, you can learn how to donate to the project on our [Donation Page](https://imfreedom.org/donate/).

---

<div class="post-metadata">

### Author: ![grim](https://discourse.imfreedom.org/user_avatar/discourse.imfreedom.org/grim/32/4_2.png) [@grim](https://discourse.imfreedom.org/u/grim)
#### Post date: [July 1, 2026, 3:43am UTC](https://discourse.imfreedom.org/t/pidgin-3-0-alpha-2-2-96-0-has-been-released/398/2 "2026-07-01T03:43:30Z")

</div>


