A desktop email client built with Tauri v2 (Rust) and Vue 3 (TypeScript).
Supports IMAP, JMAP, CalDAV, and JMAP Calendar with a Thunderbird-style three-pane layout. Passwords are stored in the system keyring (GNOME Keyring, KDE Wallet, macOS Keychain, or Windows Credential Manager).
Need a client with first class support for OpenPGP. Also allowing doing Calendar in the application without a plugin :)
- Multi-account support (Gmail app password, IMAP, JMAP, CalDAV-only)
- Email threading with In-Reply-To and subject-based fallback
- Calendar with day/week/month views, recurring events, and meeting invite handling
- Accept/Maybe/Decline meeting invites from email with iTIP replies
- Client-side message filtering rules
- HTML email sanitization (no scripts, no remote content by default)
- Dark and light themes
sudo pacman -S --needed \
base-devel \
openssl \
dbus \
gtk3 \
webkit2gtk-4.1 \
libayatana-appindicator \
librsvg \
curl \
wgetsudo apt update
sudo apt install -y \
build-essential \
pkg-config \
libssl-dev \
libdbus-1-dev \
libgtk-3-dev \
libwebkit2gtk-4.1-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
curl \
wgetsudo dnf install -y \
gcc gcc-c++ make \
pkg-config \
openssl-devel \
dbus-devel \
gtk3-devel \
webkit2gtk4.1-devel \
libappindicator-gtk3-devel \
librsvg2-devel \
curl \
wgetxcode-select --install
brew install opensslTauri uses the built-in WebKit framework on macOS. The keyring crate uses the native Keychain — no extra dependencies needed.
# Clone the repository
git clone <repo-url>
cd emails
# Install frontend dependencies
pnpm install
# Run in development mode (hot-reload frontend + Rust backend)
pnpm tauri dev
# Build a release binary
pnpm tauri buildThe release binary will be in src-tauri/target/release/.
# Frontend tests (Vitest)
pnpm test
# Rust backend tests
cd src-tauri && cargo test
# Type-check frontend
pnpm exec vue-tsc --noEmit| Data | Location |
|---|---|
| Email bodies (Maildir) | ~/.local/share/chithi/<account_id>/ |
| SQLite database | ~/.local/share/chithi/chithi.db |
| Log file | ~/.local/share/chithi/chithi.log |
| Passwords | System keyring (GNOME Keyring / KDE Wallet / macOS Keychain) |
- Frontend: Vue 3 + TypeScript + Pinia (in
src/) - Backend: Rust + Tauri v2 (in
src-tauri/) - Mail: IMAP via
imapcrate, JMAP via rawreqwestHTTP - Sending: SMTP via
lettre(IMAP accounts), JMAP Submission (JMAP accounts) - Calendar: JMAP Calendar + CalDAV via
reqwest+uppsalaXML parser - Storage: Maildir on disk + SQLite index, passwords in OS keyring
See docs/adr/ for Architecture Decision Records.
Ask the admin to allow the application for permissions.
App details:
- Name: chithi
- Type: Public desktop client
- Auth flow: OAuth 2.0 Authorization Code with PKCE
- Redirect URI: http://localhost
- Client Application ID: b5941cd4-0385-40f1-953a-2c3b36f2a331
Access model:
- Delegated permissions only
- Access is limited to the signed-in user’s own mailbox, calendars, shared calendars, and contacts
- No client secret is stored on the device
- OAuth tokens are stored locally in the OS keyring
Requested permissions:
- Microsoft Graph: User.Read, Calendars.ReadWrite, Calendars.Read.Shared Contacts.ReadWrite, IMAP.AccessAsUser.All, SMTP.Send, Mail.ReadWrite, Mail.Send, offline_access, openid, profile, email
GPL-3.0-or-later