SMS+MMS chat client using GTK+ and Rust
remove unused dep
bump tree_magic_mini dep
add disabled debugging code for cell renderer drawing/events


browse  log 



You can also use your local clone with git send-email.


vgtk-based SMS+MMS client

vgmms screenshot


The existing messaging stacks for linux are lacking in support for MMS, from unimplemented features to antiquated frameworks.

vgmms exists to do only SMS+MMS and to have feature parity with messaging clients for Android and iOS.


  • sending/receiving MMS and SMS works
    • both group chats and media attachments work
  • logs are persisted to disk (in $XDG_DATA_HOME/vgmms/vgmms.db)
  • lots of work to do still (see below)
  • contributions welcome!


  1. install ofono and MMSd
    • you may need to use patched versions of these!
      • patched ofono fixes dual-stack IPv6 connectivity (needed for MMS at least with T-Mobile)
      • patched MMSd fixes MMS parsing. whether you need this depends on your network's MMS implementation (again, at least T-Mobile seems to need this)
    • if you're feeling brave, or too lazy to build from source, install them from upstream (ofono, MMSd) or your package manager and please report if SMS and MMS work!
  2. make sure you have a Rust compilation toolchain, e.g. pacman -S rust or curl https://sh.rustup.rs -sSf | sh
  3. download the source: git clone https://git.sr.ht/~anteater/vgmms
  4. cd vgmms
  5. cargo build --release
    • the gtk and lalrpop crates take a lot of RAM to build. if you run out of RAM on a PinePhone or other RAM-limited system, try the following:
      • enable zram and/or swap
      • pass -j 1 to cargo build


  1. run ofonod (as root) and mmsd (as your user). be able to watch their logs for error messages (e.g. run with -n -d).
  2. while the former two services are running, run vgmms
  3. if you have trouble (or don't), please submit a bug (or success) report!

#DBus interface

vgmms exposes a GtkAction DBus interface, which can communicate with a running instance:

  • list available operations
    $ gdbus call -e -d org.vgmms -o /org/vgmms -m org.gtk.Actions.List
  • send a message
    $ gdbus call -e -d org.vgmms -o /org/vgmms -m org.gtk.Actions.Activate \
    send-message '[<(["12345"], "hi friend", @as [])>]' []
  • send a message (to a group chat, with attachments)
    $ gdbus call -e -d org.vgmms -o /org/vgmms -m org.gtk.Actions.Activate \
    send-message '[<(["12345", "54321"], "hi everyone", @as ["/tmp/horse.png", "/tmp/info.pdf"])>]' []
  • open the new tab dialog
    $ gdbus call -e -d org.vgmms -o /org/vgmms -m org.gtk.Actions.Activate new-tab [] []
  • open a chat with a given list of numbers
    $ gdbus call -e -d org.vgmms -o /org/vgmms -m org.gtk.Actions.Activate open-chat '[<(["12345", "54321"],)>]' []
  • close the current tab
    $ gdbus call -e -d org.vgmms -o /org/vgmms -m org.gtk.Actions.Activate close-tab [] []
  • exit vgmms
    $ gdbus call -e -d org.vgmms -o /org/vgmms -m org.gtk.Actions.Activate exit [] []
  • save an attachment given its (vgmms internal) id
    $ gdbus call -e -d org.vgmms -o /org/vgmms -m org.gtk.Actions.Activate save-attachment-dialog '[<uint64 1>]' []

#known bugs

  • lots, since things are still in-development
  • see the bug tracker