Final version of change log

This commit is contained in:
Vitor Pamplona
2026-06-15 15:25:25 -04:00
parent 3b233924ce
commit d475d041c8
+138 -178
View File
@@ -2,45 +2,26 @@
Highlights:
- **Cashu wallet** — a new in-app NIP-60 ecash wallet.
- **CLINK payments** — a new Lightning rail with budgets and a unified Send Payment screen.
- **Private posts & reactions** — post, reply, react, and zap privately via NIP-17.
- **Workouts** — record and browse NIP-101e workouts in a dedicated feed.
- **Activity cards** — likes, zaps, and nutzaps render as rich gradient cards.
- **Software Apps** — a browsable NIP-82 app directory.
- **Music** — publish and browse music tracks and playlists.
- **Podcasts** — a new NIP-F4 podcast feed with favorites and an inline player.
- **Desktop** — image compression, a new media player, group DMs, and a refreshed feed.
- Adds Cashu wallet: a new in-app NIP-60 ecash wallet.
- Adds CLINK payments: a new Lightning rail with budgets and a unified Send Payment screen.
- Adds App Store Feed: a browsable NIP-82 app directory.
- Adds Private posts: post, reply, react, and zap privately via NIP-17.
- Adds Workout Feed: record and browse NIP-101e workouts in a dedicated feed.
- Adds Reaction cards: likes, zaps, and nutzaps render as rich gradient cards.
- Adds Music Feed: publish and browse music tracks and playlists.
- Adds Podcasts Feed: a new NIP-F4 podcast feed with favorites and an inline player.
- Adds support for hashtag labels to posts after they're published.
- Adds AppFunctions to allow Gemini to call Amethyst locally.
## New Features
### Payments
- **CLINK — a new Lightning payment rail.**
- CLINK = Common Lightning Interface for Nostr Keys.
- Pay and get paid through CLINK Offers and Debits.
- An interoperable Lightning-over-Nostr scheme.
- Profiles can show a tappable CLINK Offer chip.
- Pay a contact directly from their profile.
- **Spending budgets for CLINK debits.**
- Set one-time or recurring limits.
- A debit connection pulls funds only up to the cap you set.
- **Discover offers by NIP-05.**
- Resolve a person's payment offer from their `name@domain` address.
- **Unified Send Payment screen.**
- Reach Lightning, CLINK, on-chain Bitcoin, and Cashu/nutzaps from one place.
- A "Pay from" selector chooses which wallet the money leaves.
- **On-chain payments.**
- Pay Bitcoin payment targets from the in-app on-chain wallet.
- Pay a contact's on-chain "Bit" recipient directly.
- **Unified payment-rail chips** on the profile header.
- Long-press any chip to copy that destination.
- **Manage multiple wallets.**
- Add an NWC (Nostr Wallet Connect) wallet.
- Add a CLINK debit wallet.
- Add a Cashu wallet.
- Pick between them from the payment flow.
- **Cashu ecash wallet (new, NIP-60).**
- Adds unified zap popup for lightning, CLINK, on-chain, and Cashu in one place
- Quick 3-state toggle to quickly pick the source of your zap
- Defaults to options that both receiver and sender can use
- The payment rails now appear live as they resolve.
- Adds full Cashu support (NIP-60/61)
- A full in-app ecash wallet, beyond the previous redeem-only support.
- Create and add a Cashu wallet, with its own screen and settings.
- Browse and pick mints from a mint directory.
@@ -49,243 +30,220 @@ Highlights:
- Top up a mint from a standalone screen.
- See per-mint balances on the wallet.
- Send NIP-61 nutzaps from the wallet, with a Lightning-style send progress bar.
- Cashu top-up is crash-safe on retry.
- Funds are checkpointed the instant they leave the wallet.
- Adds full CLINK support
- Pay and get paid through CLINK Offers and Debits.
- Render all schemas inside of Notes
- Profiles can show a tappable CLINK Offer chip.
- Set one-time or recurring limits.
- Resolve a person's payment offer by NIP-05.
- A debit connection pulls funds only up to the cap you set.
- Adds Unified Send Payment screen.
- Long-press any chip in the Profile or this screen to copy that destination.
- Use Lightning, CLINK, on-chain Bitcoin, and Cashu/nutzaps from one place.
- A "Pay from" selector chooses which wallet the money leaves.
- Pay Bitcoin payment targets from the in-app on-chain wallet.
### Posting & Privacy
- **Private posts and replies.**
- Composed and delivered as NIP-17 gift wraps.
- An editable "Notify" block picks exactly who can read a private post.
- **Private reactions.**
- React and un-react privately.
- Adds private posts and private replies
- Create and view private posts, replies, and reactions.
- Customize who the receivers are for posts and replies.
- Adds support for Private reactions to all feeds
- React and un-react privately automatically.
- Safeguards prevent private content from leaking publicly.
- **Private zaps.**
- Enhances support for Private zaps
- Zaps on private notes are forced private.
- Replies to a private zap route into the sender's DM room.
- **NIP-32 hashtag labels.**
- Adds support for NIP-32 hashtag labels.
- Add first-class hashtag labels to posts.
- Follow-hashtag labels publish through your outbox relays.
- They surface in the hashtag feed.
- **Compose polish.**
- Enhances post's compose screen
- Richer notify chips in the new-post screen.
- Modernized inline payment cards that show their descriptions.
- Quote-reposts (NIP-18) now count in the repost counter.
- **Hidden Words moderation.**
- Enhances hidden words screen
- A per-row unblock button on the Hidden Words screen.
- Remove a single muted word without clearing the whole list.
### Chat & DMs
- **Pin DM conversations** to the top of your chat list.
- Re-engineers DM bootstrapping with dynamic loading
- Only loads the last 7 days worth of DMs.
- Per-relay download windows realign when DMs are pruned.
- A slow Tor connect is no longer mislabeled as "stalled".
- The paused-history card shows parked relays.
- The sync marker is now tappable.
- Adds support for pinning DM conversations
- Pins sync across devices via a NIP-78 app-data event.
- **@-mention search in Marmot (MLS) group chats.**
- Adds support for @-mention search in Marmot (MLS) group chats
- Search and tag users in the group composer.
- Conversation participants rank first.
- They are marked with an "In this chat" chip.
- **Quoted chat messages in bubbles.**
- Fixes quoted chat messages being rendered as posts
- Quotes render inside chat bubbles with the proper chat-reply design.
- The redundant reply row is skipped when the quote is already inline.
- **MLS reliability.**
- Fixes MLS reliability
- Unread state now persists across app restarts.
- The kind:445 backlog is no longer refetched on every launch.
- **Share to DM ("Send as DM").**
- Adds Share to DM ("Send as DM") flow
- A new Android share-sheet target, alongside "New Post".
- Share text, an image, or a video from another app into a DM.
- Pick a recent conversation; the chat composer opens pre-filled and editable.
- **Reply to zaps from the notification screen.**
- Reply directly to a zap from Notifications.
- Nutzap chips reply on long-press.
- **Group DMs (NIP-14 subjects).**
- Set and update a group name (subject) on encrypted group chats.
- Create a group by selecting multiple recipients in the New DM dialog.
- Rooms are marked read when opened.
- Messages from muted authors no longer mark a room unread.
### Reading & Feeds
- **Render LaTeX math** in notes.
- Adds new Notifications top nav filter
- The old "Global" tab is split into "Curated" and a raw "Global".
- Curated is the current system that requires your involvement on a thread to notify you.
- Global shows everything, including all hell threads.
- Replies to likes/zaps now reach the notifications feed.
- Adds Reply to zaps and reactions from the notification screen
- Adds support for LaTeX math in notes.
- Use `$...$` for inline equations.
- Use `$$...$$` for block equations.
- **Activity cards.**
- Adds support for first-class reaction rendering
- Reactions and zaps anchor their own thread view.
- Reactions, zaps, likes, and nutzaps render as gradient cards.
- Each card embeds the post it's about.
- A single tap on a like/zap chip opens that event's thread.
- **Workouts (new, NIP-101e).**
- Adds support for Workouts (new, NIP-101e)
- Create and publish workout records (kind 1301), interoperable with the RUNSTR dialect.
- Browse a dedicated Workouts feed.
- Filter by exercise type, author, community, or hashtag.
- **Music (new).**
- Adds support for Music (new)
- First-class support for tracks (kind 36787) and playlists.
- Browse Music Tracks and Music Playlists feeds.
- Publish a new track and create playlists.
- Add a track to a playlist from a bottom sheet.
- **Software Apps directory (new, NIP-82).**
- Adds support for Software Apps directory (new, NIP-82).
- Browse software applications (kind 32267).
- Filter by follows, author, hashtag, or global.
- An app detail screen shows screenshots and the author.
- Tap a screenshot to open it fullscreen.
- **App recommendations (NIP-89).**
- Enhances support for App recommendations (NIP-89).
- Editable recommendations on your profile.
- Tiered ordering in the recommendations editor.
- Richer app cards with author attribution.
- **New community renderers.**
- Birdex species collections (kind 12473).
- Agora fundraiser campaigns (kind 33863).
- **Cleaner feeds.**
- Reactions and zaps anchor their own thread view.
- Reposts of an unsupported kind are hidden instead of showing blank cards.
- **Audio visualizer (new).**
- Adds support for Birdex species collections (kind 12473).
- Adds support for Agora fundraiser campaigns (kind 33863).
- Adds Audio visualizer picker
- A live visualizer for audio-only notes.
- Real-time FFT spectrum from the track's decoded audio (no mic, no new permission).
- Styles: Classic (default), Spectrum Bars, Color Waves, Radial Ring, Aurora Glow, Static, and Off.
- Each style has a live preview in the settings picker.
- Your choice syncs across devices via NIP-78.
- Fills the art area in fullscreen and shows a fixed strip in the feed.
- **Podcasts (new, NIP-F4).**
- Adds support for Podcasts (new, NIP-F4)
- Dedicated podcast and episode feeds, filterable by follows, authors, communities, or hashtags.
- Mark podcasts as favorites.
- Tap a podcast to open a show screen with all its episodes and an inline player.
- Translatable show and episode descriptions on the feed cards.
- The episode audio player is squared so the controls get room.
- **Video.**
- Swipe for brightness and volume in fullscreen video.
### Settings
- **Searchable settings.**
- A search box filters rows by title and curated keywords.
- Supports prefix matching and an empty-state.
## Performance
- Pinned-DM state reads are deferred to the row and menu.
- The chat list stays smooth.
- Parsed CLINK offers are cached for NIP-05 lookups.
- Uses case-insensitive keys.
- The "fix missing spaces" pass indexes URLs by their first character.
- Avoids repeated scans.
## Improvements and Bug fixes
- **Notifications.**
- The old "Global" tab is split into "Selected" (curated) and a raw "Global".
- Replies to likes/zaps now reach the "Curated" feed.
- The legacy "Global" filter migrates once to "Curated".
- A reply to a like/zap no longer drags in the original post's whole thread.
- **Note search.**
- No longer matches on `p`, `e`, `a`, `alt`, or `client` tags.
- Results are cleaner.
- **Anonymous posting.**
- Profile zaps that should be anonymous are no longer encrypted as private zaps.
- Media uploads in anonymous posts use an ephemeral signer.
- **Wallet.**
- The Cashu wallet row shows the Cashu logo instead of a generic icon.
- Own on-chain zaps highlight the bolt and show as pending in the counter.
- Tidied the wallet screen layout.
- Removed the wallet reordering drag-and-drop UI.
- **Zap settings.**
- Preset amounts are de-duplicated, so drag-to-reorder keeps working.
- Fixed the chip-drag interaction.
- **Cashu top-up** is now crash-safe on retry.
- Funds are checkpointed the instant they leave the wallet.
- They are never re-moved on a retry.
- **Zap popup.**
- Reacts to Lightning-address and Cashu/nutzap info as it loads.
- The payment rails now appear live as they resolve.
- **Tor.**
- Relay backoff is honored during Tor bootstrap.
- Payment and wallet relay connections now honor the "Money operations via Tor" setting.
- Previously they were forced over Tor, which broke NIP-47 and CLINK on Tor-blocking services.
- Sockets opened on the wrong transport are rebuilt.
- **DM history loading.**
- Per-relay download windows realign when DMs are pruned.
- A slow Tor connect is no longer mislabeled as "stalled".
- The paused-history card shows parked relays.
- The sync marker is now tappable.
- **Live streams.**
- Fixed the live-stream chat relay fallback.
- **Polls.**
- Zap and non-zap polls now share the same option text.
- **Video.**
- Legacy NIP-71 videos resolve their address from the real `d` tag.
- **Media server.**
- The default media server no longer resets on every launch.
- **Accounts.**
- Deleting an account now clears its cached entry.
- **Metadata.**
- A non-spec birthday value can no longer drop an entire profile.
- **Deletions (NIP-09).**
- Deleting a note now severs child back-references.
- It detaches on-chain-zap, nutzap, and channel sources from the cache.
- **Hardening.**
- Many audit fixes across the private-posts, CLINK, and MLS paths.
- Covers off-main-thread crypto and leak prevention.
- Hides share/bookmark on private notes.
- **General.**
- Reduced runtime log noise.
- Fixed several edge-case crashes.
- Adds Searchable settings.
- A search box filters rows by title and curated keywords.
- Supports prefix matching and an empty-state.
- Adds Swipe for brightness and volume in fullscreen video.
- Fixes Quote-reposts (NIP-18) not counting in the repost counter.
- Hides reposts of unsupported kinds instead of showing blank cards.
- Fixes URLs glued to other words: the "fix missing spaces" pass now indexes URLs by their first character.
- Search no longer matches text in `p`, `e`, `a`, `alt`, or `client` tags.
- Media uploads in anonymous posts use the ephemeral signer.
- Fixes anonymous profile zaps being encrypted as private zaps.
- The Cashu wallet row shows the Cashu logo instead of a generic icon.
- On-chain zaps highlight the bolt and show as pending in the counter.
- Removed the wallet options reordering drag-and-drop UI.
- De-duplicates preset amounts in Zap Settings
- Fixes the chip-drag interaction in Zap Settings.
- Fixes the live-stream chat relay fallback
- Zap and non-zap polls now share the same option text when composing a post
- Fixes Legacy NIP-71 videos to resolve their address from the real `d` tag.
- Fixes the default media server resetting on every launch.
- Fixes account cache: Deleting an account now clears its cached entry.
- Adds support for birthdays on profile
- Fixes cache child back-references when deleting notes
- Detaches on-chain-zap, nutzap, and channel sources on cache deletion
- Honors relay connection backoff during Tor bootstrap.
- Heals sockets opened on the wrong transport by rebuilding them.
- Honors the "Money operations via Tor" setting for payments and wallet relay connections
- Reduces runtime log noise.
- Fixes several edge-case crashes.
- Fixes IPv6-literal URLs in posts
- Reorganizes changelog into versioned files
- Audit fixes across the private-posts, CLINK, and MLS paths.
- Adds off-main-thread crypto and leak prevention.
- Hides share/bookmark on private notes.
## Desktop
- **Image compression on upload.**
- Adds image compression on upload:
- An Image Compression settings panel.
- Per-post quality presets.
- Batch progress in the composer.
- A preview-then-publish gate.
- A fail-loud dialog if compression fails.
- **New media player.**
- Adds new media player.
- Replaced vlcj with kdroidFilter's ComposeMediaPlayer.
- Uses a JCodec/FFmpeg backend.
- **Group DM parity with Android.**
- Adds Group DM parity with Android.
- Set and update a group name (subject) on encrypted group chats.
- Create a group by selecting multiple recipients in the New DM dialog.
- Rooms are marked read when opened.
- Messages from muted authors no longer mark a room unread.
- Desktop now handles group direct messages the same way.
- **Replies tab** on the user profile.
- Adds Replies tab on the user profile.
- Feeds also show reply context (parent embed plus label) inline.
- **Feed refresh.**
- Adds Feed refresh.
- Inline card expansion.
- A "New posts" chip that slides in from the top.
- Stick-to-top on prepend.
- Wired-up like/zap/comment actions.
- **Smaller fixes.**
- Smaller fixes.
- Copy a Blossom image URL on click, with a hover tooltip and snackbar.
- Collapsed-sidebar polish: tighter ripple and hover tooltips.
- Amethyst logo on the Tor and account-loading splashes.
- Restored inter-word spacing in rich text with mentions/hashtags.
- Fixed parent-author metadata loading.
- **Unhealthy-relay review.**
- Adds Unhealthy-relay review.
- A banner and popup that flag relays behaving poorly.
- **Namecoin diagnostics.**
- Adds Namecoin diagnostics.
- The diagnostics card was ported from the Android settings.
## Cli
- `amy offer` — CLINK offer info and request, including `--payer-data`.
- `amy debit` — CLINK debit info, pay, and budget.
- `amy zap --with <ndebit>` — settle a zap invoice via a CLINK debit.
- `amy offer discover <nip05>` — resolve a profile's offer through NIP-05.
- Adds `amy offer` — CLINK offer info and request, including `--payer-data`.
- Adds `amy debit` — CLINK debit info, pay, and budget.
- Adds `amy zap --with <ndebit>` — settle a zap invoice via a CLINK debit.
- Adds `amy offer discover <nip05>` — resolve a profile's offer through NIP-05.
- Closed CLINK parity gaps (profile offer, follow, offer pay, GFY detail).
- Added a clink-headless interop harness.
- Adds a clink-headless interop harness.
## Quartz
- **Relay-server toolkit.**
- A `Flow<Event>` REQ-responder SPI with a storage-free dispatch engine.
- NIP-50 search parsing.
- Suspendable auth hooks.
- Adds Relay-server toolkit.
- Added a `Flow<Event>` REQ-responder SPI with a storage-free dispatch engine.
- Added NIP-50 search parsing.
- Added suspendable auth hooks.
- Split engine/backend/policy packages.
- **NIP-45 approximate COUNT.**
- HyperLogLog construction, with wire support.
- **NIP-11.**
- Adds NIP-45 approximate COUNT
- Added HyperLogLog with wire support.
- Enhances NIP-11 documents.
- Added the missing `banner` field.
- Relay limits are now a single source of truth served over NIP-11.
- **Connection observability.**
- Adds Relay Connection observability.
- Stable per-connection ids.
- A per-connection `RequestContext` threaded into the event source.
- Auth identity moved from policy into connection scope.
- **NIP-46.**
- Fixed a bunker double-resume and retry id-reuse race.
- **Other.**
- Fixed `q` (quote) tags being dropped by an inverted guard.
- Registered `CommunityRulesEvent` and CLINK DTO serializers (incl. Kotlin/Native).
- Relay failure logs are now diagnosable (exception class on null message, correct NIP-11 error label).
- Fixes NIP-46 double-resume and retry id-reuse race
- Fixes NIP-46 error serialization issues
- Fixes `q` (quote) tags being dropped by an inverted guard.
- Fixes `CommunityRulesEvent` and CLINK DTO serializers
- Improves Relay failure logs
- Fixes disk cache to recreate cache dir if cleared at runtime
## Build & Documentation
@@ -314,17 +272,19 @@ Highlights:
- Merged duplicate `when`/`if` arms across the codebase.
- Migrated `Log` calls to the lambda overload.
- **Documentation.**
- Updated Privacy Policy to the new requirements from the PlayStore
- Documented an Amethyst→commons migration plan and target package hierarchy.
- Refreshed several Claude skills and the Namecoin design doc.
- Refreshed several Claude skills, documentation and the Namecoin design doc.
- Added a rule requiring a license check when adding any new dependency.
## Contributors
- Vitor Pamplona (@npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z)
- davotoula
- nrobi144
- mstrofnone
- Daneul Kim
- @npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z
- @npub1e2yuky03caw4ke3zy68lg0fz3r4gkt94hx4fjmlelacyljgyk79svn3eef
- @npub12cfje6nl2nuxplcqfvhg7ljt89fmpj0n0fd24zxsukja5qm9wmtqd7y76c
- @npub1w4uswmv6lu9yel005l3qgheysmr7tk9uvwluddznju3nuxalevvs2d0jr5
- @npub1a3tx8wcrt789skl6gg7rqwj4wey0j53eesr4z6asd4h4jwrd62jq0wkq4k
- @npub1dn0tej4a5806qk9ts56j572sndvjk27l5qmsxf0z3mquknccve7s4k8tfp
## Translations