#Amethyst v1.00.2: Bug fixes - Fixes follow/unfollow from hashtags and geohashes - Migrates top nav list to hashtag, geohash and community lists - Fixes community join/leave crash Fixes branch name - Avoids crash when lacking google services in the play version. - Fixes crash when typing a new post without permissions to do a draft post. Download:
#Amethyst v1.00.0: Full Outbox This version completes our migration to the outbox model, where the app dynamically manages the relay list used to pull posts from your follows' own relay lists. By default, the app will connect to relays that aren't in your lists through our embedded Tor. Normal usage will connect to hundreds of relays. Many of them will fail, and that's ok. Nostr has baked-in redundancy; these failures won't affect your experience. New relay lists were added to the UI to help you manage how the app works. Specifically, you can now block relays and add trusted relays. Trusted relays will connect outside of Tor, which is faster, but allows those relays to see your IP. You should only add relays there if you trust the relay operator. Proxy relays (like filter.nostr.wine) can be added to the proxy list. After that, the app will only use those relays to download the content for your feeds, disabling the outbox model. DMs and other non-outbox functionality will still use their own relays. Broadcasting relays can be added to push your events out there. Every new event from the app will be sent to all broadcasting relays. Finally, the new Indexer list allows you to choose which relays to use to find users, like purplepages.es. For users of our Quartz library, we have finished all of the work to change the library's mindset from a fixed list to a dynamic pool of relays. Now, each NIP has its own dedicated folder and defines its own tags and caching structures. This expansion allows us to add diverse functionalities such as relay clients, relay servers, event builders, Nostr filter builders, caching systems, deletion and event hint indexers, helper functions, and moreβ€”all specifically tailored to each individual NIP. This modular approach creates the space to develop each NIP independently and integrate them into Amethyst as distinct modules, while still sharing Amethyst's main relay and cache engine when necessary. We expect fewer breaking changes as we move forward with it. At some point, Quartz will move to its own repository and be converted to a Kotlin Multiplatform project for each NIP/module. This will allow us to build demo/testing applications for each NIP in the same repo. This version adds support for: - YakBak Voice Messages - Picture-in-Picture pop-ups - Public Messages - Coolr.chat's Ephemeral Chats - Follow packs - Reads feed in the discovery tab - Hidden cashu tokens in emojis Features: - Reengineered relay, relay pool, and nostr client to manage dynamic pools - Reengineered note cache for a garbage collector-friendly version - Reengineered media pre-loading and caching to minimize layout changes - Reengineered decryption cache, now per account - Reengineered chat channels cache - ReengineeredΒ the indexing of Addresses to data classes - Reengineered EOSE cache and managers - Migrates to a Flow-based design for all account information and services - Migrates to a Compose subscription model for relay filters - Adds 90-day expiration to all drafts - Deprecate stringified JSON in favor of tags on user metadata kind 0 events - Adds support for live events at the top of the feed. - Migrates Video events to non-replaceable kinds - Migrates NIP-51 to use NIP-44 encryptions - Migrates Chat, Community, Location, and Hashtag follows to their own lists - Migrates to reply with NIP-22 for everything but kind 1s. - Massively improves relay hint selections - Removes relay picker when sending new posts - Removes general relay list (kind3) - Adds new relay lists: Trusted, Blocked, Proxy, and Broadcasting - Moves most of the Dialogs to full-screen routes - Breaks NewPostScreen and ViewModels into Screens and ViewModels for each supporting NIP - Adds support for creating and replying to NIP-22 geo scope posts - Performance Improvements by not re-verifying duplicated events - Adds Content Sensitivity setting to the Security filter screen - Adds Translation setting to a new screen. - Extends AsyncImage to correctly use pre-loaded aspect ratio and avoid jitter - Adds imeta tags for images and urls inside the content of the Classifieds - Adds new default banner for empty profiles - Finishes the migration from LiveData to Flow - Restructures the old static datasource model into dynamic filter assemblers. - Moves filter assemblers, viewModels and DAL classes to their own packages. - Creates Composable observers for Users and Notes - Unifies all Filter Assembler lifecycle watchers to a few classes - Moves relay authentication to a coordinator class for all accounts in all relays. - Moves the relay NOTIFY parser to its own coordinator class for all accounts - Moves the connection between filters and event cache to its own coordinator class - Adds support for Tor in push notifications - Isolated Connectivity services, from Compose to Flow - Isolated Tor services, from Compose to TorService - Isolated Memory trimming services, from Compose to Flow - Isolated Image Caching services, from Compose to Flow - Isolated Video Caching services - Isolated Logging services - Isolated NIP-95 Caching services - Isolated Pokey receiver services - Isolated OkHttpClient-building services as flows - Hold off on all DM attachments until the message is sent. - Adds previews for any number of urls, events, and media uploads on new post screens. - Adds zap split, zap raiser, and geolocation symbols for DMs and channel messages - Adds picture upload for NIP-28 metadata - Adds support for community relays on NIP-28 - Adds a pool of ExoPlayers when multiple videos are playing - Moves DVM's last announcement restriction from 90 days to 365 days Quartz: - Adds a NostrClient with filter and event outbox cache - Adds a Basic RelayClient and parsers for all relay commands - Migrates signers from callback to suspending functions - Migrates event create functions to builders with templates - Migrates the filter design to a filter per relay - Migrates hardcoded tag filters in events to the Tag's parser and assembly functions. - Normalizes all relay URLs - Formalizes relay hint providers per kind - Event store support with SQLite - Reengineered NIP-55 Android signer and its cache - Reengineered exception handling for signer errors - Adds support for the Request to Vanish NIP - 62 - Migrates all NIP-51 lists to the new event-tag structure. - Migrates Drafts and NIP-04 and NIP-17 DMs to the new structure - Migrates Bookmarks to the new structure - Migrates NIP-56 to the newest tag structure - Adds support for nip70 Protected Tags - Adds full support for nip73 External Content IDs - Adds support for NIP-48 proxy tags - Removes the old "datasource" model - Adds a Bloom-based hint indexer with MurMur hash - Adds a PoW miner - Restructures thread helpers for NIP-10 - Migrates Zap splits, zapraisers, subject, alts, and content warning to their own packages. Dev Team: - @Vitor Pamplona - @Don't Believe The Vibe πŸŒ±πŸ‹πŸŠ - @greenart7c3 - @KotlinGeek - @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή Translations: - Czech, German, Swedish, and Portuguese by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Dutch by @Bartus - French by @Anthony πŸ‡«πŸ‡· - Polish by @Polak - Chinese by @CXPLAY - Slovenian by @StellarStoic - Thai by @123πŸ¦ˆΰΈ›ΰΈ₯ΰΈ²ΰΈ‰ΰΈ₯ΰΈ²ΰΈ‘ΰΈ‚ΰΈΆΰΉ‰ΰΈ™ΰΈšΰΈ - Bengali by @Cats😺 - Hindi by @ΰ€°ΰ€Ύΰ€œ - Spanish by @βš‘β‚Ώitβ‚Ώyβ‚Ώit⚑ - Hungarian by @Zoltan ⚑️ and @summoner - Persian by @L Download:
#Amethyst v0.94.3: Adds iMeta tags to GIF urls - Adds iMeta tags to GIF urls to optimize GIF previews - Fixes the extra empty kind 20 post when uploading videos on the media tab - Fix: Only close the upload screen if the video upload is a success on the Media tab - Maintains note reaction visibility when scrolling by @Giovanni Download:
#Amethyst v0.94.2: Fixes Tor leaks This release fixes two Tor leaks introduced during the migration of two APIs in v0.94.0. The new relay API contained a bug that bypassed the user's Tor preference for relays and the migration to Coil3 implemented a one-time cache for the Tor preference, preventing it from reflecting subsequent changes for image loading. Thanks to @Chris for the Tor audit Download:
#Amethyst v0.94.1: GIFs and Custom Emoji inputs This version adds a : command to link custom emojis on new posts and chats. Similar to the @ for user search, just start typing to find your custom emojis. When you see the list of emojis, click on the emoji to add it as an inline emoji OR click on the right button to add as a regular URL in the post. Create your GIF and rection libraries on emojito.meme . Make sure to bookmark your and/or other people's emoji packs to add them to Amethyst's `:` list. Happy shitposting. Download:
#Amethyst v0.94.0: Encrypted Media on DMs Now every upload on DM chats will be encrypted to the destination's pubkey following the same spec 0xChat uses. This offers a massive update in privacy from the common "hidden link" design. The encrypted blobs are sent to NIP-96 and Blossom servers. Make sure your server accepts encrypted blobs. Sattelite and void.cat do accept. We redesigned our upload screens to allow multiple images/videos on new posts, stories, and chat encryption. Error handling was also improved with the screens now allowing you to try again on a different server. Features: - Adds support for encrypted media uploads on NIP-17 DMs by @Vitor Pamplona - Integrates with Pokey's Broadcast receiver. - Expands the Around Me filter to 50km - Shows NIP-22 replies in the replies tab of the user profile - New upload screen for chats - When uploads fail, the screen stays live to allow changing the server and trying again. - Improves the padding in the layout of the gallery - Allows multi-image posts to be displayed in the Profile Gallery - Refactors zap the error message screen to allow sending messages directly to each split receiver with their error - Adds support for multiple media uploads at the same time. - Adds support to display PictureEvents with multiple images at the same time - Adds QR code private key export dialog by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Added Gamestr custom hashtag icon by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Switches to the right account from push notification click - Adds new picture and video events to the user profile gallery - Adds basic support for RelationshipStatus to Quartz Fixes: - Fixes bug that resets localhost relay settings. - Moves to using cancellable coroutines to avoid canceling the parent thread altogether. - Fixes the navigation padding on Samsung devices for the Shorts tab. - Fixes the chat's input field behind Samsung's app bar on tablets - Fixes notes appearing of replies for some recipes - Removes the swipe to delete draft from right to left. Only left to right remains available. - Solves crashing when a p-tag contains only "ffff" - Fixes edge-to-edge issues when the keyboard is shown on the Media Server settings. - Fixes keyboard overriding the relay settings screen - Fixes double quotes on NIP-28 Channel messages - Fixes cosine caching on Blurhash - Fixes download and loading image icon not showing on posts when text overflow by @greenart7c3 - Fixes lack of notification when a new account is logged into the app and before the app restarts. - Fixes displaying an old result when coming back to a DVM screen - Fixes the bugs from migrating video events to imeta tags - Removes pull to refresh from the gallery Performance: - Increases the number of possible active video playbacks on the screen to 20 - 10x better performance on Blurhash generation - Improves search by npubs to use all relays. UI Improvements: - Avoids cutting off some of the users in the Pay intent screen - Adds toast message when the video/image starts downloading by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Remove crossfades and double composition on image loading/success - Improves Uploading feedback for the NewPost screen - Optimizes user search to account for names that start with the typed prefix - Several accessibility improvements by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Simple refactoring to newer versions of the clickable text - Migrates Video events to imeta tags - Removes youtu.be links from the video feed. - Checks for video file types in uppercase as well as lowercase Code quality: - Move relay dialog to a route by @greenart7c3 - Refactors user tagging lists to generalize them - Updates zoomable, vico, mockk, kotlin, compose Bom, firebase, navigation compose, android camera libs and adaptive acompanist - Refactors Ammolite to remove the dependency on OkHttp to prepare for KTor and multiplatform settings. - Reduces the singleton coupling between Client and RelayPool. - Removes troublesome dependency on blurhash encoder library - Restructures contentScale for Images and Video dialogs - Refactors Media Uploaders to improve code reuse - Refactors iMeta usage on Quartz to move away from NIP-94 - Removes the use of nostr: uri for notifications - Enables a new screen to be routed when new logins happen - Removes the contract of the old image picker - Simplifies the Gallery stack - Separates event class that manages general lists and abstracts another intermediary class that manages private tag arrays in its content. Updated translations: - Czech, German, Swedish, and Portuguese by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Dutch by @Bartus - French by @Anthony πŸ‡«πŸ‡· - Polish by @Polak - Chinese by @CXPLAY - Slovenian by @StellarStoic - Thai by @123πŸ¦ˆΰΈ›ΰΈ₯ΰΈ²ΰΈ‰ΰΈ₯ΰΈ²ΰΈ‘ΰΈ‚ΰΈΆΰΉ‰ΰΈ™ΰΈšΰΈ - Bengali by @Cats😺 - Hindi by @ΰ€°ΰ€Ύΰ€œ - Spanish by @βš‘β‚Ώitβ‚Ώyβ‚Ώit⚑ - Hungarian by @Zoltan ⚑️ and @summoner - Persian by @L Download:
#Amethyst v0.93.1: Fixes and adjustments - Moves to NIP-22 to reply to Interactive Stories. - Adds amount and personalizations labels to the DVM feed - Fixes Satellite's blossom upload - Fixes incorrect reply order when the direct reply is also included as a quote. - Fixes image upload tests - Fixes the bug on not having the video feed at the top when loading the app from scratch. - Fixes screen mispositioning when rotating the phone on full screen video/image dialogs. - Fixes images on DVM profiles - Fixes badge crash - Fixes missing reactions on video feeds - Improves performance of the Hex encoder. - Improves the layout of the discovery feed items - Updates jackson, secp256k1 and AGP Download:
#Amethyst v0.93.0: Blossom, Olas, Around Me feeds and Interactive Stories. Adds support for displaying NIP-63 Interactive Stories Adds support for Blossom media servers Adds support for Olas' Image feeds Adds support for Around Me feed with posts that only show up in that location New Features: - New Android Image/Video Picker - Adds support for pronouns on profile - Migrates Video uploads from NIP-94 to NIP-71 Video events - Migrates Picture uploads from NIP-94 to NIP-68 Picture events - Adds support for BUD-01, BUD-02, and BUD-03 - Adds support for NIP-22 Comments - Adds nip05 field to the hidden words filtering by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Adds support for q tags with addresses - Adds search.nos.today to bootstrapping relays for search - Adds DM and Search default buttons to the relay screens - Adds hidden words filter to search, hashtag and geotag feeds - Applies hidden words even to hashtags that were not included in the content of the event. - Adds support for saving reactions, zaps, translations user preferences on private outbox relays UI Improvements: - Adds animations to the zap, reaction and boost popups by @Giovanni - Lighter chat bubbles - Date separators on chats - Adds unfollow to note dropdown by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Improves (Show More) presence to only when it actually makes a difference. - Adds UI for when the location permission is rejected. - Improves error message for the signup page when the display name is blank - Adds extra padding for the zap setup screen - Pre-process search to avoid showing and hiding posts after hidden words where processed by the UI. - Rotate on full screen video if the device orientation is not locked by @KotlinGeek BugFixes: - Fixes account creation that follows itself - Fixes translations of http urls - Fixes search bug that mixed geohashes and hashtags - Fixes issue with the order of multiple same-author events in a thread - Fixes drafts appearing for other logged in accounts by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Fixes jumping of scroll when the thread updates - Fixes app hanging when switching to accounts due to waiting to decrypt the blocked user list that might not exist - Fixes initial decryption of mutelists when using amber by @greenart7c3 - Fixes crash on empty p-tags on new replies @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Fixes translations preferences changes running on the main thread by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Fixes some images being saved as videos @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Fixes missing notifications when multiple accounts tried to decrypt it - Fixes lack of zap progress updates when there is a private zap the user cannot decrypt or when a nwc payment fails. - Fixes saving the scrolling position when navigating between multiple threads. - Fixes rendering cache of notes in thread view which kept replies in the wrong thread level - Fixes reply level calculation caching - Fixes poll's background rendering with the right percentages - Fixes "null" strings on profile fields. Code Quality Improvements: - Refactors FeedStructures to prepare for custom feeds - Updates Account architecture to operate feeds with location - Custom Empty Feed Screen for Notifications - Fully Deprecates note1, removing the last usages of the standard - Removes unused encryption fields from NIP-94 - Moves the parallel processing amber calls to a utils class - Refactors location to operate as a flow - Unifies location Flows and geoHash Flows into one - Make location flows react to changing location permissions on the fly - Moves NIP-44 test model classes to a new file - Improves GitHub actions to prepare debug apks in every commit - Upgrades to Coil 3 - Updates AGP, kotlin, runtime, compose, camera, corektx, media3, firebase, fragment, navigation, jna, jackson, accompanist, kotlin serialization, mockk, coroutines-test and kotlin collections Performance: - Improves thread preloading - Adds a cache for reply levels when viewing threads. Updated translations: - Czech, German, Swedish and Portuguese by @⚑ Dee Kay βš‘πŸ‡ΈπŸ‡ͺπŸ‡¬πŸ‡§πŸ‡¨πŸ‡ΏπŸ‡§πŸ‡·πŸ‡¦πŸ‡Ή - Dutch by @Bartus - French by @Anthony πŸ‡«πŸ‡· - Polish by @Polak - Chinese by @CXPLAY - Slovenian by @StellarStoic - Thai by @123πŸ¦ˆΰΈ›ΰΈ₯ΰΈ²ΰΈ‰ΰΈ₯ΰΈ²ΰΈ‘ΰΈ‚ΰΈΆΰΉ‰ΰΈ™ΰΈšΰΈ - Bengali by @Cats😺 - Hindi by @ΰ€°ΰ€Ύΰ€œ - Spanish by @βš‘β‚Ώitβ‚Ώyβ‚Ώit⚑ - Hungarian by @Zoltan ⚑️ and @summoner - Persian by @L
#Amethyst v0.92.7: Empty mute list fix - Fixes empty mute lists and mute words when Amethyst was unable to decrypt the list. Download at
#Amethyst v0.92.6: UI updates for Android 15 - Fixes the Share target for GIF keyboards - Fixes the update the of the share target when it's already open - Fixes zapraiser progress bar - Fixes poll rendering - Reduces the font size for the translation label - Fixes margin of poll options with translation - Fixes array too big because strfry blocks more than 20 filters Download at