Pidgin 3.0 Alpha 1 2.95.0 has been released!

We are ecstatic to announce that we have released the very first alpha version of Pidgin 3.0!!! This release has an official version number of 2.95.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.

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.

About

This Alpha 1 release is a huge milestone release where we feel that the APIs for protocols have become stable enough where third party protocol developers should be able to start working on their protocols without having to worry about major changes. Of course, we aren’t guaranteeing that the APIs won’t change, but we’re going to do our best to make sure that rewrites won’t be necessary.

Documentation for the description change from experimental to alpha can be found here.

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 2 is scheduled for 2026-06-30 and will have a version number of 2.96.0.

We have a bunch of tickets entered for Alpha 2, and you can keep an eye on the Burndown Chart for Alpha 2 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. We didn’t get through quite everything I wanted to, but still a lot of really good progres!!

New Account Settings API

The old AccountOption API has been replaced by the new AccountSettings API. This new API is fully bindable which helps us towards our goal of being making it possible to write a protocol plugin in bound language like Python or Lua.

This also finally let us get rid of the required username for each account which now lets protocols like IRC use their actually nomenclature for the account settings. In the screen shot in the New Account Editor entry below you can use that the user enters a nick which is the correct term for IRC and will no long be confused with the username setting that IRC also has.

New Account Editor

The new settings API meant we had to overhaul the account editor as well. The new account editor moves all account settings into a single list where the advanced settings can be shown inline with everything else.

Protocols can control the order using a weight property and can implement Purple.Protocol.validate_account to make sure the settings appear to be usable before a connection attempt is made.

Zulip Protocol

We decided in early February that we were going to add Zulip as our next in-tree protocol plugin. This decision was made for a number of reasons like it’s Open Source, encourages third party clients, and has a straight forward REST API with HTTP long polling for events.

I was hoping to have at least direct messages working for this release, but we just ran out of time. However we are nearly to the point of getting that working so it should happen early in the next development cycle.

Developer Mode

We added a developer mode option so that user interfaces and other things can hide stuff behind it. For example, the unfinished protocols are not visible unless you turn this setting on.

Removed libxml2 Dependency

We have been slowly replacing all of our old XML configuration files with Sqlite3 implementations and during this cycle we actually got rid of the last of them. Because of this we were able to remove the libxml2 dependency as well.

ChangeLog

As always the complete list of every change in this release is below.

Flatpak

  • Fix the extension points so they actually work (RR 4353) (Gary Kramlich)

libpurple

  • Add Purple.Conversation.Equal (RR 4313) (Gary Kramlich)
  • Finally add purple_conversation_new (RR 4314) (Gary Kramlich)
  • Make the conversation type part of the composite key for the conversation manager seagull backend (RR 4315) (Gary Kramlich)
  • Make Purple.ConversationManager use Purple.Conversation.equal (RR 4316) (Gary Kramlich)
  • Add Purple.ConversationManager.find (RR 4317) (Gary Kramlich)
  • Add a replying-to property to Purple.Message (RR 4318) (Gary Kramlich)
  • Add a sid property to Purple.Conversation (RR 4319) (Gary Kramlich)
  • Add properties to highlight and color messages (RR 4320) (Gary Kramlich)
  • Add a color property to Purple.Conversation (RR 4321) (Gary Kramlich)
  • Add icon and title properties to Purple.Message (RR 4322) (Gary Kramlich)
  • Add virtual functions for people to Purple.ConversationManagerBackend (RR 4324) (Gary Kramlich)
  • Add some basic high level architecture documentation (PIDGIN-17901) (RR 4333) (Gary Kramlich)
  • Update Purple.Account to use Purple.AccountSettings (RR 4158) (Gary Kramlich)
  • Remove some remnants of the sqlite history adapter (RR 4336) (Gary Kramlich)
  • Use strict tables for the Seagull presence manager backend (RR 4335) (Gary Kramlich)
  • Make Purple.ContactManager use a Purple.ContactManagerBackend (RR 4323) (Gary Kramlich)
  • Remove Account:presence as it was redundant (RR 4342) (Gary Kramlich)
  • Add a developer-mode property to AccountSetting (RR 4339) (Gary Kramlich)
  • Add helpers for getting and setting active list settings (RR 4340) (Gary Kramlich)
  • Update a few things in the migrating docs (RR 4348) (Gary Kramlich)
  • Bump seagull to 0.7.0 (RR 4349) (Gary Kramlich)
  • Update the error column in the Seagull backend for the conversation manager (RR 4352) (Gary Kramlich)
  • Step 1 of the Seagull Contact Manager Backend (RR 4334) (Gary Kramlich)
  • Create Account.delete as a replacement for purple_accounts_delete (RR 4355) (Gary Kramlich)
  • Add Protocol.delete_account (RR 4356) (Gary Kramlich)
  • Remove the old account serialization (RR 4357) (Gary Kramlich)
  • Remove xmlnode (RR 4358) (Gary Kramlich)
  • Make the credential manager use account names instead of usernames (RR 4364) (Gary Kramlich)
  • Make sure we store the presence of contacts as well (RR 4354) (Gary Kramlich)
  • Remove the current password stuff (RR 4361) (Gary Kramlich)
  • Add Protocol.validate_account (RR 4365) (Gary Kramlich)
  • Remove the account option API (RR 4367) (Gary Kramlich)
  • Remove the user splits API (RR 4368) (Gary Kramlich)
  • Remove the username property from Account (RR 4370) (Gary Kramlich)
  • Remove some dead assignments that scanbuild found (RR 4371) (Gary Kramlich)
  • Add a created-time property to ContactInfo (RR 4385) (Gary Kramlich)
  • Remove the notification from accounts (RR 4388) (Gary Kramlich)
  • Update the AccountManager to handle notifications for accounts (RR 4389) (Gary Kramlich)
  • Make the label of AccountSetting optional (RR 4390) (Gary Kramlich)
  • When testing accept any value for AccountSettingStringList.set_active_item (RR 4391) (Gary Kramlich)
  • Add signals to Account to propagate changes in settings and contact info (RR 4394) (Gary Kramlich)
  • Add some additional API to Badges (PIDGIN-18143) (RR 4396) (Gary Kramlich)
  • An account manager backend using Seagull (RR 4392) (Gary Kramlich)
  • Clean up CredentialProvider and add API to handling locking (PIDGIN-18153) (RR 4397) (Gary Kramlich)
  • Add an settings-updated signal to AccountSettings (RR 4398) (Gary Kramlich)
  • Add an accounts-loaded signal to Purple.AccountManager (RR 4399) (Gary Kramlich)
  • Fix the loading of account settings (RR 4401) (Gary Kramlich)
  • Make start up deterministic (RR 4402) (Gary Kramlich)
  • Add virtual functions to the Ui class for getting versions (RR 4406) (Gary Kramlich)
  • Update Purple.PresenceManager to use Purple.PresenceManagerBackend (RR 4407) (Gary Kramlich)
  • Replace Account.request_password with an async pair (RR 4409) (Gary Kramlich)
  • Add a get_scheduler_backend vfunc to Ui (RR 4412) (Gary Kramlich)
  • Remove Ui.get_presence_manager (RR 4413) (Gary Kramlich)
  • Remove the test ui from the conversation tests (RR 4414) (Gary Kramlich)
  • Update Ui vfuncs to set errors when not implemented (RR 4415) (Gary Kramlich)
  • Add Ui.get_conversation_manager_backend (RR 4416) (Gary Kramlich)
  • Remove Ui.get_conversation_manager (RR 4418) (Gary Kramlich)
  • Reorganize the Ui (RR 4420) (Gary Kramlich)
  • Update ContactManager.startup to the current standard (RR 4432) (Gary Kramlich)
  • Standardize the startup method for the credential manager (RR 4433) (Gary Kramlich)
  • Make the core an object (RR 4438) (Gary Kramlich)
  • rename core.[ch] to purplecore.[ch] (RR 4439) (Gary Kramlich)
  • Update the scheduler to the standard startup implementation (RR 4440) (Gary Kramlich)
  • Update the notification manager to the standard startup implementation (RR 4441) (Gary Kramlich)
  • Update the protocol manager to the standard startup implementation (RR 4442) (Gary Kramlich)
  • Update the whiteboard manager to the standard startup implementation (RR 4443) (Gary Kramlich)
  • Update the idle manager to the standard startup implementation (RR 4444) (Gary Kramlich)
  • Update the command manager to the standard startup implementation (RR 4445) (Gary Kramlich)
  • Clean up some unused headers in core.c (RR 4446) (Gary Kramlich)
  • Update the badge manager to the standard startup implementation (RR 4447) (Gary Kramlich)
  • Update the file transfer manager to the standard startup implementation (RR 4448) (Gary Kramlich)
  • Move a few of the manager ownerships to the core (RR 4449) (Gary Kramlich)
  • Remove the old account option API (RR 4452) (Gary Kramlich)
  • Mark everything as since 3.0 (RR 4453) (Gary Kramlich)
  • Remove the last remnants of the prefs API (RR 4455) (Gary Kramlich)
  • Replace the usage of the debug api with the glib versions (RR 4456) (Gary Kramlich)
  • Remove glibcompat.h (RR 4461) (Gary Kramlich)
  • Remove the rest of the purple_debug api and uses (RR 4463) (Gary Kramlich)
  • Allow null account-id in the contact manager seagull backend (RR 4464) (Gary Kramlich)
  • Don’t change connection state when Account:enabled changes (RR 4465) (Gary Kramlich)
  • Clean up util and its unit tests (RR 4466) (Gary Kramlich)
  • Give the core ownership of all the managers (RR 4467) (Gary Kramlich)
  • Use GPlugin.Manager to track plugin states (RR 4468) (Gary Kramlich)
  • Require birb 0.7.1 (RR 4471) (Gary Kramlich)
  • Require seagull 0.8.1 (RR 4472) (Gary Kramlich)
  • Add the use-count to the the PresenceManagerSeagullBackend (RR 4473) (Gary Kramlich)
  • Remove CredentialManager.get_default (RR 4491) (Gary Kramlich)
  • Remove NotificationManager.get_default (RR 4493) (Gary Kramlich)
  • Remove AccountManager.get_default (RR 4494) (Gary Kramlich)
  • Remove ContactManager.get_default (RR 4495) (Gary Kramlich)
  • Remove ConversationManager.get_default (RR 4496) (Gary Kramlich)
  • Remove ProtocolManager.get_default (RR 4497) (Gary Kramlich)

Pidgin

  • Rework the account editor to use account settings (RR 4359) (Gary Kramlich)
  • Update the credits as Hylke Bons is no longer retired (RR 4373) (Gary Kramlich)
  • Use the account name in the manager (RR 4378) (Gary Kramlich)
  • A few clean ups in the Account Editor (RR 4395) (Gary Kramlich)
  • Use the Seagull AccountManager backend (RR 4393) (Gary Kramlich)
  • Use the Purple.AccountManager::accounts-loaded signal to show the account window (RR 4400) (Gary Kramlich)
  • Update the ui to implement get_conversation_manager_backend (RR 4417) (Gary Kramlich)
  • Implement Ui.get_contact_manager_backend (RR 4419) (Gary Kramlich)
  • Fix Adwaita 1.8 deprecations (RR 4422) (Markus Fischer)
  • Use new icon as application icon (RR 4460) (Markus Fischer)
  • Mark everything as since 3.0 (RR 4454) (Gary Kramlich)
  • Replace the usage of the purple debug api with the glib versions (RR 4457) (Gary Kramlich)
  • Fix problem that conversations cannot be closed (RR 4469) (Markus Fischer)
  • Fix a warning when failing to leave a conversation (RR 4474) (Elliott Sales de Andrade)

Windows

  • WinCred: User the account name instead of the username (RR 4366) (Gary Kramlich)
  • WinCred: Use the glib log functions instead of the debug API (RR 4459) (Gary Kramlich)
  • Remove a bunch of unused and unnecessary stuff from the Windows build (RR 4458) (Gary Kramlich)
  • Clean up a bunch of stuff related to resources including the icon (RR 4462) (Gary Kramlich)

Bonjour

  • Port to AccountSettings (RR 4338) (Gary Kramlich)

Demo

  • Port the demo protocol plugin to account settings (RR 4362) (Gary Kramlich)

IRCv3

  • Remove the user_splits and account_options virtual functions (RR 4337) (Gary Kramlich)
  • Use account settings (RR 4360) (Gary Kramlich)
  • Implement Protocol.validate_account (RR 4369) (Gary Kramlich)
  • Migrate to Purple.AccountSettings (RR 4451) (Gary Kramlich)
  • Fix settings type of plaintext SASL auth (RR 4470) (Markus Fischer)

XMPP

  • Port to AccountSettings (RR 4341) (Gary Kramlich)
  • Use the JID account setting instead of the username (RR 4363) (Gary Kramlich)

Zulip

  • Create the skeleton plugin and protocol (RR 4374) (Gary Kramlich)
  • Add a skeleton of the REST client (RR 4375) (Gary Kramlich)
  • Work out more of the client (RR 4376) (Gary Kramlich)
  • Add a stubbed out connection class (RR 4377) (Gary Kramlich)
  • Handle password authentication (RR 4410) (Gary Kramlich)
  • Use Purple.Ui.get_user_agent for the user agent string (RR 4421) (Gary Kramlich)
  • Register the event queue (RR 4423) (Gary Kramlich)
  • Fix some memory leaks (RR 4429) (Gary Kramlich)
  • Use birb_str_wipe to clear passwords when freeing them (RR 4430) (Gary Kramlich)
  • Fix the version requirement for json-glib (RR 4476) (Gary Kramlich)
  • Manage the event queue requests (RR 4477) (Gary Kramlich)
  • Rename purplezuliptypes.[ch] to purplezulipresponses.[ch] (RR 4478) (Gary Kramlich)
  • Add support for receiving and deserializing messages (RR 4479) (Gary Kramlich)
  • Fix disconnecting (RR 4480) (Gary Kramlich)
  • Add the account as a property to the client (RR 4485) (Gary Kramlich)
  • Fix the header guard in purplezulipresponses.h (RR 4487) (Gary Kramlich)
  • Make sure all API methods are marked internal (RR 4490) (Gary Kramlich)
  • Parse the intrinsic types from the registration response (RR 4486) (Gary Kramlich)
  • Add contacts to the contact manager (RR 4488) (Gary Kramlich)
  • Move message from events to types (RR 4489) (Gary Kramlich)

Additional Updates

Additionally, the Twitch.tv protocol plugin (purple-spasm) has become quite usable. It is being developed outside of the main tree as it is a proprietary protocol. There is of course a lot to do yet, but if you want to give it a try, you can find installation instructions in it’s README.md.

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.

2 Likes

Yay! :partying_face: That’s a nice milestone.

1 Like