Slint Kit Documentation

Display

Skeleton for Slint

KitSkeleton · Slint Kit 0.3.0

Loading shape that reserves space for pending content.

Loading shape that reserves space for pending content.
Native app built from the example below.

Try the component

Download the complete project, extract it and run cargo run --locked in its folder. Rust 1.92+; Slint Kit 0.3.0 from crates.io. You can also copy the four files below.

Run the app to inspect this composition and resize its window.

ui/app.slint

export { KitFormValidation, HtmlInputKind, NumberInputFormat, KitInputConstraints, KitValidationResult, KitValidityState } from "@kit/kit.slint";
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitSkeleton, KitTheme, KitThemes } from "@kit/kit.slint";

export component App inherits Window {
    title: "KitSkeleton example";
    preferred-width: 420px;
    preferred-height: 200px;
    max-width: 100000px;
    max-height: 100000px;
    background: root.theme.canvas;
    in-out property <KitTheme> theme: KitThemes.light;
    VerticalLayout {
        padding: 24px; spacing: 16px; alignment: start;
        Text { text: "Skeleton"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
        KitSkeleton { theme: root.theme; running: false; height: 22px; } KitSkeleton { theme: root.theme; running: false; height: 16px; width: 340px; } KitSkeleton { theme: root.theme; running: false; height: 16px; width: 260px; }
    }
}

src/main.rs

// SPDX-License-Identifier: GPL-3.0-or-later
slint::include_modules!();

fn main() -> Result<(), slint::PlatformError> {
    let app = App::new()?;
    slint_kit::init_form_validation!(self, app);
    app.run()
}

Cargo.toml and build.rs

Cargo.toml

[package]
name = "slint-kit-skeleton-example"
version = "0.1.0"
edition = "2024"
rust-version = "1.92"
license = "GPL-3.0-or-later"
publish = false

[dependencies]
slint-kit = "=0.3.0"
slint = { version = "=1.18.1", default-features = false, features = ["std", "compat-1-18", "backend-winit", "renderer-skia", "accessibility"] }

[build-dependencies]
slint-kit-build = "=0.3.0"

[workspace]

build.rs

fn main() {
    slint_kit_build::compile("ui/app.slint").expect("compile component example");
}

Files: Cargo.toml · build.rs · ui/app.slint · src/main.rs

Size it to the expected content and use multiple instances to suggest its structure. Set running from loading activity.

Opacity pulses when animation is active and theme.reduced-motion is false. This placeholder supplies neither progress state nor a loading message.

Visual composition

The file below produces the screenshot. For controller-driven components, it shows the displayed state without supplying the Rust wiring. Create a project.

Show the screenshot source
Loading shape that reserves space for pending content.
Native screenshot of the same example, rendered with Skia.
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitSkeleton, KitTheme, KitThemes } from "@kit/kit.slint";

export component Example inherits Window {
    title: "KitSkeleton example";
    preferred-width: 420px;
    preferred-height: 200px;
    max-width: 100000px;
    max-height: 100000px;
    background: root.theme.canvas;
    in-out property <KitTheme> theme: KitThemes.light;
    in-out property <string> status;
    VerticalLayout {
        padding: 24px; spacing: 16px; alignment: start;
        Text { text: "Skeleton"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
        KitSkeleton { theme: root.theme; running: false; height: 22px; } KitSkeleton { theme: root.theme; running: false; height: 16px; width: 340px; } KitSkeleton { theme: root.theme; running: false; height: 16px; width: 260px; }
        if root.status != "": Text { text: root.status; color: root.theme.text-secondary; font-size: 12px * root.theme.text-scale; wrap: word-wrap; }
    }
}

Download this example

Public API

Inherits Rectangle.

Properties

Name Type Direction
theme KitTheme in
running bool in

See also