I’m developing a new Fediverse client application for desktop

h3poteto
4 min readJan 15, 2023

--

Once, I posted an article about the Mastodon client application:

Whalebird is a single-column Fediverse client application. It can display only one timeline on the screen.

Recently, I bought a big monitor (it is very good for programming), and after that, I’m not satisfied with Whalebird. Because I want to see more information, statuses, and timelines on the screen. So, I’m creating a new multi-column Fediverse client app.

Fedistar

The new app name is “Fedistar”. Before creating the new app, I considered how about implementing multi-column on Whalebird. However,

  1. I want to clean up the current code.
  2. I don’t want to write Vue.js anymore.
  3. In the first place, the architecture could be better for multi-column.

So, I’m creating a new client app.

Here is a screenshot.

Fedistar

And the repository is

This app has some characteristic features:

  1. You can add servers without authorization. In this case, you can see only Public and Local timelines, and you can’t reply, reblog, and favourite. You can only see the timeline.
  2. You can choose which account to post from.
  3. It supports Mastodon and Pleroma, at the moment. I’m wondering about Misskey, Friendica, and Pixelfed.
  4. And some other features typical of multi-column clients.

I’ve created issues that I want to implement before version 1.0.0. Except for these issues, I’m planning

  • When you react to status, you can choose which account to do from…… Is it possible, I’m not sure.
  • Read notifications count from markers.
  • Jump to the notification when you receive a notification.
  • Icon

Development

I used Electron and Vue.js in Whalebird, but now I’m using tauri and Next.js. So, probably it is smaller and faster than Whalebird. I’ve never measured that memory and CPU usage, so I can’t say for sure.

Then tauri executes the main process with Rust, so I created the Rust version of megalodon which is a client library for Mastodon, Pleroma, and Misskey for JavaScript. I spent a month working on this……

Of course, I also had the option to call all Fediverse API requests from the frontend. However, I didn’t choose it, because it is easier and performs better to execute WebSocket streaming in the main process. So, I’m using megalodon-rs in the main process and megalodon in the frontend.

Regarding the frontend, I’m using Next.js. There are two reasons for this

  1. I don’t want to write Vue.js anymore.
  2. React.js has a richer library and ecosystem.

For example, Virtual Scroll is important in SNS timelines, but it is also very important to maintain the scroll position simultaneously. Few libraries provide this in React.js, but there is no library in Vue.js.

Under development

This software is under development, so there is no stable version yet. I will implement breaking changes before 1.0.0, so if you want to develop this, please install it. That’s why it is not distributed in stores, for example, Mac App Store, and Snap Store. It will be stable when it reaches version 1.0.0, and at that time I will publish it in stores.

I’m not soliciting bug reports, because this software still has many unimplemented features. If you find an unexpected behavior, it is not a bug, it’s just unimplemented. Therefore, pull requests are welcome.

Questions and Answers

Not satisfied with Sengi or TheDesk?

No, not satisfied. I’d rather develop a client than just do Fediverse. In the first place, I started Fediverse because I couldn’t create a client on Twitter.

Are there any differences between them?

Who knows? It is not important for me, because the app is free and I’m not looking for sales. So there is no need to differentiate and spread this app.

What are you going to do with Whalebird?

Updates will be less frequent. However, I will continue to develop as long as you need single-column clients.

When is the stable version released?

I don’t know.

Android or iOS version?

No, I have no plan. In mobile, I think that multi-column is not suitable.

--

--

h3poteto

I am a software engineer working in Japan. Sometimes I use Elixir, Golang, Ruby, TypeScript, Python, Swift and others.