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.

at main 121 lines 6.3 kB view raw view rendered
1<!-- markdownlint-disable MD041 --> 2 3![Lazurite Hero](./docs/images/hero.png) 4 5Lazurite is a cross-platform Bluesky client that *rocks*[^1] built with Flutter and Dart using Material You (M3) design. 6 7## Features 8 9### Home Feed & Composer 10 11| Home Feed | Composer | Profile | 12| --------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | 13| ![Home Feed](./docs/images/home-feed.png) | ![Compose Screenshot](https://placehold.co/400x800/4CAF50/FFFFFF?text=Compose+Screenshot) | ![Profile](./docs/images/profile.png) | 14| 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. | 15 16### Search & Profile 17 18| Search | About | DevTools | 19| ----------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------- | 20| ![Search Results](./docs/images/search.png) | ![About](./docs/images/about.png) | ![DevTools](./docs/images/dev-tools.png) | 21| 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). | 22 23### Offline Support & Drafts 24 25Local-only drafts and caching powered by Drift (SQLite). 26 27- **Drafts:** Save posts locally and publish later. 28- **Search History:** Persisted local search history. 29- **Saved Feeds:** Manage and pin your favorite feeds. 30 31## What Lazurite Offers Beyond Bluesky 32 33### Available Now 34 35- **Semantic Search:** On-device vector embeddings (all-MiniLM-L6-v2) let you search saved 36 and liked posts by meaning, not just keywords. 37- **Post Scheduling:** Write posts now, publish them later. 38- **Follow Audit:** Bulk-analyze your follows to find deleted, deactivated, suspended, or 39 blocking accounts. Batch unfollow in one tap like [clean follows](https://cleanfollow-bsky.pages.dev/) 40- **Constellation Integration:** See who has blocked you and which lists you appear on, 41 powered by [Constellation](https://constellation.microcosm.blue) backlinks. 42- **AT Protocol Dev Tools:** Browse any user's PDS repository, inspect collections and 43 individual records as JSON, like an in-app [pds.ls](https://pds.ls/). 44- **Rich Theming:** Five full palettes (Lazurite™️[^2], Rose Pine, Catppuccin, Nord, Oxocarbon), 45 each with light and dark variants, built on Material 3. 46- **Offline First:** First page of feeds is cached locally; drafts, search history, and saved 47 posts persist in an on-device database. 48- **Local Drafts:** Auto-saved to the database, surviving crashes and force-closes. Multiple 49 drafts per account with full reply/quote/media context. 50- **Layout Options:** Toggle between Card and Compact feed views. Configure thread 51 auto-collapse depth (off, 1–6 levels). 52- **In-App Logs:** Filter by level, full-text search, share or export, useful for 53 debugging and AT Protocol development. 54 55### On the Roadmap 56 57- **RSS Feed Export:** View and export any public Bluesky profile as an RSS feed. 58- **Custom Fonts:** User-selectable serif, sans-serif, and monospace typefaces across the 59 entire app. 60- **Markdown Posts:** Toggleable Markdown rendering in post bodies. 61- **Firehose & Jetstream Viewers:** Live AT Protocol event streams inside Dev Tools. 62- **Auto-Threading:** Automatically split long posts into threaded replies. 63- **Last Read Position:** Resume your timeline exactly where you left off. 64 65## Architecture 66 67### Stack 68 69- **Framework:** Flutter (M3) 70- **State Management:** `flutter_bloc` 71- **Database:** Drift (SQLite) 72- **Networking:** Dio + `atproto`/`bluesky` packages 73- **Navigation:** `go_router` 74- **Data Serialization:** `freezed` + `json_serializable` 75 76### Directory Structure 77 78The project follows a feature-first architecture layered with a core module: 79 80- `lib/core/`: Shared infrastructure, database, router, and themes. 81- `lib/features/`: Feature-specific logic (Auth, Feed, Search, Profile, etc.). 82 - `<feature>/bloc/`: Business logic components. 83 - `<feature>/presentation/`: UI screens and widgets. 84 - `<feature>/data/`: (Optional) Feature-specific repositories or models. 85 86### Data Flow 87 88```mermaid 89flowchart LR 90 router["App Navigator/Router (go_router)"] <--> ui["Feature UI"] 91 ui <--> bloc["BLoC"] 92 bloc <--> repo["Repository Classes (Data Layer)"] 93 repo <--> pds["Authenticated API (User PDS)"] 94 repo <--> appview["Public API (AppView)"] 95 repo <--> local["On-device Database (SQLite/Drift)"] 96 97 classDef primary fill:#0b63d1,stroke:#0953af,color:#ffffff,stroke-width:1px; 98 classDef surface fill:#f4f6f9,stroke:#45505e,color:#101418,stroke-width:1px; 99 class router,ui,bloc,repo primary; 100 class pds,appview,local surface; 101``` 102 103For development setup, tooling, database schema, and contribution notes, see [DEVELOPMENT.md](DEVELOPMENT.md). 104If you run tests locally on macOS or Linux, run `just objectbox-setup` once 105to install the pinned ObjectBox native runtime. 106 107## References 108 109- [Bluesky API Documentation](https://docs.bsky.app/) 110- [AT Protocol Specification](https://atproto.com/) 111- [Flutter Documentation](https://flutter.dev/docs) 112 113## Credits 114 115- Typography inspiration from [Anisota](https://anisota.net/) by [Dame.is](https://dame.is). 116- Custom theming inspired by [Witchsky](https://witchsky.app/). 117- DevTools (AT Protocol Explorer) inspiration from [pdsls](https://pds.ls/) 118- AT URI links pass through [aturi.to](https://aturi.to/) 119 120[^1]: It's actually a mineral <https://en.wikipedia.org/wiki/Lazurite> 121[^2]: not really trademarked, actually a cool theme that you can find in the [desktop flavor](https://github.com/stormlightlabs/lazurite-desktop) too.