on master help sign in
Merge pull request #328 from urbit/morgan-edits

Morgan edits

commit77e16a7b073dfabfddce7bc90a5950609e2113b3 authorAnthony Arroyo <anthony@tlon.io> dateMon 14 Jan 2019, 14:56 (8 years ago) parent8251e6a58e93b0
110 files changed+619−648
getting-started.udon+380−4 getting-started/azimuth.udon−1 getting-started/azimuth/managing.udon−6 getting-started/azimuth/using-bridge.udon−6 getting-started/installation.udon−386 getting-started/landscape.udon+1−3 introduction.udon+3−4 introduction/arvo-vs-azimuth.udon+5−20 introduction/community.udon → introduction/community-tutorials.udon+4−2 introduction/contributing.udon+4−4 introduction/source.udon → introduction/source-code-overview.udon+8−24 introduction/overview.udon → introduction/technical-overview.udon learn.udon+8−1 learn/arvo.udon+13−136 learn/arvo/arvo internals.udon+147 learn/arvo/admin.udon → learn/arvo/arvo internals/admin.udon learn/arvo/ames.udon → learn/arvo/arvo internals/ames.udon learn/arvo/ames/commentary.udon → learn/arvo/arvo internals/ames/commentary.udon learn/arvo/behn.udon → learn/arvo/arvo internals/behn.udon learn/arvo/clay.udon → learn/arvo/arvo internals/clay.udon learn/arvo/clay/architecture.udon → learn/arvo/arvo internals/clay/architecture.udon learn/arvo/clay/commentary.udon → learn/arvo/arvo internals/clay/commentary.udon learn/arvo/dill.udon → learn/arvo/arvo internals/dill.udon learn/arvo/eyre.udon → learn/arvo/arvo internals/eyre.udon learn/arvo/eyre/commentary.udon → learn/arvo/arvo internals/eyre/commentary.udon learn/arvo/eyre/specification.udon → learn/arvo/arvo internals/eyre/specification.udon learn/arvo/filesystem.udon → learn/arvo/arvo internals/filesystem.udon learn/arvo/ford.udon → learn/arvo/arvo internals/ford.udon learn/arvo/ford/runes.udon → learn/arvo/arvo internals/ford/runes.udon learn/arvo/gall.udon → learn/arvo/arvo internals/gall.udon learn/arvo/gall/api.udon → learn/arvo/arvo internals/gall/api.udon learn/arvo/gall/generators.udon → learn/arvo/arvo internals/gall/generators.udon learn/arvo/gall/http.udon → learn/arvo/arvo internals/gall/http.udon learn/arvo/gall/marks.udon → learn/arvo/arvo internals/gall/marks.udon learn/arvo/gall/network.udon → learn/arvo/arvo internals/gall/network.udon learn/arvo/gall/security-driver.udon → learn/arvo/arvo internals/gall/security-driver.udon learn/arvo/gall/state.udon → learn/arvo/arvo internals/gall/state.udon learn/arvo/gall/subscriptions.udon → learn/arvo/arvo internals/gall/subscriptions.udon learn/arvo/gall/web-apps.udon → learn/arvo/arvo internals/gall/web-apps.udon learn/arvo/generators.udon → learn/arvo/arvo internals/generators.udon learn/arvo/hall.udon → learn/arvo/arvo internals/hall.udon learn/arvo/hall/architecture.udon → learn/arvo/arvo internals/hall/architecture.udon learn/arvo/hall/interface.udon → learn/arvo/arvo internals/hall/interface.udon learn/arvo/hall/new-gall.udon → learn/arvo/arvo internals/hall/new-gall.udon learn/arvo/hall/new-gall/example.udon → learn/arvo/arvo internals/hall/new-gall/example.udon learn/arvo/hall/new-gall/spec.udon → learn/arvo/arvo internals/hall/new-gall/spec.udon learn/arvo/layout.udon → learn/arvo/arvo internals/layout.udon learn/arvo/messaging.udon → learn/arvo/arvo internals/messaging.udon+1−1 learn/arvo/publishing.udon → learn/arvo/arvo internals/publishing.udon learn/arvo/sail.udon → learn/arvo/arvo internals/sail.udon learn/arvo/shell.udon → learn/arvo/arvo internals/shell.udon learn/arvo/udon.udon → learn/arvo/arvo internals/udon.udon learn/arvo/udon/blog.udon → learn/arvo/arvo internals/udon/blog.udon learn/arvo/udon/comments.udon → learn/arvo/arvo internals/udon/comments.udon learn/arvo/udon/static.udon → learn/arvo/arvo internals/udon/static.udon learn/hoon.udon → learn/arvo/hoon.udon learn/hoon/hoon-ch1-4.udon → learn/arvo/hoon/arms-and-cores.udon+1−1 learn/hoon/hoon-ch2-4.udon → learn/arvo/hoon/atoms-auras-and-simple-cell-types.udon+1−1 learn/hoon/hoon-ch2-8.udon → learn/arvo/hoon/cores-again.udon+1−1 learn/hoon/hoon-ch2-7.udon → learn/arvo/hoon/cores.udon+1−1 learn/hoon/hoon-ch2-11.udon → learn/arvo/hoon/examples.udon+1−1 learn/hoon/hoon-ch1-5.udon → learn/arvo/hoon/gates.udon+1−1 learn/hoon/hoon-ch1-1.udon → learn/arvo/hoon/getting-started.udon+1−1 learn/hoon/hoon-ch2-1.udon → learn/arvo/hoon/hoon-programs.udon+1−1 learn/hoon/hoon-ch2-2.udon → learn/arvo/hoon/hoon-syntax.udon+1−1 learn/hoon/hoon-ch2-9.udon → learn/arvo/hoon/lists.udon+1−1 learn/hoon/hoon-ch1-6.udon → learn/arvo/hoon/multi-gate-cores-and-doors.udon+1−1 learn/hoon/hoon-ch1-2.udon → learn/arvo/hoon/nouns.udon+1−1 learn/hoon/hoon-ch2-3.udon → learn/arvo/hoon/simple-one-gate-programs.udon+1−1 learn/hoon/hoon-ch2-6.udon → learn/arvo/hoon/structures-and-complex-types.udon+1−1 learn/hoon/hoon-ch1-3.udon → learn/arvo/hoon/the-subject-and-its-legs.udon+1−1 learn/hoon/hoon-ch2-10.udon → learn/arvo/hoon/trees-sets-and-maps.udon+1−1 learn/hoon/hoon-ch2-5.udon → learn/arvo/hoon/type-checking-and-type-inference.udon+1−1 learn/hoon/hoon-ch3-1.udon → learn/arvo/hoon/type-polymorphism.udon+1−1 learn/nock.udon → learn/arvo/nock.udon+1−1 learn/nock/definition.udon → learn/arvo/nock/definition.udon learn/nock/example.udon → learn/arvo/nock/example.udon learn/nock/explanation.udon → learn/arvo/nock/explanation.udon learn/nock/implementations.udon → learn/arvo/nock/implementations.udon learn/nock/implementations/c.udon → learn/arvo/nock/implementations/c.udon learn/nock/implementations/clojure.udon → learn/arvo/nock/implementations/clojure.udon learn/nock/implementations/csharp.udon → learn/arvo/nock/implementations/csharp.udon learn/nock/implementations/groovy.udon → learn/arvo/nock/implementations/groovy.udon learn/nock/implementations/haskell.udon → learn/arvo/nock/implementations/haskell.udon learn/nock/implementations/hoon.udon → learn/arvo/nock/implementations/hoon.udon learn/nock/implementations/javascript.udon → learn/arvo/nock/implementations/javascript.udon learn/nock/implementations/python.udon → learn/arvo/nock/implementations/python.udon learn/nock/implementations/ruby.udon → learn/arvo/nock/implementations/ruby.udon learn/nock/implementations/scala.udon → learn/arvo/nock/implementations/scala.udon learn/nock/implementations/scheme.udon → learn/arvo/nock/implementations/scheme.udon learn/nock/implementations/swift.udon → learn/arvo/nock/implementations/swift.udon learn/vere.udon → learn/arvo/vere.udon+1−1 learn/vere/api.udon → learn/arvo/vere/api.udon learn/vere/c.udon → learn/arvo/vere/c.udon learn/vere/jetting.udon → learn/arvo/vere/jetting.udon learn/vere/nouns.udon → learn/arvo/vere/nouns.udon learn/vere/runtime.udon → learn/arvo/vere/runtime.udon learn/azimuth.udon+6−1 learn/azimuth/blockchain.udon+2−2 learn/azimuth/constitution.udon−7 learn/azimuth/wallet.udon+1 reference/cheat-sheet.udon+2−3 reference/glossary.udon+2−4 reference/hoon-expressions.udon+5−2 reference/hoon-expressions/irregular.udon−2 reference/library.udon+4−3 reference/library/1a.udon−1 reference/library/1c.udon−1 reference/library/4o.udon+1−1 reference/troubleshooting.udon+2−3
getting-started.udon+380−4
@@ -1,10 +1,386 @@
11:- :~ navhome/'/docs/'
2− sort/'2'
3− title/'Using'
2+ next/'true'
3+ sort/'1'
4+ title/'Getting Started'
45 ==
56;>
67
78# Getting Started
89
9−These short guides will get you installed, setup, and will walk you through the
10−basic features of Urbit.
10+This guide is broken into five parts:
11+
12++ [Acquiring an Urbit Identity](#acquire)
13++ [Using Bridge](#bridge)
14++ [Installing Arvo](#arvo)
15++ [Booting Your Ship](#boot)
16++ [Basic Operations](#operation)
17+
18+_If you just want to install the Urbit OS, Arvo, and don't need to be on the
19+Urbit network, you can skip to [Installing Arvo](#arvo)._
20+
21+;=
22+ ;h2
23+ ;div(id "acquire"): Acquiring an Urbit Identity
24+ ==
25+==
26+
27+Urbit's identity layer, called Azimuth, is a suite of contracts on the Ethereum
28+blockchain. An Azimuth address, called a *point*, functions as an identity and
29+a network address for Arvo, the Urbit OS. An instance of Arvo is called a
30+*ship*. A ship can't use the Arvo network until it's combined with a point.
31+
32+Throughout this guide, we'll refer to \"Urbit identities\" and \"points\"
33+interchangeably.
34+
35+Points are generally not freely available, so you will need to either
36+purchase one or get one from a friend. This guide assumes you have found a way
37+to acquire a point.
38+
39+If you went through the address registration process and used [Wallet Generator](https://github.com/urbit/urbit-wallet-generator),
40+then you should have have received a .zip file that contains an Ethereum address
41+and cryptographic secrets in the form of a PDF.
42+
43+Your ownership PDF contains two secrets that must be kept safe.
44+
45+- *Master Ticket*: This is a master key that allows you to manage every aspect of
46+ your address.
47+
48+- *Ownership Seed BIP39 Mnemonic*: The master ticket encoded as a BIP39 mnemonic
49+ for compatibility with most Ethereum wallet software, including our own *Bridge*
50+ client.
51+
52+;=
53+ ;h2
54+ ;div(id "bridge"): Using Bridge
55+ ==
56+==
57+
58+Bridge is client that we built for accessing and managing your Urbit identities.
59+Like Wallet Generator, Bridge is a web application that can also be run in offline mode.
60+It can be run in Firefox on all platforms, and also in Chrome if you're using
61+a Mac.
62+
63+Importantly, Bridge also allows you to generate a keyfile that
64+you will need to boot your ship on the Arvo network for the first time. Once a ship
65+with a keyfile, you can restart it later without the keyfile.
66+
67+*Note* Bridge allows you to make _writes_ to the blockchain, but we ask you to confirm
68+anything that will incur a transaction cost. If you plan to do anything heavy-duty, make
69+sure your Ethereum address has some pocket ETH.
70+
71+Download bridge [here](https://github.com/urbit/bridge/releases) and follow
72+the instructions below.
73+
74+#### Step 1: Welcome
75+
76+Click `Open a Wallet`.
77+
78+#### Step 2: Select a Network
79+
80+On the dropdown menu, make sure that `Main Network` is selected. Then click
81+`Continue ->`.
82+
83+#### Step 3: Open a Wallet
84+
85+On this dropdown menu, choose how you'd like to access your Ethereum wallet.
86+If you aren't using a hardware wallet (we support Ledger and Trezor), you'll
87+want to use your Ethereum wallet's BIP39 Mnemonic.
88+
89+If you used Wallet Generator to generate an HD wallet, you have a few choices:
90+you can choose `Urbit Master Ticket,` which is high-value, but allows you unfettered
91+permissions to update your point. The mnemonic associated with your management
92+seed is also useful to perform everyday operations (such as boot your ship!).
93+
94+Select the appropriate option and click `Continue ->`.
95+
96+#### Step 4: (optional) Accept Your Transfer
97+
98+If you were sent a point by a friend, then you should see a graphic under
99+`Incoming Transfers`. Click the `Details ->` link under that graphic.
100+
101+Now you'll be on the management page of your point. The transfer isn't completed
102+yet, so click `Accept incoming transfer`. Then check both boxes and and click
103+their associated `Sign Transaction` and `Send Transaction` buttons.
104+
105+If you already own a point, then click on the `Details ->` under your sigil in the
106+`Your Points` section.
107+
108+#### Step 5: (optional) Set Your Networking Keys
109+
110+If you just accepted a point, you'll be returned to your point screen. Notice that
111+that links and buttons are now clickable. You now own this point!
112+
113+Click the link that says `Generate Urbit networking keys`. Bridge will let you either
114+download a keyfile derived from your networking keys are you can paste in your own
115+network seed and derive a new keyfile. See our
116+[HD Wallet Spec](https://github.com/urbit/proposals/blob/master/proposals/8.md)
117+for more information.
118+
119+#### Step 6: Generate Your Keyfile
120+
121+From the detail page associated with your point, click the `Generate Urbit Keyfile`
122+button and you'll be taken to a page with a field titled `Network key`. If you went
123+through the address registration process, this should be filled in already.
124+Click `Generate ->`, which will download a keyfile onto your machine.
125+
126+With that keyfile in hand, you can now exit Bridge.
127+
128+;=
129+ ;h2
130+ ;div(id "arvo"): Installing Arvo
131+ ==
132+==
133+
134+Now you're ready to run Arvo. You're almost there!
135+
136+But first, some terminology:
137+- `vere` or `urbit`: the interpreter that runs when you run a command like `urbit` or `/bin/urbit` in your command line
138+- `arvo`: the deterministic OS that lives in a directory whose name matches your Azimuth point, ie `~famreb-todmec` lives in `/famreb-todmec`
139+
140+Arvo runs nicely on a Unix-like operating system -- Ubuntu,
141+Fedora, macOS, and FreeBSD. If you're using Windows, you'll need
142+to get one of the aforementioned systems. Don't worry: most of them are free.
143+
144+We have different installation instructions for different platforms. To install
145+and run Arvo, run the commands that are listed for your operating system.
146+
147+On any platform, you can check your Arvo installation by running the `urbit`
148+command. Installation was successful if you get a block of output that begins
149+with the line below:
150+
151+```
152+Urbit: a personal server operating function
153+```
154+
155+#### MacOS
156+
157+We recommend using the Homebrew package manager to run Arvo on MacOS.
158+
159+```
160+# Bash
161+
162+brew update
163+brew install autoconf automake cmake gcc git gmp libsigsegv libtool meson ninja pkg-config python2 openssl re2c
164+git clone https://github.com/urbit/urbit
165+cd urbit
166+./scripts/bootstrap
167+./scripts/build
168+sudo ninja -C ./build/ meson-install
169+urbit
170+```
171+
172+#### Ubuntu or Debian
173+
174+```
175+# Bash
176+
177+sudo apt-get update
178+sudo apt-get install autoconf automake cmake exuberant-ctags g++ git libcurl4-gnutls-dev libgmp3-dev libncurses5-dev libsigsegv-dev libssl-dev libtool make openssl pkg-config python python3 python3-pip ragel re2c zlib1g-dev
179+sudo -H pip3 install --upgrade pip
180+sudo -H pip3 install meson==0.29
181+
182+# we need ninja 1.5.1
183+# 'apt-get install ninja-build' gives us 0.1.3
184+# 'apt-get install ninja-build' gives us 1.3.4
185+#
186+git clone git://github.com/ninja-build/ninja.git
187+pushd ninja
188+ git checkout release
189+ ./configure.py --bootstrap
190+ sudo cp ./ninja /usr/local/bin
191+popd
192+
193+
194+git clone https://github.com/urbit/urbit
195+cd urbit
196+./scripts/bootstrap
197+./scripts/build
198+sudo ninja -C ./build/ install
199+urbit
200+```
201+
202+#### Fedora
203+
204+```
205+# Bash
206+
207+sudo yum upgrade
208+sudo yum install autoconf automake cmake ctags gcc gcc-c++ git gmp-devel libcurl-devel libsigsegv-devel libtool ncurses-devel ninja-build openssl openssl-devel pkgconfig python2 python3 ragel re2c wget
209+
210+# meson requires python 3.5; RHEL supplies wrong version
211+pushd /usr/src
212+ sudo wget https://www.python.org/ftp/python/3.5.5/Python-3.5.5.tgz
213+ sudo tar xzf Python-3.5.5.tgz
214+ cd Python-3.5.5
215+ sudo ./configure --enable--optimizations
216+ sudo make altinstall
217+ which python3.5
218+ cd /usr/local/bin
219+ sudo ln -s python3.5 python3
220+ hash python3
221+popd
222+
223+curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
224+sudo /usr/local/bin/python3 get-pip.py
225+# downgrade meson to avoid dependencies that redhat can't meet
226+sudo -H /usr/local/bin/pip3 install meson==0.29
227+
228+
229+git clone git://github.com/ninja-build/ninja.git && cd ninja
230+git checkout release
231+./configure.py --boostrap
232+sudo cp ./ninja /usr/local/bin
233+
234+git clone https://github.com/urbit/urbit
235+cd urbit
236+./scripts/bootstrap
237+./scripts/build
238+sudo /usr/local/bin/ninja -C ./build/ install
239+urbit
240+```
241+
242+#### Arch Linux
243+
244+```
245+# Bash
246+
247+sudo pacman -Syu
248+sudo pacman -S autoconf automake cmake curl gcc git gmp libsigsegv libtool ncurses ninja openssl python ragel re2c
249+curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
250+sudo python3 get-pip.py
251+git clone https://github.com/urbit/urbit
252+cd urbit
253+./scripts/bootstrap
254+./scripts/build
255+sudo ninja -C ./build/ meson-install
256+urbit
257+```
258+
259+If you just want to use a fake ship for development purposes, you can now use
260+the command of the scheme below to boot a fake `~zod`.
261+
262+```
263+urbit -F zod -A /path/to/arvo -s -c zod
264+```
265+
266+If you want to get on the Arvo network with your point, then continue to the
267+next section.
268+
269+
270+;=
271+ ;h2
272+ ;div(id "boot"): Booting Your Ship
273+ ==
274+==
275+
276+
277+Now the rubber meets the road. You'll be booting your ship with the keyfile
278+that you downloaded from Bridge.
279+
280+#### Step 1: Find Your Point's Name
281+
282+This will look something like `~lodleb-ritrul`. You can see the name of your
283+point(s) when you log into your wallet using the Bridge client.
284+
285+;img@"http://media.urbit.org/site/bridge-0.png"(width "100%");
286+
287+#### Step 2: Find the path to your keyfile
288+
289+Find the absolute path to the keyfile that you downloaded from Bridge. Copy it.
290+
291+#### Step 3: Run the boot command
292+
293+Type `cd` in your terminal to return to your home directory. If you want to
294+store your ship somewhere besides your home directory, change the terminal's
295+working directory to the desired directory.
296+
297+Run the command below, except with `~sample-planet` replaced by the name of your
298+Urbit identity, and `path/to/my-planet.key` replaced with the path to your
299+keyfile:
300+
301+```
302+urbit -w ~sample-planet -k path/to/my-planet.key
303+```
304+
305+if you'd prefer to copy your key in you can run
306+
307+```
308+urbit -w ~sample-planet -G rAnDoMkEy
309+```
310+
311+
312+This will create a directory called `sample-planet/` and begin building your
313+ship. It may take a few minutes.
314+
315+When your ship is finished booting, you will see the `~sample-planet:dojo>`
316+prompt. At that point, you should permanently erase your keyfile from your
317+machine.
318+
319+;=
320+ ;h2
321+ ;div(id "operation"): Basic Operations
322+ ==
323+==
324+
325+Welcome to your urbit! There's a few things you should do to become oriented.
326+
327+#### Dojo
328+
329+Let's try out the Dojo, the Arvo command line and Hoon REPL:
330+
331+```
332+~sample-planet:dojo> (add 2 2)
333+```
334+
335+Should produce:
336+
337+```
338+> (add 2 2)
339+4
340+```
341+
342+Good.
343+
344+#### Mounting
345+
346+Clay, the Arvo filesystem, isn't mounted to Unix by default. Switch to the Dojo
347+prompt and run:
348+
349+```
350+~sample-planet:dojo> |mount %
351+```
352+
353+This should produce:
354+```
355+> |mount %
356+>=
357+```
358+
359+which indicates that the command was processed.
360+
361+`|mount %` will cause a `home/` directory to appear inside your _pier_ folder in
362+Unix (the "pier" is our shorthand for the directory whose name corresponds to your Azimuth point). Changes to these files are automatically synced into your ship.
363+
364+
365+#### Talk
366+
367+Use `ctrl-x` to toggle between the Dojo and the Talk prompts.
368+
369+While on the Talk prompt, let's join the main Urbit support chat channel, `/urbit-help`:
370+
371+```
372+~sample-planet:talk[] ;join /urbit-help
373+```
374+
375+Talk is stateful, so your ship will download a backlog. `/urbit-help` is the
376+place to ask questions about getting up and running.
377+
378+#### Shutting Down and Restarting
379+
380+You can turn your ship off with `ctrl-d` from the Talk or Dojo prompts.
381+
382+To restart your ship, simply pass the name of your pier:
383+
384+```
385+$ urbit some-planet
386+```
getting-started/azimuth.udon−1
@@ -6,4 +6,3 @@
66# Using Azimuth
77
88The primary way to interact with Azimuth, our identity platform, is through our application [Bridge](https://github.com/urbit/bridge) and the node libraries that it depends on, azimuth-js and keygen-js. Take a look at the source and play around or see our [introduction to Bridge](/getting-started/installation).
9−
getting-started/azimuth/managing.udondeleted−6
@@ -1,6 +0,0 @@
1−;>
2−
3−
4−# doy
5−
6−stuff
getting-started/azimuth/using-bridge.udondeleted−6
@@ -1,6 +0,0 @@
1−;>
2−
3−
4−# doy
5−
6−stuff
getting-started/installation.udondeleted−386
@@ -1,386 +0,0 @@
1−:- :~ title/'Installation'
2− preview/'Want to get Urbit running? Look here.'
3− sort/'1'
4− ==
5−;>
6−
7−# Installation
8−
9−This guide is broken into five parts:
10−
11−+ [Acquiring an Urbit Identity](#acquire)
12−+ [Using Bridge](#bridge)
13−+ [Installing Arvo](#arvo)
14−+ [Booting Your Ship](#boot)
15−+ [Basic Operations](#operation)
16−
17−_If you just want to install the Urbit OS, Arvo, and don't need to be on the
18−Urbit network, you can skip to [Installing Arvo](#arvo)._
19−
20−;=
21− ;h2
22− ;div(id "acquire"): Acquiring an Urbit Identity
23− ==
24−==
25−
26−Urbit's identity layer, called Azimuth, is a suite of contracts on the Ethereum
27−blockchain. An Azimuth address, called a *point*, functions as an identity and
28−a network address for Arvo, the Urbit OS. An instance of Arvo is called a
29−*ship*. A ship can't use the Arvo network until it's combined with a point.
30−
31−Throughout this guide, we'll refer to \"Urbit identities\" and \"points\"
32−interchangeably.
33−
34−Points are generally not freely available, so you will need to either
35−purchase one or get one from a friend. This guide assumes you have found a way
36−to acquire a point.
37−
38−If you went through the address registration process and used [Wallet Generator](https://github.com/urbit/urbit-wallet-generator),
39−then you should have have received a .zip file that contains an Ethereum address
40−and cryptographic secrets in the form of a PDF.
41−
42−Your ownership PDF contains two secrets that must be kept safe.
43−
44−- *Master Ticket*: This is a master key that allows you to manage every aspect of
45− your address.
46−
47−- *Ownership Seed BIP39 Mnemonic*: The master ticket encoded as a BIP39 mnemonic
48− for compatibility with most Ethereum wallet software, including our own *Bridge*
49− client.
50−
51−;=
52− ;h2
53− ;div(id "bridge"): Using Bridge
54− ==
55−==
56−
57−Bridge is client that we built for accessing and managing your Urbit identities.
58−Like Wallet Generator, Bridge is a web application that can also be run in offline mode.
59−It can be run in Firefox on all platforms, and also in Chrome if you're using
60−a Mac.
61−
62−Importantly, Bridge also allows you to generate a keyfile that
63−you will need to boot your ship on the Arvo network for the first time. Once a ship
64−with a keyfile, you can restart it later without the keyfile.
65−
66−*Note* Bridge allows you to make _writes_ to the blockchain, but we ask you to confirm
67−anything that will incur a transaction cost. If you plan to do anything heavy-duty, make
68−sure your Ethereum address has some pocket ETH.
69−
70−Download bridge [here](https://github.com/urbit/bridge/releases) and follow
71−the instructions below.
72−
73−#### Step 1: Welcome
74−
75−Click `Open a Wallet`.
76−
77−#### Step 2: Select a Network
78−
79−On the dropdown menu, make sure that `Main Network` is selected. Then click
80−`Continue ->`.
81−
82−#### Step 3: Open a Wallet
83−
84−On this dropdown menu, choose how you'd like to access your Ethereum wallet.
85−If you aren't using a hardware wallet (we support Ledger and Trezor), you'll
86−want to use your Ethereum wallet's BIP39 Mnemonic.
87−
88−If you used Wallet Generator to generate an HD wallet, you have a few choices:
89−you can choose `Urbit Master Ticket,` which is high-value, but allows you unfettered
90−permissions to update your point. The mnemonic associated with your management
91−seed is also useful to perform everyday operations (such as boot your ship!).
92−
93−Select the appropriate option and click `Continue ->`.
94−
95−#### Step 4: (optional) Accept Your Transfer
96−
97−If you were sent a point by a friend, then you should see a graphic under
98−`Incoming Transfers`. Click the `Details ->` link under that graphic.
99−
100−Now you'll be on the management page of your point. The transfer isn't completed
101−yet, so click `Accept incoming transfer`. Then check both boxes and and click
102−their associated `Sign Transaction` and `Send Transaction` buttons.
103−
104−If you already own a point, then click on the `Details ->` under your sigil in the
105−`Your Points` section.
106−
107−#### Step 5: (optional) Set Your Networking Keys
108−
109−If you just accepted a point, you'll be returned to your point screen. Notice that
110−that links and buttons are now clickable. You now own this point!
111−
112−Click the link that says `Generate Urbit networking keys`. Bridge will let you either
113−download a keyfile derived from your networking keys are you can paste in your own
114−network seed and derive a new keyfile. See our
115−[HD Wallet Spec](https://github.com/urbit/proposals/blob/master/proposals/8.md)
116−for more information.
117−
118−#### Step 6: Generate Your Keyfile
119−
120−From the detail page associated with your point, click the `Generate Urbit Keyfile`
121−button and you'll be taken to a page with a field titled `Network key`. If you went
122−through the address registration process, this should be filled in already.
123−Click `Generate ->`, which will download a keyfile onto your machine.
124−
125−With that keyfile in hand, you can now exit Bridge.
126−
127−;=
128− ;h2
129− ;div(id "arvo"): Installing Arvo
130− ==
131−==
132−
133−Now you're ready to run Arvo. You're almost there!
134−
135−But first, some terminology:
136−- `vere` or `urbit`: the interpreter that runs when you run a command like `urbit` or `/bin/urbit` in your command line
137−- `arvo`: the deterministic OS that lives in a directory whose name matches your Azimuth point, ie `~famreb-todmec` lives in `/famreb-todmec`
138−
139−Arvo runs nicely on a Unix-like operating system -- Ubuntu,
140−Fedora, macOS, and FreeBSD. If you're using Windows, you'll need
141−to get one of the aforementioned systems. Don't worry: most of them are free.
142−
143−We have different installation instructions for different platforms. To install
144−and run Arvo, run the commands that are listed for your operating system.
145−
146−On any platform, you can check your Arvo installation by running the `urbit`
147−command. Installation was successful if you get a block of output that begins
148−with the line below:
149−
150−```
151−Urbit: a personal server operating function
152−```
153−
154−#### MacOS
155−
156−We recommend using the Homebrew package manager to run Arvo on MacOS.
157−
158−```
159−#Bash
160−
161−brew update
162−brew install autoconf automake cmake gcc git gmp libsigsegv libtool meson ninja pkg-config python2 openssl re2c
163−git clone https://github.com/urbit/urbit
164−cd urbit
165−./scripts/bootstrap
166−./scripts/build
167−sudo ninja -C ./build/ meson-install
168−urbit
169−```
170−
171−#### Ubuntu or Debian
172−
173−```
174−# Bash
175−
176−sudo apt-get update
177−sudo apt-get install autoconf automake cmake exuberant-ctags g++ git libcurl4-gnutls-dev libgmp3-dev libncurses5-dev libsigsegv-dev libssl-dev libtool make openssl pkg-config python python3 python3-pip ragel re2c zlib1g-dev
178−sudo -H pip3 install --upgrade pip
179−sudo -H pip3 install meson==0.29
180−
181−# we need ninja 1.5.1
182−# 'apt-get install ninja-build' gives us 0.1.3
183−# 'apt-get install ninja-build' gives us 1.3.4
184−#
185−git clone git://github.com/ninja-build/ninja.git
186−pushd ninja
187− git checkout release
188− ./configure.py --bootstrap
189− sudo cp ./ninja /usr/local/bin
190−popd
191−
192−
193−git clone https://github.com/urbit/urbit
194−cd urbit
195−./scripts/bootstrap
196−./scripts/build
197−sudo ninja -C ./build/ install
198−urbit
199−```
200−
201−#### Fedora
202−
203−```
204−# Bash
205−
206−sudo yum upgrade
207−sudo yum install autoconf automake cmake ctags gcc gcc-c++ git gmp-devel libcurl-devel libsigsegv-devel libtool ncurses-devel ninja-build openssl openssl-devel pkgconfig python2 python3 ragel re2c wget
208−
209−# meson requires python 3.5; RHEL supplies wrong version
210−pushd /usr/src
211− sudo wget https://www.python.org/ftp/python/3.5.5/Python-3.5.5.tgz
212− sudo tar xzf Python-3.5.5.tgz
213− cd Python-3.5.5
214− sudo ./configure --enable--optimizations
215− sudo make altinstall
216− which python3.5
217− cd /usr/local/bin
218− sudo ln -s python3.5 python3
219− hash python3
220−popd
221−
222−curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
223−sudo /usr/local/bin/python3 get-pip.py
224−# downgrade meson to avoid dependencies that redhat can't meet
225−sudo -H /usr/local/bin/pip3 install meson==0.29
226−
227−
228−git clone git://github.com/ninja-build/ninja.git && cd ninja
229−git checkout release
230−./configure.py --boostrap
231−sudo cp ./ninja /usr/local/bin
232−
233−git clone https://github.com/urbit/urbit
234−cd urbit
235−./scripts/bootstrap
236−./scripts/build
237−sudo /usr/local/bin/ninja -C ./build/ install
238−urbit
239−```
240−
241−#### Arch Linux
242−
243−```
244−# Bash
245−
246−sudo pacman -Syu
247−sudo pacman -S autoconf automake cmake curl gcc git gmp libsigsegv libtool ncurses ninja openssl python ragel re2c
248−curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
249−sudo python3 get-pip.py
250−git clone https://github.com/urbit/urbit
251−cd urbit
252−./scripts/bootstrap
253−./scripts/build
254−sudo ninja -C ./build/ meson-install
255−urbit
256−```
257−
258−If you just want to use a fake ship for development purposes, you can now use
259−the command of the scheme below to boot a fake `~zod`.
260−
261−```
262−urbit -F zod -A /path/to/arvo -s -c zod
263−```
264−
265−If you want to get on the Arvo network with your point, then continue to the
266−next section.
267−
268−
269−;=
270− ;h2
271− ;div(id "boot"): Booting Your Ship
272− ==
273−==
274−
275−
276−Now the rubber meets the road. You'll be booting your ship with the keyfile
277−that you downloaded from Bridge.
278−
279−#### Step 1: Find Your Point's Name
280−
281−This will look something like `~lodleb-ritrul`. You can see the name of your
282−point(s) when you log into your wallet using the Bridge client.
283−
284−;img@"http://media.urbit.org/site/bridge-0.png"(width "100%");
285−
286−#### Step 2: Find the path to your keyfile
287−
288−Find the absolute path to the keyfile that you downloaded from Bridge. Copy it.
289−
290−#### Step 3: Run the boot command
291−
292−Type `cd` in your terminal to return to your home directory. If you want to
293−store your ship somewhere besides your home directory, change the terminal's
294−working directory to the desired directory.
295−
296−Run the command below, except with `~sample-planet` replaced by the name of your
297−Urbit identity, and `path/to/my-planet.key` replaced with the path to your
298−keyfile:
299−
300−```
301−urbit -w ~sample-planet -k path/to/my-planet.key
302−```
303−
304−if you'd prefer to copy your key in you can run
305−
306−```
307−urbit -w ~sample-planet -G rAnDoMkEy
308−```
309−
310−
311−This will create a directory called `sample-planet/` and begin building your
312−ship. It may take a few minutes.
313−
314−When your ship is finished booting, you will see the `~sample-planet:dojo>`
315−prompt. At that point, you should permanently erase your keyfile from your
316−machine.
317−
318−;=
319− ;h2
320− ;div(id "operation"): Basic Operations
321− ==
322−==
323−
324−Welcome to your urbit! There's a few things you should do to become oriented.
325−
326−#### Dojo
327−
328−Let's try out the Dojo, the Arvo command line and Hoon REPL:
329−
330−```
331−~sample-planet:dojo> (add 2 2)
332−```
333−
334−Should produce:
335−
336−```
337−> (add 2 2)
338−4
339−```
340−
341−Good.
342−
343−#### Mounting
344−
345−Clay, the Arvo filesystem, isn't mounted to Unix by default. Switch to the Dojo
346−prompt and run:
347−
348−```
349−~sample-planet:dojo> |mount %
350−```
351−
352−This should produce:
353−```
354−> |mount %
355−>=
356−```
357−
358−which indicates that the command was processed.
359−
360−`|mount %` will cause a `home/` directory to appear inside your _pier_ folder in
361−Unix (the "pier" is our shorthand for the directory whose name corresponds to your Azimuth point). Changes to these files are automatically synced into your ship.
362−
363−
364−#### Talk
365−
366−Use `ctrl-x` to toggle between the Dojo and the Talk prompts.
367−
368−While on the Talk prompt, let's join the main Urbit support chat channel, `/urbit-help`:
369−
370−```
371−~sample-planet:talk[] ;join /urbit-help
372−```
373−
374−Talk is stateful, so your ship will download a backlog. `/urbit-help` is the
375−place to ask questions about getting up and running.
376−
377−#### Shutting Down and Restarting
378−
379−You can turn your ship off with `ctrl-d` from the Talk or Dojo prompts.
380−
381−To restart your ship, simply pass the name of your pier:
382−
383−```
384−$ urbit some-planet
385−```
386−
getting-started/landscape.udon+1−3
@@ -5,6 +5,4 @@
55
66# Landscape
77
8−We're using Landscape, our new UI, to bootstrap a city dedicated to learning Hoon and
9−contributing to Urbit. If you'd like to know more about joining this city, visit
10−this [signup page](/landscape).
8+We're using Landscape, our new UI, to bootstrap a city dedicated to learning Hoon and contributing to Urbit. If you'd like to know more about joining this city, visit this [signup page](/landscape).
introduction.udon+3−4
@@ -1,7 +1,6 @@
11:- :~ navhome/'/docs/'
22 sort/'1'
33 title/'Introduction'
4− type/'post'
54 ==
65;>
76
@@ -27,7 +26,7 @@ If you'd like to install Arvo, get an Azimuth point, and/or get on the Urbit net
2726
2827## [Learn](/docs/learn)
2928
30−If you're interested in contributing to the Urbit project, building applications, or understanding the system technically, find tutorials and explanations of all the compontents of the system.
29+If you're interested in contributing to the Urbit project, building applications, or understanding the system technically, find tutorials and explanations of all the components of the system.
3130
3231- If you want to dive into learning Urbit, we recommend starting with the [Hoon Tutorial](/docs/learn/arvo/hoon).
3332- For Arvo internals, start at [Arvo](/docs/learn/arvo).
@@ -36,5 +35,5 @@ If you're interested in contributing to the Urbit project, building applications
3635
3736If you're a developer looking for Arvo reference documentation, this section is for you.
3837
39−- Confused about all the new words? Check out the [Glossary](/docs/reference/glossary).
40−- Don't miss the helpful Hoon rune [Cheat Sheet](/docs/reference/cheat-sheet).
38+- Confused about all the new words? Check out the [Glossary](docs/reference/glossary).
39+- Don't miss the helpful Hoon rune [Cheat Sheet](docs/reference/cheat-sheet).
introduction/arvo-vs-azimuth.udon+5−20
@@ -4,27 +4,12 @@
44
55# Arvo vs. Azimuth
66
7−*Arvo* is the Urbit operating system. *Azimuth* is the decentralized ledger
8−that keeps track of identities that are required to use the Arvo network.
9−*Urbit* is the holistic system composed of both Arvo and Azimuth.
7+*Arvo* is the Urbit operating system. *Azimuth* is the decentralized ledger that keeps track of identities that are required to use the Arvo network. *Urbit* is the holistic system composed of both Arvo and Azimuth.
108
11−The Arvo network is composed of virtual machines running our software stack.
12−Using a blockchain for this kind of computing is impossible: there's far too
13−much data involved in an operating system to run on top of a distributed
14−consensus mechanism. And you don't want your private information on a public
15−ledger. The Arvo network is not on a blockchain.
9+The Arvo network is composed of virtual machines running our software stack. Using a blockchain for this kind of computing is impossible: there's far too much data involved in an operating system to run on top of a distributed consensus mechanism. And you don't want your private information on a public ledger. The Arvo network is not a blockchain.
1610
17−But, being a decentralized system, we need some way to cryptographically secure
18−and authenticate your identity on the Arvo network. What keeps track of who
19−owns any given identity? Well, simply matching something to an address is a
20−small piece of computing, and a blockchain are wonderful for such a purpose.
21−That's where the Azimuth comes in.
11+However, being a decentralized system, we need some way to cryptographically secure and authenticate your identity on the Arvo network. What keeps track of who owns any given identity? Well, simply matching something to an address is a small piece of computing, and a blockchain are wonderful for such a purpose. That's where the Azimuth comes in.
2212
23−We chose to build Azimuth on the Ethereum blockchain because smart contracts are
24−well-suited for the peculiarities of the identities. Urbit identities
25−are owned by Ethereum addresses.
13+We chose to build Azimuth on the Ethereum blockchain because smart contracts are well-suited for the peculiarities of the identities. Urbit identities are owned by Ethereum addresses.
2614
27−Azimuth and the Arvo network are parallel systems. Azimuth isn't necessarily
28−Arvo-related; it can be used as a generalized identity system for other
29−projects. Azimuth is the equivalent of a bank vault that storess sthe deed to your
30−house. The Arvo network is the neighborhood that you live in.
15+Azimuth and the Arvo network are parallel systems. Azimuth isn't necessarily Arvo-related; it can be used as a generalized identity system for other projects. Azimuth is the equivalent of a bank vault that storess sthe deed to your house. The Arvo network is the neighborhood that you live in.
introduction/community.udon → introduction/community-tutorials.udonrenamed+4−2
@@ -5,9 +5,11 @@
55 ==
66;>
77
8−# Community docs
8+# Community Docs
99
10−Here are some tutorials written by members of the Urbit community. Some are a little outdated, but they may still prove useful.
10+Here are some tutorials written by members of the Urbit community. Some are a little outdated, but they may still prove useful.
11+
12+If you want to add something to this list, [shoot us an email](mailto:support@urbit.org).
1113
1214- `~master-morzod`
1315 - [Fora post](https://urbit.org/fora/posts/~2016.12.25..06.35.44..a1ec~/)
introduction/contributing.udon+4−4
@@ -7,14 +7,14 @@
77
88# Contributing
99
10−It's always a good day for pull requests! We gladly accept submissions
11−for improving our [code](https://github.com/urbit/urbit/) and
12−[documentation](https://github.com/urbit/docs/) alike.
10+We accept submissions for improving our [code](https://github.com/urbit/urbit/) and [documentation](https://github.com/urbit/docs/) alike.
11+
12+If you're interested in contributing, but don't know where to start, feel free to [send us an email](mailto:support@urbit.org).
1313
1414## Code guidelines
1515
1616Our official guide to contributing can be found
1717[here](https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md),
18−which is most useful for large and low-level changes. For a good example of
18+which is most useful for large and low-level changes. For a good example of
1919preferred Hoon coding style, see
2020[ford.hoon](https://github.com/urbit/arvo/blob/master/sys/vane/ford.hoon).
introduction/source.udon → introduction/source-code-overview.udonrenamed+8−24
@@ -2,11 +2,11 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'2'
5− title/'Source code'
5+ title/'Source Code Overview'
66 ==
77;>
88
9−# Source code overview
9+# Source Code Overview
1010
1111We host all our source code on GitHub at [github.com/urbit](https://github.com/urbit).
1212
@@ -56,34 +56,18 @@ important ones here:
5656 ==
5757 ;li
5858 ;h1
59− ;a/"https://github.com/urbit/constitution"
60− ;code: urbit/constitution
59+ ;a/"https://github.com/urbit/azimuth"
60+ ;code: urbit/azimuth
6161 ==
6262 ==
63− We're [bootstrapping Urbit from Ethereum](https://urbit.org/blog/2017.9-eth/). This means formally defining the Urbit governance model and public-key infrastructure formally in a simple smart contract deployed on the Ethereum blockchain. If you're into Solidity, or just want to see how this works, check out this repo. Currently getting audited.
63+ Azimuth is a general-purpose PKI that Urbit uses for network identities.
6464 ==
6565 ;li
6666 ;h1
67− ;a/"https://github.com/urbit/etherwallet"
68− ;code: urbit/etherwallet
67+ ;a/"https://github.com/urbit/bridge"
68+ ;code: urbit/bridge
6969 ==
7070 ==
71− Urbit will soon need a secure, robust frontend interface for buying and selling Urbit address space and interacting directly with the Urbit constitution smart contract. We decided to fork MyEtherWallet, which already has strong security and support for things like multisig and hardware wallet, and modify it to support Urbit. Dive in!
72− ==
73− ;li
74− ;h1
75− ;a/"https://github.com/urbit/tree"
76− ;code: urbit/tree
77− ==
78− ==
79− Tree is the main Urbit web interface written as a React/Flux app in CoffeeScript. We're working on porting this to ES6 and simplifying the architecture generally. If you're into frontend frameworks and web apps, reach out to us and we'll help you get started.
80− ==
81− ;li
82− ;h1
83− ;a/"https://github.com/urbit/talk"
84− ;code: urbit/talk
85− ==
86− ==
87− The main web interface for Urbit's distributed chat and notifications protocol. Currently, like Tree, a simple React/Flux app written in CoffeeScript. With lots of changes happening to the Talk Hoon backend app in the coming releases, our frontend Talk interface will need a lot of development and design work. We've also started the process of porting this to ES6. Ask us how you can start helping out!
71+ Bridge is an offline web application for interacting with Ecliptic, the interface to Azimuth.
8872 ==
8973==
introduction/overview.udon → introduction/technical-overview.udonrenamed

The content is the same.

learn.udon+8−1
@@ -6,5 +6,12 @@
66
77# Learn
88
9−Whether you want to learn to program in Hoon, walk through the Nock spec, or learn how to use Hoon to interact with Arvo, this is your destination.
9+Tutorials and explanations of all the components of Urbit.
1010
11+## [Arvo](docs/learn/arvo)
12+
13+In-depth documentation on Arvo internals, Hoon, Nock, and Vere, as well as a Hoon tutorial.
14+
15+## [Azimuth](docs/learn/azimuth)
16+
17+Azimuth documentation is in progress, but you can find descriptions of of the Urbit HD Wallet and an explanation of why Urbit needs a blockchain.
learn/arvo.udon+13−136
@@ -1,147 +1,24 @@
1−:- :~ navhome/'/docs/'
2− next/'true'
3− sort/'80'
4− title/'Arvo Internals'
5− ==
1+:- :~ title/'Arvo'
2+ sort/'1'
3+ ==
64;>
75
8−# Arvo internals
6+# Arvo
97
10−> Note: The last major revision of these sections was in 2016. They need to be rewritten: they're outdated in some respects, and also not always as clear as they could be. A rewrite is planned. There is still plenty of good information to be found, but don't bet the farm on anything you read here.
8+Arvo is a clean-slate system software stack defined as a deterministic computer. An encrypted P2P network, %ames, runs on a functional operating system, Arvo, written in a strict, typed functional language, Hoon, which compiles itself to a combinator interpreter, Nock, whose spec gzips to 340 bytes.
119
12−Arvo is composed of modules called vanes:
10+## [Hoon](docs/learn/arvo/hoon)
1311
14−;list;
12+Hoon is a high-level, statically typed, functional programming language, custom-designed for use with Urbit. For a functional language it has a surprisingly imperative style, and mastering it doesn't require knowing any advanced mathematics.
1513
16−At a high level `%arvo` takes a mess of Unix I/O events and turns them
17−into something clean and structured for the programmer.
14+The [Hoon Tutorials](docs/learn/arvo/hoon/getting-started) are the best place to start if you want to learn Urbit.
1815
19−`%arvo` is designed to avoid the usual state of complex event networks:
20−event spaghetti. We keep track of every event's cause so that we have a
21−clear causal chain for every computation. At the bottom of every chain
22−is a Unix I/O event, such as a network request, terminal input, file
23−sync, or timer event. We push every step in the path the request takes
24−onto the chain until we get to the terminal cause of the computation.
25−Then we use this causal stack to route results back to the caller.
16+## [Nock](docs/learn/arvo/nock)
2617
27−## Ducts
18+Nock is the low-level functional programming language that is interpreted by Vere. You don't need to know Nock to write Hoon, or even to work on most parts of Vere. But if you want to understand the foundations of Urbit and are mathematically-inclined, dive right in.
2819
29−The `%arvo` causal stack is called a `++duct`. This is represented
30−simply as a list of paths, where each path represents a step in the
31−causal chain. The first element in the path is the first letter of
32−whichever vane handled that step in the computation, or the empty span
33−for Unix.
20+## [Vere](docs/learn/arvo/vere)
3421
35−Here's a duct that was recently observed in the wild:
22+The Nock runtime system, written in C.
3623
37−```
38−~[
39− /g/a/~zod/4_shell_terminal/u/time
40− /g/a/~zod/shell_terminal/u/child/4/main
41− /g/a/~zod/terminal/u/txt
42− /d/term-mess
43− //term/1
44−]
45−```
46−
47−This is the duct the timer vane receives when "timer" sample app asks
48−the timer vane to set a timer. This is also the duct over which the
49−response is produced at the specified time. Unix sent a terminal
50−keystroke event (enter), and Arvo routed it to `%dill` (our terminal),
51−which passed it on to the `%gall` app terminal, which sent it to shell,
52−its child, which created a new child (with process id 4), which on
53−startup asked the timer vane to set a timer.
54−
55−The timer vane saves this duct, so that when the specified time arrives
56−and Unix sends a wakeup event to the timer vane, it can produce the
57−response on the same duct. This response is routed to the place we
58−popped off the top of the duct, i.e. the time app. This app produces the
59−text "ding", which falls down to the shell, which drops it through to
60−the terminal. Terminal drops this down to dill, which converts it into
61−an effect that Unix will recognize as a request to print "ding" to the
62−screen. When dill produces this, the last path in the duct has an
63−initial element of the empty span, so this is routed to Unix, which
64−applies the effects.
65−
66−This is a call stack, with a crucial feature: the stack is a first-class
67−citizen. You can respond over a duct zero, one, or many times. You can
68−save ducts for later use. There are definitely parallels to Scheme-style
69−continuations, but simpler and with more structure.
70−
71−## Making Moves
72−
73−If ducts are a call stack, then how do we make calls and produce
74−results? Arvo processes "moves" which are a combination of message data
75−and metadata. There are two types of moves. A `%pass` move is analogous
76−to a call:
77−
78−```
79−[duct %pass return-path=path vane-name=@tD data=card]
80−```
81−
82−Arvo pushes the return path (preceded by the first letter of the vane
83−name) onto the duct and sends the given data, a card, to the vane we
84−specified. Any response will come along the same duct with the path
85−`return-path`.
86−
87−A `%give` move is analogous to a return:
88−
89−```
90−[duct %give data=card]
91−```
92−
93−Arvo pops the top path off the duct and sends the given card back to the
94−caller.
95−
96−## Vanes
97−
98−As shown above, we use Arvo proper to route and control the flow of
99−moves. However, Arvo proper is rarely directly responsible for
100−processing the event data that directly causes the desired outcome of a
101−move. This event data is contained within a card, which is simply a
102−`(pair term noun)`. Instead, Arvo proper passes the card off to one of
103−its vanes, which each present an interface to clients for a particular
104−well-defined, stable, and general-purpose piece of functionality.
105−
106−As of this writing, we have seven vanes, which each provide the
107−following services:
108−
109−- `%ames`: the name of both our network and the vane that communicates over it.
110−- `%behn`: a simple timer.
111−- `%clay`: our version-controlled, referentially- transparent, and global filesystem.
112−- `%dill`: a terminal driver. Unix sends keyboard events to `%dill` from either the console or telnet, and `%dill` produces terminal output.
113−- `%eyre`: an http server. Unix sends http messages to `%eyre`, and `%eyre` produces http messages in response.
114−- `%ford`: handles resources and publishing.
115−- `%gall`: manages our userspace applications. `%gall` keeps state and manages subscribers.
116−
117−## Cards
118−
119−Cards are the vane-specific portion of a move. Each vane defines a
120−protocol for interacting with other vanes (via Arvo) by defining four
121−types of cards: kisses, gifts, notes, and signs.
122−
123−When one vane is `%pass`ed a card in its `++kiss`, Arvo activates the
124−`++call` gate with the card as its argument. To produce a result, the
125−vane `%give`s one of the cards defined in its `++gift`. If the vane
126−needs to request something of another vane, it `%pass`es it a `++note`
127−card. When that other vane returns a result, Arvo activates the `++take`
128−gate of the initial vane with one of the cards defined in its `++sign`.
129−
130−In other words, there are only four ways of seeing a move: (1) as a
131−request seen by the caller, which is a ++note. (2) that same request as
132−seen by the callee, a `++kiss`. (3) the response to that first request
133−as seen by the callee, a `++gift`. (4) the response to the first request
134−as seen by the caller, a `++sign`.
135−
136−When a `++kiss` card is passed to a vane, Arvo calls its `++call` gate,
137−passing it both the card and its duct. This gate must be defined in
138−every vane. It produces two things in the following order: a list of
139−moves and a possibly modified copy of its context. The moves are used to
140−interact with other vanes, while the new context allows the vane to save
141−its state. The next time Arvo activates the vane it will have this
142−context as its subject.
143−
144−This overview has detailed how to pass a card to a particular vane. To
145−see the cards each vane can be `%pass`ed as a `++kiss` or return as a
146−`++gift` (as well as the semantics tied to them), each vane's public
147−interface is explained in detail in its respective overview.
24+Keep reading if you're planning to work on the Urbit interpreter, you're a language implementation geek, or you don't really understand anything until you've seen the actual structs.
learn/arvo/arvo internals.udonnew file+147
@@ -0,0 +1,147 @@
1+:- :~ navhome/'/docs/'
2+ next/'true'
3+ sort/'1'
4+ title/'Arvo Internals'
5+ ==
6+;>
7+
8+# Arvo internals
9+
10+> Note: The last major revision of these sections was in 2016. They need to be rewritten: they're outdated in some respects, and also not always as clear as they could be. A rewrite is planned. There is still plenty of good information to be found, but don't bet the farm on anything you read here.
11+
12+Arvo is composed of modules called vanes:
13+
14+;list;
15+
16+At a high level `%arvo` takes a mess of Unix I/O events and turns them
17+into something clean and structured for the programmer.
18+
19+`%arvo` is designed to avoid the usual state of complex event networks:
20+event spaghetti. We keep track of every event's cause so that we have a
21+clear causal chain for every computation. At the bottom of every chain
22+is a Unix I/O event, such as a network request, terminal input, file
23+sync, or timer event. We push every step in the path the request takes
24+onto the chain until we get to the terminal cause of the computation.
25+Then we use this causal stack to route results back to the caller.
26+
27+## Ducts
28+
29+The `%arvo` causal stack is called a `++duct`. This is represented
30+simply as a list of paths, where each path represents a step in the
31+causal chain. The first element in the path is the first letter of
32+whichever vane handled that step in the computation, or the empty span
33+for Unix.
34+
35+Here's a duct that was recently observed in the wild:
36+
37+```
38+~[
39+ /g/a/~zod/4_shell_terminal/u/time
40+ /g/a/~zod/shell_terminal/u/child/4/main
41+ /g/a/~zod/terminal/u/txt
42+ /d/term-mess
43+ //term/1
44+]
45+```
46+
47+This is the duct the timer vane receives when "timer" sample app asks
48+the timer vane to set a timer. This is also the duct over which the
49+response is produced at the specified time. Unix sent a terminal
50+keystroke event (enter), and Arvo routed it to `%dill` (our terminal),
51+which passed it on to the `%gall` app terminal, which sent it to shell,
52+its child, which created a new child (with process id 4), which on
53+startup asked the timer vane to set a timer.
54+
55+The timer vane saves this duct, so that when the specified time arrives
56+and Unix sends a wakeup event to the timer vane, it can produce the
57+response on the same duct. This response is routed to the place we
58+popped off the top of the duct, i.e. the time app. This app produces the
59+text "ding", which falls down to the shell, which drops it through to
60+the terminal. Terminal drops this down to dill, which converts it into
61+an effect that Unix will recognize as a request to print "ding" to the
62+screen. When dill produces this, the last path in the duct has an
63+initial element of the empty span, so this is routed to Unix, which
64+applies the effects.
65+
66+This is a call stack, with a crucial feature: the stack is a first-class
67+citizen. You can respond over a duct zero, one, or many times. You can
68+save ducts for later use. There are definitely parallels to Scheme-style
69+continuations, but simpler and with more structure.
70+
71+## Making Moves
72+
73+If ducts are a call stack, then how do we make calls and produce
74+results? Arvo processes "moves" which are a combination of message data
75+and metadata. There are two types of moves. A `%pass` move is analogous
76+to a call:
77+
78+```
79+[duct %pass return-path=path vane-name=@tD data=card]
80+```
81+
82+Arvo pushes the return path (preceded by the first letter of the vane
83+name) onto the duct and sends the given data, a card, to the vane we
84+specified. Any response will come along the same duct with the path
85+`return-path`.
86+
87+A `%give` move is analogous to a return:
88+
89+```
90+[duct %give data=card]
91+```
92+
93+Arvo pops the top path off the duct and sends the given card back to the
94+caller.
95+
96+## Vanes
97+
98+As shown above, we use Arvo proper to route and control the flow of
99+moves. However, Arvo proper is rarely directly responsible for
100+processing the event data that directly causes the desired outcome of a
101+move. This event data is contained within a card, which is simply a
102+`(pair term noun)`. Instead, Arvo proper passes the card off to one of
103+its vanes, which each present an interface to clients for a particular
104+well-defined, stable, and general-purpose piece of functionality.
105+
106+As of this writing, we have seven vanes, which each provide the
107+following services:
108+
109+- `%ames`: the name of both our network and the vane that communicates over it.
110+- `%behn`: a simple timer.
111+- `%clay`: our version-controlled, referentially- transparent, and global filesystem.
112+- `%dill`: a terminal driver. Unix sends keyboard events to `%dill` from either the console or telnet, and `%dill` produces terminal output.
113+- `%eyre`: an http server. Unix sends http messages to `%eyre`, and `%eyre` produces http messages in response.
114+- `%ford`: handles resources and publishing.
115+- `%gall`: manages our userspace applications. `%gall` keeps state and manages subscribers.
116+
117+## Cards
118+
119+Cards are the vane-specific portion of a move. Each vane defines a
120+protocol for interacting with other vanes (via Arvo) by defining four
121+types of cards: kisses, gifts, notes, and signs.
122+
123+When one vane is `%pass`ed a card in its `++kiss`, Arvo activates the
124+`++call` gate with the card as its argument. To produce a result, the
125+vane `%give`s one of the cards defined in its `++gift`. If the vane
126+needs to request something of another vane, it `%pass`es it a `++note`
127+card. When that other vane returns a result, Arvo activates the `++take`
128+gate of the initial vane with one of the cards defined in its `++sign`.
129+
130+In other words, there are only four ways of seeing a move: (1) as a
131+request seen by the caller, which is a ++note. (2) that same request as
132+seen by the callee, a `++kiss`. (3) the response to that first request
133+as seen by the callee, a `++gift`. (4) the response to the first request
134+as seen by the caller, a `++sign`.
135+
136+When a `++kiss` card is passed to a vane, Arvo calls its `++call` gate,
137+passing it both the card and its duct. This gate must be defined in
138+every vane. It produces two things in the following order: a list of
139+moves and a possibly modified copy of its context. The moves are used to
140+interact with other vanes, while the new context allows the vane to save
141+its state. The next time Arvo activates the vane it will have this
142+context as its subject.
143+
144+This overview has detailed how to pass a card to a particular vane. To
145+see the cards each vane can be `%pass`ed as a `++kiss` or return as a
146+`++gift` (as well as the semantics tied to them), each vane's public
147+interface is explained in detail in its respective overview.
learn/arvo/admin.udon → learn/arvo/arvo internals/admin.udonrenamed

The content is the same.

learn/arvo/ames.udon → learn/arvo/arvo internals/ames.udonrenamed

The content is the same.

learn/arvo/ames/commentary.udon → learn/arvo/arvo internals/ames/commentary.udonrenamed

The content is the same.

learn/arvo/behn.udon → learn/arvo/arvo internals/behn.udonrenamed

The content is the same.

learn/arvo/clay.udon → learn/arvo/arvo internals/clay.udonrenamed

The content is the same.

learn/arvo/clay/architecture.udon → learn/arvo/arvo internals/clay/architecture.udonrenamed

The content is the same.

learn/arvo/clay/commentary.udon → learn/arvo/arvo internals/clay/commentary.udonrenamed

The content is the same.

learn/arvo/dill.udon → learn/arvo/arvo internals/dill.udonrenamed

The content is the same.

learn/arvo/eyre.udon → learn/arvo/arvo internals/eyre.udonrenamed

The content is the same.

learn/arvo/eyre/commentary.udon → learn/arvo/arvo internals/eyre/commentary.udonrenamed

The content is the same.

learn/arvo/eyre/specification.udon → learn/arvo/arvo internals/eyre/specification.udonrenamed

The content is the same.

learn/arvo/filesystem.udon → learn/arvo/arvo internals/filesystem.udonrenamed

The content is the same.

learn/arvo/ford.udon → learn/arvo/arvo internals/ford.udonrenamed

The content is the same.

learn/arvo/ford/runes.udon → learn/arvo/arvo internals/ford/runes.udonrenamed

The content is the same.

learn/arvo/gall.udon → learn/arvo/arvo internals/gall.udonrenamed

The content is the same.

learn/arvo/gall/api.udon → learn/arvo/arvo internals/gall/api.udonrenamed

The content is the same.

learn/arvo/gall/generators.udon → learn/arvo/arvo internals/gall/generators.udonrenamed

The content is the same.

learn/arvo/gall/http.udon → learn/arvo/arvo internals/gall/http.udonrenamed

The content is the same.

learn/arvo/gall/marks.udon → learn/arvo/arvo internals/gall/marks.udonrenamed

The content is the same.

learn/arvo/gall/network.udon → learn/arvo/arvo internals/gall/network.udonrenamed

The content is the same.

learn/arvo/gall/security-driver.udon → learn/arvo/arvo internals/gall/security-driver.udonrenamed

The content is the same.

learn/arvo/gall/state.udon → learn/arvo/arvo internals/gall/state.udonrenamed

The content is the same.

learn/arvo/gall/subscriptions.udon → learn/arvo/arvo internals/gall/subscriptions.udonrenamed

The content is the same.

learn/arvo/gall/web-apps.udon → learn/arvo/arvo internals/gall/web-apps.udonrenamed

The content is the same.

learn/arvo/generators.udon → learn/arvo/arvo internals/generators.udonrenamed

The content is the same.

learn/arvo/hall.udon → learn/arvo/arvo internals/hall.udonrenamed

The content is the same.

learn/arvo/hall/architecture.udon → learn/arvo/arvo internals/hall/architecture.udonrenamed

The content is the same.

learn/arvo/hall/interface.udon → learn/arvo/arvo internals/hall/interface.udonrenamed

The content is the same.

learn/arvo/hall/new-gall.udon → learn/arvo/arvo internals/hall/new-gall.udonrenamed

The content is the same.

learn/arvo/hall/new-gall/example.udon → learn/arvo/arvo internals/hall/new-gall/example.udonrenamed

The content is the same.

learn/arvo/hall/new-gall/spec.udon → learn/arvo/arvo internals/hall/new-gall/spec.udonrenamed

The content is the same.

learn/arvo/layout.udon → learn/arvo/arvo internals/layout.udonrenamed

The content is the same.

learn/arvo/messaging.udon → learn/arvo/arvo internals/messaging.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'5'
5− title/'Messaging (Talk and Hall)'
5+ title/'Messaging'
66 ==
77;>
88
learn/arvo/publishing.udon → learn/arvo/arvo internals/publishing.udonrenamed

The content is the same.

learn/arvo/sail.udon → learn/arvo/arvo internals/sail.udonrenamed

The content is the same.

learn/arvo/shell.udon → learn/arvo/arvo internals/shell.udonrenamed

The content is the same.

learn/arvo/udon.udon → learn/arvo/arvo internals/udon.udonrenamed

The content is the same.

learn/arvo/udon/blog.udon → learn/arvo/arvo internals/udon/blog.udonrenamed

The content is the same.

learn/arvo/udon/comments.udon → learn/arvo/arvo internals/udon/comments.udonrenamed

The content is the same.

learn/arvo/udon/static.udon → learn/arvo/arvo internals/udon/static.udonrenamed

The content is the same.

learn/hoon.udon → learn/arvo/hoon.udonrenamed

The content is the same.

learn/hoon/hoon-ch1-4.udon → learn/arvo/hoon/arms-and-cores.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'24'
5− title/'1.4 Arms and Cores'
5+ title/'Arms and Cores'
66 ==
77;>
88
learn/hoon/hoon-ch2-4.udon → learn/arvo/hoon/atoms-auras-and-simple-cell-types.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'30'
5− title/'2.4 Atoms, Auras, and Simple Cell Types'
5+ title/'Atoms, Auras, and Simple Cell Types'
66 ==
77;>
88
learn/hoon/hoon-ch2-8.udon → learn/arvo/hoon/cores-again.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'34'
5− title/'2.8 Cores Again'
5+ title/'Cores Again'
66 ==
77;>
88
learn/hoon/hoon-ch2-7.udon → learn/arvo/hoon/cores.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'33'
5− title/'2.7 Cores'
5+ title/'Cores'
66 ==
77;>
88
learn/hoon/hoon-ch2-11.udon → learn/arvo/hoon/examples.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'37'
5− title/'2.11 Examples'
5+ title/'Examples'
66 ==
77;>
88
learn/hoon/hoon-ch1-5.udon → learn/arvo/hoon/gates.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'25'
5− title/'1.5 Gates (Hoon Functions)'
5+ title/'Gates (Hoon Functions)'
66 ==
77;>
88
learn/hoon/hoon-ch1-1.udon → learn/arvo/hoon/getting-started.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'21'
5− title/'1.1 Getting Started'
5+ title/'Getting Started'
66 ==
77;>
88
learn/hoon/hoon-ch2-1.udon → learn/arvo/hoon/hoon-programs.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'27'
5− title/'2.1 Hoon Programs'
5+ title/'Hoon Programs'
66 ==
77;>
88
learn/hoon/hoon-ch2-2.udon → learn/arvo/hoon/hoon-syntax.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'28'
5− title/'2.2 Hoon Syntax'
5+ title/'Hoon Syntax'
66 ==
77;>
88
learn/hoon/hoon-ch2-9.udon → learn/arvo/hoon/lists.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'35'
5− title/'2.9 Standard Library: Lists'
5+ title/'Standard Library: Lists'
66 ==
77;>
88
learn/hoon/hoon-ch1-6.udon → learn/arvo/hoon/multi-gate-cores-and-doors.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'26'
5− title/'1.6 Multi-gate Cores and Doors'
5+ title/'Multi-gate Cores and Doors'
66 ==
77;>
88
learn/hoon/hoon-ch1-2.udon → learn/arvo/hoon/nouns.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'22'
5− title/'1.2 Nouns'
5+ title/'Nouns'
66 ==
77;>
88
learn/hoon/hoon-ch2-3.udon → learn/arvo/hoon/simple-one-gate-programs.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'29'
5− title/'2.3 Simple One-Gate Programs'
5+ title/'Simple One-Gate Programs'
66 ==
77;>
88
learn/hoon/hoon-ch2-6.udon → learn/arvo/hoon/structures-and-complex-types.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'32'
5− title/'2.6 Structures and Complex Types'
5+ title/'Structures and Complex Types'
66 ==
77;>
88
learn/hoon/hoon-ch1-3.udon → learn/arvo/hoon/the-subject-and-its-legs.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'23'
5− title/'1.3 The Subject and Its Legs'
5+ title/'The Subject and Its Legs'
66 ==
77;>
88
learn/hoon/hoon-ch2-10.udon → learn/arvo/hoon/trees-sets-and-maps.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'36'
5− title/'2.10 Standard Library: Trees, Sets, and Maps'
5+ title/'Standard Library: Trees, Sets, and Maps'
66 ==
77;>
88
learn/hoon/hoon-ch2-5.udon → learn/arvo/hoon/type-checking-and-type-inference.udonrenamed+1−1
@@ -2,7 +2,7 @@
22 navuptwo/'true'
33 next/'true'
44 sort/'31'
5− title/'2.5 Type Checking and Type Inference'
5+ title/'Type Checking and Type Inference'
66 ==
77;>
88
learn/hoon/hoon-ch3-1.udon → learn/arvo/hoon/type-polymorphism.udonrenamed+1−1
@@ -1,7 +1,7 @@
11:- :~ navhome/'/docs/'
22 navuptwo/'true'
33 sort/'38'
4− title/'3.1 Type Polymorphism'
4+ title/'Type Polymorphism'
55 ==
66;>
77
learn/nock.udon → learn/arvo/nock.udonrenamed+1−1
@@ -1,6 +1,6 @@
11:- :~ navhome/'/docs/'
22 navuptwo/'true'
3− sort/'1'
3+ sort/'3'
44 title/'Nock'
55 ==
66;>
learn/nock/definition.udon → learn/arvo/nock/definition.udonrenamed

The content is the same.

learn/nock/example.udon → learn/arvo/nock/example.udonrenamed

The content is the same.

learn/nock/explanation.udon → learn/arvo/nock/explanation.udonrenamed

The content is the same.

learn/nock/implementations.udon → learn/arvo/nock/implementations.udonrenamed

The content is the same.

learn/nock/implementations/c.udon → learn/arvo/nock/implementations/c.udonrenamed

The content is the same.

learn/nock/implementations/clojure.udon → learn/arvo/nock/implementations/clojure.udonrenamed

The content is the same.

learn/nock/implementations/csharp.udon → learn/arvo/nock/implementations/csharp.udonrenamed

The content is the same.

learn/nock/implementations/groovy.udon → learn/arvo/nock/implementations/groovy.udonrenamed

The content is the same.

learn/nock/implementations/haskell.udon → learn/arvo/nock/implementations/haskell.udonrenamed

The content is the same.

learn/nock/implementations/hoon.udon → learn/arvo/nock/implementations/hoon.udonrenamed

The content is the same.

learn/nock/implementations/javascript.udon → learn/arvo/nock/implementations/javascript.udonrenamed

The content is the same.

learn/nock/implementations/python.udon → learn/arvo/nock/implementations/python.udonrenamed

The content is the same.

learn/nock/implementations/ruby.udon → learn/arvo/nock/implementations/ruby.udonrenamed

The content is the same.

learn/nock/implementations/scala.udon → learn/arvo/nock/implementations/scala.udonrenamed

The content is the same.

learn/nock/implementations/scheme.udon → learn/arvo/nock/implementations/scheme.udonrenamed

The content is the same.

learn/nock/implementations/swift.udon → learn/arvo/nock/implementations/swift.udonrenamed

The content is the same.

learn/vere.udon → learn/arvo/vere.udonrenamed+1−1
@@ -1,6 +1,6 @@
11:- :~ navhome/'/docs/'
22 next/'true'
3− sort/'5'
3+ sort/'4'
44 title/'Vere'
55 ==
66;>
learn/vere/api.udon → learn/arvo/vere/api.udonrenamed

The content is the same.

learn/vere/c.udon → learn/arvo/vere/c.udonrenamed

The content is the same.

learn/vere/jetting.udon → learn/arvo/vere/jetting.udonrenamed

The content is the same.

learn/vere/nouns.udon → learn/arvo/vere/nouns.udonrenamed

The content is the same.

learn/vere/runtime.udon → learn/arvo/vere/runtime.udonrenamed

The content is the same.

learn/azimuth.udon+6−1
@@ -1,7 +1,12 @@
11:- :~ title/'Azimuth'
2+ sort/'2'
23 ==
34;>
45
56# Azimuth
67
7−[PLACEHOLDER]
8+Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a decentralized ledger for Urbit identities that we call *points*. Having a point is necessary to use the Urbit network, which makes it important to have a neutral ledger to determine who owns what.
9+
10+Azimuth is not, however, part of the Urbit stack. Azimuth is a parallel system that be used as a generalized identity system for other projects. Azimuth "touches" the Urbit ecosystem when a point is used to boot a virtual computer on the Urbit network for the first time. When that happens, the point considered *linked* to Azimuth and the point’s full powers are available for use. Once a point is linked, it cannot be unlinked.
11+
12+A metaphor might make the relationship between these two systems to understand: Azimuth is the bank vault that stores the deed to your house. The Urbit network is the neighborhood that you live in.
learn/azimuth/blockchain.udon+2−2
@@ -1,4 +1,5 @@
11:- :~ title/'Why Urbit Uses a Blockchain'
2+ sort/'1'
23 ==
34;>
45
@@ -13,8 +14,7 @@ Each point has associated authentication and encryption keys for networking.
1314Think of a point as an IP address, a domain name, and a PGP key-pair.
1415
1516There are a limited number of points and, as you might expect, scarcity gives
16−points value. This means that bad actors -- spammers, scammers, and
17−malware-spreaders -- can be made economically unviable. Points being
17+points value. This means that bad actors – spammers, scammers, and malware-spreaders – can be made economically unviable. Points being
1818immutable allows for reputation systems to be built on top,
1919keeping the network friendly and giving users information to help them decide
2020who to treat as a trusted peer.
learn/azimuth/constitution.udondeleted−7
@@ -1,7 +0,0 @@
1−:- :~ title/'Constitution'
2− ==
3−;>
4−
5−# Constitution
6−
7−[PLACEHOLDER]
learn/azimuth/wallet.udon+1
@@ -1,4 +1,5 @@
11:- :~ title/'The Urbit HD Wallet'
2+ sort/'2'
23 ==
34;>
45
reference/cheat-sheet.udon+2−3
@@ -1,6 +1,5 @@
1−:- :~ navhome/'/docs/'
2− sort/'8'
3− title/'Cheat sheet'
1+:- :~ title/'Cheat sheet'
2+ sort/'4'
43 ==
54;>
65
reference/glossary.udon+2−4
@@ -1,7 +1,5 @@
1−:- :~ navhome/'/docs/'
2− navuptwo/'true'
3− sort/'1'
4− title/'Glossary'
1+:- :~ title/'Glossary'
2+ sort/'3'
53 ==
64
75;>
reference/hoon-expressions.udon+5−2
@@ -1,6 +1,9 @@
1+:- :~ title/'Hoon Expressions'
2+ sort/'1'
3+ ==
4+
15;>
26
37# Hoon Expressions
48
5−[PLACEHOLDER]
6−
9+Documentation for hoon expressions.
reference/hoon-expressions/irregular.udon−2
@@ -8,8 +8,6 @@
88
99##### `~palfun-foslup`
1010
11−;br;
12−
1311*Original Fora post* [here](https://urbit.org/fora/posts/~2016.12.29..19.37.08..89d5~/).
1412
1513##### Reading guide
reference/library.udon+4−3
@@ -1,7 +1,8 @@
1−:- :~ navhome/'/docs/'
2− sort/'3'
3− title/'Standard library'
1+:- :~ title/'Standard library'
2+ sort/'2'
43 ==
54;>
65
76# Standard library
7+
8+Documentation for the standard library.
reference/library/1a.udon−1
@@ -5,7 +5,6 @@
55
66;>
77
8−
98# 1a: basic arithmetic
109
1110### `++add`
reference/library/1c.udon−1
@@ -5,7 +5,6 @@
55
66;>
77
8−
98# 1c: molds and mold builders
109
1110### `++bloq`
reference/library/4o.udon+1−1
@@ -1,6 +1,6 @@
11:- :~ navhome/'/docs/'
22 sort/'42'
3− title/'4o Molds and Mold-Builders'
3+ title/'4o: Molds'
44 ==
55
66;>
reference/troubleshooting.udon+2−3
@@ -1,6 +1,5 @@
1−:- :~ navhome/'/docs/'
2− sort/'6'
3− title/'Hoon Errors'
1+:- :~ title/'Hoon Errors'
2+ sort/'5'
43 ==
54;>
65