p2p chat in the terminal

cblgh 27d595ac99 13.2.0 1 month ago
.github 9807d7047e Create FUNDING.yml 8 months ago
test 12713c24c3 add unit tests and Mocha test-runner 11 months ago
.cabal.yml-example 366d6e7c13 Add frontend configuration 6 months ago
.gitignore 8c093fb4d7 Add binary packaging (#115) 1 year ago
.npmignore 8e2b927e2d chore: npmignore 9 months ago
.travis.yml 8c093fb4d7 Add binary packaging (#115) 1 year ago
LICENSE 330eaa8724 Update LICENSE 1 year ago
README.md 575e6a5952 fix hotkey listing 3 months ago
cli-2019-04.png 99d4ccbbef add cli image 1 year ago
cli.js 4e2968f298 fix: nicks /w dupes no longer bleed onto next line 2 months ago
commands.js 22388696bf add ctrl-a to cycle to next unread channel 3 months ago
debug.js 9f762adc8a Lint w standard 6 months ago
markdown-shim.js 80061a56bf Update markdown-shim.js 1 year ago
neat-screen.js db4ed293f2 use ctrl-r instead of ctrl-a for reading unread channels 3 months ago
output.js 170a913fdf use patched output fot neat log 2 years ago
package-lock.json 27d595ac99 13.2.0 1 month ago
package.json 27d595ac99 13.2.0 1 month ago
package.sh 76ecd824c7 fix: fix utp-native bindings for native build 5 months ago
publish.sh 2351c5e1b3 remove first publish from publish.sh 5 months ago
util.js 11a33ccd0f sort hidden users to bottom of user pane, prefix with minus sign 3 months ago
views.js 635dedbde3 fix nick rendering: adjust nick slice if has mod sigil 2 months ago
welcome.txt 810cdfa382 add support for custom welcome message 9 months ago



Terminal client for cabal, the p2p chat platform.

See cabal-core for the underlying database & api.

chat with us: npx cabal cabal://cabal.chat


$ npm install --global cabal
$ cabal --new


Start a new instance:

cabal --new

then copy the key and give it to someone else.

Connect to an existing instance:

cabal <key>


cabal cabal://0201400f1aa2e3076a3f17f4521b2cc41e258c446cdaa44742afe6e1b9fd5f82

Remember cabals for auto-joining

save a cabal to the config

cabal --save <key>

then connect to all of your saved cabals, by simply running cabal:


show saved cabals with --cabals and remove a saved cabal with --forget

cabal --cabals
cabal --forget <key|alias>

Save an alias to a key

create a local name for a key.

cabal --alias <name> --key <key>
cabal <name>

Scan a QR code to join a cabal:

Cabal can use a webcam connected to your computer to read a cabal key from a QR code. For this to work, you'll need to install an additional system dependency:

  • Linux: sudo apt-get install fswebcam
  • MacOS: brew install imagesnap

    # Hold up your QR code in front of the webcam and then run:
    cabal --qr

Headless mode

This will run cabal without a UI. You can use this to seed a cabal (e.g. on a VPS) and make its data more available:

cabal <key> --seed


/add, /cabal
  add a cabal
  create a new cabal
/nick, /n
  change your display name
/emote, /me
  write an old-school text emote
  display the names of the currently online peers
  display the cabal's channels
  set pane to navigate up and down in panes: channels, cabals
/join, /j
  join a new channel
/leave, /l
  leave a channel
  clear the current backscroll
  display this help message
  generate a qr code with the current cabal's address
/quit, /exit
  exit the cabal process
/topic, /motd
  set the topic/description/message of the day for a channel
/whoami, /key
  display your local user key
  display the public keys associated with the passed in nick

  move between channels/cabals panes
  move up/down channels/cabals


    clear input line
    delete last word in input
    cycle through command history
    cycle through command history
    go to start of input line
    go to end of input line
    go to next channel
    go to previous channel
    go to next unread channel
    scroll up through backlog
    scroll down through backlog
    scroll up through nicklist
    scroll down through nicklist
    select channels 1-9
    tab between the cabals & channels panes
    tab toggle id suffixes on/off


The message styling can be slightly tweaked.
Regarding the supported options, see .cabal.yml-example