Skip to content

Repository files navigation

Tidings is a pretty, FOSS native email client for IMAP/SMTP and Gmail.

macOS Platform   Android Platform   iOS Platform   Linux Platform  
GitHub Downloads (all assets, all releases)   Flutter Framework 

Image

More screenshots in docs/Screenshots.md!

Warning

This project is in development. While you CAN use it as an email client today, expect bugs and missing features... maybe don't use it for important messages yet! Seeking motivated folks to contribute and play-test!

Current Features

  • Multi-account support, with unified inbox
  • Message threading with "chat-style" UI to make inbox zero easy
  • Undo-send
  • Really smart search with cool stuff like from:[sender] AND (before:2y OR after:2025) and saving searches, w0w0w
  • Per-account accent colors so you always know which account you're in, great for keeping business and personal separate
  • KEYBOARD SHORTCUTS KEYBOARD SHORTCUTS KEYBOARD SHORTCUTS!! (See docs/Keyboard.md for all the shortcuts, or hit ?kbd>)

Plus the obvious features:

  • HTML message rendering
  • Rich HTML compose with styling and saved drafts
  • Outbox send queue with instant-send
  • Automatic send retries with exponential backoff + fallback to Drafts
  • IMAP/SMTP connection testing and per-account refresh intervals
  • Folder pinning with background cached folder loading
  • Responsive layout for desktop and mobile with folder navigation
  • Configurable appearance settings (theme, palette, density, corner radius, threads)

Roadmap

See ROADMAP.md for planned features.

Why

As far as I can tell, there are three types of email clients available today:

  • Vendorlocked web apps (Gmail, Outlook.com). Ads. Tracking. Vendor lock-in. No offline access. No thanks.
  • FOSS but ugly native clients (Thunderbird, etc.). Archaic looks, atrocious UX. No thanks.
  • Expensive gross AI clients (Superhuman, etc.). Subscription fees to your own email. No thanks.

So that's three no-thankses and zero yes-thankses. Tidings aims to be a fourth option: FOSS, native, beautiful, no sucky subscription fees.


Features

Search

Image

You can compose search queries and save them for later use. Open search with ⌘F / Ctrl+F. Queries support boolean operators, field filters, and natural-language dates — and are sent to the server (Gmail or IMAP) so results aren't limited to what's already cached.

Query syntax

Boolean operators

Adjacent terms are implicitly AND'd. Operators are case-insensitive.

Operator Example Meaning
(implicit) from:alice subject:invoice Both conditions must match
AND from:alice AND subject:invoice Explicit AND (same as above)
OR from:alice OR from:bob Either condition matches
NOT NOT from:spam@example.com Condition must not match
( ) (from:alice OR from:bob) AND is:unread Group sub-expressions

Precedence (high → low): NOT > AND > OR, consistent with standard boolean logic.

Field filters

Field Example Matches
from: from:jordan Sender name or email contains value
to: to:jordan@example.com Recipient name or email contains value
cc: cc:alice CC'd address name or email contains value
bcc: bcc:bob BCC'd address name or email contains value
subject: subject:"meeting notes" Subject contains value (quote multi-word values)
label: label:important Same as subject: on IMAP; label name on Gmail
in: in:inbox, in:sent Folder path contains value
is: is:unread Message flag or state (see below)
has: has:link Message feature (see below)
before: before:2024-01-01 Received before date (exclusive)
after: after:last month Received after date (exclusive)
date: date:today Received on this exact date
account: account:gmail.com From a matching account (client-side only)

All field values are case-insensitive substring matches, so from:jor matches jordan@example.com. Wrap multi-word values in quotes: subject:"cool video".

is: values

Value Matches
is:unread Unread threads
is:read Read threads
is:starred Starred / flagged threads
is:unstarred Not starred
is:me / is:sent Sent by you

has: values

Value Matches
has:link Body contains a URL
has:attachment Has attachments (not yet implemented)

Date formats

All three date fields (before:, after:, date:) accept the same formats:

Format Example Meaning
Natural language today, yesterday Today / yesterday
Week/month/year last week, this month, last year Start of the period
Relative — days 1d, 7d N days ago
Relative — weeks 1w, 4w N weeks ago
Relative — months 1mo, 3mo, 6mo N months ago
Relative — years 1y, 2y N years ago
ISO 8601 2025-02-21 Exact date

Free-text search

Any term without a field: prefix is matched against the subject, all participant names/emails, and the message body.

Example queries

# Unread mail from a specific person
from:jordan is:unread

# Anything with an invoice in the last six months
subject:invoice after:6mo

# From Alice or Bob, not in Spam
(from:alice OR from:bob) NOT in:spam

# Starred messages you sent before 2024
is:starred is:me before:2024-01-01

# Long-form: mail from a domain with an attachment-like subject
from:@acme.com subject:"Q4 report"

About

A native, pretty, cross-platform email client

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages