mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-06 19:53:08 +00:00
Merge pull request #3214 from vitorpamplona/claude/changelog-v1-11-at3e12
docs: Add v1.12.0 release notes
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
Release notes for Amethyst, one file per version. Files are named with zero-padded version numbers so they sort correctly in any file browser. Use [`TEMPLATE.md`](TEMPLATE.md) as the starting point for the next release.
|
||||
|
||||
- [v1.12.0 — Payments, Private Posts & Workouts](v1.12.00.md)
|
||||
- [v1.11.0 — NIP-52 Calendars, On-Chain Zap Polish](v1.11.00.md)
|
||||
- [v1.10.0 — On-Chain zaps](v1.10.00.md)
|
||||
- [v1.09.2 — Fixes](v1.09.02.md)
|
||||
|
||||
@@ -0,0 +1,338 @@
|
||||
# v1.12.0: Payments, Private Posts & Workouts
|
||||
|
||||
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.
|
||||
|
||||
## 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).**
|
||||
- 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.
|
||||
- Mint ecash from Lightning and melt it back to Lightning.
|
||||
- Send and receive ecash tokens.
|
||||
- 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.
|
||||
|
||||
### 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.
|
||||
- Safeguards prevent private content from leaking publicly.
|
||||
- **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.**
|
||||
- Add first-class hashtag labels to posts.
|
||||
- Follow-hashtag labels publish through your outbox relays.
|
||||
- They surface in the hashtag feed.
|
||||
- **Compose polish.**
|
||||
- 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.**
|
||||
- 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.
|
||||
- Pins sync across devices via a NIP-78 app-data event.
|
||||
- **@-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.**
|
||||
- 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.**
|
||||
- Unread state now persists across app restarts.
|
||||
- The kind:445 backlog is no longer refetched on every launch.
|
||||
- **Share to DM ("Send as DM").**
|
||||
- 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.
|
||||
- Use `$...$` for inline equations.
|
||||
- Use `$$...$$` for block equations.
|
||||
- **Activity cards.**
|
||||
- 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).**
|
||||
- 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).**
|
||||
- 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).**
|
||||
- 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).**
|
||||
- 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).**
|
||||
- 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).**
|
||||
- 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.
|
||||
|
||||
## Desktop
|
||||
|
||||
- **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.**
|
||||
- Replaced vlcj with kdroidFilter's ComposeMediaPlayer.
|
||||
- Uses a JCodec/FFmpeg backend.
|
||||
- **Group DM parity with Android.**
|
||||
- Desktop now handles group direct messages the same way.
|
||||
- **Replies tab** on the user profile.
|
||||
- Feeds also show reply context (parent embed plus label) inline.
|
||||
- **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.**
|
||||
- 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.**
|
||||
- A banner and popup that flag relays behaving poorly.
|
||||
- **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.
|
||||
- Closed CLINK parity gaps (profile offer, follow, offer pay, GFY detail).
|
||||
- Added 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.
|
||||
- Split engine/backend/policy packages.
|
||||
- **NIP-45 approximate COUNT.**
|
||||
- HyperLogLog construction, with wire support.
|
||||
- **NIP-11.**
|
||||
- Added the missing `banner` field.
|
||||
- Relay limits are now a single source of truth served over NIP-11.
|
||||
- **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).
|
||||
|
||||
## Build & Documentation
|
||||
|
||||
- **Dependency updates.**
|
||||
- Bumped Kotlin, Compose Multiplatform 1.11.1, Coil 5, OkHttp 5, Jackson, AndroidX, Firebase, and more.
|
||||
- Adapted the Blossom interceptor test to OkHttp 5's `Interceptor.Chain`.
|
||||
- **iOS CI.**
|
||||
- `commons` `commonTest` now compiles and runs on iOS targets.
|
||||
- CI runs the shared `commonTest` on iOS for `:commons`.
|
||||
- **Amethyst → commons migration (KMP/iOS).**
|
||||
- Moves shared, CLI-safe code out of the Android app into `commons`.
|
||||
- Decryption caches (Mute/People/Community, Hashtag, Favorite-algo, Trust-provider).
|
||||
- Models: InterestSet, LabeledBookmarkList, NwcWalletEntry, CashuToken, OwnedEmojiPack.
|
||||
- The link-preview fetcher, relay broadcast tracker, and CLI-safe util extensions.
|
||||
- `HtmlParser` made KMP (dropped its Java `Charset` dependency).
|
||||
- A consolidated package taxonomy with a new architecture doc.
|
||||
- **Licensing.**
|
||||
- Replaced the GPLv3 `TarsosDSP` dependency with an in-house pitch shifter for the voice anonymizer.
|
||||
- Keeps the project MIT-clean.
|
||||
- **Misc.**
|
||||
- Added a monochrome outline Cashu icon to the Material Symbols set.
|
||||
- Renamed `ReplaceableVideoEvent` to `AddressableVideoEvent` for spec accuracy.
|
||||
- Split the monolithic CHANGELOG into per-version files under `docs/changelog/`.
|
||||
- `versionName` branch detection sets the git cwd, so it works inside git worktrees.
|
||||
- **SonarQube cleanup (S1871).**
|
||||
- Merged duplicate `when`/`if` arms across the codebase.
|
||||
- Migrated `Log` calls to the lambda overload.
|
||||
- **Documentation.**
|
||||
- Documented an Amethyst→commons migration plan and target package hierarchy.
|
||||
- Refreshed several Claude skills 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
|
||||
|
||||
## Translations
|
||||
|
||||
- Czech, German, Swedish, and Portuguese by @npub1e2yuky03caw4ke3zy68lg0fz3r4gkt94hx4fjmlelacyljgyk79svn3eef
|
||||
- Hungarian by @npub1dnvslq0vvrs8d603suykc4harv94yglcxwna9sl2xu8grt2afm3qgfh0tp
|
||||
- Dutch by @npub1w4la29u3zv09r6crx5u8yxax0ffxgekzdm2egzjkjckef7xc83fs0ftxcd
|
||||
- Polish by @npub16gjyljum0ksrrm28zzvejydgxwfm7xse98zwc4hlgq8epxeuggushqwyrm
|
||||
- Hindi by @npub1ww6huwu3xye6r05n3qkjeq62wds5pq0jswhl7uc59lchc0n0ns4sdtw5e6
|
||||
- Slovenian by @npub1qqqqqqz7nhdqz3uuwmzlflxt46lyu7zkuqhcapddhgz66c4ddynswreecw
|
||||
- Spanish by @npub1luhyzgce7qtcs6r6v00ryjxza8av8u4dzh3avg0zks38tjktnmxspxq903
|
||||
- Chinese by hypnotichemionus4 and @npub1gd8e0xfkylc7v8c5a6hkpj4gelwwcy99jt90lqjseqjj2t253s2s6ch58h
|
||||
Reference in New Issue
Block a user