on 55eba74 help sign in
urbit.org/docs/using/messaging.md
402 lines 11 kB history raw
1---
2navhome: '/docs'
3next: True
4sort: 4
5title: Messaging (:talk)
6---
8# Messaging (`:talk`)
10<div class="row">
12<div class="col-md-8">
14`:talk` is the built-in frontend for the Urbit messaging and notifications
15protocol, `:hall`. Today we use `:hall` just to chat and coordinate, but
16it's really a general purpose piece of infrastructure.
18For the time being come join us in `/urbit-meta` by using the
19<a href="#-quickstart">quickstart</a> below.
21Today `:hall` is sort of like a distributed, encrypted Slack that can be
22used from the CLI and the browser. There’s no central `:hall` server.
23Any Urbit can host one.
25`:hall` is a general purpose tool for both aggregating and publishing
26streams of messages. Applications can use `:hall` as their transport
27protocol, API connectors can push disparate data sources into `:hall`,
28and so on. There are lots of things a distributed message protocol can
29be used for that we haven't even thought of.
31Here we'll be discussing how to operate the default CLI frontend, `:talk`,
32to send and receive messages. For a more in-depth look at `:hall`'s
33internals, take a look at its [documentation](#TODO).
35</div>
37</div>
39## Quickstart
41For the most part we use `:talk` as a single-instance of Slack: one main
42channel (`/urbit-meta`) and direct messages. Everyone is more than welcome
43in `/urbit-meta`. It's the place to get help, ask questions and chat about
44Urbit in general.
46Let's join `/urbit-meta`:
48Use `ctrl-x` to switch from `:dojo` to `:talk`.
50To join `/urbit-meta`:
52 ~your-urbit:talk[] ;join /urbit-meta
54You'll see:
56 --------------| ;join /urbit-meta
57 --------------| new glyph '>'
58 ~your-urbit:talk>
60Post a line to `/urbit-meta`:
62 ~your-urbit:talk> hello, world
64You'll see, echoed back at you:
66 ~your-urbit> hello, world
68To send a direct message to someone, first set your audience:
70 ~your-urbit:talk> ;~talsur-todres
72You'll see your prompt change:
74 ~your-urbit:talk[~talsur-todres]
76Now you and `~talsur-todres` can exchange messages directly.
78To set your audience back to `/urbit-meta`:
80 ~your-urbit:talk> ;/urbit-meta
82Use `;leave` to unsubscribe from a channel:
84 ~your-urbit:talk> ;leave /urbit-meta
86There are two ways of using `:talk`: from the CLI or through a web ui
87available at `http://your-urbit.urbit.org/talk` (or
88`http://localhost:8080/talk`).
90The web ui ships as compiled JavaScript on your Urbit, but has its own
91source repo [here](https://github.com/urbit/talk).
93Last, let's create a channel we can invite some friends to:
95 ~your-urbit:talk> ;create channel %my-channel 'some description'
97Now you can tell your friends to `;join ~your-urbit/my-channel`.
99## Manual
101`:hall`'s design is similar in spirit to
102[nntp](https://en.wikipedia.org/wiki/Network_News_Transfer_Protocol),
103the underlying protocol for Usenet.
105Our design is pretty simple: `:hall` messages go to ‘circles’. Any urbit
106can host or subscribe to any number of circles.
108There are four kinds of circles: a write-only `%mailbox` for direct
109messages, an invite-only `%village` for private conversation, a read-only
110`%journal` for curated content, and a public-access `%channel` for
111general use.
113### Posts
115A post can be a variety of different data structures. Let's look at the
116ones you can use from within `:talk`: lines, URLs, expressions and
117replies.
119#### Lines
121A line is simply a string of text. Depending on the filtering rules set
122by the circle's host, these may or may not include uppercase and Unicode
123characters.
124If the line starts with `@`, it's an action (IRC `/me`).
126 ~your-urbit:talk> @sends a message
128will print as
130 ~your-urbit sends a message
132#### URLs
134A URL is any valid URL.
136 ~your-urbit:talk> http://example.com/
138### Expressions
140Expressions can be used to show and evaluate Hoon code. Send an expression
141by prefacing your message with `#`.
143 ~your-urbit:talk> #(add 1 2)
145will print as
147 ~your-urbit# (add 1 2)
148 3
150### Replies
152To indicate what you're saying is in direct response to a specific
153message, select the message (see Activating Lines below) and type your
154response.
156 ~some-urbit> hello! how are you?
157 ~your-urbit:talk> ; good, thanks!
159will print as
161 ~your-urbit>^ good, thanks!
163### Activating Lines
165A line number identifying the *subsequent* line is displayed every 5
166lines.
168 ---------[0]
169 ~your-urbit> this is my message
170 ~your-urbit> this is another message
171 ~your-urbit sends a message
172 ~your-urbit/ http://example.com/
173 ~your-urbit# (add 1 2)
174 3
175 ---------[5]
176 ~your-urbit>^ that's my message!
178You can use a line number to *activate* a line:
180 ~your-urbit:talk> ;5
182which prints the number, line identifier, timestamp, sender, audience,
183and contents:
185 ? 0
186 0v3.hl51p.jhege.amhec.vb37r.3rejr at ~2016.6.24..04.48.21..a235
187 ~your-urbit to ~another-urbit
188 in reply to: ~your-urbit:
189 > this is my message
190 that's my message!
192If information got truncated — like happens for long URLs or expressions —
193or if there's additional information available — as is the case with
194replies and attachments — activating the message will show you all the
195details.
197You can activate the most recent line with `;`, the second-most recent
198with `;;`, and so on.
200### Creating and managing circles
202`;create [type] %name 'description'`
203Creates and joins a circle, where `[type]` is any of the following:
204- `channel`: public circle. Has a blacklist for write control.
205- `village`: invite-only circle.
206- `journal`: publicly readable, invite-only for writing.
207- `mailbox`: publicly writeable, can only be read by its host.
209`;delete %name 'optional reason'`
210Deletes a circle. If a reason is specified, that gets sent to all
211subscribers before the circle gets deleted.
213`;depict %name 'description'`
214Changes the description of circle `%name`.
216`;filter %name [capitals] [unicode]`
217Configures the message filter for circle `%name`: whether to allow
218capital and/or unicode characters. `y`/`&`/`true` for allowed,
219`n`/`|`/`false` for disallowed.
221`;invite %name ~someone`
222Invite someone into your circle `%name`. If they were previously banished,
223removes them from the blacklist.
224Can also invite multiple ships at once, `~comma, ~separated`.
226`;banish %name ~someone`
227Banish someone from your circle `%name`. If they were previously invited,
228removes them from the whitelist.
229Can also banish multiple ships at once, `~comma, ~separated`.
231`;source %name ~other/circle`
232Adds `~other/circle` as a source for circle `%name`. This causes all
233messages sent to `~other/circle` to also appear in `%name`.
235`;unsource %name ~other/circle`
236Removes `~other/circle` as a source for circle `%name`.
238### Membership
240If you have joined a circle, you can make this information publicly
241publicly available to help others find that circle as well.
243`;show ~some/circle`
244Adds a circle to your public membership list.
246`;hide ~some/circle`
247Removes a circle from your public membership list.
249### Presence
251You'll see presence notifications when people enter or leave stations
252you're subscribed to.
254`;set quiet`
255Turn off presence notifications
257`;unset quiet`
258Turn on presence notifications
260`;who`
261List everyone in all your subscribed circles. Optionally specify a
262specific circle to list members of just those.
264`;attend ~some/circle [presence]`
265Manually set your presence to show up as one of the following. (In the
266future, a sufficiently advanced client can automatically set these for
267you.)
268- `talk` - typing
269- `hear` - listening
270- `idle` - inactive
271- `gone` - not present
273`;name ~some/circle 'my nickname'`
274Set a nickname for yourself in a specific circle. It will display to users
275who have done `;set nick`.
277### Audience
279An audience consists of one or more messaging targets. These can be
280circles or ships. (In the latter case, it's secretly the `~ship/inbox`
281circle.)
283### Circle glyphs
285Glyphs are assigned by circle hash out of the following list
287 > = + - } ) , . " ' ^ $ % & @
289Alphanumeric characters and `|#;:*~_` are reserved; all others (the
290above list, and `\/!?({<`) can be manually assigned.
292`;bind + /urbit-test`
293Assigns the `+` glyph to `/urbit-test`.
295`;unbind + /urbit-test`
296Unassigns the `+` glyph from `/urbit-test`.
298To see what circle is bound to a glyph:
300 ;what +
301 /urbit-test
303### Prefixes
305Received posts are prefixed with a glyph to let you know what the
306audience is. You can activate an individual post to see the full
307audience.
308There are a few special-purpose glyphs.
310- `|` - Informational messages
311- `:` - Posts directly to you
312- `;` - Posts to you and others (a multiparty conversation)
313- `*` - Posts to a complex audience that doesn't directly include you.
315#### Prompt
317The audience you're sending to is always shown in your prompt. If
318there's a glyph for it, it's shown as the glyph.
320Here we're talking to the station bound to `=`:
322 ~your-urbit:talk=
324Here we're talking directly to `~dannum-mitryl`:
326 ~your-urbit:talk[~dannum-mitryl]
328#### Configuration
330`;~urbit/station`
331Set audience to `~urbit/station`.
333`;=`
334Set audience to the station bound to the `=` glyph.
336`;~dannum-mitryl`
337Set audience to `~dannum-mitryl` (a direct post).
339`;%station`
340Set audience to a station on your own ship.
342`;~dannum-mitryl this is a private message`
343Set the audience and send a post to it. This works for all of the above.
345Your audience is configured 'implicitly' with regard to the following
346rules (in order):
348- if you manually locked the audience, that audience.
349- if typing a post, the audience when you started typing.
350- if you activated a post, the post you activated.
351- audience of the last post received.
352- audience of the last post sent.
354Clear any 'implicit' audience setting by moving your cursor to the start
355of the line and pressing backspace (whether the line is empty or not).
356Posting a line clears the typing and activation configurations.
358### Local nicknames
360`;nick`
361List all local nicknames.
363`;nick ~your-urbit`
364Look up a nickname.
366`;nick plato`
367Search in reverse.
369`;nick ~your-urbit plato`
370Create a nickname.
372`;nick ~your-urbit ~`
373Clear an assigned nickname.
375`;set nicks`
376Show nicknames instead of urbit names. If no local nickname is set, uses
377that user's self-set name.
379`;unset nicks`
380Show urbit names instead of nicknames.
382Nicknames longer than 14 character will be truncated in output. Nicknames
383are strictly local - like the names on entries in a phonebook.
385### Miscellaneous configuration
387`;set showtime`
388Show the timestamp for each message.
390`;unset showtime`
391Stop showing the timestamp for each message.
393`;set notify`
394Emit a terminal bell sound if your six-syllable ship name is mentioned in
395a message.
397`;unset notify`
398Do not notify when your ship name is mentioned.
400`;set width [number]`
401Set the rendering width of `:talk` to a specific number of characters.
402(Minimum of 30.)