Avatar
Yuki Kishimoto
68d81165918100b7da43fc28f7d1fc12554466e1115886b9e7bb326f65ec4272
GitHub: https://github.com/yukibtc PGP: 86F3 105A DFA8 AB58 7268 DCD7 8D3D CD04 2496 19D1

## πŸ¦€ rust-nostr v0.44 is out!

### πŸš€ Highlights

- Support for new NIPs

- Enhanced the Relay Builder (now also available in bindings)

- Optimized default gossip implementation

- Added support for custom gossip implementations

- Improved nostr-lmdb performance

- Released Kotlin Multiplatform bindings πŸŽ‰

Thanks to all contributors!

### πŸ”— Links

https://rust-nostr.org

https://rust-nostr.org/donate

#rustnostr #nostr #rustlang #programming #rust #python #csharp #dotnet #javascript #kotlin #swift #flutter

I've removed it here: https://github.com/rust-nostr/nostr/commit/c2442d87da7ec521006a6954bb472f3aef73383e

At the moment, I think there are other things more important to focus on. We'll see if re-add it in the future, after the beta or release stage.

Otherwise, if someone is interested in building a nostr-sdk extension library, could add it there.

Nostr SDK bindings for Kotlin Multiplatform are out for testing!

Package: "org.rust-nostr.org:nostr-sdk-kmp:0.44.0-SNAPSHOT"

Support the following targets: Android (x86, armv7, x86_64, aarch64), iOS (aarch64 and x86_64), Linux (GLIBC and MUSL; x86, x86_64, armv7, aarch64 and riscv64), FreeBSD (only x86_64), macos (x86_64 and aarch64) and windows (x86, x86_64 and aarch64).

#rust-nostr #rustnostr #rust #kotlin #kmp #ffi

Replying to Avatar DanConwayDev

From ec102f34318cdf985e667183e89f12de229d9af8 Mon Sep 17 00:00:00 2001

From: DanConwayDev

Date: Tue, 19 Aug 2025 09:10:08 +0100

Subject: [PATCH] nostr: `Nip05Address::parse` succeed without local part

add robustness to `Nip05Address::parse`

---

crates/nostr/src/nips/nip05.rs | 34 ++++++++++++++++++++++++++++++++++

1 file changed, 34 insertions(+)

diff --git a/crates/nostr/src/nips/nip05.rs b/crates/nostr/src/nips/nip05.rs

index ce61072..b3f6f11 100644

--- a/crates/nostr/src/nips/nip05.rs

+++ b/crates/nostr/src/nips/nip05.rs

@@ -72,6 +72,11 @@ impl fmt::Display for Nip05Address {

impl Nip05Address {

/// Parse a NIP-05 address (i.e., `yuki@yukikishimoto.com`).

pub fn parse(address: &str) -> Result {

+ let address = if address.contains('@') {

+ address

+ } else {

+ &format!("_@{address}")

+ };

// Split the address into parts

let mut split: Split = address.split('@');

@@ -237,6 +242,35 @@ mod tests {

}

#[test]

+ fn test_verify_nip05_without_local() {

+ // nostr.json

+ let json: &str = r#"{

+ "names": {

+ "yuki": "68d81165918100b7da43fc28f7d1fc12554466e1115886b9e7bb326f65ec4272",

+ "_": "68d81165918100b7da43fc28f7d1fc12554466e1115886b9e7bb326f65ec4272"

+ }

+ }"#;

+ let json: Value = serde_json::from_str(json).unwrap();

+

+ let address = Nip05Address::parse("yukikishimoto.com").unwrap();

+ assert_eq!(

+ address.url().to_string(),

+ "https://yukikishimoto.com/.well-known/nostr.json?name=_"

+ );

+ assert_eq!(address.name(), "_");

+

+ let public_key =

+ PublicKey::from_hex("68d81165918100b7da43fc28f7d1fc12554466e1115886b9e7bb326f65ec4272")

+ .unwrap();

+ assert!(verify_from_json(&public_key, &address, &json));

+

+ let public_key =

+ PublicKey::from_hex("b2d670de53b27691c0c3400225b65c35a26d06093bcc41f48ffc71e0907f9d4a")

+ .unwrap();

+ assert!(!verify_from_json(&public_key, &address, &json));

+ }

+

+ #[test]

fn test_nip05_profile_from_json() {

// nostr.json

let json = r#"{

--

libgit2 1.9.1

Thanks, I've released it ad patch (v0.43.1)

Replying to Avatar reya

Hi nostr:npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet

Sorry for reporting this bug here, but I can't access my GitHub right now. I've found that rust-nostr always fails to connect to the relay wss://relay.0xchat.com, but this relay is working fine.

It shouldn't be related to the SDK, error 403 means that the server is blocking you

Replying to Avatar il_lost_

hey nostr:npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet Tags.from_text() (probably is Tags::from_text in rust) is disappear, alternatives to have tags from text

Unfortunately in bindings I can't mark a function as deprecated.

You have to use the NostrParser and then construct the tags. In this way you can extract only the stuff you need from the text

## rust-nostr v0.43 is out! πŸ¦€

### Summary

Put relays to sleep when idle, verify that events match subscription filters and optionally ban relays that send mismatched events, add proxy server for using NIP-07 browser signers from native applications, add support for FreeBSD x86_64 for JVM and C# bindings, and many more!

Thanks to all contributors!

### Links

https://rust-nostr.org

https://rust-nostr.org/donate

#rustnostr #nostr #rustlang #programming #rust #python #csharp #dotnet #javascript #kotlin #swift #flutter

A web page acts as a bridge between the NIP07 extension and the local server. When the user needs to sign something a request is scheduled, which is then taken from the web page and forwarded to the NIP07 extension. When the extension returns the result, the web page forwards the response to the local server.

If you mean with the Kotlin binding, yes. It's possible to implement a custom signer and use it around the code.

Otherwise, if you mean from directly from rust, I've started working on a NIP-55 implementation, but it is not ready yet. I haven't even tested it yet. I hope to have something working for the next releases.

https://github.com/rust-nostr/nostr/tree/nip55

Replying to Avatar dluvian

I follow 224 people and rust-nostr sdk selects 219 relays (139 connected) for me, Gossip 37 relays and the old Voyage 15 relays.

nostr:npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet is the relay selection intentionally high? I'm moving both Gitplaza and Voyage to the sdk and it would be nice if my light client doesn't have to connect to over 100 relaysπŸ˜„

It currently take at max the first 5 relays from the NIP65 list (I thought I had lowered it to 3, I'll decrease it soon).

But also taking at max 3, the number of connections may be high. Should I lower it to 2?

We've added support for "sleep when idle" for relays (in master branch). I still have to finalize the support in the SDK. With this, the gossip relays (or even all relays) can connect on-demand and sleep when idle.

Another plan is to add a persistent storage for gossip data, give a rank/score to relays... but I still not found the best way to do this. Ideas are appreciated :)

Replying to Avatar smallworlnd

nostr:nprofile1qqsx3kq3vkgczq9hmfplc28h687py42yvms3zkyxh8nmkvn0vhkyyuspz9mhxue69uhkummnw3ezuamfdejj7qg4waehxw309aex2mrp0yhxgctdw4eju6t09uq32amnwvaz7tmwdaehgu3wdau8gu3wv3jhvtc8quffm I'm playing around with sendPrivateMsg in nostr-sdk-js thinking it behaves like the Python counterpart where I can give rumor_extra_tags but there isn't an equivalent option. Is that on purpose or maybe it's not built yet?

What version are you using? It should be exposed in the last ones:

https://github.com/rust-nostr/nostr-sdk-js/blob/v0.42.1/src/client/mod.rs#L558