iced_tour
Guided tour / onboarding overlay for iced applications.
Built for and extracted from Telemetry Studio, a desktop app for cycling video overlays.

Features
- Full-screen backdrop with spotlight cutout around target UI areas
- Tooltip card with title, description, dot indicators, and navigation buttons
- Builder pattern API for defining tour steps
- Dark and light theme presets with full customization
tour_steps![]convenience macro for quick definitions- Zero-cost when inactive (returns invisible
Space) - Works with iced's
stack![]composition — no custom overlay system needed - Designed to be LLM-friendly: self-documenting types and actionable doc comments
Quick Start
use ;
// 1. Define your steps
let steps = tour_steps!;
// 2. Create state (inactive by default)
let mut tour_state = new;
// 3. Start the tour when ready
tour_state.start;
Integration
Add to your App struct
use ;
Add to your Message enum
use TourMessage;
Add to your view (stack composition)
use tour_overlay;
Handle messages in update
Tour Steps
Steps can optionally highlight a specific UI area with a spotlight cutout:
use ;
use ;
// Centered card (no target — works without knowing layout positions)
new;
// Spotlight on a specific area
new
.target
.card_position;
Themes
use TourTheme;
// Presets
let dark = dark;
let light = light;
// Customize
let custom = dark
.with_fonts
.with_backdrop_opacity;
// Or set individual fields
let mut theme = dark;
theme.button_color = from_rgb;
API Reference
| Function / Type | Description |
|---|---|
TourState::new(steps) |
Create with steps, inactive by default |
TourState::start() |
Activate the tour |
TourState::update(msg) |
Handle Next/Back/Skip/Finish |
TourState::is_active() |
Check if tour is showing |
TourState::is_finished() |
Check if user completed/skipped |
TourStep::new(title, desc) |
Step with centered card (no cutout) |
.target(rect) |
Highlight a specific area |
.card_position(pos) |
Control card placement |
tour_overlay(state, theme, mapper) |
The overlay Element for your stack |
tour_steps![...] |
Convenience macro |
TourTheme::dark() / light() |
Theme presets |
integration_checklist(state, theme) |
Debug helper |
Examples
Compatibility
- Minimum iced version: 0.14
- Minimum Rust version: 1.88
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.