Skip to Content
ftui-widgetsCatalog (80+)

Widget catalog

This is the A-Z index of widgets shipping in ftui-widgets. Every widget listed below has a concrete implementation in the tree — nothing is planned or placeholder. File and line references point to the primary struct or pub fn render declaration.

For the trait contracts these widgets implement, see traits. For the mental model of how widgets fit into the render pipeline, see overview. The flagship widgets (command palette, virtualized list, table, tree, modal stack) have their own deep-dive pages linked at the end.

“Stateful?” means the widget implements StatefulWidget and requires you to carry a matching State type on your model. “No” means the widget is pure Widget — fire and forget.

Containers and layout

Widgets whose primary job is to house other widgets or allocate space.

WidgetStateful?SourceOne-line purposeNotable trick
BlockNoblock.rs:93 Borders, titles, padding wrapper9 border styles (thin / thick / double / rounded / block / …)
PanelNopanel.rs:33 Titlebar + shadow + optional borderDrop shadow with adjustable opacity
GroupNogroup.rs:7 Logical grouping containerTransparent composition; no rendering of its own
AlignNoalign.rs:20 Horizontal / vertical alignment wrapperUses measured intrinsic size to centre or justify
PaddingNopadding.rs:28 Inset padding (top / right / bottom / left)Zero-alloc: just shrinks the rect
ColumnsNocolumns.rs:40 Multi-column layout with flex ratiosColumn widths resolve via the layout constraint solver
RuleNorule.rs:30 Horizontal / vertical separator lineInline label support (”── Section ──“)
CachedYescached.rs:68 Memoises a widget’s rendering by keyFnKey / HashKey / NoCacheKey strategies
PrettyNopretty.rs:15 Pretty-print structured data (debug, JSON-ish)Works on any Debug type
LayoutNolayout.rs Widget-facing re-export of ftui-layout splittersBacked by the constraint solver; see layout

Text and display

Widgets that render text, glyphs, or status indicators.

WidgetStateful?SourceOne-line purposeNotable trick
ParagraphNoparagraph.rs:35 Multi-line styled text with word-wrapSpan-aware wrap preserves per-range styling
HelpYeshelp.rs:147 Contextual keybinding help overlayHistory ring + help index for discoverability
BadgeNobadge.rs:20 Status / priority pillIntrinsic-sizes to content
EmojiNoemoji.rs:20 Emoji picker / shortcode resolverWidth-aware (wide emoji take 2 cells)
StatusLineNostatus_line.rs:40 Multi-segment status footerSegments negotiate width when crowded
GlowingTextNoftui-extras Animated gradient headings (extras)Lives in ftui-extras; feature-gated

Selection and navigation

Widgets where the user picks something.

WidgetStateful?SourceOne-line purposeNotable trick
ListYeslist.rs:76 Single-column list with selectionRender clamps offset to keep selected in view
TableYestable.rs:78 Multi-column table with row / cell selectionFull theming via TableTheme; see table
TabsYestabs.rs:178 Tab bar with active selectionOverflow behaviour: truncate, scroll, or wrap
TreeYestree.rs:304 Hierarchical expand / collapseLazy-load hooks; see tree
FilePickerYesfile_picker.rs:72 File browser with path navigationBreadcrumb trail, filter predicates
CommandPaletteYescommand_palette/mod.rs Searchable command launcherBayesian evidence ledger; see command palette
PaginatorNopaginator.rs:37 Page navigation control (prev / next / jump)Intrinsic sizes based on total page count

Input widgets

Widgets that capture keystrokes.

WidgetStateful?SourceOne-line purposeNotable trick
Input (TextInput)Noinput.rs:142 Single-line text inputStateless — parent holds the String, cursor reported to frame
TextareaNotextarea.rs:94 Multi-line editor with soft-wrapIntegrates with the rope editor

Both are documented on input + textarea.

Progress and indicators

Widgets that show progress, activity, or measurements.

WidgetStateful?SourceOne-line purposeNotable trick
ProgressNoprogress.rs:60 Progress bar with % fill, labelAdaptive fill glyph under degradation
SparklineNosparkline.rs:30 Inline spark graphUses block glyphs ▁▂▃▄▅▆▇█ for 8-level resolution
SpinnerNospinner.rs:32 Animated loading spinner8+ animation frame families
ScrollbarYesscrollbar.rs:85 Vertical / horizontal scrollbarThumb size scales with viewport:content ratio
StopwatchNostopwatch.rs:32 Elapsed-time displayMonotonic; resistant to wall-clock jumps
TimerNotimer.rs:20 Countdown displaySame plumbing as Stopwatch, inverted

Overlays and modals

Widgets that sit on top of other content.

WidgetStateful?SourceOne-line purposeNotable trick
ModalYesmodal/container.rs:47 Overlay dialog with backdropEntrance / exit animations; see modal stack
DialogYesmodal/dialog.rs:88 Pre-built dialog (OK / Cancel / custom)Buttons auto-register focus nodes
ToastYestoast.rs:105 Transient notificationEntrance / exit animation; auto-dismiss
NotificationQueueYesnotification_queue.rs:85 Priority queue of toastsCollapses redundant toasts by dedup key
PopoverNopopover.rs:35 Anchored floating contentAuto-flip when hitting viewport edge

Dev and diagnostics

Widgets you reach for when something is weird.

WidgetStateful?SourceOne-line purposeNotable trick
InspectorYesinspector.rs:283 Overlay showing widget tree, hit-test regions, a11y tree100K+ LOC of introspection in a single widget
DebugOverlayYesdebug_overlay.rs:92 Performance metrics, frame timingFPS / budget / dirty-row stats in situ
ConstraintOverlayYesconstraint_overlay.rs:115 Visualises layout constraints and allocationsShows every Rect layout computed this frame
LogViewerYeslog_viewer.rs:193 Scrollable log display with search / filteringRing-buffer backing with regex filter
HistoryPanelYeshistory_panel.rs:54 Undo / redo history visualisationShows diverging branches
DecisionCardNodecision_card.rs:28 Progressive-disclosure decision UIRenders a Bayesian evidence ledger inline
VoiDebugOverlayYesvoi_debug_overlay.rs:178 Visualises Bayesian posteriors, evidence ledgersUsed to audit VOI sampling
DriftVisualizationYesdrift_visualization.rs:56 Per-domain confidence sparklinesTracks conformal prediction drift over time
JsonViewNojson_view.rs:29 Syntax-highlighted JSON treeCollapsible nodes, incremental render
ErrorBoundaryYeserror_boundary.rs:67 Catches / renders child panicsIsolates failure to a subtree
ValidationErrorYesvalidation_error.rs:77 Animated inline validation errorShake + fade in / fade out
LayoutDebuggerNolayout_debugger.rs:82 Visualises computed layout decisionsComplements ConstraintOverlay
DiagnosticsNodiagnostics.rs Self-check panelAggregates doctor-frankentui style checks

All observability widgets are profiled on observability widgets.

Virtualised and large-scale

Widgets that must render 100k+ items without dying.

WidgetStateful?SourceOne-line purposeNotable trick
VirtualizedListYesvirtualized.rs:45 O(visible) rendering of huge listsFenwick tree + Bayesian height predictor; see virtualized list

Focus and modal infrastructure

Not widgets in the render sense, but the plumbing every interactive widget relies on.

ModuleSourcePurpose
FocusManagerfocus/manager.rs:74 Tracks current focus, trap stack, Tab / Shift+Tab cycles
FocusGraphfocus/graph.rs:112 Directed graph of focusable nodes + spatial edges
ModalStackmodal/stack.rs:233 Push / pop modals; backdrop config; animation phases
HelpIndexhelp_index.rs Searchable index of keybindings
HelpRegistryhelp_registry.rs Registers per-widget help metadata
HintRankerhint_ranker.rs Ranks hints via Bayesian prior-odds

Supporting data structures

Not widgets, but shipped in the same crate because widgets depend on them.

ModuleSourcePurpose
Fenwickfenwick.rs Binary-indexed tree for O(log n) prefix sums (used by VirtualizedList)
HeightPredictorheight_predictor.rs Bayesian predictor with conformal bounds for unmeasured item heights
AdaptiveRadixadaptive_radix.rs Adaptive radix tree for command-palette indexing
EliasFanoelias_fano.rs Compressed monotone integer sequences
LOUDSlouds.rs Succinct tree encoding for fast navigation
LogRinglog_ring.rs Bounded ring buffer for LogViewer
MeasureCachemeasure_cache.rs Memoised intrinsic-size measurements
Measurablemeasure.rs Trait for widgets that can report their preferred size
UndoSupportundo_support.rs Generic undo / redo for widgets that opt in
Drag / KeyboardDragdrag.rs , keyboard_drag.rs Pointer + keyboard drag state machines
Choreographychoreography.rs Animation sequencing primitives

Deep-dive pages

The widgets below have dedicated pages because each is genuinely novel: