Crate nostr

Crate nostr 

Source
Expand description

Rust implementation of the Nostr protocol.

§Nostr

crates.io crates.io - Downloads Documentation CI MIT

§Description

Rust implementation of Nostr protocol.

You may be interested in:

§Getting started

use nostr::prelude::*;

fn main() -> Result<()> {
    // Generate new random keys
    let keys = Keys::generate();

    // Or use your already existing (from hex or bech32)
    let keys = Keys::parse("hex-or-bech32-secret-key")?;

    // Convert public key to bech32
    println!("Public key: {}", keys.public_key().to_bech32()?);

    let metadata = Metadata::new()
        .name("username")
        .display_name("My Username")
        .about("Description")
        .picture(Url::parse("https://example.com/avatar.png")?)
        .banner(Url::parse("https://example.com/banner.png")?)
        .nip05("username@example.com")
        .lud16("pay@yukikishimoto.com")
        .custom_field("custom_field", "my value");

    let event: Event = EventBuilder::metadata(&metadata).sign_with_keys(&keys)?;

    // New text note
    let event: Event = EventBuilder::text_note("Hello from rust-nostr").sign_with_keys(&keys)?;

    // New POW text note
    let event: Event = EventBuilder::text_note("POW text note from rust-nostr").pow(20).sign_with_keys(&keys)?;

    // Convert client message to JSON
    let json = ClientMessage::event(event).as_json();
    println!("{json}");

    Ok(())
}

More examples can be found in the examples/ directory.

§WASM

This crate supports the wasm32 targets.

On macOS you need to install llvm:

brew install llvm
LLVM_PATH=$(brew --prefix llvm)
AR="${LLVM_PATH}/bin/llvm-ar" CC="${LLVM_PATH}/bin/clang" cargo build --target wasm32-unknown-unknown

NOTE: Currently nip03 feature not support WASM.

§Embedded

This crate support no_std environments.

Check the example in the embedded/ directory.

§Crate Feature Flags

The following crate feature flags are available:

FeatureDefaultDescription
stdYesEnable std library
allocNoNeeded to use this library in no_std context
all-nipsNoEnable all NIPs
nip03NoEnable NIP-03: OpenTimestamps Attestations for Events
nip04NoEnable NIP-04: Encrypted Direct Message
nip06NoEnable NIP-06: Basic key derivation from mnemonic seed phrase
nip44NoEnable NIP-44: Encrypted Payloads (Versioned)
nip46NoEnable NIP-46: Nostr Connect
nip47NoEnable NIP-47: Nostr Wallet Connect
nip49NoEnable NIP-49: Private Key Encryption
nip57NoEnable NIP-57: Zaps
nip59NoEnable NIP-59: Gift Wrap

§Changelog

All notable changes to this library are documented in the CHANGELOG.md.

§State

This library is in an ALPHA state, things that are implemented generally work but the API will change in breaking ways.

§Donations

rust-nostr is free and open-source. This means we do not earn any revenue by selling it. Instead, we rely on your financial support. If you actively use any of the rust-nostr libs/software/services, then please donate.

§License

This project is distributed under the MIT software license - see the LICENSE file for details

Re-exports§

pub extern crate bitcoin_hashes as hashes;
pub extern crate secp256k1;

Modules§

event
Event
filter
Filters
key
Keys
message
Messages
nips
NIPs
parser
Nostr parser
signer
Nostr Signer
types
Types
util
Util