Skip to main content

Crate scrin_widgets

Crate scrin_widgets 

Source
Expand description

§scrin-widgets

scrin-widgets is a plug-and-play Rust widget library for building Scrin-style TUIs with Scrin. It ships animated Aisling effects, ambient glyph fields, glowing gauges, signal panels, data surfaces, and frame-aware helpers that can be dropped into a normal Scrin app.

§Install

From this repo:

[dependencies]
scrin-widgets = { path = "." }

From crates.io:

[dependencies]
scrin-widgets = "0.2.4"

This release targets scrin = "0.1.83".

§Quick Use

use scrin::{Frame, widgets::{Paragraph, Widget}};
use scrin_widgets::{AislingExt, AislingPalette};

fn draw(frame: &mut Frame<'_>, tick: u64) {
    let area = frame.area();
    let palette = AislingPalette::dream();
    let block = palette.block("Aisling");
    let inner = block.inner(area);
    let buffer = frame.buffer();

    block.render(buffer, area);
    Paragraph::new("any Scrin widget can shimmer")
        .aisling()
        .tick(tick)
        .render(buffer, inner);
}

§Scrin 0.1.83 Integration

AislingPalette now bridges directly into Scrin’s theme layer:

use scrin::theme::{Theme, ThemeTokens};
use scrin_widgets::AislingPalette;

let palette = AislingPalette::cypherpunk();
let tokens: ThemeTokens = palette.into();
let theme: Theme = palette.theme();
let block = palette.block("theme-backed panel");

StreamPanel, List, TabBar, and Table include hit_regions(...) and render_with_interaction(...) helpers for Scrin frame metadata. These render through Frame, register HitRegions, and mark their areas dirty for presentation strategies such as PresentStrategy::MarkedDirty.

§Included Widgets

Aisling<W> wraps any Scrin Widget and applies animated shimmer, scanline, and edge-glow effects after the widget renders.

GlyphRain renders a deterministic matrix-like field for backgrounds and data streams.

NebulaGauge renders a glowing progress meter with a flowing fill.

SignalPanel renders a compact status panel with animated signal bars.

FlickerPanel renders text with per-character glitch and flicker effects.

Waveform renders an animated oscilloscope display (sine, square, sawtooth, triangle waves).

PulseRing renders expanding concentric rings from the center of an area.

Radar renders a rotating radar sweep with a fade trail.

OrbField renders floating animated particles (orbs).

NeonBorder renders an animated color-cycling border around any block.

StreamPanel renders streaming logs/code with optional line numbers and follow-tail behavior.

SplitPane computes horizontal or vertical panes with optional dividers.

List, TabBar, and Table render selectable data/navigation surfaces and can emit Scrin interaction metadata.

Sparkline, Gauge, Paragraph, StatusBar, and Bordered provide compact utility surfaces for dashboards and examples.

§Examples

Run a static preview:

cargo run --example basic

Run the animated showcase:

cargo run --example showcase

Run the animated void orchard:

cargo run --example void_orchard

Run the animated starforge panel:

cargo run --example starforge

Run the full interactive showcase (all widgets, tabs, overlay):

cargo run --example showcase_all

In the showcase: 1-4 switch tabs, Tab/BackTab cycle, O toggles overlay, q/Esc quits.

Run the Scrin 0.1.83 flow demo:

cargo run --example scrin_flow

The flow demo shows TerminalOptions, PresentStrategy::MarkedDirty, frame diagnostics, palette/theme conversion, and interaction metadata helpers in one app.

§Package Hygiene

The crate manifest uses a Cargo package allow-list: Cargo.toml, README.md, src/**, and examples/**. Local session artifacts, build outputs, and other workspace files are not uploaded to crates.io.

Re-exports§

pub use scrin;

Modules§

prelude
Common imports for apps that want the Scrin widget set plus Scrin.

Structs§

Aisling
Wraps any Scrin widget with an Aisling post-render effect.
AislingEffect
A composable post-render effect that can be applied to any Scrin buffer area.
AislingPalette
The default color system used by Aisling effects and bundled widgets.
Bordered
A simple bordered container with a title. Renders a block border and exposes the inner area for composing other widgets.
FlickerPanel
A text panel with per-character flicker and glitch effects.
Gauge
A simple utilitarian progress bar (no animation, clean display).
GlyphRain
A deterministic matrix/rain field for ambient Scrin backgrounds.
List
A scrollable list with item selection highlighting.
NebulaGauge
A compact progress gauge with a flowing nebula fill.
NeonBorder
An animated neon border that cycles colors around a block.
OrbField
Floating animated orbs / particles.
Paragraph
A scrollable text paragraph with word wrapping.
PulseRing
An animated expanding concentric ring effect.
Radar
A rotating radar sweep with a fade trail.
SignalPanel
A bordered status panel with animated signal bars.
Sparkline
An inline sparkline / mini bar chart.
SplitPane
Computes two sub-areas from a parent area with a ratio and optional divider.
StatusBar
A multi-section horizontal status bar.
StatusSection
A section within a status bar.
StreamPanel
A streaming log or code output panel with auto-scroll and optional line numbers.
TabBar
A horizontal tab bar with a selected tab indicator.
Table
A data table with column headers, rows, and optional row selection.
Waveform
An animated oscilloscope / waveform display.

Enums§

Align
Alignment for a status bar section.
SplitDirection
Direction for a split pane.
WaveType

Traits§

AislingExt
Extension trait for calling .aisling() on any Scrin widget.