Oddbean new post about | logout
 #Amethyst v0.90.0: Torrents and Outbox restructuring

https://image.nostr.build/9ffdec74046ed059f8b58f1bce140b1780850a123e948a7f7510ef81af7654f5.jpg

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 nostr:nprofile1qqsv4zwtz8cuwh2mvc3zdrl5853g365t9j6mn25edlul7uz0eyzt0zcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsshgmkj
- Polish by nostr:nprofile1qqsdyfz0ewdhmgp3a4r3pxvezx5r8yalrgvjn38v2ml5qrusnv7yywgppamhxue69uhhqunv9ecxcatn9ugu22zc
- French by nostr:nprofile1qqs8av5uzf4nv2q80chrmp3mj9a9dd6zjw4fmz56hsn2gzar72rxhtcpzpmhxue69uhkummnw3ezumt0d5hszrnhwden5te0dehhxtnvdakz7qg3waen5te0w4kkyun9dsargwp58qhsnxcg72
- Arabic, Bengali by nostr:nprofile1qqsgs9hgjw87vz36jf2r83m5zree2q87zvs8s7kty9jljdz7wprytysppemhxue69uhkummn9ekx7mp07uqq9t
- Thai by nostr:nprofile1qqsxdhmq2cke8xk6scfyxeyfj3dyancavg6xk0v50r023gec7vsrceqpzemhxue69uhkvun9deejumn0wd68yvfwvdhk6qg6waehxw309aex2mrp0yezumn0wd68yctnd9sjumn9wsq3yamnwvaz7tm0venxx6rpd9hzuur4vghen3hm and nostr:nprofile1qqs93adzxqyt5k58xzjrta50rrdqkyxw2wxxu2495xmczgrkxpx4nacpr3mhxue69uhkummnw3ez6vp39eukz6mfdphkumn99e3k7mgpr3mhxue69uhkummnw3ez6vpj9eukz6mfdphkumn99e3k7mgpremhxue69uhkummnw3ez6vpj9ejx7unpveskxar0wfujummjvum84tx8
- Hindi by nostr:nprofile1qqs88dt78wgnzvaph6fcstfvsd98xc2qs8eg8tllwv2zlutu8ehec2cppamhxue69uhkummnw3ezumt0d5qs6amnwvaz7tmwdaejumr0dsq32amnwvaz7tmjv4kxz7fwd4hhxarj9ec82cs0t5vfr
- Spanish by nostr:nprofile1qqs07tjpyvvlq9ugdpax8h3jfrpwn7kr72k3tc7ky83tggn4et9eangpr9mhxue69uhhqatzd35kxtnjv4kxz7tfdenju6t09uq3vamnwvaz7tmjv4kxz7fwd4hhxarj9ec82c30qy2hwumn8ghj7mn0wd68ytn00p68ytnyv4mz76xu9qg
- Dutch by nostr:nprofile1qqs82l74z7g3x8j3avpn2wrjrwn855nyvmpxa4v5pftfvtv5lrvrc5cpz9mhxue69uhkummnw3ezuamfdejj7tk0drp
- Chinese by nostr:nprofile1qqsyxnuhnymz0u0xru2watmqe25vlh8vzzje9jhlsfgvsff9942gc9gpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxthwden5te0wfjkccte9ekk7mt0wd68ytnsd9hxktcpzfmhxue69uhkymmnw3ezucmc9ekhxtc24vk7q and nostr:nprofile1qqsp7cq7dw5zmyu8zep83323dzcs8dsv6grdfxmm7xt8p2pzr3jyp9spzfmhxue69uhhqatjwpkx2urpvuhx2ucpr3mhxue69uhkymmnw3ezucnfw33k76tww3ux76m09e3k7mgpzpmhxue69uhkummnw3ezuamfdejsl63s8x
- Hungarian by nostr:nprofile1qqs88rmfrp9wmfn4qq4kslly0j8futmmrgn86mu3gkc3jvcjl97p3mcpzamhxue69uhhyetvv9ujumn0wd68ytnzv9hxgtcpz4mhxue69uhkummnw3ezummcw3ezuer9wchsz8nhwden5te0dehhxarj94c82c3wwajkcmr0wfjx2u3wdejhgtcqngjsj

Download via [Obtainium](http://amethyst.social) or [Zap.Store](https://zap.store/)