What's Changed
- Add NIP-84 highlights support: composer, feed, and share intent by @vitorpamplona in #3793
- New Crowdin Translations by @github-actions[bot] in #3794
- Desktop: profile screen parity — tabs, header actions, banner/bio, zaps by @nrobi144 in #3795
- Work around a fatal media3 crash on Low-Latency HLS (LL-HLS), eg NoGoodRadio by @davotoula in #3796
- Harden workflow-ship.sh and pin it with a regression harness by @davotoula in #3797
- New Crowdin Translations by @github-actions[bot] in #3799
- chore: sync geode Homebrew formula to v1.13.1 by @github-actions[bot] in #3802
- chore: sync amy Homebrew formula to v1.13.1 by @github-actions[bot] in #3801
- Add Pictures, Videos, Shorts, and Torrents feed types by @vitorpamplona in #3803
- Address buzz CLI review findings; pin the wrapper copies and the amy arg surface by @davotoula in #3798
- chore: sync winget manifests to v1.13.1 by @github-actions[bot] in #3805
- New Crowdin Translations by @github-actions[bot] in #3806
- Refactor chat bubble swipe gesture to use lower-level pointer APIs by @vitorpamplona in #3807
- Fix flaky PeerUniStreamDrainTest by confining drainer to producer's event loop by @vitorpamplona in #3809
- Make draft posts in thread view open edit screen on tap by @vitorpamplona in #3811
- NIP-29: Channel deletion, archival, and Buzz community UI by @vitorpamplona in #3812
- New Crowdin Translations by @github-actions[bot] in #3808
- Consolidate NIP-71 video event types under shared interface by @vitorpamplona in #3813
- Add Nostr badge watermark to notification icons by @vitorpamplona in #3815
- Remove facepile from channel rows, simplify layout by @vitorpamplona in #3814
- feat(nip73): show rich previews for external-content comments by @dmnyc in #3810
- New Crowdin Translations by @github-actions[bot] in #3816
- Confine Blossom cache probe and resolver to IO dispatcher by @vitorpamplona in #3818
- perf(nip73): prefetch external-content preview URLs by @dmnyc in #3820
- Extract RelayNameChip to shared component and add it to relay group message headers by @vitorpamplona in #3822
- Fix Tor→clearnet fallback banner logic with live socket state by @vitorpamplona in #3823
- Redesign channel invite cards as feed rows with metadata-only observers by @vitorpamplona in #3821
- fix: quiet the default log, add a boot narrative, and stop pinning Concord entities across a Refounding by @vitorpamplona in #3819
- Handle blank and malformed metadata gracefully by @vitorpamplona in #3824
- Add media share targets for Pictures, Shorts, and Video feeds by @vitorpamplona in #3825
- Fix metadata JSON parsing to use lenient parser consistently by @vitorpamplona in #3828
- Listen only while foregrounded, and fix the meter that measures it by @davotoula in #3827
- Fix ServiceType parsing to handle edge cases safely by @vitorpamplona in #3830
- New Crowdin Translations by @github-actions[bot] in #3826
- Fix SharedKeyCache hash collision vulnerability & add constant-time MAC comparison by @vitorpamplona in #3833
- feat(relays): explain why every subscription exists, and fix what that exposed by @vitorpamplona in #3832
- New Crowdin Translations by @github-actions[bot] in #3831
- chore(actions): bump the actions group with 5 updates by @dependabot[bot] in #3834
- Add optimized decode64/decode128 and encode64/encode128 to Hex by @vitorpamplona in #3837
- NIP-66: measure relays from the traffic a client already makes by @vitorpamplona in #3836
- Fix InProcessWebSocket race condition in connect-time AUTH delivery by @vitorpamplona in #3838
- New Crowdin Translations by @github-actions[bot] in #3839
- Let a monitor publish what it learned without dialling by @vitorpamplona in #3841
- New Crowdin Translations by @github-actions[bot] in #3840
- Add StoreQueryContext for observer-relative ranking in stores by @vitorpamplona in #3842
- rtt-open is the transport's handshake, not our own queueing by @vitorpamplona in #3843
- refactor: decouple LocalCache and Account god classes (behavior-preserving) by @vitorpamplona in #3844
- Test: Type ExplainedFilter.copy() result as base Filter by @vitorpamplona in #3845
- fix: request follower-count provider's 30382 cards in UserCardsSubAssembler by @vitorpamplona in #3846
- Stop COUNT from inheriting the default page size by @vitorpamplona in #3848
- Fix fetchAllPages cropping streaming pages; normalize accessory timeouts to idle windows by @vitorpamplona in #3850
- New Crowdin Translations by @github-actions[bot] in #3849
- fix(relay): stripe the subscription-state lock per relay to end an ANR convoy by @vitorpamplona in #3851
- docs: Add three store-implementer skills (event-store-semantics, nip85, searchable-events) by @vitorpamplona in #3853
- nip50Search: search grammar + weighted field extraction; nip01Core: shared store-semantics rules by @vitorpamplona in #3854
- quartz/geode: sync accessories from vespa-relay, InsertOutcome.Failed contract, mirror resume coverage by @vitorpamplona in #3855
- fix(relay): compare every filter in FiltersChanged, not just the first by @vitorpamplona in #3856
- NIP-66 relay monitoring: streaming probes, read/write checks, URL fixes by @vitorpamplona in #3857
- New Crowdin Translations by @github-actions[bot] in #3852
- Support IPv6 overlay relays (Yggdrasil) with RFC 5952 canonicalization by @vitorpamplona in #3859
- Fix URL detection to exclude quotes from parsed URLs by @vitorpamplona in #3860
- SyncCoverage: one band interval cannot speak for several kinds by @vitorpamplona in #3862
- Replace BackHandler with KeyboardAwareBackHandler in posting screens by @vitorpamplona in #3864
- Suspend the incoming-message chain down to SubscriptionListener.onEvent by @vitorpamplona in #3863
- New Crowdin Translations by @github-actions[bot] in #3861
- New Crowdin Translations by @github-actions[bot] in #3867
- Make the left drawer configurable by @davotoula in #3866
- fix(media): stop rendering non-media NIP-94 files as video by @davotoula in #3868
- fix(ime): settle the keyboard in Nav so every screen stops stranding imePadding by @vitorpamplona in #3870
- New Crowdin Translations by @github-actions[bot] in #3869
- negentropy: size reconcile windows from the caller's index, and state the relay's cap by @vitorpamplona in #3871
- Stop the outbox getting slower with every publish by @vitorpamplona in #3872
- Repair bare-subtype imeta MIME types so images can be shared by @davotoula in #3874
- New Crowdin Translations by @github-actions[bot] in #3875
- New Crowdin Translations by @github-actions[bot] in #3876
- Quartz: give SyncCoverage's persistence a typed band key by @vitorpamplona in #3877
- Rename parameters for clarity and consistency by @vitorpamplona in #3878
- feat(resourceusage): measure why relay data is spent, not just how much by @davotoula in #3879
- feat(concord): staff-held control_root write-gates the Control Plane (CORD-02 §2) by @alexgleason in #3873
- New Crowdin Translations by @github-actions[bot] in #3880
- fix(quartz): update NIP-66 relay records instead of rebuilding them by @vitorpamplona in #3882
- fix(quartz): merge probe verdicts into the record they replace by @vitorpamplona in #3883
- Let a drained paged walk close the sync leg below it by @vitorpamplona in #3884
- New Crowdin Translations by @github-actions[bot] in #3881
- fix(concord): close the soft-ban authority holes (audit A1–A4, B1, B2, B4) by @vitorpamplona in #3885
- fix: stop reposts from being bundled with the always-on service notification by @vitorpamplona in #3886
- Align napplet host with current NIP-5D and NAPs by @dskvr in #3858
- quartz: make a paged walk terminate — floor the cursor at 0, stop when a relay ignores it by @vitorpamplona in #3889
- feat(concord): close the CORD-05/06 invite lifecycle — Invite List, re-mint on Refounding, revocation by @vitorpamplona in #3888
- negentropy: let a caller decline an id before the download REQ by @vitorpamplona in #3892
- feat(desktop): per-visible metadata + reaction loading via shared finders in commons by @nrobi144 in #3890
- New Crowdin Translations by @github-actions[bot] in #3891
- fix(nav): switching between two pinned web-app tabs crashed onto the wrong one by @vitorpamplona in #3894
- fix(embed): bring the keyboard back on a tap in an already-focused field by @vitorpamplona in #3895
- Declare pointer hints on Report, ChatMessage, Classifieds and ChannelCreate events by @vitorpamplona in #3896
- Add "Copy Original/Translated" chooser for translated notes by @vitorpamplona in #3897
- feat(polls): extended poll results page with voter list by @vitorpamplona in #3898
- New Crowdin Translations by @github-actions[bot] in #3893
- Redesign relay auth permissions UI and decision flow by @vitorpamplona in #3899
- Optimize locale application to skip redundant system calls by @vitorpamplona in #3901
- Fix push registration to fail loudly on HTTP errors by @vitorpamplona in #3900
- New Crowdin Translations by @github-actions[bot] in #3902
- Add bulk audience picker for short-note composer by @vitorpamplona in #3903
- New Crowdin Translations by @github-actions[bot] in #3904
- Auth: recognize NIP-29 groups and Concord communities as joined venues by @vitorpamplona in #3906
- perf: stop blocking coroutine workers on synchronous OkHttp calls by @vitorpamplona in #3907
- NIP-42: wait for auth challenge resolution instead of timing out by @vitorpamplona in #3905
- Remove maxTotalMs ceiling from fetchAll/fetchAllWithHooks by @vitorpamplona in #3908
- Discoverable key backup: guided first-run save-your-keys + Settings backup (Desktop) + Android nudge by @nrobi144 in #3909
- NIP-13: refresh created_at while mining, analyze GPU path by @vitorpamplona in #3911
- New Crowdin Translations by @github-actions[bot] in #3910
- feat: translate missing strings into cs, de-DE, sv-SE and pt-BR by @davotoula in #3912
- Fix PDF preview layout stability and aspect ratio handling by @vitorpamplona in #3913
- New Crowdin Translations by @github-actions[bot] in #3914
- perf: scan note content by literal instead of driving the regex engine by @vitorpamplona in #3915
- i18n fixes by @davotoula in #3916
- perf: AOT-compile the relay ingest path with a baseline profile by @vitorpamplona in #3918
- perf: drop the S (startup) flag from the hand-authored baseline profile by @vitorpamplona in #3920
- build: add a baseline profile generator (:baselineprofile) by @vitorpamplona in #3919
- New Crowdin Translations by @github-actions[bot] in #3917
- feat(desktop): searchable settings accordion by @nrobi144 in #3922
- New Crowdin Translations by @github-actions[bot] in #3924
- perf: bound the dedup decoder cache in size and in time by @vitorpamplona in #3926
- fix: blank parent card above a top-level community post by @davotoula in #3923
- New Crowdin Translations by @github-actions[bot] in #3925
- Bump dependencies and Gradle to latest stable versions by @vitorpamplona in #3927
- New Crowdin Translations by @github-actions[bot] in #3928
- feat: disable the automatic high resource usage prompt by @vitorpamplona in #3930
- feat: default new accounts to always AUTH with relays by @vitorpamplona in #3931
- Handle IME insets in full-screen napplet hosts by @vitorpamplona in #3932
- Optimize PoWMiner hot loop for Android runtime by @vitorpamplona in #3935
- fix: reclaim memory under heap pressure and stop leaking sandbox Activities by @vitorpamplona in #3936
- New Crowdin Translations by @github-actions[bot] in #3929
- fix: honour "always log in" for relays the account does not use itself by @vitorpamplona in #3937
- Fix Cashu wallet balance truncation via proof backfill and history paging by @vitorpamplona in #3941
- Mute public chats by @davotoula in #3939
- feat: demote relay/ingest worker threads below the UI thread (~40% faster cold-start first paint) by @vitorpamplona in #3942
- New Crowdin Translations by @github-actions[bot] in #3943
- perf: scan hashtags and #[n] references without ICU by @vitorpamplona in #3945
- perf: scan NIP-19 entities without ICU to stop the cold-start native-heap OOM by @vitorpamplona in #3944
- fix: cache the painter on its first miss in painterRes by @vitorpamplona in #3946
- perf: memoize guestbook envelope opens so the Concord fold stops re-decrypting the buffer by @vitorpamplona in #3947
- Fix Buzz channel invite flickering by deriving from cache by @vitorpamplona in #3940
- fix: give the invite roster line's member count its unit by @vitorpamplona in #3950
- feat: keep invite replies, reactions and zaps inside the relay that sent them by @vitorpamplona in #3951
- Make the "reading someone I follow" relay-auth toggle reachable, and scope Buzz per-account state to the account by @vitorpamplona in #3952
- fix: collect buzzWorkspaces instead of reading .value in composition by @vitorpamplona in #3956
- Add session grants for relay auth to survive reconnects by @vitorpamplona in #3955
- ci: shrink MirrorSyncThroughputTest's corpus to 100k on CI by @vitorpamplona in #3957
- feat(desktop): enrich the DM chat composer + message UX by @nrobi144 in #3953
- Fix registry leak in subscription lifecycle by @vitorpamplona in #3958
- New Crowdin Translations by @github-actions[bot] in #3948
- Add Trusted Lists (kinds 30392-30395) implementation by @vitorpamplona in #3959
- New Crowdin Translations by @github-actions[bot] in #3960
- New Crowdin Translations by @github-actions[bot] in #3962
- Optimize MetaTagsParser: fix quote tracking in comments/scripts by @vitorpamplona in #3963
- New Crowdin Translations by @github-actions[bot] in #3964
- Upgrade dependencies: Firebase, Jackson, OkHttp, Gradle, and others by @vitorpamplona in #3965
- New Crowdin Translations by @github-actions[bot] in #3966
- chore(release): v1.14.0 changelog and version bump by @vitorpamplona in #3967
New Contributors
- @alexgleason made their first contribution in #3873
- @dskvr made their first contribution in #3858
Full Changelog: v1.13.1...v1.14.0