on 79d535c help sign in
urbit.org/docs/using/messaging.md
400 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
241available 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### Status
251You'll see status notifications when people enter or leave stations
252you're subscribed to.
254`;set quiet`
255Turn off status (and config) notifications.
257`;unset quiet`
258Turn on status (and config) 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 handle'`
274Set a handle ("name") for yourself in a specific circle. It will display
275to users who have done `;set nick`, but gets truncated if it's longer
276than 14 characters.
278### Audience
280An audience consists of one or more messaging targets. These can be
281circles or ships. (In the latter case, it's secretly the `~ship/inbox`
282circle.)
284### Circle glyphs
286Glyphs are assigned by circle hash out of the following list
288 > = + - } ) , . " ' ^ $ % & @
290Alphanumeric characters and `|#;:*~_` are reserved; all others (the
291above list, and `\/!?({<`) can be manually assigned.
293`;bind + /urbit-test`
294Assigns the `+` glyph to `/urbit-test`.
296`;unbind + /urbit-test`
297Unassigns the `+` glyph from `/urbit-test`.
299To see what circle is bound to a glyph:
301 ;what +
302 /urbit-test
304### Prefixes
306Received posts are prefixed with a glyph to let you know what the
307audience is. You can activate an individual post to see the full
308audience.
309There are a few special-purpose glyphs.
311- `|` - Informational messages
312- `:` - Posts directly to you
313- `;` - Posts to you and others (a multiparty conversation)
314- `*` - Posts to a complex audience that doesn't directly include you.
316#### Prompt
318The audience you're sending to is always shown in your prompt. If
319there's a glyph for it, it's shown as the glyph.
321Here we're talking to the station bound to `=`:
323 ~your-urbit:talk=
325Here we're talking directly to `~dannum-mitryl`:
327 ~your-urbit:talk[~dannum-mitryl]
329#### Configuration
331`;~urbit/station`
332Set audience to `~urbit/station`.
334`;=`
335Set audience to the station bound to the `=` glyph.
337`;~dannum-mitryl`
338Set audience to `~dannum-mitryl` (a direct post).
340`;%station`
341Set audience to a station on your own ship.
343`;~dannum-mitryl this is a private message`
344Set the audience and send a post to it. This works for all of the above.
346Your audience is configured with regard to the following rules (in order):
348- if you manually set the audience, that audience.
349- if you activated a post, the post you activated.
350- audience of the last post sent.
352### Local nicknames
354`;nick`
355List all local nicknames.
357`;nick ~some-urbit`
358Look up a nickname.
360`;nick plato`
361Search in reverse.
363`;nick ~some-urbit plato`
364Create a nickname.
366`;nick ~some-urbit ~`
367Clear an assigned nickname.
369`;set nicks`
370Show nicknames instead of urbit names. If no local nickname is set, uses
371that user's handle. If the user has no handle, just the urbit name.
373`;unset nicks`
374Show urbit names instead of nicknames.
376Nicknames and handles longer than 14 character will be truncated in
377output. Nicknames are strictly local - like the names on entries in a
378phonebook.
380### Miscellaneous configuration
382`;set showtime`
383Show the timestamp for each message.
385`;unset showtime`
386Stop showing the timestamp for each message.
388`;set timezone [+/-][hours]`
389Adjust the display of the timestamps to a specific timezone. Relative to UTC.
391`;set notify`
392Emit a terminal bell sound if your six-syllable ship name is mentioned in
393a message.
395`;unset notify`
396Do not notify when your ship name is mentioned.
398`;set width [number]`
399Set the rendering width of `:talk` to a specific number of characters.
400(Minimum of 30.)