Amethyst's avatar
Amethyst
amethyst@vitorpamplona.com
npub142gy...xrj0
Nostr Client for Android
Amethyst's avatar
amethyst 1 month ago
#Amethyst v1.09.1: Fixes - Fixes pull to refresh behavior - Fixes Desktop release CI - Adds Git Repo screens.
Amethyst's avatar
amethyst 1 month ago
#Amethyst v1.09.0: We are going crazy - Go live on audio spaces (Nests) - Marmot Group chats (WhiteNoise) - Voice and Video calls (Noscall) - PDF reader - Favorite algo feeds - HLS Video Uploads - Schedule posts for later - Cast videos to your TV (Chromecast) - Mute a whole conversation thread - Pull Notification (internal Pokey) - Local LLMs (Pixel 9+, Samsung 25+, Xiaomi 15+) - `amy`, a command-line Nostr client ## Features - Voice and Video Calls (NIP-AC) — one-on-one and group WebRTC calls. - Full-screen incoming-call UI over the lock screen. - PiP, ringtone and vibration. - Proximity sensor support. - Bluetooth headset routing. - Camera switch. - Network resilience and default TURN servers. - Mid-call peer invites with a 30s timeout and per-peer status. - Settings toggle to disable calls. - Audio Rooms / Nests (NIP-53) — a full revamp. - Live chat panel. - Reactions overlay and picker. - Listener counter. - Presence with publishing/onstage tags. - Hand-raise queue. - Host actions: kick, promote, demote, edit, close room. - Per-participant context sheet. - Scheduled rooms with a TimePicker and SCHEDULED badge. - "Listen to recording" CTA for closed rooms. - Share a room as `naddr1`. - Custom room themes and fonts (kind 30312). - Home live-bubble row showing follows broadcasting. - Host-leave confirmation and default-server prompt. - In-app lobby with a chat composer, gating room re-entry. - PiP that focuses active speakers. - Feed bucketed into Live / Scheduled / Recently ended, with live status verified by current presence. - Live audio-level speaker ring. - Keeps the screen on while connected. - Audio plays through the media volume stream. - Marmot Encrypted Group Chats (MLS over Nostr / NIP-EE) - Create, join and leave groups. - Inline group rendering in Messages. - Member management with user search. - Admin grant/revoke. - Group info screen with picture, member list and per-relay freshness. - Auto-publish KeyPackage. - Reset Marmot State safety valve in Settings. - Full RFC 9420 compliance pass (P0/P1/P2). - External Commit flow. - Retained-epoch decryption for offline catch-up. - Required-capabilities advertised on groups; interop fixes for other Marmot clients. - Popup notifications for group messages (kind:445). - Multi-account on Desktop - Account switcher dropdown in the sidebar and single-pane layout. - Add Account dialog and per-account logout. - View-only (npub-only) accounts. - Account removal switches to another account or logs out cleanly. - Encrypted local account storage (AES-256-GCM). - Display names and middle-truncated npubs. - Schedule posts for later - Date/time picker and toolbar toggle in the post composer. - Dedicated screen and drawer entry to view, push or delete scheduled posts. - Background worker that publishes at the scheduled time. - Warning when scheduling without always-on notifications. - Cast videos to your TV - Chromecast casting (Google Play build only). - Stop-from-phone button; the local player pauses while casting. - Cast button backfilled for accounts that already had video settings. - Mute a whole thread - Mute thread entry in the long-press dropdown and quick-action sheet. - Muted threads listed in Security Filters with an unmute action. - Muted threads dropped from feeds, notifications and push delivery. - Configurable home tabs - Choose between New Threads, Conversations and Everything. - Visibility toggles persist across restarts. - Configurable bottom navigation bar - Pick which screens appear in the bottom bar. - Restore-default button in settings. - Reply and Mention notifications (NIP-10 / NIP-22) - Dedicated Mentions channel. - Per-thread grouping. - Inline reply. - All content-event citations routed to Mentions. - Opt-in Following / Everyone tab split. - Filter the home feed in place by hashtag, community, geohash and relay (no navigation away) - Hashtag and geohash top-nav filters on Pictures, Shorts, Articles, Polls and Products - NIP-22 comments on external content (hashtags, geohashes, URLs) render a typed reply-context chip and land in the conversations feed - Interest Sets (NIP-51, kind 30015) - List, create, rename, delete and clone interest sets. - Public/private hashtag toggle. - TopNav filter chips. - NIP-9A Community Rules - Structured rules editor in the new-community flow. - Post validation against community rules in the composer. - Opt-in moderation feed filter. - PDF reader - Inline PDF previews in feeds. - Double-tap to toggle zoom. - Zoom-aware hi-res re-render for crisp pinch-zoom. - Download and save PDFs to Downloads/Amethyst. - Multi-wallet NWC - Multiple wallets with a balance view. - Default picker, rename and reorder. - Dedicated Add Wallet screen with Connect Wallet / paste / QR scan. - Favorite Algo Feeds filter in the Top Nav Bar - Custom Post creation on Polls / Pictures / Shorts / Longs - Custom Emoji Packs (NIP-30) - Browse Emoji Sets screen for discovering kind 30030 packs. - My Emoji List screen for managing your kind 10030 selection. - Modernized pack metadata screen with hero image and inline emoji/cover upload. - Public/private toggle when adding emoji. - Decrypted private emojis surfaced end-to-end. - Dedicated drawer screens for more content types. - Standalone Articles, Products, Public Chats, Communities (NIP-72), Live Streams and Follow Packs screens. - Products screen defaults to "Around Me". - Richer live stream chat. - Inline clips (kind 1313) and raids (kind 1312). - Inline zap receipts. - NIP-75 zap goal pinned at the top. - Top zappers leaderboard. - Stream clips surfaced in the profile gallery tab. - Content warnings on media. - Grid-level content warnings with distinct reasons. - Warning overlaid on the blurhash at media size. - YouTube-style video quality picker. - Feed and PiP default to the lowest HLS resolution. - Fullscreen defaults to auto. - HLS Video uploads (NIP-71) - Pick which renditions to upload. - See which file is currently uploading. - Optional cross-post as a kind-1 note. - Generated poster JPEG. - Blurhash and thumbhash on every video imeta. - ThumbHash support alongside BlurHash - Used across events, uploads and the UI. - Forwarded when adding media to the gallery. - Upload failures to generate a blurhash/thumbhash are now surfaced. - NIP-A3 Payment Targets (kind 10133) - Pay action on the note reactions row. - Payment-targets button on the profile. - Lightning address moved to the wallet setup screen. - Alt-text on payment-target events. - Search power tools - Scope, source, follows and sort toggles. - Paste an `npub1…`, `nprofile1…`, `nevent1…`, `naddr1…` or `note1…` to jump straight to it. - Markdown renderer — improved typography, blockquote gutter, table styling - Polls - Single-screen creation with a poll-type selector. - Open/Closed tabs. - "View results" option (prevents voting after viewing). - Dismiss button on active-poll cards. - Badge support Redesigned — You can now create, grant, manage and add/remove badges from your profile. - Settings revamp - Modernized Settings screen. - Dedicated Profile UI settings page. - Compose Settings screen (auto-draft toggle). - Security Filters split into a hub with per-category screens. - Tap a timestamp to toggle between relative ("2h ago") and absolute date/time, driven by a single shared ticker - Copy raw JSON of a note from the dropdown menu - Stale-relay hint on replaceable events, using the NIP-66 relay cache - Two-stage zap progress on the zap action - Bulk-remove for blocked users and hidden words - Jump-to-parent icon on replies in Full UI mode - Configurable report-warning threshold - `.f4a` audio playback ## In AI-Ready phones (Pixel 9+, Samsung 25+, Xiaomi 15+): - AI Writing Help — assistant in the new-post screen. - Tone suggestions, precomputed in parallel. - Auto language detection. - On-device option in Application Preferences. - AI Alt-Text for images — on-device image description / labeling. - Suggestions appear in the upload sheet (Google Play build). ## Desktop - Tor Support — full Tor support on the desktop app. - kmp-tor daemon and settings UI. - Per-relay routing. - `.onion` badge. - Restart-on-toggle. - Image loading via Tor. - Multi-account - Sidebar account switcher. - Add Account dialog and per-account logout. - Encrypted account storage. - Embedded local relay — an in-process relay with SQLite event persistence - Custom feeds system - Create, pin and inline-switch between custom feeds. - Author search in the feed builder (relay NIP-50 + avatars). - App Drawer with a categorized screen launcher - Workspace management - Save, switch and restore workspaces. - Tabs, an editor and unified search. - Pin/unpin syncs to the active workspace. - Namecoin name resolution - Namecoin lookups now resolve and surface in search. - Follows the `import` field of name objects (ifa-0001). - Added `relay.testls.bit` ElectrumX endpoints (clearnet TLS, Tor, bare IP). - Native theming for macOS, GNOME, KDE and Windows (matches platform look and accent colors) - Relay power tools - Dashboard and config editors. - Per-screen relay picker. - Persistent configuration. - Correct counts. - Messages - Draggable divider. - Alignment polish and centered empty states. - Typography hierarchy and refined dividers. - macOS polish - Dock / Cmd+Tab icon via the Taskbar API. - Apple-HIG squircle margins. - Transparent window icon. - Light-mode primary contrast. - Content extends correctly under the title bar. - Reading layout — width-capped reading column with comfortable side margins for wide windows - Compact UI - Search/Chat/Profile inputs. - Settings hierarchy normalized. - Tabs-first headers across Home / Reads / Notifications. - Whole-card hover on notes. - Per-OS theming preview flag for testing macOS/GNOME/KDE/Windows looks locally - Selectable error messages. - Scrollable single-pane navigation rail. - Fixes feed loading, repost rendering and Profile back-navigation visibility. ## Amy (CLI) - New `amy`, a non-interactive CLI Nostr client. - Drives the same Quartz + Commons engine as the apps. - Available on macOS and Linux from the GitHub Release. - Subcommands: - `account` / `use`, `profile`, `post`, `feed`, `notes`. - `dm send | list | await | send-file` (NIP-17, kind:14 + kind:15). - `marmot …`. - `store stat | sweep-expired | scrub | compact`. - Cache-first reads from a local file-backed event store. - `relays.json` is gone — `kind:10002 / 10050 / 10051` events in the store *are* the config. - Secure key storage. - Private keys move out of `identity.json` into the OS keychain or a NIP-49 encrypted file. - On-disk data restricted to owner-only. - Color, human-readable output by default; `--json` opts in. ## Quartz - Adds NIP-AC — WebRTC call signaling events (offer / answer / ICE / hangup / reject / renegotiate) over EphemeralGiftWrap, multi-device, group calls - Adds EphemeralGiftWrapEvent (kind 21059) — replaces 20s expiration GiftWraps for call signaling - Adds NIP-A3 Payment Targets (kind 10133) - Adds NIP-82 Software Applications (experimental) - Adds the AdminCommandEvent for audio-room kick (kind 4312) - Adds the NIP-9A community rules parser + validator (kind:34551) - Expands NIP-34 git collaboration coverage. - Repository State (kind 30618). - Pull Requests and PR updates (kinds 1618 / 1619). - Git Status events (open / closed / draft / applied). - Adds the rest of NIP-51 list event kinds and full NIP-53 live-activity rendering - Adds MLS / Marmot event types and a pure-Kotlin MLS engine with IETF RFC 9420 interop test vectors (no native deps) - Adds an async SQLite event persistence layer. - NIP-09 / NIP-50 / NIP-62 compliance. - Room-style connection pool. - Adds a file-backed event store. - flock + transactions. - scrub/compact. - NIP-50 full-text search. - NIP-62 Right-to-Vanish. - NIP-01 tiebreaker. - NIP-09 created_at window. - Deletion-author check. - Adds a reactive `ObservableEventStore` layer. - A façade that wraps any event store — SQLite-backed, file-backed, or in-memory. - Publishes a `StoreChange` on every accepted insert, delete and expiration sweep. - Projections stay in sync without re-querying the store. - Ephemeral events (kinds 20000-29999) emit without being persisted. - `EventStoreProjection` turns the change stream into a cold `Flow` of sealed `ProjectionState`. - Per-filter limits and per-projection NIP-62 vanish scoping. - Promotes the relay toolkit into the new `geode` module — a real Nostr relay. - Implements NIP-01 and NIP-45. - NIP-77 negentropy reconciliation (strfry parity). - NIP-86 management API. - TOML config and graceful drain. - Adaptive connection pooling for 10k+ connections. - Adds an EventInterner so deserialized events share canonical instances, with an interning event store that interns on insert - Adds Ktor KMP HTTP implementations alongside OkHttp - Adds macOS (Apple Silicon), iOS and Linux native targets. - Pure-Kotlin Ed25519 and X25519 for the MLS crypto on those platforms. - `commonMain` now compiles for Kotlin/Native. ## Crypto and Performance - Custom secp256k1 implementation, starting to replace `fr.acinq.secp256k1` - Pure-Kotlin core for KMP native targets (macOS / iOS / Linux). - C + inline-ASM accelerated path on Android via a JNI bridge. - Hardware SHA-256 (SHA-NI on x86_64, ARMv8 CE on ARM64). - Comb method for G multiplication → 3× faster sign/keygen. - Same-pubkey batch Schnorr verify (5–6× throughput). - `verifySchnorrFast` for Nostr (skips y-parity inversion). - 4×64-bit limb representation with lazy field ops and ARM64 assembly. - Standalone `libsecp256k1-nostr` / `libschnorr256k1` C project, with Android benchmarks. - Concurrent caching DNS resolver (SurgeDns) - Lock-free DNS cache. - 24h positive TTL. - Stale-while-revalidate. - Persisted across process restarts. - Smoother video playback - Warm ExoPlayer pool and retained warm players. - Tuned LoadControl. - VideoCache warmup 10s → 1.5s. - Stable controller-overlay tree. - Faster icons — shared FontFamily and TextMeasurer across all Material Symbols - Faster chat lists — stable list keys and reduced recomposition - Faster note rendering — cached event-derived values, fewer per-item allocations during feed scroll - Faster Quartz queries - Direct-slot driver for replaceable + addressable lookups. - Streaming k-way merge. - Smallest-first FTS intersect. - Parallel Schnorr verify in the ingest queue. - Index-driven fan-out for cache observers. - Faster rich-text translation - Thumbnail disk cache for profile pictures; Coil disk-cache eviction moved off the write path to prevent scroll stalls - Paginated GiftWrap loading for the DM chat list - Bookmark events preloaded for faster access - Lifecycle-aware screen subscriptions - Feed/screen relay subscriptions pause on background and resume on foreground. - 30s grace delay so brief app switches don't churn subscriptions. - Adaptive video disk cache — sized to 20% of free disk (256 MB–4 GB) instead of a fixed 1 GB, with on-demand HLS videos cached in SimpleCache - Tuned image/video OkHttp dispatcher and connection pool (16 in-flight per host) to de-serialize feed loading - Streaming image hashing — computes image hashes without loading the whole file into memory; SHA-256 hasher moved off the thread pool - GeoHash library rewritten from scratch for performance, dropping an external dependency ## QUIC + nestsClient (foundation) - New pure-Kotlin QUIC v1 + HTTP/3 + WebTransport client (no JNI, no native deps). - Powers the NIP-53 audio-rooms over MoQ-transport path. - Full RFC coverage and stabilization: - RFC 9002 loss recovery and retransmission. - 0-RTT early data. - 1-RTT key update. - TLS 1.3 session resumption (PSK). - ECN. - Connection migration with path validation. - Retry and Version Negotiation packet handling. - Stateless-reset detection. - Broad DoS-hardening / RFC-compliance stabilization sweep. - Passes the quic-interop-runner test matrix against picoquic and quic-go. - Covers handshake, transfer, multiplexing, retry, 0-RTT, key-update, ECN, http3. - Includes qlog diagnostics. - Multiple security and correctness audits. - RFC 9001 test vectors. - Live interop against aioquic and picoquic. - `nestsClient` module - MoQ-transport (IETF) reference implementation. - Production moq-lite Lite-03/04 codec with version-aware ALPN negotiation. - `catalog.json` publishing aligned with kixelated/hang. - Opus + AudioRecord/AudioTrack. - Reconnection policy with proactive JWT refresh. - Cross-stack (Amethyst ↔ Rust ↔ browser) interop harness in CI. ## Improvements and Fixes - WakeUp Push Notification events — Starting to migrate to a better Push/Loading system - Pinned notes moved to their own screen - Left drawer reorganized into collapsible You / Feeds / Create / System sections, with clearer names - Article writing redesign — banner, tags, slug - Redesigned long-form article cards - GIF support - Playback controls and autoplay. - GIF→MP4 upload conversion option in the upload screen. - GIF / image keyboard support in the short post screen and in Marmot, DM and public-channel chat fields. - Configurable video player buttons in Account Settings - Autoplay Videos setting (Always / Never), separate from the video-loading toggle - Drag-and-drop reordering for some relay list settings - 3-dot options menu on video / picture / file feed cards - Zoomable media grows from its source bounds, and loads the full-resolution source in the image dialog - Favorite relays can now be added to the Global Feed - Configurable max-hashtag spam filter - Account setting to forward kind 0 events to a local relay - Relay Sync UI replaced with visual indicators - Account Settings - Split broadcast tracker visibility from Complete UI mode. - Hide payment-targets icon by default and place it after Zap. - Float the broadcast banner as a rounded card. - Danger Zone section in settings - NIP-89 client tag - Per-account toggle to disable it, synced via NIP-78 security settings. - On by default and moved into Compose settings. - Local Blossom cache — image and profile-picture fetches route through a local Blossom cache - Mention preservation in compose: - Survives keyboard auto-correction. - Partial-overlap edits delete the whole mention. - Cursor snaps to mention boundaries. - Chat cursor jumping fixed - Avatar zoom-in keeps aspect ratio during the animation - Profile pictures center-cropped to prevent squashing - HLS video fixes: - Playback routed to the right MediaSource. - Multi-rendition videos collapse to a single gallery tile. - Render with artwork and a graceful fallback. - Broken "Pause" action removed from the always-on background notification - Hand-raise button in audio rooms now has a visible toggled state - GiftWrap unwrapping for all writable accounts when always-on is enabled - Search bar bech32 paste navigates instead of running a search - Top and bottom bars stay visible on non-scrollable lists - Rich-text translation: - Bug, performance and jitter overhaul. - `{N}` placeholders so URLs survive CJK translation. - Swipe-to-dismiss containers fixed on newer Compose - Right-to-Vanish settings observe toggles reactively, preserve prior behavior on upgrade - Relay reconnection: - Auto-reconnect after a server-initiated disconnect. - Periodic keep-alive to revive relays stuck in long backoff. - Account settings (profile, follow list, mutes, relay lists, KeyPackages) are republished to newly-selected relays so accounts aren't lost on fresh relays - Broadcasting relays: - Kept out of personal & channel sends. - Always included in non-private sends. - Fixed an infinite loop in the broadcast-relay computation. - Tor now falls back to clearnet when bootstrap is stuck - Android Arti reliability: stale Arti cache cleared on init with retry, SOCKS proxy default port moved with busy-port retry, relay-over-Tor connectivity fixes - Chess game challenges filtered out of the home feed (ended games only); chess cards show user picture and name instead of hex pubkeys - Expired polls re-evaluated and removed from notification cards - NIP-39 external identity claims without a platform separator are rejected - Dismissible cleanup banner across Pinned Notes, Bookmarks and Bookmark Sets, flagging author-deleted items with a "Remove from list" action - Bogus Content-Type rejected when saving downloaded media, with URL-extension fallback validation - NIP-46 bunker decrypt/encrypt response parsing fixed, with a longer timeout - Hidden DMs no longer counted toward the unread message badge - Profile header hides the `_@` prefix on NIP-05 names - Foreground-service-not-allowed exception from the background handled gracefully - Fixes Samsung crash on outgoing call - Foreground service starts earlier to prevent call death on Android 14+ - Stop ringtone and call notification when rejecting consecutive calls ## UI Refresh - Migrates the icon set from Material Icons to Material Symbols (thin weight) for a more consistent, modern look across the app - Drops unused legacy drawables - Bottom-bar icon size bumped to compensate for Material Symbols padding ## Build & Documentation - CI restructure: - Splits Android into its own CI job. - Adds Android Lint as the first step. - Merges test+build to eliminate duplicate compilation. - Drops `assembleDebug` APK uploads. - Adds a `:nestsClient:test` step to the desktop CI leg - Adds a quic-interop-runner CI workflow and a browser-side cross-stack interop workflow - Broadens `libicu` Depends so the `.deb` installs across Debian and Ubuntu - Adds `SECURITY.md` with private vulnerability reporting policy - Moves desktop packaging / AppImage tooling into the `desktopApp` module - AGP and dependencies bumped ## Contributors - @Vitor Pamplona - @⚡ Dee Kay ⚡ - @Minced Beef Energy - @greenart7c3 - @npub1a3tx...kq4k - @npub1dn0t...8tfp ## Translations - Czech, German, Swedish, and Portuguese by @⚡ Dee Kay ⚡ - Hungarian by @summoner - French by @npub106ef...r8fz - Polish by @npub16gjy...wyrm - Hindi by @npub1ww6h...w5e6 - Slovenian by @StellarStoic - Bengali by @npub13qtw...x23t - Spanish by @⚡₿it₿y₿it⚡ - Chinese by hypnotichemionus4 and @CXPLAY - Russian by Anton Zhao
Amethyst's avatar
amethyst 2 months ago
#Amethyst 1.07.3: New Shorts UI - Migrates Shorts UI out of a paged design - New edge-to-edge feed for Pictures only - New edge-to-edge feed for Shorts only - New edge-to-edge feed for long Videos only - Migrates Badges to kind 10008 - Migrates Bookmarks to kind 10003 - Fixes AOSP keyboard auto-correction bug - Fixes Poll's top nav filter - Fixes loading of Bookmark sets - Fixes sorting stability by including event ids - Fixes cursor position in quote post field - Fixes rendering of nostr: uris when composing - Adds Basic support for reaction notifications - Refactors NIP-58 Badges on Quartz - Refactors LocalCache methods - Improves the Chess UI (debug only) - Add error handling to Tor services
Amethyst's avatar
amethyst 2 months ago
#Amethyst v1.07.2: GIF Keyboard Support - Adds GIF uploads support from Keyboard - Migrates text fields and @ modifiers to the new Jetpack Compose states - Fixes Bug that wasn't openning Amber to sign - Fixes Bug on rejections using old Ambers - Replaces hex input with user search dialog in relay management (allow/ban user)
Amethyst's avatar
amethyst 2 months ago
#Amethyst v1.07.0 Amethyst: - Adds support to Pin Notes - Adds support to Polls feed screen - Adds support for Requests to Vanish - Adds support for Relay management (NIP-86) from Amethyst - Adds support for Relay monitor assessments (NIP-66) in the Relay Info screen. - Adds support for Relay member information (NIP-43) in the Relay Info screen - Adds support for WebBookmarks - Adds support for Zap Goals Quartz: - Rewords the NostrClient API for simplicity - Adds NIP-15: Nostr Marketplace protocol - Adds NIP-24: Birthday field support - Adds NIP-29: Relay-based groups - Adds NIP-32: Labeling protocol - Adds NIP-43: Relay access metadata and membership management - Adds NIP-60: Cashu wallet & spending history - Adds NIP-61: Nutzaps protocol support - Adds NIP-62: Request to Vanish feature — data deletion with relay compliance testing - Adds NIP-66: Relay monitor discovery events - Adds NIP-69: P2P Order Events (kind 38383) - Adds NIP-75: Zap Goals support - Adds NIP-77: Negentropy set reconciliation protocol support - Adds NIP-7D: Thread events (kind 11) - Adds NIP-85: Trusted Assertions — assertions for events and addressables - Adds NIP-86: Relay management UI and client implementation - Adds NIP-87: Ecash mint discoverability — Cashu and Fedimint event types - Adds NIP-89: Compliance fixes, PlatformLinkTag parsing, app handler extensions - Adds NIP-90: All DVM kind event classes from data-vending-machines spec - Adds NIP-A4: Add k tag to zap requests and enforce e tag prohibition - Adds NIP-BE: Bluetooth Low Energy mesh - Adds NIP-C7: Chat messages (kind9) - Adds NIP-5A: Static website event rendering - Adds NIP-51, kind 10001: Pinned notes Improvements and Fixes: - Show toast instead of dialog on media download success - Dynamically adjust preferred Blossom server when list changes - Add relay discovery to node master - Add scroll to settings page - Solves crashing when multiple relays with the same url are included in the resulting list. - Keep screen on during PiP playback - Desktop feed loading — broken profile nav - Use getOrCreateNote for reply linking to fix flaky thread test - Route ReadsScreen following-mode events through cache - Pin ElectrumX server certs for Samsung One UI 7 / Android 16 compatibility - Duplicate keys in relay management lazy column — sort pubkeys - URL detector — fixes localhost:3030 strings, Japanese character URLs - Web Bookmarks floating action button shape (circle) and open graph previews. - NIP-86 requests now send Accept and Content-Type headers - On DMs, activates decryption for all filetypes that match decryption url with the cipher info, not only binaries - Adds a try/finally to subscriptions to make sure they close even in crashes. - Protects against crashes when the signer sends an unverifiable payload back to Amethyst Desktop: - Cache-centric architecture for feeds - Render reposts and quoted notes in feed Performance - Non-blocking startup procedures - 20x Faster Rfc3986Normalizer - Url Detector without using regex - Parallelize preference file access at startup - Remove internal runBlocking calls - Lazy loading the memory trimming service - Speeding up DrawerContent rendering - Eagerly delete temp files in upload pipeline Refactoring: - Simplify NostrClient API for beginners - Simplify relay API with Closeable serve() - URL detector readability improvements - Restructure NIP-90 DVMs packages - Reorganize NIP-BE into subpackages - Move public messages and trusted assertions out of experimental Migrations & Deprecation Fixes - Migrate LocalClipboardManager - Migrate to semantics-based Autofill API - Migrate TabRow to Material 3 variants - Migrate `ContextCompat.startActivity` - Solves deprecation & cast warnings Platform & Build - Add linuxX64 target - Add explicit permissions to GitHub Actions - Stop Gradle daemons after build steps - Increase Android CI build timeout - Update video compression library to latest - Update dependencies, - Add local maven repo for easier library dev - Remove libsodium files - Git hooks installation in worktrees - Fixes proxy access for VLC files in claude's web environment. - Log level filtering - Parallelize BaseDBTest forEachDB Documentation - Add CLIENT.md guide for building Nostr clients with Quartz - Add RELAY.md guide for building relays with Ktor, NostrServer, SQLite Contributors - @Vitor Pamplona — Primary development - @⚡ Dee Kay ⚡ — Log level filtering, video compression, toast downloads, CI fixes, git worktree fix - @Minced Beef Energy — Desktop cache architecture, desktop bugfixes - @greenart7c3 — CI workflow permissions - @npub1a3tx...kq4k — Remove libsodium files - **mstrofnone** — ElectrumX cert pinning for Samsung One UI 7 Translations - Czech, German, Swedish, and Portuguese by @⚡ Dee Kay ⚡ - Hungarian by @summoner - French by @npub106ef...r8fz - Polish by @npub16gjy...wyrm - Hindi by @npub1ww6h...w5e6 - Slovenian by @StellarStoic - Bengali by @npub13qtw...x23t - Spanish by @⚡₿it₿y₿it⚡ - Chinese by hypnotichemionus4 and @CXPLAY - Russian by Anton Zhao
Amethyst's avatar
amethyst 2 months ago
#Amethyst 1.06.3 - Add support for multiple choice polls - Add drag-to-seek to the video progress bar - Hide video controls on playback start - Bigger recording STOP button for @Derek Ross - Fixes non http uris in the references tag - Makes sure quote tags happen once - Removes clickable NIP-05 when @ tagging - Removes naddr to index articles in bookmarks - Checks if p tags are pubkeys on drafts load - Scroll to the replied message when clicking reply preview in chat - Add an anonymous reply (tap picture) - Fixes pool rendering when labels are too different - Use uri-reference-kmp, deprecates java impl - Fixes crashing in URLs with japanese chars - Set followers to fix LazyColumn key conflicts - Clickable relay rows on the profile page - Move cache lookups from NavHost route - Improvements to the status of attestations. Validity first, then Processing status. - Fixes Tor Manager flow value - Improves Tor binding lifecycle. - Simplifies the report feed in the user profile - Clears inconsistencies in translated strings - Fixes client tags on Quartz - Fixes routes for AppDefinition events.
Amethyst's avatar
amethyst 2 months ago
#Amethyst v1.06.1 Fixes - Improvements to the rendering of Polls. - Solves some of the crashes of the concurrent modification exception - Fixes URL parsers with Japanese chars - Fixes Wallet import from Primal on Poco phones - Improves the wording of the Last Seen - Fixes for "Cannot disable reuse from root if it was caused by other groups" - Fixes comparator to avoid Comparison method violates its general contract! - Improves zap-store settings
Amethyst's avatar
amethyst 2 months ago
#Amethyst 1.06 Polls: - Adds creating and rendering NIP-85 - Redesign of the poll and zap poll cards - Adds special notification card for active polls Relay Feeds - Adds support for rendering relay feeds - Adds support for NIP-51 favorite relay feeds - Shows favorite relays in the top nav filter - Clickable wss:// links - New user gets nostr.wine to fav relay feeds Media Player - Redesigned player controls - Supports music with waveform animations - Migrates to new Media3 content views - Improved Picture in Picture actions - Fix playback lifecycle issues on PiP - Adds support for uploading audio NWC Wallets: - Adds support for in-app Wallets - Adds receive and pay actions - Adds views for balance and transactions - Adds transaction filtering by type - Adds pagination to transaction screen - Adds test cases from other repos to guarantee interoperability Calendar: - Renders NIP-52 Calendar appointments - Supports calendar time and date slots - Refactored the early implementation on Quartz for easier use Code Snippets: - Adds support for NIP-C0 Code Snippets - Replies using NIP-22 NIPs on Nostr - Adds support for event kind 30817 - Replies using NIP-22 PayTo: - Adds support for NIP-A3 Payment targets by @greenart7c3 Blossom BUD-10: - Adds support for "Blossom:" URIs on the post - Supports automatic discovery of servers - Includes support in previews - Includes support for encryption when using it in NIP-17 DMs. Expirations - Adds enhanced support for custom expirations in any new post. - Displays expirations on posts and DMs Relay Monitors: - Adds support for NIP-66 Relay monitor and discovery support to Quartz Attestations: - Adds support for rendering Attestations ( - Recommendations, Requests and Attestor Declarations are also included. Chess: - Adds support for Chess/Jester protocol - Full chess game implemented - Supports for game challenges and view external games - Running on debug only for now DMs: - Removes NIP-04 DMs - Blocks sending if the receiver doesn't have NIP-17 relay lists. - Removes force-activate NIP-17 Push Notifications: - Adds support for inline reply - Adds support for notification grouping - Adds support for Async image Loading - Removed NIP-04 notifications Long Form: - Adds support for writing Markdown content - Includes support for auto-saving drafts - Includes support for editing Uploads: - Adds support to upload Documents & audio - Adds toggle to stip file metadata regardless of compression by @⚡ Dee Kay ⚡ - Adds encrypted file upload fallback option for NIP-17 chats - Removes support for NIP-96 and updates Blossom recommendations Content Warning: - Adds an description field in new post - Displays reason on warning composables Settings redesign: - Consolidate settings into a single Settings hub screen - Redesigns Zap and NWC setup screens - Redesigns Custom zap amount screens - Adds brand new Translation Settings screen - Adds blockchain explorer settings page for OTS verification - Adds reactions row settings (enable/disable, order, show/hide counters) by @greenart7c3 - Tapping on Zap without any pre-configured amount opens the custom dialog Content parsers: - URL/URI parser rewrite in Kotlin multiplatform - Fixes characters attached to URLs or nostr URLs without a space - Massively increases parsing performance - Treat multibyte characters as URL terminators in RichTextParser by @kojira - Adds a parser for blossom and wss uris UI Improvements: - Minimizes parent thread rendering in quoted notes by @The Daniel 🖖 - New Material 3 UI for DropDowns by @⚡ Dee Kay ⚡ - New Material 3 UI for feed filters by @⚡ Dee Kay ⚡ - Draft Screen requests confirmation before deleting drafts on swipe - Swipe to switch tabs. Main screen and messages by @⚡ Dee Kay ⚡ - Adds support for rendering Zap events when quoted inside of posts. - Adds a Broadcasting feedback pop-up in the Complete UI mode Relay Management: - Adds relay search tooltip when adding relays - Adds the list of keys using each relay to the relay information - Adds active subscriptions and outbox event in the queue to relay information - Adds a complete list of event kind names to the subscription card to relay information - Tracks and displays connection success rate on relay settings - Adds relay settings export functionality - Adds NIP-45 count queries to show how many events each relay has. - Adds Relay sync utility to help users move posts between relays. Search: - Breaks the search filter into two subscriptions to prioritize Metadata without punishing content. - Fixes the need to start user searches with @ in user fields - Fixes the stability of the search feed when the user navigates away and back. - Replaces about me for NIP-05 in the user search results - Adds relay URL search to the search page - Forces returning one user when searching by nip-05 - Removes outdated versions of addressables from the search results Profiles: - Adds support for NIP-39 External Identities with kind 10011 - Adds a profile picture upload button when the user has no picture - Adds last seen to the user profile - Adds nprofile and npub copy options to the profile - Groups received zap amounts by sending the user in the profile tab - Increases the limit of Zap downloads for profiles to 1000 - Simplifies profile edit screen layout by @The Daniel 🖖 - Migrates profile galleries to display a thumbnail for videos - Fixes profile galleries' aspect ratios - Adds support for Namecoin .bit urls to NIP-05 and choice of ElectrumX server to resolve namecoins. Onboarding - Adds bulk follow screens to search for a user and to copy his/her follow list Voice message by @⚡ Dee Kay ⚡ - Adds voice anonymization - Change from "hold to record" to "click to start, click to stop" - Display kind 1 voice replies as an audio waveform - Increases max voice record duration to 600 seconds - Switches the public message event to use quoted posts for replies Fixes: - Fixes "forked from" label rendering - Avoids crashing when the `k` tag cannot be parsed to a number - Only use Voice Reply events when replying to voice notes. Others just receive a URL. - Fixes the lack of update in the follow count on the UserProfile page - Fixes out of memory when downloading large videos - Fixes Jackson deserialization for empty Filters and add regression test by @greenart7c3 - Fixes NullPointerException when the filter contains tags - Fixes download cancellations when screen components disappear - Migrates to use "title" instead of "name" tags for NIP-51 lists - Adds a longer crop for npubs so that we can see vanity keys better - Fixes the need to have tags and kinds for inbox.nostr.wine to work - Blocks the size of Relay Auth Status arrays from growing forever with auth messages - Fixes crash when getting OpenGraph tags of invalid URLs - Fixes NIP-44 key mutation in NIP-46 connect - Location permission watcher moved outside screens to avoid recreation - Solves the sorting contract crash on search by precaching all values before sorting users. - Fixes lingering relay connections from loading follows outbox's settings. - Enhance NIP-38 user status display with emoji support and metadata tags - Fixes bug on Show More calculations for very long texts without spaces - Fixing IO Dispatchers and coroutine scopes of choice - Fixes anySync parallel operation that was returning the first result, not the first positive "any". - Fixes Req onCannotConnect listeners to the relays that actually sent the req - Fixes hanging subscriptions when exceptions happen during NostrClient utility methods Defaults: - Switches wss://nostr.band to wss://antiprimal.net, wss://relay.ditto.pub on app defaults - Adds wss://nostr.wine, wss://news.utxo.one as favorite relay feeds - Adds wss://directory.yabu.me and wss://profiles.nostr1.com as index relays - Adds electrumx.testls.space, nmc2.bitcoins.sk, 46.229.238.187 and i665jpwsq46zlsdbnj4axgzd3s56uzey5uhotsnxzsknzbn36jaddsid.onion as ElectrumX servers Quartz: - Adds Relay Server implementation with NIP-45 COUNT and NIP-42 AUTH support - Adds support for dynamic auth policies to the relay implementation. - Migrates Quartz EventStore from Android-only to KMP - Adds a reqUntilEoseAsFlow extension to the Nostr Client - Adds a reqBypassingRelayLimits extension to the Nostr Client - Adds comprehensive NIP-46 Bunker support - Adds comprehensive support for NIP-47 non-payment methods. Adds complete support for iOS to Quartz by @npub1a3tx...kq4k - Provide implementation for Rfc3986 on iOS, using the Swift Rfc3986UriBridge. - Provide implementation for LargeCache, using a CacheMap - Provide implementation for fastFindURLs() - Provide implementation for makeAbsoluteIfRelativeUrl() in ServerInfoParser.ios.kt - Provide implementation for UrlEncoder - Provide implementation for UnicodeNormalizer - Provide implementation for GZip compression/decompression. Some small fixes in URLs.ios.kt - Provide implementation for AESCBC - Provide implementation for AESGCM - Provide implementation for DigestInstance - Provide implementation for LibSodium Amethyst Desktop by @Minced Beef Energy - Adds NIP-46 Bunker Login - Adds Support for Chess - Adds Thread Screens - Adds advanced search with query engine and filter panel - Adds encrypted DMs (NIP-04/NIP-17) - Adds proper empty states with EOSE tracking - Adds multi-column deck layout - Adds Full media parity — images, video, audio, encrypted DMs, upload, lightbox - Adds advanced search with NIP-50, collapsible sections, and nav state preservation - Clear stored credentials on logout - Adds bunker heartbeat indicator - Adds QR-based signer pairing - Migrates lifecycle-viewmodel KMP dependencies to KMP/Commons - Migrates drawReplyLevel modifier to KMP/Commons - Migrates ThreadFilter to KMP/Commons - Migrates Card interface and CardFeedState to KMP/Commons - Migrates Channels (public chats, ephemeral channels, and live streams) Account modules to KMP/Commons - Migrates private chatroom models to KMP/Commons - Migrates reports states to KMP/Commons - Migrates Emoji State to KMP/Commons - Migrates lud06 to lud16 mapping to KMP/Quartz - Migrates the new LocalCache observables to KMP/Commons - Migrates rich text parser from JVM to KMP/Commons Code Quality - Migrates to AGP 9.0 - Adds Amethyst Desktop to CI/CD and Release builds - Removes the in-app memory counter methods - Refactors the old NIP-05 code on Quartz - Migrates contact list management to addressable notes - Creates new observable flows for LocalCache. - Moves metadata methods from User to UserCache objects - Separate Addressable vs Replaceable event class bases - Avoid dependency on AccountSettings for NwcSignerState - Finishes the transition to EventHint objects for building events. - Lots of code review fixes by @⚡ Dee Kay ⚡ - Large accessibility review by @⚡ Dee Kay ⚡ - Moves Top Nav Filter markers from Strings to full objects. - Removes support for feed definitions - AccountState refactoring AI: - Add SKILL.md for AI agent customization - Add settings and hooks to setup Android Development for the agent Updated translations: - Czech, German, Swedish, and Portuguese by @⚡ Dee Kay ⚡ - Hungarian by @summoner - French by @npub106ef...r8fz - Polish by @npub16gjy...wyrm - Hindi by @npub1ww6h...w5e6 - Slovenian by @StellarStoic - Bengali by @npub13qtw...x23t - Chinese by hypnotichemionus4 - Spanish by @⚡₿it₿y₿it⚡
Amethyst's avatar
amethyst 5 months ago
#Amethyst v1.05.0: Bookmark Lists, Voice Notes, and WoT Scores This release introduces Bookmark List management, a complete overhaul of Voice Notes/YakBaks, and the debut of Web of Trust (WoT) scores for a safer social experience. This version adds support for creating, managing, deleting, and viewing multiple bookmark lists, which include both public and private members. You will find an improved "Bookmarks" menu option in the sidebar and extra bookmark options in the context menu of each post, allowing you to add posts directly to one or more individual lists. The Voice Notes UI has been redesigned to allow recording directly within the new Post Screen and a dedicated Voice Reply screen. Users can record a new voice message, preview it with waveform visualization, re-record if needed, select a media server, and post the reply. You now have full control. Amethyst now supports Trusted Assertions. By connecting to a WoT provider, you can see trust scores and verified follower counts directly on user pictures. This helps filter signal from noise, identifying reputable accounts to follow, which DMs to open, and which notifications to prioritize. To activate this, you will need to find a provider capable of computing these scores. While providers are currently limited and resource-constrained, we hope more will bring their own algorithms to Nostr over time. Quartz received a significantly improved database engine capable of sub-microsecond queries using Android's default SQLite database. The engine is optimized for mobile environments, using as little memory as possible to avoid impacting other apps. In the background, we have begun building Amethyst Desktop. While much work remains, the goal is a standalone, mouse-first application that moves away from mobile-centric UI layouts. New Features - Trusted Assertions: Added support for trust scores displayed on user profile pictures - WoT Followers: Displays verified follower counts in user profiles - Bookmark Lists: Full support for custom lists by @npub1a3tx...kq4k - Relay Information: New UI with expanded NIP-11 feature support - Voice Notes & Replies: Redesigned experience by @⚡ Dee Kay ⚡ - Profile Banner: New default banner by @Purple Painter - Native Links: Intercept njump, yakihonne, primal, iris.to, zap.stream, and shosho.live to open directly on Amethyst by @npub1lu4l...xa32 Improvements: - New in-memory graph-based cache scheme; moved reports and WoT scores to this new system - Disabled top bar reappearance to prevent feed shifting when navigating between pages - Lenient Kotlin Serialization to prevent crashes from malformed JSON; - Removed expired addressable events from cache - Moves reports from the old caching system to the new Graph-based one. - Reverted to a 500-post load limit for Profile screens to handle high-reply accounts - Moved the QR Code screen from a Dialog to a full Route. - Re-adds name as a tagging name to the profile edit page. Performance: - Faster event id checker by serializing, sha256 hashing, and ID comparison without creating any intermediary buffers. - Faster event JSON parsers by avoiding new variables and thus garbage collection calls - Faster tag array Deserializer - Manages the pool state without having to loop through relays, saving some milliseconds of processing. - Adds a cache system for WoT scores - Improved Compose stability for video UI BugFixes: - Fixes JSON serialization of UTF-8 Emoji surrogates for compatibility with standard Nostr implementations - Improves error message on zap configuration errors with detailed NWC URI by @⚡ Dee Kay ⚡ - Centers QR dialog content and reduce excessive top spacing by @StellarStoic - Closes subscriptions when ending them on NostrClient instead of waiting for them to finish - Requires a relay to be an outbox/inbox relay to be able to NOTIFY a user of a payment - Improves the speed of parsing of invalid kinds inside an address string - Fixes count not working for LIMIT queries in the DB - Fixes icon bug with incorrect resource id by @⚡ Dee Kay ⚡ - Fixes missing updates to the feed when the top list is not yet available locally - Fixes List of supported NIPs as Integers on NIP-11 by @⚡ Dee Kay ⚡ - Fixes ConcurrentExceptions on event outboxes Desktop: - Base Compose Multiplatform Desktop App with posts and global/following feeds by @Minced Beef Energy Web: - New website by @Derek Ross Quartz: - Adds support for Trust Provider lists and Contact Cards for NIP-85 - Early support for Payment targets as per [NIP-A3](https://github.com/nostr-protocol/nips/pull/2119) by @greenart7c3 - Initial support for NIP 46 by @greenart7c3 - Adds support for fast MurMur hash 3 64 bits - Adds a nextLong secure random method - Removing the generalist approach of ptag-mentions - Removes deprecated fields in UserMetadata - Removes compose bom from Quartz to avoid unnecessary dependencies. - Removes datetime dependencies from Quartz - Adds dependency on coroutines directly (instead of through compose runtime) - Removes old secp256 target dependencies - Adds Default scope for NostrClient and Relay Authenticator Quartz-Event Store: - Moves from text tags to probabilistic 64-bit MurMur Hash3 integers for performance - Moves from range index queries to kind,pubkey queries by default. - Adds simpler SQL queries for specific simple Nostr filters - Expose SQL query plans, vacuum, and analyse to lib users - Implements AND Tag queries from [NIP-91](https://github.com/nostr-protocol/nips/pull/1365) - Implements GiftWrap deletions by p-Tag with deletions and vanish requests - Offers several indexing strategy options to users. - Adds several test cases that verify not only the SQL but also the indexes used - Exposes raw queries that return columns for relays that might not need the tag array - Forces the use of the index on Addressables and Replaceables on triggers - Fixes duplicated events being returned from the DB - Fixes unused Or condition in the SQL builder - Refine the structure of the module classes for the DB - Removes the Statement cache since statements are not thread safe - Creating interfaces for multiple EventStores Code Quality: - Updates kotlin, compose, multiplatform, activity, serialization, media3, mockk, secp256, tor, androidxCamera, stdlib - Adds a compose stability plugin to allow traces in debug - Updates to the latest Zapstore config - Updates quarts instructions in the ReadMe. Updated translations: - Czech, German, Swedish, and Portuguese by @⚡ Dee Kay ⚡ - Polish by @npub16gjy...wyrm - Hungarian by @summoner - Hindi by @npub1ww6h...w5e6 - Slovenian by @StellarStoic - Spanish by @⚡₿it₿y₿it⚡ - Latvian by @npub1l60s...w6av - Dutch by @npub1w4la...txcd - French by @npub106ef...r8fz and Alexis Magzalci - Chinese by @CXPLAY
Amethyst's avatar
amethyst 7 months ago
#Amethyst v1.04.1: Bug fixes - Fixes crashing when starting - Fixes hashtag unfollowing for mixed case tags - Fixes release Id for the zap the devs button - Fixes quartz version for a release to Maven - Fixes disappearing of the Zap the Devs Manual Payment screen - Fixes back button of the Zap the Devs Manual Payment screen staying behind the status bar Translations: - Polish by @npub16gjy...wyrm - Hungarian by @summoner Download: