Skip to content

newsboat

Batch 8 (readers / browsers / hierarchical-navigation TUIs).

newsboat is the actively-maintained fork of Newsbeuter — a keyboard-driven RSS/Atom reader that lives entirely in the terminal. Its interaction model is a clean three-level hierarchy: a feed list (each feed showing its unread count), an article list for the selected feed (each headline marked read/unread), and an article reader that renders the entry with a built-in HTML-to-text renderer — no browser launch needed for text-only entries. It carries a filter-query language (“filter articles out based on title, author, contents”) and the ability to aggregate articles into meta-feeds by arbitrary criteria (“query feeds”), plus macros that chain action sequences into two-keystroke commands. UI rendering is via STFL (the project maintains its own fork since upstream is inactive); storage is SQLite.

  • The list → item → reader hierarchy is the canonical reader IA. This is the same drill-in/back-out shape as hackernews-TUI but framed as a feed reader: a top-level index, a per-index item column, and a focused reading pane. KN-86’s bare-deck tabs (STATUS / CIPHER / LAMBDA / LINK / SYS) and any cart presenting a catalog of items → item detail should follow this exact 3-tier model. The reader pane is where the KN-86 in-runtime pager lives.
  • Unread-count badges + per-item read marks. Each feed shows a live unread count; each article carries a read/unread mark. This “summary count at the parent level, per-item state at the child level” pattern is directly portable to KN-86: a mission board showing “3 NEW” per cart domain, a LINK tab showing unread-message counts, a phase chain showing completed/pending markers. The rollup-count-at-parent / mark-at-child convention is the takeaway.
  • Built-in HTML-to-text renderer = the reader-mode engine. newsboat refuses to shell to a browser; it renders entries to clean terminal text in-app. KN-86 has the same constraint by necessity (no browser on-device). The HTML→text renderer is the reference for how KN-86 should turn any structured source (cart-supplied long-form content, message bodies, lore fragments) into 80-column-wrapped, glyph-only reading text.
  • Filter-query language as a cart/runtime affordance. newsboat’s filter expressions (“title contains X and author = Y”) and query-feed aggregation are a lightweight, declarative selection DSL over a flat record set. KN-86’s mission board generates contracts from cart templates seeded by deck state — a small filter grammar over the available-mission set (“show only contracts above reputation N in domain D”) is the same idea, and a query-feed-style saved view is a natural SYS-tab affordance.
  • Macros = two-keystroke action chains. On the constrained Ferris Sweep keyboard, the ability to bind a multi-step action to a short chord is valuable; newsboat’s macro model (a key prefix then a macro key) is a reference for KN-86 operator shortcuts.

newsboat already ships and is widely used in pure monochrome terminals; almost nothing here depends on color. Adaptations for KN-86 amber-on-black:

  • Unread badge via bracketed count + leading glyph, not color. Render Feed Name (12) with the count right-aligned, and prefix unread articles with a leading (read = or ). The state reads from glyph + position, never hue. This is the single-color form of the unread badge.
  • Column lists via fixed-width fields + box-drawing separators. The feed/article columns lay out as fixed-width fields (mark column | title | meta column) separated by CP437 verticals (), so structure comes from alignment, not tint.
  • Selected row via inversion. Same convention as the rest of KN-86 — the focused row inverts to black-on-amber.
  • Reader pane reflow. The HTML→text renderer must hard-wrap to the 80-column content area (Rows 1–23 per Canonical Hardware Specification) and represent emphasis/links with glyph markers (*bold*, numbered [1] links à la hackernews-TUI) rather than color or attributes the panel may not carry.
  • STFL is a dated widget library (the project forked it because upstream died); not a dependency candidate for KN-86. The value is the interaction model and IA, not the toolkit — study the reader hierarchy and unread-badge convention, not STFL.
  • Cross-link hackernews-TUI — the sibling reader in this batch with the same list→item→reader hierarchy and back-navigation; newsboat adds the unread-badge and filter-query dimensions.
  • Cross-link netwatch — for the rollup-count-as-glyph and sparkline-on-the-grid conventions; both argue for inline glyph-based status rather than color.
  • Cross-link bookokrat — for the reading-pane / reader-mode treatment that the article reader here previews.