PeerID 27/n: ContentView and MeshPeerList by @qalandarov in https://github.com/permissionlesstech/bitchat/pull/835
Fix camera icon in DM sheets by consolidating sheet presentations by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/834
Fix GeoRelay prefetch isolation by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/837
PeerID 28/n: ChatViewModel.getShortIDForNoiseKey by @qalandarov in https://github.com/permissionlesstech/bitchat/pull/836
PeerID 29/n: BLEService + remove dupe funcs from #823 by @qalandarov in https://github.com/permissionlesstech/bitchat/pull/838
PeerID 30/n: Update some leftovers + case normalization by @qalandarov in https://github.com/permissionlesstech/bitchat/pull/839
PeerID 31/n: Remove String interop to be explicit by @qalandarov in https://github.com/permissionlesstech/bitchat/pull/840
Minor cleanup by @qalandarov in https://github.com/permissionlesstech/bitchat/pull/842
Extract MimeTypes into a separate file + add tests by @qalandarov in https://github.com/permissionlesstech/bitchat/pull/843
No fallback mime-type + remove dead code by @qalandarov in https://github.com/permissionlesstech/bitchat/pull/844
Improve mesh media throughput by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/845
Prevent duplicate action emote echoes by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/852
Add type-aware REQUEST_SYNC sync rounds by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/853
Simplify validation, compression heuristics, and notification scheduling by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/841
Prevent mesh self-sync duplicates by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/856
Improve background BLE stability and nearby alerts by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/864
Extract public timeline helpers and rate limiter by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/869
Extract public message pipeline from ChatViewModel by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/870
Add source-based routing support by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/862
Fix verification persistence on iOS when app backgrounds by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/822
Remove redundant conditional compilation directive by @jithin-renji in https://github.com/permissionlesstech/bitchat/pull/863
Add localizable strings in show commands view by @Viniciuss-Moreira in https://github.com/permissionlesstech/bitchat/pull/828
Test Vector Support for Noise XX Handshake by @nadimkobeissi in https://github.com/permissionlesstech/bitchat/pull/885
Correct the scheme name for macOS target. by @xingheng in https://github.com/permissionlesstech/bitchat/pull/879
Improve error handling in NostrTransport by @Volgat in https://github.com/permissionlesstech/bitchat/pull/884
Fix: Replace precondition() crashes with throwing errors in crypto code by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/888
Refactor: Break circular dependency between CommandProcessor and ChatViewModel by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/889
Extract GeohashParticipantTracker from ChatViewModel by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/890
Extract MessageFormattingEngine from ChatViewModel by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/891
Replace Thread.sleep with cooperative RunLoop delay by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/892
Consolidate message deduplication into shared MessageDeduplicator by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/893
Refactor: Simplify ChatViewModel - Phase 1 by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/894
Add ChatViewModel testability infrastructure and unit tests by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/896
Fix Swift 6 concurrency warnings by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/897
Refactor ChatViewModel: extract logic to services by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/898
Refactor ChatViewModel and fix private chat bugs by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/901
fix(macos): Propagate environment objects to sheet presentations by @81451 in https://github.com/permissionlesstech/bitchat/pull/900
Refactor MessageRouter to use generic Transport abstraction by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/902
refactor: consolidate KeychainHelper into KeychainManager by @malkovitc in https://github.com/permissionlesstech/bitchat/pull/916
fix(build): exclude allowBluetoothHFP on iOS Simulator by @malkovitc in https://github.com/permissionlesstech/bitchat/pull/918
fix: harden hex string parsing by @malkovitc in https://github.com/permissionlesstech/bitchat/pull/919
perf: optimize MessageDeduplicator performance by @malkovitc in https://github.com/permissionlesstech/bitchat/pull/920
fix: clear DH shared secrets after Noise handshake operations by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/928
fix: add thread safety to NostrTransport read receipt queue by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/929
fix: eliminate flaky FragmentationTests with proper async synchronization by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/931
Implement Geohash Presence (Heartbeats) by @callebtc in https://github.com/permissionlesstech/bitchat/pull/940
feat: Source routing v2 by @callebtc in https://github.com/permissionlesstech/bitchat/pull/938
chore: pin swift-secp256k1 to exact version 0.21.1 by @csjones in https://github.com/permissionlesstech/bitchat/pull/934
fix BCH-01-002: prevent DoS via file storage exhaustion by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/942
fix BCH-01-004: rate-limit subscription-triggered announces by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/943
fix(security): reduce timestamp validation window to ±5 minutes [BCH-01-011] by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/944
fix(security): improve keychain error handling [BCH-01-009] by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/945
fix(security): prevent notifications from blocked users [BCH-01-012] by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/946
fix(security): clear iOS app switcher snapshots on panic reset [BCH-01-013] by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/947
BCH-01-010: Noise Protocol spec compliance improvements by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/948
fix: update georelays weekly workflow by @a1denvalu3 in https://github.com/permissionlesstech/bitchat/pull/949
Fix compiler warnings for unmutated variables in BLEService by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/950
Fix main actor isolation error in clearAppSwitcherSnapshots by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/951
Fix asymmetric voice/media delivery in private chats by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/952
Remove security warning from AppInfo view by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/953
Fix READ receipt status not updating to blue checks by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/954
Fix topology update running before announce verification by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/955
Update Tor to 0.4.8.21 with size optimization by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/956
Revert Noise nonce size to 4 bytes for backward compatibility by @callebtc in https://github.com/permissionlesstech/bitchat/pull/957
Replace C Tor with Rust Arti by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/958
Remove dormant wake attempt on Tor foreground restart by @jackjackbits in https://github.com/permissionlesstech/bitchat/pull/959
New Contributors
@jithin-renji made their first contribution in https://github.com/permissionlesstech/bitchat/pull/863
@Viniciuss-Moreira made their first contribution in https://github.com/permissionlesstech/bitchat/pull/828
@nadimkobeissi made their first contribution in https://github.com/permissionlesstech/bitchat/pull/885
@xingheng made their first contribution in https://github.com/permissionlesstech/bitchat/pull/879
@Volgat made their first contribution in https://github.com/permissionlesstech/bitchat/pull/884
@81451 made their first contribution in https://github.com/permissionlesstech/bitchat/pull/900
@malkovitc made their first contribution in https://github.com/permissionlesstech/bitchat/pull/916
Full Changelog: https://github.com/permissionlesstech/bitchat/compare/v1.4.4...v1.5.0