on master help sign in
deleted udon files and pasted the converted md files ready for the zola port
613ef28friederjanmoerman
_index.mdnew file+7
@@ -0,0 +1,7 @@
1++++
2+title = "Docs"
3+template = "sections/docs.html"
4++++
5+Welcome to the documentation for the Urbit project, including the Azimuth identity layer, the Arvo operating system, and the Hoon programming language. This documentation is maintained by [Tlon](https://tlon.io) in a public [Github repository](https://github.com/urbit/docs). Issues and contributions are welcome.
6+
7+Please make your way to the [Introduction](docs/introduction) for an overview of the docs.
concepts.udondeleted−43
@@ -1,43 +0,0 @@
1−:- :~ navhome/'/docs/'
2− navuptwo/'true'
3− next/'true'
4− sort/'3'
5− title/'Concepts'
6− ==
7−;>
8−
9−# Concepts
10−
11−The documents in this section are high-level introductions to the Urbit project and components thereof.
12−
13−## [Azimuth](/docs/concepts/azimuth)
14−
15−A quick explanation of Azimuth, the Urbit identity layer. This document also explains how Azimuth and Arvo are different, while being the two parallel systems that compose Urbit.
16−
17−### [Why Urbit Uses a Blockchain](/docs/concepts/azimuth/blockchain)
18−
19−Azimuth is built on the Ethereum blockchain. This document explains why.
20−
21−### [The Urbit HD Wallet](/docs/concepts/azimuth/blockchain)
22−
23−A detailed discussion of the unique wallet system used to own and manage Azimuth identities.
24−
25−## [Technical Overview](/docs/concepts/technical-overview)
26−
27−A more in-depth description of the entire Urbit stack.
28−
29−## [Contributing](/docs/concepts/contributing)
30−
31−A guide to getting involved with the Urbit project.
32−
33−## [Community Tutorials](/docs/concepts/community-tutorials)
34−
35−A collection of unofficial but useful Urbit learning resources.
36−
37−## [Source Code](/docs/concepts/source-code-overview)
38−
39−An explanation of Urbit's constituent GitHub repos.
40−
41−## [Galaxies, Stars, and Planets](/docs/concepts/galaxies-stars-and-planets)
42−
43−An explanation of the Urbit address-space hierarchy.
concepts/_index.mdnew file+7
@@ -0,0 +1,7 @@
1++++
2+title = "Concepts"
3+weight = 3
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6++++
7+The documents in this section are high-level introductions to the Urbit project and components thereof.
concepts/arvo-vs-azimuth.mdnew file+15
@@ -0,0 +1,15 @@
1++++
2+title = "Arvo vs. Azimuth"
3+weight = 4
4+template = "doc.html"
5+description = "A quick explanation of the two parallel systems that compose Urbit."
6++++
7+Urbit is a project, not a single computer system. It has three components: Arvo, the operating system; Azimuth, the identity system; and Aegean, the pattern for creating software experiences for individual Urbit communities. This document compares the first two.
8+
9+[*Arvo*](https://github.com/urbit/arvo) is an operating system that provides the software for a personal server. These personal servers together constitute the peer-to-peer Arvo network. To make this network work on the social level, Arvo is built to work with a system of scarce and immutable identities.
10+
11+[*Azimuth*](https://github.com/urbit/azimuth) is the public-key infrastructure built to be such a system. A suite of smart-contracts on the Ethereum blockchain, Azimuth determines which Ethereum addresses own which Azimuth identities, called _points_. All point-related operations, such as transfers, are governed at this layer. But Azimuth isn't built strictly for Arvo -- it could be used as a generalized identity system for other projects.
12+
13+These otherwise-parallel systems meet when you want to connect to the Arvo network. Your Arvo personal server, called your _ship_, needs to be able to prove cryptographically that it is who it says it is. This proof comes in the form of a keyfile, derived from your point, that you use to start your ship.
14+
15+A metaphor might help illustrate the relationship between these two systems: the Arvo network is the neighborhood that you live in; Azimuth is the bank vault that stores the deed to your house.
concepts/azimuth.udon → concepts/azimuth/_index.mdrenamed+6−21
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'false'
3− sort/'9'
4− title/'Azimuth'
2+title = "Azimuth"
5− ==
3+weight = 6
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Azimuth
6++++
9−
10Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a platform for Urbit identities that we call _points_. You need a point to use the Arvo network.
7Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a platform for Urbit identities that we call _points_. You need a point to use the Arvo network.
11
8
12The primary way to interact with Azimuth is through our [Bridge](https://github.com/urbit/bridge) application and the node libraries that it depends on, azimuth-js and keygen-js. Take a look at the source and play around or see [Getting Started](/docs/getting-started).
9The primary way to interact with Azimuth is through our [Bridge](https://github.com/urbit/bridge) application and the node libraries that it depends on, azimuth-js and keygen-js. Take a look at the source and play around or see [Getting Started](/docs/getting-started).
@@ -22,15 +19,3 @@ Urbit is a project, not a single computer system. It has three components: Arvo,
22These otherwise-parallel systems meet when you want to connect to the Arvo network. Your Arvo personal server, called your _ship_, needs to be able to prove cryptographically that it is who it says it is. This proof comes in the form of a keyfile, derived from your point, that you use to start your ship.
19These otherwise-parallel systems meet when you want to connect to the Arvo network. Your Arvo personal server, called your _ship_, needs to be able to prove cryptographically that it is who it says it is. This proof comes in the form of a keyfile, derived from your point, that you use to start your ship.
23
20
24A metaphor might help illustrate the relationship between these two systems: the Arvo network is the neighborhood that you live in; Azimuth is the bank vault that stores the deed to your house.
21A metaphor might help illustrate the relationship between these two systems: the Arvo network is the neighborhood that you live in; Azimuth is the bank vault that stores the deed to your house.
25−
26−## Further Reading
27−
28−If you want to know more about Azimuth, check out the pages below.
29−
30−### [Why Urbit Uses a Blockchain](/docs/concepts/azimuth/blockchain)
31−
32−An explanation for why Ethereum makes sense for Azimuth.
33−
34−### [The Urbit HD Wallet](/docs/concepts/azimuth/wallet)
35−
36−A detailed discussion of the unique wallet system used to own and manage Azimuth identities.
concepts/azimuth/blockchain.udon → concepts/azimuth/blockchain.mdrenamed+8−10
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Why Urbit Uses a Blockchain'
2+title = "Why Urbit Uses a Blockchain"
2− sort/'1'
3+weight = 1
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Why Urbit Uses a Blockchain
7−
8The Arvo network is composed of personal servers: instances of the Arvo operating system, called ships,
6The Arvo network is composed of personal servers: instances of the Arvo operating system, called ships,
9that communicate as peers.
7that communicate as peers.
10
8
@@ -41,9 +39,9 @@ their property.
41
39
42Moving the Urbit land registry to Ethereum is an easy and obvious solution to
40Moving the Urbit land registry to Ethereum is an easy and obvious solution to
43this problem. We chose Ethereum over Bitcoin because the former is built for
41this problem. We chose Ethereum over Bitcoin because the former is built for
44−computation while the latter is not. We need a computational blockchain to
42+computation Landscape the latter is not. We need a computational blockchain to
45enforce the specific rules of the Urbit identity registry.
43enforce the specific rules of the Urbit identity registry.
46
44
47For more background on the decision to use the Ethereum blockchain, check out
45For more background on the decision to use the Ethereum blockchain, check out
48−[these](urbit.org/posts/essays/urbit-and-the-blockchain)
46+[these](https://urbit.org/posts/essays/urbit-and-the-blockchain/)
49−[two](urbit.org/posts/essays/bootstrapping-urbit-from-ethereum/) posts.
47+[two](https://urbit.org/posts/essays/bootstrapping-urbit-from-ethereum/) posts.
concepts/azimuth/wallet.udon → concepts/azimuth/wallet.mdrenamed+18−35
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'The Urbit HD Wallet'
2+title = "The Urbit HD Wallet"
2− sort/'2'
3+weight = 2
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# The Urbit HD Wallet
7−
8Owners of Azimuth _points_ need safeguards that allow for the use of Urbit
6Owners of Azimuth _points_ need safeguards that allow for the use of Urbit
9without jeopardizing cryptographic ownership of their assets. Toward this end,
7without jeopardizing cryptographic ownership of their assets. Toward this end,
10we created the *Urbit Hierarchical Deterministic (HD) Wallet* for the storage of
8we created the *Urbit Hierarchical Deterministic (HD) Wallet* for the storage of
@@ -21,7 +19,7 @@ are also derived from the wallet.
21Urbit HD wallets are composed of the following items, which are each assigned to
19Urbit HD wallets are composed of the following items, which are each assigned to
22their own individual Ethereum key-pairs.
20their own individual Ethereum key-pairs.
23
21
24−## Master Ticket
22+#### Master Ticket
25
23
26Think of your master ticket like a very high-value password. The master ticket
24Think of your master ticket like a very high-value password. The master ticket
27is the secret code from which all of your other keys are derived. Technically,
25is the secret code from which all of your other keys are derived. Technically,
@@ -29,49 +27,34 @@ your master ticket is seed entropy. You should never share it with anyone, and
29store it very securely. This ticket can derive all of your other keys: your
27store it very securely. This ticket can derive all of your other keys: your
30ownership key and all of the related proxies.
28ownership key and all of the related proxies.
31
29
32−## Ownership Address
30+#### Ownership Address
33
31
34An ownership address has all rights over the assets deeded to it. These rights
32An ownership address has all rights over the assets deeded to it. These rights
35are on-chain actions described and implemented in the Ecliptic, Azimuth's suite
33are on-chain actions described and implemented in the Ecliptic, Azimuth's suite
36of governing smart-contracts.
34of governing smart-contracts.
37
35
38−## Proxies
36+#### Proxies
39
37
40Proxy addresses allow you to execute non-ownership related actions like spawning
38Proxy addresses allow you to execute non-ownership related actions like spawning
41child points, voting, and setting networking keys without jeopardizing the keys
39child points, voting, and setting networking keys without jeopardizing the keys
42you've designated with ownership rights. Setting proxy rights is optional, but
40you've designated with ownership rights. Setting proxy rights is optional, but
43it is recommended for on-chain actions you will execute more frequently.
41it is recommended for on-chain actions you will execute more frequently.
44
42
45−### Management Proxy
43+- *Management Proxy*
46−
47−Can set Arvo networking keys and conduct sponsorship-related operations.
48−
49−#### Networking Keys
50−
51−Networking keys -- encryption and authentication key-pairs -- are used
52−for communicating on the Arvo network. They are contained in the keyfile
53−that you use to boot a ship.
54−
55−Unlike proxies, networking keys are not Ethereum wallets. They are just a public
56−key that is the point's state on the blockchain, combined with a private key
57−that is stored somewhere on your machine.
58−
59−The HD Wallet structure makes networking keys easy to change if the need arises.
60−If you want or need to rotate your keys, you only need to access your management proxy
61−to reset them. After you've done that, download a new keyfile and add it to your
62−ship.
63
44
64−### Voting Proxy
45+ Can configure or set Arvo networking keys and conduct sponsorship related
46+ operations.
65
47
66−Galaxies only. Galaxies are the part of the galactic senate, and this means
48+- *Voting Proxy*
67−they can cast votes on new proposals including changes to the Ecliptic.
68
49
69−### Spawn Proxy
50+ Galaxies only. Galaxies are the part of the galactic senate, and this means
51+ they can cast votes on new proposals including changes to the Ecliptic.
70
52
71−For stars and galaxies only. Can create new child points.
53+- *Spawn Proxy*
72
54
55+ For stars and galaxies only. Can create new child points.
73
56
74−;img@"https://media.urbit.org/fora/proposals/UP-8.jpg";
57+![](https://media.urbit.org/fora/proposals/UP-8.jpg)
75
58
76
59
77Most Ethereum tokens use the ERC-20 standard for smart contracts. Azimuth points
60Most Ethereum tokens use the ERC-20 standard for smart contracts. Azimuth points
@@ -88,5 +71,5 @@ Points, and all of their blockchain operations, are governed by the Ecliptic.
88The Ecliptic is an Ethereum smart-contract that governs point state and the
71The Ecliptic is an Ethereum smart-contract that governs point state and the
89ownership, spawn, management, and voting rights affiliated with your points.
72ownership, spawn, management, and voting rights affiliated with your points.
90
73
91−For the technical implementation details of Azimuth, take a look at the
74+For the technical implementation details Azimuth, take a look at the
92[Github repo](https://github.com/urbit/azimuth).
75[Github repo](https://github.com/urbit/azimuth).
concepts/community-tutorials.udon → concepts/community-tutorials.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'false'
3− sort/'9'
4− title/'Community Tutorials'
2+title = "Community Tutorials"
5− ==
3+weight = 9
6−;>
4+template = "doc.html"
7−
5+description = "A collection of unofficial but useful Urbit learning resources."
8−# Community Docs
6++++
9−
10Here are some tutorials written by members of the Urbit community. Some are a little outdated, but they may still prove useful.
7Here are some tutorials written by members of the Urbit community. Some are a little outdated, but they may still prove useful.
11
8
12- [Generators](https://github.com/joemfb/mardev/tree/master/docs/gen) by `~master-morzod`
9- [Generators](https://github.com/joemfb/mardev/tree/master/docs/gen) by `~master-morzod`
concepts/contributing.udon → concepts/contributing.mdrenamed+7−10
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Contributing"
3− sort/'3'
3+weight = 3
4− title/'Contributing'
4+template = "doc.html"
5− ==
5+description = "A guide to getting involved with the Urbit project."
6−;>
6++++
7−
8−# Contributing
9−
10We accept submissions for improving our [code](https://github.com/urbit/urbit/) and [documentation](https://github.com/urbit/docs/) alike.
7We accept submissions for improving our [code](https://github.com/urbit/urbit/) and [documentation](https://github.com/urbit/docs/) alike.
11
8
12If you're interested in contributing, but don't know where to start, feel free to [send us an email](mailto:support@urbit.org).
9If you're interested in contributing, but don't know where to start, feel free to [send us an email](mailto:support@urbit.org).
@@ -15,7 +12,7 @@ If you're interested in contributing, but don't know where to start, feel free t
15
12
16Our official guide to contributing can be found [here](https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md), which is most useful for large and low-level changes.
13Our official guide to contributing can be found [here](https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md), which is most useful for large and low-level changes.
17
14
18−Before contributing code, you should familiarize yourself with the [Hoon style guide](/docs/learn/hoon/style). For a good example of preferred Hoon coding style, see [ford.hoon](https://github.com/urbit/arvo/blob/master/sys/vane/ford.hoon).
15+Before contributing code, you should familiarize yourself with the [Hoon style guide](/docs/learn/arvo/style). For a good example of preferred Hoon coding style, see [ford.hoon](https://github.com/urbit/arvo/blob/master/sys/vane/ford.hoon).
19
16
20## Community Guidelines
17## Community Guidelines
21
18
concepts/galaxies-stars-and-planets.udon → concepts/galaxies-stars-and-planets.mdrenamed+7−7
@@ -1,9 +1,9 @@
1++++
1−:- :~ title/'Galaxies, Stars, and Planets'
2+title = "Galaxies, Stars, and Planets"
2− ==
3+weight = 7
3−;>
4+template = "doc.html"
4−
5+description = "An explanation of the Urbit address-space hierarchy. "
5−# Galaxies, Stars, and Planets
6++++
6−
7The current internet has no consistent system of identity. There are only quasi-identities such as IP addresses, Google accounts and email addresses, each able to be assumed and abandoned without much trouble. The result is a hostile social experience, since bad actors -- spammers, scammers, malware-spreaders, and harassers -- have an inexhaustible supply of places to hide.
7The current internet has no consistent system of identity. There are only quasi-identities such as IP addresses, Google accounts and email addresses, each able to be assumed and abandoned without much trouble. The result is a hostile social experience, since bad actors -- spammers, scammers, malware-spreaders, and harassers -- have an inexhaustible supply of places to hide.
8
8
9That's why we built a system for persistent identity called [Azimuth](../arvo-vs-azimuth). Azimuth identities are called _points_, and you need one to use the Arvo network. Points are secure, since they are owned and controlled with key-pair the Ethereum blockchain, which Azimuth is built on top of.
9That's why we built a system for persistent identity called [Azimuth](../arvo-vs-azimuth). Azimuth identities are called _points_, and you need one to use the Arvo network. Points are secure, since they are owned and controlled with key-pair the Ethereum blockchain, which Azimuth is built on top of.
@@ -26,7 +26,7 @@ Planets are intended for everyday use by an adult human, and there is a maximum
26
26
27## Moons and Comets
27## Moons and Comets
28
28
29−In addition to these three classes of Azimuth points, there two other kinds of Urbit identities, but they do _not_ use Azimuth.
29+In addition to these three classes of Azimuth points, there two other kinds of Urbit identities, but they do _not_ use Azimuth.
30
30
31*Moons* are 64 bits, are issued by planets, and have names like `~doznec-salfun-naptul-habrys`. Moons are meant for connected devices: phones, smart TVs, digital thermostats. Moons are not independent, but are subordinated to their parent planet.
31*Moons* are 64 bits, are issued by planets, and have names like `~doznec-salfun-naptul-habrys`. Moons are meant for connected devices: phones, smart TVs, digital thermostats. Moons are not independent, but are subordinated to their parent planet.
32
32
concepts/source-code-overview.udon → concepts/source-code-overview.mdrenamed+6−10
@@ -1,13 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'2'
5− title/'Source Code Overview'
2+title = "Source Code Overview"
6− ==
3+weight = 2
7−;>
4+template = "doc.html"
8−
5+description = "An explanation of Urbit's constituent GitHub repos."
9−# Source Code Overview
6++++
10−
11We host all our source code on GitHub at [github.com/urbit](https://github.com/urbit).
7We host all our source code on GitHub at [github.com/urbit](https://github.com/urbit).
12
8
13Since there's quite a number of repos, we'll talk about a few of the most
9Since there's quite a number of repos, we'll talk about a few of the most
concepts/technical-overview.udon → concepts/technical-overview.mdrenamed+7−11
@@ -1,13 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Technical overview"
3− next/'true'
3+weight = 1
4− sort/'1'
4+template = "doc.html"
5− title/'Technical overview'
5+description = "A more in-depth description of the entire Urbit stack."
6− ==
6++++
7−;>
8−
9−# Technical overview
10−
11Urbit is a clean-slate software stack designed to implement an encrypted P2P
7Urbit is a clean-slate software stack designed to implement an encrypted P2P
12network of general-purpose personal servers. Each server on this network is a
8network of general-purpose personal servers. Each server on this network is a
13deterministic computer called an 'urbit' that runs on a Unix-based virtual
9deterministic computer called an 'urbit' that runs on a Unix-based virtual
@@ -114,7 +110,7 @@ about 3000 lines of Hoon.
114### Nock
110### Nock
115
111
116Nock is a low-level [homoiconic](https://en.wikipedia.org/wiki/Homoiconicity)
112Nock is a low-level [homoiconic](https://en.wikipedia.org/wiki/Homoiconicity)
117−combinator language. It's so simple that its [specification](/docs/learn/nock/definition)
113+combinator language. It's so simple that its [specification](../../nock/definition)
118fits on a t-shirt. In some ways Nock resembles a nano-Lisp but its ambitions
114fits on a t-shirt. In some ways Nock resembles a nano-Lisp but its ambitions
119are more narrow. Most Lisps are one-layer: a practical language is to be
115are more narrow. Most Lisps are one-layer: a practical language is to be
120created by extending a theoretically simple interpreter. The abstraction is
116created by extending a theoretically simple interpreter. The abstraction is
getting-started.udon → introduction/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'1'
4− title/'Getting Started'
2+title = "Getting Started"
5− ==
3+weight = 1
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Getting Started
6++++
9−
10Pages in this section are guides to getting you started with Urbit.
7Pages in this section are guides to getting you started with Urbit.
11
8
12But first, the absolute basics. Arvo is the name of the Urbit operating system and the name of network. Azimuth is the name of the Urbit identity layer. Urbit is the project as the whole.
9But first, the absolute basics. Arvo is the name of the Urbit operating system and the name of network. Azimuth is the name of the Urbit identity layer. Urbit is the project as the whole.
getting-started/booting-a-ship.udon → introduction/booting-a-ship.mdrenamed+6−8
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Booting a Ship'
2+title = "Booting a Ship"
2− sort/'3'
3+weight = 3
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Booting a Ship
7−
8Now the rubber meets the road. You'll be booting your ship with the keyfile that you [downloaded from Bridge](../azimuth.udon).
6Now the rubber meets the road. You'll be booting your ship with the keyfile that you [downloaded from Bridge](../azimuth.udon).
9
7
10Note that this document is only for booting a ship that uses the live Arvo network. If you just want to create an unnetworked ship for development purposes, read [this guide](../creating-a-development-ship) instead.
8Note that this document is only for booting a ship that uses the live Arvo network. If you just want to create an unnetworked ship for development purposes, read [this guide](../creating-a-development-ship) instead.
@@ -13,7 +11,7 @@ Note that this document is only for booting a ship that uses the live Arvo netwo
13
11
14This will look something like `~lodleb-ritrul`. You can see the name of your point(s) when you log into your wallet using the Bridge client.
12This will look something like `~lodleb-ritrul`. You can see the name of your point(s) when you log into your wallet using the Bridge client.
15
13
16−;img@"http://media.urbit.org/site/bridge-0.png"(width "100%");
14+![](http://media.urbit.org/site/bridge-0.png)
17
15
18## Step 2: Find the path to your keyfile
16## Step 2: Find the path to your keyfile
19
17
getting-started/creating-a-development-ship.udon → introduction/creating-a-development-ship.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Creating a Development Ship'
2+title = "Creating a Development Ship"
2− sort/'4'
3+weight = 4
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Creating a Development Ship
7−
8To do work with Hoon and with the system, we recommended using a "fake" ship -- one not connected to the network.
6To do work with Hoon and with the system, we recommended using a "fake" ship -- one not connected to the network.
9
7
10Because such a ship has no presence on the network, you don't need an Azimuth identity for its purposes. You just need to have [installed our software](../installing-urbit).
8Because such a ship has no presence on the network, you don't need an Azimuth identity for its purposes. You just need to have [installed our software](../installing-urbit).
getting-started/installing-urbit.udon → introduction/installing-urbit.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Installing Urbit'
2+title = "Installing Urbit"
2− sort/'2'
3+weight = 2
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Installing Urbit
7−
8Arvo runs nicely on a Unix-like operating system -- Ubuntu, Fedora, macOS, and FreeBSD, for example. If you're using Windows, you'll need to get one of the aforementioned systems. Don't worry: most of them are free. Let's get it onto your machine.
6Arvo runs nicely on a Unix-like operating system -- Ubuntu, Fedora, macOS, and FreeBSD, for example. If you're using Windows, you'll need to get one of the aforementioned systems. Don't worry: most of them are free. Let's get it onto your machine.
9
7
10But first, some terminology:
8But first, some terminology:
getting-started/operating-a-star.udon → introduction/operating-a-star.mdrenamed+10−12
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Operating a Star'
2+title = "Operating a Star"
2− sort/'5'
3+weight = 5
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Operating a Star
7−
8A _ship_ is an instance of the Arvo operating system that is used as a personal server on the Arvo network. Stars are a type of ship that act as infrastructure for the Arvo network. In the Arvo ship-hierarchy, stars are below galaxies and above planets.
6A _ship_ is an instance of the Arvo operating system that is used as a personal server on the Arvo network. Stars are a type of ship that act as infrastructure for the Arvo network. In the Arvo ship-hierarchy, stars are below galaxies and above planets.
9
7
10Parallel to the Arvo network is Azimuth, the Urbit identity system that uses the Ethereum blockchain. All ships must boot with a corresponding _point_ -- an Azimuth identity -- to use the Arvo network.
8Parallel to the Arvo network is Azimuth, the Urbit identity system that uses the Ethereum blockchain. All ships must boot with a corresponding _point_ -- an Azimuth identity -- to use the Arvo network.
@@ -13,15 +11,15 @@ Important star operations happen on both the Arvo side and the Azimuth side. On
13
11
14## Powers of a Star
12## Powers of a Star
15
13
16−Stars are above planets in the network hierarchy in the sense that each star sponsors some number of planets: stars assist their planets by facilitating peer discovery, routing packets, providing DNS routing, and pushing software updates. A star is the *sponsor* of the planets it provides those services to; those planets, in turn, are the *dependents* of that star.
14+Stars are above planets in the network hierarchy in the sense that each star sponsors some number of planets: stars discover peers for planets, route packets for planets, provide DNS routing for planets, and push software updates to planets. A star that fulfills this is called the *sponsor* of planets that receive such services from the star; those planets, in turn, are called *dependents* of that star.
17
15
18−Stars are also the "parents" planets. A new planet comes into existence only when spawned by a parent star. A parent star is the sponsor of its child planets by default. This can change if a planet chooses to find a new sponsor (see the "Escaping a Sponsor" section below).
16+Stars are also the "parents" planets. A new planet comes into existence only when spawned by a parent star. A parent planet is the sponsor of its children planets by default. This can change if a planet chooses to find a new sponsor (see the "Escaping a Sponsor" section below).
19
17
20−Planets must have a sponsor star to use most features of the Arvo network. A planet cannot fully boot without a sponsor, and cannot make new connections to peers as long as it is not connected to a sponsor. Sponsorless planets will still be able to message known peers, until they change their IP addresses.
18+Planets must have a sponsor star to use most features of the Arvo network. A planet cannot boot without a sponsor, and cannot make new connections to peers as long as it is not connected to a sponsor. Sponsorless planets will still be able to message discovered peers until any such peers change their IP addresses.
21
19
22## Responsibilities
20## Responsibilities
23
21
24−Like with real-life infrastructure, the operation of Arvo infrastructure comes with unique responsibilities. For reasons stated above, stars that are depended upon as sponsors should always be online on a reliable cloud service. These systems have layers of redundancies that make them much more resilient than local machines, so stars hosted in the cloud are unlikely to leave their dependents in the dark.
22+Like with real-life infrastructure, the operation of Arvo infrastructure comes with unique responsibilities. For reasons stated above, stars should be always be online on a reliable cloud service, such as Amazon Web Services or Google Cloud Platform. These systems have layers of redundancies that make them much more resilient than local machines, so stars hosted on the cloud are unlikely to leave their dependents in the dark.
25
23
26## Operations
24## Operations
27
25
@@ -45,7 +43,7 @@ Occasionally, your star might lose network connectivity due to a known timer iss
45
43
46Planets are, of course, able to change sponsors. To do this, they must request that a different star takes them on as a dependent and that star must accept the request. Planets cannot emancipate themselves from a sponsor without having a new sponsor lined up.
44Planets are, of course, able to change sponsors. To do this, they must request that a different star takes them on as a dependent and that star must accept the request. Planets cannot emancipate themselves from a sponsor without having a new sponsor lined up.
47
45
48−All of these actions happen on Azimuth. There will be [Bridge](../using-bridge) functionality to handle these actions in the future, but for now users will need to interact directly with the contracts with MetaMask, through services such as [Etherscan.io](https://etherscan.io/address/ecliptic.eth#writeContract). A sketch of the process is listed below; for now, only the Ethereum-savvy should act on these steps.
46+All of these actions happen on Azimuth. There will be Bridge functionality to handle these actions in the future, but for now users will need to interact directly with the contracts with MetaMask, through services such as [Etherscan.io](https://etherscan.io/address/ecliptic.eth#writeContract). A sketch of the process is listed below; for now, only the Ethereum-savvy should act on these steps.
49
47
50+ The planet calls the `escape` function in the Ecliptic contract and writes the resulting data to the blockchain.
48+ The planet calls the `escape` function in the Ecliptic contract and writes the resulting data to the blockchain.
51+ If the chosen star wants to become the planet's sponsor, it calls the `adopt` function in the Ecliptic contract.
49+ If the chosen star wants to become the planet's sponsor, it calls the `adopt` function in the Ecliptic contract.
getting-started/using-bridge.udon → introduction/using-bridge.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Using Bridge'
2+title = "Using Bridge"
2− sort/'1'
3+weight = 1
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Using Bridge
7−
8[Bridge](https://github.com/urbit/bridge) is the client we built for interacting with [Azimuth](/docs/pki), the Urbit PKI, and managing your Azimuth identities, called _points_. Importantly, Bridge also allows you to generate a keyfile that you will need to boot your ship so that it can use the Arvo network.
6[Bridge](https://github.com/urbit/bridge) is the client we built for interacting with [Azimuth](/docs/pki), the Urbit PKI, and managing your Azimuth identities, called _points_. Importantly, Bridge also allows you to generate a keyfile that you will need to boot your ship so that it can use the Arvo network.
9
7
10This guide assumes that you own an Azimuth point, or that you have found someone to send an Azimuth point to your Ethereum address and are looking to claim it.
8This guide assumes that you own an Azimuth point, or that you have found someone to send an Azimuth point to your Ethereum address and are looking to claim it.
learn.udon → learn/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'4'
3− title/'Learn'
2+title = "Learn"
4− ==
3+weight = 4
5−;>
4+sort_by = "weight"
6−
5+template = "sections/docs/chapters.html"
7−# Learn
6++++
8−
9Tutorials and explanations for all the components of Urbit.
7Tutorials and explanations for all the components of Urbit.
10
8
11## Arvo(/docs/learn/arvo)
9## Arvo(/docs/learn/arvo)
learn/arvo.udon → learn/arvo.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Arvo'
2+title = "Arvo"
2− sort/'1'
3+weight = 1
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Arvo
7−
8Arvo is Urbit's functional operating system, written in [Hoon](/docs/learn/hoon). It's composed of modules called _vanes_:
6Arvo is Urbit's functional operating system, written in [Hoon](/docs/learn/hoon). It's composed of modules called _vanes_:
9
7
10## [Ames](ames)
8## [Ames](ames)
learn/arvo/_index.mdnew file+112
@@ -0,0 +1,112 @@
1++++
2+title = "Arvo"
3+weight = 1
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6++++
7+Arvo is Urbit's functional operating system, written in [Hoon](/docs/learn/hoon). It's composed of modules called _vanes_:
8+
9+## [Ames](ames)
10+
11+Ames is the name of our network and the vane that communicates over it. It's an encrypted P2P network composed of instances of the Arvo operating system.
12+
13+## [Behn](behn)
14+
15+Behn is our timer. It allows vanes and applications to set and timer events, which are managed in a simple priority queue.
16+
17+## [Clay](clay)
18+
19+Clay is our filesystem and revision-control system.
20+
21+## [Dill](dill)
22+
23+Dill is our terminal driver. Unix sends keyboard events to dill from the terminal, and dill produces terminal output.
24+
25+## [Eyre](eyre)
26+
27+Eyre is our HTTP server. Unix sends HTTP messages to `%eyre`, and `%eyre` produces HTTP messages in response.
28+
29+## [Ford](ford)
30+
31+Ford is our build system. It handles resources and publishing.
32+
33+## [Gall](gall)
34+
35+Gall is the vane for controlling userspace apps.
36+
37+### [Hall](hall)
38+
39+Hall isn't a vane, but an important Gall app that functions as the Urbit messaging protocol.
40+
41+## Principles
42+
43+At a high level `%arvo` takes a mess of Unix I/O events and turns them into something clean and structured for the programmer.
44+
45+`%arvo` is designed to avoid the usual state of complex event networks: event spaghetti. We keep track of every event's cause so that we have a clear causal chain for every computation. At the bottom of every chain is a Unix I/O event, such as a network request, terminal input, file sync, or timer event. We push every step in the path the request takes onto the chain until we get to the terminal cause of the computation. Then we use this causal stack to route results back to the caller.
46+
47+### Ducts
48+
49+The `%arvo` causal stack is called a `++duct`. This is represented simply as a list of paths, where each path represents a step in the causal chain. The first element in the path is the first letter of whichever vane handled that step in the computation, or the empty span for Unix.
50+
51+Here's a duct that was recently observed in the wild:
52+
53+```
54+~[
55+ /g/a/~zod/4_shell_terminal/u/time
56+ /g/a/~zod/shell_terminal/u/child/4/main
57+ /g/a/~zod/terminal/u/txt
58+ /d/term-mess
59+ //term/1
60+]
61+```
62+
63+This is the duct the timer vane receives when "timer" sample app asks the timer vane to set a timer. This is also the duct over which the response is produced at the specified time. Unix sent a terminal keystroke event (enter), and Arvo routed it to `%dill` (our terminal), which passed it on to the `%gall` app terminal, which sent it to shell, its child, which created a new child (with process id 4), which on startup asked the timer vane to set a timer.
64+
65+The timer vane saves this duct, so that when the specified time arrives and Unix sends a wakeup event to the timer vane, it can produce the response on the same duct. This response is routed to the place we popped off the top of the duct, i.e. the time app. This app produces the text "ding", which falls down to the shell, which drops it through to the terminal. Terminal drops this down to dill, which converts it into an effect that Unix will recognize as a request to print "ding" to the screen. When dill produces this, the last path in the duct has an
66+initial element of the empty span, so this is routed to Unix, which applies the effects.
67+
68+This is a call stack, with a crucial feature: the stack is a first-class citizen. You can respond over a duct zero, one, or many times. You can save ducts for later use. There are definitely parallels to Scheme-style continuations, but simpler and with more structure.
69+
70+### Making Moves
71+
72+If ducts are a call stack, then how do we make calls and produce results? Arvo processes "moves" which are a combination of message data and metadata. There are two types of moves. A `%pass` move is analogous to a call:
73+
74+```
75+[duct %pass return-path=path vane-name=@tD data=card]
76+```
77+
78+Arvo pushes the return path (preceded by the first letter of the vane name) onto the duct and sends the given data, a card, to the vane we specified. Any response will come along the same duct with the path `return-path`.
79+
80+A `%give` move is analogous to a return:
81+
82+```
83+[duct %give data=card]
84+```
85+
86+Arvo pops the top path off the duct and sends the given card back to the caller.
87+
88+### Vanes
89+
90+As shown above, we use Arvo proper to route and control the flow of moves. However, Arvo proper is rarely directly responsible for processing the event data that directly causes the desired outcome of a move. This event data is contained within a card, which is simply a `(pair term noun)`. Instead, Arvo proper passes the card off to one of its vanes, which each present an interface to clients for a particular well-defined, stable, and general-purpose piece of functionality.
91+
92+As of this writing, we have seven vanes, which each provide the following services:
93+
94+- `%ames`: the name of both our network and the vane that communicates over it.
95+- `%behn`: a simple timer.
96+- `%clay`: our version-controlled, referentially- transparent, and global filesystem.
97+- `%dill`: a terminal driver. Unix sends keyboard events to `%dill` from either the console or telnet, and `%dill` produces terminal output.
98+- `%eyre`: an http server. Unix sends http messages to `%eyre`, and `%eyre` produces http messages in response.
99+- `%ford`: handles resources and publishing.
100+- `%gall`: manages our userspace applications. `%gall` keeps state and manages subscribers.
101+
102+### Cards
103+
104+Cards are the vane-specific portion of a move. Each vane defines a protocol for interacting with other vanes (via Arvo) by defining four types of cards: kisses, gifts, notes, and signs.
105+
106+When one vane is `%pass`ed a card in its `++kiss`, Arvo activates the `++call` gate with the card as its argument. To produce a result, the vane `%give`s one of the cards defined in its `++gift`. If the vane needs to request something of another vane, it `%pass`es it a `++note` card. When that other vane returns a result, Arvo activates the `++take` gate of the initial vane with one of the cards defined in its `++sign`.
107+
108+In other words, there are only four ways of seeing a move: (1) as a request seen by the caller, which is a ++note. (2) that same request as seen by the callee, a `++kiss`. (3) the response to that first request as seen by the callee, a `++gift`. (4) the response to the first request as seen by the caller, a `++sign`.
109+
110+When a `++kiss` card is passed to a vane, Arvo calls its `++call` gate, passing it both the card and its duct. This gate must be defined in every vane. It produces two things in the following order: a list of moves and a possibly modified copy of its context. The moves are used to interact with other vanes, while the new context allows the vane to save its state. The next time Arvo activates the vane it will have this context as its subject.
111+
112+This overview has detailed how to pass a card to a particular vane. To see the cards each vane can be `%pass`ed as a `++kiss` or return as a `++gift` (as well as the semantics tied to them), each vane's public interface is explained in detail in its respective overview.
learn/arvo/ames.udon → learn/arvo/ames.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'1'
5− title/'Ames'
2+title = "Ames"
6− ==
3+weight = 1
7−;>
4+template = "doc.html"
8−
5++++
9−# Ames
10−
11Our networking protocol.
6Our networking protocol.
12
7
13`%ames` is the name of both our network and the vane that communicates
8`%ames` is the name of both our network and the vane that communicates
learn/arvo/behn.udon → learn/arvo/behn.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'2'
5− title/'Behn'
2+title = "Behn"
6− ==
3+weight = 2
7−;>
4+template = "doc.html"
8−
5++++
9−# Behn
10−
11Our simple timer.
6Our simple timer.
12
7
13It allows vanes and applications to set and timer events, which are
8It allows vanes and applications to set and timer events, which are
learn/arvo/clay.udon → learn/arvo/clay.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'3'
5− title/'Clay'
2+title = "Clay"
6− ==
3+weight = 3
7−;>
4+template = "doc.html"
8−
5++++
9−# Clay
10−
11Our filesystem.
6Our filesystem.
12
7
13`%clay` is version-controlled, referentially-transparent, and global.
8`%clay` is version-controlled, referentially-transparent, and global.
learn/arvo/dill.udon → learn/arvo/dill.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'4'
5− title/'Dill'
2+title = "Dill"
6− ==
3+weight = 4
7−;>
4+template = "doc.html"
8−
5++++
9−# Dill
10−
11Our terminal driver.
6Our terminal driver.
12
7
13Unix sends keyboard events to `%dill` from either the console or telnet,
8Unix sends keyboard events to `%dill` from either the console or telnet,
learn/arvo/eyre.udon → learn/arvo/eyre.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'5'
5− title/'Eyre'
2+title = "Eyre"
6− ==
3+weight = 5
7−;>
4+template = "doc.html"
8−
5++++
9−# Eyre
10−
11Our HTTP server.
6Our HTTP server.
12
7
13Unix sends http messages to `%eyre`, and `%eyre` produces http messages
8Unix sends http messages to `%eyre`, and `%eyre` produces http messages
learn/arvo/ford.udon → learn/arvo/ford.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'6'
5− title/'Ford'
2+title = "Ford"
6− ==
3+weight = 6
7−;>
4+template = "doc.html"
8−
5++++
9−# Ford
10−
11Our typed and marked computation engine.
6Our typed and marked computation engine.
12
7
13A variety of different services are provided by `%ford`, but they mostly
8A variety of different services are provided by `%ford`, but they mostly
learn/arvo/gall.udon → learn/arvo/gall.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'6'
4− title/'Gall Apps'
2+title = "Gall Apps"
5− ==
3+weight = 6
6−;>
4+template = "doc.html"
7−
5++++
8−# Gall Apps
9−
10This is documentation about how to write Gall apps. Some knowledge of Hoon is assumed.
6This is documentation about how to write Gall apps. Some knowledge of Hoon is assumed.
11
7
12> Note: the last major revision of these lessons was in 2016. They need to be
8> Note: the last major revision of these lessons was in 2016. They need to be
learn/arvo/hall.udon → learn/arvo/hall.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'7'
5− title/'Hall'
2+title = "Hall"
6− ==
3+weight = 7
7−;>
4+template = "doc.html"
8−
5++++
9−# Hall
10−
11> Last major revision of this tutorial: 2017. Some of the information and Hoon syntax here may
6> Last major revision of this tutorial: 2017. Some of the information and Hoon syntax here may
12 be outdated.
7 be outdated.
13
8
learn/azimuth.udon → learn/azimuth.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Azimuth'
2+title = "Azimuth"
2− sort/'2'
3+weight = 2
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Azimuth
7−
8Azimuth 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.
6Azimuth 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
7
10Azimuth is not, however, part of the Arvo 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.
8Azimuth is not, however, part of the Arvo 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.
learn/hoon.udon → learn/hoon/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'2'
4− title/'Hoon'
2+title = "Hoon"
5− ==
3+weight = 2
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Hoon
6++++
9−
10Hoon 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.
7Hoon 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.
11
8
12Hoon is an unusual language in several respects, both in syntax and semantics. It uses runes (i.e., ASCII digraphs) in place of keywords, and the spacing rules are a bit strict. A great deal can be expressed in few lines, though excessively compressed code tends to be hard to read. Hoon has surprisingly simple semantics, but mastering it requires learning concepts that don't have close analogues in other languages.
9Hoon is an unusual language in several respects, both in syntax and semantics. It uses runes (i.e., ASCII digraphs) in place of keywords, and the spacing rules are a bit strict. A great deal can be expressed in few lines, though excessively compressed code tends to be hard to read. Hoon has surprisingly simple semantics, but mastering it requires learning concepts that don't have close analogues in other languages.
learn/hoon/hoon-tutorial.udon → learn/hoon/hoon-tutorial/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'1'
4− title/'Hoon Tutorial'
2+title = "Hoon Tutorial"
5− ==
3+weight = 1
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Hoon Tutorial
6++++
9−
10This series is designed to teach you Hoon without assuming you have an extensive programming background. In fact, you should be able to follow much of it even if you have no programming experience at all, though of course experience helps. We strongly encourage you to try out all the examples of each lesson. These lessons are meant for the beginner but they aren't meant to be skimmed.
7This series is designed to teach you Hoon without assuming you have an extensive programming background. In fact, you should be able to follow much of it even if you have no programming experience at all, though of course experience helps. We strongly encourage you to try out all the examples of each lesson. These lessons are meant for the beginner but they aren't meant to be skimmed.
11
8
12Chapter 1 introduces and explains the fundamental concepts you need in order to understand Hoon's semantics.
9Chapter 1 introduces and explains the fundamental concepts you need in order to understand Hoon's semantics.
learn/hoon/hoon-tutorial/arms-and-cores.udon → learn/hoon/hoon-tutorial/arms-and-cores.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'14'
5− title/'Arms and Cores'
2+title = "Arms and Cores"
6− ==
3+weight = 14
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.4 Arms and Cores
10−
11The Hoon subject is a noun. Each fragment of this noun is either an arm or a leg. In the previous lesson you learned what a leg is, and how to return legs of the subject by various means. In this lesson you'll learn what an arm is. Arms are a bit more complex than legs -- a full understanding of them requires a bit more background knowledge. Accordingly, in this lesson we must also introduce an important Hoon data structure: a 'core'.
6The Hoon subject is a noun. Each fragment of this noun is either an arm or a leg. In the previous lesson you learned what a leg is, and how to return legs of the subject by various means. In this lesson you'll learn what an arm is. Arms are a bit more complex than legs -- a full understanding of them requires a bit more background knowledge. Accordingly, in this lesson we must also introduce an important Hoon data structure: a 'core'.
12
7
13After arms are defined and explained we review wing expressions, this time focusing on wing resolution to arms.
8After arms are defined and explained we review wing expressions, this time focusing on wing resolution to arms.
learn/hoon/hoon-tutorial/atoms-auras-and-simple-cell-types.udon → learn/hoon/hoon-tutorial/atoms-auras-and-simple-cell-types.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'24'
5− title/'Atoms, Auras, and Simple Cell Types'
2+title = "Atoms, Auras, and Simple Cell Types"
6− ==
3+weight = 24
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.4: Atoms, Auras, and Simple Cell Types
10−
11Like most modern high-level programming languages, Hoon has a type system. Because Hoon is a functional programming language, its type system differs somewhat from those of non-functional languages. In the next few lessons we'll go over Hoon's type system and point out some of its distinctive features. Certain advanced topics (e.g. type [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29)) won't be addressed until a later chapter.
6Like most modern high-level programming languages, Hoon has a type system. Because Hoon is a functional programming language, its type system differs somewhat from those of non-functional languages. In the next few lessons we'll go over Hoon's type system and point out some of its distinctive features. Certain advanced topics (e.g. type [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29)) won't be addressed until a later chapter.
12
7
13A type is ordinarily understood to be a set of values. Examples: the set of all atoms is a type, the set of all cells is a type, and so on.
8A type is ordinarily understood to be a set of values. Examples: the set of all atoms is a type, the set of all cells is a type, and so on.
learn/hoon/hoon-tutorial/cores-again.udon → learn/hoon/hoon-tutorial/cores-again.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Cores Again"
3− next/'true'
3+weight = 28
4− sort/'28'
4+template = "doc.html"
5− title/'Cores Again'
5++++
6− ==
7−;>
8−
9−# 2.8 Cores Again
10−
11In the last lesson you learned a bit about how to use cores as state machines. In this lesson you'll expand on that knowledge, in particular by learning how to use the `=^` rune. At the end of the lesson you'll learn how to write a generator that shuffles a 52 card deck and deals hands from it.
6In the last lesson you learned a bit about how to use cores as state machines. In this lesson you'll expand on that knowledge, in particular by learning how to use the `=^` rune. At the end of the lesson you'll learn how to write a generator that shuffles a 52 card deck and deals hands from it.
12
7
13## The `num` Core Again
8## The `num` Core Again
learn/hoon/hoon-tutorial/cores.udon → learn/hoon/hoon-tutorial/cores.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'27'
5− title/'Cores'
2+title = "Cores"
6− ==
3+weight = 27
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.7 Cores
10−
11You learned what a core is in previous lessons. After a brief review, let's talk about how to use cores effectively in Hoon programming.
6You learned what a core is in previous lessons. After a brief review, let's talk about how to use cores effectively in Hoon programming.
12
7
13A core is a particularly useful kind of Hoon data: a cell whose head is a battery and whose tail is a payload:
8A core is a particularly useful kind of Hoon data: a cell whose head is a battery and whose tail is a payload:
learn/hoon/hoon-tutorial/examples.udon → learn/hoon/hoon-tutorial/examples.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'33'
5− title/'Examples'
2+title = "Examples"
6− ==
3+weight = 33
7−;>
4+template = "doc.html"
8−
5++++
9−# Examples
10−
11Let's look at two more examples of Hoon code: the Sieve of Eratosthenes (a naive prime sieve) and a tic-tac-toe engine.
6Let's look at two more examples of Hoon code: the Sieve of Eratosthenes (a naive prime sieve) and a tic-tac-toe engine.
12
7
13## Sieve of Eratosthenes
8## Sieve of Eratosthenes
learn/hoon/hoon-tutorial/gates.udon → learn/hoon/hoon-tutorial/gates.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'15'
5− title/'Gates (Hoon Functions)'
2+title = "Gates (Hoon Functions)"
6− ==
3+weight = 15
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.5 Gates (Hoon Functions)
10−
11In this lesson you're going to learn about Hoon functions.
6In this lesson you're going to learn about Hoon functions.
12
7
13## What is a Function?
8## What is a Function?
learn/hoon/hoon-tutorial/hoon-programs.udon → learn/hoon/hoon-tutorial/hoon-programs.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'21'
5− title/'Hoon Programs'
2+title = "Hoon Programs"
6− ==
3+weight = 21
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.1 Writing Hoon Programs
10−
11So far you've only entered short snippets of Hoon code into the dojo. Let's look at some substantive programs.
6So far you've only entered short snippets of Hoon code into the dojo. Let's look at some substantive programs.
12
7
13There many kinds of Hoon programs: generators, Gall apps, Sail documents, and more. In this chapter we'll work exclusively with a subset of the first kind: generators. This narrow focus will allow us to set aside complications that aren't necessary for learning the basics of Hoon. We won't even talk about the full range of generators supported in Urbit just yet. Other kinds of programs will be covered in other lessons.
8There many kinds of Hoon programs: generators, Gall apps, Sail documents, and more. In this chapter we'll work exclusively with a subset of the first kind: generators. This narrow focus will allow us to set aside complications that aren't necessary for learning the basics of Hoon. We won't even talk about the full range of generators supported in Urbit just yet. Other kinds of programs will be covered in other lessons.
learn/hoon/hoon-tutorial/hoon-syntax.udon → learn/hoon/hoon-tutorial/hoon-syntax.mdrenamed+6−11
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Hoon Syntax"
3− next/'true'
3+weight = 22
4− sort/'22'
4+template = "doc.html"
5− title/'Hoon Syntax'
5++++
6− ==
7−;>
8−
9−# 2.2 Hoon Syntax
10−
11The study of Hoon can be divided into two parts: syntax and semantics.
6The study of Hoon can be divided into two parts: syntax and semantics.
12
7
13The [syntax](https://en.wikipedia.org/wiki/Syntax_(programming_languages%29) of a programming language is the set of rules that determine what counts as admissible code in that language. It determines which characters may be used in the source, and also how these characters may be assembled to constitute a program. Attempting to run a program that doesn't follow these rules will result in a syntax error.
8The [syntax](https://en.wikipedia.org/wiki/Syntax_(programming_languages%29) of a programming language is the set of rules that determine what counts as admissible code in that language. It determines which characters may be used in the source, and also how these characters may be assembled to constitute a program. Attempting to run a program that doesn't follow these rules will result in a syntax error.
@@ -18,7 +13,7 @@ In this lesson we cover Hoon's syntax. A strict account of Hoon's syntax would
18
13
19## Hoon Characters
14## Hoon Characters
20
15
21−Hoon source files are composed almost entirely of the [printable ASCII characters](https://en.wikipedia.org/wiki/ASCII#Printable_characters). Hoon does not accept any other characters in source files except for [UTF-8](https://en.wikipedia.org/wiki/UTF-8) in quoted strings. Hard tab characters are illegal; use two spaces instead.
16+Hoon source files are composed almost entirely of the [printable ASCII characters](https://en.wikipedia.org/wiki/ASCII#Printable_characters). Hoon does not accept any other characters in source files except for [UTF-8](https://en.wikipedia.org/wiki/UTF-8) in quoted strings. Hard tab characters are illegal.
22
17
23```
18```
24> "You can put ½ in quotes, but not elsewhere!"
19> "You can put ½ in quotes, but not elsewhere!"
learn/hoon/hoon-tutorial/lists.udon → learn/hoon/hoon-tutorial/lists.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Standard Library: Lists"
3− next/'true'
3+weight = 29
4− sort/'29'
4+template = "doc.html"
5− title/'Standard Library: Lists'
5++++
6− ==
7−;>
8−
9−# 2.9 Standard Library: Lists
10−
11In this lesson we'll review what a list is and then cover many of the list-related functions in the Hoon standard library.
6In this lesson we'll review what a list is and then cover many of the list-related functions in the Hoon standard library.
12
7
13## List Review
8## List Review
learn/hoon/hoon-tutorial/multi-gate-cores-and-doors.udon → learn/hoon/hoon-tutorial/multi-gate-cores-and-doors.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Multi-gate Cores and Doors"
3− next/'true'
3+weight = 16
4− sort/'16'
4+template = "doc.html"
5− title/'Multi-gate Cores and Doors'
5++++
6− ==
7−;>
8−
9−# 1.6 Multi-gate Cores and Doors
10−
11It's useful to have cores whose arms evaluate to make gates. The use of such cores is common in Hoon; that's how the functions of the Hoon standard library are stored in the subject. Learning about such cores will also deepen the reader's understanding of Hoon semantics, and for that reason alone is worthwhile.
6It's useful to have cores whose arms evaluate to make gates. The use of such cores is common in Hoon; that's how the functions of the Hoon standard library are stored in the subject. Learning about such cores will also deepen the reader's understanding of Hoon semantics, and for that reason alone is worthwhile.
12
7
13In this lesson you'll also learn about a new kind of core, called a 'door'.
8In this lesson you'll also learn about a new kind of core, called a 'door'.
learn/hoon/hoon-tutorial/nouns.udon → learn/hoon/hoon-tutorial/nouns.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'12'
5− title/'Nouns'
2+title = "Nouns"
6− ==
3+weight = 12
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.2 Nouns
10−
11In Urbit every piece of data is a noun. In order to understand Hoon one must first understand nouns.
6In Urbit every piece of data is a noun. In order to understand Hoon one must first understand nouns.
12
7
13## Noun Definition
8## Noun Definition
learn/hoon/hoon-tutorial/setup.udon → learn/hoon/hoon-tutorial/setup.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'11'
5− title/'Setup'
2+title = "Setup"
6− ==
3+weight = 11
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.1 Setup
10−
11Before we begin working on Hoon you should first (1) have Urbit installed and (2) boot an 'urbit' that you can use for trying out Hoon examples. Interactive learning is far superior to passive reading.
6Before we begin working on Hoon you should first (1) have Urbit installed and (2) boot an 'urbit' that you can use for trying out Hoon examples. Interactive learning is far superior to passive reading.
12
7
13## Installing Urbit
8## Installing Urbit
learn/hoon/hoon-tutorial/simple-one-gate-programs.udon → learn/hoon/hoon-tutorial/simple-one-gate-programs.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'23'
5− title/'Simple One-Gate Programs'
2+title = "Simple One-Gate Programs"
6− ==
3+weight = 23
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.3 Simple One-Gate Programs
10−
11In this lesson we'll try to cover enough basic Hoon so that you can write (and understand) your own simple programs. Each of the programs given in this lesson produces a gate. (Gates are one-armed cores of Hoon that can be used as functions -- this is covered in [lesson 1.5](../gates).)
6In this lesson we'll try to cover enough basic Hoon so that you can write (and understand) your own simple programs. Each of the programs given in this lesson produces a gate. (Gates are one-armed cores of Hoon that can be used as functions -- this is covered in [lesson 1.5](../gates).)
12
7
13For each program we encourage you to: (1) write out the program yourself, (2) save it to the `/home/gen` directory of your urbit's pier, and (3) run it from the dojo. The best way to learn to program in Hoon is by getting your hands dirty.
8For each program we encourage you to: (1) write out the program yourself, (2) save it to the `/home/gen` directory of your urbit's pier, and (3) run it from the dojo. The best way to learn to program in Hoon is by getting your hands dirty.
learn/hoon/hoon-tutorial/structures-and-complex-types.udon → learn/hoon/hoon-tutorial/structures-and-complex-types.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Structures and Complex Types"
3− next/'true'
3+weight = 26
4− sort/'26'
4+template = "doc.html"
5− title/'Structures and Complex Types'
5++++
6− ==
7−;>
8−
9−# 2.6 Structures and Complex Types
10−
11In this lesson we'll talk a little about how type expressions become structures, and how these structures manifest in different ways in different parts of your Hoon code. We'll also talk about how to create your own custom-defined complex types from simpler ones.
6In this lesson we'll talk a little about how type expressions become structures, and how these structures manifest in different ways in different parts of your Hoon code. We'll also talk about how to create your own custom-defined complex types from simpler ones.
12
7
13## Structures
8## Structures
learn/hoon/hoon-tutorial/the-subject-and-its-legs.udon → learn/hoon/hoon-tutorial/the-subject-and-its-legs.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'13'
5− title/'The Subject and Its Legs'
2+title = "The Subject and Its Legs"
6− ==
3+weight = 13
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.3 The Subject and Its Legs
10−
11Hoon isn't an object-oriented programming language; it's a "subject-oriented" programming language. But what's this "subject"?
6Hoon isn't an object-oriented programming language; it's a "subject-oriented" programming language. But what's this "subject"?
12
7
13## A Start
8## A Start
learn/hoon/hoon-tutorial/trees-sets-and-maps.udon → learn/hoon/hoon-tutorial/trees-sets-and-maps.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Standard Library: Trees, Sets, and Maps"
3− next/'true'
3+weight = 30
4− sort/'30'
4+template = "doc.html"
5− title/'Standard Library: Trees, Sets, and Maps'
5++++
6− ==
7−;>
8−
9−# 2.10 Hoon Standard Library: Trees, Sets, and Maps
10−
11Along with lists, the Hoon standard library also supports trees, sets, and maps as data structures. A Hoon `tree` is the data structure for a binary tree. A Hoon `set` is the data structure for a set of values. A Hoon `map` is the data structure for a set of `[key value]` pairs.
6Along with lists, the Hoon standard library also supports trees, sets, and maps as data structures. A Hoon `tree` is the data structure for a binary tree. A Hoon `set` is the data structure for a set of values. A Hoon `map` is the data structure for a set of `[key value]` pairs.
12
7
13In this lesson we'll cover each.
8In this lesson we'll cover each.
learn/hoon/hoon-tutorial/type-checking-and-type-inference.udon → learn/hoon/hoon-tutorial/type-checking-and-type-inference.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'25'
5− title/'Type Checking and Type Inference'
2+title = "Type Checking and Type Inference"
6− ==
3+weight = 25
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.5 Type Checking and Type Inference
10−
11As the Hoon compiler compiles your Hoon code, it does a *type check* on certain expressions to make sure they are guaranteed to produce a value of the correct type. If it cannot be proved that the output value is correctly typed, the compile will fail with a `nest-fail` crash. In order to figure out what type of value is produced by a given expression, the compiler uses *type inference* on that code. In this lesson we'll cover various cases in which a type check is performed, and also how the compiler does type inference on an expression.
6As the Hoon compiler compiles your Hoon code, it does a *type check* on certain expressions to make sure they are guaranteed to produce a value of the correct type. If it cannot be proved that the output value is correctly typed, the compile will fail with a `nest-fail` crash. In order to figure out what type of value is produced by a given expression, the compiler uses *type inference* on that code. In this lesson we'll cover various cases in which a type check is performed, and also how the compiler does type inference on an expression.
12
7
13## Type Checking
8## Type Checking
learn/hoon/hoon-tutorial/type-polymorphism.udon → learn/hoon/hoon-tutorial/type-polymorphism.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'31'
4− title/'Type Polymorphism'
2+title = "Type Polymorphism"
5− ==
3+weight = 31
6−;>
4+template = "doc.html"
7−
5++++
8−# 3.1 Polymorphism
9−
10There are many cases in which one may want to write a function that accepts as input various different types of data. Such a function is said to be [polymorphic](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29). ("Polymorphism" = "many forms"; so polymorphic functions accept many forms of data as input.)
6There are many cases in which one may want to write a function that accepts as input various different types of data. Such a function is said to be [polymorphic](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29). ("Polymorphism" = "many forms"; so polymorphic functions accept many forms of data as input.)
11
7
12One relatively trivial form of polymorphism involves sub-typing. A gate whose sample is a raw `noun` can accept any Hoon data structure as input -- it's just that the sample will only be treated as a raw noun. For example, consider the `copy` gate below:
8One relatively trivial form of polymorphism involves sub-typing. A gate whose sample is a raw `noun` can accept any Hoon data structure as input -- it's just that the sample will only be treated as a raw noun. For example, consider the `copy` gate below:
learn/hoon/style.udon → learn/hoon/style.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Hoon Style Guide"
3− sort/'3'
3+weight = 3
4− title/'Hoon Style Guide'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Hoon Style Guide
9−
10Welcome to the Hoon style guide. It's important to familiarize yourself with our way of writing Hoon code.
6Welcome to the Hoon style guide. It's important to familiarize yourself with our way of writing Hoon code.
11
7
12## Layout
8## Layout
learn/hoon/workbook.udon → learn/hoon/workbook/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'2'
4− title/'Hoon Workbook'
2+title = "Hoon Workbook"
5− ==
3+weight = 2
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Hoon Workbook
6++++
9−
10The Workbook is the place to sharpen your Hoon skills. Each entry in the
7The Workbook is the place to sharpen your Hoon skills. Each entry in the
11Workbook is a code walkthrough followed by exercises.
8Workbook is a code walkthrough followed by exercises.
12
9
learn/hoon/workbook/bomb.udon → learn/hoon/workbook/bomb.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'7'
4− title/'Bomb Defusing'
2+title = "Bomb Defusing"
5− ==
3+weight = 7
6−;>
4+template = "doc.html"
7−
5++++
8−# Bomb Defusing
9−
10In this exercise, we will build a generator that takes a list of wires to be cut
6In this exercise, we will build a generator that takes a list of wires to be cut
11in order to defuse a bomb. The bomb is defused according to the following rules.
7in order to defuse a bomb. The bomb is defused according to the following rules.
12
8
learn/hoon/workbook/caesar.udon → learn/hoon/workbook/caesar.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'2'
4− title/'Caesar Cipher'
2+title = "Caesar Cipher"
5− ==
3+weight = 2
6−;>
4+template = "doc.html"
7−
5++++
8−# Caesar Cipher
9−
10A Caesar cipher is a very simple way to obfuscate a message. The technique
6A Caesar cipher is a very simple way to obfuscate a message. The technique
11takes a string and swaps out each component letter with another letter that is
7takes a string and swaps out each component letter with another letter that is
12a specified number of positions up or down in the alphabet. For example, with a
8a specified number of positions up or down in the alphabet. For example, with a
learn/hoon/workbook/digits.udon → learn/hoon/workbook/digits.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'4'
4− title/'Digits'
2+title = "Digits"
5− ==
3+weight = 4
6−;>
4+template = "doc.html"
7−
5++++
8−# Digits
9−
10Let's write a generator that takes a `@ud` (unsigned decimal) and returns a list
6Let's write a generator that takes a `@ud` (unsigned decimal) and returns a list
11of its digits.
7of its digits.
12
8
learn/hoon/workbook/eightball.udon → learn/hoon/workbook/eightball.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'5'
4− title/'Magic 8-Ball'
2+title = "Magic 8-Ball"
5− ==
3+weight = 5
6−;>
4+template = "doc.html"
7−
5++++
8−# Magic 8-Ball
9−
10In this lesson we'll write a generator that mimics the functionality of a
6In this lesson we'll write a generator that mimics the functionality of a
11Magic 8-Ball, producing a randomized response with each run.
7Magic 8-Ball, producing a randomized response with each run.
12
8
learn/hoon/workbook/list.udon → learn/hoon/workbook/list.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "List of Numbers"
3− sort/'1'
3+weight = 1
4− title/'List of Numbers'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# List of Numbers
9−
10This code-example is intended to familiarize you with the basics of Hoon syntax. It's okay if you don't understand everything immediately; some concepts may beyond your grasp for now. What's important is that you become accustomed to the elements of the code and their look once combined into a valid program.
6This code-example is intended to familiarize you with the basics of Hoon syntax. It's okay if you don't understand everything immediately; some concepts may beyond your grasp for now. What's important is that you become accustomed to the elements of the code and their look once combined into a valid program.
11
7
12Below is a simple Hoon program that takes a single number `n` from the user as input and produces a list of numbers from `1` up to (but not including) `n`. So, if the user gives the number `5`, the program will produce: `~[1 2 3 4]`.
8Below is a simple Hoon program that takes a single number `n` from the user as input and produces a list of numbers from `1` up to (but not including) `n`. So, if the user gives the number `5`, the program will produce: `~[1 2 3 4]`.
learn/hoon/workbook/recursion.udon → learn/hoon/workbook/recursion.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'3'
4− title/'Recursion'
2+title = "Recursion"
5− ==
3+weight = 3
6−;>
4+template = "doc.html"
7−
5++++
8−# Recursion
9−
10Recursion is a common pattern for solving certain problems in most programming
6Recursion is a common pattern for solving certain problems in most programming
11languages, and Hoon is no exception. One of the classically recursive problems
7languages, and Hoon is no exception. One of the classically recursive problems
12is that of factorial. The factorial of _n_ is the product of all positive
8is that of factorial. The factorial of _n_ is the product of all positive
learn/hoon/workbook/traffic-light.udon → learn/hoon/workbook/traffic-light.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'6'
4− title/'Traffic Light'
2+title = "Traffic Light"
5− ==
3+weight = 6
6−;>
4+template = "doc.html"
7−
5++++
8−# Traffic Light
9−
10Let's create a state machine in Hoon that models the functionality of a traffic
6Let's create a state machine in Hoon that models the functionality of a traffic
11light. Save the code below as `traffic.hoon` in your `/gen` directory.
7light. Save the code below as `traffic.hoon` in your `/gen` directory.
12
8
learn/nock.udon → learn/nock/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'3'
4− title/'Nock'
2+title = "Nock"
5− ==
3+weight = 3
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Nock
6++++
9−
10> Last major revision of this tutorial: 2016. Minor revisions were made in October 2018 to bring it in line with the new Nock 4K spec.
7> Last major revision of this tutorial: 2016. Minor revisions were made in October 2018 to bring it in line with the new Nock 4K spec.
11
8
12Nock 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.
9Nock 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.
learn/nock/definition.udon → learn/nock/definition.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'1'
5− title/'Nock Definition'
2+title = "Nock Definition"
6− ==
3+weight = 1
7−;>
4+template = "doc.html"
8−
5++++
9−# Nock Definition
10−
11Nock is a Turing-complete function that maps a cell
6Nock is a Turing-complete function that maps a cell
12`[subject formula]` to a noun `product`, where `subject` is the
7`[subject formula]` to a noun `product`, where `subject` is the
13data, `formula` is the code, and `product` is the result.
8data, `formula` is the code, and `product` is the result.
learn/nock/example.udon → learn/nock/example.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'3'
5− title/'Example'
2+title = "Example"
6− ==
3+weight = 3
7−;>
4+template = "doc.html"
8−
5++++
9−# Nock by hand
10−
11Some people write assembly language by hand. Some of them have a
6Some people write assembly language by hand. Some of them have a
12good reason to do so. But there's no good reason to write Nock by
7good reason to do so. But there's no good reason to write Nock by
13hand, ever.
8hand, ever.
learn/nock/explanation.udon → learn/nock/explanation.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'2'
5− title/'Explanation'
2+title = "Explanation"
6− ==
3+weight = 2
7−;>
4+template = "doc.html"
8−
5++++
9−# An explanation of Nock
10−
11To make Nock make sense, let's work through the spec line by line.
6To make Nock make sense, let's work through the spec line by line.
12First the data model:
7First the data model:
13
8
learn/nock/implementations.udon → learn/nock/implementations.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'4'
4− title/'Implementations'
2+title = "Implementations"
5− ==
3+weight = 4
6−;>
4+template = "doc.html"
7−
5++++
8−# Nock Implementations
9−
10We use a C implementation for our Nock interpreter. But building a Nock interpreter in another language is a fun exercise. Check out our community Nock implementations, shown below our official C implementation. (Note: the community implementations were written for a slightly older version of Nock, Nock 5K. The current version is Nock 4K.):
6We use a C implementation for our Nock interpreter. But building a Nock interpreter in another language is a fun exercise. Check out our community Nock implementations, shown below our official C implementation. (Note: the community implementations were written for a slightly older version of Nock, Nock 5K. The current version is Nock 4K.):
11
7
12## Table of Contents
8## Table of Contents
learn/vere.udon → learn/vere/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'4'
4− title/'Vere'
2+title = "Vere"
5− ==
3+weight = 4
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Vere
6++++
9−
10The Nock runtime system, written in C.
7The Nock runtime system, written in C.
11
8
12Keep reading if you're planning to work on the Urbit interpreter, you're a
9Keep reading if you're planning to work on the Urbit interpreter, you're a
learn/vere/api.udon → learn/vere/api.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'4'
2+title = "API overview by prefix"
3− next/'true'
3+weight = 4
4− title/'API overview by prefix'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−## u3: API overview by prefix
9−
10Let's run through the `u3` modules one by one. All public
6Let's run through the `u3` modules one by one. All public
11functions are commented, but the comments may be cryptic.
7functions are commented, but the comments may be cryptic.
12
8
learn/vere/c.udon → learn/vere/c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'2'
3− next/'true'
4− title/'C in Urbit'
2+title = "C in Urbit"
5− ==
3+weight = 4
6−;>
4+template = "doc.html"
7−
5++++
8−## c3: C in Urbit
9−
10Under `u3` is the simple `c3` layer, which is just how we write C
6Under `u3` is the simple `c3` layer, which is just how we write C
11in Urbit.
7in Urbit.
12
8
learn/vere/jetting.udon → learn/vere/jetting.mdrenamed+5−8
@@ -1,11 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'5'
3− title/'Writing Jets'
2+title = "Writing Jets"
4− ==
3+weight = 5
5−;>
4+template = "doc.html"
6−
5++++
7−# How to write a jet
8−
9A guide for new Urbit developers.
6A guide for new Urbit developers.
10
7
11Problem statement: coder A has written some Hoon and you, coder B, need to jet it.
8Problem statement: coder A has written some Hoon and you, coder B, need to jet it.
learn/vere/nouns.udon → learn/vere/nouns.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'3'
3− next/'true'
4− title/'Land of Nouns'
2+title = "Land of Nouns"
5− ==
3+weight = 3
6−;>
4+template = "doc.html"
7−
5++++
8−## u3: Land of nouns
9−
10The division between `c3` and `u3` is that you could theoretically
6The division between `c3` and `u3` is that you could theoretically
11imagine using `c3` as just a generic C environment. Anything to do
7imagine using `c3` as just a generic C environment. Anything to do
12with nouns is in `u3`.
8with nouns is in `u3`.
learn/vere/runtime.udon → learn/vere/runtime.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'1'
3− next/'true'
4− title/'C Runtime System'
2+title = "C Runtime System"
5− ==
3+weight = 1
6−;>
4+template = "doc.html"
7−
5++++
8−# C runtime system
9−
10The Urbit interpreter is built on a Nock runtime system written
6The Urbit interpreter is built on a Nock runtime system written
11in C, `u3`. This section is a relatively complete description.
7in C, `u3`. This section is a relatively complete description.
12
8
reference.udon → reference/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'5'
3− title/'Reference'
2+title = "Reference"
4− ==
3+weight = 5
5−;>
4+sort_by = "weight"
6−
5+template = "sections/docs/chapters.html"
7−# Reference
6++++
8−
9Various reference documents are stored here, particularly for Hoon, but also for other parts of the system.
7Various reference documents are stored here, particularly for Hoon, but also for other parts of the system.
10
8
11## [The Glossary](glossary)
9## [The Glossary](glossary)
reference/cheat-sheet.udon → reference/cheat-sheet.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Cheat sheet'
2+title = "Cheat sheet"
2− sort/'4'
3+weight = 4
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Hoon cheat sheet
7−
8##### `~rovnys-ricfer`
6##### `~rovnys-ricfer`
9
7
10_Original Fora post_ [here](https://urbit.org/fora/posts/~2017.9.18..22.31.06..24d5~).
8_Original Fora post_ [here](https://urbit.org/fora/posts/~2017.9.18..22.31.06..24d5~).
reference/glossary.udon → reference/glossary.mdrenamed+5−8
@@ -1,11 +1,8 @@
1++++
1−:- :~ title/'Glossary'
2+title = "Glossary"
2− sort/'3'
3+weight = 3
3− ==
4+template = "doc.html"
4−
5++++
5−;>
6−
7−# Glossary
8−
9Urbit is renowned for its exotic terminology. Here's a simple overview
6Urbit is renowned for its exotic terminology. Here's a simple overview
10from the strange words within.
7from the strange words within.
11
8
reference/hoon-expressions.udon → reference/hoon-expressions/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1++++
1−:- :~ title/'Hoon Expressions'
2+title = "Hoon Expressions"
2− sort/'1'
3+weight = 1
3− ==
4+sort_by = "weight"
4−
5+template = "sections/docs/chapters.html"
5−;>
6++++
6−
7−# Hoon Expressions
8−
9Documentation for Hoon expressions.
7Documentation for Hoon expressions.
10
8
11## [Runes](runes)
9## [Runes](runes)
reference/hoon-expressions/advanced.udon → reference/hoon-expressions/advanced.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'5'
4− title/'Advanced Types'
2+title = "Advanced Types"
5− ==
3+weight = 5
6−;>
4+template = "doc.html"
7−
5++++
8−# Advanced types
9−
10The definition of `type` in the 'Basic Types' section is only a simplified version. The Hoon type system is simple, but not *that* simple.
6The definition of `type` in the 'Basic Types' section is only a simplified version. The Hoon type system is simple, but not *that* simple.
11
7
12The good news is that you can *skip this section*, at least when
8The good news is that you can *skip this section*, at least when
reference/hoon-expressions/basic.udon → reference/hoon-expressions/basic.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'4'
4− title/'Basic Types'
2+title = "Basic Types"
5− ==
3+weight = 4
6−;>
4+template = "doc.html"
7−
5++++
8−# Basic types
9−
10A type is usually understood to be a set of values. Hoon values are all nouns,
6A type is usually understood to be a set of values. Hoon values are all nouns,
11so a Hoon type is a set of nouns.
7so a Hoon type is a set of nouns.
12
8
reference/hoon-expressions/irregular.udon → reference/hoon-expressions/irregular.mdrenamed+5−8
@@ -1,11 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'7'
3− title/'Irregular forms'
2+title = "Irregular forms"
4− ==
3+weight = 7
5−;>
4+template = "doc.html"
6−
5++++
7−## Irregular forms, a compilation
8−
9##### `~palfun-foslup`
6##### `~palfun-foslup`
10
7
11##### Reading guide
8##### Reading guide
reference/hoon-expressions/limb.udon → reference/hoon-expressions/limb/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'3'
4− title/'Limbs and Wings'
5− ==
6−;>
7−
8−# Limbs and wings
2+title = "Limbs and wings"
9−
3+weight = 3
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6++++
10One feature Hoon lacks: a context that isn't a first-class value. Hoon has no
7One feature Hoon lacks: a context that isn't a first-class value. Hoon has no
11concept of scope, environment, etc. An expression has exactly one data source,
8concept of scope, environment, etc. An expression has exactly one data source,
12the *subject*, a noun like any other.
9the *subject*, a noun like any other.
reference/hoon-expressions/limb/limb.udon → reference/hoon-expressions/limb/limb.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'1'
4− title/'Limbs'
2+title = "Limbs"
5− ==
3+weight = 1
6−;>
4+template = "doc.html"
7−
5++++
8−# Limb Expressions
9−
10A limb is an attribute of subject.
6A limb is an attribute of subject.
11
7
12### Produces
8### Produces
reference/hoon-expressions/limb/wing.udon → reference/hoon-expressions/limb/wing.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'2'
4− title/'Wings'
2+title = "Wings"
5− ==
3+weight = 2
6−;>
4+template = "doc.html"
7−
5++++
8−# Wing Expressions
9−
10`[%wing p=(list limb)]`
6`[%wing p=(list limb)]`
11
7
12A wing is a limb search path into the subject.
8A wing is a limb search path into the subject.
reference/hoon-expressions/rune.udon → reference/hoon-expressions/rune/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'2'
3− title/'Runes'
2+title = "Runes"
4− ==
3+weight = 2
5−;>
4+sort_by = "weight"
6−
5+template = "sections/docs/chapters.html"
7−# Runes
6++++
8−
9Runes are a way to form expressions in Hoon.
7Runes are a way to form expressions in Hoon.
10
8
11## Non-Rune Expressions
9## Non-Rune Expressions
reference/hoon-expressions/rune/bar.udon → reference/hoon-expressions/rune/bar.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Cores"
3− sort/'7'
3+weight = 7
4− title/'Cores | ("bar")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Cores `|` "bar"
9−
10Core expressions produce cores. A core is a cell of `[battery payload]`.
6Core expressions produce cores. A core is a cell of `[battery payload]`.
11The `battery` is code, a battery of Nock formulas. The `payload` is the data
7The `battery` is code, a battery of Nock formulas. The `payload` is the data
12needed to run those formulas correctly.
8needed to run those formulas correctly.
reference/hoon-expressions/rune/buc.udon → reference/hoon-expressions/rune/buc.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Structures"
3− sort/'12'
3+weight = 12
4− title/'Structures $ ("buc")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Structures $ ("buc")
9−
10The `$` family of runes is used for defining custom types. Strictly speaking,
6The `$` family of runes is used for defining custom types. Strictly speaking,
11these runes are used to produce 'structures'. A structure is a compile-time
7these runes are used to produce 'structures'. A structure is a compile-time
12value that at runtime can be converted to either an example value (sometimes
8value that at runtime can be converted to either an example value (sometimes
reference/hoon-expressions/rune/cen.udon → reference/hoon-expressions/rune/cen.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Calls"
3− sort/'10'
3+weight = 10
4− title/'Calls % ("cen")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Calls `%` ("cen")
9−
10The `%` family of runes is used for making 'function calls' in Hoon. To be more precise, these runes evaluate the `$` arm in cores, usually after modifying the sample. (The default sample is replaced with the input values given in the call.)
6The `%` family of runes is used for making 'function calls' in Hoon. To be more precise, these runes evaluate the `$` arm in cores, usually after modifying the sample. (The default sample is replaced with the input values given in the call.)
11
7
12These runes reduce to the `%=` rune
8These runes reduce to the `%=` rune
reference/hoon-expressions/rune/col.udon → reference/hoon-expressions/rune/col.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Cells"
3− sort/'9'
3+weight = 9
4− title/'Cells : ("col")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Cells `:` ("col")
9−
10The `:` ("col") expressions are used to produce cells, which are pairs of values. E.g., `:-(p q)` produces the cell `[p q]`. All `:` runes reduce to `:-`.
6The `:` ("col") expressions are used to produce cells, which are pairs of values. E.g., `:-(p q)` produces the cell `[p q]`. All `:` runes reduce to `:-`.
11
7
12## Runes
8## Runes
reference/hoon-expressions/rune/constants.udon → reference/hoon-expressions/rune/constants.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Atoms and strings"
3− sort/'1'
3+weight = 1
4− title/'Atoms and strings'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Atoms and strings
9−
10The simplest expressions in every language are constants:
6The simplest expressions in every language are constants:
11atoms, strings, paths. (Strings and paths aren't all constants per
7atoms, strings, paths. (Strings and paths aren't all constants per
12se, because they have interpolations.)
8se, because they have interpolations.)
reference/hoon-expressions/rune/dot.udon → reference/hoon-expressions/rune/dot.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Nock"
3− sort/'3'
3+weight = 3
4− title/'Nock . ("dot")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Nock `.` ("dot")
9−
10Anything Nock can do, Hoon can do also. These runes are used for carrying out Nock operations in Hoon.
6Anything Nock can do, Hoon can do also. These runes are used for carrying out Nock operations in Hoon.
11
7
12## Runes
8## Runes
reference/hoon-expressions/rune/ket.udon → reference/hoon-expressions/rune/ket.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Casts"
3− sort/'11'
3+weight = 11
4− title/'Casts ^ ("ket")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Casts `^` ("ket")
9−
10[`^-` ("kethep")](#kethep), [`^+` ("ketlus")](#ketlus), and
6[`^-` ("kethep")](#kethep), [`^+` ("ketlus")](#ketlus), and
11[`^=` ("kettis")](#kettis) let us adjust types without violating type
7[`^=` ("kettis")](#kettis) let us adjust types without violating type
12constraints.
8constraints.
reference/hoon-expressions/rune/lus.udon → reference/hoon-expressions/rune/lus.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Arms"
3− sort/'8'
3+weight = 8
4− title/'Arms + ("lus")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Arms `+` "lus"
9−
10A core is a cell of `[battery payload]`. The battery is made of one or more arms, each of which is a computation on its parent core.
6A core is a cell of `[battery payload]`. The battery is made of one or more arms, each of which is a computation on its parent core.
11
7
12Arm runes are used to define arms in a core, and thus can only be used from within an expression that produces a multi-arm core. That means arm runes cannot be used to mark the beginning of a first-class expression -- there is no such thing in Hoon as an arm without a core.
8Arm runes are used to define arms in a core, and thus can only be used from within an expression that produces a multi-arm core. That means arm runes cannot be used to mark the beginning of a first-class expression -- there is no such thing in Hoon as an arm without a core.
reference/hoon-expressions/rune/mic.udon → reference/hoon-expressions/rune/mic.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'13'
4− title/'Make ; ("mic")'
2+title = "Make"
5− ==
3+weight = 13
6−;>
4+template = "doc.html"
7−
5++++
8−# Make `;` ("mic")
9−
10Miscellaneous useful macros.
6Miscellaneous useful macros.
11
7
12## Runes
8## Runes
reference/hoon-expressions/rune/sig.udon → reference/hoon-expressions/rune/sig.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Hints"
3− sort/'14'
3+weight = 14
4− title/'Hints ~ ("sig")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Hints `~` ("sig")
9−
10Runes that use Nock `11` to pass non-semantic info to the interpreter.
6Runes that use Nock `11` to pass non-semantic info to the interpreter.
11
7
12## Runes
8## Runes
reference/hoon-expressions/rune/terminators.udon → reference/hoon-expressions/rune/terminators.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'15'
4− title/'Terminators -- and =='
2+title = "Terminators"
5− ==
3+weight = 15
6−;>
4+template = "doc.html"
7−
5++++
8−# Terminators
9−
10The `--` and `==` are used as terminators: `--` for core expressions, and `==` for terminating a 'running' or 'jogging' series of Hoon expressions.
6The `--` and `==` are used as terminators: `--` for core expressions, and `==` for terminating a 'running' or 'jogging' series of Hoon expressions.
11
7
12## Runes
8## Runes
reference/hoon-expressions/rune/tis.udon → reference/hoon-expressions/rune/tis.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Change Subject"
3− sort/'5'
3+weight = 5
4− title/'Change Subject = ("tis")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Change Subject `=` ("tis")
9−
10These runes modify the subject. (Or more precisely, they
6These runes modify the subject. (Or more precisely, they
11evaluate at least one of their subexpressions with a modified subject.)
7evaluate at least one of their subexpressions with a modified subject.)
12
8
reference/hoon-expressions/rune/wut.udon → reference/hoon-expressions/rune/wut.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Conditionals"
3− sort/'6'
3+weight = 6
4− title/'Conditionals ? ("wut")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Conditionals ? ("wut")
9−
10Hoon has the usual program control branches. It also has the usual logical
6Hoon has the usual program control branches. It also has the usual logical
11operators: AND `?&`, OR `?|`, and NOT `?!`. It also has a `?=` rune that tests
7operators: AND `?&`, OR `?|`, and NOT `?!`. It also has a `?=` rune that tests
12whether a value matches a given type. In the course of type inference, Hoon
8whether a value matches a given type. In the course of type inference, Hoon
reference/hoon-expressions/rune/zap.udon → reference/hoon-expressions/rune/zap.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Wild"
3− sort/'4'
3+weight = 4
4− title/'Wild ! ("zap")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Wild `!` ("zap")
9−
10## Runes
6## Runes
11
7
12;=
8;=
reference/library/1a.udon → reference/library/1a.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'1'
3− title/'1a: Basic Arithmetic'
2+title = "1a: Basic Arithmetic"
4− ==
3+weight = 1
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 1a: basic arithmetic
9−
10### `++add`
6### `++add`
11
7
12Add
8Add
reference/library/1b.udon → reference/library/1b.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'2'
3− title/'1b: Tree Addressing'
2+title = "1b: Tree Addressing"
4− ==
3+weight = 2
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 1b: tree addressing
9−
10Check out the Nock [explanation](/docs/nock/explanation/) for more
6Check out the Nock [explanation](/docs/nock/explanation/) for more
11information on the tree-addressing system.
7information on the tree-addressing system.
12
8
reference/library/1c.udon → reference/library/1c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'3'
3− title/'1c: Molds and Mold-Builders'
2+title = "1c: Molds and Mold-Builders"
4− ==
3+weight = 3
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 1c: molds and mold builders
9−
10### `++bloq`
6### `++bloq`
11
7
12Blocksize
8Blocksize
reference/library/2a.udon → reference/library/2a.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'4'
3− title/'2a: Unit Logic'
2+title = "2a: Unit Logic"
4− ==
3+weight = 4
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2a: unit logic
10−
11### `++biff`
6### `++biff`
12
7
13Unit as argument
8Unit as argument
reference/library/2b.udon → reference/library/2b.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'5'
3− title/'2b: List Logic'
2+title = "2b: List Logic"
4− ==
3+weight = 5
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2b: list logic
9−
10### `++fand`
6### `++fand`
11
7
12All indices in `list`
8All indices in `list`
reference/library/2c.udon → reference/library/2c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'6'
3− title/'2c: Bit Arithmetic'
2+title = "2c: Bit Arithmetic"
4− ==
3+weight = 6
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2c: bit arithmetic
9−
10### `++bex`
6### `++bex`
11
7
12Binary exponent
8Binary exponent
reference/library/2d.udon → reference/library/2d.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'7'
3− title/'2d: Bit Logic'
2+title = "2d: Bit Logic"
4− ==
3+weight = 7
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2d: bit logic
9−
10### `++con`
6### `++con`
11
7
12Binary OR
8Binary OR
reference/library/2e.udon → reference/library/2e.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'8'
3− title/'2e: Insecure Hashing'
2+title = "2e: Insecure Hashing"
4− ==
3+weight = 8
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2e: insecure hashing
9−
10### `++fnv`
6### `++fnv`
11
7
12FNV scrambler
8FNV scrambler
reference/library/2f.udon → reference/library/2f.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'9'
3− title/'2f: Noun Ordering'
2+title = "2f: Noun Ordering"
4− ==
3+weight = 9
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2f: noun ordering
10−
11### `++aor`
6### `++aor`
12
7
13Alphabetical order
8Alphabetical order
reference/library/2g.udon → reference/library/2g.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'10'
3− title/'2g: Unsigned Powers'
2+title = "2g: Unsigned Powers"
4− ==
3+weight = 10
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2g: unsigned powers
9−
10### `++pow`
6### `++pow`
11
7
12Computes `a` raised to the power of `b`, producing an atom.
8Computes `a` raised to the power of `b`, producing an atom.
reference/library/2h.udon → reference/library/2h.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'11'
3− title/'2h: Set Logic'
2+title = "2h: Set Logic"
4− ==
3+weight = 11
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2h: set logic
9−
10### `++in`
6### `++in`
11
7
12Set operations
8Set operations
reference/library/2i.udon → reference/library/2i.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'12'
3− title/'2i: Map Logic'
2+title = "2i: Map Logic"
4− ==
3+weight = 12
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2i: map logic
9−
10### `++by`
6### `++by`
11
7
12Map operations
8Map operations
reference/library/2j.udon → reference/library/2j.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'13'
3− title/'2j: Jar and Jug Logic'
2+title = "2j: Jar and Jug Logic"
4− ==
3+weight = 13
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2j: jar and jug logic
9−
10### `++ja`
6### `++ja`
11
7
12Jar engine
8Jar engine
reference/library/2k.udon → reference/library/2k.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'14'
3− title/'2k: Queue Logic'
2+title = "2k: Queue Logic"
4− ==
3+weight = 14
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2k: queue logic
10−
11### `++to`
6### `++to`
12
7
13
8
reference/library/2l.udon → reference/library/2l.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'15'
2+title = "2l: Container from Container"
3− title/'2l: Container from Container'
3+weight = 15
4− ==
4+template = "doc.html"
5−
5++++
6−;>
7−
8−# 2l: container from container
9−
10### `++malt`
6### `++malt`
11
7
12Map from list
8Map from list
reference/library/2m.udon → reference/library/2m.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'16'
3− title/'2m: Container from Noun'
2+title = "2m: Container from Noun"
4− ==
3+weight = 16
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2m: container from noun
10−
11### `++ly`
6### `++ly`
12
7
13List from raw noun
8List from raw noun
reference/library/2n.udon → reference/library/2n.mdrenamed+5−7
@@ -1,10 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'17'
3− title/'2n: Functional Hacks'
2+title = "2n: Functional Hacks"
4− ==
3+weight = 17
5−
4+template = "doc.html"
6−;>
5++++
7−
8# 2n: functional hacks
6# 2n: functional hacks
9
7
10### `++cork`
8### `++cork`
reference/library/2o.udon → reference/library/2o.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'18'
3− title/'2o: Normalizing Containers'
2+title = "2o: Normalizing Containers"
4− ==
3+weight = 18
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2o: normalizing containers
9−
10### `++jar`
6### `++jar`
11
7
12Mold generator. A `jar` is a `map` of `list`.
8Mold generator. A `jar` is a `map` of `list`.
reference/library/2p.udon → reference/library/2p.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'19'
3− title/'2p: Serialization'
2+title = "2p: Serialization"
4− ==
3+weight = 19
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2p: serialization
10−
11### `++cue`
6### `++cue`
12
7
13Unpack atom to noun
8Unpack atom to noun
reference/library/2q.udon → reference/library/2q.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'20'
3− title/'2q: Molds and Mold-Builders'
2+title = "2q: Molds and Mold-Builders"
4− ==
3+weight = 20
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2q: molds and mold builders
10−
11### `++char`
6### `++char`
12
7
13Character
8Character
reference/library/3a.udon → reference/library/3a.mdrenamed+5−7
@@ -1,10 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'21'
3− title/'3a: Modular and Signed Ints'
2+title = "3a: Modular and Signed Ints"
4− ==
3+weight = 21
5−
4+template = "doc.html"
6−;>
5++++
7−
8# 3a: modular and signed ints
6# 3a: modular and signed ints
9
7
10### `++egcd`
8### `++egcd`
reference/library/3b.udon → reference/library/3b.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'22'
3− title/'3b: Floating Point'
2+title = "3b: Floating Point"
4− ==
3+weight = 22
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3b: floating point
9−
10### `++fn`
6### `++fn`
11
7
12Float
8Float
reference/library/3c.udon → reference/library/3c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'23'
3− title/'3c: Urbit Time'
2+title = "3c: Urbit Time"
4− ==
3+weight = 23
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3c: urbit time
9−
10### `++yall`
6### `++yall`
11
7
12Time since beginning of time
8Time since beginning of time
reference/library/3d.udon → reference/library/3d.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'24'
3− title/'3d: SHA Hash Family'
2+title = "3d: SHA Hash Family"
4− ==
3+weight = 24
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3d: SHA hash family
9−
10### `++shad`
6### `++shad`
11
7
12Double SHA-256
8Double SHA-256
reference/library/3e.mdnew file+8
@@ -0,0 +1,8 @@
1++++
2+title = "3e: AES encryption (Removed)"
3+weight = 25
4+template = "doc.html"
5++++
6+The standard-library functions in this section have been removed.
7+
8+---
reference/library/3e.udondeleted−12
@@ -1,12 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'25'
3− title/'3e: (Removed)'
4− ==
5−
6−;>
7−
8−# 3e: AES encryption
9−
10−The standard-library functions in this section have been removed.
11−
12−---
reference/library/3f.udon → reference/library/3f.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'26'
3− title/'3f: Scrambling'
2+title = "3f: Scrambling"
4− ==
3+weight = 26
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3f: scrambling
9−
10### `++un`
6### `++un`
11
7
12Reversible scrambling
8Reversible scrambling
reference/library/3g.udon → reference/library/3g.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'27'
3− title/'3g: Molds and Mold-Builders'
2+title = "3g: Molds and Mold-Builders"
4− ==
3+weight = 27
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3g: molds and mold builders
9−
10### `++coin`
6### `++coin`
11
7
12
8
reference/library/4a.udon → reference/library/4a.mdrenamed+5−11
@@ -1,14 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'28'
3− title/'4a: Exotic Bases'
2+title = "4a: Exotic Bases"
4− ==
3+weight = 28
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−
10−# 4a: exotic bases
11−
12### `++po`
6### `++po`
13
7
14Phonetic base
8Phonetic base
reference/library/4b.udon → reference/library/4b.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'29'
3− title/'4b: Text Processing'
2+title = "4b: Text Processing"
4− ==
3+weight = 29
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4b: text processing
9−
10### `++at`
6### `++at`
11
7
12```
8```
reference/library/4c.udon → reference/library/4c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'30'
3− title/'4c: Tank Printer'
2+title = "4c: Tank Printer"
4− ==
3+weight = 30
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4c: tank printer
9−
10### `++re`
6### `++re`
11
7
12Pretty-printing engine
8Pretty-printing engine
reference/library/4d.udon → reference/library/4d.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'31'
3− title/'4d: Parsing (Tracing)'
2+title = "4d: Parsing (Tracing)"
4− ==
3+weight = 31
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4d: parsing (tracing)
10−
11### `++last`
6### `++last`
12
7
13Further trace
8Further trace
reference/library/4e.udon → reference/library/4e.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'32'
3− title/'4e: Parsing (Combinators)'
2+title = "4e: Parsing (Combinators)"
4− ==
3+weight = 32
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4e: parsing (combinators)
9−
10### `++bend`
6### `++bend`
11
7
12Conditional composer
8Conditional composer
reference/library/4f.udon → reference/library/4f.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'33'
3− title/'4f: Parsing (Rule-Builders)'
2+title = "4f: Parsing (Rule-Builders)"
4− ==
3+weight = 33
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4f: parsing (rule builders)
10−
11### `++bass`
6### `++bass`
12
7
13Parser modifier: LSB
8Parser modifier: LSB
reference/library/4g.udon → reference/library/4g.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'34'
3− title/'4g: Parsing (Outside Caller)'
2+title = "4g: Parsing (Outside Caller)"
4− ==
3+weight = 34
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4g: parsing (outside caller)
10−
11### `++rash`
6### `++rash`
12
7
13Parse or crash
8Parse or crash
reference/library/4h.udon → reference/library/4h.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'35'
3− title/'4h: Parsing (ASCII Glyphs)'
2+title = "4h: Parsing (ASCII Glyphs)"
4− ==
3+weight = 35
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4h: parsing (ascii glyphs)
10−
11### `++ace`
6### `++ace`
12
7
13Parse space
8Parse space
reference/library/4i.udon → reference/library/4i.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'36'
3− title/'4i: Parsing (Useful Idioms)'
2+title = "4i: Parsing (Useful Idioms)"
4− ==
3+weight = 36
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4i: parsing (useful idioms)
9−
10### `++alf`
6### `++alf`
11
7
12Alphabetic characters
8Alphabetic characters
reference/library/4j.udon → reference/library/4j.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'37'
3− title/'4j: Parsing (Bases and Base Digits)'
2+title = "4j: Parsing (Bases and Base Digits)"
4− ==
3+weight = 37
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4j: parsing (bases and base digits)
10−
11### `++ab`
6### `++ab`
12
7
13Primitive parser engine
8Primitive parser engine
reference/library/4k.udon → reference/library/4k.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'38'
3− title/'4k: Atom Printing'
2+title = "4k: Atom Printing"
4− ==
3+weight = 38
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4k: atom printing
9−
10### `++co`
6### `++co`
11
7
12Literal rendering engine
8Literal rendering engine
reference/library/4l.udon → reference/library/4l.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'39'
3− title/'4l: Atom Parsing'
2+title = "4l: Atom Parsing"
4− ==
3+weight = 39
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4l: atom parsing
10−
11### `++so`
6### `++so`
12
7
13Coin parser engine
8Coin parser engine
reference/library/4m.udon → reference/library/4m.mdrenamed+6−10
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'40'
3− title/'4m: Formatting Functions'
2+title = "4m: Formatting Functions"
4− ==
3+weight = 40
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4m: formatting functions
9−
10### `++scot`
6### `++scot`
11
7
12Render dime as cord
8Render dime as cord
@@ -429,7 +425,7 @@ A `path`, or crash.
429
425
430 > (stab '/a/~pillyt/pals/1')
426 > (stab '/a/~pillyt/pals/1')
431 /a/~pillyt/pals/1
427 /a/~pillyt/pals/1
432−
428+
433 > `(pole ,@ta)`(stab '/a/~pillyt/pals/1')
429 > `(pole ,@ta)`(stab '/a/~pillyt/pals/1')
434 [~.a [~.~pillyt [~.pals [~.1 ~]]]]
430 [~.a [~.~pillyt [~.pals [~.1 ~]]]]
435```
431```
reference/library/4n.udon → reference/library/4n.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'41'
3− title/'4n: Virtualization'
2+title = "4n: Virtualization"
4− ==
3+weight = 41
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4n: virtualization
10−
11### `++mack`
6### `++mack`
12
7
13Nock subject to unit
8Nock subject to unit
reference/library/4o.udon → reference/library/4o.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'42'
3− title/'4o: Molds'
2+title = "4o: Molds"
4− ==
3+weight = 42
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4o: molds and mold builders
10−
11### `++abel`
6### `++abel`
12
7
13Biblical names in hoon are primarily aliases for the compiler.
8Biblical names in hoon are primarily aliases for the compiler.
reference/library/5a.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5a: Compiler Utilities"
3+weight = 43
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5a.udondeleted−10
@@ -1,10 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'43'
3− title/'5a: Compiler Utilities'
4− ==
5−
6−;>
7−
8−# 5a: compiler utilities
9−
10−(To be documented)
reference/library/5b.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5b: Macro Expansion"
3+weight = 44
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5b.udondeleted−10
@@ -1,10 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'44'
3− title/'5b: Macro Expansion'
4− ==
5−
6−;>
7−
8−# 5b: macro expansion
9−
10−(To be documented)
reference/library/5c.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5c: Compiler Backend & Prettyprinter"
3+weight = 45
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5c.udondeleted−10
@@ -1,10 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'45'
3− title/'5c: Compiler Backend & Prettyprinter'
4− ==
5−
6−;>
7−
8−# 5c: compiler backend and prettyprinter
9−
10−(To be documented)
reference/library/5d.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5d: Parser"
3+weight = 46
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5d.udondeleted−11
@@ -1,11 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'46'
3− title/'5d: Parser'
4− ==
5−
6−;>
7−
8−
9−# 5d: parser
10−
11−(To be documented)
reference/library/5e.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5e: Caching Compiler"
3+weight = 47
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5e.udondeleted−11
@@ -1,11 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'47'
3− title/'5e: Caching Compiler'
4− ==
5−
6−;>
7−
8−
9−# 5e: caching compiler
10−
11−(To be documented)
reference/library/5f.udon → reference/library/5f.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'48'
3− title/'5f: Molds and Mold-Builders'
2+title = "5f: Molds and Mold-Builders"
4− ==
3+weight = 48
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 5f: molds and mold builders
10−
11### `++mane`
6### `++mane`
12
7
13XML name
8XML name
reference/library/5g.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5g: profiling support"
3+weight = 49
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5g.udondeleted−11
@@ -1,11 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'49'
3− title/'5g: profiling support'
4− ==
5−
6−;>
7−
8−
9−# 5g: profiling support
10−
11−(To be documented)
reference/library.udon → reference/library/_index.mdrenamed+6−7
@@ -1,10 +1,9 @@
1++++
1−:- :~ title/'Standard library'
2+title = "Standard library"
2− sort/'2'
3+weight = 2
3− ==
4+sort_by = "weight"
4−;>
5+template = "sections/docs/chapters.html"
5−
6++++
6−# Standard library
7−
8#### [_alphabetical_](#alphabetical-) [_by section_](#by-section-)
7#### [_alphabetical_](#alphabetical-) [_by section_](#by-section-)
9
8
10Documentation for the standard library.
9Documentation for the standard library.
reference/library/zuse.udon → reference/library/zuse.mdrenamed+5−7
@@ -1,10 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'50'
3− title/'Zuse'
2+title = "Zuse"
4− ==
3+weight = 50
5−
4+template = "doc.html"
6−;>
5++++
7−
8_Zuse_ is a defined interface for vanes. It contains the part of the Hoon
6_Zuse_ is a defined interface for vanes. It contains the part of the Hoon
9standard library that is specific to Arvo functionality.
7standard library that is specific to Arvo functionality.
10
8
reference/troubleshooting.udon → reference/troubleshooting.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Hoon Errors'
2+title = "Hoon Errors"
2− sort/'5'
3+weight = 5
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Hoon Errors
7−
8Ideally your Hoon works perfectly the first time. But...
6Ideally your Hoon works perfectly the first time. But...
9
7
10## Syntax errors
8## Syntax errors
using.udon → using/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'2'
3− title/'Reference'
4− ==
5−;>
6−
7−# Using
2+title = "Using"
8−
3+weight = 2
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6++++
9This section contains guides to using your urbit.
7This section contains guides to using your urbit.
10
8
11- [Admin and Operation](admin) is a guide to the basic commands used to interact with your ship.
9- [Admin and Operation](admin) is a guide to the basic commands used to interact with your ship.
using/admin.udon → using/admin.mdrenamed+13−13
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'1'
5− title/'Admin and Operations'
2+title = "Admin and Operations"
6− ==
3+weight = 1
7−;>
4+template = "doc.html"
8−
5++++
9−# Admin and operation
10−
11Your urbit (also called your _ship_) is a persistent Unix process that you
6Your urbit (also called your _ship_) is a persistent Unix process that you
12mainly control from the console. For some things, a browser will also work.
7mainly control from the console. For some things, a browser will also work.
13
8
@@ -117,14 +112,17 @@ On startup Urbit tries to bind to `localhost:8080`. If you're already
117running something on `8080` -- such as another urbit -- you'll find the urbit
112running something on `8080` -- such as another urbit -- you'll find the urbit
118that you just started on `8081`, and so on. For planets only, we also proxy web
113that you just started on `8081`, and so on. For planets only, we also proxy web
119domains through Urbit's own servers. Any planet `~your-urbit` is also at
114domains through Urbit's own servers. Any planet `~your-urbit` is also at
120−`your-urbit.arvo.network`.
115+`your-urbit.urbit.org`.
121
116
122Your urbit serves a simple homepage from `http://localhost:8080` or
117Your urbit serves a simple homepage from `http://localhost:8080` or
123−`https://your-urbit.arvo.network` that should be self-explanatory. Since
118+`https://your-urbit.urbit.org` that should be self-explanatory. Since
124our HTTPS isn't audited / battle tested, we just call it "secure" HTTPS.
119our HTTPS isn't audited / battle tested, we just call it "secure" HTTPS.
125You can find that on `8443`. Or `8444` (and so on) if you're already
120You can find that on `8443`. Or `8444` (and so on) if you're already
126running something on `8443`.
121running something on `8443`.
127
122
123+A complete walkthrough of the Urbit web interface is
124+[here](../web/).
125+
128## Moons
126## Moons
129
127
130Urbit namespace is distributed by having parent nodes sign the keys for child
128Urbit namespace is distributed by having parent nodes sign the keys for child
@@ -170,7 +168,9 @@ moon: ~faswep-navred-sampel-palnet
170`<keyfile>` will be at `path/to/sampel-palnet/.urb/put/moon.key`
168`<keyfile>` will be at `path/to/sampel-palnet/.urb/put/moon.key`
171and does not need editing to be used with the `-k` option.
169and does not need editing to be used with the `-k` option.
172
170
171+You can use the resulting output in the same installation flow from
172+[install](../install) and [setup](../setup), following the same scheme as
173−The scheme for booting is:
173+for booting a planet. That scheme is:
174
174
175```
175```
176$ urbit -w <moonname> -G <key> -c <piername>
176$ urbit -w <moonname> -G <key> -c <piername>
using/filesystem.udon → using/filesystem.mdrenamed+5−11
@@ -1,14 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'4'
5− title/'Introduction to the Filesystem'
2+title = "Introduction to the Filesystem"
6− ==
3+weight = 4
7−;>
4+template = "doc.html"
8−
5++++
9−# Introduction to the Filesystem
10−
11−
12Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
6Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
13referentially transparent namespace. An easy way to think about it is like typed
7referentially transparent namespace. An easy way to think about it is like typed
14`git` with continuous sync.
8`git` with continuous sync.
using/generators.udon → using/generators.mdrenamed+7−15
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'9'
4− title/'Generators'
2+title = "Generators"
5− ==
3+weight = 9
6−;>
4+template = "doc.html"
7−
5++++
8−# Generators
9−
10Generators are the most straightforward way to write programs for Urbit. They
6Generators are the most straightforward way to write programs for Urbit. They
11are used for doing computations that do not require persistence: they take an
7are used for doing computations that do not require persistence: they take an
12input and produce an output, then disappear. Generators might make sense for
8input and produce an output, then disappear. Generators might make sense for
@@ -29,7 +25,7 @@ a
29
25
30This generator takes one argument of any noun and produces it without any
26This generator takes one argument of any noun and produces it without any
31changes. If we put this into a file named `echo.hoon` in the `/gen` directory,
27changes. If we put this into a file named `echo.hoon` in the `/gen` directory,
32−we can run it from the [Dojo](../shell):
28+we can run it from the [Dojo](/docs/learn/arvo/arvo-internals/shell):
33
29
34```
30```
35> +echo 42
31> +echo 42
@@ -483,11 +479,7 @@ u.my-json
483
479
484The above generator was written with the
480The above generator was written with the
485[Studio Ghibli API](https://ghibliapi.herokuapp.com/). It uses this API to
481[Studio Ghibli API](https://ghibliapi.herokuapp.com/). It uses this API to
486−print the title of a Studio Ghibli film. If you save it as `ghib.hoon` you could run this generator by providing an api endpoint like so.
482+print the title of a Studio Ghibli film.
487−
488−```
489−+ghib "https://ghibliapi.herokuapp.com/films/58611129-2dbc-4a81-a72f-77ddfc1b1b49"
490−```
491
483
492```
484```
493/- sole
485/- sole
using/layout.udon → using/layout.mdrenamed+9−14
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'5'
5− title/'Source layout'
2+title = "Source layout"
6− ==
3+weight = 5
7−;>
4+template = "doc.html"
8−
5++++
9−# Arvo source
10−
11When you boot an urbit, we transfer the current version of the Arvo
6When you boot an urbit, we transfer the current version of the Arvo
12operating environment to your urbit over our network. That is, the
7operating environment to your urbit over our network. That is, the
13source for the system lives on your urbit. Here we'll take a brief tour
8source for the system lives on your urbit. Here we'll take a brief tour
@@ -47,7 +42,7 @@ This is where the Arvo kernel lives. `sys/` contains:
47
42
48##### `sys/hoon.hoon`
43##### `sys/hoon.hoon`
49
44
50−[Hoon](/docs/learn/hoon) is our programming language. Since Hoon
45+[Hoon](/docs/learn/arvo/hoon) is our programming language. Since Hoon
51compiles itself, the language is actually specified in this source file.
46compiles itself, the language is actually specified in this source file.
52
47
53##### `sys/zuse.hoon`
48##### `sys/zuse.hoon`
@@ -104,9 +99,9 @@ That's it. That's the whole system.
104
99
105## app/
100## app/
106
101
107−This is where [Gall](/docs/learn/arvo/gall) apps live. Gall apps are stateful
102+This is where [Gall](../gall) apps live. Gall apps are stateful
108servers, sort of like unix daemons. One familiar one is `app/hall.hoon` which is
103servers, sort of like unix daemons. One familiar one is `app/hall.hoon` which is
109−the source code for [Hall](/docs/learn/arvo/hall), the Urbit messaging transport
104+the source code for [Hall](../hall), the Urbit messaging transport
110layer. And there's also `app/dojo.hoon` — that's your shell.
105layer. And there's also `app/dojo.hoon` — that's your shell.
111
106
112---
107---
@@ -167,7 +162,7 @@ lib/test/*
167## web/
162## web/
168
163
169Here are files publicly accessible to the web, as made possible by
164Here are files publicly accessible to the web, as made possible by
170−[Eyre](/docs/learn/arvo/eyre).
165+[Eyre](../eyre).
171
166
172---
167---
173
168
using/messaging.udon → using/messaging.mdrenamed+22−23
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'2'
5− title/'Messaging'
2+title = "Messaging"
6− ==
3+weight = 2
7−;>
4+template = "doc.html"
8−
5++++
9−# Messaging (Talk and Hall)
10−
11Talk is the built-in frontend for the Urbit messaging and notifications
6Talk is the built-in frontend for the Urbit messaging and notifications
12protocol, Hall. Today we use Hall to chat and coordinate, but it's really
7protocol, Hall. Today we use Hall to chat and coordinate, but it's really
13a general purpose piece of infrastructure.
8a general purpose piece of infrastructure.
@@ -27,7 +22,7 @@ be used for that we haven't even thought of.
27
22
28Here we'll be discussing how to operate the default CLI frontend, Talk,
23Here we'll be discussing how to operate the default CLI frontend, Talk,
29to send and receive messages. For a more in-depth look at Hall's internals,
24to send and receive messages. For a more in-depth look at Hall's internals,
30−take a look at its [documentation](/docs/learn/arvo/hall).
25+take a look at its [documentation](../hall).
31
26
32## Quickstart
27## Quickstart
33
28
@@ -47,19 +42,23 @@ circles, but we for now we'll be dealing with the _channel_: a publicly
47accessible chatroom for general use. We'll discuss the other three
42accessible chatroom for general use. We'll discuss the other three
48kinds in the [manual](#manual) section.
43kinds in the [manual](#manual) section.
49
44
50−Let's join the `/urbit-help` channel, which is hosting on the star `~dopzod`.
51−Use `ctrl-x` to switch from Dojo to Talk. Then:
45+Let's join the `/urbit-help` channel. Use `ctrl-x` to switch from Dojo to Talk.
46+Then, :
52
47
53```
48```
54−~your-urbit:talk> ;join ~dopzod/urbit-help
49+~your-urbit:talk> ;join /urbit-help
55```
50```
56
51
57You'll see something like:
52You'll see something like:
58
53
59```
54```
60−--------------| ;join ~dopzod/urbit-help
55+--------------| ;join /urbit-help
61−--------------| :: onn =
56+--------------| :: onn /urbit-help
62−--------------| has glyph = for ~dopzod/urbit-help
57+--------------| bound '=' {[hos=~binzod nom=%urbit-help]}
58+--------------| new = /urbit-help
59+--------------| /urbit-help: cap: For Urbit-related discussion. Politically
60+ | correct and safe for work. Don't be rude.
61+--------------| /urbit-help: fit: caps:n unic:n
63~your-urbit:talk=
62~your-urbit:talk=
64```
63```
65
64
@@ -101,7 +100,7 @@ Now you and `~talsur-todres` can exchange messages directly.
101To set your audience back to `/urbit-help`:
100To set your audience back to `/urbit-help`:
102
101
103```
102```
104−~your-urbit:talk[~talsur-todres] ;~dopzod/urbit-help
103+~your-urbit:talk[~talsur-todres] ;/urbit-help
105```
104```
106
105
107You'll see your prompt change back:
106You'll see your prompt change back:
@@ -122,7 +121,7 @@ You can also use the ASCII "glyph" assigned to your `/urbit-help` circle as a sh
122Use `;leave` to unsubscribe from a channel:
121Use `;leave` to unsubscribe from a channel:
123
122
124```
123```
125−~your-urbit:talk= ;leave ~dopzod/urbit-help
124+~your-urbit:talk= ;leave /urbit-help
126```
125```
127
126
128The web UI ships as compiled JavaScript on your urbit, but has its own
127The web UI ships as compiled JavaScript on your urbit, but has its own
@@ -379,7 +378,7 @@ messages sent to `~other/circle` to also appear in `%name`.
379For example:
378For example:
380
379
381```
380```
382−~sampel-palnet:talk> ;source %coolbox ~dopzod/urbit-help
381+~sampel-palnet:talk> ;source %coolbox ~marzod/urbit-help
383```
382```
384
383
385###### Unsource
384###### Unsource
@@ -391,7 +390,7 @@ Removes `~other/circle` as a source for circle `%name`.
391For example:
390For example:
392
391
393```
392```
394−~sampel-palnet:talk> ;unsource %coolbox ~dopzod/urbit-help
393+~sampel-palnet:talk> ;unsource %coolbox ~marzod/urbit-help
395```
394```
396
395
397### Circle Membership
396### Circle Membership
@@ -440,7 +439,7 @@ specific circle to list members of just those: `;who ~some/circle`
440For example:
439For example:
441
440
442```
441```
443−~sampel-palnet:talk> ;who ~dopzod/urbit-help
442+~sampel-palnet:talk> ;who ~marzod/urbit-help
444```
443```
445
444
446###### Attend
445###### Attend
@@ -459,7 +458,7 @@ you.)
459For example:
458For example:
460
459
461```
460```
462−~sampel-palnet:talk> ;attend ~dopzod/urbit-help idle
461+~sampel-palnet:talk> ;attend ~marzod/urbit-help idle
463```
462```
464
463
465###### Set Display Name
464###### Set Display Name
using/sail.udon → using/sail.mdrenamed+9−13
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'7'
2+title = "Sail"
3− next/'true'
3+weight = 7
4− title/'Sail'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Introduction to Sail
9−
10Sail is Hoon markup that’s used to render a web page with XML. But what makes
6Sail is Hoon markup that’s used to render a web page with XML. But what makes
11it special is that you can run arbitrary Hoon code within such a web page
7it special is that you can run arbitrary Hoon code within such a web page
12without using a separate markup language. In this tutorial, we will
8without using a separate markup language. In this tutorial, we will
@@ -15,10 +11,10 @@ be dealing with Sail as it renders to HTML, a subset of XML.
15### Getting Started
11### Getting Started
16
12
17Before starting, make sure that your urbit is
13Before starting, make sure that your urbit is
18−[mounted to Unix](/docs/getting-started/creating-a-development-ship/)
14+[mounted to Unix](https://urbit.org/docs/using/setup/)
19
15
20To host that output, your ship also has a web-server, called
16To host that output, your ship also has a web-server, called
21−Eyre, that can be found at
17+[Eyre](https://urbit.org/docs/using/web/), that can be found at
22`http://localhost:8080/` if it’s your first ship that’s running on the a
18`http://localhost:8080/` if it’s your first ship that’s running on the a
23machine, `http://localhost:8081/` if it’s the second ship on that same machine,
19machine, `http://localhost:8081/` if it’s the second ship on that same machine,
24and so on. In the startup messages, a ship will tell you which HTTP port it's
20and so on. In the startup messages, a ship will tell you which HTTP port it's
@@ -456,7 +452,7 @@ Hoon. They are part of Ford, our build system.
456
452
457`/$` is used to get data from the environment, and `/=` adds that data to
453`/$` is used to get data from the environment, and `/=` adds that data to
458subject in the face `gas`. The
454subject in the face `gas`. The
459−[Ford user manual](/docs/learn/arvo/ford/) has
455+[Ford user manual](https://urbit.org/docs/arvo/internals/ford/runes/) has
460details on these and other Ford runes, but understanding these runes isn’t
456details on these and other Ford runes, but understanding these runes isn’t
461necessary for the purposes of this tutorial.
457necessary for the purposes of this tutorial.
462
458
@@ -680,7 +676,7 @@ valid lists for the `;* ?: show-list` expression to resolve.
680You should now have foundational knowledge for making web pages with Sail. There
676You should now have foundational knowledge for making web pages with Sail. There
681is, of course, more to learn. If you’re curious, there’s more advanced
677is, of course, more to learn. If you’re curious, there’s more advanced
682resources out there.
678resources out there.
683−The [Ford manual](/docs/learn/arvo/ford/)
679+The [Ford manual](https://urbit.org/docs/arvo/internals/ford/runes/)
684can show you how to access various ship resources for user in your pages. To
680can show you how to access various ship resources for user in your pages. To
685learn more about how the renderer works, take a look at the
681learn more about how the renderer works, take a look at the
686`/home/ren/urb.hoon` file inside your urbit.
682`/home/ren/urb.hoon` file inside your urbit.
using/shell.udon → using/shell.mdrenamed+6−11
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Shell"
3− next/'true'
3+weight = 3
4− sort/'3'
4+template = "doc.html"
5− title/'Shell (Dojo)'
5++++
6− ==
7−;>
8−
9−# Shell (Dojo)
10−
11The Dojo is our shell; it processes system commands and returns output. It's a
6The Dojo is our shell; it processes system commands and returns output. It's a
12good place to quickly experiment with Urbit. On the surface the Dojo is just a
7good place to quickly experiment with Urbit. On the surface the Dojo is just a
13Hoon REPL. On the inside, the Dojo is a system for operating on and transforming
8Hoon REPL. On the inside, the Dojo is a system for operating on and transforming
@@ -36,7 +31,7 @@ Tall-form Hoon may require multiple lines:
36~your-urbit:dojo< 2
31~your-urbit:dojo< 2
37```
32```
38
33
39−Hoon uses something called [the subject](/docs/learn/hoon/hoon-tutorial/the-subject-and-its-legs).
34+Hoon uses something called [the subject](/docs/learn/arvo/hoon/the-subject-and-its-legs).
40The Dojo has its own subject, and that's where Hoon's equivalent of variables,
35The Dojo has its own subject, and that's where Hoon's equivalent of variables,
41called faces, are stored.
36called faces, are stored.
42
37
using/udon.udon → using/udon.mdrenamed+12−16
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'8'
3− next/'true'
4− title/'Udon'
2+title = "Udon"
5− ==
3+weight = 8
6−;>
4+template = "doc.html"
7−
5++++
8−# Udon
9−
10## Table of Contents
6## Table of Contents
11
7
12- #### [Udon: A Guide](#guide)
8- #### [Udon: A Guide](#guide)
@@ -45,10 +41,10 @@ Udon files using our web interface.
45### Getting Started
41### Getting Started
46
42
47Before starting, make sure that your urbit is
43Before starting, make sure that your urbit is
48−[mounted to Unix](/docs/getting-started/creating-a-development-ship/)
44+[mounted to Unix](https://urbit.org/docs/using/setup/)
49
45
50To host Udon and other kinds of files, your ship also has a
46To host Udon and other kinds of files, your ship also has a
51−web-server, called Eyre, that can be found
47+web-server, called [Eyre](https://urbit.org/docs/using/web/), that can be found
52at `http://localhost:8080/` if it’s your first ship that’s running on the
48at `http://localhost:8080/` if it’s your first ship that’s running on the
53machine, `http://localhost:8081/` if it’s the second ship on that same machine,
49machine, `http://localhost:8081/` if it’s the second ship on that same machine,
54and so on. If you can't find your ship on one of these for some reason, try the
50and so on. If you can't find your ship on one of these for some reason, try the
@@ -323,12 +319,12 @@ destination.
323*Example:*
319*Example:*
324
320
325```
321```
326−[I'm an inline-style link](https://www.urbit.org/docs/using/shell)
322+[I'm an inline-style link](https://www.urbit.org/docs/reference/shell)
327```
323```
328
324
329###### Produces:
325###### Produces:
330
326
331−[I'm an inline-style link](https://www.urbit.org/docs/using/shell)
327+[I'm an inline-style link](https://www.urbit.org/docs/reference/shell)
332
328
333The second type is a reference-style link, which uses a relative path, based on
329The second type is a reference-style link, which uses a relative path, based on
334the current page's location. Instead of the full url, we use `..` to fill in
330the current page's location. Instead of the full url, we use `..` to fill in
@@ -344,7 +340,7 @@ the all of the URL that the destination has in common with the origin page.
344
340
345[I'm a reference-style link](../shell)
341[I'm a reference-style link](../shell)
346
342
347−If this page is located at `https://www.urbit.org/docs/using/`, then these two
343+If this page is located at `https://www.urbit.org/docs/reference/`, then these two
348examples should have the same destination.
344examples should have the same destination.
349
345
350#### Anchor Link
346#### Anchor Link
@@ -791,7 +787,7 @@ Note: below we use Urbit's implementation of Markdown, [Udon](#udon).
791This markup language allows you to use snippets of Hoon code but not HTML.
787This markup language allows you to use snippets of Hoon code but not HTML.
792In particular, we use Sail, a subset of Hoon. This Sail is rendered as HTML
788In particular, we use Sail, a subset of Hoon. This Sail is rendered as HTML
793when the file is served to a client. To learn about Sail, head over to
789when the file is served to a client. To learn about Sail, head over to
794−the [Sail](/docs/using/sail) section of the docs.
790+the [Sail](/docs/learn/arvo/arvo-internals/sail) section of the docs.
795
791
796In `site/web/meet.udon` put:
792In `site/web/meet.udon` put:
797
793
@@ -805,7 +801,7 @@ In `site/web/meet.udon` put:
805
801
806# Neo-Tokyo Urbit meetup
802# Neo-Tokyo Urbit meetup
807
803
808−;img@"https://ofheroesandcliches.files.wordpress.com/2014/06/neo-tokyo.png"(width "100%");
804+![](https://ofheroesandcliches.files.wordpress.com/2014/06/neo-tokyo.png)
809
805
810Hi there! We meet once a week at The Chat to work on Urbit projects
806Hi there! We meet once a week at The Chat to work on Urbit projects
811together.
807together.