Project

heathrow

0.0
The project is in a healthy, maintained state
A unified TUI application for managing all your communication sources in one place. Brings together emails, WhatsApp, Discord, Reddit, RSS feeds, and more into a single, efficient terminal interface.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

>= 5.0
>= 1.4
 Project Readme

Heathrow

Where all your messages connect.

Ruby Gem Version Unlicense Documentation Stay Amazing

A unified TUI for all your communication. Like Heathrow Airport, every message routes through one hub. Replace mutt, newsboat, weechat, and a dozen chat apps with one terminal interface.

The Problem

"Dad, I sent you a message." Which app? Email? WhatsApp? Discord? Telegram? SMS? Nobody should have to chase 4-5 apps to find a message from their kid.

The Solution

All sources in one place. Create your custom views. Full keyboard control.

RSS Threaded View

Background

In 2007 I had the idea of One Communication Hub to rule them all. Now, with Claude Code, it was efficient to realize that idea. It has now replaced mutt that I've been using since 2003, my RSS readers (newsboat of late) and many other apps. Heathrow now functions as my communication hub :)

Features

Sources (two-way read + reply):

  • Email via Maildir (works with offlineimap, mbsync, fetchmail, gmail_fetch)
  • IRC/Slack via WeeChat relay
  • Discord, Telegram, Instagram DMs, Messenger
  • Reddit

Sources (read-only):

  • RSS/Atom feeds
  • Web page change monitoring

Core:

  • Threaded, flat, and folder-grouped view modes
  • 10+ custom filtered views with AND/OR logic
  • Compose, reply, forward with address book aliases (mutt-style)
  • Postpone/recall drafts
  • Dynamic message loading with jump-to-date
  • Hidden HTML link extraction (SharePoint, OneDrive, etc.)
  • Full-text search via notmuch
  • Per-source colors, per-view threading, tag/star highlighting
  • RTFM file picker for attachments
  • Configurable editor args, SMTP, OAuth2
  • AI assistant integration (Claude Code)
  • First-time onboarding wizard

Source Management

Installation

Requirements

  • Ruby >= 2.7
  • rcurses gem
  • sqlite3 gem

From RubyGems

gem install heathrow

From Source

git clone https://github.com/isene/heathrow.git
cd heathrow
gem install rcurses sqlite3
./bin/heathrow

Quick Start

  1. Run heathrow
  2. The onboarding wizard guides you through adding your first source
  3. Or press S to manage sources, a to add one

Key Bindings

Press ? for full help. Here are the essentials:

Navigation

Key Action
j/k or arrows Move up/down
Enter Open message
PgDn/PgUp Page through messages
Home/End First/last message
J Jump to date (yyyy-mm-dd)
n/p Next/previous unread

Views

Key Action
A All messages
N New (unread)
S Sources management
0-9, F1-F12 Custom filtered views
G Cycle view mode (flat/threaded/folders)
B Browse all folders
F Browse favorite folders

Message Actions

Key Action
r Reply
e Reply with editor
g Reply all
f Forward
m Compose new
E Edit message as new
R Toggle read/unread
M Mark all in view as read
* Toggle star
t/T Tag message / tag all
d Mark for deletion
< Purge deleted
x Open in browser
v View attachments
Y/Ctrl-y Copy right pane to clipboard
y Copy message ID to clipboard
@ Address book (a=add sender, e=edit)

Compose Prompt

Key Action
Enter Send
e Edit (re-open editor)
a Attach files (via RTFM picker)
p Postpone (save as draft)
ESC Cancel

UI

Key Action
w Cycle pane width
Ctrl-b Cycle border style
D Cycle date format
o Cycle sort order (Latest, A-Z, Sender, From, Conversation, Unread, Source)
Z Open calendar invite in Timely
P Preferences popup
? Help (press again for extended)
q Quit

Sort Orders

Order Description
Latest Newest messages first (default)
A-Z Alphabetical by subject
Sender Alphabetical by sender
From Group by sender, most recently active sender first
Conversation Group by thread/conversation
Unread Unread messages first
Source Group by source type

Configuration

All settings live in ~/.heathrow/heathrowrc (Ruby syntax):

# UI
set :color_theme,   'Mutt'
set :date_format,   '%b %-d'
set :sort_order,    'latest'
set :pane_width,    3
set :border_style,  1

# SMTP / OAuth2
set :default_email,   'you@example.com'
set :smtp_command,    '~/bin/gmail_smtp'
set :safe_dir,        '~/.heathrow/mail'
set :oauth2_script,   '~/bin/oauth2.py'
set :oauth2_domains,  %w[gmail.com]

# Identities (auto-selected by folder)
identity 'default',
  from:      'You <you@example.com>',
  signature: '~/.signature',
  smtp:      '~/bin/gmail_smtp'

# Custom views
view '1', 'Personal', folder: 'Personal'
view '2', 'Work',     folder: 'Work'
view '9', 'RSS',      source_type: 'rss'

# Favorite folders
set :favorite_folders, %w[Personal Work Archive]

Most settings are also available via the P preferences popup.

Architecture

+-- Heathrow
    +-- rcurses TUI (panes, input, rendering)
    +-- SQLite database (messages, sources, views, settings)
    +-- Source plugins (maildir, rss, weechat, discord, ...)
    +-- Message organizer (threading, grouping, sorting)
    +-- Background poller (per-source sync intervals)
    +-- Composer (editor integration, address book, SMTP)

Each source is a self-contained plugin. Sources crash independently without affecting the core. Filters default to "show all" on failure.

Credits

Timely Integration

Heathrow works with Timely, a terminal calendar app:

  • Z key: On a calendar invite email, press Z to open it in Timely (extracts the event date from ICS data and copies the ICS for import)
  • Wezterm mailto: Click any email address in wezterm to compose in Heathrow
  • From sort: The "From" sort order groups messages by sender with the most recently active person at the top, perfect for family or team views

License

Unlicense - released into the public domain.