Repository navigation
Configuration files
TideMail stores its config in ~/.config/tidemail/config.toml and its SQLite
cache in ~/.local/share/tidemail/mail.db. Set XDG_DATA_HOME to use a
different cache location. The update checker's own state (when it last
checked, and which version you dismissed) is kept in mail.db, not in
config.toml, so a config file under version control doesn't change every time
TideMail checks for updates.
Example configuration:
theme = "catppuccin-mocha"
default_account = "8f43c9e644384bd5a25a27ff0d9c2701"
[display]
send_delay_seconds = 5
send_max_attempts = 3
images = "auto" # "auto" (inline + blocked remote), or "off" (text placeholders)
[[account]]
id = "8f43c9e644384bd5a25a27ff0d9c2701" # generated by TideMail; do not copy or edit
name = "Personal"
imap_host = "imap.example.com"
imap_port = 993
imap_tls = true
smtp_host = "smtp.example.com"
smtp_port = 587
smtp_tls = true
user = "alice@example.com"
auth_method = "password" # "password" (default) or "oauth2"
password = "app-password"
from = "Alice <alice@example.com>"
signature = "Alice\nSent with TideMail"
sync_minutes = 0 # 0 = push (IDLE), N = poll every N min, -1 = manual onlyfrom is the From address row in the account form. Give it an address —
alice@example.com or Alice <alice@example.com> — or leave it blank to send
as user, which works only when user is itself an address. A display name on
its own is not enough: the account form refuses to save one, because SMTP has
no address to send from and would only fail once the message was already
queued.
The signature is a multi-line box in the account form — press Enter for a new
line, Tab to move on, and Ctrl+S to save without leaving it. Arrow keys walk
its lines and step to the next field at the top and bottom. Editing the file by
hand works too; a TOML multi-line string is easier to read than escapes:
signature = """
Alice
Sent with TideMail"""auth_method is set for you: it becomes "oauth2" once you complete a Ctrl+O
sign-in for a Gmail/Outlook account, otherwise "password". The refresh token
and password live in the system keychain, not this file. An account never
switches to OAuth on its own — a leftover keychain token cannot promote it.
default_account names the account a new message is sent from, and the account
TideMail focuses at startup. It holds an account id, not a position, so
renaming or reordering accounts never moves it. Delete it, or the account it
names, and TideMail falls back to the first account and opens on the Unified
Inbox. Space in Accounts writes this line for you.
The order of the [[account]] blocks is the order accounts appear in: the
sidebar, the account list, and the Ctrl+U sender picker in compose. Reorder
them here, or with Shift+J and Shift+K in Accounts.
The generated account id links this block to cached mail, drafts, queued mail,
and keychain credentials. It stays fixed when the display name changes. TideMail
adds missing IDs on upgrade and first saves the original file as
config.toml.pre-account-ids.bak.
If config.toml is malformed or an automatic migration cannot be saved,
TideMail stops instead of starting with defaults that could overwrite the real
settings. The startup error names the exact config path and the parse or
permission problem to fix. If an account's cached folders no longer have a
matching config block, affected actions stop with a status-line explanation;
open Accounts and re-enter that account's server details.