nostr

Crates.ionostr
lib.rsnostr
version0.36.0
sourcesrc
created_at2022-11-11 00:21:51.121151
updated_at2024-11-05 15:01:52.759862
descriptionRust implementation of the Nostr protocol.
homepagehttps://github.com/rust-nostr/nostr
repositoryhttps://github.com/rust-nostr/nostr.git
max_upload_size
id712532
size814,554
Yuki Kishimoto (yukibtc)

documentation

README

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 my_keys = Keys::generate();

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

    // Show bech32 public key
    let bech32_pubkey: String = my_keys.public_key().to_bech32()?;
    println!("Bech32 PubKey: {}", bech32_pubkey);

    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("yuki@getalby.com")
        .custom_field("custom_field", "my value");

    let event: Event = EventBuilder::metadata(&metadata).to_event(&my_keys)?;

    // New text note
    let event: Event = EventBuilder::text_note("Hello from rust-nostr", []).to_event(&my_keys)?;

    // New POW text note
    let event: Event = EventBuilder::text_note("My first POW text note from rust-nostr", []).pow(20).to_event(&my_keys)?;

    // Convert client nessage 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:

Feature Default Description
std Yes Enable std library
alloc No Needed to use this library in no_std context
all-nips Yes Enable all NIPs
nip03 No Enable NIP-03: OpenTimestamps Attestations for Events
nip04 Yes Enable NIP-04: Encrypted Direct Message
nip05 Yes Enable NIP-05: Mapping Nostr keys to DNS-based internet identifiers
nip06 Yes Enable NIP-06: Basic key derivation from mnemonic seed phrase
nip07 Yes Enable NIP-07: window.nostr capability for web browsers (available only for wasm32!)
nip11 Yes Enable NIP-11: Relay Information Document
nip44 Yes Enable NIP-44: Encrypted Payloads (Versioned)
nip46 Yes Enable NIP-46: Nostr Connect
nip47 Yes Enable NIP-47: Nostr Wallet Connect
nip49 Yes Enable NIP-49: Private Key Encryption
nip57 Yes Enable NIP-57: Zaps
nip59 Yes Enable NIP-59: Gift Wrap

Supported NIPs

Supported NIP
01 - Basic protocol flow description
02 - Follow List
03 - OpenTimestamps Attestations for Events
04 - Encrypted Direct Message
05 - Mapping Nostr keys to DNS-based internet ids
06 - Basic key derivation from mnemonic seed phrase
07 - window.nostr capability for web browsers
09 - Event Deletion
10 - Use of e and p tags in text events
11 - Relay Information Document
13 - Proof of Work
14 - Subject tag in text events
15 - Nostr Marketplace
17 - Private Direct Messages
18 - Reposts
19 - bech32-encoded entities
21 - URI scheme
23 - Long-form Content
24 - Extra metadata fields and tags
25 - Reactions
26 - Delegated Event Signing
27 - Text Note References
28 - Public Chat
29 - Relay-based Groups
30 - Custom Emoji
31 - Dealing with Unknown Events
32 - Labeling
34 - git stuff
35 - Torrents
36 - Sensitive Content
38 - User Statuses
39 - External Identities in Profiles
40 - Expiration Timestamp
42 - Authentication of clients to relays
44 - Encrypted Payloads (Versioned)
45 - Event Counts
46 - Nostr Connect
47 - Wallet Connect
48 - Proxy Tags
49 - Private Key Encryption
50 - Search Capability
51 - Lists
52 - Calendar Events
53 - Live Activities
54 - Wiki
- 55 - Android Signer Application
56 - Reporting
57 - Lightning Zaps
58 - Badges
59 - Gift Wrap
65 - Relay List Metadata
70 - Protected Events
71 - Video Events
72 - Moderated Communities
75 - Zap Goals
78 - Arbitrary custom app data
89 - Recommended Application Handlers
90 - Data Vending Machine
92 - Media Attachments
94 - File Metadata
96 - HTTP File Storage Integration
98 - HTTP Auth
99 - Classified Listings

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

Commit count: 3198

cargo fmt