#ui-component #layout #standard #built #element #debugging #aspect-ratio #quick-start-guide #ramp #splash

pelican_ui_std

Standard UI tools and components built off Pelican UI of the RAMP stack

18 releases

0.2.17 Sep 23, 2025
0.2.16 Sep 22, 2025
0.2.8 Aug 28, 2025
0.1.2 Jun 16, 2025

#5 in #quick-start-guide


Used in 3 crates

BSD-3-Clause

1.5MB
4K SLoC

Pelican UI

Pelican UI is a lightweight, modular UI/UX crate built specifically for the RAMP stack — a Rust-first framework for building fast, interactive applications with clean architecture and high performance.

📚 Documentation

Full documentation is available at https://docs.rs/pelican-ui-std


lib.rs:

Pelican UI Standard provides a wide range of components, layouts, elements, utilities, and pages for building beautiful, consistently designed applications. You can download the starter template here.

Checkout the website for additional information, our Quick Start Guide for setting up your first app, and interact with the community if you have any questions!

At its core, Pelican UI Standard revolves around components, which are composed from layouts and elements. Every structure implementing the Component trait must meet a few requirements:

  • Its first element must implement Layout, ensuring correct management of positioning, sizing, and nested layouts.
  • It must implement OnEvent and derive Debug.

Components are built from elements, the lowest-level primitives such as Text, AspectRatioImage, and Circle, and can use different layouts like Column, [Row], and Stack to arrange them. Components are also often built from combining components.

Pelican UI Standard includes multiple Events used and triggered by its components, as well as configuration variables for platform detection such as IS_MOBILE and IS_WEB. Additional utilities like Timestamp and ElementID are also provided.

Beyond individual components, Pelican UI Standard ships with a few ready-to-use pages built entirely from its own system, including PelicanHome, Error, and Splash. These can be used directly or serve as references when creating custom pages.

App Page Example

#[derive(Debug, Component)]
pub struct FirstScreen(Stack, Page);
impl OnEvent for FirstScreen {}

impl AppPage for FirstScreen {
    fn has_nav(&self) -> bool { false }
    fn navigate(self: Box<Self>, _ctx: &mut Context, _index: usize) -> Result<Box<dyn AppPage>, Box<dyn AppPage>> { Err(self) }
}

impl FirstScreen {
    pub fn new(ctx: &mut Context) -> Self {
        let color = ctx.theme.colors.text.heading;
        let icon = Icon::new(ctx, "pelican_ui", color, 128.0);

        let font_size = ctx.theme.fonts.size;
        let text = Text::new(ctx, "Hello World!", TextStyle::Heading, font_size.h2, Align::Center);
        let subtext = ExpandableText::new(ctx, "First project loaded successfully.", TextStyle::Primary, font_size.md, Align::Center, None);

        let content = Content::new(ctx, Offset::Center, vec![Box::new(icon), Box::new(text), Box::new(subtext)]);

        let header = Header::home(ctx, "My Screen", None);

        FirstScreen(Stack::default(), Page::new(Some(header), content, None))
    }
}

Dependencies

~27–47MB
~686K SLoC