← All projects

application · development

Culver

SMS, MMS and Matrix in one inbox on SouveraineOS.

No public release observedSource declaration: 0.1.0License: AGPL-3.0-or-later

Project reviewed 2026-10-25 · Information collected 2026-10-30

Culver brings SMS, MMS and Matrix into one inbox on SouveraineOS. Close the window. The receiver keeps running.

SouveraineOS integration comes first. Full compatibility with other platforms follows.

Keep local contacts with photos and vCard import/export. Follow Matrix rooms and threads, edit messages, add reactions and mark favorites. Call controls include recent calls and voicemail actions.

Search stays live as messages arrive and change. SMS status distinguishes carrier retries from confirmed delivery. Delivery reports stay out of your inbox. SMS history, unread counts and notification records are saved together.

Message Sync connects paired devices over VPN. You choose which devices share. Read state and deletions follow the conversation between devices. Player adds song details to an unsent draft. You choose the conversation and send it.

Built with Rust and Qt/QML. Contacts and SMS/MMS history live in an encrypted local database. SMS uses ModemManager; MMS uses mmsdtng. The README covers building and running Culver.

Read the source.

Changelog

2026-10-25

  • Attachment downloads preserve newer edits, reactions and redactions, and stop with their account.
  • Matrix resumes saved outgoing messages after restart without reopening their rooms.
  • Read acknowledgements run separately from inbox and phone commands and retain the selected message boundary across retries.
  • Message Sync applies message and conversation deletions and retires obsolete queued read requests.
  • SMS delivery reports no longer create empty messages, unread counts or notifications.
  • SMS delivery reports distinguish confirmed receipt, carrier retries and failure. Replayed modem state preserves confirmed delivery.
  • Receiving an SMS commits the message, unread count and notification together; failed writes leave no partial inbox update.
  • Search stays current as messages arrive, change or disappear. Clearing search restores the current timeline.
  • Matrix encrypts attachment bytes before upload to encrypted rooms. If it cannot determine the room's encryption state, it refuses the upload.
  • The inner navigation buttons curve around the system Pill while keeping their touch targets outside its protected region. Narrow windows use the compact fallback.
  • Unknown SMS timestamps stay blank. Matching modem replay preserves an already recorded time instead of replacing it with the Unix epoch.
  • Phone and paired-laptop sends retain a clear failure or uncertain outcome. An uncertain submission does not restore the text into the composer or automatically send another copy.

2026-10-20

  • Startup now repairs a matching legacy SMS timestamp in place, preserving the message identity and unread count instead of adding a second copy.

  • SMS timestamps supplied by ModemManager with an hour-only timezone offset now retain their actual time instead of appearing at the Unix epoch.

  • The resident receiver now rebuilds its modem connection when ModemManager adds or removes the modem's SMS Messaging interface, allowing SMS monitoring to recover from that interface change.

  • Matrix room and notable room-info updates again refresh Culver's inbox conversation snapshots.

Documentation and evidence record

Source CI observed for this documentation revision: success. Application builds and device acceptance are separate evidence.

Documentation owner: Fimeg/culver
Repository revision: 07711c41560c80351e553e34814cebab3c59fe83
Document: public-docs/culver.md
Document SHA-256: ceedd06907524a15abe96828b41fed578ace57817e4ec453ee6b6db123aa58a2

Changelog: public-docs/changelog.md
Changelog SHA-256: 49d20305c56933e46b329e10d1116f6534d9d0e9cea0edc489fac15c5f3b4971

  • Resident receiver and reconnect handling: crates/app/src/receiver.rs
  • SMS parsing and timestamp handling: crates/telephony/src/sms.rs
  • SMS receive, persistence and identity handling: crates/telephony/src/protocol.rs
  • Matrix room update observer: crates/matrix/src/protocol.rs
  • Music draft handoff: crates/app/src/music_share.rs
  • Encrypted-store credential requirements: crates/app/src/db_key.rs
  • Paired Message Sync: crates/app/src/message_sync.rs

The separately published source projection is at d1fd5e5229c04354d2cee6b70779080ef44f8a1c. It can differ from the documentation source revision.