LibreNostr v0.2.2
A privacy-preserving relay stopped handing back direct messages at all, and thread replies rendered as one flat pile regardless of who was actually answering whom.
Fixed
A relay's NIP-42 challenge for direct messages was never answered. Some relays require authentication before returning kind-4 events specifically, so nobody can read your DMs off them without proving who they are — a real relay-side privacy protection. LibreNostr's socket layer already had the wire message to answer that challenge, unused since the day it was written; nothing upstream ever called it, so every relay enforcing this policy silently returned nothing, forever, for every conversation whose only copy lived there. Every relay pool now answers a challenge with a signed event when it has a signer — only the account's own relay pool gets one, never the fallback pool or the wallet-connect pool, since authenticating on either would disclose more than that relationship calls for.
A reply to a reply rendered at the same rank as every other reply. Everything after the opened note in a thread was sorted by timestamp alone, in two flat buckets, with no notion of who was actually replying to whom. A NIP-10 tag names a reply's parent exactly, and the thread screen was not using it. Replies are now walked into a proper tree from that tag, and the screen draws one vertical bar per level — a reply to a reply visibly nests under the comment it answers instead of sitting at the same rank as an unrelated reply that merely arrived nearby in time.
Install
Pick the APK for your device's ABI — arm64-v8a for essentially every phone from the last several years. Signed with the same key as prior releases, so it upgrades in place.