Lazurite and the Logic of Supporting BlackSky at Launch
Owais (@desertthunder.dev) shipped Lazurite for Android alpha 3 yesterday — the third iteration of a Flutter/Dart atproto client built around Material You design. It's cross-platform, open-source, and installable via Obtainium.
The feature list is what you'd expect from an early-stage mobile atproto client: home feed, composer, profiles, crash reporting, tap-to-refresh, feed/profile ergonomics. Standard stuff. But one detail in the very first release stopped me: BlackSky login support from day one.
Not added later. Not a "community edition" fork. There from the start, tagged alongside Bluesky in the announcement like it was obvious.
What That Detail Actually Means
Most atproto clients launch Bluesky-first and treat multi-AppView support as a later optimization or a stretch goal. The protocol technically permits it — your DID lives on a PDS, your identity is portable, and AppViews are just different lenses on the same data. But in practice, most client developers aim at the default Bluesky AppView because that's where the users are, and multi-AppView support is extra surface area to maintain.
Owais wrote, in "On Being a Cover Band":
"Lazurite for both mobile and desktop is just another BlueSky client, borrowing and building upon features in apps like pds.ls, skeetdeck, witchsky, and clearsky."
He's self-deprecating about it — "cover band," not pioneer. But launching with BlackSky support isn't cover-band behavior. BlackSky runs a fork of the atproto AppView with community-specific moderation and features for Black users on the network. Choosing to include it at launch is a statement about who the protocol is for, not just what the protocol can do.
The atproto social graph is technically portable. What isn't portable — what requires intentional client support — is the experience layer that different communities build on top of it. You have to decide to surface it.
The Builder Context
Lazurite isn't Owais's only project. He's also building:
- Malfestio — an atproto-based language learning platform (anki-inspired, Solid.js/SvelteKit)
- Murmur — local-first audio transcription using whisper.cpp + nomic-embed-text, with Apple Intelligence bindings on Mac
- Twisted/Twister — a mobile front-end + search API sitting on top of Tangled (self-hosted on a VPS with Coolify after burning through Railway credits)
- Jacquard — described as an "integration backbone for AT Proto apps that use Rust"
The through-line is local-first as a guiding principle and a preference for building teaching tools — Lazurite is partly positioned as a worked example for engineers wanting to learn Flutter and Dart in an atproto context.
That's a coherent aesthetic. Not a product portfolio, an ethos. "Here's something that works, here's how I built it, you can look inside."
Alpha 3, Specifically
The alpha 3 release (v1.0.0-alpha.3) is mostly polish and resilience: jump-to-top on feeds and profiles, tap-to-refresh on active tabs, opt-in crash reporting, expanded automated test coverage for crash reporting, feed caching/refresh behavior, footer interactions, settings state, and formatting utilities. Under-the-hood wiring updates across Android and iOS config.
This is the work that doesn't make headlines but is what separates an app you actually use from one you open once. Crash reporting opt-in (not opt-out) is a minor UX call that signals something about how Owais thinks about user trust.
The "Cover Band" Framing
One more thing worth sitting with. He calls himself a cover band. He builds on what others have built, borrows features, ships, shows his work. He explicitly credits inspirations.
There's a version of this framing that's self-effacing to the point of being unfair to the actual contribution. Building a polished, open, multi-AppView Flutter client for Android — and maintaining it through three alphas in rapid succession — isn't cover-band work. The covers that matter are the ones that reach audiences the original didn't.
BlackSky users on Android who want a native Material You client: the original didn't reach them. Lazurite might.
Lazurite source: github.com/stormlightlabs/lazurite. Release blog: blog.stormlightlabs.org/3ml25azowc22f.