Skip to main content

Component · Data

Log Stream

Tail-follow chip with timestamp/source/level recipe.

Kind
widget
Input
interactive
Canvas
120×40

Live preview

Loading terminal preview.

Static terminal poster. Choose Run live to start the Rust demo.

Ghosttylog-stream/follow
Loading terminal poster…
○ loading posterNo input — rendered state only
Log Stream · exact mounted Rust story

01 · Purpose

What it is for

Tail-follow chip with timestamp/source/level recipe.

Best fit: Data · data · widget

02 · Behavior

What the mounted story proves

  1. 01

    LogStream

    Representative 120×40 terminal state.

  2. 02

    Passive paint

    No keyboard or pointer action is claimed by this representative story.

  3. 03

    Evidence stays explicit

    1 covered · 10 partial · 5 missing axes.

03 · Implement

Install, then start from exact code

Install

cargo add termrock --git https://github.com/tailrocks/termrock.git --rev 5283c2acf9154d0cfcd37b1ffe821c00faf90ea2

Add TermRock once. Keep domain effects in the host application.

Minimal implementation

Exact Rust setup used by log-stream/follow.

Open to load code.

04 · Adapt

Variants and composition

Variants

Use the preview Variant menu when alternate registered stories exist. Each selection mounts a fresh configuration.

Composition

Data · data · widget

05 · Reference

API, tokens, accessibility

API

LogStreamOpen source ↗

Tokens

DesignSystemInspect exact story code for roles and capability projection.

Accessibility

Input contract mountedNo input claim in the representative story.

Contract

Evidence in progress1/23 axes covered

06 · Go deeper

Advanced guidance

Authored implementation guidance

O(visible) paint over a consumer-owned line projection. TermRock owns scroll offset, follow/detach chrome, search/level filters, selection/bookmarks, and line recipes — not the history buffer.

When to use / when not

Use LogStreamPrefer
Live/tail logs (stern/k9s-class)—
Multi-source projected windows—
Single local append+evict bufferLogPane (project via log_lines_from_plain)
Structured k8s/agent eventsEventStream
Chat/agent turnsTranscript
Chronological recipesTimeline

Outcomes

  • Ignored
  • Scrolled { offset } — moved while already pinned
  • Detach / Follow — left or re-attached to the tail
  • SelectionChanged { ids } — multi-select
  • Copy { text } / Export { text } — host owns clipboard/file I/O
  • BookmarkToggled { id, on }
  • SearchChanged / LevelFilter / HScrolled / Cancelled / AckDropped

Focus law

ConcernOwner
Surface focusHost / InteractionScene
Scroll + follow + unreadLogStreamState → ScrollAreaState
Line buffer / history boundConsumer (or LogPane)
Copy / export side effectsConsumer

Recipes and wrap

RecipeLayout
Detailed (default)timestamp · source · severity · body
Compactseverity + body
WrapBehavior
Clip (default)h-scroll with h/l
Wrapsoft-wrap (toggle w)

Non-color

  • Levels: i/!/x or ASCII I/W/E / letters TDIWE
  • Follow chip: ↓ follow / v follow; unread N new
  • Dropped / batch / reconnect on chip or banner
  • Empty: ∅ / [ ]
  • Bookmark: ★ / *
  • Cursor gutter: › / >

Intents and product chords

default_log_stream_intent — j/k, arrows, Home/End, page (no Space).

ChordAction
fToggle follow
SpaceMulti-select
/Search
[Level floor
mBookmark
cCopy
C-eExport filtered
bAck drop/reconnect
w / dWrap / recipe

Responsive

WidthLayout
≥ 36detailed timestamp + source
16–35compact severity + body
< 16body only
height ≥ 2follow / unread / filter chip
Ownership boundary

TermRock owns reusable terminal rendering and interaction state. The host owns domain data, policy, persistence, authorization, and side effects.

Evidence status

1 covered, 10 partial, and 5 missing contract axes. Missing evidence is not a behavior claim.