# Add rust or zig support for libpurple3

**URL:** <https://discourse.imfreedom.org/t/add-rust-or-zig-support-for-libpurple3/387>\
**Category:** Libpurple\
**Tags:** development\
**Created:** [May 21, 2026, 5:59pm UTC](https://discourse.imfreedom.org/t/add-rust-or-zig-support-for-libpurple3/387 "2026-05-21T17:59:16Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Castro](https://yyz1.discourse-cdn.com/flex007/user_avatar/discourse.imfreedom.org/castro/32/264_2.png) [@Castro](https://discourse.imfreedom.org/u/Castro)\
**Post date:** [May 21, 2026, 5:59pm UTC](https://discourse.imfreedom.org/t/add-rust-or-zig-support-for-libpurple3/387/1 "2026-05-21T17:59:16Z")

</div>

Hi everyone,

I just landing in here because I want to replace whatsapp web if a lightweight client.

Taking a look on this [MR](https://reviews.imfreedom.org/r/4603/diff/1/#index_header), I need to say, as a non C developer this sound like a lot of noise for a simple MR.

Too much boilerplate and a ton of knowledge are required just to get started.

This was something that already have been discussed?

---

<div class="post-metadata">

**Author:** ![grim](https://yyz1.discourse-cdn.com/flex007/user_avatar/discourse.imfreedom.org/grim/32/4_2.png) [@grim](https://discourse.imfreedom.org/u/grim)\
**Post date:** [May 23, 2026, 2:18am UTC](https://discourse.imfreedom.org/t/add-rust-or-zig-support-for-libpurple3/387/2 "2026-05-23T02:18:57Z")

</div>

I’m not sure what you’re asking to be discussed?

That review request is how GObjects work. It’s adding a subclass of `PurpleRequestField` to handle QR codes and allow user interfaces to determine how to handle them. This boilerplate as you called it is well known to anyone that has developed anything with the GNOME libraries.

This is done this way because libpurple not only abstracts the protocols, it also abstracts the user interfaces. You can read more about that [here](https://docs.imfreedom.org/purple3/architecture.html).

As for language bindings, the GObject system that Purple3 uses/implements has a tool called [gobject-introspection](https://gi.readthedocs.io/en/latest/) that makes language bindings a breeze, see [gtk-rs](https://gtk-rs.org/) and [zig-gobject](https://ziggit.dev/t/zig-gobject-gobject-gtk-etc-bindings-for-zig/3306).
