Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

carbons 0.2.3

Build status codecov Language grade: C/C++

Experimental XEP-0280: Message Carbons (v0.13.2) plugin for libpurple (Pidgin, Finch, etc.).

It enables you to have a consistent view of both sent and received messages between all devices which are online at the same time.


You can find compiled versions of this plugin for both Linux and Windows on the GitHub releases page.

To get the latest build for both operating systems you can head over to the artifacts page of this project's current build on AppVeyor.


On startup, it sends a feature discovery request to the server and automatically enables message carbons if the server lists it among its supported features.

If something is not working right, consult the debug window.

Building it yourself


  1. Install the dependencies (libpurple-dev, libglib2.0-dev, libxml2-dev)
  2. git clone
  3. cd carbons
  4. make
  5. A final make install should copy the plugin into your libpurple plugin dir, or make install-home to copy it into ~/.purple/plugins.


Install dependencies using Homebrew.

brew install glib libxml2

Get a copy of the libpurple soure (from Pidgin), and prepare it so we can use it during the build.

hg clone pidgin
cd pidgin
hg checkout v2.10.12
./configure $(./configure --help | grep -i -- --disable | awk '{ print $1 }')
make LIBPURPLE_CFLAGS=-I${PWD}/pidgin/libpurple LIBPURPLE_LDFLAGS=/Applications/ LJABBER=


You can make use of the Makefile.mingw by EionRobb. For this, you have to set up a build environment as described in


Note that this only synchronizes messages of devices that are online at the same time - for history synchronization, MAM is needed. There is currently no libpurple plugin for this.