Nicolas Constant - DevBlog

Where I write about Sengi and other thoughts

I mostly came in the Fediverse years ago due to its openness and the fact that new software and tools could easily be leveraged by the already existing community. Even if I didn't start at first on the ActivityPub side, developing side-apps (mostly against Mastodon API) gave me some understanding of how things where working behind the hood. Especially with Sengi and its cross-instances functionalities.

Now that Sengi is getting very close to a 1.0.0 release (more on that on another post) I wanted to dig more deeply in this interesting topic.

A little pet project

Usually when starting in a new domain, I start a little Proof of Concept or a limited pet project so that I can get a little glance at it before going down the rabbit hole.

Before making Sengi I wrote some simplistic bots, including a Twitter mirroring bot that is still feeding accounts like @Fortnite, @ScumGame or @HuntShowdown.

Those little projects made me confident enough to start Sengi's development and helped to focus on advanced topics since the basics where already covered.


Yes, my first AP project will be another Twitter to ActivityPub mirroring service.

Firstly because feeding on already existing data is very convenient for developement and testing purpose, secondly because as useful a dedicated bot can be, it lacks a lot of usability (and a real AP service will help to handle this), and lastly because – in the same way I like to have all my Mastodon and Pleroma accounts in the same client – I'd like to have an easy way to follow (temporarily or not) some accounts from the birdsite.

There were some projects out there that were aiming to create such service, but some never get through when others got canceled, I had also a lot of interesting (and sometime quite stormy) exchanges and debates about those, and all this fed my reflection on how to make a service more ethical, less intrusive and as functional as it can possibly be (and for that, thanks to everyone that took the time to feed those numerous discussions).

What will be the differences?

Firstly, mirroring services pisses of people (instance's admin as end-users) because they are polluting Timelines with ghost accounts. There is also the issue about duplicating data and making it freely and publicly available.

To solve those issues and also to provide a useful service, Birdsite.LIVE will: * Only post in “Followers-Only” mode, so that your ActivityPub account will behave exactly like any other Twitter client (the data is fetched for you, and only you). And the statuses will therefore not be available publicly, so it won't be visible in timelines (no more pollution!). * Be able to provide a Twitter profile to follow by searching/browsing from your favorite instance * Provide well formatted statuses will functional mentions, images, videos, hashtags, etc (but it won't provide a proper boosted feature due to the “followers-only” constraint) * Of course, it will be FLOSS under AGPLv3 license, so that you will be able to auto-host the service if you like * A Docker image will be available and an as easy as possible install procedure will be provided (but I'm not a sysadmin, so I'll do my best here)

What's the current state then?

Pretty advanced in fact, it's not a really big project and even if I still have some work to do before a first release, here is what is already done: * User discoverability * Following/Unfollowing * Status synchronization and publication * Media attachment * Mention and hashtag parsing * CI/CD for basic build and unit testing

And what still needs to be done: * Minor bugs to solve * Some optimizations to do * Add better security and resilience * CI/CD Docker build * Install procedure * Deploy an official instance

The code is not published yet, I'd like to refine the code a bit before that; but it will be done very soon.

And after that?

Once this first pet project done, I will work on something more ambitious. But to make it the more understandable possible (since there isn't really something equivalent in the Fediverse or elsewhere), I will first write down some articles to explain my thought process and motivations.

Follow this blog by searching the URL of this post/blog in your instance to get next updates!

Little overview of why I started to develop Sengi

(this article was first published on Feb 19 on Medium, I'm just migrating it back here)


Sengi is a desktop client app for Mastodon and Pleroma that will be available for Windows, MacOS, Linux and Web-browser. It will have a strong focus on multi-accounts support.

Some background

I discovered Mastodon in early 2017, at that time, I wasn’t using Twitter and other social medias anymore, mostly by lack of time and the fact that I didn’t like that much the evolution of those platforms. I’ve never been a fan of Facebook, but for Twitter it was quite different, I created my account after I’ve followed internationals events like the Iranian Protests of 2009 via the service, I was amazed to be able to access such uncensored information directly from the field.

At that time, there was also a desktop application named TweetDeck that heavily influenced my way to consume social medias: a never-ending feed of curated information flowing in a part of my screen. It was multi-accounts and multi-feeds and looked like this:

Old TweetDeck

But I mostly used it in “single column” mode (there was even a dedicated button to automatically shrink the windows to this mode):

Old TweetDeck in single column mode

This made it very easy to work/watch video/post-process photos/etc. while keeping an eye to it.

In 2011, TweetDeck was bought by Twitter, the desktop client was killed and replaced by a WebApp (that is what we know today) and was far less functional than the desktop client at that time. And even worse, was completely useless for my usages. Combined with some time-consuming personal projects, I slowly stopped using Twitter and social medias in general. And never really came back, even if years later, TweetDeck finally brought back some of the functionalities I missed.

…and then Mastodon put a foot in the door

Without a doubt, Mastodon brought me back to social networks, I was mostly interested by the technical aspects at first, but I finally stayed, seduced by the community I met there, like in the early days of Twitter, I was discovering people again and not robots and robot-looking users yelling at each other.

Also, the fact that it was FLOSS combined to the decentralized aspect of the network was a very strong warranty that the network will be long-term resilient and not at the mercy of anyone. I saw that I could invest myself again in a social network without worrying to see functionalities taken back and APIs closed after some years. As a developer it was a relief.

The other ActivityPub projects

I found fascinating to see how much projects are evolving around ActivityPub (the protocol that Mastodon revealed). Other micro-blogging platform came along like Pleroma, Youtube-likes as Peertube, Instagram-likes as PixelFed, Medium-likes as Plume (BTW this blog will migrate to a Plume instance when it will be mature enough [June 2019 Edit: well, only fools don't change their minds. :) ]), Grooveshark-likes as Funkwhale, etc.

Also, custom Mastodon and Pleroma clients came along, as Tusky, Fedilab (Mastalab), Toot!, Amaroq, for mobile OS. There are also some desktop projects that are very promising like Whalebird.

All this made me even more interested by this Federation and I started to plan to invest my own skills in this ecosystem. That’s why I started to develop some proof-of-concept tools like Followbot, mastodon API .NET wrapper, or Twitter-to-Mastodon bridge.

So… why creating Sengi?

Since I like what I’m seeing in the Fediverse, and that I believe that it will grow over the years, I feel more and more the need of a desktop client clearly oriented toward my own usages.

Also having my own codebase will makes some experimentation I have in mind easier to test and deploy.

Of course, I guess that I’m not the only one that would like a heavy focused desktop and multi-accounts client app out there, and it will be my own tribute to the current movement.

Here is a list of the core functionalities that are behind Sengi:

Non-exclusive multi-accounts support

Since we saw in the Fediverse the creation of thematic instances, most people open accounts in multiple places like we do with good-old-flavored forums. I would like to be able to browse a hashtag from an instance X, sitting next to a list from an instance Y, and be able to interact with those two with an account from instance Z. It’s really the DNA of Sengi since it impacts all the other functionalities: you can launch a search using an account A and follow the result from account B, etc.

Multi-columns support with a focus on single-column display

I have a heavy usage of lists, hashtags, and local timelines, so I need an easy way to navigate between all those columns, especially when displaying only one column at the time. Also, I don’t want my focus to be lost because I’m looking to an account, a thread, or other operations: I want the columns to move only when needed.

Customized Content-Warnings Policies

While CW is one of the major and loved functionality of Mastodon, it’s also one of the most infuriating part of my experience with it, especially when browsing very long threads and having to click on each messages to read them. I would like to have at least a global and unique button to reveal all CWs at once. Also, since we all have our own sensibilities, I would like to be able to set custom policies so that not all topics gets CWed by default, and other kind of customization (automatically add CW on content that have the word “Z” for example, etc).

More automation awareness

I think that an account tagged as a bot should be displayed more visibly in the timeline. Also I’d like to have more insights on automation from other accounts, if you’re posting statuses from tools like Mastodon Twitter Crossposter or MOA, you might not be as active on the network (replying etc) as you look. Just to be clear, I’m not against automation since I wrote myself equivalent tools, I just want its use to be more explicit in the UI.

Statistics free

I don’t like “social metrics”. Does someone with a lot of followers should change your way to behave with him? Or do you follow only people with thousands of statuses? Do you choose to boost or fav a status based on its boost/fav history? No, because it’s irrelevant. But those metrics makes people changes their behavior: they can try to have a lot of followers to appear “popular”, they can try to post certain kind of content to get engagement, etc. That’s why Sengi will hide most metrics by default to prevent those influences.

It was planned, but I didn't take the time before: migrating from Medium to an ActivityPub publishing platform.

I was mainly publishing about Sengi there, but I have also some other ideas that I would like to write about and make them grow.

Welcome to this new place. :)