# Whalebird desktop: an Electron Fediverse client with a Slack style timeline

> Whalebird desktop is a GPL-3.0 Electron client that talks to Mastodon, Pleroma, Friendica, Firefish, Gotosocial, Pixelfed and three unofficial backends. It ships through the Mac App Store, the Windows Store, Homebrew, snap and the AUR, and the maintainer openly discourages the unsigned Windows binaries.

**h3poteto/whalebird-desktop** — Single-column Fediverse client for desktop

- Repository: https://github.com/h3poteto/whalebird-desktop
- Website: https://whalebird.social
- Stars: 932 · Forks: 83
- Language: TypeScript
- License: GPL-3.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/h3poteto-whalebird-desktop

## A desktop client that keeps several Fediverse accounts in one window

Whalebird is a Fediverse client for desktop, and the repository describes it in one line: a client app for desktop with an interface like Slack. The primary language is TypeScript and the runtime is Electron, with the package manifest naming the app "Electron based Fediverse client application". The audience is a person who already lives in the Fediverse and wants a native-feeling window instead of a browser tab, and who reads several timelines at once rather than one server at a time. The feature list is short and specific: the Slack like interface, desktop notifications, streaming, and management of multiple accounts. Streaming matters more than it sounds. Rather than polling, the client stays connected so that new posts arrive without a refresh, which is the behaviour people coming from Mastodon's own web interface usually miss first. Multiple account handling means switching identity inside the same window instead of juggling separate browsers or private sessions.

## Nine backends, three of them maintained outside the project

The supported server list is the heart of the project, and it is more interesting than the feature bullets suggest. Mastodon, Pleroma, Friendica, Firefish, Gotosocial and Pixelfed are all marked as supported in the README. Three more are listed and marked unofficial: Akkoma, Hometown and Iceshrimp. That distinction is meaningful for an engineer reading the source. The API client dependency in package.json is megalodon at version 10.3.0, and megalodon is a library written for Mastodon's API, so the practical reality is that Whalebird speaks Mastodon's dialect and adapts it, with the compatibility for the other backends achieved by absorbing their differences. Pixelfed is the interesting case in that list because it is a photo-first server that implements only part of the wider protocol surface, so support there means a subset of behaviour. The unofficial label on Akkoma, Hometown and Iceshrimp should be read as a signal about how thoroughly those backends are exercised.

## Nextron wraps a Next.js renderer, which is why the dev server sits on port 9080

The repository layout explains the build. There is a main directory and a renderer directory, plus electron-builder.yml and electron-builder.mas.yml for packaging, and a plist folder for macOS. The package.json scripts show the toolchain plainly: the dev server is nextron, the build is nextron build, and there is a separate mas target built with the config file electron-builder.mas.yml for the Mac App Store variant. The web scripts are revealing too, since dev:web, build:web and start:web all set the environment variable NEXT_PUBLIC_CLIENT_ENV to browser before running next in the renderer folder. In other words, the renderer is a Next.js application that can be hosted as a web app with a browser environment flag, and Electron wraps it for the desktop case. The typecheck script runs tsc separately against the renderer and the main process, which confirms the split between a TypeScript renderer and an Electron main process. Linting is scoped to the renderer, and a thirdparty script regenerates renderer/thirdparty.json with license-checker-evergreen.

## Local storage, sanitised HTML and a virtualised timeline in the dependency list

A look at the runtime dependencies says a lot about how the client works. dexie at 4.0.0 is a client-side database library, and electron-store at 8.1.0 handles preferences and state on disk, so the desktop build keeps local data rather than re-fetching everything on each launch. sanitize-html appears in the dependency list, which matters more than it might look: rendered post content coming from a federated network has to be cleaned before it reaches a page that also has access to the local filesystem. blurhash and react-blurhash are used for image placeholders, so a timeline can show a low-resolution preview while the full image loads. react-virtuoso handles long list rendering, which keeps a fast-scrolling timeline from creating thousands of DOM nodes, and react-intl handles localisation, backed by a locales folder in the tree and a crowdin.yml file for translation. emoji-mart and react-icons provide the emoji picker and icon set, react-hotkeys-hook adds keyboard shortcuts, and dayjs and parse-link-header handle date formatting and pagination link headers respectively.

## Four ways to install, and one that the maintainer asks you to avoid

Installation is the most opinionated part of the project. On macOS there is a Mac App Store listing, and a .dmg on the release page. On Linux there are .deb, .rpm and .AppImage packages on the release page, a .tar.bz2 archive for anyone who does not want a package manager, a snap from snapcraft.io, and an Arch User Repository package. On Windows the project points to the Microsoft Store listing and states plainly that it prepared a winget package and .exe files but does not recommend them, because those binaries are not code signed and produce warnings at launch. Only the Windows Store version is signed. That warning is worth taking seriously because it describes the difference between a build that passes SmartScreen checks and one that does not. The App Store, the Windows Store, Homebrew, snap and the AUR are all signed or curated paths, and the maintainer has lined up the distribution channels deliberately rather than leaving it to whichever release artefact is easiest to grab.

On macOS the Homebrew route is a cask install, run like this:

```bash
$ brew update
$ brew install --cask whalebird
```

The Linux snap route is a single command:

```bash
$ sudo snap install whalebird
```

On Arch the AUR package is installed with a helper such as yay:

```bash
$ yay -S whalebird
```

And to see which Windows builds the package manager knows about:

```bash
$ winget show "Whalebird" --versions
```

That last command lists the available versions without installing the unsigned build.

## Building from source needs Node 15 or newer and a font config library

The development section sets out the requirements and the first run. Node.js version 15.0.0 or greater is needed, with the 18.x line recommended, and either npm or yarn as the package manager. The clone and first run sequence is four commands. Because the project is Electron and renders with native font handling, the font config development package has to be present on a Linux machine first. Then dependencies are installed and the dev server starts with hot reload on port 9080, which is the port the comment in the README names. The clone command uses the .git suffix on the repository URL, which is harmless but worth noticing if you script around it. For anyone who intends to run the app for the first time, though, the packaged builds are the faster route, and the source tree is only interesting if you want to change the renderer or add a backend.

The whole first run is:

```bash
$ git clone https://github.com/h3poteto/whalebird-desktop.git
$ cd whalebird-desktop
$ sudo apt-get install libfontconfig-dev
$ yarn install
$ yarn run dev
```

The last command leaves the renderer serving with hot reload at localhost:9080, which is where you point a browser to see the interface while editing.

## GPL-3.0 covers the code but not the icons

The licence field for the repository is GPL-3.0, and the README states the software is available as open source under those terms, with copyright held by h3poteto since 2018. There is one carve-out that matters if you plan to redistribute the app or build on it: the icons do not comply with the licence and are separately credited to Miho Fukuda. That means the artwork is not covered by the GPL-3.0 grant, so packaging the icon set into a derived product carries terms the project does not itself state. Read the LICENSE file at the repository root before shipping anything. The funding model is also spelled out: Whalebird is free software and does not monetise with advertising, so donations are the support route. Translation runs through Crowdin, and a new language can be requested by opening an issue, which the maintainer says will add it.

## Active work on main, but a release cadence that stretches

The repository is not archived and the last push was on 2026-10-22, so the code is being worked on right now. The release history shows a different rhythm. Version 6.3.0 was published on 2026-05-02, version 6.2.7 on 2025-12-09 and version 6.2.6 the same day, so roughly five months separate the newest published build from the current state of the main branch. For an end user installing from a package manager that is what matters, since the store or cask you install is the released artefact, not the tip of the branch. For a reader watching the project, the gap says the recent commits are work that has not yet been cut as a version, which is normal for an Electron app that must be packaged and signed for multiple platforms before it ships. The tree also carries renovate.json for dependency updates and a.github directory for workflow automation, and the README badge points at a build workflow, so the release path is automated even where the publishing cadence is not.

## Conclusion

Whalebird desktop fits someone who wants one desktop window for several Fediverse accounts and prefers a Slack style column layout to the web interface of whichever server they use. It does not fit anyone who needs a signed installer on Windows outside the Microsoft Store, since the winget and .exe builds are unsigned and the project asks you not to use them, and it does not fit a mobile-first workflow. Before adopting it, check that the backend you run is on the supported list, or ask the maintainer to add it through an issue, and remember that the icon set is excluded from the GPL-3.0 grant, so the licence does not cover the artwork you ship with.

## FAQ

### Which Fediverse servers does Whalebird desktop support?

The README lists Mastodon, Pleroma, Friendica, Firefish, Gotosocial and Pixelfed as supported, plus Akkoma, Hometown and Iceshrimp marked as unofficial. The client uses the megalodon library, which speaks the Mastodon API.

### How do I install Whalebird on Windows?

The project asks you to use the Microsoft Store version, because it is the only signed build. The winget package and .exe files on the release page are not code signed, so they trigger warnings at launch and the maintainer does not recommend them.

### Can I install Whalebird desktop with Homebrew?

Yes. The README gives the Homebrew cask route, and the package was contributed to homebrew-cask by @singingwolfboy. On macOS the Mac App Store and the .dmg on the release page are the other options.

### What do I need to build Whalebird from source?

Node.js 15.0.0 or greater with the 18.x line recommended, npm or yarn, and libfontconfig-dev on Linux. After cloning, run yarn install and then yarn run dev, which serves the renderer with hot reload at localhost:9080.

## Sources

- [h3poteto/whalebird-desktop on GitHub](https://github.com/h3poteto/whalebird-desktop)
- [License: GPL-3.0](https://github.com/h3poteto/whalebird-desktop/blob/main/LICENSE)
- [Project website](https://whalebird.social)
- [README](https://github.com/h3poteto/whalebird-desktop/blob/main/README.md)
- [Releases](https://github.com/h3poteto/whalebird-desktop/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/h3poteto-whalebird-desktop
