mobile bluesky app made with flutter lazurite.stormlightlabs.org/
mobile bluesky flutter
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

Dart 85.3%
HTML 10.5%
TypeScript 0.7%
CSS 0.5%
Shell 0.1%
Ruby 0.1%
Just 0.1%
Swift 0.1%
Kotlin 0.1%
Objective-C 0.1%
Other 2.8%
163 3 0

Clone this repository

https://tangled.org/desertthunder.dev/lazurite https://tangled.org/did:plc:xg2vq45muivyy3xwatcehspu/lazurite
git@tangled.org:desertthunder.dev/lazurite git@tangled.org:did:plc:xg2vq45muivyy3xwatcehspu/lazurite

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Lazurite Hero

Lazurite is a cross-platform Bluesky client that rocks1 built with Flutter and Dart using Material You (M3) design.

Features#

Home Feed & Composer#

Home Feed Composer Profile
Home Feed Compose Screenshot Profile
View your personal timeline with support for threads and media. Create new posts with rich text and media attachments. Supports replies and quoting. View detailed actor profiles, including their feed and metadata.

Search & Profile#

Search About DevTools
Search Results About DevTools
Discover people and posts across the Bluesky network. About (showing Rose Pine Moon theme) Built-in logs and developer utilities for exploring the AT Protocol (Rose Pine Dawn).

Offline Support & Drafts#

Local-only drafts and caching powered by Drift (SQLite).

  • Drafts: Save posts locally and publish later.
  • Search History: Persisted local search history.
  • Saved Feeds: Manage and pin your favorite feeds.

What Lazurite Offers Beyond Bluesky#

Available Now#

  • Semantic Search: On-device vector embeddings (all-MiniLM-L6-v2) let you search saved and liked posts by meaning, not just keywords.
  • Post Scheduling: Write posts now, publish them later.
  • Follow Audit: Bulk-analyze your follows to find deleted, deactivated, suspended, or blocking accounts. Batch unfollow in one tap like clean follows
  • Constellation Integration: See who has blocked you and which lists you appear on, powered by Constellation backlinks.
  • AT Protocol Dev Tools: Browse any user's PDS repository, inspect collections and individual records as JSON, like an in-app pds.ls.
  • Rich Theming: Five full palettes (Lazurite™️2, Rose Pine, Catppuccin, Nord, Oxocarbon), each with light and dark variants, built on Material 3.
  • Offline First: First page of feeds is cached locally; drafts, search history, and saved posts persist in an on-device database.
  • Local Drafts: Auto-saved to the database, surviving crashes and force-closes. Multiple drafts per account with full reply/quote/media context.
  • Layout Options: Toggle between Card and Compact feed views. Configure thread auto-collapse depth (off, 1–6 levels).
  • In-App Logs: Filter by level, full-text search, share or export, useful for debugging and AT Protocol development.

On the Roadmap#

  • RSS Feed Export: View and export any public Bluesky profile as an RSS feed.
  • Custom Fonts: User-selectable serif, sans-serif, and monospace typefaces across the entire app.
  • Markdown Posts: Toggleable Markdown rendering in post bodies.
  • Firehose & Jetstream Viewers: Live AT Protocol event streams inside Dev Tools.
  • Auto-Threading: Automatically split long posts into threaded replies.
  • Last Read Position: Resume your timeline exactly where you left off.

Architecture#

Stack#

  • Framework: Flutter (M3)
  • State Management: flutter_bloc
  • Database: Drift (SQLite)
  • Networking: Dio + atproto/bluesky packages
  • Navigation: go_router
  • Data Serialization: freezed + json_serializable

Directory Structure#

The project follows a feature-first architecture layered with a core module:

  • lib/core/: Shared infrastructure, database, router, and themes.
  • lib/features/: Feature-specific logic (Auth, Feed, Search, Profile, etc.).
    • <feature>/bloc/: Business logic components.
    • <feature>/presentation/: UI screens and widgets.
    • <feature>/data/: (Optional) Feature-specific repositories or models.

Data Flow#

flowchart LR
  router["App Navigator/Router (go_router)"] <--> ui["Feature UI"]
  ui <--> bloc["BLoC"]
  bloc <--> repo["Repository Classes (Data Layer)"]
  repo <--> pds["Authenticated API (User PDS)"]
  repo <--> appview["Public API (AppView)"]
  repo <--> local["On-device Database (SQLite/Drift)"]

  classDef primary fill:#0b63d1,stroke:#0953af,color:#ffffff,stroke-width:1px;
  classDef surface fill:#f4f6f9,stroke:#45505e,color:#101418,stroke-width:1px;
  class router,ui,bloc,repo primary;
  class pds,appview,local surface;

For development setup, tooling, database schema, and contribution notes, see DEVELOPMENT.md. If you run tests locally on macOS or Linux, run just objectbox-setup once to install the pinned ObjectBox native runtime.

References#

Credits#

  • Typography inspiration from Anisota by Dame.is.
  • Custom theming inspired by Witchsky.
  • DevTools (AT Protocol Explorer) inspiration from pdsls
  • AT URI links pass through aturi.to

  1. It's actually a mineral https://en.wikipedia.org/wiki/Lazurite ↩︎

  2. not really trademarked, actually a cool theme that you can find in the desktop flavor too. ↩︎