Skip to content

stormlightlabs/lazurite

Repository files navigation

Lazurite Hero

Lazurite is a cross-platform Bluesky client 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.

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

  • Network: Authenticated requests are routed through user PDS; public reads use the public AppView.
  • Database: Drift manages local persistence for accounts, cached profiles/posts, settings, and drafts.

Routing

Lazurite uses StatefulShellRoute for persistent bottom navigation.

Path Description
/login Authentication gateway
/ Home Feed tab
/search Search tab
/profile Current user profile tab
/settings Global settings
/compose Root-level modal for new posts

Local Development

Use just for common tasks:

  • just format - Runs dart format
  • just lint - Proxies flutter analyze
  • just test - Executes the flutter test suite
  • just gen - Triggers build_runner for code generation
  • just check - Runs format, lint, and tests in sequence

For a quick start:

flutter pub get
just gen
flutter run

Database Schema

Powered by Drift, the following tables are currently implemented:

Table Purpose
accounts Local storage for session and auth tokens (DID, handle, service)
cached_profiles Cached profile metadata to reduce network calls
cached_posts Cached post content for offline viewing
saved_feeds Locally Managed feed preferences
search_history Persistent query history
drafts Offline-first post drafting with media support
settings Key-value application configuration

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

  •  

Packages

 
 
 

Contributors