#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 - Nostr Client for Android
Join the social network you control. The most feature-rich Nostr client for Android.

This version adds support for NIP-35 Torrent files (dtan.xyz), adds significant memory pruning for encrypted payloads and large events (DMs, Notifications, Zaps, etc), and completely restructures the way most of our caching works to facilitate immediate subscription updates using the outbox model on custom feeds by NIP-51 lists. This version also offers new defaults for NIP-65 and DM relay lists for new users and fixes several bugs and inconsistencies.
Features:
- Adds support for NIP-35 torrents and their comments
- Adds a simplified sync Signer to the Quartz library
- Adds Default lists for NIP-65 inbox and outbox relays
- Adds Default lists for Search relays
- Adds local backup for UserMetadata objects
- Adds local backup for Mute lists
- Adds local backup for NIP-65 relays
- Adds local backup for DM Relays
- Adds local backup for private home relays
- Improves caching of encrypted DMs
- Updates Twitter verification to X
- Improves the rendering of QR Codes
- Adds support to Delete All Drafts
Code Quality Improvements:
- Separates Account actions from Account state in two objects
- Changes Startup procedures to start with Account state and not the full account object
- Moves scope for flows in Account from an Application-wide scope to ViewModel scope
- Removes all LiveData objects from Account in favor of flows from the state object
- Migrates settings saving logic to flows
- Migrates PushNotification services to work without Account and only Account Settings.
- Migrates the spam filter from LiveData to Flows
- Rewrites state flows initializers to avoid inconsistent startups
- Finishes the migration of the service manager to the Application class
- Moves to hold the all feeds in stateflows
- Updates benchmark, composeBOM and firebaseBOM to the latest versions
- Moves the default zap type to a state flow and avoids passing on to the screen when using the default value
- Removing unecessary livedata objects for translation services
- Moves lastread routes to mutableStateFlow
- Migrating livedata to flow for contact list updates of the user.
- Adds a destroy method to FollowList state for consistency
- Moves follow list states to the AccountViewModel
- Migrates Notification Summary to the new state model
- Moves the notification screen to the new state model instead of viewModels
- Refactoring Moving feed status from ViewModel to State objects
Interface Improvements:
- Show only 3 users in the recommended relays section
- Creates links to njump when events can't be found on Amethyst
- Adds support for MOD reports
- Displays commitment PoW if present
- Changes relay set kind to be NIP-51 consistent.
- Adds more information to when error messages are not available in the relay stats.
- Adds context to highlight events
- Adds previews to test markdown rendering
- Improves the look of inlinde code in markdown
- Improves badge display
Performance Improvements:
- Adds pruning for giftwrapped messages
- Fixes clearing of flows and live data object pools before removing notes from the local cache
- Improves stability of composables
- Migrates caching of decrypted value outside of the Event class
- Removes encrypted parts of NIP-17 from the cache
- Removes old NIP-04 messages from the cache
- Avoids deleting new NIP-17 plain text chats from memory
- Avoids bottom nav recompositions
- Simplifies nav bar selected calculations
- Avoids remembering edit lists that will never exist.
- Improves speed of chatlist rendering
Bug Fixes:
- Fixes lingering cache and threads still active after killing the app
- Fixes crash when opening the Relay screen with empty urls as relays.
- Fixes horizontal padding of the chat messages
- Fixes the download of 1000s of NIP-65 relay lists because some relays consider empty lists as null and return everything.
- Fixes fdroid push registration to re-register even if the saved distributor was already selected.
- Fixes crash when the relay url of a user is duplicated.
- Fixes padding of short quotes
- Fixes slow down when the last message on chat is a base64 image.
- Fixes the centralization of the "and more" part of relay recommendations
- Fixes miscaching flows of the relay lists from follows.
- Fixes miscache of hashtag following button
- Fixes heading sizes on markdown
- Changes Delete all events to use maximum chunks of 200 elements to avoid the 65KB stringified JSON limit of many relays.
Updated translations:
- Czech, German, Swedish and Portuguese by