Introducing Borogove, the new Snikket SDK

Posted by The Snikket Team on November 10 2025

Some time ago, we teased you with our plans for a cross-platform “Snikket SDK” (Software Development Kit) which would be used to build a new generation of Snikket apps. Particularly a much-requested web app for Snikket, so folks can chat directly in the web browser without installing anything. We also intend to replace our current iOS app with an SDK-based app when that becomes feasible.

The SDK is not aimed directly at Snikket users (but if you have development skills, why not?!). It is primarily for the people developing Snikket apps, though it will bring with it many benefits for the project and its users.

Why an SDK?

We currently have two official apps, for Android and iOS. Both of these are entirely separate codebases, which means that, while we have tried to align them as much as we can, there are still significant disparities between the two platforms, in terms of features, bugs and the general user experience. Snikket has consistency as one of its main goals, so this is something we consider important to improve.

On top of this situation, people frequently request the ability to chat using their Snikket account via their web browser. However, this would add a third codebase for us to maintain, and the existing problems would be amplified. And we haven’t even talked about a desktop app yet!

It’s not sustainable to maintain so many completely independent apps of the quality and consistency the project is aiming for. With currently only one person working full-time directly on Snikket, simplification would be especially beneficial.

Developer experience

One of the reasons that Snikket only has one developer is that it’s hard to find developers! The majority of developers we have worked with are familiar with front-end work, and often have experience with integrating with basic HTTP APIs. But it’s much harder to find generalists who are also willing to work with other technologies that Snikket uses, such as XMPP. Similarly, it’s rare to find developers interested in chat protocols who are also front-end user interface developers.

While it’s undoubtedly not hard to build an XMPP-based chat app in a weekend, building a comprehensive modern chat app using any protocol and any language with all the modern features, security, and reliability that people expect is understandably a daunting task.

With the SDK, we aim to “divide and conquer” - enclose all the protocol parts in the SDK, and leave the least amount of complexity possible so that front-end developers can do their thing with the UI without unnecessary friction.

XMPP libraries are already available for most platforms to perform a lot of the work for developers. However, they generally still assume and require a level of familiarity with XMPP, and require the developer to make certain higher-level architectural decisions when building an app. This includes things like message synchronization strategies, processing push notifications, audio/video calls, and so on.

Our SDK is not yet another XMPP library. In fact, it actually uses existing XMPP libraries itself. What the SDK provides is the middle “glue” layer between the user interface and the messaging protocol layer. The SDK itself hides every detail of XMPP from the app developer.

While most XMPP libraries try to remain flexible, to allow developers to build and design their apps however they want, the goal of our SDK is to make all the choices for them. Provide just one obvious way to do things - the Snikket way.

This works for us precisely because of Snikket’s goal for one consistent user experience across all platforms. It wouldn’t necessarily be a good idea to use the SDK to build an IoT app, or any of the other use cases XMPP can be applied to (though this hasn’t stopped people building cool things with the SDK already!).

Developer efficiency

While we knew that writing this SDK from scratch would be a significant effort, much of it is effort that we would have had to spend anyway on writing a new Snikket app for, say, the web. All we had to do was make sure that the work we did for that app could be re-used across multiple platforms.

For this we adopted a relatively niche but well-established language called Haxe.

Fairly well-known in certain domains, such as multi-platform mobile game development, Haxe is a neat little language with built-in capabilities for cross-compiling to multiple output languages. This means that we can write our SDK code once in Haxe, and then compile it to Javascript for the web, but also to native libraries for practically any platform. In line with our goals to build a web app and iOS app for Snikket, we currently build JS and Swift versions of the SDK.

Now, when adding a new feature, the bulk of our work will be in the SDK, followed by the supporting UI code for each of our apps (which can be undertaken by anyone familiar with those platforms - no special XMPP expertise needed).

Current status

The SDK project already covers most important features, from messaging to audio/video calls. Although we aren’t ready to announce any new Snikket apps yet, we’re getting closer with every commit. There are several projects already based on the SDK:

The Cheogram apps were developed by singpolyma who has also been the driving force behind getting the SDK towards stability and feature completion.

There are a few things we’re still working on in the SDK. The big one for Snikket is OMEMO. We have 1-to-1 just working (not yet included in any of the above apps). OMEMO in group chats is next, and top of the priority list.

Finally, in recognition that the SDK is already growing beyond powering just Snikket apps, we have spun it off as a semi-independent project with its own website and project name - Borogove SDK!

Next steps

Once the SDK has feature parity with the current apps, we’ll be working on the user interface, starting with the web app. Keep an eye out for preview builds of Snikket apps in the new year!

If you’re a developer and any of this sounds like stuff you would be keen to help out with, get in touch!