Releases: Olib-AI/PoolChat
Releases · Olib-AI/PoolChat
Release list
v1.5.0
v1.4.0
What's New
Bug Fixes
- Fix encryption queue poisoning — Exclude self from group chat encryption targets; self never has an encryption key, so including it filled the pending queue (50 max) with unreachable entries, silently dropping messages for legitimate peers
- Safety net in
sendEncryptedPayload— Strips self from target list for all callers (reactions, polls, history sync, clear history)
Improvements
- Improved chat scroll behavior with bottom anchor and manual scroll detection
v1.3.0
What's New
Security Hardening
- Messages queued until E2E key exchange completes — never sent unencrypted
- Poll votes and reactions use transport-authenticated sender identity
- Reaction cap prevents memory exhaustion from malicious peers
- Notification privacy — no message content leaked to OS notifications
- TOFU state properly cleared on key regeneration
- History sync paginated with no inline media (prevents OOM)
- Voice recordings protected with NSFileProtectionComplete
76 Unit Tests
Full test coverage for ChatEncryptionService (key exchange, TOFU, reflection attacks), ChatHistoryService (dedup, limits), RichChatMessage (reactions, polls, payloads), PollData, MentionParser, and VoiceRecordingService.
v1.2.0
- Add game chat notification suppression (isGameChatActive flag)
- Suppress system notifications from both ChatNotificationBridge and PoolChatViewModel during active game chat
- Fix VoiceRecordingService timer concurrency with MainActor.assumeIsolated
v1.1.0
Concurrency Fixes
- PoolChatConfiguration — Mutable statics (
logger,rejectUnencryptedMessages,enableHistorySync) are now protected byNSLock(were unguarded data races) - VoiceRecordingService — Removed unnecessary
Task { @MainActor in }wrappers from timer closures (already on main thread; was creating 10 Task allocations/sec) - PoolChatViewModel — Setup Tasks are now tracked in an array, cancelled on re-entry and
terminate()to prevent racing duplicate tasks on reconnect; addedTask.isCancelledchecks for cooperative cancellation
v1.0.0
PoolChat v1.0.0
Initial public release — end-to-end encrypted mesh chat for iOS and macOS.
Features
- Curve25519 ECDH + HKDF-SHA256 + AES-256-GCM end-to-end encryption
- Trust-On-First-Use (TOFU) key verification model
- Key fingerprint verification for MITM detection
- Group and private chat modes
- Rich message types (text, images, voice notes, emoji, polls, reactions)
- EXIF/GPS metadata stripped from images before sending
- Encrypted chat history persistence via SecureStorageProvider protocol
- Configurable history sync for new members
- Voice recording with AVFoundation
- Relay-aware key exchange for mesh network peers
- Unencrypted message rejection (default: on)
- Local notifications for background messages
- Built-in SwiftUI views
- Cross-platform (iOS + macOS)
- Configurable logging and storage via protocol injection
Security
- 3 laps of security audits completed
- All CRITICAL, HIGH, and MEDIUM findings resolved
- Ready for public audit
Requirements
- iOS 17.0+ / macOS 14.0+
- Swift 6.0+
- Xcode 16+
- ConnectionPool v1.0.0+