Cross-platform system tray for Rust.
| Crate | crates.io |
|---|---|
tray | |
tray-menu |
cargo add tray-menu --features gtk # Linux (includes tray) cargo add tray-menu # Windows/macOS (includes tray) cargo add tray # Just the icon, no menususe tray_menu::{CheckEntry,Divider,Icon,MouseButton,MouseButtonState,PopupMenu,SubMenu,TextEntry,TrayIconBuilder,TrayIconEvent,};fnmain(){let icon = Icon::from_rgba(vec![0u8;32*32*4],32,32).unwrap();let _tray = TrayIconBuilder::new().with_icon(icon).with_tooltip("My App").build().unwrap();loop{ifletOk(TrayIconEvent::Click{button:MouseButton::Right,button_state:MouseButtonState::Up, position, .. }) = TrayIconEvent::receiver().try_recv(){letmut menu = PopupMenu::new(); menu.add(&TextEntry::of("open","Open")); menu.add(&CheckEntry::of("notify","Notifications",true)); menu.add(&Divider);letmut help = SubMenu::of("Help"); help.add(&TextEntry::of("about","About")); menu.add(&help); menu.add(&Divider); menu.add(&TextEntry::of("quit","Quit"));ifletSome(id) = menu.popup(position){if id.0 == "quit"{break;}}} std::thread::sleep(std::time::Duration::from_millis(16));}}cargo run -p tray-menu --features gtk --example simple-menu # right-click menu cargo run -p tray-menu --features gtk --example simple-menu -- left # left-click menu cargo run -p tray-menu --features gtk --example simple-menu -- enter # hover to open cargo run -p tray --example simple-tray # icon only, no menuSee the justfile for more commands.
| Platform | Tray Icon | Popup Menu |
|---|---|---|
| Linux | X11 system tray | GTK or Qt |
| Windows | Shell_NotifyIconW | TrackPopupMenu |
| macOS | NSStatusItem | NSMenu |
graph TD A[tray-menu] -->|uses| B[tray] B -->|Linux| C[X11 system tray protocol] B -->|Windows| D[Shell_NotifyIconW] B -->|macOS| E[NSStatusItem] A -->|Linux GTK| F[GtkMenu] A -->|Linux Qt| G[QMenu] A -->|Windows| H[TrackPopupMenu] A -->|macOS| I[NSMenu] tray - Thread-safe tray icon with mouse events (click, double-click, hover). No menus.
tray-menu - Popup menus with text items, checkboxes, submenus, dividers. Re-exports tray.
MIT