Skip to content

SUNET/chithi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chithi

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).

Why?

Need a client with first class support for OpenPGP. Also allowing doing Calendar in the application without a plugin :)

Features

  • 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

Prerequisites

System Dependencies

Arch

  sudo pacman -S --needed \
    base-devel \
    openssl \
    dbus \
    gtk3 \
    webkit2gtk-4.1 \
    libayatana-appindicator \
    librsvg \
    curl \
    wget

Debian / Ubuntu

sudo 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 \
  wget

Fedora

sudo dnf install -y \
  gcc gcc-c++ make \
  pkg-config \
  openssl-devel \
  dbus-devel \
  gtk3-devel \
  webkit2gtk4.1-devel \
  libappindicator-gtk3-devel \
  librsvg2-devel \
  curl \
  wget

macOS

xcode-select --install
brew install openssl

Tauri uses the built-in WebKit framework on macOS. The keyring crate uses the native Keychain — no extra dependencies needed.

Build & Run

# 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 build

The release binary will be in src-tauri/target/release/.

Running Tests

# Frontend tests (Vitest)
pnpm test

# Rust backend tests
cd src-tauri && cargo test

# Type-check frontend
pnpm exec vue-tsc --noEmit

Data Storage

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)

Architecture

  • Frontend: Vue 3 + TypeScript + Pinia (in src/)
  • Backend: Rust + Tauri v2 (in src-tauri/)
  • Mail: IMAP via imap crate, JMAP via raw reqwest HTTP
  • Sending: SMTP via lettre (IMAP accounts), JMAP Submission (JMAP accounts)
  • Calendar: JMAP Calendar + CalDAV via reqwest + uppsala XML parser
  • Storage: Maildir on disk + SQLite index, passwords in OS keyring

See docs/adr/ for Architecture Decision Records.

To enable usage in your work/school O365

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

License

GPL-3.0-or-later

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors