+++
title = "Messaging"
template = "doc.html"
weight = 2
+++
Let’s get started using the `:chat-cli` application, also known more simply as
_Chat_. It's the simplest way to talk to people using the command line
interface.
### Quickstart
The most common use for `:chat-cli` right now is, of course, communicating in group chats.
### Joining a chat
In `:chat-cli`, any kind of medium for a message is called a _chat_. There are four "types" of chats, but for now we'll be dealing with the _channel_, a publicly accessible chatroom for general use. We'll discuss the other three kinds in the [chat management](#chat-management) section later on.
Join the Urbit Community from Dojo using `:group-view &group-view-action [%join [~bitbet-bolbel %urbit-community] ~bitbet-bolbel]`. Once you've joined, join the General chat from chat-cli. Use `ctrl-x` to switch from the Dojo prompt to the Chat prompt.
Then:
```
~sampel-palnet:chat-cli/ ;join ~darrux-landes/general
```
Now that you're in, try post a line to `~darrux-landes/general`:
```
~sampel-palnet:chat-cli= Hello, world!
```
You'll see your message printed below messages from others that came before it. You can always type `;chats` in the `chat-cli` prompt to list all the chats you're in:
```
~sampel-palnet:chat-cli= ;chats
~darrux-landes/general
```
Glyphs will be automatically assigned to channels, but have the option of binding a glyph (single non-alphanumeric character) to the channel you're joining; the syntax is in the form of `;join ~/~dopzod/books +`. The chosen glyph will be the symbol that ends your prompt, and it will be what you use as a shortcut to switch to this channel.
```
~sampel-palnet:chat-cli= ;+
~sampel-palnet:chat-cli+
```
Use `;leave` to unsubscribe from a channel:
```
~sampel-palnet:chat-cli= ;leave ~darrux-landes/general
```
Now, let's create a channel we can invite some friends to:
```
~sampel-palnet:chat-cli= ;create channel /my-channel
```
Now you can tell your friends to `;join ~your-urbit/my-channel`.
In order to see messages in `:chat-cli` you may need to do the following in Dojo:
```
:chat-cli %connect
```
### Creating and managing chats {#chat-management}
As mentioned before, any urbit can host any number of chats. Existing chats can be deleted or modified with various commands. All commands in this section should be sent from the `chat-cli>` prompt.
#### Create
Syntax: `;create [type] /name +`, where `+` represents an optional glyph.
Creates and joins a chat, where `[type]` is any of the following:
- `channel`: public chat. Has a blacklist for write control.
- `village`: invite-only chat.
- `journal`: publicly readable, invite-only for writing.
- `mailbox`: publicly writeable, invite-only for reading.
Let's create an example mailbox:
```
~sampel-palnet:chat-cli> ;create mailbox /coolbox ^
```
#### Delete
Syntax: `;delete /name`
Deletes a chat.
#### Permission management
You can permit and ban people from reading and/or writing to the chats you host, using `;invite` and `;banish` command respectively.
Syntax: `;invite [rw] /name ~ships`
Where `rw` is either `r`, `w`, or `rw`, representing "read" and "write" permissions.
And where `~ships` is a comma-seperated list of ships to invite.
For example, to grant two people full access to a `village` we created:
```
~sampel-palnet:chat-cli> ;invite rw /hidden-village ~ravmel-ropdyl, ~rapfyr-diglyt
```
Similarly, if we later want to revoke the writing permissions for one of them, but still allow them to read new messages, we can run:
```
~sampel-palnet:chat-cli> ;banish w /hidden-village ~rapfyr-diglyt
```
#### Chat glyphs
Glyphs are found at the end of your prompt, as a quick indicator of where
your messages will be sent.
Glyphs are assigned by chat hash out of the following list:
```
! @ # $ % ^ & ( ) - = _ + [ ] { } ; ' \ : " , . < > ?
```
Alphanumeric characters and `|#/*~` are reserved; all others can be manually assigned.
For example, `-` the glyph at the end of the prompt below might indicates that
messages sent from this prompt will go to some chat with that glyph:
```
~sampel-palnet:chat-cli-
```
To see what chat is bound to a glyph, use the `;what` command followed by the
glyph in question, or use `;what` without specifying a glyph to see all of your
subscriptions which are bound to glyphs. For example, to see `=`:
```
~sampel-palnet:chat-cli> ;what =
~dopzod/urbit-help
```
To see all of your glyph bindings:
```
~sampel-palnet:chat-cli> ;what
> ~paldev/numismatic-forum
. ~middev/ny-martians
= ~dopzod/urbit-help
```
When the messaging target doesn't have a glyph, we see their name at the end of
the prompt instead. Here we're talking into `~dannum-mitryl/homework`:
```
~sampel-palnet:chat-cli[~dannum-mitryl/homework]
```
#### Bind
Syntax: `;bind [glyph] ~host/chat-name`
Assigns the chosen glyph to a chat.
For example:
```
~sampel-palnet:chat-cli> ;bind + ~dopzod/urbit-help
```
#### Unbind
Syntax: `;unbind [glyph] ~host/chat-name`
Unassigns the chosen glyph from a chat owned by your ship.
For example:
```
~sampel-palnet:chat-cli> ;unbind + ~dopzod/urbit-help
```
If you don't specify a chat, all bindings for that glyph are removed.
#### Prefixes
Received posts are prefixed with a glyph to let you know what the
audience is. You can activate an individual post to see the full
audience.
There are a few special-purpose "glyphs":
- `|` - Informational messages
- `*` - Posts to a target you don't have a glyph binding for
### Configuration
#### Set audience
`;~ship/chat`
Set audience to `~ship/chat`.
#### Set audience by glyph
Syntax: `;[glyph]`
Set audience to the chat previously bound to the chosen glyph.
#### Set audience to own chat
Syntax: `;/chat`
Set audience to a chat on your own ship.
### Miscellaneous configuration
#### Change timezone
Syntax: `;set timezone [+/-][hours]`
Adjust the display of timestamps to a specific timezone. Relative to UTC.
#### Set width
Syntax: `;set width [number]`
Set the rendering width of `:chat-cli` to a specific number of characters.
(Minimum of 30.)
#### Show timestamps
Syntax: `;set showtime`
Show the timestamp for each message. This is set by default.
#### Hide timestamps
Syntax: `;unset showtime`
Stop showing the timestamp for each message.
#### Sound notification on
Syntax: `;set notify`
Emit a terminal bell sound if your six-syllable ship name is mentioned in
a message. This is set by default.
#### Sound notification off
Syntax `;unset notify`
Do not notify when your ship name is mentioned.