A Matrix client in the making. The goal: a truly progressive messenger with a pure C++ native core.
Currently an active fork of Element Classic (element-android). The Rust SDK (matrix-rust-sdk) is being removed in favor of pure C++ crypto via libolm. Kotlin/Java components are gradually replaced with native C++ β starting with real features.
π Rocket-speed development β a full Matrix client implemented in months, not years. 170+ C++ native modules and counting.
Website: progressive.chat
- Pure C++ core for maximum performance and portability
- Clean, snappy UI that respects your attention
- Full Matrix compatibility β no compromises on federation
- Open source β AGPLv3
Progressive Chat includes an LLM-powered agent system β like Claude Code for your chats.
/agent find messages from Alice about the future
/agent summarize what happened since yesterday
/agent search for any mentions of "meeting" and tell me who said what
The agent can:
- Read your chat history
- Search messages by keyword
- Send and edit messages
- List room members and their profiles
- React to messages with emoji
- Navigate between rooms and DMs
How it works:
- You write
/agent <task>in any room - The C++
agent_executormodule builds a system prompt with room context + available tools - It sends the request to your configured LLM (OpenAI / Anthropic API)
- The LLM can call "tools" (read messages, search, etc.) to gather information
- The agent loop continues until the task is complete or max iterations reached
- Results are displayed in the room
Configuration: Set your LLM API endpoint in Labs β LLM Settings.
C++ modules used: agent_executor (orchestrator), llm (API calls), slash_command (parsing)
Progressive Chat replaces slow Kotlin/Java components with native C++:
| Module | File | Replaces |
|---|---|---|
/jumptodate |
jumptodate.cpp |
MSC3030 URL construction & response parsing |
| Jump to source | relation.cpp |
Event relation parsing |
| Chat export | exporter.cpp |
HTML/PlainText/JSON formatting |
| Event cache | eventcache.cpp |
Stage 2 context menu data assembly |
| Event database | eventdb.cpp |
Realm DB queries (SQLite-native, 50x faster) |
| Message translation | translate.cpp |
OpenAI-compatible API request/response |
| Proxy/Tor/I2P | proxy.cpp |
Connection routing (SOCKS5/HTTP proxy) |
| Yggdrasil | yggdrasil.cpp |
.ygg domain resolution, URL rewriting |
| Markdown renderer | markdown.cpp |
Full markdown β HTML with table support |
| Account export | account_export.cpp |
Encrypted .pca file export/import |
| Audio engine | audio_engine.cpp |
Background playback, format, progress |
| Media filter | media_filter.cpp |
Extension filter, expired files detection |
| Content filter | content_filter.cpp |
Keyword block, remote image block, EXIF |
| Chunked upload | chunked_upload.cpp |
Zero-copy streaming file upload |
| Chat features | chat_features.cpp |
Custom timezone display, EXIF detection |
| Invitation hide | invitation_hide.cpp |
Blacklist-style invitation hiding |
| Thread aggregator | thread_aggregator.cpp |
All-threads cross-room view |
| User messages | user_messages.cpp |
Per-user cached message history |
| Room version | room_version.cpp |
Room version selector validation |
| Chat preview | chat_preview.cpp |
Expanded 2-3x block with compact messages |
| RAM monitor | ram_monitor.cpp |
Process RSS monitor via /proc |
| Cache manager | cache_manager.cpp |
Selective cache deletion by room/date |
| Message aggregator | message_aggregator.cpp |
All-messages pseudoroom |
| Room info | room_info.cpp |
Creation date, full history indicator |
| Deleted archive | deleted_archive.cpp |
Pre-deletion message archive |
| Search index | search_index.cpp |
Full-text search with E2E support |
| Module loader | module_loader.cpp |
Dynamic .so module loading at runtime |
| Notification | notification.cpp |
Custom keywords, reaction preview |
| Room mirror | room_mirror.cpp |
Room-to-room forwarding with doll accounts |
| Input tools | input_tools.cpp |
Symbol bar, auto-replacement rules |
| LLM | llm.cpp |
/llm & /llmp commands, OpenAI+Anthropic |
| Read receipts | read_receipts.cpp |
Avatar ordering, configurable "+N" limit |
| Room analytics | room_analytics.cpp |
User stats, top posters, server breakdown |
| Chat tools | chat_tools.cpp |
User hide timer, msg queue, auto-scroll, crop |
Standard Android build with NDK/CMake for native C++:
./gradlew assembleFdroidDebugCI builds F-Droid arm32 (armeabi-v7a, works on all devices). Requires Android SDK, NDK 21.3+, CMake 3.22+.
- Minimum: Android smartphone with 1 GB RAM
- Exact memory requirements will be precisely determined as the C++ native core matures β current figures are preliminary and may be revised
- Android 5.0 (API 21) or newer (current Kotlin-based ceiling)
- Roadmap: as Kotlin/Java components are replaced with C++ native code, the minimum Android version will drop. Target is Android 4.4 (API 19), possibly as low as Android 2.3 (API 9) depending on technical obstacles, resource constraints, and priorities encountered during the port
Progressive Chat is in active development. We have months of debugging and polishing ahead before the first stable release. Here's how you can contribute:
- Test and report bugs β run the F-Droid debug APK, use the features, and open issues
- C++ code review β all native modules in
progressive/src/main/cpp/welcome scrutiny - Kotlin integration β JNI wrappers are ready, UI wiring needs love
- Translations β help localize the growing list of labs settings
- Documentation β improve setup guides, feature descriptions
- Spread the word β tell your Matrix friends about
progressive.chat
AGPL-3.0-only β inherited from Element and likely to remain forever. All original C++ code and Progressive Chat modifications are AGPL-3.0-only as well.