Crate notify_rust

source ·
Expand description

Desktop Notifications for Rust.

Desktop notifications are popup messages generated to notify the user of certain events.

Platform Support

This library was originally conceived with the XDG notification specification in mind. Since version 3.3 this crate also builds on macOS, however the semantics of the XDG specification and macOS NSNotifications are quite different. Therefore only a very small subset of functions is supported on macOS. Certain methods don’t have any effect there, others will explicitly fail to compile, in these cases you will have to add platform specific toggles to your code. For more see platform differences


Example 1: Simple Notification

    .summary("Firefox News")
    .body("This will almost look like a real firefox notification.")
    .timeout(Timeout::Milliseconds(6000)) //milliseconds

Example 2: Persistent Notification

    .body("This has nothing to do with emails.\nIt should not go away until you acknowledge it.")
    .hint(Hint::Resident(true)) // this is not supported by all implementations
    .timeout(Timeout::Never) // this however is

Careful! There are no checks whether you use hints twice. It is possible to set urgency=Low AND urgency=Critical, in which case the behavior of the server is undefined.

Example 3: Ask the user to do something

Notification::new().summary("click me")
                   .action("default", "default")
                   .action("clicked", "click here")
                   .wait_for_action(|action| match action {
                                        "default" => println!("you clicked \"default\""),
                                        "clicked" => println!("that was correct"),
                                        // here "__closed" is a hard coded keyword
                                        "__closed" => println!("the notification was closed"),
                                        _ => ()

Minimal Example

You can omit almost everything


more examples in the repository.

Platform Differences

✔︎ = works
❌ = will not compile


fn appname(...)✔︎
fn summary(...)✔︎✔︎✔︎
fn subtitle(...)✔︎✔︎
fn body(...)✔︎✔︎✔︎
fn icon(...)✔︎
fn auto_icon(...)✔︎
fn hint(...)✔︎
fn timeout(...)✔︎✔︎
fn urgency(...)✔︎
fn action(...)✔︎
fn id(...)✔︎
fn finalize(...)✔︎✔︎✔︎
fn show(...)✔︎✔︎✔︎


fn wait_for_action(...)✔︎
fn close(...)✔︎
fn on_close(...)✔︎
fn update(...)✔︎
fn id(...)✔︎


fn get_capabilities(...)✔︎
fn get_server_information(...)✔︎
fn set_application(...)✔︎
fn get_bundle_identifier_or_default(...)✔︎


Please use target_os toggles if you plan on using methods labeled with ❌.

#[cfg(target_os = "macos")]
// or
// #### #[cfg(all(unix, not(target_os = "macos")))]




  • Response to an action
  • Reason passed to NotificationClosed Signal
  • Which Dbus implementation are we using?
  • Hints allow you to pass extra information to the server.
  • Describes the timeout of a notification
  • Levels of Urgency.


  • Your handy callback for the Close signal of your Notification.