Nicolas Constant - DevBlog

Where I write about Sengi and other thoughts

After a bit more than two years of development, Sengi is close to a 1.0.0 release. Of course, this is more of a symbolic milestone than a revolutionary release, it is a way of saying “the software is mature enough to be considered plain and useful in its current state”.

I have to say that I made Sengi in the first place because I wanted a desktop client that would fulfil my needs, and it’s been the case since some time now, I enjoy browsing the Fediverse with this app and I’m happy others do too.

The road to 1.0.0

Sengi is my first noticeable FLOSS project, and those last months of development has been incredibly fun and interesting for me. I have had a lot of interesting interactions with users, non-users, developers, etc.

I have made serious and foolish things, tried and tested some new paradigms on the UX and the architectural sides. I might have failed on some of them (I’m still not really convinced on the Redux paradigm on an Angular’s app state-management system), there are some parts of the code that surely would benefit from a revamp in order to unbloat a bit the whole thing, but globally I have to say that I’m happy with the result.

The more unsettling thing for me was to discover Sengi been quoted in the comments of an article that was comparing Snaps/AppImages/Flatpak performances. It was completely unforeseen and fun to see.

I am making proprietary software as a living and I have to admit FLOSS software has this little particular sparkling capability of surprising you in the way it can be used, reused, modified, and reinterpreted. And I absolutely love it.

So, what’s next?

I will still work time to time on Sengi, at least to correct bugs and keep the code alive by maintaining it. I might also add some functionalities depending on the evolution of Mastodon, Pleroma and other tools supporting Mastodon API (like Pixelfed).

But it also won’t be my “primary” side-project anymore, even if I have to say that the most work I’ve done on Sengi was in 2019, since then it was already a lot less active, even if I shipped some interesting functionalities this year.

By the way, I specially choose this technological stack (Angular/Electron) with that in mind: I wanted something extremely easy to jump-in time to time and very efficient/timesaving to ship new functionalities. And I do not regret this choice in any way. I am convinced making Sengi on another stack (on more native desktop tech for example) would have taken me way more time and efforts.

What will you be working on then?

I am not leaving the Fediverse space, far from it even. I now want to develop dedicated ActivityPub software, I think that I have more value by realizing some ideas I have than only focusing on Sengi, even if it might impact Sengi as well: since it remain my principal way to browse the Fediverse, it is obvious I will give a special attention to integrate my future AP software properly to Sengi as well.

First as already stated here, I will work on releasing Birdsite.LIVE, my first ActivityPub proof-of-concept pet-project. That is basically a Twitter to Fediverse ethical and private mirroring software, if you want more information please read my dedicated post.

Of course, this will only be the beginning of something else, a baby step before the big one, I will develop more on it on some future posts so stay tuned if you are interested.

What if Sengi does not have a functionality I would like or need?

Please open an issue on Github. As stated, I will still throw some hours on this project time to time.

And if you are a developer, feel free to reach me to have some support/insights if you are willing to contribute to the project. It is a Free Libre and Open Source Software after all.

Any insight of what might come next in Sengi?

Yes! I am a Pleroma user as well as a Mastodon one, and I am not happy with the way Sengi isn’t currently providing bookmaking for Pleroma users (due to API versioning issues). There are also some Mastodon’s forks dedicated features I might try to tackle one day. And of course, anything that will annoy me as a user will obviously be fixed quite quickly.

I also should migrate my Angular version to a more modern one, but on my tests it seams to break some stuff, so I’ll take my time on that as I really don’t want to have a broken release for the 1.0.0.

Thanks for reading me and for using (and hopefully, enjoying) Sengi!

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. :)