on master help sign in
Merge branch 'master' of github.com:urbit/docs
0407872Tobias Merkle
docs.md+38−12
@@ -1,7 +1,7 @@
1---
1---
2anchor: none
2anchor: none
3footer: true
3footer: true
4−title: Develop
4+title: Documentation
5sort: 4
5sort: 4
6---
6---
7
7
@@ -10,21 +10,47 @@ sort: 4
10 <h1 class="blue i-b">Urbit docs</h1>
10 <h1 class="blue i-b">Urbit docs</h1>
11</div>
11</div>
12
12
13−Go to the [technical overview](about/overview) for a high-level
13+<div class="col-md-12 head">
14−architecture description. To install and run Urbit, read forward from the
15−[installation guide](using/install).
16
14
15+<div class="col-md-8">
16+
17+Check out the [technical overview](about/overview) for a high-level
18+architecture description. To install and run Urbit, head to the Using section, starting with the [installation guide](using/install) and continuing forward.
19+
17−To begin developing for Urbit, start by learning Hoon [syntax](hoon/syntax),
20+To begin developing for Urbit, start by learning Hoon [syntax](hoon/syntax),
18−then walk through the [Arvo tutorials](arvo). The examples and exercises
21+then walk through the [Arvo tutorials](arvo). The examples and exercises
19−in Arvo will teach you to build high-level programs and interact with the network.
22+in Arvo will teach you to build high-level programs and interact with the network.
20
23
21Dig into the mechanics of Urbit with [Core Hoon](hoon). Refer back
24Dig into the mechanics of Urbit with [Core Hoon](hoon). Refer back
22−there for pure-code exercises and functions in the [standard library](hoon/library).
25+there for pure-code exercises and functions in the [standard library](hoon/library).
26+
27+Registered academics are required to start with the [Nock definition](nock/definition) and work upward from there.
28+
29+</div>
30+
31+<div class="col-md-4">
23
32
24−Registered academics are required to start with the [Nock definition](nock/definition)
33+<b>Source on GitHub</b>
25−and work upward from there.
34+<ul>
26−<br/>
35+<li><a href="https://github.com/urbit/urbit">Main repo</a></li>
27−<br/>
36+<li><a href="https://github.com/urbit/examples">Examples</a></li>
37+<li><a href="https://github.com/urbit/docs">Documentation</a></li>
38+</ul>
39+
40+<br />
41+
42+<b>Community / contact</b>
43+<ul>
44+<li>We use <code>:talk</code> on Urbit to chat.</li>
45+<li><a href="https://reddit.com/r/urbit">/r/urbit on Reddit</a></li>
46+<li><a href="https://twitter.com/urbit_">@urbit_ on Twitter</a></li>
47+<li><a href="https://groups.google.com/forum/#!forum/urbit-dev">urbit-dev mailing list</a></li>
48+<li><a href="mailto:urbit@urbit.org">urbit@urbit.org</a></li>
49+</ul>
50+
51+</div>
52+
53+</div>
28
54
29<div class="sections">
55<div class="sections">
30 <kids grid="true"></kids>
56 <kids grid="true"></kids>
docs/arvo.md+6−2
@@ -1,8 +1,12 @@
1---
1---
2navhome: /docs
2navhome: /docs
3−sort: 4
3+sort: 3
4---
4---
5
5
6−# Arvo
6+# Arvo programming
7+
8+This example-based sequence of tutorials shows you how to build simple programs in hoon and use the basic features of Arvo.
9+
10+If you like to learn by example, start here.
7
11
8<list/>
12<list/>
docs/arvo/basic.md+2−2
@@ -23,8 +23,8 @@ To run this code, you'll need an urbit, and will have to copy the
23[examples repo](https://github.com/urbit/examples) into it.
23[examples repo](https://github.com/urbit/examples) into it.
24
24
25If you haven't installed urbit yet, check out the [installation
25If you haven't installed urbit yet, check out the [installation
26−instructions](/docs/user/install). Once urbit is installed, take a look
26+instructions](/docs/using/install). Once urbit is installed, take a look
27−at the [basic operation](/docs/user/basic) of your urbit.
27+at the [basic operation](/docs/using/admin) of your urbit.
28
28
29If you haven't copied in the examples repo, running the following
29If you haven't copied in the examples repo, running the following
30commands from your urbit directory should do the trick:
30commands from your urbit directory should do the trick:
docs/arvo/generators.md+1−1
@@ -15,7 +15,7 @@ the "plumbing" way to interact with apps. Generators are the
15`|merge`, there are no marks in sight.
15`|merge`, there are no marks in sight.
16
16
17We've used generators before, back in [Basic
17We've used generators before, back in [Basic
18−Operation](/docs/user/basic). At that point, we just used the generators
18+Operation](/docs/using/admin). At that point, we just used the generators
19to produce values -- we didn't pipe their results into apps. In
19to produce values -- we didn't pipe their results into apps. In
20the dojo cast, the role of a generator is to take a list of
20the dojo cast, the role of a generator is to take a list of
21arguments and produce a value, which is often, though not always,
21arguments and produce a value, which is often, though not always,
docs/arvo/subject.md+1−1
@@ -93,7 +93,7 @@ Cheatsheet:
93
93
94- To pass arguments from the command line to a program, you replace
94- To pass arguments from the command line to a program, you replace
95 the `*` in the first line of the boiler plate to
95 the `*` in the first line of the boiler plate to
96− `{^ {{arg/TYPE ~} ~}}` where `TYPE` is replaced with the type of
96+ `{^ {{arg/TYPE $~} $~}}` where `TYPE` is replaced with the type of
97 argument you're expecting. Then `+euler1 a` from the dojo sets `arg`
97 argument you're expecting. Then `+euler1 a` from the dojo sets `arg`
98 to `a`.
98 to `a`.
99- The empty list is `~`
99- The empty list is `~`
docs/hoon.md+6−2
@@ -1,8 +1,12 @@
1---
1---
2navhome: /docs
2navhome: /docs
3−sort: 3
3+sort: 4
4---
4---
5
5
6−# Hoon
6+# Hoon reference
7+
8+This in-depth reference covers all the features of Hoon.
9+
10+If you prefer to learn from the bottom up, feel free to start here.
7
11
8<list/>
12<list/>
docs/hoon/advanced.md+1−1
@@ -186,7 +186,7 @@ limb, we just search the span depth-first.
186If a name is in the `p.p` map, it's an alias. The map contains a
186If a name is in the `p.p` map, it's an alias. The map contains a
187`(unit twig)`; if the unit is full, the name resolves to that
187`(unit twig)`; if the unit is full, the name resolves to that
188twig (compiled against the `q` span). If the unit is empty,
188twig (compiled against the `q` span). If the unit is empty,
189−the name is blocked / skipped (see [limb](twig/limb) for what
189+the name is blocked / skipped (see [limb](../twig/limb) for what
190this means).
190this means).
191
191
192If a name is in the `q.p` map, it's a bridge. When we search for
192If a name is in the `q.p` map, it's a bridge. When we search for
docs/hoon/exercises/data-structures.md+1−1
@@ -26,7 +26,7 @@ exercises, you'll need to refer to the [library reference for
26 `'javacript'`, `'python'`.
26 `'javacript'`, `'python'`.
27
27
281. At the dojo, take the union of `s` and `l`. Delete
281. At the dojo, take the union of `s` and `l`. Delete
29− `'javascript'` from the result, and add `'coffescript'`.
29+ `'javascript'` from the result, and add `'coffeescript'`.
30
30
311. Create an alphabetized list of the members of the set created
311. Create an alphabetized list of the members of the set created
32 in the previous exercise.
32 in the previous exercise.
docs/hoon/library/2b.md+1−1
@@ -667,7 +667,7 @@ sorted according to `b`.
667Accepts
667Accepts
668-------
668-------
669
669
670−`b` is a gate that ccepts two nouns and produces a boolean.
670+`b` is a gate that accepts two nouns and produces a boolean.
671
671
672Produces
672Produces
673--------
673--------
docs/hoon/library/2q.md+2−2
@@ -147,9 +147,9 @@ Source
147Examples
147Examples
148--------
148--------
149
149
150− > `(list ,char)`"foobar"
150+ > `(list char)`"foobar"
151 "foobar"
151 "foobar"
152− > `(list ,@)`"foobar"
152+ > `(list @)`"foobar"
153 ~[102 111 111 98 97 114]
153 ~[102 111 111 98 97 114]
154
154
155
155
docs/hoon/reference.md+4
@@ -10,6 +10,10 @@ title: Twig reference
10
10
11<div class="book">
11<div class="book">
12
12
13+### [Atoms and strings](../twig/atom)
14+
15+### [Limbs and wings](../twig/limb)
16+
13## `$ buc` (mold)
17## `$ buc` (mold)
14
18
15<list src="../twig/buc-mold" dataPreview="true" className="runes" childIsFragment="true"></list>
19<list src="../twig/buc-mold" dataPreview="true" className="runes" childIsFragment="true"></list>
docs/hoon/twig/wut-test/gar-sure.md+1−1
@@ -3,7 +3,7 @@ navhome: /docs
3sort: 11
3sort: 11
4---
4---
5
5
6−# `:sure ?< "wutgar"`
6+# `:sure ?> "wutgar"`
7
7
8`{$sure p/seed q/seed}`: positive assertion.
8`{$sure p/seed q/seed}`: positive assertion.
9
9
docs/hoon/twig/zap-wild/gar-wrap.md+1−1
@@ -24,5 +24,5 @@ span-noun cell is generally called a `vase`.
24
24
25```
25```
26~zod:dojo> !>(1)
26~zod:dojo> !>(1)
27−[#t/@ud q=1]
27+[p=#t/@ud q=1]
28```
28```
docs/nock.md+4
@@ -6,4 +6,8 @@ title: Nock
6
6
7# Nock
7# Nock
8
8
9+Nock is our nano-VM. If you're into combinators or want to understand the foundation of Urbit, dive in.
10+
11+Building a Nock interpreter is a fun exercise, as you can see in the [implementations](nock/implementations)
12+
9<list/>
13<list/>
docs/using.md+4
@@ -5,4 +5,8 @@ sort: 2
5
5
6# Using
6# Using
7
7
8+These short guides will get you installed, setup, and walk you through the basic features of Urbit. Each section has a quickstart at the top that covers the basics.
9+
10+The sections do build on eachother, so it's a good idea to at least skim them in order.
11+
8<list/>
12<list/>
docs/using/layout.md+1−1
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs
2navhome: /docs
3−sort: 8
3+sort: 9
4title: Source layout
4title: Source layout
5---
5---
6
6
docs/using/messaging.md+4
@@ -60,6 +60,10 @@ To set your audience back to `/urbit-meta`:
60
60
61 ~your-urbit:talk> ;~doznec/urbit-meta
61 ~your-urbit:talk> ;~doznec/urbit-meta
62
62
63+Use `;leave` to unsubscribe from a channel:
64+
65+ ~your-urbit:talk> ;leave ~doznec/urbit-meta
66+
63There are two ways of using `:talk`: from the CLI or through a web ui available at `http://your-urbit.urbit.org/talk` (or `http://localhost:8080/talk`).
67There are two ways of using `:talk`: from the CLI or through a web ui available at `http://your-urbit.urbit.org/talk` (or `http://localhost:8080/talk`).
64
68
65The web ui ships as compiled JavaScript on your Urbit, but has its own source repo [here](https://github.com/urbit/talk).
69The web ui ships as compiled JavaScript on your Urbit, but has its own source repo [here](https://github.com/urbit/talk).
docs/using/urb.mdnew file+356
@@ -0,0 +1,356 @@
1+---
2+navhome: /docs
3+sort: 8
4+title: From Unix
5+---
6+
7+<div class="row">
8+<div class="col-md-8">
9+
10+# Using Urbit from Unix
11+
12+With `urb` at your Unix command line, you can execute hoon, run
13+dojo commands, and more. Additionally, with `fuse`, you can
14+inspect the urbit namespace.
15+
16+</div>
17+</div>
18+
19+## Installation
20+
21+These commands are in the a [separate
22+repo](https://github.com/urbit/urb). Clone this repo to get the
23+commands.
24+
25+You'll also need the `requests` and `fuse` libraries for python.
26+If you have `pip`, you can just run:
27+
28+```
29+pip install requests fuse-python
30+```
31+
32+Otherwise, on Ubuntu, run:
33+
34+```
35+apt-get install python-requests python-fuse
36+```
37+
38+Then you can either run the python commands from the git repo, or
39+put them somewhere in your path.
40+
41+## `urb`
42+
43+`urb` transfers data from a source to a sink. Examples of data
44+sources include literal data, a file, a URL, or some
45+tranformation of another source. Examples of data sinks are
46+stdout, output file, POST request, or dojo command.
47+
48+Here are some examples. This takes the literal data "hello
49+world" and sends it to stdout (the default sink).
50+
51+ urb --data 'hello world'
52+
53+Let's run some hoon code at the dojo.
54+
55+ urb --dojo '(add 2 2)'
56+
57+Let's convert a markdown file to html.
58+
59+ urb --data @@file.md -m md -m html
60+
61+Mount the `%home` desk. This syncs the `home` desk into the pier
62+directory.
63+
64+ urb --dojo '+hood/mount /=home=' --app hood
65+
66+### Sources
67+
68+Sources can be any of the following:
69+
70+- `-d, --dojo command` runs a dojo command. This is commonly
71+ naked hoon code, but it can also be a generator, or any of the
72+ other ways the dojo gets data.
73+
74+- `-D, --data text` is literal text data, as a cord.
75+
76+- `-c, --clay path` pulls data from Urbit's filesystem.
77+
78+- `-u, --url url` pulls data from a URL.
79+
80+- `-m, --mark mark source` converts the output from another source to
81+ a new 'mark' (datatype).
82+
83+- `-H, --hoon code source` transforms the output of another
84+ source by running it through some hoon code.
85+
86+- `[source-0 source-1 ...]`. Sources can be combined into tuples
87+ of different sources.
88+
89+Any of the arguments to a source (except in the "compound
90+sources" `--mark` and `--hoon`) can be replaced by `-` to
91+represent stdin or `@@filename` to pull data in from a Unix file.
92+Thus, `urb [-D @@file1 -D - -D @@file2]` is equivalent to Unix's
93+`cat file1 - file2`.
94+
95+Additionally, if no source is specified, `--data -` (stdin as
96+literal text data) is assumed.
97+
98+### Sinks
99+
100+- `-s, --stdout` outputs to stdout. This is the default.
101+
102+- `-f, --output-file path` writes to a unix file.
103+
104+- `-C, --output-clay path` writes to Urbit's filesystem.
105+
106+- `-U, --output-url url` sends a POST request with the data to
107+ the URL.
108+
109+- `-p, --app app` sends the data to an urbit app.
110+
111+- `-x, --command` outputs to a literal dojo command.
112+
113+## `fuse`
114+
115+Urbit's namespace is accessible through the `fuse` command.
116+`fuse` takes all the normal FUSE arguments, which you can see
117+with `fuse -h`. Generally, you just run `fuse MOUNT-POINT`.
118+
119+When accessing the namespace through `fuse`, everything is
120+read-only. If you want to write to Clay, mount a desk, as
121+described above.
122+
123+Let's look first in the Clay portion of the Urbit namespace.
124+Assume we've mounted to `./pt`.
125+
126+ $ ls ./pt/c/=/=/=
127+ app arvo gen lib mar ren sec sur web
128+ $ ls ./pt/c/=/=/=/arvo
129+ ames behn clay dill eyre ford gall hoon zuse
130+
131+Those `=`s aren't decorative. The first `=` means "current
132+ship", the second "current desk", and the third "current
133+revision". Let's try something a little more exciting.
134+
135+This runs the Unix `diff` command on the first and current
136+versions of the `app/gh/hoon` file, showing all the changes we've
137+made to the file.
138+
139+```
140+$ diff pt/c/=/=/{1,=}/app/gh/hoon
141+73c73,75
142+< (malt (turn issues |=(issue:gh [(rsh 3 2 (scot %ui number)) ~])))
143+---
144+> %- malt ^- (list {@ta $~})
145+> :- [%gh-list-issues ~]
146+> (turn issues |=(issue:gh [(rsh 3 2 (scot %ui number)) ~]))
147+92c94,101
148+< read-y=(read-get /issues)
149+---
150+> read-y=(read-static %gh-list-issues ~)
151+> sigh-x=sigh-list-issues-x
152+> sigh-y=sigh-list-issues-y
153+> ==
154+> ^- place :: /issues/mine/<mark>
155+> :* guard={$issues $mine @t $~}
156+> read-x=read-null
157+> read-y=|=(pax/path [ost %diff %arch `0vsen.tinel ~])
158+126c135
159+< ^- place :: /issues/by-repo/<user>/<repo>
160+---
161+> ^- place :: /issues/by-repo/<user>/<repo>/<number>
162+131c140,146
163+< read-y=(read-static ~)
164+---
165+> ^= read-y
166+> |= pax/path
167+> %. pax
168+> ?: ((sane %tas) -.+>+>.pax)
169+> (read-static ~)
170+> (read-static %gh-issue ~)
171+> ::
172+137a153,159
173+> sigh-y=sigh-strange
174+> ==
175+> ^- place :: /issues/by-repo/<u>/<r>/<n>/<mark>
176+> :* guard={$issues $by-repo @t @t @t @t $~}
177+> read-x=read-null
178+> read-y=|=(pax/path [ost %diff %arch `0vsen.tinel ~])
179+> sigh-x=sigh-strange
180+```
181+
182+Urbit's namespace is not just revisioned, but global. Here's a
183+diff of our version of `arvo/gall/hoon` compared to the one on
184+the `~bud` urbit.
185+
186+```
187+$ diff pt/c/{~bud,=}/=/=/arvo/gall/hoon
188+2d1
189+<
190+640a640,644
191+> =+ ?. ?=($x ren)
192+> [mar=%$ tyl=tyl]
193+> =+ `path`(flop tyl)
194+> ?> ?=(^ -)
195+> [mar=i tyl=(flop t)]
196+643c647
197+< ((slog leaf+"peek find fail" >tyl< ~) [~ ~])
198+---
199+> ((slog leaf+"peek find fail" >tyl< >mar< ~) [~ ~])
200+654a659,660
201+> ?. =(mar p.q.caz)
202+> [~ ~]
203+1308a1315,1316
204+> ?. ?=(^ tyl)
205+> ~
206+```
207+
208+Besides Clay, the namespace contains Gall apps. One common usage
209+of the app namespace is to expose APIs. For example, if you
210+start the `%gh` app (`|start %gh`), you can do things like `cat`
211+an issue from a repository.
212+
213+```
214+$ cat pt/g/=/gh/=/issues/by-repo/philipcmonktest/testing/7/txt
215+title: big news! (#7)
216+state: open
217+creator: philipcmonktest
218+created-at: 2016-03-24T22:27:33Z
219+assignee: philipcmonktest
220+labels: invalid, wontfix, help wanted
221+comments: 0
222+url: https://api.github.com/repos/philipcmonktest/testing/issues/7
223+
224+Yup, that's it. i mean, maybe it's a bit longer than that.
225+
226+But you get the point, right?
227+
228+Code `is` cool!
229+```
230+
231+Or all open issues for a repository.
232+
233+```
234+$ cat pt/g/=/gh/=/issues/by-repo/philipcmonktest/testing/txt
235+title: i found a bug! (#11)
236+state: open
237+creator: philipcmonktest
238+created-at: 2016-04-14T23:14:49Z
239+assignee: none
240+labels:
241+comments: 1
242+url: https://api.github.com/repos/philipcmonktest/testing/issues/11
243+
244+
245+----------------------------------------
246+title: more newz (#8)
247+state: open
248+creator: philipcmonktest
249+created-at: 2016-03-24T22:29:16Z
250+assignee: none
251+labels:
252+comments: 4
253+url: https://api.github.com/repos/philipcmonktest/testing/issues/8
254+
255+Yup, that's it. i mean, maybe it's a bit longer than that.
256+
257+But you get the point, right?
258+
259+Code `is` cool!
260+----------------------------------------
261+title: big news! (#7)
262+state: open
263+creator: philipcmonktest
264+created-at: 2016-03-24T22:27:33Z
265+assignee: philipcmonktest
266+labels: invalid, wontfix, help wanted
267+comments: 0
268+url: https://api.github.com/repos/philipcmonktest/testing/issues/7
269+
270+Yup, that's it. i mean, maybe it's a bit longer than that.
271+
272+But you get the point, right?
273+
274+Code `is` cool!
275+----------------------------------------
276+title: something different (#4)
277+state: open
278+creator: philipcmonktest
279+created-at: 2016-01-26T21:45:08Z
280+assignee: philipcmonktest
281+labels: duplicate, help wanted, question, bug
282+comments: 1
283+url: https://api.github.com/repos/philipcmonktest/testing/issues/4
284+```
285+
286+Don't like the textual format? How about we get the raw JSON
287+(and prettyprint it).
288+
289+```
290+$ cat pt/g/=/gh/=/issues/by-repo/philipcmonktest/testing/7/json | python -m json.tool
291+{
292+ "assignee": {
293+ "avatar_url": "https://avatars.githubusercontent.com/u/16787461?v=3",
294+ "events_url": "https://api.github.com/users/philipcmonktest/events{/privacy}",
295+ "followers_url": "https://api.github.com/users/philipcmonktest/followers",
296+ "following_url": "https://api.github.com/users/philipcmonktest/following{/other_user}",
297+ "gists_url": "https://api.github.com/users/philipcmonktest/gists{/gist_id}",
298+ "gravatar_id": "",
299+ "html_url": "https://github.com/philipcmonktest",
300+ "id": 16787461,
301+ "login": "philipcmonktest",
302+ "organizations_url": "https://api.github.com/users/philipcmonktest/orgs",
303+ "received_events_url": "https://api.github.com/users/philipcmonktest/received_events",
304+ "repos_url": "https://api.github.com/users/philipcmonktest/repos",
305+ "site_admin": false,
306+ "starred_url": "https://api.github.com/users/philipcmonktest/starred{/owner}{/repo}",
307+ "subscriptions_url": "https://api.github.com/users/philipcmonktest/subscriptions",
308+ "type": "User",
309+ "url": "https://api.github.com/users/philipcmonktest"
310+ },
311+ "body": "Yup, that's it. i mean, maybe it's a bit longer than that.\r\n\r\nBut you get the point, right?\r\n\r\nCode `is` cool!",
312+ "closed_at": null,
313+ "closed_by": null,
314+ "comments": 0,
315+ "comments_url": "https://api.github.com/repos/philipcmonktest/testing/issues/7/comments",
316+ "created_at": "2016-03-24T22:27:33Z",
317+ "events_url": "https://api.github.com/repos/philipcmonktest/testing/issues/7/events",
318+ "html_url": "https://github.com/philipcmonktest/testing/issues/7",
319+ "id": 143377108,
320+ "labels": [
321+ {
322+ "color": "ffffff",
323+ "name": "wontfix",
324+ "url": "https://api.github.com/repos/philipcmonktest/testing/labels/wontfix"
325+ }
326+ ],
327+ "labels_url": "https://api.github.com/repos/philipcmonktest/testing/issues/7/labels{/name}",
328+ "locked": false,
329+ "milestone": null,
330+ "number": 7,
331+ "repository_url": "https://api.github.com/repos/philipcmonktest/testing",
332+ "state": "open",
333+ "title": "big news!",
334+ "updated_at": "2016-03-24T22:27:33Z",
335+ "url": "https://api.github.com/repos/philipcmonktest/testing/issues/7",
336+ "user": {
337+ "avatar_url": "https://avatars.githubusercontent.com/u/16787461?v=3",
338+ "events_url": "https://api.github.com/users/philipcmonktest/events{/privacy}",
339+ "followers_url": "https://api.github.com/users/philipcmonktest/followers",
340+ "following_url": "https://api.github.com/users/philipcmonktest/following{/other_user}",
341+ "gists_url": "https://api.github.com/users/philipcmonktest/gists{/gist_id}",
342+ "gravatar_id": "",
343+ "html_url": "https://github.com/philipcmonktest",
344+ "id": 16787461,
345+ "login": "philipcmonktest",
346+ "organizations_url": "https://api.github.com/users/philipcmonktest/orgs",
347+ "received_events_url": "https://api.github.com/users/philipcmonktest/received_events",
348+ "repos_url": "https://api.github.com/users/philipcmonktest/repos",
349+ "site_admin": false,
350+ "starred_url": "https://api.github.com/users/philipcmonktest/starred{/owner}{/repo}",
351+ "subscriptions_url": "https://api.github.com/users/philipcmonktest/subscriptions",
352+ "type": "User",
353+ "url": "https://api.github.com/users/philipcmonktest"
354+ }
355+}
356+```
docs/using/web.md+4−2
@@ -25,8 +25,10 @@ We ship `tree` as compiled JavaScript on your Urbit, but the source lives in its
25
25
26Your Urbit runs a web server and can be found at either `http://localhost:8080/` (or `8081` if you're running other processes that might be occupying `8080`, you can determine which port your urbit is on by looking at your boot sequence — it's specified there), or `http://your-urbit.urbit.org/`.
26Your Urbit runs a web server and can be found at either `http://localhost:8080/` (or `8081` if you're running other processes that might be occupying `8080`, you can determine which port your urbit is on by looking at your boot sequence — it's specified there), or `http://your-urbit.urbit.org/`.
27
27
28+<span class="red">
28(Make sure you have a desk mounted to unix, as covered in the
29(Make sure you have a desk mounted to unix, as covered in the
29[filesystem walkthrough](/docs/using/filesystem)).
30[filesystem walkthrough](/docs/using/filesystem)).
31+</span>
30
32
31To switch the desk you're serving from:
33To switch the desk you're serving from:
32
34
@@ -38,7 +40,7 @@ To host a file on the web try putting the following in `/home/web/test.md` (from
38
40
39 This is a simple markdown file.
41 This is a simple markdown file.
40
42
41−Create the directory `/home/web/test/` and add two more markdown files in it.
43+Create the directory `/home/web/test/` and add two more markdown files in it.
42
44
43Now modify `/home/web/test.md` to list the children using the `<list/>` JSX:
45Now modify `/home/web/test.md` to list the children using the `<list/>` JSX:
44
46
@@ -56,7 +58,7 @@ To view your file as raw `html`:
56
58
57 http://localhost:8080/test.html
59 http://localhost:8080/test.html
58
60
59−You may have noticed that we just created both `test.md` and `test/`. In Urbit, there is no distinction between a directory and a file. So, if you're adding files directly from unix, simply `mkdir test` and Urbit will treat the file and directory as the same entity.
61+You may have noticed that we just created both `test.md` and `test/`. In Urbit, there is no distinction between a directory and a file. So, if you're adding files directly from unix, simply `mkdir test` and Urbit will treat the file and directory as the same entity.
60
62
61You can use this feature to change your homepage at `your-urbit.urbit.org` with the page `/home/web.md`, where `home` is the current mounted desk. By default, `web.md` will display some info about your urbit, but you can customize it to your heart's content.
63You can use this feature to change your homepage at `your-urbit.urbit.org` with the page `/home/web.md`, where `home` is the current mounted desk. By default, `web.md` will display some info about your urbit, but you can customize it to your heart's content.
62
64