Slint Kit Documentation

Display

Chat Bubble for Slint

KitChatBubble · Slint Kit 0.3.0

Conversation message with author and metadata.

Conversation message with author and metadata.
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 { KitChatBubble, KitTheme, KitThemes } from "@kit/kit.slint";

export component App inherits Window {
    title: "KitChatBubble example";
    preferred-width: 440px;
    preferred-height: 230px;
    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: "Chat Bubble"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
        KitChatBubble { theme: root.theme; author: "Alex Morgan"; text: "The new workspace is ready for your feedback."; metadata: "Today, 09:30"; }
    }
}

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-chat-bubble-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

Set author, text and metadata, then choose ChatSide.start or .end according to message origin. Compose bubbles in a list suited to the history size.

The end side uses the accent color and the start side a secondary background. Text wraps; no conversation or networking logic is included.

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
Conversation message with author and metadata.
Native screenshot of the same example, rendered with Skia.
// SPDX-License-Identifier: GPL-3.0-or-later
import { KitChatBubble, KitTheme, KitThemes } from "@kit/kit.slint";

export component Example inherits Window {
    title: "KitChatBubble example";
    preferred-width: 440px;
    preferred-height: 230px;
    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: "Chat Bubble"; color: root.theme.text-primary; font-size: 20px * root.theme.text-scale; font-weight: 600; }
        KitChatBubble { theme: root.theme; author: "Alex Morgan"; text: "The new workspace is ready for your feedback."; metadata: "Today, 09:30"; }
        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 HorizontalLayout.

Properties

Name Type Direction
theme KitTheme in
side ChatSide in
author string in
text string in
metadata string in

Types and variants

Type Declaration
enum ChatSide start, end

See also