What's Changed
- feat(notifications): include public chat mentions in feed by @vitorpamplona in #3027
- fix: keep Send button visible in onchain zap split mode by @vitorpamplona in #3028
- Enforce minimum on-chain zap amount and update default zap presets by @vitorpamplona in #3030
- Calendar Translations (cs, de, pt-BR, sv) and skill update by @davotoula in #3029
- Surface NIP-47 wallet response errors to user by @vitorpamplona in #3032
- Use URL SHA for Blossom bridge, not imeta hash by @greenart7c3 in #3035
- feat(desktop): note action bar — long-press details popups + right-click customize by @nrobi144 in #3034
- New Crowdin Translations by @github-actions[bot] in #3031
- feat: pin followed public chats to the top of the Public Chats feed by @vitorpamplona in #3037
- Add NIP-82 Software Applications support with dedicated feed by @vitorpamplona in #3036
- Makes the NWC process less strict, while checking for inconsistencies after the request reply is processed. by @vitorpamplona in #3041
- feat(desktop): wallet zapping, LNURL-pay send, QR receive, and session persistence by @nrobi144 in #3038
- NIP-BC onchain zaps: add verification state machine & reverify driver by @vitorpamplona in #3039
- Fix reaction row layout for icon-only rightmost items by @vitorpamplona in #3042
- Fix account cache race condition in setDefaultAccount by @vitorpamplona in #3043
- New Crowdin Translations by @github-actions[bot] in #3040
- Restructure privacy policy and add build-variant legal UI by @vitorpamplona in #3045
- New Crowdin Translations by @github-actions[bot] in #3046
- Phase 1: iOS support for Quartz and Commons (KMP purity) by @vitorpamplona in #3047
- feat(desktop): rich text migration, profile metadata, copy JSON, @mention autocomplete by @nrobi144 in #3049
- Complete Phase 2 KMP migration to unblock iOS CI by @davotoula in #3050
- New Crowdin Translations by @github-actions[bot] in #3048
- Phase 2: Gemini AppFunctions bridge + CLI action verbs by @vitorpamplona in #3051
- onchain zaps + nip-05 filter when returning users to Gemini by @vitorpamplona in #3052
- Add Tor self-heal watchdog + integration tests + Arti v2.3.0 by @vitorpamplona in #3053
- Replace wallet reorder buttons with drag-and-drop UI by @vitorpamplona in #3054
- fix(user-metadata): fall back to indexer relays when outbox is exhausted by @vitorpamplona in #3055
- feat(desktop): full profile editing — 13 fields, image upload, NIP-05 verification, drag-and-drop by @nrobi144 in #3058
- Add "Add/remove to/from emoji list" row to pack-card menu by @davotoula in #3059
- feat(profile): modern chip layout for payment targets by @vitorpamplona in #3061
- feat(profile): toast when no app handles a payment target scheme by @vitorpamplona in #3062
- feat(namecoin): add Namecoin Core RPC backend with optional ElectrumX fallback by @mstrofnone in #3056
- New Crowdin Translations by @github-actions[bot] in #3060
- Comprehensive AVIF support (#837) by @davotoula in #3063
- Add playback error overlay with browser fallback for video codec failures by @vitorpamplona in #3064
- Exclude author from zap split display logic by @vitorpamplona in #3065
- fix(playback): hide video controls while the error overlay is shown by @vitorpamplona in #3066
- feat(namecoin): TOFU pin for Namecoin Core RPC TLS path by @mstrofnone in #3068
- fix(search): route d/ and id/ Namecoin namespaces through the resolution row by @mstrofnone in #3070
- Add Software Apps feed with follow list filtering by @vitorpamplona in #3071
- New Crowdin Translations by @github-actions[bot] in #3069
- refactor(namecoin): consolidate NamecoinSettings into commons by @mstrofnone in #3072
- Fix route hint re-firing on activity recreation by @vitorpamplona in #3074
- New Crowdin Translations by @github-actions[bot] in #3073
- feat(desktop): persist TOFU-pinned Namecoin ElectrumX certs by @mstrofnone in #3076
- Add music tracks and playlists support with NIP-51 events by @vitorpamplona in #3067
- feat(desktop): Namecoin Core RPC backend + composite fallback by @mstrofnone in #3077
- Add dedicated NIP-82 software app detail screen by @vitorpamplona in #3078
- Use distinct icons for password visibility toggle by @davotoula in #3079
- New Crowdin Translations by @github-actions[bot] in #3080
- New Crowdin Translations by @github-actions[bot] in #3081
- New Crowdin Translations by @github-actions[bot] in #3082
- New Crowdin Translations by @github-actions[bot] in #3083
- New Crowdin Translations by @github-actions[bot] in #3084
- Fix StrictMode violation in ML Kit translation initialization by @vitorpamplona in #3087
- Auto-stick feeds to top on prepend with StickToTopOnPrepend by @vitorpamplona in #3088
- New Crowdin Translations by @github-actions[bot] in #3089
- Add NIP-71 audio-track support with language and bitrate tags by @vitorpamplona in #3090
- New Crowdin Translations by @github-actions[bot] in #3091
- Add NIP-78 AppDataEvent (kind 78) and refactor AppSpecificDataEvent by @vitorpamplona in #3092
- Add podcast support (NIP-F4) with favorites, metadata, and episodes by @vitorpamplona in #3093
- docs: consolidate CLAUDE.md guidance and inject skills dynamically by @vitorpamplona in #3094
- Switch Java distribution from Zulu to Temurin by @vitorpamplona in #3096
- Fix scroll position restoration in feed lists on return by @vitorpamplona in #3097
- feat(desktop): Visual Personality Overhaul — Unified Theme, Sidebar, Search, Cards by @nrobi144 in #3098
- Fix lifecycle-aware subscription grace timer starvation by @greenart7c3 in #3103
- Use locale-aware date/time formatting throughout the app by @vitorpamplona in #3095
- New Crowdin Translations by @github-actions[bot] in #3102
- Fix live stream chat relay fallback by @carpedkm in #3086
- Add NIP-60 Cashu wallet and NIP-61 nutzap support by @vitorpamplona in #3075
- Add dedicated podcast screen with episode list and inline player by @vitorpamplona in #3105
- Redesign Cashu icon as monochrome tintable glyph by @vitorpamplona in #3106
- Refactor RelayProxyClientConnector to use injected StateFlows by @vitorpamplona in #3107
- Unify zap amount chips and add cashu reload flow by @vitorpamplona in #3108
- New Crowdin Translations by @github-actions[bot] in #3104
- Reorganize commons packages: NIP-64 chess, NIP-AC WebRTC, and model caches by @vitorpamplona in #3109
- Move utility functions and models to commons module by @vitorpamplona in #3110
- NIP-32: Add hashtag labeling and label-based hashtag feed by @vitorpamplona in #3111
- Move NIP-51/72 decryption caches and models to commons by @vitorpamplona in #3112
- Remove wallet reordering UI and drag-and-drop functionality by @vitorpamplona in #3114
- feat(cashu): show per-mint balance, drop inline recommend button by @vitorpamplona in #3115
- New Crowdin Translations by @github-actions[bot] in #3113
- Run git from rootDir in versionName detection so worktrees work by @davotoula in #3116
- New Crowdin Translations by @github-actions[bot] in #3117
- chore(actions): bump the actions group with 2 updates by @dependabot[bot] in #3119
- Move HTML parsing and broadcast service to commons for KMP by @vitorpamplona in #3120
- Fix inverted guard in TagArrayBuilder.addUniqueValueIfNew by @vitorpamplona in #3121
- Support ephemeral signers for anonymous post uploads by @vitorpamplona in #3123
- Share content directly to a DM ("Send as DM" share target) by @davotoula in #3122
- feat(desktop): Feed UI refresh — inline expansion, comments, related content by @nrobi144 in #3124
- feat(desktop): home-feed scroll polish + sidebar tooltips by @nrobi144 in #3126
- Searchable, data-driven settings screen by @davotoula in #3127
- fix: address root causes of 6 runtime log noise issues by @nrobi144 in #3125
- New Crowdin Translations by @github-actions[bot] in #3128
- Register CommunityRulesEvent in EventFactory for kind 34551 by @vitorpamplona in #3129
- New Crowdin Translations by @github-actions[bot] in #3130
- Add ReqResponderServer for non-storage relays + NIP-50 search support by @vitorpamplona in #3131
- Move authenticated identity from policy to connection scope by @vitorpamplona in #3133
- New Crowdin Translations by @github-actions[bot] in #3132
- docs(namecoin): refresh NIP-05 design doc to match current main by @mstrofnone in #3118
- Fix cache-pruning invariant for onchain zaps and nutzaps by @vitorpamplona in #3134
- Fullscreen swipe controls for brightness & volume by @davotoula in #3135
- Hide reposts whose boosted kind is unsupported by @davotoula in #3136
- feat(desktop): reply context in feeds + profile Replies tab by @nrobi144 in #3138
- Render Agora fundraiser campaigns (kind 33863) by @davotoula in #3137
- New Crowdin Translations by @github-actions[bot] in #3139
- New Crowdin Translations by @github-actions[bot] in #3140
- fix(quartz): NIP-46 bunker double-resume + retry id-reuse races by @nrobi144 in #3141
- New Crowdin Translations by @github-actions[bot] in #3142
- Minimal first-class rendering for Birdstar "Birdex" species collections (kind 12473) by @davotoula in #3143
- Resilient profile metadata (birthday) by @davotoula in #3144
- Unify poll and zap poll options into single state map by @vitorpamplona in #3145
- New Crowdin Translations by @github-actions[bot] in #3146
- Audio visualiser for audio notes by @davotoula in #3147
- New Crowdin Translations by @github-actions[bot] in #3148
- Square the feed audio player by @davotoula in #3149
- New Crowdin Translations by @github-actions[bot] in #3150
- Add LaTeX math rendering for $...$ and $$...$$ equations by @vitorpamplona in #3152
- fix(math): collapse over-escaped backslashes in inline equations by @vitorpamplona in #3153
- fix(math): center inline equations on the text line by @vitorpamplona in #3154
- feat(desktop): image compression + preview gate, plus lightbox URL hover/copy by @nrobi144 in #3155
- New Crowdin Translations by @github-actions[bot] in #3156
- Inline LaTeX — render wrapped equations, upgrade renderer, baseline alignment by @davotoula in #3157
- DM history: per-relay backward paging, live-tail split + prune-aware window realignment by @vitorpamplona in #3151
- New Crowdin Translations by @github-actions[bot] in #3158
- Count NIP-18 quote-reposts as boosts of quoted notes by @vitorpamplona in #3161
- fix(commons): make commonTest compile for iOS targets by @vitorpamplona in #3159
- Replace String.format with toString(16).padStart in test helpers by @vitorpamplona in #3162
- Add NIP-14 group subjects and improve DM group creation UX by @vitorpamplona in #3163
- Replace GPLv3 TarsosDSP with an in-house pitch shifter by @davotoula in #3160
- Work around Compose ui-uikit prebuilt cache linking failure by @vitorpamplona in #3164
- Add InlineQuoteRenderer strategy for customizing quoted notes by @vitorpamplona in #3168
- New Crowdin Translations by @github-actions[bot] in #3167
- fix: treat kind-9 ChatEvent as a chat kind for inline chat-style quotes by @vitorpamplona in #3170
- Extract Marmot group message composer to ViewModel by @vitorpamplona in #3171
- New Crowdin Translations by @github-actions[bot] in #3169
- New Crowdin Translations by @github-actions[bot] in #3172
- Audit & refresh skill library, docs, and hooks (Phase 2–3) by @vitorpamplona in #3173
- Compute legacy NIP-71 video addresses with their d tag by @davotoula in #3166
- New Crowdin Translations by @github-actions[bot] in #3174
- New Crowdin Translations by @github-actions[bot] in #3176
- feat(desktop): replace vlcj (GPLv3) with kdroidFilter ComposeMediaPlayer + JCodec/FFmpeg by @nrobi144 in #3175
- Implement CLINK (Common Lightning Interface for Nostr Keys) by @vitorpamplona in #3177
- Marmot: seed subscription since from stored messages on restart by @vitorpamplona in #3178
- Optimize string resource loading in WalletScreen by @vitorpamplona in #3180
- Fix ThumbnailDiskCache to recreate cache dir if cleared at runtime by @vitorpamplona in #3181
- Add kotlinx-serialization support for CLINK protocol DTOs by @vitorpamplona in #3182
- Add pinned chatrooms feature with NIP-78 sync by @vitorpamplona in #3183
- New Crowdin Translations by @github-actions[bot] in #3179
- Add NIP-101e fitness workout support (Kind 1301) by @vitorpamplona in #3184
- Add unified profile payment screen with multi-rail support by @vitorpamplona in #3185
- New Crowdin Translations by @github-actions[bot] in #3187
- Localize onchain zap send UI and failure messages by @davotoula in #3188
- feat(desktop): unhealthy-relay review banner + popup by @nrobi144 in #3186
- New Crowdin Translations by @github-actions[bot] in #3190
- Unify payment card UI with PaymentCard component by @vitorpamplona in #3191
- Add --payer-data flag to offer request command by @vitorpamplona in #3193
- Exclude metadata tags from text search by @vitorpamplona in #3194
- Add NIP-89 app recommendation management UI by @vitorpamplona in #3192
- New Crowdin Translations by @github-actions[bot] in #3195
- New Crowdin Translations by @github-actions[bot] in #3198
- Make relay failure logs diagnosable (exception class on null message, correct NIP-11 error label) by @davotoula in #3197
- Add Selected filter mode for curated notifications by @vitorpamplona in #3196
- Improve NIP-82 software app UI with author info and screenshots by @vitorpamplona in #3200
- Support private notes: gift-wrap kind-1 replies and posts to p-tagged users by @vitorpamplona in #3201
- Refactor notification chips UI with Material 3 components by @vitorpamplona in #3203
- Add show button to hidden words list by @vitorpamplona in #3204
- Redesign activity cards (reactions, zaps, nutzaps) with unified UI by @vitorpamplona in #3202
- New Crowdin Translations by @github-actions[bot] in #3199
- New Crowdin Translations by @github-actions[bot] in #3205
- Fix test name grammar in LnZapRequestAnonTagTest by @vitorpamplona in #3206
- Migrate notification filter from Global to Selected on first load by @vitorpamplona in #3207
- Remove write-only RelayStat liveness fields by @davotoula in #3208
- Stop media-server default from resetting on every launch by @davotoula in #3209
- Reorganize changelog into versioned files by @vitorpamplona in #3210
- desktop(namecoin): port DiagnosticCard from Android settings by @mstrofnone in #3211
- docs: Add v1.12.0 release notes by @vitorpamplona in #3214
- New Crowdin Translations by @github-actions[bot] in #3212
- New Crowdin Translations by @github-actions[bot] in #3215
- fix: parse IPv6-literal URLs in post content by @vitorpamplona in #3217
- Restore iOS test native-cache workaround dropped in dependency bump by @davotoula in #3216
- Don't reset relay reconnect backoff on momentary connections by @davotoula in #3219
- New Crowdin Translations by @github-actions[bot] in #3222
- fix: RelayHealthStore threading + sleep-resume socket recovery (follow-up to #3186) by @nrobi144 in #3221
- Gate Tor-routed relay dials until Tor is ready by @vitorpamplona in #3223
- fix: Tor lifecycle race + bounded bootstrap so a hostile network can't wedge Tor by @vitorpamplona in #3224
- Redesign workout display with hero metric and stats grid by @vitorpamplona in #3226
- Eagerly preload thread for replies visible in feed by @vitorpamplona in #3227
- fix(tor): bound Arti bootstrap with a 60s timeout + repeatable network test suite by @vitorpamplona in #3228
- perf(tor): stop wiping Arti's consensus cache on every start by @vitorpamplona in #3230
- feat(tor): self-heal when Tor is Active but every circuit is dead by @vitorpamplona in #3231
- New Crowdin Translations by @github-actions[bot] in #3229
- New Crowdin Translations by @github-actions[bot] in #3232
New Contributors
Full Changelog: v1.11.0...v1.12.0