A high-level, Nostr client library written in Rust.
If you're writing a typical Nostr client or bot, this is likely the crate you need.
However, the crate is designed in a modular way and depends on several other lower-level crates. If you're attempting something more custom, you might be interested in these:
nostr
: Rust implementation of Nostr protocol.toml
[dependencies]
nostr-sdk = "0.8"
tokio = { version = "1", features = ["full"] }
```rust,norun use nostrsdk::nostr::{Keys, Metadata}; use nostrsdk::nostr::url::Url; use nostrsdk::{Client, Result};
async fn main() -> Result<()> { // Generate new keys let mykeys: Keys = Client::generatekeys(); // // or use your already existing // // From Bech32 // use nostr::key::FromBech32; // let mykeys = Keys::frombech32("nsec1...")?; // // From hex string // use std::str::FromStr; // let mykeys = Keys::fromstr("hex-secret-key")?;
// Create new client
let mut client = Client::new(&my_keys);
// Add relays
client.add_relay("wss://relay.damus.io", None)?;
client.add_relay("wss://nostr.openchain.fr", None)?;
// Connect to relays and keep connection alive
client.connect().await?;
let metadata = Metadata::new()
.name("username")
.display_name("My Username")
.about("Description")
.picture(Url::parse("https://example.com/avatar.png")?)
.nip05("username@example.com");
// Update profile metadata
client.update_profile(metadata).await?;
// Publish a text note
client.publish_text_note("My first text note from Nostr SDK!", &[]).await?;
// Publish a POW text note
client.publish_pow_text_note("My first POW text note from Nostr SDK!", &[], 20).await?;
// Handle notifications
let mut notifications = client.notifications();
while let Ok(notification) = notifications.recv().await {
println!("{:?}", notification);
}
Ok(())
} ```
More examples can be found in the examples directory.
The following crate feature flags are available:
| Feature | Default | Description |
| ------------------- | :-----: | -------------------------------------------------------------------------------------------------------------------------- |
| blocking
| No | Needed to use this library in not async/await context |
| all-nips
| Yes | Enable all NIPs |
| nip04
| Yes | Enable NIP-04: Encrypted Direct Message |
| nip06
| Yes | Enable NIP-06: Basic key derivation from mnemonic seed phrase |
This library is in an ALPHA state, things that are implemented generally work but the API will change in breaking ways.
This project is distributed under the MIT software license - see the LICENSE file for details