What's Changed
- Add scroll-to-event functionality for push notifications by @vitorpamplona in #2066
- Add NIP-51 list event types for content curation and management by @vitorpamplona in #2067
- Add support for NIP-53 Meeting Spaces and Meeting Rooms by @vitorpamplona in #2069
- Add floating action buttons for media and poll creation by @vitorpamplona in #2070
- Enhance long-form article editor with banner image and tags UI by @vitorpamplona in #2071
- Add WebRTC-based peer-to-peer voice and video calling via NIP-AC by @vitorpamplona in #2068
- New Crowdin Translations by @github-actions[bot] in #2072
- Improve markdown rendering with enhanced typography and styling by @vitorpamplona in #2073
- Add support for NIP-59 Ephemeral Gift Wrap events (kind 21059) by @vitorpamplona in #2074
- Add remote video activity monitoring to detect peer disconnections by @vitorpamplona in #2075
- Add multi-device call state synchronization by @vitorpamplona in #2076
- Implement Tor SOCKS port retry logic with dynamic port allocation by @vitorpamplona in #2077
- Clamp PiP aspect ratio to Android system limits by @vitorpamplona in #2079
- Add proximity sensor support to auto-pause video during calls by @vitorpamplona in #2078
- Preload bookmark events to improve scrolling performance by @vitorpamplona in #2080
- Fix resource leaks and improve coroutine lifecycle management by @vitorpamplona in #2081
- New Crowdin Translations by @github-actions[bot] in #2082
- Implement Picture-in-Picture mode for call activity by @vitorpamplona in #2083
- New Crowdin Translations by @github-actions[bot] in #2084
- Improve video call quality with 720p resolution and bitrate limiting by @vitorpamplona in #2085
- NIP-AC: Document mid-call renegotiation and multi-device support by @vitorpamplona in #2086
- Add group call support to WebRTC call system by @vitorpamplona in #2087
- Add group call support with participant management by @vitorpamplona in #2088
- Improve call handling: busy rejection, peer tracking, and ICE state by @vitorpamplona in #2089
- New Crowdin Translations by @github-actions[bot] in #2090
- Add group call support with multi-member p-tags and per-peer SDP by @vitorpamplona in #2091
- Add maximum hashtag limit security filter by @vitorpamplona in #2092
- Disable hardware acceleration for profile picture image loading by @vitorpamplona in #2094
- Simplify poll creation UI and consolidate poll types by @greenart7c3 in #2093
- Add comprehensive logging to WebRTC call session and controller by @vitorpamplona in #2096
- New Crowdin Translations by @github-actions[bot] in #2095
- Exclude current user from group call member displays by @vitorpamplona in #2097
- Add Marmot protocol support (MIP-00 through MIP-05) by @vitorpamplona in #2098
- Fix group call handling for answer/reject events by @vitorpamplona in #2099
- Fix call UI to exclude current user from peer list by @vitorpamplona in #2100
- Add Marmot protocol support with MIP-00, MIP-02, MIP-03, MIP-05 implementations by @vitorpamplona in #2101
- New Crowdin Translations by @github-actions[bot] in #2102
- Refactor CallController for multi-peer group calls with mesh topology by @vitorpamplona in #2103
- Exclude current user from peer lists in call UI by @vitorpamplona in #2104
- Fix call state handling to prevent missed cleanup due to StateFlow conflation by @vitorpamplona in #2105
- Add MLS (Messaging Layer Security) implementation for Marmot by @vitorpamplona in #2106
- Fix call audio state transitions and notification handling by @vitorpamplona in #2107
- test: add comprehensive MLS engine tests and fix self-decrypt ratchet by @vitorpamplona in #2108
- Handle peer rejections in incoming group calls by @vitorpamplona in #2109
- Improve group call peer management and signaling robustness by @vitorpamplona in #2110
- Improve peer disconnection handling in calls by @vitorpamplona in #2111
- Add option to forward profile events to local relays by @greenart7c3 in #2112
- Add payment targets feature with NIP-A3 support by @greenart7c3 in #2114
- New Crowdin Translations by @github-actions[bot] in #2113
- Support multiple remote video tracks in group calls by @vitorpamplona in #2115
- Fix intermittent test failure, DesktopFeedFilters.kt by @davotoula in #2116
- New Crowdin Translations by @github-actions[bot] in #2117
- Improve video call UI to show active peer videos with fallback avatars by @vitorpamplona in #2119
- New Crowdin Translations by @github-actions[bot] in #2118
- Improve video call detection to include active video streams by @vitorpamplona in #2120
- Handle WebRTC offer glare in call renegotiation by @vitorpamplona in #2121
- Replace NIP-59 Gift Wraps with Ephemeral Gift Wraps for WebRTC calls by @vitorpamplona in #2123
- Add ability to dismiss poll notifications by @vitorpamplona in #2124
- Add MLS interoperability test vectors and implementations by @vitorpamplona in #2125
- fix for 5m hung windows build: Switching to cache: gradle in setup-java. by @davotoula in #2026
- New Crowdin Translations by @github-actions[bot] in #2126
- Improve broadcast completion detection and dismissal timing by @vitorpamplona in #2127
- Add routing support for Poll and ZapPoll draft edits by @vitorpamplona in #2128
- Set explicit surface color for Card in notification feed by @vitorpamplona in #2129
- Add tabbed interface to Polls screen for open/closed polls by @vitorpamplona in #2130
- NIP-AC: Comprehensive WebRTC call state machine and group call spec by @vitorpamplona in #2131
- show toast while downloading video for sharing by @davotoula in #2135
- Fix image sharing error by @davotoula in #2133
- Add MLS group state persistence and KeyPackage rotation management by @vitorpamplona in #2141
- Add poll results preview feature with persistent viewing state by @vitorpamplona in #2139
- Add thumbnail disk cache for profile pictures by @vitorpamplona in #2140
- New Crowdin Translations by @github-actions[bot] in #2137
- Add comprehensive test suite for NIP-AC call state machine by @vitorpamplona in #2143
- New Crowdin Translations by @github-actions[bot] in #2142
- feat: add missing translations for 5 keys across 4 locales by @davotoula in #2144
- Add Marmot inbound/outbound message processors and subscription manager by @vitorpamplona in #2146
- New Crowdin Translations by @github-actions[bot] in #2145
- Add Marmot MLS group messaging support to Amethyst by @vitorpamplona in #2147
- Add ALT tag support to PaymentTargetsEvent by @greenart7c3 in #2148
- Add Marmot MLS group messaging UI and integration by @vitorpamplona in #2149
- Add comprehensive MLS test suite and improve GroupInfo signing by @vitorpamplona in #2150
- fix: prevent share dialog from being dismissed by control auto-hide by @davotoula in #2151
- Add periodic ticker to re-evaluate open polls after close date by @vitorpamplona in #2154
- New Crowdin Translations by @github-actions[bot] in #2152
- New Crowdin Translations by @github-actions[bot] in #2155
- Refactor Marmot group chat UI with improved message composer by @vitorpamplona in #2157
- Add KeyPackage publication status tracking for Marmot groups by @vitorpamplona in #2158
- Reorganize settings: move sensitive options to "Danger Zone" section by @vitorpamplona in #2159
- Add permission handling for accepting calls from notifications by @vitorpamplona in #2160
- Add drag-to-reorder functionality for relay lists by @vitorpamplona in #2161
- Fix audio cleanup and call state handling on Activity destroy by @vitorpamplona in #2163
- Prevent stale call offers from retriggering after app restart by @vitorpamplona in #2164
- New Crowdin Translations by @github-actions[bot] in #2162
- Add pure Kotlin secp256k1 implementation for Nostr operations by @vitorpamplona in #2166
- New Crowdin Translations by @github-actions[bot] in #2165
- New Crowdin Translations by @github-actions[bot] in #2167
- Add thread safety and robustness improvements to Marmot MLS implementation by @vitorpamplona in #2169
- New Crowdin Translations by @github-actions[bot] in #2171
- Optimize secp256k1 with unrolled arithmetic and caching by @vitorpamplona in #2170
- New Crowdin Translations by @github-actions[bot] in #2174
- Add thread-safe state management to CallManager by @vitorpamplona in #2168
- Add member removal and group info editing for Marmot groups by @vitorpamplona in #2173
- Add groupId parameter to commit ordering tracker methods by @vitorpamplona in #2177
- Implement Ed25519 and X25519 cryptography for native platforms by @vitorpamplona in #2178
- New Crowdin Translations by @github-actions[bot] in #2175
- fix: account switcher bottom sheet not showing logged-in accounts by @mstrofnone in #2172
- Refactor note layout to use custom zero-overhead NoteComposeLayout by @vitorpamplona in #2138
- Change relay feed icon from door to storage by @vitorpamplona in #2179
- Move Event Sync and Import Follows to Settings screen by @vitorpamplona in #2180
- Add AI writing assistance with ML Kit integration by @vitorpamplona in #2176
- New Crowdin Translations by @github-actions[bot] in #2181
- Add relay feed support and refactor feed filtering logic by @vitorpamplona in #2182
- Enhance chess UI with user profiles and player display by @vitorpamplona in #2184
- Integrate Lightning Address and Payment Targets into NIP47 Setup by @greenart7c3 in #2183
- Remove redundant route parameter from Community FeedDefinition by @vitorpamplona in #2185
- feat: add multi-wallet NWC support with balance view and default picker by @vitorpamplona in #1988
- Add wallet connection UI controls to AddWalletScreen by @vitorpamplona in #2186
- New Crowdin Translations by @github-actions[bot] in #2187
- Animated gif to mp4 conversion by @davotoula in #2189
- Optimize secp256k1 field arithmetic with fused multiply-reduce and platform-specific intrinsics by @vitorpamplona in #2188
- New Crowdin Translations by @github-actions[bot] in #2190
- Remove LiveChessGameChallengeEvent from home feed filters by @vitorpamplona in #2192
- Optimize secp256k1 field arithmetic with fused multiply and inline comparisons by @vitorpamplona in #2195
- Add cross-platform support and simplify benchmark output by @vitorpamplona in #2197
- New Crowdin Translations by @github-actions[bot] in #2193
- New Crowdin Translations by @github-actions[bot] in #2200
- fix(quartz): snapshot LargeCache entries in forEach to prevent ConcurrentModificationException by @mstrofnone in #2201
- RFC 9420 compliance: encryption, commit ordering, and thread safety by @vitorpamplona in #2202
- Improve WebRTC call reliability and notification handling by @vitorpamplona in #2203
- Replace LongArray with Fe4 struct for secp256k1 field elements by @vitorpamplona in #2204
- Add call settings screen for video quality and TURN server configuration by @vitorpamplona in #2205
- fix: start foreground service earlier to prevent call death on Androi… by @vitorpamplona in #2206
- Add thread safety, network monitoring, and camera controls to WebRTC calls by @vitorpamplona in #2208
- Improve thread safety and error handling in call management by @vitorpamplona in #2209
- Add macOS support to benchmarks and Kotlin/Native compilation by @vitorpamplona in #2210
- Claude/review webrtc calls vc6v0 by @vitorpamplona in #2211
- Use GifToMp4Converter from LightCompressor-enhanced 1.9.0 by @davotoula in #2239
- Add high-performance C secp256k1 implementation with JNI bindings by @vitorpamplona in #2374
- Improve Tor bootstrap resilience and WebSocket connection handling by @vitorpamplona in #2269
- New Crowdin Translations by @github-actions[bot] in #2270
- New Crowdin Translations by @github-actions[bot] in #2375
- fix: VLC video playback shows Install VLC fallback when running via Gradle (#2062) by @mstrofnone in #2377
- feat: Desktop Tor support — embedded kmp-tor, full privacy routing, settings UI by @nrobi144 in #2381
- Update LightCompressor-enhanced to v2.0.0 by @davotoula in #2382
- New Crowdin Translations by @github-actions[bot] in #2383
- Add YouTube-style video quality picker for adaptive videos by @davotoula in #2384
- Fix secp256k1 field arithmetic carry-fold bugs and optimize squaring by @vitorpamplona in #2387
- Add per-peer invite timeouts and calls enable/disable setting by @vitorpamplona in #2388
- Fix GCM IV length in KeyStore decryption by @vitorpamplona in #2389
- Fix Bluetooth SCO receiver registration for Android 12+ by @vitorpamplona in #2390
- New Crowdin Translations by @github-actions[bot] in #2386
- Update AndroidBleTransport for Android 13+ Bluetooth API changes by @vitorpamplona in #2391
- Fix Marmot initialization error in group creation by @vitorpamplona in #2392
- Add MarmotGroup chat room support to ChatroomHeaderCompose by @vitorpamplona in #2394
- New Crowdin Translations by @github-actions[bot] in #2396
- Make editState parameter optional in ReactionsRow and related components by @vitorpamplona in #2397
- Extract pinned notes into separate screen and navigation route by @vitorpamplona in #2395
- Update Android SDK to platform 37 and build-tools 37.0.0 by @vitorpamplona in #2398
- Add shared element transition animation to image/video dialogs by @vitorpamplona in #2399
- Implement per-peer watchdog timers for group call members by @vitorpamplona in #2400
- Fix Ed25519 provider selection to avoid AndroidKeyStore on Android by @vitorpamplona in #2403
- New Crowdin Translations by @github-actions[bot] in #2402
- Share HLS Video via NIP-71 + LightCompressor-enhanced 2.2.0 by @davotoula in #2401
- New Crowdin Translations by @github-actions[bot] in #2404
- fix: end call when the last connected peer hangs up by @vitorpamplona in #2405
- Fix ringtone/notification stuck after rejecting consecutive calls by @vitorpamplona in #2407
- Add comprehensive logging to MLS group persistence and recovery by @vitorpamplona in #2408
- New Crowdin Translations by @github-actions[bot] in #2406
- New Crowdin Translations by @github-actions[bot] in #2409
- fix(marmot): switch KeyStoreEncryption transformation to AES/GCM/NoPa… by @vitorpamplona in #2410
- fix(marmot): use GCMParameterSpec for decrypt + stop auto-deleting gr… by @vitorpamplona in #2411
- Add NIP-82 Software Apps event types and tag support by @vitorpamplona in #2412
- Add multi-device call handling and architecture documentation by @vitorpamplona in #2413
- Improve call notification display with user metadata resolution by @vitorpamplona in #2414
- Fix Marmot group invite delivery to use recipient's inbox relays by @vitorpamplona in #2415
- keep screen on + smooth per-file upload progress bar by @davotoula in #2416
- Add NIP-34 Git pull requests, status events, and repository state by @vitorpamplona in #2417
- Add persistent storage for Marmot KeyPackages and group messages by @vitorpamplona in #2418
- New Crowdin Translations by @github-actions[bot] in #2419
- Add Marmot group messages to notifications feed by @vitorpamplona in #2421
- Implement MIP-04 encrypted media support for Marmot groups by @vitorpamplona in #2424
- Add Products feed screen with classified listings support by @vitorpamplona in #2422
- Add Articles feed screen with NIP-23 long-form content support by @vitorpamplona in #2423
- Refactor call session lifecycle to Activity-owned CallSession by @vitorpamplona in #2425
- New Crowdin Translations by @github-actions[bot] in #2427
- Enhance long-form article preview with metadata and topics by @vitorpamplona in #2429
- feat(desktop): multi-platform distribution — 8 assets, Homebrew + Winget by @nrobi144 in #2430
- New Crowdin Translations by @github-actions[bot] in #2428
- chore(actions): bump the actions group with 4 updates by @dependabot[bot] in #2431
- New Crowdin Translations by @github-actions[bot] in #2432
- New Crowdin Translations by @github-actions[bot] in #2433
- Add MIP-00 KeyPackage Relay List support for group invitations by @vitorpamplona in #2435
- New Crowdin Translations by @github-actions[bot] in #2434
- Implement Marmot MIP compliance fixes for admin gates and media handling by @vitorpamplona in #2436
- Rename kind3GlobalPeople to kind3GlobalPeopleRoutes by @vitorpamplona in #2439
- Skip audio animation when blurhash is present by @vitorpamplona in #2437
- Optimize video player mutex with single-winner cache by @vitorpamplona in #2440
- New Crowdin Translations by @github-actions[bot] in #2438
- Simplify payment button logic and handle empty targets earlier by @vitorpamplona in #2442
- Add Marmot interop test harness for Amethyst ↔ whitenoise-rs by @vitorpamplona in #2441
- Optimize media loading with improved HTTP connection pooling by @vitorpamplona in #2444
- Refactor content warning UI with backdrop support and image preloading by @vitorpamplona in #2447
- feat(desktop): App Drawer with workspaces, customizable nav bar by @nrobi144 in #2445
- Add deleted items banner to bookmarks, pins, and bookmark groups by @vitorpamplona in #2448
- Add PDF viewing support with preview cards and full-page viewer by @vitorpamplona in #2450
- Add NIP-90 DVM favorite list support with content discovery by @vitorpamplona in #2449
- New Crowdin Translations by @github-actions[bot] in #2443
- New Crowdin Translations by @github-actions[bot] in #2451
- Add comprehensive badge system with creation, awarding, and profile management by @vitorpamplona in #2452
- Add ThumbHash support for image placeholders by @vitorpamplona in #2454
- Add Interest Sets feature for organizing hashtags by @vitorpamplona in #2456
- New Crowdin Translations by @github-actions[bot] in #2453
- Refactor DisappearingScaffold to use unified bar state management by @vitorpamplona in #2455
- Refactor Marmot group members to use reactive state flow by @vitorpamplona in #2457
- Add emoji set support and shortcode validation to NIP-30 by @vitorpamplona in #2458
- Track relay activity for Marmot group chats by @vitorpamplona in #2459
- Show placeholder notes for empty Marmot groups in chat list by @vitorpamplona in #2460
- HLS video: Lowest resolution in feed/PiP, auto resolution in full screen by @davotoula in #2461
- MIP-01/MIP-05 compliance: VarInt encoding, validation, and MDK interop by @vitorpamplona in #2462
- Add daemon diagnostics and heartbeat logging to invite polling by @vitorpamplona in #2464
- New Crowdin Translations by @github-actions[bot] in #2463
- New Crowdin Translations by @github-actions[bot] in #2465
- Fix MLS commit framing for wire protocol compliance by @vitorpamplona in #2466
- Add separate autoplay videos setting independent of video loading by @greenart7c3 in #2467
- Add community creation and management UI with NIP-72 support by @vitorpamplona in #2468
- Add live stream top zappers leaderboard and NIP-53 event types by @vitorpamplona in #2469
- Fix MLS group state divergence and outer-layer decryption issues by @vitorpamplona in #2471
- New Crowdin Translations by @github-actions[bot] in #2470
- New Crowdin Translations by @github-actions[bot] in #2472
- Add comprehensive emoji pack management UI and functionality by @vitorpamplona in #2473
- fix: the consumer read activity.intent instead of the intent parameter passed into the callback by @davotoula in #2475
- New Crowdin Translations by @github-actions[bot] in #2474
- New Crowdin Translations by @github-actions[bot] in #2476
- Fix MLS spec compliance issues in commit path and message encryption by @vitorpamplona in #2477
- New Crowdin Translations by @github-actions[bot] in #2478
- New Crowdin Translations by @github-actions[bot] in #2479
- Cache on-demand HLS videos + adaptive cache sizing by @davotoula in #2480
- Organize drawer navigation into collapsible sections by @vitorpamplona in #2482
- Expand skill library with feed patterns, auth signers, and relay client docs by @vitorpamplona in #2483
- Add Follow Packs discovery feed screen by @vitorpamplona in #2485
- De-emphasize topic chips in LongFormHeader by @vitorpamplona in #2484
- Add Live Streams feed screen with filtering and discovery by @vitorpamplona in #2486
- Add Public Chats screen with feed filtering and relay subscriptions by @vitorpamplona in #2487
- Add CLI interface (amy) for Marmot/MLS group operations by @vitorpamplona in #2488
- Add customizable bottom navigation bar with drag-to-reorder UI by @vitorpamplona in #2489
- Add follow packs support to default follow list preferences by @vitorpamplona in #2490
- Add NIP-53 proof of agreement and event builders by @vitorpamplona in #2491
- docs: add Amy CLI development guides and skill reference by @vitorpamplona in #2492
- Fix MLS commit cryptography and add comprehensive validation by @vitorpamplona in #2493
- Add MoQ-transport client and audio rooms support by @vitorpamplona in #2494
- Add always-on notification service for real-time Nostr relay connections by @vitorpamplona in #1983
- New Crowdin Translations by @github-actions[bot] in #2481
- New Crowdin Translations by @github-actions[bot] in #2495
- Improve sanity checks and build resilience in marmot-interop by @vitorpamplona in #2496
- Fix external join path encryption and add processFramedCommit by @vitorpamplona in #2497
- Use processFramedCommit for RFC 9420 §6.1 signature verification by @vitorpamplona in #2498
- Replace newStack with navBottomBar for bottom navigation by @vitorpamplona in #2499
- Improve wnd daemon startup reliability and error diagnostics by @vitorpamplona in #2500
- Claude/debug marmot harness o cu2g by @vitorpamplona in #2501
- Isolate MLS and Marmot stores per account by @vitorpamplona in #2505
- Auto-republish account settings when relay lists change by @vitorpamplona in #2504
- Fix disappearing bars hiding on pure overscroll for non-scrollable lists by @vitorpamplona in #2506
- New Crowdin Translations by @github-actions[bot] in #2502
- Inline member management in Marmot group info screen by @vitorpamplona in #2508
- Fix navigation stack handling when creating marmot groups by @vitorpamplona in #2509
- Refactor MarmotGroupInfoScreen layout for better UX by @vitorpamplona in #2510
- Implement known/new group classification based on follow set by @vitorpamplona in #2511
- Implement per-recipient relay routing for Marmot protocol by @vitorpamplona in #2512
- Filter non-displayable messages from Marmot group chat feed by @vitorpamplona in #2513
- Add admin privilege management for Marmot group members by @vitorpamplona in #2514
- Fix MIP-03 inner event verification in group messages by @vitorpamplona in #2515
- New Crowdin Translations by @github-actions[bot] in #2507
- Fix MLS UpdatePath filtering and improve interop harness diagnostics by @vitorpamplona in #2517
- feat(desktop): Relay Power Tools — Dashboard, Config Editors, Subscription Wiring by @nrobi144 in #2519
- fix(playback): route HLS URIs to HlsMediaSource via MediaItem mimeType by @davotoula in #2520
- fix for: release/benchmark crash on start-up by @davotoula in #2521
- New Crowdin Translations by @github-actions[bot] in #2516
- Improve search toggles by @davotoula in #2522
- Improve search part 2 by @davotoula in #2523
- Fix Marmot group message filtering for multi-account scenarios by @vitorpamplona in #2524
- Fix undecryptable outer layer events being marked as processed by @vitorpamplona in #2525
- New Crowdin Translations by @github-actions[bot] in #2526
- Fix memory leak when leaving Marmot groups by @vitorpamplona in #2527
- Configurable video buttons by @davotoula in #2528
- Quiet happy path logging, surface failures prominently by @vitorpamplona in #2529
- Add NIP-17 direct message support to CLI (send, list, await) by @vitorpamplona in #2531
- Enhance Marmot group UI with member avatars and dynamic naming by @vitorpamplona in #2532
- Refactor notification pipeline to use cache observer pattern by @vitorpamplona in #2534
- Replace Material Icons with Material Symbols by @vitorpamplona in #2533
- New Crowdin Translations by @github-actions[bot] in #2530
- Improve broadcast UI styling with better spacing and rounded corners by @vitorpamplona in #2535
- Add leave/rejoin, reactions, deletions, and Marmot reset functionality by @vitorpamplona in #2536
- New Crowdin Translations by @github-actions[bot] in #2537
- Improve WakeUp event handling for multiple referenced events by @vitorpamplona in #2540
- Optimize Material Symbols rendering with shared font and text measurer by @vitorpamplona in #2541
- add SECURITY.md with private vulnerability reporting policy by @davotoula in #2542
- Fix: hand raised toggle bug and sonar fixes by @davotoula in #2543
- New Crowdin Translations by @github-actions[bot] in #2544
- New Crowdin Translations by @github-actions[bot] in #2545
- Fix Material Symbol icon rendering and adjust bottom bar icon sizes by @vitorpamplona in #2546
- feat(reactions): place payment targets icon after zap by default by @greenart7c3 in #2547
- New Crowdin Translations by @github-actions[bot] in #2548
- Add reply and mention notifications for public notes by @vitorpamplona in #2538
- Preload all writable accounts for always-on notifications by @vitorpamplona in #2539
- New Crowdin Translations by @github-actions[bot] in #2550
- feat(media): add playback controls and autoplay support for GIFs by @greenart7c3 in #2503
- New Crowdin Translations by @github-actions[bot] in #2551
- Add profile and notes commands to CLI by @vitorpamplona in #2552
- Add native distribution packaging for Amy CLI (jlink + jpackage) by @vitorpamplona in #2555
- New Crowdin Translations by @github-actions[bot] in #2553
- Consolidate CI/CD workflow: merge test and build jobs by @vitorpamplona in #2554
- New Crowdin Translations by @github-actions[bot] in #2556
- Simplify SwipeToDelete by using onDismiss callback by @vitorpamplona in #2557
- Add secure private-key storage with OS keychain and NIP-49 support by @vitorpamplona in #2559
- New Crowdin Translations by @github-actions[bot] in #2558
- test(marmot-interop): unwrap newer whitenoise-rs
groups showshape by @vitorpamplona in #2561 - A filesystem-backed event store by @vitorpamplona in #2560
- New Crowdin Translations by @github-actions[bot] in #2562
- fix(avatar): center-crop profile picture thumbnails to prevent squashing by @davotoula in #2563
- Ci/split android job by @davotoula in #2565
- New Crowdin Translations by @github-actions[bot] in #2564
- New Crowdin Translations by @github-actions[bot] in #2566
- Implement NIP-01 lexical id tiebreaker and NIP-09 author-only deletion by @vitorpamplona in #2567
- ci: add Android Lint as first step of the Android job by @davotoula in #2569
- fix(zoom): keep aspect ratio during the avatar zoom-in animation by @davotoula in #2570
- New Crowdin Translations by @github-actions[bot] in #2568
- New Crowdin Translations by @github-actions[bot] in #2571
- Dual-output contract: text by default, --json for machines by @vitorpamplona in #2572
- New Crowdin Translations by @github-actions[bot] in #2573
- fix(lint): observe locale via LocalConfiguration in composables by @vitorpamplona in #2574
- feat(settings): split broadcast tracker visibility from Complete UI mode by @vitorpamplona in #2575
- New Crowdin Translations by @github-actions[bot] in #2576
- Add native OS theming and improve desktop UI layout by @vitorpamplona in #2549
- feat(quic+nestsClient): pure-Kotlin QUIC v1 + HTTP/3 + WebTransport + MoQ listener stack by @vitorpamplona in #2577
- New Crowdin Translations by @github-actions[bot] in #2578
- New Crowdin Translations by @github-actions[bot] in #2580
- Make event store operations async with coroutine support by @vitorpamplona in #2583
- fix(translation): bug, perf and jitter overhaul of rich-text translation by @vitorpamplona in #2582
- Optimize video playback with warm player pool and buffer tuning by @vitorpamplona in #2584
- New Crowdin Translations by @github-actions[bot] in #2586
- New Crowdin Translations by @github-actions[bot] in #2587
- perf(note types): cache event-derived values and hoist static modifiers by @vitorpamplona in #2588
- perf(ui): drop remember wrappers where overhead exceeds savings by @vitorpamplona in #2589
- fix(playback): hoist DataSourceBitmapLoader build into a function by @vitorpamplona in #2590
- Refactor FeedFilterSpinner to pass FeedDefinition objects instead of indices by @vitorpamplona in #2591
- fix(packaging): relax libicu dependency in .deb for cross-distro compat by @nrobi144 in #2596
- Fix chat cursor jump by @davotoula in #2597
- Add AI-powered alt-text suggestions for images by @vitorpamplona in #2598
- Remove stop action from notification service and update icon imports by @vitorpamplona in #2599
- Make ChatroomLazyKey types Serializable for LazyColumn state by @vitorpamplona in #2601
- New Crowdin Translations by @github-actions[bot] in #2600
- New Crowdin Translations by @github-actions[bot] in #2602
- Add back button visibility check to prevent navigation from root by @vitorpamplona in #2603
- Fix back stack management in bottom navigation by @vitorpamplona in #2604
- Claude/fix nav back arrow 99 n gn by @vitorpamplona in #2605
- Adds a BottomNavBar for screens that didn't have before by @vitorpamplona in #2606
- Add NIP-53 audio room speaker/broadcaster support by @vitorpamplona in #2585
- New Crowdin Translations by @github-actions[bot] in #2607
- New Crowdin Translations by @github-actions[bot] in #2608
- Add full-featured composer to nest room chat by @vitorpamplona in #2609
- Extract profile top bar into separate composable component by @vitorpamplona in #2611
- New Crowdin Translations by @github-actions[bot] in #2610
- New Crowdin Translations by @github-actions[bot] in #2613
- Refactor NestFullScreen layout: tabs, action bar, and stage grid by @vitorpamplona in #2614
- Add image upload functionality to CreateNestSheet by @vitorpamplona in #2616
- refactor(nests): split nests/room flat package into named subpackages by @vitorpamplona in #2615
- Add presence-based liveness detection for meeting rooms by @vitorpamplona in #2617
- Fix FAB positioning when AppBottomBar hides on nested navigation by @vitorpamplona in #2618
- Move NestActivity to activity subdirectory by @vitorpamplona in #2619
- Add Nests audio-room interop test harness for Amethyst ↔ web by @vitorpamplona in #2622
- feat(nests): bigger avatars + clearer mute/speaking state in participant grid by @vitorpamplona in #2620
- New Crowdin Translations by @github-actions[bot] in #2623
- Enhance Nest PIP with dynamic speaker focus and connection status by @vitorpamplona in #2625
- New Crowdin Translations by @github-actions[bot] in #2624
- Remove custom C secp256k1 implementation, migrate to libschnorr256k1 by @vitorpamplona in #2627
- New Crowdin Translations by @github-actions[bot] in #2626
- feat(nests): proactive JWT refresh + reconnect for speaker path by @vitorpamplona in #2621
- Refactor nest room UI: collapsible summary and stage header redesign by @vitorpamplona in #2629
- New Crowdin Translations by @github-actions[bot] in #2628
- Update schnorr256k1-kmp dependency to v1.0.3 and fix group ID by @vitorpamplona in #2631
- Fix window insets handling in NestActionBar by @vitorpamplona in #2632
- New Crowdin Translations by @github-actions[bot] in #2630
- Update MOQ relay URLs to include port 4443 by @vitorpamplona in #2633
- Fix IME padding and window insets in NestFullScreen by @vitorpamplona in #2634
- Add presence-based freshness filtering for Nests feed by @vitorpamplona in #2635
- fix(quartz): skip schnorr256k1 benchmark when native lib fails to load on Windows by @vitorpamplona in #2637
- test(nests): fix flaky ReconnectingNestsListenerTest on macOS by @vitorpamplona in #2638
- New Crowdin Translations by @github-actions[bot] in #2636
- New Crowdin Translations by @github-actions[bot] in #2640
- New Crowdin Translations by @github-actions[bot] in #2641
- ci(desktop): retry vlcDownload on transient network failures by @mstrofnone in #2643
- Fix Last Seen formatting for older timestamps ("Last seen Jan 14 ago" → "Last seen on Jan 14, 2026 (3 months ago)") by @mstrofnone in #2642
- Fix sonar empty functions and string literals by @davotoula in #2639
- Add payment targets navigation to settings screen by @greenart7c3 in #2645
- New Crowdin Translations by @github-actions[bot] in #2644
- Align nests servers with NIP-53 spec: separate relay and auth URLs by @vitorpamplona in #2646
- test(quic): add concurrent producer/consumer regression for SendBuffer by @vitorpamplona in #2648
- Fix stage presence sync and relay propagation in meeting rooms by @vitorpamplona in #2649
- New Crowdin Translations by @github-actions[bot] in #2647
- Fix race condition in MoQ subscription registration by @vitorpamplona in #2651
- Add tap gesture support for audience member promotion by @vitorpamplona in #2652
- New Crowdin Translations by @github-actions[bot] in #2650
- fix(android): silence StrictMode cleartext violations for 127.0.0.1 (Tor SOCKS) by @davotoula in #2659
- fix(nip39): reject identity claim tags without a platform separator by @davotoula in #2658
- Replace unused lambda parameters with
_by @davotoula in #2657 - feat(nests): use mic icons for talk / stop talking by @vitorpamplona in #2655
- feat(home): user-configurable home tabs (new threads, conversations, everything) by @vitorpamplona in #2654
- Improve Nests feed filtering to check for active speakers by @vitorpamplona in #2653
- Preload bottom bar feeds reactively based on user's pinned items by @vitorpamplona in #2660
- Fix race condition in ReconnectingNestsSpeakerTest broadcast handle access by @vitorpamplona in #2661
- Fix expiration timing in ExpirationTest by @vitorpamplona in #2662
- Support Android's hostname-aware certificate validation by @vitorpamplona in #2663
- Add event projection and interning for reactive event store queries by @vitorpamplona in #2664
- Add Tor connection timeout with graceful fallback to regular connection by @vitorpamplona in #2665
- Add NestLobbyScreen for read-only room preview before joining by @vitorpamplona in #2666
- Refactor NestActionBar UI layout and state handling by @vitorpamplona in #2667
- Add chat composer to nest lobby screen by @vitorpamplona in #2669
- Claude/update nestlobby chat layout jimq w by @vitorpamplona in #2670
- Refactor NestLobbyScreen layout: move header outside LazyColumn by @vitorpamplona in #2671
- Refactor relay integration docs: EventCollector pattern and lifecycle management by @vitorpamplona in #2672
- Fix double padding in two-pane chat layout by @vitorpamplona in #2673
- Gate Nest room launches by liveness status by @vitorpamplona in #2674
- Keep screen on during active nest room connections by @vitorpamplona in #2675
- New Crowdin Translations by @github-actions[bot] in #2668
- Auto-scroll to newest messages in chat when new messages arrive by @vitorpamplona in #2676
- Add prod nostrnests.com audio transmission diagnostic tests by @vitorpamplona in #2677
- Sustained-cadence test: dump partial arrivals + gap pattern by @vitorpamplona in #2678
- Claude/audio transmission tests z kzl b by @vitorpamplona in #2679
- Downgrade "Zap Request not found" log from error to debug by @davotoula in #2680
- Jump-to-parent icon on replies in Full UI mode by @davotoula in #2682
- Add restore-default button to bottom nav settings by @davotoula in #2681
- New Crowdin Translations by @github-actions[bot] in #2683
- New Crowdin Translations by @github-actions[bot] in #2684
- Fixes some dropped frames in audio calls by @vitorpamplona in #2686
- Final fix on missed audio frames. by @vitorpamplona in #2687
- New Crowdin Translations by @github-actions[bot] in #2685
- Claude/audio transmission test learnings by @vitorpamplona in #2688
- Fix race conditions and improve resilience in MOQ-Lite subscribe/broadcast by @vitorpamplona in #2689
- Improve Nest room UX: loading states, error handling, and performance by @vitorpamplona in #2690
- New Crowdin Translations by @github-actions[bot] in #2691
- Fix flaky test by waiting for mute state instead of start count by @vitorpamplona in #2692
- Switch audio playback to USAGE_MEDIA for hands-free rooms by @vitorpamplona in #2693
- Add section headers and compact view for Nests feed by @vitorpamplona in #2694
- fix: drop redundant StopBroadcastButton from nest action bar by @vitorpamplona in #2695
- feat: animate local speaker ring from MoQ frame transmission by @vitorpamplona in #2696
- fix: use LocalActivity to resolve NestActivity (lint ContextCastToActivity) by @davotoula in #2698
- New Crowdin Translations by @github-actions[bot] in #2699
- Off-by-one error in PoW evaluator by @davotoula in #2697
- New Crowdin Translations by @github-actions[bot] in #2702
- New Crowdin Translations by @github-actions[bot] in #2703
- fix(quartz): bound Tlv.parse against malformed naddr/nevent/nprofile by @davotoula in #2704
- Save downloads: validate Content-Type & support PDF downloads by @davotoula in #2711
- desktop: verify event signatures on receive by @davotoula in #2705
- feat(electrumx): add bare IP peer for relay.testls.bit (23.158.233.10) by @mstrofnone in #2709
- feat(electrumx): add relay.testls.bit endpoints (clearnet TLS + Tor) by @mstrofnone in #2708
- New Crowdin Translations by @github-actions[bot] in #2713
- feat(namecoin): resolve
importitems per ifa-0001 (NIP-05 only) by @mstrofnone in #2707 - New Crowdin Translations by @github-actions[bot] in #2715
- New Crowdin Translations by @github-actions[bot] in #2717
- Generate poster JPEGs and fix HLS video rendering in profile gallery by @davotoula in #2716
- New Crowdin Translations by @github-actions[bot] in #2718
- Add SurgeDns: burst-tolerant DNS resolver for OkHttp by @vitorpamplona in #2714
- feat(desktop): Multi-Account Support + Feed Metadata Optimization by @nrobi144 in #2656
- New Crowdin Translations by @github-actions[bot] in #2723
- Add bulk unblock/unmute functionality to Security Filters by @greenart7c3 in #2721
- chore: convert interpolated Log calls to lambda overload + restore throwables in Marmot catch blocks by @davotoula in #2720
- fix(nip46): fix bunker decrypt/encrypt parsing and increase timeout by @nrobi144 in #2719
- Add animated outer ring indicator for speaking participants by @vitorpamplona in #2724
- Add grace period to lifecycle-aware subscriptions by @vitorpamplona in #2726
- Handle Android 12+ ForegroundServiceStartNotAllowedException gracefully by @vitorpamplona in #2727
- Replace KeyDataSourceSubscription with LifecycleAwareKeyDataSourceSubscription by @vitorpamplona in #2728
- New Crowdin Translations by @github-actions[bot] in #2725
- New Crowdin Translations by @github-actions[bot] in #2729
- Add keep-alive mechanism to reconnect disconnected relays by @vitorpamplona in #2730
- debug(nests): wire NestRx/NestTx logs across listener and speaker paths by @vitorpamplona in #2731
- Refactor settings screen UI with card-based layout and improved styling by @vitorpamplona in #2732
- Eliminate audio gaps during JWT refresh and improve network resilience by @vitorpamplona in #2733
- Fix header protection sampling for short QUIC payloads by @vitorpamplona in #2734
- Add notifications for Marmot group messages (kind:445) by @vitorpamplona in #2737
- Add IME padding to MessagesTwoPane Scaffold by @vitorpamplona in #2735
- Fix race condition in ReconnectingNestsListenerTest frame delivery by @vitorpamplona in #2738
- Cache vlc-setup downloads in desktop CI by @vitorpamplona in #2736
- New Crowdin Translations by @github-actions[bot] in #2739
- Optimize CI builds and reduce APK size with Gradle caching and font subsetting by @vitorpamplona in #2741
- test(quartz): widen NIP-40 expiration buffer to outlive insert race by @vitorpamplona in #2742
- New Crowdin Translations by @github-actions[bot] in #2740
- Upgrade schnorr256k1Kmp dependency to 1.0.5 by @vitorpamplona in #2744
- New Crowdin Translations by @github-actions[bot] in #2743
- Make NostrClientRepeatSubTest more resilient to relay behavior by @vitorpamplona in #2746
- New Crowdin Translations by @github-actions[bot] in #2745
- Correct '_@' display in profile header + centralise wildcard rule by @davotoula in #2747
- Pre-fetch VLC and UPX archives to improve build reliability by @vitorpamplona in #2748
- Plan: cross-stack interop test (T16) by @vitorpamplona in #2749
- Add audio format negotiation and cliff detection for Nests by @vitorpamplona in #2750
- Implement stream priority scheduling for QUIC writer by @vitorpamplona in #2751
- Replace cliff-detector cooldown with per-attempt backoff schedule by @vitorpamplona in #2752
- Fix avatar glow/ring clipping and energy-gate speaking indicator by @vitorpamplona in #2753
- Fix NestViewModelTest hanging by properly tearing down VMs by @vitorpamplona in #2754
- Add stereo audio support to nests speaker broadcasts by @vitorpamplona in #2755
- Downgrade VLC version to 3.0.20 due to Maven artifact availability by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2756
- test(quartz): add :quartz-test-relay for in-process Nostr relay testing by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2757
- test(nests): add cross-stack interop test suite (Phases 1-3) by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2763
- Add QUIC interop runner support and observability infrastructure by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2764
- Scheduled Posts (Android) by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2765
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2766
- Scale relay to 10k+ concurrent connections with streaming JSON parsing by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2767
- Increase Gradle daemon JVM heap memory from 4GB to 6GB by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2768
- Implement event ingestion batching with group commit and parallel verify by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2769
- Close moq-relay routing investigation; harden interop assertions by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2770
- NIP-77: strfry-interop snapshot path with bounded sync by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2771
- Add FilterIndex for inverted-index fanout dispatch by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2772
- feat(quic): retire fully-settled streams to keep tracker bounded under audio-room churn by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2773
- test(quartz): make repeat-sub test tolerant of resub timing race by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2774
- fix(scheduled-posts): explicit POST_NOTIFICATIONS check before notify by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2775
- Fix plural string formatting in Brazilian Portuguese translations by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2776
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2777
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2784
- feat(desktop): custom feeds system with creation, discovery, and author search by @nrobi144 in https://github.com/vitorpamplona/amethyst/pull/2778
- Various language fixes to scheduled posts by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2779
- fix(desktop): make error messages selectable so users can copy them by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2781
- Lint and sonar cleanup on scheduled-posts by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2782
- Add copy-to-clipboard functionality for payment targets by @greenart7c3 in https://github.com/vitorpamplona/amethyst/pull/2783
- Add option to disable NIP-89 client tag in published events by @greenart7c3 in https://github.com/vitorpamplona/amethyst/pull/2785
- Add local Blossom cache bridge for transparent media proxying by @greenart7c3 in https://github.com/vitorpamplona/amethyst/pull/2786
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2787
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2788
- fix(desktop): make the single-pane navigation rail scrollable by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2780
- feat(quartz): NIP-9A community rules parser + validator (kind:34551) by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2758
- Port Namecoin NIP-05 resolution to Desktop app by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/1914
- fix(quartz): drop empty/whitespace-only imeta values by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2792
- Implement RFC 9000 §9 client-initiated path validation and DCID rotation by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2793
- Rename lock fields to reflect their specific purposes by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2795
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2794
- Plan: Local Bitcoin headers explorer for NIP-03 OTS verification by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2796
- feat(notes): show stale-relay hint on replaceable events using NIP-66 cache by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2797
- Security hardening and performance improvements across QUIC stack by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2802
- feat(namecoin): distinguish malformed-JSON values from missing-field by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2801
- feat(community): validate posts against NIP-9B community rules in composer by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2798
- feat(community): structured NIP-9B rules editor in new-community flow by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2799
- feat(community): opt-in NIP-9B feed filter for community moderation by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2800
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2803
- QUIC: audit follow-ups — RFC 9002 loss timer, AEAD allocation, SETTINGS validation by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2805
- QUIC: audit closeout — TLS PSK fallback, AEAD allocation, PSL subset, ECN by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2806
- Clean up documentation and organize constant definitions by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2807
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2804
- perf(quic): lock-free hot paths — ThreadLocal Cipher, AtomicReference close, @volatile getters by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2808
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2809
- feat(note): copy raw JSON from note dropdown by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2811
- fix: redact secrets and sensitive payloads from debug logs (Quartz/Amethyst) by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2812
- Add Favorite Feed Algorithms to bottom-bar catalogue by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2810
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2813
- RFC 9000/9001 compliance audit: connection lifecycle, flow control, AEAD limits by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2815
- moq-lite Lite-03/04 compliance audit: wire-compatible codec & session fixes by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2816
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2814
- fix(gallery): forward imeta hashes through gallery by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2817
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2818
- Rich imeta on every published HLS event + auto-published kind:1 sibling by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2821
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2823
- Update translations and the find missing translations skill by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2822
- Align favourites icon, add to default bar, redesign empty state by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2820
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2824
- feat(desktop): embedded local relay with SQLite event persistence by @nrobi144 in https://github.com/vitorpamplona/amethyst/pull/2841
- Add GIF keyboard uploads to chat composers by @coreymull in https://github.com/vitorpamplona/amethyst/pull/2834
- Fix hidden DM unread badge after blocking users by @skotchdopolepet in https://github.com/vitorpamplona/amethyst/pull/2828
- Configure report warning threshold by @skotchdopolepet in https://github.com/vitorpamplona/amethyst/pull/2830
- Show two-stage zap progress by @skotchdopolepet in https://github.com/vitorpamplona/amethyst/pull/2831
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2838
- Add LAN video casting via Chromecast (Google Play flavour only) by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2842
- docs: add CONTRIBUTING.md and PR template by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2844
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2843
- Add CONTRIBUTING-WITH-AI.md companion guide by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2845
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2848
- Fix avatar oval distortion in narrow grid cells by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2851
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2853
- Add preferences for home feed tab visibility by @greenart7c3 in https://github.com/vitorpamplona/amethyst/pull/2850
- Fix coroutine scope for async broadcast operations in room actions by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2852
- Split notifications: Following vs Everyone by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2855
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2856
- Optimize Compose state management and flow subscriptions by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2857
- Refactor participant sheet: extract sub-composables, add confirmations by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2858
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2859
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2860
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2864
- contributing-with-ai: add 8 rules surfaced by recent feature PR by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2865
- Refactor homeHasNewItems to respect tab visibility settings by @greenart7c3 in https://github.com/vitorpamplona/amethyst/pull/2867
- Fix Blossom bridge to only rewrite last path segment as SHA256 by @greenart7c3 in https://github.com/vitorpamplona/amethyst/pull/2866
- Sonar cleanup — mechanical refactors only by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2863
- Client-side thread mute (NIP-51 kind-10000 e tags) by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2862
- Preserve image URLs in CJK translations (#1180) by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2869
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2870
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2871
- Refactor relay broadcast logic for personal and channel events by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2872
- Round-5 performance & security: frame decode, HP, AEAD, resumption by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2873
- Add compose settings screen with auto-draft creation toggle by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2874
- Make timestamps toggleable between relative and absolute formats by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2875
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2876
- Add profile UI settings to customize visible sections and feeds by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2877
- Refactor SecurityFiltersScreen into modular settings screens by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2878
- docs(community-rules): rename NIP-9A -> NIP-9B (upstream slot collision with #2194) by @mstrofnone in https://github.com/vitorpamplona/amethyst/pull/2879
- feat: show bottom nav on Favorite Algo Feeds screen by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2881
- fix: pad zoomable dialog pager dots above gesture/nav bar by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2882
- fix(nests): cap AudioTrack ring at ~250 ms so audio tracks the speaking-now ring by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2883
- feat: add audio playback support for .f4a files by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2885
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2880
- Defer image cache eviction unlinks to background thread by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2888
- Add technique-layer Compose and Kotlin skills by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2889
- feat(nests): add a zap button to the room action bar by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2887
- Add bottom navigation bar to ScheduledPostsScreen by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2890
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2886
- Display external identifier scopes in NIP-22 comments by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2891
- Fix IME padding in HiddenWordsScreen using WindowInsets by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2893
- Move packaging/appimage to desktopApp/packaging/appimage by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2894
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2892
- Remove speaker reordering in stage grid to prevent UI shuffle by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2895
- Invert client tag setting: add instead of disable by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2896
- Move drag gesture detection to icon Box in VideoPlayerButtonItemCard by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2897
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2899
- bugfix: break a-tag cycle in computeRelayListToBroadcast by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2900
- Drop stale groups on reconnect to prevent audio replay by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2898
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2901
- Favourite feeds: clearer empty state + pinned "Add more…" CTA by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2903
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2902
- Replace ConcurrentRequestStrategy.UNCOORDINATED with DeDupeConcurrentRequestStrategy by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2904
- Release v1.09.0: We are going crazy by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2905
- Fix QUIC handshake timeout, IPv4 preference, and SNI handling by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2906
- Refactor ComposeSettingsScreen to use unified tile components by @vitorpamplona in https://github.com/vitorpamplona/amethyst/pull/2907
- New Crowdin Translations by @github-actions[bot] in https://github.com/vitorpamplona/amethyst/pull/2909
- fix(desktop): Account security hardening — NWC to keychain, single source of truth by @nrobi144 in https://github.com/vitorpamplona/amethyst/pull/2908
- Stop reporting verification errors as Verified by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2911
- Resolve quoted notes via author's NIP-65 outbox by @davotoula in https://github.com/vitorpamplona/amethyst/pull/2910
New Contributors
- @dependabot[bot] made their first contribution in #2431
- @coreymull made their first contribution in https://github.com/vitorpamplona/amethyst/pull/2834
- @skotchdopolepet made their first contribution in https://github.com/vitorpamplona/amethyst/pull/2828
Full Changelog: v1.08.0...v1.09.0