Folks using Google's PlayStore to download #Amethyst should switch to Zapstore.dev if you want to see the new version (and get the fastest bugfixes)
Vitor Pamplona
Nostr's Chief Android Officer - Amethyst/Brainstorm
Filtering by: Amethyst · clear filter
What do we do when we have one hashtag and two meanings for it?
Like, there is #Amethyst, for the Nostr client, and #Amethyst for crystallography research.
If the same hashtag is used by both groups in separate relays and users start merging those relays by rebroadcasting stuff, do both hashtags just cease to become interesting?
Do their communities disappear out of "I am not here for this" feelings of disappointment? Is this a Nostr battle for which community wins over the other by the sheer amount of posts? Do clients have a role in this? Do relays?
How do we solve it? Do we even need to solve it?
37 contributors poured their hearts into #Amethyst this year, delivering 10 major & 69 minor releases packed with new features, performance improvements, and privacy and security boosts, including:
- NIP-17 DMs (Audited NIP-44v2)
- Feed Algorithms with DVMs (NIP-90)
- Edits and Edit Proposals
- Drafts (NIP-37)
- Embedded Tor
- OpenTimestamps (NIP-03)
- NcryptSecs (NIP-49)
- Wikis (NIP-54)
- Git (NIP-34)
- Torrents (NIP-35)
- Comments (NIP-22)
- Seed Words login (NIP-06)
- Medical Data and FHIR Records
- Bech32 embeds
- Blossom (BUD-01, BUD-02, and BUD-03)
- Video Events (NIP-71)
- Picture Feeds (NIP-68)
- Build Your Own Adventure posts
- Outbox Migration (NIP-65)
- Pokey Integration
- Local and Private Relays
- Negentropy
- Spreadsheets
- Structured Curriculum Vitaes
- Relay NOTIFY commands
- NFC Transient accounts
All this was made possible by our amazing contributors on a #Value4Value model!
Click that "Zap the Devs" button and give them a nice gift these holidays. We got much more coming for 2025.
12/30/2024, 134 engagements
#Amethyst v0.89.0: Profile Galleries, Base64 images and more!
This version adds Profile Galleries, flexible NIP-96 image server settings and relay recommendations based on the outbox model. To add an image to your Gallery, click on the Share button and hit Add Media to Galery. This works on posts from you or from other people.
Features:
- Renders Base64 images and gifs by
- Adds NIP-96 image server settings by
- Adds Profile Gallery by
- Adds outbox cache in order to resend events after relay authentication
- Force-updates relays that are sending old versions of replaceables or events that have been already deleted
- Adds follow-list based relay recommendations to the relay settings.
- Adds Malware Report type
Performance Improvements:
- Reduces interruptions to the main thread
- Adds performance monitors for framedrops in benchmark mode
BugFixes:
- Several improvements in the Push Notification API to never miss a Zap
- Fixes lack of text update when switching edited versions
- Fixes poll rendering behavior after deleting an option by
- Fixes discovery top nav list watcher staying active when the app goes to the background
- Fixes scoping issues with flattenMerge freezing Top Nav List updates
- Fixes Top Nav lists after a deletion event has been received
- Fixes a bug on clicking the user profile but loading the wrong one
- Fixes the post button disappeering when the Relay Settings top label is too large
- Fixes text cut off for very long posts by
- Fixes double auth triggering NOTIFY from inbox.nostr.wine
Updated translations:
- Czech, German, Swedish and Portuguese by
- Polish by
- French by
- Chinese by
- Arabic, Bengali by
- Thai by and
- Hindi by
- Spanish by
- Dutch by
Code Quality Improvements:
- Removes decryption for DVM responses since it doesn't encrypt statuses
- Upgrades lifecycle to 2.8.3, Kotlin to 2.0.0, Lint to 1.3.1 and AGP to 8.5.1
- Migrates sdk requirements to the version catalog
- Removes unnecessary dependencies for Ammolite
- Fixes several memory issues on CI due to Kotlin 2.0
- Removes the bugfix for reproducible builds since it has been fixed
- Solves build slowdown on spotless dependencies
#Amethyst v0.88.5: Swipe-to-Delete Drafts
Features:
- Creates Ammolite, a library to host Relay access for other Nostr Clients by
- Adds author picture when writing posts and replies.
- Adds a Swipe to delete action on the Drafts screen.
- Moves to non-deterministic signatures
- Renders relay lists (NIP-65, NIP-17, and Search kinds) as notes in the feed.
- Adds auth.nostr1.com as a recommendation for private inbox relays
- Adds uploading error messages for common HTTP status codes when uploading images/videos
Performance Improvements:
- Saves a copy of the NIP65 and NIP17 relay lists locally
BugFixes:
- Fixes not showing relay icons when sending chat messages with Amber.
- Adjusts the size of the reply button on chats
- Fixes the rendering of highlights when no user is present and includes options to render by e tags
- Fixes the position of the hash verification icon on NIP-95 images.
- Avoids using SSL on localhost relays by
- Fixes alignment of the close button on Chat's reply preview
- Adjusts default zap amounts for the Zap the Devs button
- Fixes decryption error on the PrivateOutboxRelayList event for an account that is not currently active.
- Fixes extra } when rendering hashtags from Markdown
- Fixes empty filters when the logged-in accounts only include the current account.
- Fixes bug on string resources showing the same Zap amount and message for different Zap notifications.
Updated translations:
- Polish by
- French by
- Chinese by
- Arabic, Bengali by
Code Quality Improvements:
- Logs an error message in the Relay Dialog when the relay does not accept a new event
- Updates dependencies
- Changes "app" directory to "amethyst" due to the amount of libraries we now have in the same repo
- Renames JsonFilter to just Filter and adds a matching function
- Rearranges Quartz's crypto package into separate nips and reduces the amount of circular dependencies.
- Removes old highlight rendering functions
- Refactors PlaybackService
#Amethyst v0.88.0: Performance Mode and Performance improvements
This version adds several performance improvements and includes a new UI mode in Settings that is designed for older phones. On that mode, all CPU-based animations are disabled, the use of transparency is minimized and the individually-generated robots are replaced by a static image. We also recommend disabling the Immersive Scrolling when using older phones.
Features:
- Adds performance mode on Settings
- Adds login with NIP-05 address
- Adds outbox relays to zap request: sender, receiver and author relays.
- Adds the NIP-65 relay to zap split tag instead of kind3 relays.
- Adds support for AVIF images
- Adds flare.pub videos to the media tab
- Replaces the post view count for a Share icon in the main feed.
Performance Improvements:
- Centralizes stringResource calls to cache them and avoid disk use
- Removes several unecessary UI states created during rendering
- Moves uncited hashtag parsing to a thread
- Replaces InputButton for ClickableBox to avoid loading colors during rendering
- Switches Social Icons mip-mapped PNGs to faster SVG versions
- Faster calculation of uncited hashtags in content
- Improves the speed of Robohash rendering
- Moves chatroom user group away from immutable sets
- Speeds up long-press Quick Action menus
- Optimizes NIP-11 fetch and avoids requesting twice in the same minute
- Redesigns the UI Components of the relay icons better performance
- Creates a relay flow cache to speed up the relay layout
- Combines hidden and reporting flows in a new cache
- Removes post reports Live data
- Refactors Full Bleed design of the master note
- Unifies Hidden and Report checks between the Video Feed, the Full Bleed Design and the Card layout.
- Adds a hashcode cache to speed up O(1) requests of spam and blocked user public keys
- Minimizes memory alloc by adding a native forEach and Map functions in the event's tag array
- Reduces double launch of co-routines
- Improves memory use of updates to the subscription after EOSE events
- Simplifies intrinsic size calculations for Image Previews and Videos
- Improves rendering time of chat messages
BugFixes:
- Fixes the inconsistency of button animation size in the reaction row
- Fixes the inconsistency of the Zap button graphics
- Fixes the Giftwraps query by EOSE date mismatch
- Fixes the keyboard's Go Button action on new user screen
- Stops redirecting when resolving nip05 addresses by
- Fix hidden notes when hidden words is empty by
- Fixes Url Preview crop when the image is too small or to big for the preview card.
- Better error messages when NIP-11 queries fail
- Fixes use navigateUp instead of popBackStack to avoid closing the app on double clicks on the back button
- Fixes the centered url on videos without active playback
- Fixes the padding of the reaction row on quotes
- Solves notification dots appearing on the navigation bar due to a hidden post
- Increases the download limit for reactions/zaps to events from 100 to 1000
- Fixes zap split rounding precision
- Fixes padding of the zap raiser
- Avoids showing error message if devs have removed their lnadress on the Zap the Devs card.
- Fixes padding and border of the zap split section on the master note
- Removes gray border in image urls that couldn't be loaded.
- Fixes alignment of reactions
- Fixes not centered Blank Notes
- Fixes scrollable drawer for all screen sizes
- Fixes search limits for profiles from 100 to 1000 events
- Re-normalizes all relays urls before connecting to reduce duplications
- Fixes the jittering from resizing Videos and Images during loading.
- Fixes landscape video centralization
- Forces relay URLs to be single line.
Updated translations:
- Czech, German, Swedish and Portuguese by
- Hindi by
- Polish by
- French by
- Spanish by
- Chinese by
- Dutch by
Code Quality Improvements:
- Removes old Robohash bitmap-based generation
- Upgrades Compose, Lifecycle and Fragments
#Amethyst v0.87.0: Data Vending Machines (DVMs) and Gossip Model
This version adds support for Data Vending Machines for content discovery. You can request a job by simply navigating to the 4th tab and choosing one of the DVMs. It also starts our support for the Inbox/Gossip model. The relay setup screen has been rewritten to support the many types of relays Amethyst will start to use. Please add your relays as you see fit.
Our video caching system has been improved. Most of the high-bandwidth use of the app in the last month has been due to a faulty caching system for some video types. The app was just downloading them at every playback. In a similar way, the caching system for encrypted events has been massively improved. The app should feel visibly lighter at this point.
If you generated your keys from NIP-06 seed words you can now type them on the login screen to start the app. We are not generating seeds yet, but this will be available in the upcoming versions.
We are also moving to deprecate and remove most of the NIP-04 usage in the app. In the future, users won't be able to send new NIP-04 DMs but the history of past DMs will be available for as long as we can support it.
Features:
- Adds support for NIP-90, data vending machines by
- Adds support for discovery content DVMs in the discovery tab by
- Adds support for paid DVMs by
- Adds support for NIP-06 seed word key derivation (bip32 and bip39) when logging in
- Adds support for NIP-65 relay lists
- Adds support for NIP-17 private DM relay lists
- Adds support for private relay lists to save Draft events
- Adds support for local relays as a separate relay set, saving locally only.
- Adds message + dialog to setup Search relays when searching
- Adds message + dialog to setup DM relays when messaging
- Adds signString method for Amber by
- Prefers NIP-65 relays for zap request relay tags
- Prepares for NIP-96 server list integration
- Adds paste from clipboard button to NWC screen by
- Moves video compressing quality to medium instead of low
- Adds recommended amounts for the Zap the Devs
- Reduces default zap amounts due to the change of Bitcoin price
- Allows the new post's relay selection dialog to pick any relays (instead of just writing relays) by
- Improves Zap efficiency for large zap splits
- Adds a queue of commands while the relay connects
- Makes sure only one connection per URL is made when doing splits
- Removes unnecessary Amber calls when decrypting private zaps
- Improves Zap error messages to include the lnaddress of the error
- Displays Zap Split error messages in sequence instead of in multiple popups.
Bug Fixes:
- Waits 500ms before restarting all connections when saving new relays
- Automatically deactivate writes for search relays (they are read-only)
- Overrides pubkey to avoid impersonators on seals.
- Fixes the rendering of replies on wikipages.
- Fixes duplicated imeta tags when uploading the same image twice
- Removes reposts from the Dot Notification in the home's bottom bar icon
- Fixes a white space when including an image url after a new line
- Fixes alignment of the like icons after the like event
- Fixes wrong display of original and forked notes
- Improves the rendering of Channels and Communities when quoted
- Slightly better rendering Drafts in the thread
- DecimalFormats are not thread safe, moving them to thread objects
- Block error messages from closing the Zap split payment screen
- Better formats zap amounts (don't show .0 if the previous numbers are large)
- Fixes the offset position of the payment amounts on the Zap the Devs message
- Fixes Copy Text function of DraftEvents
- Fixes top bar lists not updating when following communities and hashtags.
- Show toast error if unable to hide words by
- Adds Autofocus when entering the search screen by
- Fixes the use of Global-active relays in the Global Feed
- Fixes special chars on URL previews by
- Fixes the lack of refresh when adding hidden words in the Security filters
- Makes sure only one buffering action is run for each video view
- Increases timeout to Tor connections
- Fixes a bug with
signature-nullin the sig of events from Amber
Updated translations:
- Czech, German, Swedish and Portuguese by
- French by
- Polish by
- Dutch by
- Hungarian by
- Swahili by
- Thai by
- Hindi by
- Spanish by
Performance Improvements:
- Optimizes Blurhash generation (4x gains)
- Speeds up the URL finder in the new post edit text (8x gains).
- Reduces the use of background colors to improve rendering speeds (15% gains).
- Refactors Giftwrap caching to delete encrypted text and reload the wrap if necessary (20x savings in memory use).
- Changes message wrap host to a host stub to reduce memory use
- Only download GiftWraps form 2 days past the last EOSE
- Moves the thread formatter and calculator out of Note to avoid memory use
- Slight improvement on the thread view for badges
- Unifies NIP01 Serialization with SHA-256 procedures to reduce the creation of several byte arrays at every verification
- Minimizes costs of keeping track of the number of events received per subscription
- Moves ClientController executor to a thread
- Speeds up ID calculations for Amber's Intent call
Code Quality Improvements:
- Major refactoring of the Relay List screens
- Refactors Relay URL formatter to Quartz
- Adds new observer structure for the LocalCache
- Moves Blurhash code to the commons module
- Updates UnifiedPush by
- Migrates to the latest Kotlin, Compose, and AGP 8.4.1 and several other dependencies
Download:
#Amethyst v0.86.0: Draft Support
This version adds support for draft notes autosaved on your relays, a new simplified UI choice on Settings, changes the Discover tab algorithm to show the latest of chats and communities and much more.
Features:
- Draft notes for feeds, replies, live streams, public chats, NIP-04 DMs, GiftWrap DMs, polls and classifieds by
- Adds autosave for Drafts by
- Adds edit draft in the dropdown menu and the long press popup by
- Adds a Draft feed screen for all posts
- Adds new algorithm to parse OpenGraph tags by
- Adds a Simplified UI setting to both feeds and chats
- Moves the username play button to the profile page.
- Adds link to the version notes when clicking in the version in the drawer
- Brings new git Issues and Patches to the Notification
- Filters out too many reposts of the same note when on the main feed
- Updates the bootstrap relay list
- Adds missing classes to support WebServer connections in the Video Playback
- Slightly reduces line height for improved readability
- Reduces the space between chat bubbles.
- Migrates shareable links from habla.news to njump.me
- Restructures the Discover Tab to show the Chats and Communities with the most recent new content.
- Adds a bot field to the user info
- Adds k-tag to the Deletion events
- Adds button to load Zap Splits from the cited users in the text
- Several accessibility improvements by
Bug Fixes:
- Fixes the post cut-off when the post has massive string chars without spaces or new lines
- Fixes missing Fhir Classes on Release
- Don't show the button to edit the post if the author of the original post is not the logged in user
- Fixes crash parsing multiple results from Amber by
- Fixes the load of edits on a new edit proposal
- Fixes forking information kept from a previous post
- Fixes search on binary content
- Fixes space after clickable user display
- Centers Blank Note when post was hidden by the user.
- Accepts JSON events with escaping errors
- Fixes the parsing of user metadata events several times due to large coroutine backlog
- Fixes Scheduled Tag in LiveStreams
- Fixes the isOnlineCheck for nostr nests.
- Fixes sorting contract issues when follow status and user names are the same between keys
- Fixes tickmarks on dropdowns
- Checks if a Classified is wellformed before rendering
- Fixes size and alignment of the text when the live stream video is not present.
- Fixes some imports for benchmarks
- Fixes infinite Quotation issue (3 quotes are allowed).
- Fixes crashing with too many videos in quoted posts.
- Fixes double Show More when the user has hidden a post and ALSO the user's followers have reported the post.
- Only shows OTS to the respective Edit
- Fixes a bug with the latest version of jackson
- Avoids showing machine-code errors when paying for zaps on external wallets
- Fixes too strict timing constraints for new posts (accepts up to a minute in the future)
- Fixes following of geotags
- Fixes lack of zap amount refresh after zapping a note.
- Fixes videos not being able to seekTo the zero position.
- Fixes layout issues of Blog Post summaries when images are not present.
- Doesn't show edits of blog posts in the User's Profile
- Fixes Amber's deep sleep: Adds a lifeCycleOwner listener to register external signers on resume
- Fixes missing context in some replies to blog posts.
- Adds a space after the Channel header in the reply rows
- Centralizes the counter after the list of participants in a live event.
- Fixes double mention to Community headers when seeing a reply to a community post.
- Fixes Chat preview images when no image has been set.
- Fixes the display or Zap Events when All Follows is selected in Notifications
- Fixes the reply event finder for the reply row of text notes
- Makes hidden cards full width on the discovery feed
- Fixes the width of muted messages on chat feeds.
- Fixes the feed updates after list selections on the Discovery pages.
- Realigns the reaction icons and texts between main feed and video feed.
- Fixes garbled URL preview for non-UTF-8 HTML by
- Adjusts icon sizes on the galleries
- Avoids publishing with two equal
thashtags when the user already writes them in lowercase - Limits the size of image previews from opengraph from being too big
- Fixes NPE with the cached state.
- Increases the push notification max delay to 15 minutes
- Fixes controller comparison for keep playing
- Fixes tag markers for replies in DMs
- Fixes layout of the reply row in chats
- Fixes lack of blurhash preview in some videos
- Fixes the lack of following mark on user pictures in chats
- Fixes the UI spacing for channels
- Fixes the use of filters that didn't discriminate the relay type setup
- Holds the state of Show More when switching edits and translations
- Renders DMs and live chats in the feed if they show up there
- Fixes contract violation when sorting users
Updated translations:
- Spanish by
- French by
- Dutch by
- Swahili by
- Chinese by
- Bengali by
- Hungarian by
- Czech, German, Swedish and Portuguese by
- Arabic by
- Thai by and
Performance Improvements:
- Switches Robohash to Precompiled SVGs in order to reduce the memory burned of creating Strings with SVGs on the fly
- Restructures Data Access filters and LocalCache to use a ConcurrentSkipList instead of ConcurrentHashMap
- Only download video, image and audio files in NIP-94
- Updated hashtag icons for performance
- Avoids checks if a filter has changed before generating JSon strings
- Cleans up User Metadata upon receipt instead of in every rendering
- Simpler/Faster UserDisplay renderings
- Reduces video cache from 10 to 4 videos
- Removes coroutine use for Hashtags
- Brings the ZapForwarding icon to Compose
- Simplifies the algorithm to check if chatroom sender intersects with the follow list
- Avoids serializing temporary fields on Quartz
- Refactors views to the video and chat feeds
- Restructures NoteCompose for performance
- Restructures markAsRead to minimize threading cost
- Adds a large benchmark test for duplicate events
- Optimizing the performance of Highlight rendering
- After memory cleanup, only trigger liveData when it actually changes
- Minimizes memory use to calculate zaps
- Avoids triggering an error when decoding invalid hexes
- Reduces the amount of co-routines being launched in each LiveData update
- Migrates channel list and channel notes to LargeCache
- Removes the use of data classes to speed up comparisons
- Improves Nostr filter to bring public chat messages and avoid public chat creation and metadata updates
- Removes jsoup from dependencies
- Removes the need to observe author changes to event after loaded
- Turns hashtag icons into programmable vectors
- Moves the Following Vector to a native composable
- Removes unnecessary modifier layouts from the top bar
- Uses the cached thread pool instead of the scheduled thread pool for translation services
- Avoids launching coroutines that were just launched
- Makes a cache for Media Items
- Only changes the keep playing status if different
- Reduces recompositions after video/image hash verification
- Avoiding feed jitter when pressing the notification button twice
Code Quality Improvements:
- Breaks massive NoteCompose down into each event type
- Removes the release drafter plugin on actions. Too buggy
- Removes dependency of the Robohash from CryptoUtils
- Improves Preview helper classes
- Updates secp256k1KmpJniAndroid, compose, zoomable, media3, jackson and firebase libs
- Updates AGP to 8.3.1
- Deletes the old Settings local db
- Refactors some of the old display name structure
- Refactors Relay classes.
- Isolates the LargeCache forEach method to allow quick time measurements on filters
- Reorganizes classes in the commons lib
- Fixes test cases for nip96 uploaders
- Removes unused addMargin param
- Refactoring caching systems for the Compose layer
- Aligns the BOM between implementation and tests
- Refactors the use of dividers out of components
- Refactors composables to load events, check hidden and check report
- Fix Kotlin encryptDecryptTest to decrypt with swapped private and public keys to follow NIP-44 documentation by
- Finishes the migration of People List updates from LiveData to Flow
- Migrates all Refreshable feeds to the Refreshable box component
- Refactors cache methods in GiftWraps
- Migrates Media3 Videos to the DefaultMediaSourceFactory
Download:
#Amethyst v0.58.2: BugFix for long reactions
- Addresses reactions with more than 1 character
Download:
-
Play Edition with Push Notifications & Translations: https://github.com/vitorpamplona/amethyst/releases/download/v0.58.2/amethyst-googleplay-universal-v0.58.2.apk
-
F-Droid Edition without Translations: https://github.com/vitorpamplona/amethyst/releases/download/v0.58.2/amethyst-fdroid-universal-v0.58.2.apk