Catbird for Bluesky's Avatar

Catbird for Bluesky

@catbird.blue

Catbird is a native iOS client for Bluesky. Try the beta on iPhone, iPad, and Mac: https://testflight.apple.com/join/8zPe2QG8 Open Source on GitHub: https://github.com/joshlacal/Catbird (don’t judge me for my bad code πŸ˜…)

155
Followers
1
Following
58
Posts
09.06.2025
Joined
Posts Following

Latest posts by Catbird for Bluesky @catbird.blue

it’s not totally done yet, i’m in the process of migrating servers and refactoring code, so there are still some buggy random sign outs currently, but at least the architecture allows for longer sessions. it’s on my github as `nest`, but again i’m reworking it a bit

05.03.2026 10:44 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

due to feedback from users and behaviors i was experiencing, i decided to move to a confidential OAuth client which holds the tokens on the server, negotiates auth for the app, and allows for unlimited sessions so long as the token is refreshed every 180 days

05.03.2026 10:44 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

hi! so atproto has 2 OAuth client types: public clients and confidential clients. for about a year catbird was a public OAuth client that connected directly to your PDS (which then proxied requests to the appview)

the problem with this is that sessions only last for 2 weeks with public clients

05.03.2026 10:44 πŸ‘ 2 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

I found a bug in the new backend causing sign outs, working on a fix now

18.02.2026 16:35 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

the delivery service is an XRPC service that uses atproto service auth, seeing what I can do with that

13.02.2026 17:01 πŸ‘ 1 πŸ” 2 πŸ’¬ 1 πŸ“Œ 0

oh yeah of course! it uses MLS/the OpenMLS library under the hood, I’ve got a wrapper for it so I can use it in Swift. the messages are encrypted/decrypted using the library and message history is saved in an sqlcipher db. also still working on the delivery service

13.02.2026 16:58 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

something i sort of shipped before it was ready πŸ˜… it used to kinda work sometimes, I was able to start a few conversations with friends but it breaks eventually. working on revamping it a bit now

13.02.2026 16:29 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
a screenshot of the catbird app with the user’s pronouns and website now in their profile

a screenshot of the catbird app with the user’s pronouns and website now in their profile

Just a quick updateβ€”you can now set your pronouns in Catbird!

These are a part of your Bluesky profile record and will be visible across all clients that support the field.

08.02.2026 18:28 πŸ‘ 45 πŸ” 8 πŸ’¬ 1 πŸ“Œ 0

(i will fix this, just hasn’t been a priority)

28.01.2026 13:47 πŸ‘ 4 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

you guys are just supposed to go β€œooh and ahh” and β€œpretty” and ignore your phone turning into a nuclear reactor and locking up while it renders the sky with clouds shader

28.01.2026 13:47 πŸ‘ 4 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

sorry about that. i will try to push out a build to fix that, but in the meantime if you want to try to delete it and reinstall, that should recreate the database

28.01.2026 05:31 πŸ‘ 2 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

Sorry for the trouble everyone. A working build has been pushed to TestFlight. You’ll have to log in again, but should have longer sessions from now on.

28.01.2026 04:19 πŸ‘ 10 πŸ” 2 πŸ’¬ 3 πŸ“Œ 0

i see, thank you!

11.01.2026 17:58 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

it was really bad the first time i published it but i think i had optimized it a little better? things are slightly large but should be tunable via dynamic type. i just got a new computer so it’ll get more attention soon

11.01.2026 17:55 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

do you have a screenshot of what it looks like on your mac?

11.01.2026 17:52 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

not yet i was trying to get it out today but theres a couple more things i want to fix

13.12.2025 03:58 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Thanks everybody for all the crash reports and feedback. It all means a lot.

04.12.2025 23:46 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Hoping this next update is good. I’ve tried to fix a number of things with the post composer, account switching, crashing. It feels much faster and smoother.

I’m also making positive progress on the MLS group chats, they will probably make it in with an experimental warning.

04.12.2025 23:46 πŸ‘ 7 πŸ” 0 πŸ’¬ 3 πŸ“Œ 0

It’s not impossible but I don’t see it happening just yet, I have a few other things I’m trying to do. I started with iOS17 support but I do use a lot of new features now and dropped support. I’ll definitely look into it when I have the chance.

04.12.2025 23:38 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I am not sure if I want to get into confidential clients yet

04.12.2025 23:34 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I’ve remained convinced I have some auth bug but I might just be hitting the limits of public clients (sorry to bring up an old post I have just been trying to do some debugging). It seems like a week and then you have to log in again. Is that right @matthieu.bsky.team ?

04.12.2025 23:34 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Sorry for the long thread. I appreciate all the support!

20.11.2025 16:02 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Still not at a point where I trust its stability, it’s totally possible I’m over optimistic about a very difficult cryptographic protocol for group chats (MLS) but I have been using the OpenMLS library and am not hand-rolling my own crypto. So, we will see how all that turns out.

20.11.2025 16:02 πŸ‘ 6 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

but inevitably I have also broken some and don’t want to ship out something worse.

I’ve also been experimenting with E2EE group chat functionality, and if it does end up working I plan on making it optional and opt-in. It would be text-only to start, but support bsky embeds and Tenor GIFs (sorry)

20.11.2025 16:02 πŸ‘ 4 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I’ve been a bit quiet on this account for a while, just like to thank people still using it and sticking around. I appreciate all the help and feedback. I tried to do some large-scale refactoring lately, and I’m just tightening things up. I’ve hopefully improved a number of things…

20.11.2025 16:02 πŸ‘ 11 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Gah. Sorry. It’s all in native Swift, I thought I nailed parsing a while ago especially since Swift is UTF-8 native strings, I think probably the issue is something getting messy because I needed to use UIKit for the post composer text box and that uses UTF-16

17.11.2025 12:22 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

ah thanks, found a silly bug, it’s featured gated to iOS26 by accident

28.10.2025 15:41 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
catbird settings sheet, Advanced setting highlighted

catbird settings sheet, Advanced setting highlighted

catbird appview service setting sheet

catbird appview service setting sheet

if you’re curious to try the @blackskyweb.xyz AppView, here’s how you can change your service after logging in:

28.10.2025 14:08 πŸ‘ 43 πŸ” 3 πŸ’¬ 4 πŸ“Œ 1

The update is on TestFlight now. I’m seeing new bugs already, but you should be able to log in!

28.10.2025 11:01 πŸ‘ 9 πŸ” 2 πŸ’¬ 1 πŸ“Œ 0

Catbird has unfortunately also been hit with this! I'm working on pushing out a fix now.

27.10.2025 23:33 πŸ‘ 14 πŸ” 0 πŸ’¬ 1 πŸ“Œ 1