glyph

module
v0.36.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 25, 2026 License: MIT

README

glyph

Beautifully designed components for the terminal. Yours to copy, paste, own.

test Go Reference Version

glyph reel

A copy-paste component library for terminal UIs. Install the CLI, run glyph add chat-thread, and a chat surface drops into your repo as plain Go source you own. No glyph runtime dependency. No version pinning. No magic.

The model is shadcn/ui, ported to the terminal. The components are built for Bubble Tea in v0.1. Adapters for ratatui, Textual, and Ink follow.

Install

go install github.com/truffle-dev/glyph/cmd/glyph@latest
cd path/to/your/project
glyph init
glyph add chat-thread

That's the whole onboarding. The third command writes Go files into internal/ui/ (or wherever your glyph.json aliases say) and runs go get for the upstream libraries the component needs.

Components

Twenty-three components ship today: sixteen primitives from v0.1 and seven input, overlay, and data-display components from v0.2. All targeted at Bubble Tea; the registry shape is framework-agnostic and adapters for other frames are in progress.

v0.1 — primitives
Component Description
theme Token palette every component reads from. Edit one file to retheme an entire app.
chat-bubble Role-aware speech bubble with width-aware wrapping. user / assistant / system / tool.
chat-input Single-line chat prompt with placeholder, cursor, focus state, submit and cancel bindings.
chat-thread Vertically scrolling conversation surface. Composes chat-bubble. Arrow keys, PgUp/PgDn, Home/End.
command-palette Filterable modal command picker. Substring matcher by default; swap in your own.
markdown-viewer Scrollable terminal markdown. Headings, paragraphs, bullets, blockquotes, code, links.
log-stream Bounded color-coded log view that tails like tail -f. Level filter, capacity ring.
diff-view Unified-diff renderer with line numbers, color-coded additions and removals. Ships with a ParseUnified helper.
notification-toast Stacked dismissible notifications with level-aware coloring and per-toast TTLs.
status-bar Single-line three-segment status bar. Left fills from left, right anchors right, truncates left first under pressure.
spinner Animated single-glyph indicator with an optional label. Five styles: dots, line, arc, pulse, bounce.
tabs Horizontal labeled tab row primitive. Arrow keys or Tab cycle with wrap. Parent owns the panels below.
panel Bordered container with optional title and footer. The workhorse layout primitive: wrap any view in one.
list Vertical selectable list with cursor highlight, optional hints, disabled items, and internal scrolling.
progress-bar Determinate progress indicator with an optional label and percentage readout. Color- and glyph-tunable.
key-hints Compact footer of key-and-description pairs. The bottom-row cheatsheet every TUI grows into.
v0.2 — form, overlay, data
Component Description
text-input Multi-line text input with placeholder, focus, 2D cursor, Alt+Left/Right word jumps, Ctrl-U/K kill bindings. Enter inserts a newline; Ctrl-D commits.
select Bounded single-choice popover with optional substring typeahead, scroll window, hint column, and inlaid title.
modal Border-with-title overlay container with body, footer, and a configurable close key. Pairs with lipgloss.Place.
confirmation Two-button yes/no prompt with focus-managed buttons, single-keystroke y/n shortcuts, dangerous-action styling, and prompt reflow.
kbd Stateless keycap atom. Renders ctrl+k as ⌃ + K, enter as , and so on. Use inside hint rows, command palettes, modals.
table Sortable, scrollable data grid with column alignment, numeric-aware sort, cursor highlight, optional row selection, and PgUp/PgDn/Home/End.
stat-card Dashboard metric tile. Label, value, trend glyph, delta, sublabel, optional emphasis treatment.

Every screenshot below is a recording of the component's own story/ binary running in a real terminal. No mockups, no Figma, no compositing — the same Bubble Tea output you get after glyph add <name>.

theme
theme — Token palette every component reads from.chat-bubble
chat-bubble — Role-aware speech bubble with width-aware wrapping.chat-input
chat-input — Single-line chat prompt with placeholder, cursor, focus.chat-thread
chat-thread — Vertically scrolling conversation surface.command-palette
command-palette — Filterable modal command picker.markdown-viewer
markdown-viewer — Scrollable terminal markdown.log-stream
log-stream — Bounded color-coded log view that tails like tail -f.diff-view
diff-view — Unified-diff renderer with line numbers.notification-toast
notification-toast — Stacked dismissible notifications.status-bar
status-bar — Single-line three-segment status bar.spinner
spinner — Animated single-glyph indicator. Five styles.tabs
tabs — Horizontal labeled tab row primitive.panel
panel — Bordered container with optional title and footer.list
list — Vertical selectable list with cursor highlight.progress-bar
progress-bar — Determinate progress indicator.key-hints
key-hints — Compact footer of key-and-description pairs.text-input
text-input — Multi-line text input with 2D cursor, word jumps, kill-to-cursor.select
select — Single-choice popover with optional typeahead filter.modal
modal — Bordered overlay container with title, body, footer, and a close key.confirmation
confirmation — Two-button yes/no prompt with focus-managed buttons.kbd
kbd — Stateless keycap atom: ctrl+k as ⌃ + K, chord and sequence helpers.table
table — Sortable scrollable data grid with cursor, alignment, row selection.stat-card
stat-card — Dashboard tile: label, value, trend glyph, delta, sublabel.

Browse all twenty-three with live demos at truffleagent.com/glyph.

How it works

Glyph is two things: a CLI and a static registry.

The CLI reads a local glyph.json in your repo and resolves paths via aliases:

{
  "$schema": "https://truffleagent.com/glyph/schema/glyph.json",
  "frame": "bubbletea",
  "module": "github.com/your-org/your-app",
  "aliases": {
    "components": "internal/ui",
    "lib": "internal/uilib",
    "hooks": "internal/uihooks"
  },
  "theme": "default",
  "registry": "https://truffleagent.com/glyph/r"
}

glyph add chat-thread fetches truffleagent.com/glyph/r/chat-thread.json, walks the dependency graph (chat-thread depends on chat-bubble which depends on theme), and writes each file into the alias-resolved path. Import paths are rewritten so the files reference your module, not glyph's.

After install, the files are yours. Edit them. Refactor them. Delete the prompt prefix in chat-input.go and replace it with your project's logo. The library has no opinion.

Philosophy

The terminal is having a renaissance. Bubble Tea, ratatui, Textual, gum, lazygit, atuin, claude code — the list of TUIs people use daily is longer than it has been in a decade.

What's missing is a shared component vocabulary. Every team rewrites the chat surface, the command palette, the diff view, the status bar. Each rewrite is a little different, a little worse, and the team owes one more library upgrade for each one they import.

shadcn/ui solved this on the web by inverting the model. You don't import a library; you copy the source into your repo and own it. Updates are deliberate. Customization is direct. The library has no upgrade path because there is no library, only your code.

glyph applies the same shape to the terminal. Components are source files you copy. They reference a small theme module you also own. They have no runtime dependency on glyph. If glyph disappears, your app still works.

The rules that fall out of that bet:

  1. Copy, don't depend. Every component is downloadable as source. No glyph runtime dependency. Delete glyph after install and your app still works.
  2. One framework at a time. v0.1 is Bubble Tea. Adapters for ratatui, Textual, and Ink follow. We won't dilute the launch.
  3. Tokens, not hardcoded colors. Every component references theme.Default. Theming a whole app is one file change.
  4. Stories are tests are screenshots. A component without a story file doesn't ship. Stories drive the screenshot pipeline and the demo site equally.
  5. Quiet, not loud. No emojis, no marketing phrases, no exclamation marks. Earn attention with the work.

What's next

Twenty-three Bubble Tea components and the CLI ship today. The shape that follows:

  • v0.2 — finishing form, overlay, and data. Seven landed: text-input, select, modal, confirmation, kbd, table, stat-card. Still to come: code view with syntax highlighting (via chroma), file tree, breadcrumb.
  • v0.3 — first non-Bubble-Tea adapter. Likely ratatui (Rust), based on demand. The registry shape already encodes frame, so each component re-ships as a sibling source file with the same manifest contract.
  • v0.4 and beyond. Textual (Python) and Ink (TypeScript). The catalog grows, the registry shape stays.

The registry contract is stable. What grows is the catalog.

Demo site

truffleagent.com/glyph browses every component with a live SVG preview, the install command, the full source, and the JSON manifest.

nook — the IDE built on glyph

cmd/nook/ is a terminal-native AI IDE assembled from the catalog. Five panes, three Cursor-equivalent wedges: Ctrl+K inline edit, Ctrl+L multi-file composer, Tab ghost-text autocomplete. Single binary. Runs over SSH. Costs the AI calls and nothing else.

nook ghost-text tour

go install github.com/truffle-dev/glyph/cmd/nook@latest
export ANTHROPIC_API_KEY=sk-ant-...
nook .

The spec is at docs/nook/. The AI client is a thin two-tier wrapper (Haiku Fast, Sonnet Smart). Without the env var, the editor, picker, project search, git pane, and terminal still work — only the AI wedges go dark.

Run the examples locally

Four single-binary TUIs ship in examples/. Each one composes a real subset of the catalog into one application — they are how you learn what glyph looks like in your own app.

go run ./examples/showcase      # five tabs: chat, commands, markdown, logs, diff
go run ./examples/chat-cli      # agent-style chat REPL composing 13 components
go run ./examples/log-viewer    # journalctl-style live feed composing 9 components
go run ./examples/dashboard     # engagements control room composing 9 components

chat-cli puts a chat-input at the bottom, a chat-thread above it, a spinner inline while a reply is in flight, a status-bar with the current mode and message count, and pops a command-palette / modal+text-input / modal+confirmation / select on demand. log-viewer synthesizes a steady log feed across four sources and lets you filter by level (tabs), source (select popover), and substring (text-input prompt). dashboard swaps its stat-card row and table columns across three tabs (engagements, throughput, revenue), opens a filter modal over a text-input prompt, and fires a toast on row "open." All four binaries double as headless test surfaces with a main_test.go that exercises every binding through model.Update.

Each component also has its own runnable story/ binary:

go run -tags glyph_story ./components/select/story/

Contributing

See CONTRIBUTING.md. The fastest first contribution is a new component: copy components/chat-bubble/ as a template, replace the body, add a story file, and open a PR.

Credits

The shape of glyph is borrowed from shadcn/ui, which solved this distribution problem for React. The terminal needed the same answer.

Built on Bubble Tea by Charm.

License

MIT

Directories

Path Synopsis
cmd
glyph command
Package main is the glyph CLI entry point.
Package main is the glyph CLI entry point.
nook command
Command nook is a terminal-native AI IDE built from glyph components.
Command nook is a terminal-native AI IDE built from glyph components.
nook/internal/ai
Package ai drives the AI wedges in nook by spawning the user's existing Claude Code CLI as a subprocess.
Package ai drives the AI wedges in nook by spawning the user's existing Claude Code CLI as a subprocess.
nook/internal/aihistory
Package aihistory keeps a small per-file conversation buffer for the composer wedge.
Package aihistory keeps a small per-file conversation buffer for the composer wedge.
nook/internal/airules
Package airules loads repo-level AI instructions from a conventional dotfile at the workspace root.
Package airules loads repo-level AI instructions from a conventional dotfile at the workspace root.
nook/internal/breakpoints
Package breakpoints stores per-file breakpoint state — a set of 0-based line indices keyed by absolute file path.
Package breakpoints stores per-file breakpoint state — a set of 0-based line indices keyed by absolute file path.
nook/internal/bufman
Package bufman owns the open-buffer collection.
Package bufman owns the open-buffer collection.
nook/internal/clip
Package clip is nook's minimal clipboard.
Package clip is nook's minimal clipboard.
nook/internal/codeaction
Package codeaction renders nook's LSP code-action picker — a small bordered menu listing the actions the language server proposed at the cursor.
Package codeaction renders nook's LSP code-action picker — a small bordered menu listing the actions the language server proposed at the cursor.
nook/internal/complete
Package complete renders nook's LSP completion popup — a small menu that lists labeled completion items, lets the user move through them with the arrow keys, and surfaces the chosen item on Enter.
Package complete renders nook's LSP completion popup — a small menu that lists labeled completion items, lets the user move through them with the arrow keys, and surfaces the chosen item on Enter.
nook/internal/completedoc
Package completedoc renders nook's LSP completion documentation side-panel — a small bordered box that sits beside the completion popup and shows the resolved documentation for whichever item is highlighted.
Package completedoc renders nook's LSP completion documentation side-panel — a small bordered box that sits beside the completion popup and shows the resolved documentation for whichever item is highlighted.
nook/internal/composer
Package composer is the multi-file Cursor-Composer-style side panel.
Package composer is the multi-file Cursor-Composer-style side panel.
nook/internal/config
Package config loads nook's user configuration from ~/.config/nook/config.toml.
Package config loads nook's user configuration from ~/.config/nook/config.toml.
nook/internal/dap
Package dap drives a debug-adapter subprocess (delve via `dlv dap` by default) over stdio using the Debug Adapter Protocol.
Package dap drives a debug-adapter subprocess (delve via `dlv dap` by default) over stdio using the Debug Adapter Protocol.
nook/internal/diagnostics
Package diagnostics renders nook's workspace-wide problems panel.
Package diagnostics renders nook's workspace-wide problems panel.
nook/internal/dochi
Package dochi turns LSP textDocument/documentHighlight responses into a shape the editor can paint without re-importing the protocol package.
Package dochi turns LSP textDocument/documentHighlight responses into a shape the editor can paint without re-importing the protocol package.
nook/internal/edit
Package edit implements Cmd-K-style inline AI edits.
Package edit implements Cmd-K-style inline AI edits.
nook/internal/editor
Package editor is nook's minimal file viewer/editor pane.
Package editor is nook's minimal file viewer/editor pane.
nook/internal/filetree
Package filetree is nook's left-side file-tree pane.
Package filetree is nook's left-side file-tree pane.
nook/internal/finder
Package finder is nook's in-file find/replace overlay.
Package finder is nook's in-file find/replace overlay.
nook/internal/findrefs
Package findrefs maps LSP textDocument/references results into a multibuffer fragment list.
Package findrefs maps LSP textDocument/references results into a multibuffer fragment list.
nook/internal/ghost
Package ghost owns nook's inline autocomplete state: idle-trigger debouncing, AI request lifecycle, and the rendered "ghost" text that floats after the cursor until accepted or dismissed.
Package ghost owns nook's inline autocomplete state: idle-trigger debouncing, AI request lifecycle, and the rendered "ghost" text that floats after the cursor until accepted or dismissed.
nook/internal/git
Package git wraps the local git CLI for nook's git pane.
Package git wraps the local git CLI for nook's git pane.
nook/internal/gitgutter
Package gitgutter computes per-line diff markers (added / modified / deleted) for a file by shelling out to `git diff` against the index.
Package gitgutter computes per-line diff markers (added / modified / deleted) for a file by shelling out to `git diff` against the index.
nook/internal/help
Package help renders nook's full-keymap overlay.
Package help renders nook's full-keymap overlay.
nook/internal/highlight
Package highlight tokenizes source files into per-row styled spans for the editor pane.
Package highlight tokenizes source files into per-row styled spans for the editor pane.
nook/internal/hover
Package hover renders nook's LSP hover overlay — a small rounded-border box that displays whatever the language server returned for the symbol under the cursor.
Package hover renders nook's LSP hover overlay — a small rounded-border box that displays whatever the language server returned for the symbol under the cursor.
nook/internal/inlayhint
Package inlayhint defines the on-the-wire representation of LSP inlay hints and the message types the host uses to ferry hint results to the editor pane.
Package inlayhint defines the on-the-wire representation of LSP inlay hints and the message types the host uses to ferry hint results to the editor pane.
nook/internal/inlineblame
Package inlineblame computes per-line git blame for a file by shelling out to `git blame --porcelain`.
Package inlineblame computes per-line git blame for a file by shelling out to `git blame --porcelain`.
nook/internal/lookup
Package lookup turns LSP textDocument lookups (hover, definition) into async tea.Cmd factories.
Package lookup turns LSP textDocument lookups (hover, definition) into async tea.Cmd factories.
nook/internal/lsp
Package lsp drives a language-server subprocess (gopls by default) over stdio and surfaces textDocument/publishDiagnostics notifications as events the host can render.
Package lsp drives a language-server subprocess (gopls by default) over stdio and surfaces textDocument/publishDiagnostics notifications as events the host can render.
nook/internal/mdpreview
Package mdpreview is the nook side of the markdown preview pane.
Package mdpreview is the nook side of the markdown preview pane.
nook/internal/multibuffer
Package multibuffer renders fragments stitched from multiple files into one scrollable surface.
Package multibuffer renders fragments stitched from multiple files into one scrollable surface.
nook/internal/navhistory
Package navhistory implements a vim-style jump list for nook.
Package navhistory implements a vim-style jump list for nook.
nook/internal/outline
Package outline is the single-file document-symbol modal that nook opens on Ctrl+\.
Package outline is the single-file document-symbol modal that nook opens on Ctrl+\.
nook/internal/picker
Package picker is a fuzzy-filtered selection overlay for nook.
Package picker is a fuzzy-filtered selection overlay for nook.
nook/internal/rename
Package rename renders nook's symbol-rename prompt — a small modal that asks for the new identifier name and emits the value back to the host on Enter.
Package rename renders nook's symbol-rename prompt — a small modal that asks for the new identifier name and emits the value back to the host on Enter.
nook/internal/search
Package search runs ripgrep as a subprocess and streams matches back to the host model.
Package search runs ripgrep as a subprocess and streams matches back to the host model.
nook/internal/semtok
Package semtok decodes LSP textDocument/semanticTokens/full responses.
Package semtok decodes LSP textDocument/semanticTokens/full responses.
nook/internal/signature
Package signature renders nook's LSP signature-help overlay: a small floating box that shows the call signature of the function the cursor is inside, with the parameter that would receive the next argument highlighted.
Package signature renders nook's LSP signature-help overlay: a small floating box that shows the call signature of the function the cursor is inside, with the parameter that would receive the next argument highlighted.
nook/internal/snippets
Package snippets is nook's VSCode-compatible snippet engine.
Package snippets is nook's VSCode-compatible snippet engine.
nook/internal/symbolsearch
Package symbolsearch maps LSP workspace/symbol results into a multibuffer fragment list.
Package symbolsearch maps LSP workspace/symbol results into a multibuffer fragment list.
nook/internal/tabbar
Package tabbar renders the open-buffer strip above the editor surface.
Package tabbar renders the open-buffer strip above the editor surface.
nook/internal/tasks
Package tasks owns nook's project-task surface: the TOML loader at `.nook/tasks.toml`, the default task set inferred from a Go project's go.mod, the process supervisor that streams a running task's stdout and stderr into Bubble Tea messages, and the overlay pane that lets a user pick a task, watch its output, and kill it.
Package tasks owns nook's project-task surface: the TOML loader at `.nook/tasks.toml`, the default task set inferred from a Go project's go.mod, the process supervisor that streams a running task's stdout and stderr into Bubble Tea messages, and the overlay pane that lets a user pick a task, watch its output, and kill it.
nook/internal/term
Package term embeds a PTY-backed shell pane inside nook.
Package term embeds a PTY-backed shell pane inside nook.
nook/internal/welcome
Package welcome renders nook's first-run / empty-editor surface.
Package welcome renders nook's first-run / empty-editor surface.
components
breadcrumb
Package breadcrumb renders a path-style breadcrumb trail.
Package breadcrumb renders a path-style breadcrumb trail.
chat-bubble
Package chatbubble renders a role-aware speech bubble with width-aware wrap.
Package chatbubble renders a role-aware speech bubble with width-aware wrap.
chat-input
Package chatinput renders a single-line chat prompt with a placeholder, cursor, and submit/escape key bindings.
Package chatinput renders a single-line chat prompt with a placeholder, cursor, and submit/escape key bindings.
chat-thread
Package chatthread renders a vertically-stacked conversation of role-aware chat bubbles with viewport-style scrolling.
Package chatthread renders a vertically-stacked conversation of role-aware chat bubbles with viewport-style scrolling.
code-view
Package codeview renders a single block of source code with optional line numbers, gutter highlights, and a small built-in tokenizer that tints keywords, strings, numbers, and comments.
Package codeview renders a single block of source code with optional line numbers, gutter highlights, and a small built-in tokenizer that tints keywords, strings, numbers, and comments.
command-palette
Package commandpalette renders a fuzzy-filtered command picker as a modal surface.
Package commandpalette renders a fuzzy-filtered command picker as a modal surface.
confirmation
Package confirmation renders a two-button yes/no prompt with focus-managed buttons, single-keystroke y/n shortcuts, and dangerous-action styling.
Package confirmation renders a two-button yes/no prompt with focus-managed buttons, single-keystroke y/n shortcuts, and dangerous-action styling.
diff-view
Package diffview renders a unified diff as a color-coded, scrollable terminal block.
Package diffview renders a unified diff as a color-coded, scrollable terminal block.
editor
Package editor renders an editable multi-line text buffer with a 2D cursor, viewport scrolling, optional line-number gutter, undo/redo, and per-line syntax tint via codeview's tokenizer.
Package editor renders an editable multi-line text buffer with a 2D cursor, viewport scrolling, optional line-number gutter, undo/redo, and per-line syntax tint via codeview's tokenizer.
file-tree
Package filetree renders an interactive directory tree.
Package filetree renders an interactive directory tree.
find-bar
Package findbar renders an in-buffer search bar — the narrow query input that overlays an editor when the user hits Ctrl-F. It owns nothing but the query, the active match index, and the navigation buttons; the actual buffer-side search is performed by the consumer (FindMatches walks any "lines" string for plain or case-insensitive matches; if the consumer wants fuzzy or regex they wire their own).
Package findbar renders an in-buffer search bar — the narrow query input that overlays an editor when the user hits Ctrl-F. It owns nothing but the query, the active match index, and the navigation buttons; the actual buffer-side search is performed by the consumer (FindMatches walks any "lines" string for plain or case-insensitive matches; if the consumer wants fuzzy or regex they wire their own).
kbd
Package kbd renders single keystrokes and chords as terminal-styled keycap glyphs.
Package kbd renders single keystrokes and chords as terminal-styled keycap glyphs.
key-hints
Package keyhints renders a compact footer of "<key> <description>" pairs separated by a thin divider.
Package keyhints renders a compact footer of "<key> <description>" pairs separated by a thin divider.
list
Package list renders a vertical list of items with a single selected cursor.
Package list renders a vertical list of items with a single selected cursor.
log-stream
Package logstream renders a bounded, scrollable log view.
Package logstream renders a bounded, scrollable log view.
markdown-viewer
Package markdownviewer renders a small markdown subset to a styled terminal block with theme tokens.
Package markdownviewer renders a small markdown subset to a styled terminal block with theme tokens.
modal
Package modal renders a bordered overlay container with an optional inlaid title, framed body, optional footer, and a configurable close key.
Package modal renders a bordered overlay container with an optional inlaid title, framed body, optional footer, and a configurable close key.
notification-toast
Package notificationtoast renders a stack of dismissible, level-aware notifications.
Package notificationtoast renders a stack of dismissible, level-aware notifications.
panel
Package panel wraps arbitrary content in a bordered container with an optional title and footer.
Package panel wraps arbitrary content in a bordered container with an optional title and footer.
progress-bar
Package progressbar renders a determinate progress indicator with an optional label, percentage readout, and color-tunable fill.
Package progressbar renders a determinate progress indicator with an optional label, percentage readout, and color-tunable fill.
select
Package selectinput renders a bounded single-choice popover with an optional substring filter.
Package selectinput renders a bounded single-choice popover with an optional substring filter.
spinner
Package spinner renders a small animated glyph next to an optional label, the way an agent UI signals "working on it".
Package spinner renders a small animated glyph next to an optional label, the way an agent UI signals "working on it".
stat-card
Package statcard renders a dashboard metric tile: a single bordered card with a small uppercase label, a big bold value, and an optional trend row (glyph + delta + italic sublabel).
Package statcard renders a dashboard metric tile: a single bordered card with a small uppercase label, a big bold value, and an optional trend row (glyph + delta + italic sublabel).
status-bar
Package statusbar renders a single-line, three-segment status bar.
Package statusbar renders a single-line, three-segment status bar.
table
Package table renders a column-aligned data grid with sortable headers, keyboard navigation, internal scrolling, and optional row selection.
Package table renders a column-aligned data grid with sortable headers, keyboard navigation, internal scrolling, and optional row selection.
tabs
Package tabs renders a horizontal row of labeled tabs with one active label.
Package tabs renders a horizontal row of labeled tabs with one active label.
text-input
Package textinput renders a multi-line text input with a 2D cursor, placeholder, focus, word-jumps on Alt+Left/Right, and Ctrl-U to kill the current line up to the cursor.
Package textinput renders a multi-line text input with a 2D cursor, placeholder, focus, word-jumps on Alt+Left/Right, and Ctrl-U to kill the current line up to the cursor.
theme
Package theme provides the token palette every glyph component reads from.
Package theme provides the token palette every glyph component reads from.
examples
chat-cli command
Command chat-cli is a realistic agent-style chat REPL composed from thirteen glyph components.
Command chat-cli is a realistic agent-style chat REPL composed from thirteen glyph components.
code-editor command
code-editor is the proto-IDE end-to-end demo.
code-editor is the proto-IDE end-to-end demo.
dashboard command
dashboard is an "engagements" control room composed from nine glyph components: a tab row across the top, a four-card metric strip, a sortable engagement table in the center, a status-bar pinned to the bottom, a hint row below it, and a floating toast tray that fires on row selection.
dashboard is an "engagements" control room composed from nine glyph components: a tab row across the top, a four-card metric strip, a sortable engagement table in the center, a status-bar pinned to the bottom, a hint row below it, and a floating toast tray that fires on row selection.
file-explorer command
file-explorer is an IDE-style two-pane navigator composed from five glyph components: a file-tree on the left, a breadcrumb above a syntax-tinted code-view on the right, all wrapped in panels with a status-bar and key-hints pinned to the bottom.
file-explorer is an IDE-style two-pane navigator composed from five glyph components: a file-tree on the left, a breadcrumb above a syntax-tinted code-view on the right, all wrapped in panels with a status-bar and key-hints pinned to the bottom.
log-viewer command
Command log-viewer is a journalctl-style live log viewer composed from nine glyph components: log-stream, tabs, status-bar, key-hints, select, notification-toast, text-input, panel, and theme.
Command log-viewer is a journalctl-style live log viewer composed from nine glyph components: log-stream, tabs, status-bar, key-hints, select, notification-toast, text-input, panel, and theme.
reel command
Command reel is the glyph marketing demo: a self-playing TUI that walks through the library's headline components on a fixed timeline.
Command reel is the glyph marketing demo: a self-playing TUI that walks through the library's headline components on a fixed timeline.
showcase command
Command showcase is a single-binary demo: the chat, command-palette, markdown-viewer, log-stream, diff-view, notification-toast, and status-bar components composed into one navigable TUI.
Command showcase is a single-binary demo: the chat, command-palette, markdown-viewer, log-stream, diff-view, notification-toast, and status-bar components composed into one navigable TUI.
tools
build command
Build flattens components/*/*.json manifests into a registry tree under ./r.
Build flattens components/*/*.json manifests into a registry tree under ./r.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL