saltyim is the Go library and reference client and broker implementation for Salty IM it contains a command-line client (cli), a terminal user interface (tui), builtin server/broker and a Mobile / Desktop App PWA (progressive web app)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.1 KiB

Salty IM (Legacy)

A rudimentary terminal / command-line based chat system using the salty command-line tool for encrypting and decrypting messages using the saltpack message format and using msgbus as transport.


  • You need a POSIX Shell, e.g: /bin/sh
    • You also need jq installed (the script uses this to parse the JSON from Discovery requests)
  • msgbus
  • salty

If you have Go installed:

$ go install
$ go install
$ go install

Quick Start

export MSGBUS_URI=https://msgbus.<yourdomain>
$ ./salty-chat read &
$ ./salty-chat chat

NB: You need to ensure you have a valid msgbus Endpoint for salt-chat to work. See Endpoint for details.


SKip this section if you ran salty-chat make-user


To generate your Private / Public keys:

$ salty-keygen -o $HOME/.config/salty/$USER.key

Setup an environment variable in your shell to point SALTY_IDENTITY to $HOME/.config/salty/$USER.key. For example:

export SALTY_IDENTITY="$HOME/.config/salty/$USER.key"


To ensure you are reading from your own Inbox by default use: export SALTY_INBOX="username"


First you need to setup msgbus somewhere, see that project for details on how to set this up. Or you can just use the instance I run at (just please don't abuse it!)

Point an environment variable called MSGBUS_URI to your msgbus instance.


export MSGBUS_URI=

NB: You are welcome to use my (James Mills) msgbus instance above but please don't abuse it!


Create a JSON file called <user>.json and place it at the root of your domain on a path like /.well-known/salty/user.json. The conents of which are:

  "endpoint": "",
  "topic": "prologic",
  "key": "kex1ekt5cru4vs42wnaxppkjn5pexmt2w6uxx9z2mz0fqeuc80e0g9gsggs8ah"

You can see an example of


Start a Chat

$ ./salty-chat chat

Sending a Message

$ ./salty-chat send Test
2022/03/17 01:46:14 Reading message from stdin...

Receiving your Messages

$ ./salty-chat read
INFO[0000] successfully connected to wss://
# signed by: kex1ekt5cru4vs42wnaxppkjn5pexmt2w6uxx9z2mz0fqeuc80e0g9gsggs8ah
[2022-03-17T01:23+10:00] <prologic> Test
# signed by: kex1ekt5cru4vs42wnaxppkjn5pexmt2w6uxx9z2mz0fqeuc80e0g9gsggs8ah
[2022-03-17T01:46+10:00] <prologic> Test


salty-msgbus-chat is licensed under the terms of the WTFPL license.