Expand description

Web Push

A library for creating and sending push notifications to a web browser. For content payload encryption it uses RFC8188. The client is asynchronous and can run on any executor. An optional hyper based client is available with the feature hyper-client.


let endpoint = "https://updates.push.services.mozilla.com/wpush/v1/...";
let p256dh = "key_from_browser_as_base64";
let auth = "auth_from_browser_as_base64";

//You would likely get this by deserializing a browser `pushSubscription` object.  
let subscription_info = SubscriptionInfo::new(

//Read signing material for payload.
let file = File::open("private.pem").unwrap();
let mut sig_builder = VapidSignatureBuilder::from_pem(file, &subscription_info)?.build()?;

//Now add payload and encrypt.
let mut builder = WebPushMessageBuilder::new(&subscription_info)?;
let content = "Encrypted payload to be sent in the notification".as_bytes();
builder.set_payload(ContentEncoding::Aes128Gcm, content);

let client = WebPushClient::new()?;

//Finally, send the notification!


Functions used to send and consume push http messages. This module can be used to build custom clients.


A VapidSignatureBuilder without VAPID subscription info.

Client info for sending the notification. Maps the values from browser’s subscription info JSON data (AKA pushSubscription object).

Encryption keys from the client.

A struct representing a VAPID signature. Should be generated using the VapidSignatureBuilder.

A VAPID signature builder for generating an optional signature to the request. This encryption is required for payloads in all current and future browsers.

An async client for sending the notification payload. This client is expensive to create, and should be reused.

Everything needed to send a push notification to the user.

The main class for creating a notification payload.

The push content payload, already in an encrypted form.


Content encoding profiles.