Thomas GüttlerandClaude Sonnet 4.6 22db4a2dd6 Add Nix flake, .envrc, Taskfile, and Stalwart dev server
- flake.nix: Flutter 3.41.6, Android SDK, Stalwart, GTK3/build
  tools for Linux desktop, go-task
- .envrc: copied from sharedinbox — use flake + dotenv_if_exists
- Taskfile.yml: analyze, test, integration, codegen, run tasks
- stalwart-dev/: IMAP+SMTP dev server reused from sharedinbox
- test/integration/imap_sync_test.dart: login, list mailboxes,
  send via SMTP and receive via IMAP
- pubspec.yaml: add flutter_secure_storage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 07:40:34 +02:00

SharedInbox License: MIT

IMAP/SMTP email client written in Flutter.

Targets Android, iOS, and Desktop (Linux, macOS, Windows).
Supports multiple accounts — each synced independently via IMAP IDLE.

Design philosophy: offline-first

IMAP/SMTP server
       ↓
  AccountSyncManager  ←→  Drift (SQLite, local DB)
                                   ↓
                             UI (reads only from DB)

The UI never touches the network. The sync engine runs in the background and writes to a local Drift database. Screens observe reactive streams from that DB.

Key packages

Package Role
enough_mail (vendored in packages/) IMAP / SMTP / MIME
drift Local SQLite ORM
flutter_riverpod State management / DI
go_router Navigation

Building

# Install dependencies and run code generation
dart pub get
dart run build_runner build --delete-conflicting-outputs

# Run on desktop
flutter run -d linux   # or macos / windows

# Run on Android / iOS
flutter run

Vendored enough_mail

packages/enough_mail/ is a local copy of enough_mail so it can be modified if needed. It is referenced via a path: dependency in pubspec.yaml.

S
Description
SharedInbox: a Mail User Agent supporting IMAP and JMAP
https://sharedinbox.de/
Readme
8.9 MiB
Languages
Dart 77.1%
HTML 13.4%
Go 2.7%
Shell 2.3%
Python 2.1%
Other 2.3%