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]
anyhow = "1"
nostr-sdk = "0.5"
tokio = { version = "1", features = ["full"] }
url = "2"
```rust,norun use nostrsdk::nostr::{Keys, Metadata}; use nostr_sdk::Client; use url::Url;
async fn main() -> anyhow::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
client
.handle_notifications(|notification| {
println!("{:?}", notification);
Ok(())
})
.await
} ```
More examples can be found in the examples directory.
The following crate feature flags are available:
| Feature | Default | Description |
| ------------------- | :-----: | -------------------------------------------------------------------------------------------------------------------------- |
| blocking
| No | Needed if you want to use this library in not async/await context |
| nip06
| No | 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