
Cardinal is a command-first terminal workspace for email and calendar.
Cardinal is built for people who live on the keyboard: operators, developers, and long-time terminal users who want mail and calendar control without mouse-heavy workflows.
Core rule:
Workspace displays.
Prompt acts.
Cardinal is not a GUI mail clone. It is a focused TUI product where mail, calendar, agenda, invites, and search share one consistent command language.
Why Cardinal
Cardinal starts local-first:
Mail server -> external sync -> local Maildir -> Cardinal
Calendar server -> external sync -> local vdir/.ics -> Cardinal
Cardinal -> SMTP sender
Cardinal -> .ics/vdir writer
This model keeps failure modes visible and operationally simple:
- your data stays in local files
- sync stays explicit through your existing tools
- mutations stay command-driven and testable
Direct IMAP/CalDAV/JMAP integrations are intentionally deferred.
What the product does today
Current implementation includes:
- Terminal UI shell with normal mode + command mode
- Local Maildir reading and safe local mail actions (
:archive,:delete,:spam,:move,:mark,:undo) - Local vdir/
.icsreading and safe calendar actions (:event new,:event edit,:event delete,:event move) - Compose/reply flow with explicit
:send confirm - Invite bridge from
text/calendaremail parts - Unified search workspace for mail and events
- External sync command integration (
:sync) - Runtime config validation, logging hooks, crash-safe terminal recovery
- Man page/completions generation and packaging scaffolds
Milestones 0 through 10 are implemented. Current work focuses on release and distribution hardening.
Installation
Install from crates.io:
One-line installer (commit-pinned):
|
One-line installer (latest main commit resolved via API):
RID="rad:z3Yt8Pd4KwEqVuvGPM1E6XfgKFdvk"
HOST="https://radicle.noumena.mx"
SHA=""
|
Install from local source checkout:
Full install docs:
Quick start
Launch:
Try the core flow:
:list inboxes
:list mail
:calendar today
:agenda week
Use real local data:
CARDINAL_MAILDIR="/.local/share/mail/personal" \
CARDINAL_VDIR="/.local/share/calendars" \
Load multiple mail accounts from one parent root:
CARDINAL_MAILDIR="/.local/share/mail" \
CARDINAL_VDIR="/.local/share/calendars" \
Import profile env files from existing terminal setups (experimental):
Also supported:
Fish users (example):
make export-aerc
source .cardinal-local/aerc/personal.fish
cardinal
Enable send:
CARDINAL_SMTP_HOST="smtp.example.com" \
CARDINAL_SMTP_FROM="you@example.com" \
CARDINAL_SMTP_USERNAME="you@example.com" \
CARDINAL_SMTP_PASSWORD_CMD='pass show mail/example' \
Enable sync:
CARDINAL_SYNC_MAIL_CMD="mbsync -a" \
CARDINAL_SYNC_CALENDAR_CMD="vdirsyncer sync" \
Validate config:
UI theme and splash:
CARDINAL_THEME="cardinal-dark" CARDINAL_SPLASH="1"
Supported themes: cardinal-dark, cardinal-light (aliases: dark, light).
AI and automation
Cardinal supports machine-readable command parsing for agent workflows:
CARDINAL_LOG_STDERR=0
Use this JSON contract to gate execution by isa.safety and keep all
mutations explicit command actions.
Reference:
Command examples
:list inboxes
:list mail
:open 4
:reply
:send
:send confirm
:archive
:delete
:spam
:undo
:calendar today
:agenda week
:event new
:event edit
:event delete
:invite accept
:search from:alice
:sync
Documentation
-
Product docs entry:
-
Governance:
Development checks
Status
Cardinal is in release hardening for real-world use by keyboard-first users. The local-first command model and milestone feature set are implemented; current work is focused on installation UX, distribution, and operational polish.