Check out my apps: miaocast and Celluloid.

Building Lynx: Day One

4 min read

Today I started a new project: Lynx, a new minimal client for mastodon.

You might ask: Aren’t there already too many mastodon clients? Yes, but I’d still like to build one for a few reasons:

  • My day to day driver is a pixel 9 and I haven’t found a good client on Android
  • On iOS, I use the excellent app Ivory but it is exclusive to iOS
  • I want to also build the same app on both Android and iOS to compare the experiences of building on both platforms
  • I thought it would nice to document this in a serials of blog posts, for my own record and also for anyone that might be interested in following along
  • Lastly, I’m procrastinating about working on marketing for my podcast app miaocast, and working on a brand new project sounds more fun than finding ways to promote my podcast app

Goal for the app

I actually already built a somewhat working mastodon app on Android in the past but haven’t touched that project in well over a year. That attempt was to build a full featured mastodon client more or less like the offical client, however, this time I want to build something that’s really minimal. Specifically, it will be for mastodon users like me that just like to browse their home feed and not much else. So for the initial launch, I want to support:

  • Single account support
  • Very minimal and clean timeline view with media support
  • Profile view for self and other users
  • Minimal settings view with a few customizations settings
  • A plain composer view where you can post status and compose replies

The following will not be supported but may be added in the future:

  • Mutiple accounts support
  • Notifications
  • Rich composer that supports polls, uploading media etc
  • Cross posting to other platform like Bluesky / Thread

My hope is that I can ship something by the end of month (October 2024) on Android and get something shippable on iOS by end of the year.

Picking a name

In case you missed it from the profile picture on this site, I love cats! I even named my podcast app miaocast, so I’m natually inclined to pick something feline related for this project as well.

I happen to be watching a youtube video the other day about Canada Lynx and the name Lynx has been fresh on my mind when I decided to start this project, so Lynx it is for now.

Picking a technology

For this project, I’m going fully native on both platforms, so it will be Jetpack Compose on Android and SwifitUI on iOS.

At first, I wanted to take this chance to finally try out Compose Multiplatform for real. Using Compose Multipatform would in theory save some time and leverage my existing Compose knowedge and experience in building miaocast.

After going through the get started guide and trying out the demo app, I realized that this might not be the best choice. Even though using Compose for the UI and sharing business logics sounds nice, there are still a lot of challenges and unknowns, such as:

  • learning a new dependency injection framework, as hilt / dagger is Android specific
  • learning a new navigation library since miaocast uses navigation compose, also Android specific
  • missing out on the nice tooling in Android Studio when working in multiplatform mode, such as @Preview not being supported
  • a lot of unknonwns when it comes to things like localization, building and debugging the app

So if I need to spend a lot of time learning new things, I think it’s best to spend time on learning the well traveled paths on each platform.

Lastly, I also went and downloaded a few apps that are built using Compose Multiplatform, and on iOS they just feel like stuck at 80% comparing to well built native apps. Overall, this just solidified my opinion that as of today, native is still the way to go.

What I accomplished today

Here are what I did today:

  • set up the Android App project
  • generated a theme with material theme builder
  • added a bunch of dependencies that are need such as Compose navigation, Hilt for depenency injection, Retrofit and Moshi for the network stack
  • started working on the oauth flow for mastodon

And here is what the app looks like at the end of the first day:

Lynx screenshot showing the home screen

Tomorrow, I hope to get the login working and show a simple timeline view.


Xiaoming's Blog

Indie developer based in San Jose, California.