← back

rustamp | updates
Jan 20, 2026

rustamp-iced

I started by giving rustamp a Death Stranding-inspired HUD in Iced. The look stuck: mono typography, amber tags, cyan highlights, and layered panels. After the first iteration, it was obvious this shouldn't be a one-off. I wanted to reuse the same components in other Rust apps without copy-pasting UI glue everywhere.

rustamp-tui

So I split the HUD pieces into a small crate, rustamp-iced-ui, and wired rustamp-iced to consume it as an external path dependency. The result is a reusable set of components with the same visual language, plus fewer lifetime gymnastics in the app layer.

What changed

The components

The crate is intentionally small: a theme struct and a few building blocks.

That is enough to build a DS-style surface without embedding styling logic in every view function.

Why the API looks the way it does

Iced's style closures and widget builders can be picky about lifetimes. Instead of pushing those constraints into the app, the component helpers take a HudTheme by value. HudTheme is Copy-friendly, and that sidesteps a lot of lifetime noise when composing UI.

Example usage in the app layer:

use rustamp_iced_ui::{components as hud, HudTheme};

let theme = HudTheme::default();

let header = hud::header_bar(
    theme,
    header_left.into(),
    header_right.into(),
);

let status = hud::status_bar_text(theme, help_text, right_text);