the commit machine aka nostr:npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet
insanely prolific nostr dev

This time I just merged them π, those are nostr:nprofile1qqsqqqqqq9g9uljgjfcyd6dm4fegk8em2yfz0c3qp3tc6mntkrrhawgppemhxue69uhkummn9ekx7mp0qyg8wumn8ghj7mn0wd68ytnddakj7qghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7hsrsym 's work
see https://github.com/rust-nostr/nostr/pull/1134, specifically https://github.com/rust-nostr/nostr/pull/1134/commits/01137a233d3e69e84fd7a5065581d9bbe38ff073 for note deletion.
cc nostr:npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet expanded rust-nostr docs.
## π¦ 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
#rustnostr #nostr #rustlang #programming #rust #python #csharp #dotnet #javascript #kotlin #swift #flutter
I vaguely remember seeing a zapper implementation in rust-nostr but I can't find it. Does it not exist nostr:npub1drvpzev3syqt0kjrls50050uzf25gehpz9vgdw08hvex7e0vgfeq0eseet?
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
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
@@ -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)
Here you can find some docs/examples: https://rust-nostr.org/
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
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
#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.
π
https://github.com/rust-nostr/nostr/pull/994
This allows using NIP-07 signer in native applications. Thanks to nostr:nprofile1qqsqqqqqq9g9uljgjfcyd6dm4fegk8em2yfz0c3qp3tc6mntkrrhawgppemhxue69uhkummn9ekx7mp0qyg8wumn8ghj7mn0wd68ytnddakj7qghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7hsrsym for the idea!
#rustnostr #nostr #rustlang #rust
Zap nostr:nprofile1qqsx3kq3vkgczq9hmfplc28h687py42yvms3zkyxh8nmkvn0vhkyyuspz9mhxue69uhkummnw3ezuamfdejj7qg4waehxw309aex2mrp0yhxgctdw4eju6t09uq32amnwvaz7tmwdaehgu3wdau8gu3wv3jhvtc8quffm some for his amazing work on rust-nostr, and maybe we get nostr:nprofile1qqswacu3amp428kj8wtpqf77yd2upukcn2ft4aycmxm5scmh359e0ssppemhxue69uhkummn9ekx7mp0qyg8wumn8ghj7mn0wd68ytnddakj7qg4waehxw309aex2mrp0yhxgctdw4eju6t09uvt9vcv support to nostr:nprofile1qqs8t4ehcdrjgugzn3zgw6enp53gg2y2gfmekkg69m2d4gwxcpl04ac04xqkm a bit sooner!
π§‘
nostr:nprofile1qqs827g8dkd07zjvlhh60csytujgd3l9mz7x807xk3fewge7rwlukxgpz9mhxue69uhkummnw3ezumrpdejz772u5wm nostr:nprofile1qqsx3kq3vkgczq9hmfplc28h687py42yvms3zkyxh8nmkvn0vhkyyuspz9mhxue69uhkummnw3ezuamfdejj7qg4waehxw309aex2mrp0yhxgctdw4eju6t09uq32amnwvaz7tmwdaehgu3wdau8gu3wv3jhvtc8quffm do you know if it's possible to use nostr:nprofile1qqswacu3amp428kj8wtpqf77yd2upukcn2ft4aycmxm5scmh359e0sspz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsu0vpsj from rust-nostr?
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.
Good catch, thanks! I'll fix it soon
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 :)
nostr:nprofile1qqsqqqqqqqr99ezjae52qyv8lvyv3x2fdj6xedgar2sgq0gx8t8dhfcpyfmhxw309ahx7um5wf4xztttv9exjttgw368qtngv4nh2un09e3k7mf0qy88wumn8ghj7mn0wvhxcmmv9uq3gamnwvaz7tmwdaehgu3wxymrvvfwd9hj7jegwrl, if it helps, here is how I implemented it for the nostr-relay-builder: https://github.com/rust-nostr/nostr/blob/06dd1b6e532a611929278f9374aa4340455f0f54/crates/nostr-relay-builder/src/local/inner.rs#L698
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