Skip to content

TUI Overview

allman-tui is a re-imagined LinkedIn messenger inbox in your terminal — a thin React/Ink front-end over the allman CLI binary and its on-disk message store.

  • Reads (conversation list, message history, slug resolution) come straight from the JSONL/JSON files on disk. No subprocess overhead per keystroke.
  • Writes (send, sync, search) shell out to the allman binary so rate limiting, pre-send sync, and git commits go through the canonical path.
  • Live updates subscribe to allman listen’s NDJSON event stream from a long-running subprocess.
src/
index.tsx entry point
app.tsx root component, mode + state machine
components/
Sidebar.tsx conversation list with inline search
Thread.tsx message thread, day-grouped, word-wrapped
Composer.tsx reply input
StatusBar.tsx account, listen, mode, hint bar
ReactionPicker.tsx inline emoji picker with search
NewConversation.tsx contact-search modal
TemplatePicker.tsx quick-reply template selection
Help.tsx key reference overlay
lib/
allman.ts file-store reader + allman binary shell-outs
bundled-bin.ts extracts embedded allman binary on first run
types.ts message / conversation / event shapes
format.ts relativeTime, dayLabel, color hashing
emoji-data.ts searchable emoji database
templates.ts template loading and variable substitution

The TUI is modal — what your keys mean depends on which mode you’re in. The current mode is shown in the status bar.

ModeWhat you can do
browseNavigate conversations, jump into other modes
searchFilter the sidebar by name, slug, or headline
composeType a reply, Enter to send, Esc to cancel
newSearch contacts, pick one to open or draft
commandType a command palette command
reactionPickPick an emoji reaction for the selected message
templatePickChoose a quick-reply template
helpFull keybinding reference

At runtime, the TUI looks for the allman binary in this order:

  1. ALLMAN_BIN environment variable
  2. The bundled binary embedded in dist/allman-tui (production builds)
  3. allman on PATH (dev mode)

ALLMAN_STORE env, otherwise always $HOME/.allman. If missing or empty, the TUI prompts you to run allman login.