| Crates.io | bevy_nested_tooltips |
| lib.rs | bevy_nested_tooltips |
| version | 0.3.0 |
| created_at | 2025-12-06 08:51:33.430809+00 |
| updated_at | 2026-01-14 00:05:50.616348+00 |
| description | Nested Tooltips for the bevy game engine |
| homepage | |
| repository | https://github.com/Lyndon-Mackay/bevy_nested_tooltips |
| max_upload_size | |
| id | 1969837 |
| size | 9,872,130 |
A library for creating headless(unstyled) tooltips that can be arbitrarily nested and highlight other nodes.
(Colours are chosen by end user!)

This library strives to handle the logic behind common tooltip features, while you focus on your unique data and design needs.
use bevy_nested_tooltips::prelude::*;
.add_plugins((
NestedTooltipPlugin,
))
commands.insert_resource(TooltipConfiguration {
activation_method: ActivationMethod::MiddleMouse,
..Default::default()
});
let mut tooltip_map = TooltipMap {
map: HashMap::new(),
};
tooltip_map.insert(
"tooltip".into(),
ToolTipsData::new(
"ToolTip",
vec![
TooltipsContent::String("A way to give users infomation can be ".into()),
TooltipsContent::Term("recursive".into()),
TooltipsContent::String(" Press middle mouse button to lock me. ".into()),
],
),
);
tooltip_map.insert(
"recursive".into(),
ToolTipsData::new(
"Recursive",
vec![
TooltipsContent::String("Tooltips can be ".into()),
TooltipsContent::Term("recursive".into()),
TooltipsContent::String(
" You can highlight specific ui panels with such as the ".into(),
),
TooltipsContent::Highlight("sides".into()),
TooltipsContent::String(" Press middle mouse button to lock me. ".into()),
],
),
);
TooltipHighlight("sides".into()),
Or
TooltipTermLink::new("tooltip"),
Create an observer with at least these parameters.
fn style_tooltip(
new_tooltip: On<TooltipSpawned>,
tooltip_info: TooltipEntitiesParam,
mut commands: Commands,
)
Fetch the data.
let tooltip_info = tooltip_info
.tooltip_child_entities(new_tooltip.entity)
.unwrap();
Use the entities to style your node using commands or mutatable queries!
commands
.get_entity(tooltip_info.title_node)
.unwrap()
.insert(Node {
display: Display::Flex,
justify_content: JustifyContent::Center,
width: Val::Percent(100.),
..Default::default()
});
// When highlighted change the colour, how you highlight is up to you
// maybe fancy animations
fn add_highlight(side: On<Add, TooltipHighlighting>, mut commands: Commands) {
commands
.get_entity(side.entity)
.unwrap()
.insert(BackgroundColor(GREEN.into()));
}
// remove highlighting
fn remove_highlight(side: On<Remove, TooltipHighlighting>, mut commands: Commands) {
commands
.get_entity(side.entity)
.unwrap()
.insert(BackgroundColor(BLUE.into()));
}
This plugin assumes a single fullscreen and camera is used.
Using this library when not fullscreen will likely trigger the links at the wrong time, this limitation will be removed once textspans support observers.
Bevy compatabilitybevy |
bevy_nested_tooltips |
|---|---|
| 0.18 | 0.3 |
| 0.17 | 0.1-0.2 |