<oembed><type>rich</type><version>1.0</version><title>amethyst wrote</title><author_name>amethyst (npub142…3xrj0)</author_name><author_url>https://nostr.now/npub142gywvjkq0dv6nupggyn2euhx4nduwc7yz5f24ah9rpmunr2s39se3xrj0</author_url><provider_name>njump</provider_name><provider_url>https://nostr.now</provider_url><html>#Amethyst v1.12.0: Cashu, CLINK, Private Posts, Music, Podcasts, Apps &amp; Workouts&#xA;&#xA;Highlights:&#xA;&#xA;- Adds Cashu wallet: in-app NIP-60 wallet.&#xA;- Adds CLINK payments: a new Lightning rail &#xA;- Adds App Store Feed form ZapStore&#xA;- Adds Private posts: post, reply, react, and zap privately via NIP-59.&#xA;- Adds Workout Feed: record and browse NIP-101e workouts in a dedicated feed.&#xA;- Adds Reaction cards: likes, zaps, and nutzaps render as rich gradient cards.&#xA;- Adds Music Feed: publish and browse music tracks and playlists.&#xA;- Adds Podcasts Feed: a new NIP-F4 podcast feed with favorites and an inline player.&#xA;- Adds support for hashtag labels to posts after they&#39;re published.&#xA;- Adds AppFunctions to allow Gemini to call Amethyst locally.&#xA;&#xA;## New Features&#xA;&#xA;### Payments&#xA;&#xA;- Adds unified zap popup for lightning, CLINK, on-chain, and Cashu in one place&#xA;  - Quick 3-state toggle to quickly pick the source of your zap&#xA;  - Defaults to options that both receiver and sender can use&#xA;  - The payment rails now appear live as they resolve.&#xA;- Adds full Cashu support (NIP-60/61)&#xA;  - A full in-app ecash wallet, beyond the previous redeem-only support.&#xA;  - Create and add a Cashu wallet, with its own screen and settings.&#xA;  - Browse and pick mints from a mint directory.&#xA;  - Mint ecash from Lightning and melt it back to Lightning.&#xA;  - Send and receive ecash tokens.&#xA;  - Top up a mint from a standalone screen.&#xA;  - See per-mint balances on the wallet.&#xA;  - Send NIP-61 nutzaps from the wallet, with a Lightning-style send progress bar.&#xA;  - Cashu top-up is crash-safe on retry.&#xA;  - Funds are checkpointed the instant they leave the wallet.&#xA;- Adds full CLINK support&#xA;  - Pay and get paid through CLINK Offers and Debits.&#xA;  - Render all schemas inside of Notes&#xA;  - Profiles can show a tappable CLINK Offer chip.&#xA;  - Set one-time or recurring limits.&#xA;  - Resolve a person&#39;s payment offer by NIP-05.&#xA;  - A debit connection pulls funds only up to the cap you set.&#xA;- Adds Unified Send Payment screen.&#xA;  - Long-press any chip in the Profile or this screen to copy that destination.&#xA;  - Use Lightning, CLINK, on-chain Bitcoin, and Cashu/nutzaps from one place.&#xA;  - A &#34;Pay from&#34; selector chooses which wallet the money leaves.&#xA;  - Pay Bitcoin payment targets from the in-app on-chain wallet.&#xA;&#xA;### Posting &amp; Privacy&#xA;&#xA;- Adds private posts and private replies&#xA;  - Create and view private posts, replies, and reactions.&#xA;  - Customize who the receivers are for posts and replies.&#xA;- Adds support for Private reactions to all feeds&#xA;  - React and un-react privately automatically.&#xA;  - Safeguards prevent private content from leaking publicly.&#xA;- Enhances support for Private zaps&#xA;  - Zaps on private notes are forced private.&#xA;  - Replies to a private zap route into the sender&#39;s DM room.&#xA;- Adds support for NIP-32 hashtag labels.&#xA;  - Add first-class hashtag labels to posts.&#xA;  - Follow-hashtag labels publish through your outbox relays.&#xA;  - They surface in the hashtag feed.&#xA;- Enhances post&#39;s compose screen&#xA;  - Richer notify chips in the new-post screen.&#xA;  - Modernized inline payment cards that show their descriptions.&#xA;- Enhances hidden words screen&#xA;  - A per-row unblock button on the Hidden Words screen.&#xA;  - Remove a single muted word without clearing the whole list.&#xA;&#xA;### Chat &amp; DMs&#xA;&#xA;- Re-engineers DM bootstrapping with dynamic loading&#xA;  - Only loads the last 7 days worth of DMs.&#xA;  - Per-relay download windows realign when DMs are pruned.&#xA;  - A slow Tor connect is no longer mislabeled as &#34;stalled&#34;.&#xA;  - The paused-history card shows parked relays.&#xA;  - The sync marker is now tappable.&#xA;- Adds support for pinning DM conversations&#xA;  - Pins sync across devices via a NIP-78 app-data event.&#xA;- Adds support for @-mention search in Marmot (MLS) group chats&#xA;  - Search and tag users in the group composer.&#xA;  - Conversation participants rank first.&#xA;  - They are marked with an &#34;In this chat&#34; chip.&#xA;- Fixes quoted chat messages being rendered as posts&#xA;  - Quotes render inside chat bubbles with the proper chat-reply design.&#xA;  - The redundant reply row is skipped when the quote is already inline.&#xA;- Fixes MLS reliability&#xA;  - Unread state now persists across app restarts.&#xA;  - The kind:445 backlog is no longer refetched on every launch.&#xA;- Adds Share to DM (&#34;Send as DM&#34;) flow&#xA;  - A new Android share-sheet target, alongside &#34;New Post&#34;.&#xA;  - Share text, an image, or a video from another app into a DM.&#xA;  - Pick a recent conversation; the chat composer opens pre-filled and editable.&#xA;&#xA;### Reading &amp; Feeds&#xA;&#xA;- Enhances Tor reliability and connection speed&#xA;  - Connects faster by reusing the network directory between launches (about 3× quicker on warm starts).&#xA;  - Watchtower rebuilds Tor automatically when it looks connected but no relay traffic is flowing.&#xA;  - Recovers from stuck entry guards that could leave Tor unable to connect across app restarts.&#xA;  - No longer hangs on a hostile network — bootstrap gives up after 60s and retries instead of wedging.&#xA;  - Holds Tor-routed relays until the proxy is ready, cutting wasted battery and network on launch and Wi-Fi/cellular switches.&#xA;  - Stays stable through self-heal resets and network changes.&#xA;- Adds new Notifications top nav filter&#xA;  - The old &#34;Global&#34; tab is split into &#34;Curated&#34; and a raw &#34;Global&#34;.&#xA;  - Curated is the current system that requires your involvement on a thread to notify you.&#xA;  - Global shows everything, including all hell threads.&#xA;  - Replies to likes/zaps now reach the notifications feed.&#xA;- Adds Reply to zaps and reactions from the notification screen&#xA;- Pre-loads reply threads from the feed so opening a thread is faster.&#xA;- Adds support for LaTeX math in notes.&#xA;  - Use `$...$` for inline equations.&#xA;  - Use `$$...$$` for block equations.&#xA;- Adds support for first-class reaction rendering&#xA;  - Reactions and zaps anchor their own thread view.&#xA;  - Reactions, zaps, likes, and nutzaps render as gradient cards.&#xA;  - Each card embeds the post it&#39;s about.&#xA;  - A single tap on a like/zap chip opens that event&#39;s thread.&#xA;- Adds support for Workouts (new, NIP-101e)&#xA;  - Create and publish workout records (kind 1301), interoperable with the RUNSTR dialect.&#xA;  - Browse a dedicated Workouts feed.&#xA;  - Filter by exercise type, author, community, or hashtag.&#xA;  - Richer workout cards: a hero metric, a fixed stats grid, splits-style breakdowns, and the source app.&#xA;- Adds support for Music (new)&#xA;  - First-class support for tracks (kind 36787) and playlists.&#xA;  - Browse Music Tracks and Music Playlists feeds.&#xA;  - Publish a new track and create playlists.&#xA;  - Add a track to a playlist from a bottom sheet.&#xA;- Adds support for Software Apps directory (new, NIP-82).&#xA;  - Browse software applications (kind 32267).&#xA;  - Filter by follows, author, hashtag, or global.&#xA;  - An app detail screen shows screenshots and the author.&#xA;  - Tap a screenshot to open it fullscreen.&#xA;- Enhances support for App recommendations (NIP-89).&#xA;  - Editable recommendations on your profile.&#xA;  - Tiered ordering in the recommendations editor.&#xA;  - Richer app cards with author attribution.&#xA;- Adds support for Birdex species collections (kind 12473).&#xA;- Adds support for Agora fundraiser campaigns (kind 33863).&#xA;- Adds Audio visualizer picker&#xA;  - A live visualizer for audio-only notes.&#xA;  - Real-time FFT spectrum from the track&#39;s decoded audio (no mic, no new permission).&#xA;  - Styles: Classic (default), Spectrum Bars, Color Waves, Radial Ring, Aurora Glow, Static, and Off.&#xA;  - Each style has a live preview in the settings picker.&#xA;  - Your choice syncs across devices via NIP-78.&#xA;  - Fills the art area in fullscreen and shows a fixed strip in the feed.&#xA;- Adds support for Podcasts (new, NIP-F4)&#xA;  - Dedicated podcast and episode feeds, filterable by follows, authors, communities, or hashtags.&#xA;  - Mark podcasts as favorites.&#xA;  - Tap a podcast to open a show screen with all its episodes and an inline player.&#xA;  - Translatable show and episode descriptions on the feed cards.&#xA;  - The episode audio player is squared so the controls get room.&#xA;&#xA;## Improvements and Bug fixes&#xA;&#xA;- Adds Searchable settings.&#xA;  - A search box filters rows by title and curated keywords.&#xA;  - Supports prefix matching and an empty-state.&#xA;- Adds Swipe for brightness and volume in fullscreen video.&#xA;- Fixes Quote-reposts (NIP-18) not counting in the repost counter.&#xA;- Hides reposts of unsupported kinds instead of showing blank cards.&#xA;- Fixes URLs glued to other words: the &#34;fix missing spaces&#34; pass now indexes URLs by their first character.&#xA;- Search no longer matches text in `p`, `e`, `a`, `alt`, or `client` tags.&#xA;- Media uploads in anonymous posts use the ephemeral signer.&#xA;- Fixes anonymous profile zaps being encrypted as private zaps.&#xA;- The Cashu wallet row shows the Cashu logo instead of a generic icon.&#xA;- On-chain zaps highlight the bolt and show as pending in the counter.&#xA;- Removed the wallet options reordering drag-and-drop UI.&#xA;- De-duplicates preset amounts in Zap Settings&#xA;- Fixes the chip-drag interaction in Zap Settings.&#xA;- Fixes the live-stream chat relay fallback&#xA;- Zap and non-zap polls now share the same option text when composing a post&#xA;- Fixes Legacy NIP-71 videos to resolve their address from the real `d` tag.&#xA;- Fixes the default media server resetting on every launch.&#xA;- Fixes account cache: Deleting an account now clears its cached entry.&#xA;- Adds support for birthdays on profile&#xA;- Fixes cache child back-references when deleting notes&#xA;- Detaches on-chain-zap, nutzap, and channel sources on cache deletion&#xA;- Honors relay connection backoff during Tor bootstrap.&#xA;- Heals sockets opened on the wrong transport by rebuilding them.&#xA;- Recovers relay connections after the device wakes from sleep.&#xA;- Keeps a relay&#39;s reconnect backoff from resetting on a momentary connection.&#xA;- Honors the &#34;Money operations via Tor&#34; setting for payments and wallet relay connections&#xA;- Reduces runtime log noise.&#xA;- Fixes several edge-case crashes.&#xA;- Fixes IPv6-literal URLs in posts&#xA;- Reorganizes changelog into versioned files&#xA;- Audit fixes across the private-posts, CLINK, and MLS paths.&#xA;- Adds off-main-thread crypto and leak prevention.&#xA;- Hides share/bookmark on private notes.&#xA;&#xA;## Desktop&#xA;&#xA;- Adds image compression on upload:&#xA;  - An Image Compression settings panel.&#xA;  - Per-post quality presets.&#xA;  - Batch progress in the composer.&#xA;  - A preview-then-publish gate.&#xA;  - A fail-loud dialog if compression fails.&#xA;- Adds new media player.&#xA;  - Replaced vlcj with kdroidFilter&#39;s ComposeMediaPlayer.&#xA;  - Uses a JCodec/FFmpeg backend.&#xA;- Adds Group DM parity with Android.&#xA;  - Set and update a group name (subject) on encrypted group chats.&#xA;  - Create a group by selecting multiple recipients in the New DM dialog.&#xA;  - Rooms are marked read when opened.&#xA;  - Messages from muted authors no longer mark a room unread.&#xA;  - Desktop now handles group direct messages the same way.&#xA;- Adds Replies tab on the user profile.&#xA;  - Feeds also show reply context (parent embed plus label) inline.&#xA;- Adds Feed refresh.&#xA;  - Inline card expansion.&#xA;  - A &#34;New posts&#34; chip that slides in from the top.&#xA;  - Stick-to-top on prepend.&#xA;  - Wired-up like/zap/comment actions.&#xA;- Smaller fixes.&#xA;  - Copy a Blossom image URL on click, with a hover tooltip and snackbar.&#xA;  - Collapsed-sidebar polish: tighter ripple and hover tooltips.&#xA;  - Amethyst logo on the Tor and account-loading splashes.&#xA;  - Restored inter-word spacing in rich text with mentions/hashtags.&#xA;  - Fixed parent-author metadata loading.&#xA;- Adds Unhealthy-relay review.&#xA;  - A banner and popup that flag relays behaving poorly.&#xA;- Adds Namecoin diagnostics.&#xA;  - The diagnostics card was ported from the Android settings.&#xA;&#xA;## Cli&#xA;&#xA;- Adds `amy offer` — CLINK offer info and request, including `--payer-data`.&#xA;- Adds `amy debit` — CLINK debit info, pay, and budget.&#xA;- Adds `amy zap --with &lt;ndebit&gt;` — settle a zap invoice via a CLINK debit.&#xA;- Adds `amy offer discover &lt;nip05&gt;` — resolve a profile&#39;s offer through NIP-05.&#xA;- Closed CLINK parity gaps (profile offer, follow, offer pay, GFY detail).&#xA;- Adds a clink-headless interop harness.&#xA;&#xA;## Quartz&#xA;&#xA;- Adds Relay-server toolkit.&#xA;  - Added a `Flow&lt;Event&gt;` REQ-responder SPI with a storage-free dispatch engine.&#xA;  - Added NIP-50 search parsing.&#xA;  - Added suspendable auth hooks.&#xA;  - Split engine/backend/policy packages.&#xA;- Adds NIP-45 approximate COUNT&#xA;  - Added HyperLogLog with wire support.&#xA;- Enhances NIP-11 documents.&#xA;  - Added the missing `banner` field.&#xA;  - Relay limits are now a single source of truth served over NIP-11.&#xA;- Adds Relay Connection observability.&#xA;  - Stable per-connection ids.&#xA;  - A per-connection `RequestContext` threaded into the event source.&#xA;  - Auth identity moved from policy into connection scope.&#xA;- Fixes NIP-46 double-resume and retry id-reuse race&#xA;- Fixes NIP-46 error serialization issues&#xA;- Fixes `q` (quote) tags being dropped by an inverted guard.&#xA;- Fixes `CommunityRulesEvent` and CLINK DTO serializers&#xA;- Improves Relay failure logs&#xA;- Fixes disk cache to recreate cache dir if cleared at runtime&#xA;&#xA;## Build &amp; Documentation&#xA;&#xA;- **Dependency updates.**&#xA;  - Bumped Kotlin, Compose Multiplatform 1.11.1, Coil 5, OkHttp 5, Jackson, AndroidX, Firebase, and more.&#xA;  - Adapted the Blossom interceptor test to OkHttp 5&#39;s `Interceptor.Chain`.&#xA;- **iOS CI.**&#xA;  - `commons` `commonTest` now compiles and runs on iOS targets.&#xA;  - CI runs the shared `commonTest` on iOS for `:commons`.&#xA;- **Amethyst → commons migration (KMP/iOS).**&#xA;  - Moves shared, CLI-safe code out of the Android app into `commons`.&#xA;  - Decryption caches (Mute/People/Community, Hashtag, Favorite-algo, Trust-provider).&#xA;  - Models: InterestSet, LabeledBookmarkList, NwcWalletEntry, CashuToken, OwnedEmojiPack.&#xA;  - The link-preview fetcher, relay broadcast tracker, and CLI-safe util extensions.&#xA;  - `HtmlParser` made KMP (dropped its Java `Charset` dependency).&#xA;  - A consolidated package taxonomy with a new architecture doc.&#xA;- **Licensing.**&#xA;  - Replaced the GPLv3 `TarsosDSP` dependency with an in-house pitch shifter for the voice anonymizer.&#xA;  - Keeps the project MIT-clean.&#xA;- **Misc.**&#xA;  - Added a monochrome outline Cashu icon to the Material Symbols set.&#xA;  - Renamed `ReplaceableVideoEvent` to `AddressableVideoEvent` for spec accuracy.&#xA;  - Split the monolithic CHANGELOG into per-version files under `docs/changelog/`.&#xA;  - `versionName` branch detection sets the git cwd, so it works inside git worktrees.&#xA;- **SonarQube cleanup (S1871).**&#xA;  - Merged duplicate `when`/`if` arms across the codebase.&#xA;  - Migrated `Log` calls to the lambda overload.&#xA;- **Documentation.**&#xA;  - Updated Privacy Policy to the new requirements from the PlayStore&#xA;  - Documented an Amethyst→commons migration plan and target package hierarchy.&#xA;  - Refreshed several Claude skills, documentation and the Namecoin design doc.&#xA;  - Added a rule requiring a license check when adding any new dependency.&#xA;&#xA;## Contributors&#xA;&#xA;- nostr:nprofile1qqsyvrp9u6p0mfur9dfdru3d853tx9mdjuhkphxuxgfwmryja7zsvhqpzamhxue69uhhv6t5daezumn0wd68yvfwvdhk6tcpzpmhxue69uhkummnw3ezumt0d5hszythwden5te0dehhxarj9emkjmn99uwfvhl6&#xA;- nostr:nprofile1qqsv4zwtz8cuwh2mvc3zdrl5853g365t9j6mn25edlul7uz0eyzt0zcpzpmhxue69uhkummnw3ezumt0d5hszxnhwden5te0wf5kymewv46jumn0wd68y6tp9eshqup0qyd8wumn8ghj7um9dejxjapwdehhxenvv9ex2tnrdakj7nrm3sx&#xA;- nostr:nprofile1qqs9vyevafl4f7rqluqykt500e9nj5ase8eh5k423rgwtfw6qdjhd4spz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz9mhwden5te0wfjkccte9ehx7um5wghxyctwvshszrnhwden5te0dehhxtnvdakz7axwpzp&#xA;- nostr:nprofile1qqs827g8dkd07zjvlhh60csytujgd3l9mz7x807xk3fewge7rwlukxgppemhxue69uhkummn9ekx7mp0qydhwumn8ghj7argv4nx7un9wd6zumn0wd68yvfwvdhk6tcpz9mhxue69uhkummnw3ezumrpdejz7d9xcpk&#xA;- nostr:nprofile1qqswc4nrhvp4lrjct0ayy0ps8f2hvj8e2guucp63dwcx6m6e8pka9fqpr4mhxue69uhkummnw3ezucnfw33k76twv4ezuum0vd5kzmp0qy08wumn8ghj7un9d3shjtnwdaehgu3wwa5hyetydejhgtn2wqhsz9nhwden5te0v4jx2m3wdehhxarj9ekxzmny9ue5n65v&#xA;- nostr:nprofile1qqsxeh4ue276rhaqtz4c2df209gfkkft9006qdcryh3gaswtfuvxvlgpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsz9mhwden5te0wfjkccte9en82mnywd68ytndv5hsc2mjk6&#xA;&#xA;## Translations&#xA;&#xA;- Czech, German, Swedish, and Portuguese by nostr:nprofile1qqsv4zwtz8cuwh2mvc3zdrl5853g365t9j6mn25edlul7uz0eyzt0zcpzpmhxue69uhkummnw3ezumt0d5hszxnhwden5te0wf5kymewv46jumn0wd68y6tp9eshqup0qyd8wumn8ghj7um9dejxjapwdehhxenvv9ex2tnrdakj7nrm3sx&#xA;- Hungarian by nostr:nprofile1qqsxekg0s8kxpcrka8ccwztv2m73kz6jy0ur8f7jc04rwr5p44w5acspzamhxue69uhhyetvv9ujumn0wd68ytnzv9hxgtcppemhxue69uhkummn9ekx7mp0qyg8wumn8ghj7mn0wd68ytnddakj7c0ns2l&#xA;- Dutch by nostr:nprofile1qqs82l74z7g3x8j3avpn2wrjrwn855nyvmpxa4v5pftfvtv5lrvrc5cppemhxue69uhkummn9ekx7mp074ge6h&#xA;- Polish by nostr:nprofile1qqsdyfz0ewdhmgp3a4r3pxvezx5r8yalrgvjn38v2ml5qrusnv7yywgpzemhxue69uhkummnw3ezucm6v9ejuurvw4ej7qg0waehxw309a3h5ctn9e6x7up0kvajyt&#xA;- Hindi by nostr:nprofile1qqs88dt78wgnzvaph6fcstfvsd98xc2qs8eg8tllwv2zlutu8ehec2cpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszrnhwden5te0dehhxtnvdakz7qghwaehxw309aex2mrp0yh8qunfd4skctnwv46z7x03hlx&#xA;- Slovenian by nostr:nprofile1qqsqqqqqqp0fmkspg7w8d305ln96a0jw0ptwqtuwskkm5pddv2kkjfcppemhxue69uhkummn9ekx7mp0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qgkwaehxw309aex2mrp0yhxg6t5w3hjuur4vghsdu406e&#xA;- Spanish by nostr:nprofile1qqs07tjpyvvlq9ugdpax8h3jfrpwn7kr72k3tc7ky83tggn4et9eangpg3mhxw309ajxyartwdukjery09cxwctsd3ek6cnjdfnxs6t00pnhq7ttdvmkw7nsd3shxdrr0gery6nyva3h2ct0096kyerjw9jzummwd9hkutcprpmhxue69uhkv6tvw3jhytnwdaehgu3wwa5kuef0qyghwumn8ghj7mn0wd68ytnhd9hx2tcxdyhdq&#xA;- Chinese by hypnotichemionus4 and nostr:nprofile1qqsyxnuhnymz0u0xru2watmqe25vlh8vzzje9jhlsfgvsff9942gc9gprfmhxue69uhhq7tjv9kkjepwve5kzar2v9nzucm0d5hsz9mhwden5te0wfjkccte9e3hsurvv9ujummjvuhsz9nhwden5te0wfjkccte9ehx7um5wghx6mm99urkr68m</html></oembed>