on master help sign in
Merge pull request #565 from urbit/docs-reorg

Docs reorg

commitc414dc2e743ab993df6a6d8fad2affad58a63a80 authorDavid Kerschner <david@tlon.io> dateTue 16 Mar 2021, 12:38 (6 years ago) parentbc263d4b6e0e7c
46 files changed+2406−1875
content/blog/events-series.md+1−1 content/blog/urbit-for-normies.md+1−1 content/community/community-grants.md+1−1 content/community/governance.md+1−1 content/faq.md+8−8 content/using/install.md → content/getting-started.md+5−5 content/getting-started/_index.md+4 content/using/planet.md → content/getting-started/planet.md+9−9 content/media.md+1−1 content/reset.md+4−4 content/understanding-urbit/interface.md+1−1 content/understanding-urbit/people-history.md+2−2 content/understanding-urbit/roadmap.md+2−2 content/updates/2020-04-04-update.md+1−1 content/updates/2020-06-15-update.md+1−1 content/using/_index.md+31−3 content/using/develop.md−117 content/using/id/_index.md+33 content/using/operations/bridge-troubleshooting.md → content/using/id/bridge-troubleshooting.md+4−2 content/using/id/creating-an-invite-pool.md+106 content/using/id/guide-to-breaches.md+90 content/using/id/overview.md+71 content/using/operations/using-bridge.md → content/using/id/using-bridge.md+5−5 content/using/integrating-api.md−224 content/using/operations/_index.md−7 content/using/operations/using-your-ship.md−1422 content/using/os/_index.md+36 content/using/os/filesystem.md+394 content/using/os/getting-started.md+337 content/using/os/messaging.md+254 content/using/os/s3.md+34 content/using/os/shell.md+413 content/using/os/ship-troubleshooting.md+212 content/using/operations/stars-and-galaxies.md → content/using/os/stars-and-galaxies.md+5−5 content/using/running/_index.md+16 content/using/operations/hosting.md → content/using/running/hosting.md+5−6 sass/_main.scss+15−14 static/_redirects+163−13 templates/index.html+2−2 templates/list.html+1 templates/page/getting_started.html+68 templates/page_indiced.html+2−1 templates/partials/footer.html+4−4 templates/partials/navigation-docs.html+61−10 templates/sections/docs/hoon.html+1−1 templates/understanding-urbit/list.html+1−1
content/blog/events-series.md+1−1
@@ -25,7 +25,7 @@ Something we tend to talk less about is the fact that Urbit itself is also a com
2525
2626One of the reasons you don’t hear about the Urbit community as much is that community is difficult to pin down: you'd be hard-pressed to put "the community" into a room together. It's a weird, fuzzy notion and doesn't have clear boundaries.
2727
28−Other parts of Urbit do have clear boundaries. If you decided to learn more about Urbit, chances are you started by reading the docs. You might learn about [Nock](https://urbit.org/docs/tutorials/nock/), [Hoon](https://urbit.org/docs/glossary/hoon/), and [Arvo](https://urbit.org/docs/glossary/arvo/). You might get an [Urbit ID](https://urbit.org/understanding-urbit/urbit-id/) and [launch your own ship](https://urbit.org/using/install/). These things are all pretty well documented and, while not necessarily easy, their respective processes are relatively straightforward and [getting easier](https://urbit.org/blog/hosting-the-future/) every day. Community is less well documented. It’s more difficult to document—it’s something you just have to experience.
28+Other parts of Urbit do have clear boundaries. If you decided to learn more about Urbit, chances are you started by reading the docs. You might learn about [Nock](https://urbit.org/docs/tutorials/nock/), [Hoon](https://urbit.org/docs/glossary/hoon/), and [Arvo](https://urbit.org/docs/glossary/arvo/). You might get an [Urbit ID](https://urbit.org/understanding-urbit/urbit-id/) and [launch your own ship](https://urbit.org/getting-started/). These things are all pretty well documented and, while not necessarily easy, their respective processes are relatively straightforward and [getting easier](https://urbit.org/blog/hosting-the-future/) every day. Community is less well documented. It’s more difficult to document—it’s something you just have to experience.
2929
3030We lead with technology because it’s what we’re good at and because it’s easier to write about. But the social side of Urbit is no less important. Since so many of us are working on and contributing to Urbit in order to solve our own problems, and since we’re dogfooding as we go, you could define Urbit as the minimal technological infrastructure needed to sustain the Urbit community. It’s circular, but it’s as good a definition of Urbit as you’re likely to find. For this reason, you can’t really understand Urbit without some degree of exposure to the cultural knowledge of its community. When the Urbit community did fit in a single room together, transmitting cultural knowledge was easy and happened over pizza and beer. As the number and diversity of Urbit stakeholders continue to grow, we need to find ways to scale the transmission of this cultural knowledge.
3131
content/blog/urbit-for-normies.md+1−1
@@ -160,7 +160,7 @@ Imagine, as is already becoming the case, that it becomes highly valuable to hav
160160
161161Some of these cases are, admittedly, a bit speculative since we haven’t built all the functionality yet. But it’s coming, and quite soon.
162162
163−For now, if you like the way this sounds you can [get yourself an Urbit ID](https://urbit.org/using/install/#id) and start learning about how to safely store cryptographic keys (it’s really not that hard, and we give you suggestions). If you’re feeling technical or adventurous, you can try booting our beta OS interface to see what it looks like. It’s fussy, but it exists. Soon it will be less fussy. You can check out our [roadmap](https://urbit.org/understanding-urbit/roadmap/) if you’d like to know when.
163+For now, if you like the way this sounds you can [get yourself an Urbit ID](https://urbit.org/getting-started/#id) and start learning about how to safely store cryptographic keys (it’s really not that hard, and we give you suggestions). If you’re feeling technical or adventurous, you can try booting our beta OS interface to see what it looks like. It’s fussy, but it exists. Soon it will be less fussy. You can check out our [roadmap](https://urbit.org/understanding-urbit/roadmap/) if you’d like to know when.
164164
165165## Why we need Urbit
166166
content/community/community-grants.md+1−1
@@ -7,7 +7,7 @@ hideprevious = "true"
77hidenext = "true"
88+++
99
10−Interested in getting your community on Urbit? We are currently accepting applications for select groups to get started on Urbit together using an [invite pool](@/docs/tutorials/creating-an-invite-pool.md).
10+Interested in getting your community on Urbit? We are currently accepting applications for select groups to get started on Urbit together using an [invite pool](@/using/id/creating-an-invite-pool.md).
1111
1212To get started, fill out the application below. Any information you share will be held privately, and only for the purpose of consideration for the grant.
1313
content/community/governance.md+1−1
@@ -20,6 +20,6 @@ For off-chain process around proposals, as suggested by core developers, please
2020
2121The group of core developers manages Urbit’s [GitHub repository](https://github.com/urbit/), which controls Arvo, Urbit’s operating system. Changes and upgrades are decided upon by consensus.
2222
23−You can participate in the governance of the senate by acquiring a galaxy. If you would like to be involved with the governance of Arvo, check out our [developer guide](@/using/develop.md) to learn how you can contribute to core development.
23+You can participate in the governance of the senate by acquiring a galaxy. If you would like to be involved with the governance of Arvo, check out our [developer guide](@/docs/development/develop.md) to learn how you can contribute to core development.
2424
2525
content/faq.md+8−8
@@ -75,7 +75,7 @@ In addition to the three classes of identities mentioned above, there are two ot
7575
7676### What is a `@p`? Why is my username generated for me? {#what-is-patp}
7777
78−A `@p` ([pronounced](@/docs/tutorials/hoon/hoon-school/hoon-syntax.md#reading-hoon-aloud) *pat-pee*) is a name like `~zod` or `~lodleb-ritrul` composed of pronounceable, three-letter phonemic elements like `zod`, `lod`, `leb`, `rit` and `rul`. Shorter names, such as `~zod` and `~marzod`, are assigned to [ship](@/docs/glossary/ship.md)s with special duties on the [Arvo](#what-is-arvo) network galaxies and stars, respectively. Longer names like `~palfun-foslup` are identities for typical users.
78+A `@p` ([pronounced](@/docs/hoon/hoon-school/hoon-syntax.md#reading-hoon-aloud) *pat-pee*) is a name like `~zod` or `~lodleb-ritrul` composed of pronounceable, three-letter phonemic elements like `zod`, `lod`, `leb`, `rit` and `rul`. Shorter names, such as `~zod` and `~marzod`, are assigned to [ship](@/docs/glossary/ship.md)s with special duties on the [Arvo](#what-is-arvo) network galaxies and stars, respectively. Longer names like `~palfun-foslup` are identities for typical users.
7979
8080These names map directly to a corresponding number in the Urbit ID address space. Galaxies occupy the 8-bit address space, so any galaxy is actually a number between zero and 255. Stars occupy the 16-bit address space, and planets occupy the 32-bit address space.
8181
@@ -237,7 +237,7 @@ All events are logged to disk, so you can always restore the system to a previou
237237
238238When an [Arvo](@/docs/glossary/arvo.md) ship (instance) is started for the first time you must use a "[keyfile](@/docs/glossary/keyfile.md)" containing the private keys for your identity's networking keys. Urbit ID uses the Ethereum blockchain as its decentralized ledger.
239239
240−See our [Getting Started](@/using/install.md) guide to learn how to get your ship onto the Urbit OS / [Ames](@/docs/glossary/ames.md) network.
240+See our [Getting Started](@@/getting-started/planet.md.md) guide to learn how to get your ship onto the Urbit OS / [Ames](@/docs/glossary/ames.md) network.
241241
242242### Will the Urbit OS network survive if Ethereum dies? {#if-ethereum-dies}
243243
@@ -245,11 +245,11 @@ Yes. It would be annoying, but Urbit ID / [Azimuth](@/docs/glossary/azimuth.md)
245245
246246### How do I install Urbit OS? {#install-urbit-os}
247247
248−Check out our guides [here](@/using/install.md).
248+Check out our guides [here](@@/getting-started/planet.md.md).
249249
250250### How do I use Urbit OS? {#use-urbit-os}
251251
252−The [Using](@/using/operations/_index.md) section of the documentation will help you out.
252+The [Using](@/using/os/getting-started.md) section of the documentation will help you out.
253253
254254### How do over-the-air updates work? {#over-the-air-updates}
255255
@@ -261,9 +261,9 @@ Your sponsor, a star or galaxy that your ship is connected to, may send you new
261261
262262### I have an Urbit ID, now what? {#now-what}
263263
264−Follow our guide on how to boot a ship [here](@/using/install.md).
264+Follow our guide on how to boot a ship [here](@@/getting-started/planet.md.md).
265265
266−Get on the [mailing list](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&amp;id=be143888d2). Learn [Hoon](@/docs/tutorials/hoon/hoon-school/_index.md). Sign up for [Hooniversity](https://hooniversity.org/). [Make stuff](https://grants.urbit.org).
266+Get on the [mailing list](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&amp;id=be143888d2). Learn [Hoon](@/docs/hoon/hoon-school/_index.md). Sign up for [Hooniversity](https://hooniversity.org/). [Make stuff](https://grants.urbit.org).
267267
268268
269269## Urbit Grants
@@ -375,7 +375,7 @@ One day we’d really like the Urbit ID registry to be hosted on [Urbit OS](#wha
375375
376376### Why is Hoon so weird? {#why-hoon}
377377
378−There are things about Urbit that are weird by design, and some that are weird because we haven’t gotten around to cleaning them up. [Hoon](@/docs/glossary/hoon.md), for the most part, is weird by design, but there are a few things about it we’d like to clean up.
378+There are things about Urbit that are weird by design, and some that are weird because we haven’t gotten around to cleaning them up. [Hoon](@/docs/glossary/hoon.md), for the most part, is weird by design, but there are a few things about it we’d like to clean up. For a complete description of why we created Hoon, see the [Hoon overview](@/docs/hoon/overview.md).
379379
380380The runes are, once you get the hang of them, pretty nice. Your mileage may vary, of course, but many talented engineers have spent many, many hours writing Hoon. It’s a simple, practical language. But the learning curve can be a bit high.
381381
@@ -383,7 +383,7 @@ The standard library and naming is something we’ve discussed changing, and it
383383
384384The right way to think about Hoon is as the ‘C of Urbit’. It’s a bare bones language that gets you pretty close to Nock. Eventually, we’ll probably implement more expressive languages that compile to Urbit. But for now, satisfy your curiosity and [sign up for Hooniversity](https://hooniversity.org/), a community led Hoon educational organization.
385385
386−Another option is to treat [Urbit as an API](@/using/integrating-api.md), which allows one to use common languages such as Python and Javascript to build userspace programs. For now this option is not as powerful as Hoon, but there is still a lot that a developer without the time or inclination to learn Hoon can do.
386+Another option is to treat [Urbit as an API](@/docs/arvo/eyre/using-eyre.md), which allows one to use common languages such as Python and Javascript to build userspace programs. For now this option is not as powerful as Hoon, but there is still a lot that a developer without the time or inclination to learn Hoon can do.
387387
388388### What is the point of Nock? {#why-nock}
389389
content/using/install.md → content/getting-started.mdrenamed+5−5
@@ -16,7 +16,7 @@ There are currently two ways to run Urbit:
1616
1717If you use Mac or Linux and are not afraid of a few terminal commands, we recommend you run it yourself. That is the aim of this guide.
1818
19−If you run Windows or just want to give it a shot without worrying about the gritty bits, you may want to consider a [hosting provider](/using/planet#hosting-providers).
19+If you run Windows or just want to give it a shot without worrying about the gritty bits, you may want to consider a [hosting provider](@/getting-started/planet.md#hosting-providers).
2020
2121## Installing Urbit {#macos-and-linux}
2222
@@ -122,9 +122,9 @@ There are five kinds of Urbit IDs but to get started you only need to know about
122122
123123A planet name looks like `~sampel-palnet`.
124124
125−[Follow this guide](/using/planet) if you have already acquired a planet.
125+[Follow this guide](@/getting-started/planet.md) if you have already acquired a planet.
126126
127−[Find a planet to purchase](/using/planet#purchase)
127+[Find a planet to purchase](@/getting-started/planet.md#purchase)
128128
129129***
130130
@@ -201,7 +201,7 @@ use |ota %disable or |ota ~sponsor %kids to reset it
201201
202202The dojo is Urbit's command line. You can use it to control your ship, or to execute arbitrary code. Check out the links below for more information.
203203
204−- [Basic Operations](/using/operations/using-your-ship)
204+- [Basic Operations](@/using/os/getting-started.md)
205205- [Basic Hoon](/docs/tutorials/hoon/hoon-school/setup)
206206- [Glossary Entry](/docs/glossary/dojo)
207207
@@ -211,4 +211,4 @@ You can continue using this comet indefinitely. There are currently few differen
211211
212212A comet also comes with a long and fairly unmemorable name whereas a planet has a short name and a "sigil" (avatar) associated with it that makes it more identifiable on the network. You may notice all this within the first few minutes of using Urbit.
213213
214−[To read instructions on how to purchase and use a planet, visit this page](/using/planet).
214+[To read instructions on how to purchase and use a planet, visit this page](@/getting-started/planet.md).
content/getting-started/_index.mdnew file+4
@@ -0,0 +1,4 @@
1++++
2+title = "Getting Started"
3+render = false
4++++
content/using/planet.md → content/getting-started/planet.mdrenamed+9−9
@@ -2,10 +2,10 @@
22title = "Setting up Your Planet"
33weight = 1
44description = "Getting started with a permanent Urbit identity."
5−template = "page_indiced.html"
5+template = "page/getting_started.html"
66+++
77
8−A planet is a permanent Urbit identity. Like all Urbit identities, they can never be taken away from you. Unlike comets which are free, planets are designed for use well into the future. If you're not yet familiar with the Urbit network, please follow the [Getting Started guide](/using/install), which will explain the basics and walk you through using a free identity. This guide explains the next steps.
8+A planet is a permanent Urbit identity. Like all Urbit identities, they can never be taken away from you. Unlike comets which are free, planets are designed for use well into the future. If you're not yet familiar with the Urbit network, please follow the [Getting Started guide](@/getting-started.md), which will explain the basics and walk you through using a free identity. This guide explains the next steps.
99
1010### Purchase a planet {#purchase}
1111
@@ -15,7 +15,7 @@ There are a few ways to get your own planet:
1515- Purchasing a planet, including hosting, from a [hosting provider](#hosting-providers) such as [geturbitid.com](https://www.geturbitid.com/).
1616- Manually setting up and hosting an planet purchased from a third party such as [urbit.live](https://urbit.live), [OpenSea](https://opensea.io), [planet.market](https://planet.market/), [urbit.me](https://urbit.me), [urth systems](https://urth.systems/), or [Urbit Marketplace](https://urbitmarketplace.com/).
1717
18−Note that when you buy a planet, you should ensure with the provider that your parent star is operating. If you need to escape a non-operational star, see [Escaping A Sponsor](/using/operations/using-bridge/#escaping-your-sponsor).
18+Note that when you buy a planet, you should ensure with the provider that your parent star is operating. If you need to escape a non-operational star, see [Escaping A Sponsor](@/using/id/using-bridge.md#escaping-your-sponsor).
1919
2020### Hosting Providers {#hosting-providers}
2121
@@ -35,7 +35,7 @@ Current hosting providers are:
3535
3636Urbit must run on an existing computer somewhere. Most users run their planet on their personal computer, but we recommend eventually using a cloud service (Digital Ocean, Linode, etc) because it allows your planet to be accessed from anywhere on multiple devices. Hosting your planet in the cloud also allows it to always be online and ready for automatic updates. You are welcome to run from your personal computer and switch to the cloud later...all without losing any data!
3737
38−There is a guide for [hosting your planet on DigitalOcean](@/using/operations/hosting.md) and [hosting your planet on Linode](https://jeremytunnell.com/2021/01/09/how-to-install-urbit-on-a-linode-vps), but any cloud hosting service should work.
38+There is a guide for [hosting your planet on DigitalOcean](@/using/running/hosting.md) and [hosting your planet on Linode](https://jeremytunnell.com/2021/01/09/how-to-install-urbit-on-a-linode-vps), but any cloud hosting service should work.
3939
4040### Get your keyfile {#keyfile}
4141
@@ -103,7 +103,7 @@ The first thing you generally want to do with a new planet is to **mount** it. A
103103
104104The `>=` output means that a command was successful. Now you can see your planet's files in its directory.
105105
106−To understand what happened with this command, read more about Urbit’s filesystem (called “clay”) [here](@/docs/tutorials/arvo/clay.md).
106+To understand what happened with this command, read more about Urbit’s filesystem (called “clay”) [here](@/docs/arvo/clay/clay.md).
107107
108108## Updating {#updating}
109109
@@ -117,13 +117,13 @@ use |ota %disable or |ota ~sponsor %kids to reset it
117117>=
118118```
119119
120−If for some reason your sponsor (in this case, `~dopzod`) is not responding, read instructions on [escaping your sponsor](/using/operations/using-bridge.md#escaping-your-sponsor).
120+If for some reason your sponsor (in this case, `~dopzod`) is not responding, read instructions on [escaping your sponsor](@/using/id/using-bridge.md#escaping-your-sponsor).
121121
122122
123123## Next Steps
124124
125125Now that you’re up and running, take some time to deepen your understanding by checking out some of our other guides:
126126
127−- [Host your Ship in the Cloud](@/using/operations/hosting.md): Follow this guide to set your ship up to run as a cloud server, accessible from anywhere.
128−- [Read the Operations Manual](@/using/operations/using-your-ship.md): Become an expert pilot by learning to use your ship.
129−- [Learn to Develop on Urbit](@/using/develop.md): Learn how to contribute to or develop on Urbit.
127+- [Host your Ship in the Cloud](@/using/running/hosting.md): Follow this guide to set your ship up to run as a cloud server, accessible from anywhere.
128+- [Read the Operations Manual](@/using/os/getting-started.md): Become an expert pilot by learning to use your ship.
129+- [Learn to Develop on Urbit](@/docs/development/develop.md): Learn how to contribute to or develop on Urbit.
content/media.md+1−1
@@ -1,4 +1,4 @@
11+++
22title = "Media"
33template = "media/list.html"
4−+++
4++++
content/reset.md+4−4
@@ -74,11 +74,11 @@ Alternatively, you can perform the migration manually (see below).
7474
7575Yes, by following these steps (note that these steps **will not** back up your data as is the case with `flagday`):
7676
77−1. Download your [keyfile from Bridge](https://urbit.org/using/install/#keyfile).
77+1. Download your [keyfile from Bridge](https://urbit.org/getting-started/#keyfile).
78782. Shut down your ship.
79−3. [Archive and move your old pier](https://urbit.org/using/operations/using-your-ship/#moving-your-pier) (this is the directory that contains your urbit event log).
80−4. [Download the latest version](@/using/install.md#macos-and-linux) of the urbit binary.
81−5. [Boot your ship with the new keyfile](https://urbit.org/using/install/#boot-your-planet).
79+3. [Archive and move your old pier](@/using/os/getting-started.md#moving-your-pier) (this is the directory that contains your urbit event log).
80+4. [Download the latest version](@/getting-started.md#macos-and-linux) of the urbit binary.
81+5. [Boot your ship with the new keyfile](@/getting-started.md#boot-your-planet).
8282
8383## I’m hosted by Tlon, or someone else—what do I need to do?
8484
content/understanding-urbit/interface.md+1−1
@@ -43,7 +43,7 @@ OS 1 is a minimal, multipurpose interface for bringing a group together to chat,
4343
4444We built OS 1 for ourselves. We were sick of using centralized, mainstream software. We didn’t want to be stuck switching between bloated, monolithic services in order to keep in touch and move our work forward. We were done relying on some third party to take care of our community—so we exited to Urbit, and it feels good.
4545
46−If you’re curious to get a complete overview of OS 1, check out [this post](https://urbit.org/blog/introducing-os1/), watch the [release event](https://www.youtube.com/watch?v=71ViyftPkGk&feature=youtu.be&t=3963) or feel free to [boot a node](@/using/install.md#comet) to come talk to us.
46+If you’re curious to get a complete overview of OS 1, check out [this post](https://urbit.org/blog/introducing-os1/), watch the [release event](https://www.youtube.com/watch?v=71ViyftPkGk&feature=youtu.be&t=3963) or feel free to [boot a node](@/getting-started.md#comet) to come talk to us.
4747
4848(Running Urbit still requires a little fiddling around in the command-line, so it’s not for everyone—but we do have [plans for that to improve](https://urbit.org/blog/providers/).)
4949
content/understanding-urbit/people-history.md+2−2
@@ -38,7 +38,7 @@ src="https://media.urbit.org/site/understanding-urbit/uu-people-history-2a.jpg"/
3838src="https://media.urbit.org/site/understanding-urbit/uu-people-history-2c.jpg"
3939/>
4040
41−Given how new and unusual Urbit is, it attracts a wide variety of interesting people — both technical and non-technical. The community is generally happy to talk to people about what Urbit is, what we’re up to, and where we’re going. The best way to get involved is to simply join the Urbit Community at `~bitbet-bolbel/urbit-community` — which our [setup instructions](/using/operations/using-your-ship/) can help you do.
41+Given how new and unusual Urbit is, it attracts a wide variety of interesting people — both technical and non-technical. The community is generally happy to talk to people about what Urbit is, what we’re up to, and where we’re going. The best way to get involved is to simply join the Urbit Community at `~bitbet-bolbel/urbit-community` — which our [setup instructions](@/using/os/getting-started.md) can help you do.
4242
4343For those interested in contributing there are some simple instructions on [GitHub](https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md#contributing-to-urbit), but we also run a [grants program](https://grants.urbit.org/) where we reward contributors with Urbit ID address space. Grants aren’t solely for pre-determined projects, either. If you have something you’d like to propose, we’d love to hear from you.
4444
@@ -97,7 +97,7 @@ Building Urbit is about building a future where technology doesn’t control us.
9797
9898Keep in touch while we make build this vision into reality by [joining our mailing list](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&id=be143888d2) or following us on [Twitter](https://twitter.com/urbit) or [GitHub](https://github.com/urbit).
9999
100−If you’re somewhat technical and you’d like to help and contribute, [install Urbit](/using/install) and consider [applying for a grant](https://grants.urbit.org/s).
100+If you’re somewhat technical and you’d like to help and contribute, [install Urbit](/getting-started) and consider [applying for a grant](https://grants.urbit.org/s).
101101
102102If you’re interested in homesteading a community when OS 1 comes out, [apply here](/community/community-grants).
103103
content/understanding-urbit/roadmap.md+2−2
@@ -40,7 +40,7 @@ Let’s walk through the next few phases of Landscape to get a sense of where we
4040
4141We built OS 1 for ourselves, because we wanted to use a communication tool that we can trust and put our system to work for real.
4242
43−Today we use OS 1 every day to chat, write, and share links. It’s a calm, minimalist tool that gets us one step away from the ads, tracking, distraction and disruption of mainstream software. (We won’t get into the details of OS 1 here, but you can check out [this post](https://urbit.org/blog/introducing-os1/) for a walkthrough. You’re also welcome to try [booting a node yourself](https://urbit.org/using/install/).)
43+Today we use OS 1 every day to chat, write, and share links. It’s a calm, minimalist tool that gets us one step away from the ads, tracking, distraction and disruption of mainstream software. (We won’t get into the details of OS 1 here, but you can check out [this post](https://urbit.org/blog/introducing-os1/) for a walkthrough. You’re also welcome to try [booting a node yourself](https://urbit.org/getting-started/).)
4444
4545The first version of OS 1 shipped in March and we’ve been improving it continuously ever since. OS 1 now runs on a much faster, more reliable Urbit OS kernel and network. The interface itself has been cleaned up and made vastly more efficient. If we weren’t so busy, we would have called it OS 1.12 by now.
4646
@@ -93,6 +93,6 @@ Our goal with Landscape is to give communities the tools they deserve to customi
9393But Landscape in early 2021 will likely still only come with a few modules out of the box. Our major next step during 2021 is to make it easy for anyone to add their own modules and for developers to build and publish their own. Enabling third-party development will really enable Urbit-centric communities to tailor their own software.
9494
9595
96−We can’t cover everything about Landscape in a short post, nor about how the community works or evolves what we do. If you’re curious to learn more, try [booting a node](https://urbit.org/using/install/) and joining the Urbit Community group where most of us hang out. That’s where we hang out most of the time, but you can also find us working in public on [GitHub](https://github.com/urbit) and on the [urbit-dev](https://groups.google.com/a/urbit.org/g/dev) mailing list.
96+We can’t cover everything about Landscape in a short post, nor about how the community works or evolves what we do. If you’re curious to learn more, try [booting a node](https://urbit.org/getting-started/) and joining the Urbit Community group where most of us hang out. That’s where we hang out most of the time, but you can also find us working in public on [GitHub](https://github.com/urbit) and on the [urbit-dev](https://groups.google.com/a/urbit.org/g/dev) mailing list.
9797
9898For now, let’s move on to who builds this thing and where it came from.
content/updates/2020-04-04-update.md+1−1
@@ -19,7 +19,7 @@ If you’re a Hoon School graduate, we’ve got a big announcement: The inaugura
1919
2020Haven’t done Hoon School? Don’t worry! We will be running more hackathons in the future, at least two a year. The next Hoon School session begins on Monday the 6th, so there’s still time to sign up. Go to [urbit.org/community/hoonschool/](https://urbit.org/community/hoonschool/) to enroll.
2121
22−OS1 is for [homesteaders and tinkerers](https://urbit.org/understanding-urbit/roadmap/). It’s profoundly new. It’s not our final destination, but it’s an important and foundational tool for getting there. And it’s a big leap towards allowing individuals and communities to use it for their needs. There’s already a growing constellation of public communities on Urbit. When you’re ready to launch OS1, check out our [install guide](https://urbit.org/using/install/).
22+OS1 is for [homesteaders and tinkerers](https://urbit.org/understanding-urbit/roadmap/). It’s profoundly new. It’s not our final destination, but it’s an important and foundational tool for getting there. And it’s a big leap towards allowing individuals and communities to use it for their needs. There’s already a growing constellation of public communities on Urbit. When you’re ready to launch OS1, check out our [install guide](https://urbit.org/getting-started/).
2323
2424If you need a planet, you can buy one from [Urbit Live](https://urbit.live).
2525
content/updates/2020-06-15-update.md+1−1
@@ -27,7 +27,7 @@ We’ve got two exciting lines of work coming together right now. The first is
2727
28283 -
2929
30−The Urbit Community group has been fun and engaging lately. If you’ve booted your Urbit and haven’t joined, we encourage it. We’re there talking about the future of Urbit, core development, and all things Urbit adjacent and related. Ask for an invite in /urbit-help once you’ve gotten [set up](https://urbit.org/using/install).
30+The Urbit Community group has been fun and engaging lately. If you’ve booted your Urbit and haven’t joined, we encourage it. We’re there talking about the future of Urbit, core development, and all things Urbit adjacent and related. Ask for an invite in /urbit-help once you’ve gotten [set up](https://urbit.org/getting-started).
3131
3232
33334 -
content/using/_index.md+31−3
@@ -1,5 +1,33 @@
11+++
2−title = "Using"
2+title = "Usage Docs"
33sort_by = "weight"
4−template = "list.html"
5−+++
4+template = "sections/docs/chapters.html"
5++++
6+
7+Welcome to the usage documentation for the Urbit project. This documentation is
8+maintained by [Tlon](https://tlon.io) and the Urbit community in a public
9+[Github repository](https://github.com/urbit/urbit.org). Issues and
10+contributions are welcome.
11+
12+This documentation provides a series of guides and reference material for
13+assisting you in the usage and operations of your ship. If you're looking for
14+documentation on how to *develop* on Urbit, see our [development docs](@/docs/_index.md).
15+
16+### [Urbit OS](@/using/os/_index.md)
17+
18+This section describes how to interact with your running Urbit ship: this
19+includes working with the filesystem, command line (`dojo`), resolving common
20+issues, and more.
21+
22+### [Urbit ID](@/using/id/_index.md)
23+
24+Urbit ID is our [public-key infrastructure](@/using/id/overview.md), which is
25+what allows you to truly own your identity. Here you'll find guides for
26+interacting with your Urbit ID via our [Bridge](https://bridge.urbit.org)
27+application.
28+
29+### [Running Urbit](@/using/running/_index.md)
30+
31+Urbit can be run in a variety of contexts. Our [Getting Started
32+Guide](@/getting-started.md) covers how to run an Urbit locally on your
33+computer; this section covers alternative ways of running Urbit.
content/using/develop.mddeleted−117
@@ -1,117 +0,0 @@
1−+++
2−title = "Developer's Guide"
3−description = "How to get started developing on Urbit."
4−weight = 3
5−template = "page_indiced.html"
6−aliases = ["/docs/using/creating-a-development-ship/", "/docs/getting-started/contributing"]
7−+++
8−
9−You can develop on Urbit in three ways:
10−
11−- [Applications using Urbit](#api), which use Urbit as the back-end to store data and communicate with others
12−- [Urbit Applications](#application), which are written in [Hoon](/docs/glossary/hoon/), and run as part of Urbit
13−- [Urbit Core](#core), which involves contributing to Urbit's operating system ([Arvo](https://github.com/urbit/urbit/tree/master/pkg/arvo)) or runtime ([Vere](https://github.com/urbit/urbit/tree/master/pkg/urbit))
14−
15−This guide will start by getting you set up to run an Urbit ship, and then tell you everything you need to know to do either.
16−
17−### Setting up your environment
18−
19−We assume you’ve gotten a basic introduction to Urbit. If you haven’t, read the [Understanding Urbit](@/understanding-urbit/_index.md) series.
20−
21−Once you’re ready, you can get started on the network right away and take some first steps, without acquiring an identity, by [creating a comet](@/using/install.md#comet).
22−
23−When developing, however, we recommend [booting a development ship](#creating-a-development-ship) and working locally -- you may need to make changes that could, in the wrong hands, destroy the ship’s environment, and it’s best to do so in a safe, separate place.
24−
25−## Applications using Urbit {#api}
26−
27−Urbit ships with its own set of apps written in its own language, Hoon. However it is also meant to integrate with applications written in other languages via an API. The clearest example of an application using Urbit is Landscape, the default client. Although it does currently ship with Urbit, its front-end is a separate piece of software that uses Urbit's HTTP APIs to interact with an Urbit ship. You can create your own application that uses Urbit to store data and interact with other Urbit ships without writing any Hoon code thanks to Urbit's HTTP APIs. This could be a chat client, a writing app, a game, or anything else that can communicate over HTTP.
28−
29−To get started quickly with the language of your choice, see the following libraries that provide HTTP interfaces to Urbit:
30−
31− - [Python](https://github.com/baudtack/urlock-py) (Stable)
32− - [Swift](https://github.com/dclelland/UrsusAirlock) (Under development)
33− - [Haskell](https://github.com/bsima/urbit-airlock) (Under active development)
34− - [JavaScript](https://www.npmjs.com/package/urbit) (Under active development)
35− - Go (Pending release)
36−
37−[View details about using the API or creating your own implementation here.](/using/integrating-api/)
38−
39−## Urbit Applications {#application}
40−
41−Urbit applications are still young, but can be fun to experiment with.
42−
43−When creating user applications on Urbit, you aren’t tied to any particular user interface. They can work without providing a response to the user, or by printing to the Dojo, or with an interface in Landscape, which uses [Eyre](@/docs/tutorials/arvo/eyre.md) (the Arvo vane that serves HTTP to serve a React-based interface to the application through a web browser).
44−
45−When writing applications, you will often make use of [Gall](@/docs/tutorials/hoon/hoon-school/gall.md), the Arvo vane that manages user applications.
46−
47−If you want to see examples of Urbit applications with common functionality requirements, you can see our [examples](https://github.com/urbit/examples) repository. If you want to get started building applications with a Landscape interface, check out our [create-landscape-app](https://github.com/urbit/create-landscape-app) repository.
48−
49−## Urbit Core {#core}
50−
51−Working on the core means improving the Urbit project itself, working with the existing community of Urbit developers. The kernel is much more stable, but generally more challenging from an engineering standpoint.
52−
53−Just arrived and unsure what to work on? An ideal way to get started is by experimenting with the system, talking to other developers, and reading (or [contributing to](https://github.com/urbit/docs)) the [documentation](/docs/).
54−
55−Prefer learning with an instructor? Our community runs an online course that covers the basics of Urbit development called [Hooniversity](https://hooniversity.org/). If course-based learning works well for you, we recommend you sign up.
56−
57−The Urbit developer community congregates around [the urbit-dev mailing list](https://groups.google.com/a/urbit.org/forum/#!forum/dev), the `~bitbet-bolbel/urbit-community` group on Landscape, and [Urbit’s GitHub repository](https://github.com/urbit/urbit). It’s a good idea to sign up, see what people are talking about, and introduce yourself.
58−
59−Once you’re comfortable working with Urbit, check out the [project’s issues on GitHub](https://github.com/urbit/urbit/issues) or some of our [contribution bounties](https://grants.urbit.org/).
60−
61−If you’re looking for some guidance, need help, or would prefer direct communication for your ideas, you can also always reach out to us directly at [support@urbit.org](mailto:support@urbit.org).
62−
63−## Creating a development ship {#creating-a-development-ship}
64−
65−To do work with Hoon and with the system, we recommended using a "fake" ship -- one not connected to the network.
66−
67−Because 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](/using/install).
68−
69−To create a fake ship named `~zod`, run the command below. You can replace `zod` with any valid Urbit ship-name.
70−
71−```
72−./urbit -F zod
73−```
74−
75−Now you should see a block of boot messages, starting with the Urbit version number. Welcome!
76−
77−## Community tutorials {#community-tutorials}
78−
79−Here are some tutorials written by members of the Urbit community.
80−
81−- [A Nock Interpreter](https://jtobin.io/nock) by `~nidsut-tomdun`
82−- [Basic Hoonery](https://jtobin.io/basic-hoonery) by `~nidsut-tomdun`
83−- [The Complete Guide to
84− Gall](https://github.com/timlucmiptev/gall-guide/blob/master/overview.md) by
85− `~timluc-miptev`
86−- [Nock for Everyday Coders](https://blog.timlucmiptev.space/part1.html) by `~timluc-miptev`
87−- [Rote - An Annotated Flashcard App](https://github.com/lukechampine/rote)
88−
89−If you want to add something to the list, [shoot us an email](mailto:support@urbit.org) or make a pull request in the [docs repository](https://github.com/urbit/docs).
90−
91−## How else can I contribute? {#how}
92−
93−The Urbit project is a global community of developers, users, and fans. If you’re interested in getting involved, there’s space for you; you don’t have to be a developer to be a part of the project.
94−
95−### Running stars and galaxies
96−
97−There are two ways to participate in the Arvo network: as a user running a planet and as an infrastructure provider running a galaxy or a star.
98−
99−For planets, Urbit is a peer-to-peer network where users can interact with each other via Landscape, or using custom applications that anyone can write.
100−
101−Running a planet helps build Urbit’s community, surfaces bugs, and helps core developers improve Urbit under realistic conditions.
102−
103−Stars and galaxies, however, have additional responsibilities and play a role in peer discovery as well as star and planet distribution. You can think of stars and galaxies as similar to the DNS system in the modern Internet. Most users don’t know it exists, but without it, the web wouldn’t work at all.
104−
105−Running a reliable galaxy or star, and spawning stars and planets from them, are excellent ways to help bootstrap the Urbit network.
106−
107−If you’re interested in running a galaxy or star, you’ll be reliably providing peer discovery for your children just by running your node – and we’re doing our best to make this both easy and profitable. If you’re interested in this, see [Star and Galaxy Operations](@/using/operations/stars-and-galaxies.md).
108−
109−If you’re interested in distributing planets, read on.
110−
111−### Distribute points
112−
113−Want to get your friends and family into Urbit? Distribute planets using Bridge with a feature called **delegated sending**.
114−
115−Here’s how it works: any star can grant a number of invites to any of its child planets. Those planets can then send one-time-use invite codes via email to anyone of their choosing.
116−
117−For instructions on how to grant and send invites, check out [Using Bridge](@/using/operations/using-bridge.md).
content/using/id/_index.mdnew file+33
@@ -0,0 +1,33 @@
1++++
2+title = "Urbit ID"
3+template = "sections/docs/chapters.html"
4+sort_by = "weight"
5+description = "How to interact with Urbit ID."
6+weight = 20
7++++
8+
9+Urbit ID is our [public-key infrastructure](@/using/id/overview.md), which is
10+what allows you to truly own your identity.
11+
12+### [Overview](@/using/id/overview.md)
13+
14+This document discusses what Urbit ID is, how it's built, and why it's been
15+built that way at a high level.
16+
17+### [Using Bridge](@/using/id/using-bridge.md)
18+
19+A guide to using [Bridge](https://bridge.urbit.org), our tool for managing your
20+Urbit ID.
21+
22+### [Bridge Troubleshooting](@/using/id/bridge-troubleshooting.md)
23+
24+How to resolve common issues in Bridge.
25+
26+### [Creating an Invite Pool](@/using/id/creating-an-invite-pool.md)
27+
28+If you own a star, invite pools allow your friends to invite others onto the
29+network.
30+
31+### [Guide to Breaches](@/using/id/guide-to-breaches.md)
32+
33+What to do when things go very wrong and you need to start over.
content/using/operations/bridge-troubleshooting.md → content/using/id/bridge-troubleshooting.mdrenamed+4−2
@@ -1,10 +1,12 @@
11+++
22title = "Bridge Troubleshooting"
3−template = "page_indiced.html"
3+template = "doc.html"
44description = "Troubleshooting Bridge if you are running into errors"
5−weight = 5
5+weight = 20
66+++
77
8+This page covers common issues encountered with the [Bridge](https://bridge.urbit.org) application.
9+
810### Canvas Issues
911
1012Bridge uses an HTML element called canvas to create your wallets. Unfortunately malicious websites can use canvas to identify and track users. As a result, some browsers and anti-tracking extensions can interfere with Bridge's ability to generate wallets.
content/using/id/creating-an-invite-pool.mdnew file+106
@@ -0,0 +1,106 @@
1++++
2+title = "Creating an Invite Pool"
3+weight = 30
4+template = "doc.html"
5++++
6+
7+If you're a star owner, you have the ability to create **invite pools**. These
8+invite pools let you give your friends a piece of the network in the form of a
9+planet. This document will give you an explanation of how to create an invite
10+pool and how to share it with your friends using our tool
11+[Bridge](https://bridge.urbit.org).
12+
13+For more general tips on using your star, check out the [Star and Galaxy
14+Operations page](@/using/_index.md).
15+
16+## Anatomy of an Invite Pool
17+
18+An invite pool is a set of planet invites that can be distributed via email or
19+URL; each invite is worth one planet when redeemed. An invite pool can be as big
20+as you'd like, providing that you have enough planets left to spawn. All invite
21+pools must be created by a star, but they must be given to a planet. If you're
22+interested in how this works technically, take a look at the
23+[DelegatedSending.sol
24+contract](https://github.com/urbit/azimuth/blob/master/contracts/DelegatedSending.sol).
25+
26+Keep in mind that all planets will have access to the invite pool until the
27+invite pool is exhausted.
28+
29+For example: As `~marzod`, I spawn `~wicdev-wisryt` and give it an invite pool
30+of 100 planets. `~wicdev-wisryt` can now send an invite to a friend at
31+galen@tlon.io. When Galen claims his planet (`~ravmel-ropdyl`), `~ravmel-ropdyl`
32+can now invite his friend — or 99 of them. `~wicdev-wisryt` may also continue to
33+use the invite pool, as can anybody they invite.
34+
35+## How To Create an Invite Pool
36+
37+Giving your friends a piece of Urbit only takes a few minutes: send an invite
38+pool to a planet, and then that planet can email an invite to a friend (or
39+friends)
40+
41+1. Log into Bridge using your ownership address for your star.
42+
43+2. Change the spawn proxy of your star to
44+ `0xF7908Ab1F1e352F83c5ebc75051c0565AEaea5FB`. This is a contract address that
45+ will handle the spawning of planets for invitees.
46+
47+3. Get the `@p` (like `~poldec-tonteg`) of the planet to whom you'd like to give
48+ access to the invite pool. It can be one you control or a friend's. It does
49+ not have to be a planet sponsored by your star.
50+
51+3. Click "Manage Invite Pools" to assign an invite pool to the planet. You may
52+ receive a notification that you need to assign your spawn proxy to the
53+ address of the Delegated Sending contract. This is so that the contract can
54+ send invites on your behalf when the recipient claims them. This address is
55+ `0xF7908Ab1F1e352F83c5ebc75051c0565AEaea5FB`, which is also displayed in Bridge.
56+
57+![](https://media.urbit.org/docs/invite-pool/browser-point.png)
58+
59+4. Enter the `@p` of the planet and the number of invites you'd like to assign to them.
60+
61+![](https://media.urbit.org/docs/invite-pool/browser-create-pool.png)
62+
63+Once the transaction is complete, the planet will have access to the invite pool.
64+
65+## How to Send an Invite
66+
67+1. Log into Bridge using the planet assigned an invite pool above using the
68+ planet's Master Ticket or ownership address.
69+
70+2. Under "Invite Group", click "Add Members" to unroll the invitation UI.
71+
72+3. Select either "Email" or "URL".
73+
74+4. If you selected "Email", enter the email address(es) of those you wish to
75+ invite to the dialog box. You may add more than one email address. Click "Add to
76+ Invite Group" when finished, and wait for the transaction to complete. Your
77+ friend(s) will get an email shortly with your gift of an identity for life!
78+
79+ If you selected "URL", click "Generate Invite URL" to create an invitation URL
80+ that you can then share.
81+
82+## FAQ
83+
84+Q. What happens if the spawn proxy address is changed away from
85+`0xF7908Ab1F1e352F83c5ebc75051c0565AEaea5FB` after an invite pool has been
86+created? Will outstanding invite pool(s) still function?
87+A. They won't. Existing balances will remain, but Bridge (and `azimuth-js`) won't
88+consider any of the invites from that star usable, and trying to send one of
89+their planets anyway will result in a failed transaction.
90+
91+Q. Can a star create more than one invite pool at a time?
92+A. Yes, a star can allow any given planet to send any number of invites
93+independently from one another.
94+
95+Q. Can an invite pool be revoked?
96+A. Yes, this may be done by assigning zero invites to a planet that had been
97+previously been given access to an invite pool.
98+
99+Q. Can a delegated planet have more than one invite pool assigned to it?
100+A. Yes, as a planet, multiple stars can give you invites to use.
101+
102+Q. What can you do if you send an invite to an email address by mistake?
103+A. Planets that have been sent but not yet claimed live at the
104+ownership address of the star that created the invite pool. Log into Bridge
105+using the ownership address for the star and you will be able to cancel the
106+pending invite. Once an invite has been accepted, nothing can be done!
content/using/id/guide-to-breaches.mdnew file+90
@@ -0,0 +1,90 @@
1++++
2+title = "Guide to Breaches"
3+weight = 40
4+template = "doc.html"
5++++
6+
7+An important concept on the [Ames](@/docs/arvo/ames/ames.md) network is that of continuity. Continuity refers to how ships remember the order of their own network messages and the network messages of others -- these messages are numbered, starting from zero. A _breach_ is when ships on the network agree to forget about this sequence and treat one or more ships like they are brand new.
8+
9+There are two kinds of breaches: **personal breaches** and **network breaches**.
10+
11+## Personal Breaches
12+
13+Ships on the Ames network sometimes need to reset their continuity. A personal breach is when an individual ship announces to the network: "I forgot who I am, let's start over from scratch." That is, it clears its own event log and sends an announcement to the network, asking all ships that have communicated with it to reset its networking information in their state. This makes it as though the ship was just started for the first time again, since everyone on the network has forgotten about it.
14+
15+Personal breaches often fix connectivity issues, but should only be used as a
16+last resort. Before performing a personal breach, look at alternative fixes in
17+the [Ship Troubleshooting](../ship-troubleshooting) guide. Also reach out for
18+help in the Help channel in the Urbit Community group
19+`~bitbet-bolbel/urbit-community`, or, failing that, in the
20+`#ship-starting-support` channel in our [Discord
21+server](https://discord.gg/n9xhMdz) to see if there is another option.
22+
23+There are two types of personal breaches - one where your Ethereum ownership address
24+remains the same, and one where you are switching to a new Ethereum ownership
25+address. We make the emphasis about the Ethereum _ownership_ address as
26+changing your [proxies](@/docs/glossary/proxies.md) does not require a breach.
27+
28+If you will be keeping the same Ethereum ownership address and would like to perform a
29+personal breach, follow the steps below.
30+
31+- Go to [bridge.urbit.org](https://bridge.urbit.org) and log into your identity.
32+- Click on `OS: Urbit OS Settings` at the bottom, then click `Reset Networking Keys`.
33+- Check the `Breach Continuity` box. Click `Reset Networking Keys`, and then click `Send Transaction` and wait for the progress bar to appear.
34+- Download your new keyfile following these instructions: [Generate your
35+ keyfile](@/using/id/using-bridge.md#generate-your-keyfile).
36+- Delete or archive your old [pier](@/docs/glossary/pier.md).
37+- Proceed to [boot your ship](@/getting-started.md#boot-your-planet) with the new keyfile.
38+- Delete your keyfile after successfully booting.
39+- Rejoin your favorite chat channels and subscriptions.
40+
41+If you are switching to a new Ethereum ownership address you will have the
42+choice as to whether or not you want to breach. This is to cover the case when
43+you are transferring to another address you own. The process here is slightly different.
44+
45+- Go to [bridge.urbit.org](https://bridge.urbit.org) and log into your identity.
46+- Click on `ID: Identity and security settings` at the bottom, then click
47+ `Transfer this point`.
48+- Enter the new Ethereum address you would like to transfer ownership to. Click
49+ `Generate & Sign Transaction`, then click `Send Transaction` and wait for the
50+ progress bar to complete.
51+- Logout of your current session in Bridge by clicking `Logout` at the top, and
52+ then login to your new ownership address.
53+- From here, following the directions on how to [Accept your
54+ transfer](@/using/id/using-bridge.md#accept-your-transfer), [Set your
55+ networking keys](@/using/id/using-bridge.md#set-your-networking-keys),
56+ and [Generate your
57+ keyfile](@/using/id/using-bridge.md#generate-your-keyfile). The option
58+ whether or not to breach is in the Accept your Transfer step.
59+- Delete or archive your old [pier](@/docs/glossary/pier.md).
60+- Proceed to [boot your ship](@/getting-started.md#boot-your-planet) with the new keyfile.
61+- Delete your keyfile after successfully booting.
62+- Rejoin your favorite chat channels and subscriptions.
63+
64+Performing a personal breach on your ship increments an integer value called
65+your ship's _life_ by one, which refers to your ship's [Azimuth](@/docs/azimuth/azimuth.md) _key
66+revision number_. This value is utilized by
67+Ames and Jael to ensure that you are
68+communicating with a ship created using its most recent set of keys. Your
69+ship's life is written at the end of the name of its keyfile, e.g.
70+`sampel-palnet-4.key`. Changing the Etherum address that holds the Urbit ID,
71+called _reticketing_, increments a number called the ship's _rift_ by one in
72+addition to incrementing your ship's life.
73+Rift refers to your ship's Azimuth _continuity number_.
74+
75+You can check your current life and rift number by running the
76+`+keys our` generator in Dojo. You can inspect another ship's life and rift can be checked by
77+running `+keys ~sampel-palnet`.
78+
79+
80+## Network Breaches
81+
82+A network breach is an event where all ships on the network are required to update to a new continuity era. Network breaches happen when an Arvo update is released that is too large to release over the air. The current continuity era is given by a value in Ames, our networking vane, that is incremented when a network breaches; only ships with the same such value are able to communicate with one another.
83+
84+If a network breach is happening, follow the steps below.
85+
86+- Delete your old Urbit binary.
87+- Delete or archive your old pier.
88+- Download the new Urbit binary by following the instructions in the [Install page](@/getting-started.md).
89+- Create a new pier by booting your ship with your key, according to the instructions on the install page. (Note: You do _not_ need to use a new key to boot into a new continuity era.)
90+- Rejoin your favorite chat channels and subscriptions.
content/using/id/overview.mdnew file+71
@@ -0,0 +1,71 @@
1++++
2+title = "Overview"
3+description = "A public key infrastructure (PKI) is a system for binding a set of keys to a name. Sometimes a small amount of metadata is included."
4+weight = 1
5+template = "doc.html"
6++++
7+
8+![](https://media.urbit.org/site/posts/essays/pki-maze.png)
9+
10+A public key infrastructure (PKI) is a system for binding a set of keys to a name. Sometimes a small amount of metadata is included.
11+
12+Existing PKIs include PGP-style ["web of trust"](https://en.wikipedia.org/wiki/Web_of_trust), [SSL certificates](https://en.wikipedia.org/wiki/Certificate_authority), [ZeroTier](https://www.zerotier.com/lf-announcement/), [Keybase](https://keybase.io/), [OpenID](https://openid.net/what-is-openid/), [Mozilla Persona](https://developer.mozilla.org/en-US/docs/Archive/Mozilla/Persona), and [Login with Google](https://developers.google.com/identity). These take unique approaches to the problem and have achieved some degree of success, but none provide globally consistent, permanent, and completely self-owned identities. Exhaustive exploration and categorization is unfortunately out of scope for this post, so we'll just describe Urbit's approach to achieving these properties in our PKI.
13+
14+In Urbit, a "name" is often called a "ship" or an "address" because we use the metadata in the PKI to make names routable. The total data is two 256-bit asymmetric keys, a cryptographic suite number (to allow changing crypto algorithms), the revision number of the key, and the name of a ship that will route for it. This sums to less than 128 bytes of data.
15+
16+Each PKI trades off various properties. We chose a tripartite system so that appropriate choices can be made for different use cases. Here, we explore the various properties we chose by following a series of binary choices -- the idea maze.
17+
18+There are two sorts of PKI: either you can change your keys or not. If you cannot, then your name is impermanent, for no one can keep a set of keys secure forever. Even if your opsec never fails, eventually your crypto algorithms may be compromised.
19+
20+However, if you sacrifice the ability to change your keys, you can have a very nice property: self-attesting keys. If your name is a hash of your public key information, then no other source of information is required to verify you are who you say you are. This is a useful property since it requires no coordination at all. Many things are impermanent, especially during development. It also provides a way to try out the network without obtaining a permanent address.
21+
22+This is our first stop in the idea maze. We call this sort of name a "comet". A comet's name is the 128-bit hash of its public keys.
23+
24+However, Urbit is yours and it's forever. You shouldn't have to change your name every time you change your keys. So, we go back and take the other choice: you must be able to change your keys.
25+
26+To change keys, you must sign a message with the old keys revoking them and supplying the new ones[^0]. The question is what happens if the old keys also sign a second set of new keys. This could happen if an attacker obtained your old keys after the fact. This is important because one of the reasons to be able to change your keys is to invalidate the old ones so that they have no power.
27+
28+We have two options again: the PKI may be globally consistent or not. To be globally consistent means that if you believe a name is bound to a set of keys, then nobody on the network will disagree.
29+
30+If you don't require global consistency, you may sign this message and send it to all your neighbors, and they pass it on, and hopefully it gets to most of the network quickly. However, if one of those ships receives two contradictory versions of this message, the only thing it can do is trust the first one it heard, which may be different than what someone else heard. Thus, this is pairwise consistent but globally inconsistent. This is essentially how the pre-blockchain Ames network worked, though key changes were not actually implemented. Because global consistency is a valuable property, we looked at other options.
31+
32+For a globally consistent PKI that allows you to revoke keys, you need to be able to distinguish between two cryptographically valid messages to determine which was signed first. The dual problem could be solved easily — you can prove a message is signed after another by including the signature of the first in the second. This is equivalent to reading out a newspaper headline to prove a message was recorded after a given day.
33+
34+However, the problem of proving one message was sent before any later ones inverts the problem. You can solve this with newspapers by placing the message in the text of the newspaper. However, while reading a newspaper requires no central party, writing one does. For a long time, this sort of message was always handled by a central party. SSL revocations are managed by a few central parties. When you buy property, it's not sufficient to have the previous owner sign the title — this must be entered into a central land registry. Otherwise, the owner may sell their property to multiple people and there would be no way to determine who is the new owner. With the land registry, all you need to do is ask the registry which sale happened first, and that's the one that counts.
35+
36+However, Urbit is yours and it's forever. Trusting central registries jeopardizes both. The keen reader will notice that the problem of determining which key rotation happened first is exactly the double-spend problem that Satoshi solved with his proof of work algorithm for Bitcoin. His first block famously includes a newspaper headline to prove he didn't mine the block before that date. In a beautiful duality, his own algorithm proves that he didn't mine it after that date.[^1]
37+
38+Some argue that blockchain is only good for money. This is myopic and is generally based on the experience that its most valuable application so far has been money. However, blockchain is a cryptographic primitive to do what was previously impossible: prove that one message was signed before another without a central party. Blockchain was discovered by someone trying to create digital money, and he needed that primitive, but that doesn't mean that's all it's good for.
39+
40+Thus, we store our PKI data on a blockchain for our second kind of name: planets. A planet is a 32-bit address which has key information stored on the blockchain.[^2] The owner of a planet may broadcast new PKI data by adding it to the blockchain. Any later messages by the old keys will be rejected, and everyone on the network will listen to the blockchain for key data. Thus, we have global consistency, permanence, and self sovereignty. We know of no other solution that can provide these properties.
41+
42+However, while small individually, the aggregate PKI data for all nodes on the network may become very large. This is not an issue for comets because nobody needs to store comet keys except for those which they're talking with, and even those can be garbage-collected and re-requested and verified. For planets, there is a canonical set of keys, and somebody must store that. There are about 2<sup>32</sup>, or 4 billion planets. If the PKI data is about 100 bytes for each planet, this is about 400 GB of data. This may be more than most users wish to store, but it's small enough that it would be very cheap for someone to host this data for many users[^3].
43+
44+This information is currently stored directly on the Ethereum 1.0 blockchain, but as is well understood in blockchain circles this approach will not scale beyond a certain point. Many chains are pursing designs that allow the users of the smart contracts to store locally the data associated with the contracts they care about and only commit hashes to the chain. We expect there to be several viable options for this by the time our scaling needs exceed what's provided by Ethereum 1.0. This will free us from the cost of hosting the PKI data on all Ethereum nodes, but the data must still be stored somewhere. Any service that could handle such a large amount of data would inherently centralize the network.
45+
46+However, 4 billion is not enough addresses for every device on the planet today, much less in a few decades. So, we apply our maxim of re-examining our choices at each level for each use case. Examining the idea maze above, we cannot use the blockchain option for everything since the data is too big. However, it's not actually necessary for each of your devices to have its own self-sovereign identity separate from your planet. So we choose the option of using a central registry: your own planet.
47+
48+We allocate 4 billion "moons" to each of those planets. A moon is a 64-bit address whose 32-bit suffix is its planet. Your planet can easily store the keys for its own moons, and anyone who needs to talk to your moons can ask you for the keys.
49+
50+This is the sense in which moons are true ships: they're permanent names and you own them completely, as long as you own the planet. However, they're not independent ships — their keys can always be revoked by their planet.
51+
52+To create a sane network, we require global consistency for all our names. There are three other properties; pick any two:
53+
54+- Comets are impermanent, self sovereign, and plentiful.
55+
56+- Planets are permanent, self sovereign, and not plentiful.
57+
58+- Moons are permanent, not self sovereign, and plentiful.
59+
60+Fancifully, comets are wayward celestial bodies that are great for testing and miscellaneous low-value things that won't last for long. Planets are where you can build a home and shape it into anything you want it to be. People can always find your planet; it's not going anywhere. Moons are useful for special purposes, like storage, heavy industry, and anything else you might want to do off-planet.[^4]
61+
62+
63+[^0]: Or the equivalent with a hierarchical key structure. In practice, you want to have a master key which signs a junior key for everyday use. You use the master key to rotate the junior key.
64+
65+[^1]: More strictly: it proves that he didn't mine it after the other blocks currently on the Bitcoin blockchain. It only gives an ordering within the chain, not a literal timestamp.
66+
67+[^2]: In addition to planets, there are stars and galaxies. From a PKI perspective they're treated exactly like planets, but on the network they provide infrastructure services like routing.
68+
69+[^3]: In practice, this will likely be an included service by your sponsoring star. It could be a separate service, but it will be very cheap because it's a commodity and the "cost of production" is very cheap. At any rate, it should never rise above the capital cost of a 400GB hard drive.
70+
71+[^4]: To extend the metaphor, stars are a neighborhood to live in -- they're easier for other planets to see, so when they want to send you a message they look for your star first. If they don't even know where your star is, they can certainly find your star's galaxy, and that will be enough to locate the star. Of course, if your star is not providing satisfactory service, you can take your planet and move to another star.
content/using/operations/using-bridge.md → content/using/id/using-bridge.mdrenamed+5−5
@@ -1,8 +1,8 @@
11+++
22title = "Using Bridge"
3−template = "page_indiced.html"
3+template = "doc.html"
44description = "How to use Bridge to interact with Azimuth and manage your Urbit ID."
5−weight = 1
5+weight = 10
66aliases = ["/docs/getting-started/using-bridge/"]
77+++
88
@@ -14,7 +14,7 @@ This guide assumes that you have an Urbit ID, or that you have found someone to
1414
1515To connect to Bridge, go to [https://bridge.urbit.org](https://bridge.urbit.org) into your browser, and enter your identity's credentials in the appropriate fields. If you were invited to claim an Urbit ID, it's very likely that you received an email that would direct you to Bridge, and you can simply follow the hyperlink in that email.
1616
17−You'll arrive at a page and see two major choices: `ID` and `OS`. `OS` is the only option that you're interested in right now; click on it. On the `OS` page, click the `Download Arvo Keyfile` button. Once you have downloaded the keyfile, you can exit Bridge and proceed to [install the Urbit binary](@/using/install.md).
17+You'll arrive at a page and see two major choices: `ID` and `OS`. `OS` is the only option that you're interested in right now; click on it. On the `OS` page, click the `Download Arvo Keyfile` button. Once you have downloaded the keyfile, you can exit Bridge and proceed to [install the Urbit binary](@/getting-started.md).
1818
1919### Local Bridge
2020
@@ -72,9 +72,9 @@ It should be noted that setting your network keys is an event on the Ethereum ne
7272From the detail page associated with your point, click the `Generate Arvo Keyfile` link and you'll be taken to a page with a field titled `Network seed`. This field should already be filled in, and should match the hexadecimal string that you entered in the previous step. If it's not filled in or does not match, fill it in with the correct string.
7373Click `Generate ->`, which will download a keyfile onto your machine.
7474
75−With that keyfile in hand, you can now exit Bridge and continue to the guide to [install the Urbit binary](@/using/install.md).
75+With that keyfile in hand, you can now exit Bridge and continue to the guide to [install the Urbit binary](@/getting-started.md).
7676
77−### Escaping your sponsor
77+### Escaping your sponsor {#escaping-your-sponsor}
7878
7979As a planet or star, it behooves you to be sponsored by an active star or galaxy,
8080respectively. If your sponsor isn't suiting your needs, you can escape to a
content/using/integrating-api.mddeleted−224
@@ -1,224 +0,0 @@
1−+++
2−title = "Integrating with Urbit for Developers"
3−description = "How to use Urbit's API."
4−weight = 4
5−template = "page_indiced.html"
6−+++
7−
8−This guide is aimed at developers who have a working knowledge of HTTP grammar (`PUT`, `GET`), and should not require any special knowledge of Urbit's internals. To learn more about a specific application within Urbit, please search for that with the docs once you have finished this guide.
9−
10−## Authentication
11−
12−The first step in creating an application *on* Urbit (to be distinguished from an Urbit application) is to authenticate with the desired ship. This can be a planet, comet, or any other Urbit ship. For the purposes of this example, we will be running a "fakezod" on port 8080. Run this code, substituting the appropriate path to your Urbit binary:
13−
14−```bash
15−/path/to/urbit -p 8080 -F zod
16−```
17−
18−(for the unfamiliar, this will create a folder named "zod" in your working directory, from which the ship will run. Use `/path/to/urbit -p 8080 zod` in the future)
19−
20−You can run `+code` in the dojo to get the key, but a fakezod's key is always `lidlut-tabwed-pillex-ridrup`. This is our password, our API token that we will use.
21−
22−Run this code in your bash terminal (requires cURL):
23−
24−```bash
25−curl -i localhost:8080/~/login -X POST -d "password=lidlut-tabwed-pillex-ridrup"
26−```
27−Let's explain what this does:
28−
29− - `-i` displays the headers, so that you can see the cookie that gets sent
30− - `localhost:8080/~/login` is the URL to which you are POSTing. You will note this is also the URL you visit when you log into Landscape.
31− - `-X POST` specifies that you are POSTing data, not GETting.
32− - `-d "password=lidlut-tabwed-pillex-ridrup"` specifies the key for your Urbit that we retrieved above. It is sent as form data, as if it were sent from an HTML form input field (which it is in Landscape)
33−
34−You should see the following:
35−
36−```bash
37−HTTP/1.1 200 ok
38−Date: Sun, 01 Jan 2020 00:00:00 GMT
39−Connection: keep-alive
40−Server: urbit/vere-0.10.8
41−set-cookie: urbauth-~zod=0v3.fvaqc.nnjda.vude1.vb5l6.kmjmg; Path=/; Max-Age=604800
42−transfer-encoding: chunked
43−```
44−
45−The `Date` and `set-cookie` will be slightly different of course.
46−
47−Take a look at the `set-cookie` line. This is now your session authentication, and will need to be sent with any future requests. It consists of three parts:
48−
49− - `urbauth` is a prefix that Eyre uses to check for presence of authentication
50− - `~zod` is the name of the ship you are logging in as
51− - `0v3.fvaqc.nnjda.vude1.vb5l6.kmjmg` is the actual authentication token.
52−
53−At present there is no way to separate these parts — you must pass a cookie *as* a cookie. This string must be in the `Cookie` header. The `set-cookie` header is only used for this request upon response. It is what browsers expect when receiving a cookie.
54−
55−## Interacting with Urbit
56−
57−Once authenticated, you will perform all your operations on a channel. You may open as many channels as needed using the same authentication token, but this will increase complexity and memory usage on your Urbit ship.
58−
59−Interacting with Urbit comprises two parts:
60−
61−1. Sending information via PUT requests, which receive HTTP status code `204` (no content) upon success. We will not receive updated information (as in a POST request).
62−2. Receiving data on channels, which must first be subscribed to via an initial request. These come in the form of SSEs ([Server-Sent Events](https://www.w3.org/TR/eventsource/))
63−
64−These can be used independently, i.e. you may choose to only send information or only receive information from your Urbit, based on your application. Both can take place on the same channel.
65−
66−### Creating a Channel
67−
68−For this example, we will use the following channel:
69−
70−```
71−http://localhost:8080/~/channel/1601844290-ae45b
72−```
73−
74−Let's examine the parts. A channel is simply a URL in this pattern: `{url}/~/channel/{uid}` where `{uid}` is a string of your choosing. Most libraries default to the current unix time plus six hexadecimal characters. Your program should determine a channel for its current session and store that in its state.
75−
76−The channel does not yet exist in Urbit, however. To subscribe to events on this URL, you must first make a request (PUT) to Urbit on this URL. The simplest way to do this is to `hi` ourselves, as if we had entered `|hi our` in the dojo. A `hi` is analogous to a ping, and does not manipulate state. Let's learn how to make requests using this as an example.
77−
78−### Making Requests
79−
80−All requests will take the form of sending a message. Messages can take different forms, such as `subscribe`s, `ack`s, and `poke`s. These are called actions and there are more than these, but these will cover most basic use cases. You can think of them as a somewhat more sophisticated HTTP grammar. A message always requires an `id` and an `action`. Other fields depend on the specific action.
81−
82−Let's look at the structure of a message by examining the most basic `hi` we will send.
83−
84−```js
85−{
86− 'id': 1, // Required. A sequential ID. Keep track of which messages you have sent.
87− 'action': 'poke', // Required. The action to take. poke is the most basic way of sending data, like HTTP POST
88− 'ship': 'zod', // Required by poke. The ship on which to perform the poke. You can only poke foreign ships with JSON, but this is the authenticated ship.
89− 'app': 'hood', // Required by poke. The Urbit app to which to send the data.
90− 'mark': 'helm-hi', // Required by poke. The "mark," or type, of data being sent.
91− 'json': 'Opening airlock' // Required by poke. The actual data being sent.
92−}
93−```
94−
95−Let's open our channel by sending the following request using cURL (**remember to change the cookie**):
96−
97−```bash
98−curl --header "Content-Type: application/json" \
99− --cookie "urbauth-~zod=0v3.fvaqc.nnjda.vude1.vb5l6.kmjmg" \
100− --request PUT \
101− --data '[{"id":1,"action":"poke","ship":"zod","app":"hood","mark":"helm-hi","json":"Opening airlock"}]' \
102− http://localhost:8080/~/channel/1601844290-ae45b
103−```
104−
105−If you switch to your fakezod's dojo, you should see `< ~zod: Opening airlock`.
106−
107−Note that in the JSON that we sent via `--data`, the payload is wrapped in `[]`. This is because we can send multiple messages in a single payload, and Eyre expects a list of items, even if we are only sending one.
108−
109−You will always receive a `204` status code if the `PUT` request successfully reached Urbit, authentication succeeded, and the payload was valid. This is merely an HTTP status code, however. If the request failed within Urbit itself, however, you will receive a "nack" event that you will have to process separately.
110−
111−Let's look at how to receive events from Urbit.
112−
113−### Subscribing to Events
114−
115−Now that Urbit has opened an Eyre channel at our URL, we can watch for events on that URL by sending a `subscribe` message. Let's look at the anatomy of a `susbcribe`:
116−
117−```js
118−{
119− 'id': 2, // Required. This is the next message we are sending, so we give it the next ID.
120− 'action': 'subscribe', // Required.
121− 'ship': 'zod', // Required by subscribe.
122− 'app': 'chat-view', // Required by subscribe. In this case, we want to watch events that occur in the chat-view app, which is responsible for handling incoming chats.
123− 'path': '/primary' // Required by subscribe. All apps have different path structures. In the case of chat-view, this is where we see all incoming chats.
124−}
125−```
126−
127−This is all we need to send Urbit to say "On this URL through which I am sending information, send me SSEs whenever something occurs on this app at this path."
128−
129−You should be able to send this information if you were able to send the above cURL example. However, we now need to be able to listen to the SSEs. The `EventSource` object is available for JavaScript in the browser context, as this is why SSEs were invented, but there should be a library for it in your chosen language. Take a look at a Browser JavaScript example:
130−
131−```js
132−const eventSource = new EventSource('http://localhost:8080/~/channel/1601844290-ae45b', {
133− withCredentials: true // Required, sends your cookie
134−});
135−
136−eventSource.addEventListener('message', function (event) {
137− ack(Number(event.lastEventId)); // See section below
138− const payload = JSON.parse(event.data); // Data is sent in JSON format
139− payload.id === event.lastEventId; // The SSE spec includes event IDs. This information is duplicated in the payload.
140− const data = payload.json; // Beyond this, the actual data will vary between apps
141−});
142−
143−eventSource.addEventListener('error', function (event) {
144− handleError(event);
145−});
146−
147−```
148−
149−### Handling Received Events
150−
151−Once you have received an event, it is expected that you will "ack" or "acknowledge" that you have received them. To do so, simply send a message in the following format:
152−
153−```js
154−{
155− 'id': 3, // Required. Picking up where we left off
156− 'action': 'ack', // Required.
157− 'event-id': 15, // Required by ack. Whichever SSE of which you are acknowledging receipt
158−}
159−```
160−
161−### Unsubscribing from Events
162−
163−You may want to stop receiving events from a particular app path, but you don't want to close the channel altogether yet. Let's look at how to do that. Take a look at the example for subscribing. We sent that message with `id: 2`. We will use that ID to cancel the relevant subscription:
164−
165−```javascript
166−{
167− 'id': 4, // Required. We always increment the ID as we send messages.
168− 'action': 'unsubscribe', // Required.
169− 'subscription': 2 // Required by unsubscribe. This corresponds to the id of a subscribe message sent earlier.
170−}
171−```
172−
173−### Deleting a Channel
174−
175−You should clean up your channel when able. To do so, simply send a `delete` message and Eyre will handle the rest so your program can safely exit.
176−
177−```javascript
178−{
179− 'id': 5, // Required.
180− 'action': 'delete' // Required.
181−}
182−```
183−
184−## Other Operations
185−
186−There are other operations which require authentication but do not require the use of a channel. Some operations are app-specific and will not be enumerated here, but there are two operations that exist across Urbit: `scry` and `spider`.
187−
188−### Scrying
189−
190−Scrying lets you see what an app has exposed at a particular path. It does not manipulate state.
191−
192−It takes the form `{url}/~/scry/{app}{path}.{mark}`
193−
194− Let's get the base hash of our fakezod in the same way that Landscape does it.
195−
196−```bash
197−curl --header "Content-Type: application/json" \
198− --cookie "urbauth-~zod=0v3.fvaqc.nnjda.vude1.vb5l6.kmjmg" \
199− --request GET \
200− http://localhost:8080/~/scry/file-server/clay/base/hash.json
201−```
202−
203−Note the use of a `GET` request.
204−
205−In this example we're scrying the `file-server` app at the path `/clay/base/hash` and using the `json` mark, which is most common. We receive `"0"` which is correct because we are at the top level of the hierarchy using a fake ship.
206−
207−Scry will fail with a 500 or return a 404 if no data is found.
208−
209−### Running Threads with Spider
210−
211−Running threads is an exception to the rule that we outlined in the section on channels. It uses a `POST` request and both manipulates state and receives information back. It also exposes the ability to send a sequence of commands, i.e. a "thread," hence the name.
212−
213−It takes the form `{url}/spider/{inputMark}/{threadname}/{outputmark}.json`
214−
215−This should be considered an advanced technique, but the basic structure of a request can be seen here:
216−
217−```bash
218−curl --header "Content-Type: application/json" \
219− --cookie "urbauth-~zod=0v3.fvaqc.nnjda.vude1.vb5l6.kmjmg" \
220− --request POST \
221− --data '[{"foo": "bar"}]' \
222− http://localhost:8080/spider/graph-view-action/graph-create/json.json
223−
224−```
content/using/operations/_index.mddeleted−7
@@ -1,7 +0,0 @@
1−+++
2−title = "Operations"
3−description = "Instructions on how to use Bridge, your Urbit ship, Stars and Galaxies, and more."
4−sort_by = "weight"
5−weight = 2
6−template = "list.html"
7−+++
content/using/operations/using-your-ship.mddeleted−1422
@@ -1,1422 +0,0 @@
1−+++
2−title = "Using Your Ship"
3−description = "How to operate your ship, including using your ship's filesystem and messaging applications, starting a moon, or requesting a DNS proxy."
4−template = "page_indiced.html"
5−weight = 2
6−aliases = ["docs/using/arvo-network-dns/", "docs/using/messaging/", "docs/using/shell/", "docs/using/admin/"]
7−[extra]
8−hidetitle = "true"
9−+++
10−
11−## Using your ship
12−
13−Your urbit (also called your _ship_) is a persistent Unix process that you mainly control from the console.
14−
15−### Shutdown
16−
17−You can turn your urbit off with `Ctrl-d` from the Chat or Dojo prompts.
18−
19−You can force-quit your urbit with `Ctrl-z` from anywhere.
20−
21−### Restart
22−
23−To restart your urbit simply pass the name of your pier:
24−
25−```sh
26−$ ./urbit some-planet
27−```
28−
29−or
30−
31−```sh
32−$ ./urbit comet
33−```
34−
35−### Logging
36−
37−To log an urbit's command line output to a file, use `script`:
38−
39−```sh
40−$ script urbit.log ./urbit your-urbit
41−```
42−
43−### Moving your pier
44−
45−Piers are designed to be portable, but it _must_ be done while the urbit
46−is not running. Urbit networking is stateful, so you can't run two copies
47−of the same urbit in two places.
48−
49−To move a pier, simply move the contents of the directory it lives in.
50−To keep these files as small as possible we usually use the `--sparse`
51−option in `tar`. With a pier `your-urbit/`, something like this should work:
52−
53−```sh
54−tar -Scvzf ~/your-urbit.tar.gz ~/your-urbit/
55−scp your-old-server:~/your-urbit.tar.gz your-new-server:~
56−```
57−
58−Then to unzip it, on your other Unix server, run:
59−
60−```sh
61−tar xfvz your-urbit.tar.gz
62−```
63−
64−Delete the tar file, and, after installing Urbit on your new server, start your urbit back up with:
65−
66−```sh
67−./urbit your-urbit
68−```
69−
70−### Hardware requirements
71−
72−Urbit can run on any x86 computer (unofficial, unsupported [ARM binaries](https://botter-nidnul.github.io/AArch64_Urbit_Static_Binaries.html) are also available), ideally with at least 2GB of RAM.
73−
74−Urbit maintains a persistent log of the history of your ship. Eventually this log will be automatically trimmed when necessary, but for now it only increases in size. An actively used planet will consume 5-50 GB of storage space per year of operation.
75−
76−### Console
77−
78−Your Urbit terminal is separated into two parts: the prompt (the bottom line) and the record (everything above that). The record is shared; all the output from all the apps in your command set appears in it. The prompt is multiplexed.
79−
80−In the CLI, Urbit apps can process your input before you hit return. To see this in action try entering `)` as the first character at the Dojo prompt. Since there is no Dojo command or Hoon expression that starts with ')', the Dojo rejects it.
81−
82−`Ctrl-x` - Switches the prompt between running console apps
83−
84−`Ctrl-c` - Crash current event. Processed at the Unix layer and prints a stack
85−trace.
86−
87−`Ctrl-d` - From Chat or Dojo, stops your Urbit process.
88−
89−`Ctrl-z` - Stops the Urbit process from _anywhere_.
90−
91−`↑` / `↓` - History navigation
92−
93−The following emacs-style key bindings are available:
94−
95−```
96−Ctrl-a Cursor to beginning of the line (Home)
97−Ctrl-b Cursor one character backward (left-arrow)
98−Ctrl-e Cursor to the end of the line (End)
99−Ctrl-f Cursor one character forward (right-arrow)
100−Ctrl-g Beep; cancel reverse-search
101−Ctrl-k Kill to end of line
102−Ctrl-l Clear the screen
103−Ctrl-n Next line in history (down-arrow)
104−Ctrl-p Previous line in history (up-arrow)
105−Ctrl-r Reverse-search
106−Ctrl-t Transpose characters
107−Ctrl-u Kill to beginning of line
108−Ctrl-y Yank from kill buffer
109−```
110−
111−### Updates
112−
113−By default, you will automatically receive updates ([OTAs](@/docs/glossary/ota-updates.md)) from your sponsor. To check your OTA source, run `|ota` in the [dojo](@/docs/glossary/dojo.md).
114−
115−If for some reason (for example, if your sponsor is out of date), you can switch OTA sources by running `|ota ~otasrc %kids` in the dojo, where `~otasrc` is the ship from which you want to receive updates. It is a good idea to contact the source ship and ask permission to sync from them.
116−
117−If OTAs are not succeeding, or if you are on an version of Urbit before the `|ota` command was introduced, you can run `|merge %home (sein:title our now our) %kids, =gem %take-that`. **Note:** This will wipe out any custom changes to the base distribution.
118−
119−#### Additional OTA Troubleshooting
120−Please check the Support Wiki for additional OTA troubleshooting, such as:
121−[OTA 1.0.71 failed](https://github.com/urbit/support/wiki/OTA-1.0.71-failed),
122−[Missing OTA](https://github.com/urbit/support/wiki/Missing-OTA),
123−[Stuck flow preventing planets from receiving
124−OTAs](https://github.com/urbit/support/wiki/Stuck-flow-preventing-planets-from-receiving-OTAs),
125−and [No content shows in Links page after OTA](https://github.com/urbit/support/wiki/No-content-shows-in-Links-page-after-OTA).
126−
127−### Landscape
128−
129−On startup Urbit tries to bind to `localhost:80`. If you're already running something on port `80` -- such as any other HTTP server, or another urbit -- you'll find the urbit that you just started on `8080`, `8081`, and so on. For planets only, we also proxy web domains through Urbit's own servers. Any planet `~your-urbit` is also at `your-urbit.arvo.network`, but only after you [set up DNS](#dns-proxying).
130−
131−Once running, you can sign into Landscape, your ship’s web interface, from `http://localhost` or `https://your-urbit.arvo.network`. Since our HTTPS isn't audited / battle tested, we just call it "secure" HTTPS. You can find that on `8443`. Or `8444` (and so on) if you're already running something on `8443`.
132−
133−### Moons {#moons}
134−
135−Planets can spawn moons, which are meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
136−
137−To generate a random moon from your planet, run:
138−
139−```
140−~sampel-palnet:dojo> |moon
141−moon: ~faswep-navred-sampel-palnet
142−\/0w5cT5t.wCO6i.~e1xg.Oz0qb.QNO6I.3Kt2T.h9M9F.U3vU~.X3Qu0.gtb19.IYTkY.80kWZ.SI\/
143− EUE.DXa8i.TiDof.o3-1C.RHLKS.k81M0.ecz5o.ic0Bg.600g1
144−\/ \/
145−```
146−
147−You must manually edit the output of `|moon` to get the correct format for the `<key>`:
148−
149−- strip out the `\/`
150−
151−- combine into one line, omitting spaces
152−
153−`<key>` would be `0w5cT5t.wCO6i.~e1xg.Oz0qb.QNO6I.3Kt2T.h9M9F.U3vU~.X3Qu0.gtb19.IYTkY.80kWZ.SIEUE.DXa8i.TiDof.o3-1C.RHLKS.k81M0.ecz5o.ic0Bg.600g1`
154−in this example.
155−
156−Put `<key>` in a file and that file becomes `<keyfile>`.
157−
158−You can use the resulting output in the same installation flow from the [Installing Urbit](@/using/install.md) guide, following the same scheme as for booting a planet. That scheme is:
159−
160−```sh
161−$ ./urbit -w <moonname> -G <key> -c <piername>
162−```
163−
164−or
165−
166−```sh
167−$ ./urbit -w <moonname> -k <keyfile> -c <piername>
168−```
169−
170−The `-c <piername>` argument is not required, but it is recommended; otherwise,
171−the resulting directory is a rather unwieldy moon name.
172−
173−Here's how an example moon might be booted:
174−
175−```sh
176−$ ./urbit -w faswep-navred-sampel-palnet -G <key> -c mymoon
177−```
178−
179−or
180−
181−```sh
182−$ ./urbit -w faswep-navred-sampel-palnet -k <keyfile> -c mymoon
183−```
184−
185−Moons are automatically synced to their parent `%kids` desk, and can control applications on their parent planet using `|link`.
186−
187−To breach a moon -- that is, to reset its presence on the network so that it's treated as a freshly spawned ship by others -- run from the parent ship:
188−
189−```
190−|moon-breach ~faswep-navred-sampel-palnet
191−```
192−
193−To cycle the keys of a moon without breaching, run:
194−
195−```
196−|moon-cycle-keys ~sampel-sipnym-wicdev-wisryt
197−```
198−
199−
200−### Escaping A Sponsor {#escape}
201−
202−To use the network as a planet or star, you must be sponsored by an active star
203−or galaxy, respectively. If your sponsor isn't suiting your needs, you can
204−escape to a different one. This can be done with
205−[Bridge](https://bridge.urbit.org/) following the instructions
206−[here](@/using/operations/using-bridge.md#escaping-your-sponsor).
207−
208−### Continuity breaches
209−
210−While the Urbit network is in this alpha state, we sometimes have to reboot the whole network. This happens either when major changes need to be shipped or we hit a bug that can't be fixed over the air.
211−
212−Because Urbit networking is stateful we call this a _continuity breach_. Everything has to be restarted from scratch. Your pier will continue to function after we have breached, but it won’t connect to the rest of the Urbit network.
213−
214−When this happens, back up any files you'd like to save, shut down your urbit, and recreate it (as if you were starting for the first time).
215−
216−### Life and rift number
217−
218−You can check your ship's _life_ and _rift_ number by running `+keys our` in
219−dojo. You can inspect another ship's life and rift number by running `+keys
220−~sampel-palnet`. For information on what life and rift are, see [Guide to Breaches](@/docs/tutorials/guide-to-breaches.md).
221−
222−## DNS proxying {#dns-proxying}
223−
224−We have a system that lets you request a domain name for your ship in the form of `ship.arvo.network`, where `ship` is your ship's name minus the `~`. This allows users to access their ships remotely using Landscape, our graphical web interface.
225−
226−Stars and planets follow the same process DNS proxying process, and galaxies have their own requirements. Moons and comets are not supported.
227−
228−### Planets and Stars
229−
230−For a planet or star's DNS proxying request to be made and fulfilled, they must be hosting their ship someplace with a public IP address, and its HTTP server must be listening on port 80.
231−
232−To get `ship.arvo.network` on a planet or star, you must set up DNS routing with its parent ship by starting the `:dns` app.
233−
234−To do so, simply run this command in your ship's Dojo, passing the IP address as an argument, using the .0.0.0.0 (`@if`) syntax. For example:
235−
236−```
237−> -dns-address &dns-address [%if .1.2.3.4]
238−```
239−
240−`:dns`, running locally, will make an HTTP request to that IP address on port 80 to confirm that it is itself available at that IP and port. If that fails, you'll receive a `%bail-early` message in `:chat-cli`; this request will retry a few times. If the self-check is successful, the request is relayed to `~zod`, and you'll receive a message saying, `request for DNS sent to ~zod`. Once `~zod` has acknowledged receipt of the request, your local `:dns` app will send a `:chat-cli` message saying `awaiting response from ~zod`.
241−
242−The request will be picked up shortly, and the `ship.arvo.network` DNS record will be set to the given IP address. Once that's set up, `~zod` will be notified and `~zod` will, in turn, notify your ship. That ship will now try to verify that it can reach itself on `ship.arvo.network` over port 80. If it can't, it'll send a message saying, `unable to access via ship.arvo.network`. If it can, it will configure itself with that domain and say `confirmed access via ship.arvo.network`.
243−
244−Great! You're set up now. Try accessing your `ship.arvo.network` in your browser to use Landscape; we recommend Chrome or Brave.
245−
246−### Configuring SSL
247−
248−To enable SSL on your ship, use the `acme` agent, which will request a certificate through Let's Encrypt. First, make sure the agent is started:
249−
250−```
251−> |start %acme
252−```
253−
254−Next, provide the path for the SSL certificate by poking the `acme` agent. The path format is `/tld/your_domain/your_subdomain`, so if your domain is `sampel-palnet.arvo.network`, you'd use it like so:
255−
256−```
257−> :acme &path /network/arvo/sampel-palnet
258−```
259−
260−### Galaxies
261−
262−Galaxies are already required to have separate DNS entry at galaxy.urbit.org. There's no automated process for getting that binding, so if you're a galaxy-holder, get in touch with us at support@urbit.org.
263−
264−There is a command for galaxies that will try to re-use their already-necessary Ames DNS entry for HTTPS:
265−
266−```
267−> -dns-auto
268−```
269−
270−This will make HTTP-requests to self-check availability over `galaxy.$AMES-DOMAIN` (currently galaxy.urbit.org), where `galaxy` is the galaxy's name minus the `~`.
271−
272−Otherwise, `-dns-auto` works the same as `:dns|ip` does with stars and planets: if it's available or unavailable, Chat messages, and so on.
273−
274−### Ports
275−
276−The built-in logic for listening on port 80 is to try to bind to port 80; if it cannot, it tries 8080, then increments until it can bind a port. Port 80 is available to unprivileged process on recent version of macOS. Otherwise, the process needs to either be run as root, or be given special permission (CAP\_NET_BIND on Linux).
277−
278−## Messaging {#messaging}
279−
280−Let’s get started using the `:chat-cli` application, also known more simply as _Chat_. It's the simplest way to talk to people using the command line interface.
281−
282−### Quickstart
283−
284−The most common use for `:chat-cli` right now is, of course, communicating in group chats.
285−
286−### Joining a chat
287−
288−In `:chat-cli`, any kind of medium for a message is called a _chat_. There are four "types" of chats, but for now we'll be dealing with the _channel_, a publicly accessible chatroom for general use. We'll discuss the other three kinds in the [chat management](#chat-management) section later on.
289−
290−Join the Urbit Community from Dojo using `:group-store|join ~bitbet-bolbel/urbit-community`. Once you've joined, join the General chat from chat-cli. Use `ctrl-x` to switch from the Dojo prompt to the Chat prompt.
291−
292−Then:
293−
294−```
295−~sampel-palnet:chat-cli/ ;join ~darrux-landes/general
296−```
297−
298−Now that you're in, try post a line to `~darrux-landes/general`:
299−
300−```
301−~sampel-palnet:chat-cli= Hello, world!
302−```
303−
304−You'll see your message printed below messages from others that came before it. You can always type `;chats` in the `chat-cli` prompt to list all the chats you're in:
305−
306−```
307−~sampel-palnet:chat-cli= ;chats
308−~darrux-landes/general
309−```
310−
311−Glyphs will be automatically assigned to channels, but have the option of binding a glyph (single non-alphanumeric character) to the channel you're joining; the syntax is in the form of `;join ~/~dopzod/books +`. The chosen glyph will be the symbol that ends your prompt, and it will be what you use as a shortcut to switch to this channel.
312−
313−```
314−~sampel-palnet:chat-cli= ;+
315−~sampel-palnet:chat-cli+
316−```
317−
318−Use `;leave` to unsubscribe from a channel:
319−
320−```
321−~sampel-palnet:chat-cli= ;leave ~darrux-landes/general
322−```
323−
324−Now, let's create a channel we can invite some friends to:
325−
326−```
327−~sampel-palnet:chat-cli= ;create channel /my-channel
328−```
329−
330−Now you can tell your friends to `;join ~your-urbit/my-channel`.
331−
332−In order to see messages in `:chat-cli` you may need to do the following in Dojo:
333−
334−```
335−:chat-cli %connect
336−```
337−
338−### Hoon
339−
340−You can use Chat to evaluate Hoon code and share the results with everyone in a chat. To do so, preface your Hoon with `#`.
341−
342−```
343−~sampel-palnet:chat-cli= #(add 2 2)
344−```
345−
346−This will print as:
347−
348−```
349−~sampel-palnet# (add 2 2)
350− 4
351−```
352−
353−### URLs
354−
355−To share a URL, send it as its own message, with no content before or after it.
356−
357−```
358−~sampel-palnet:chat-cli= https://urbit.org/
359−```
360−
361−This will print as:
362−
363−```
364−~sampel-palnet/ https://urbit.org/
365−```
366−
367−### Expanding messages
368−
369−In the case of URLs, they may be too long to display on a single message line. For Hoon code, the code or result could be big. In `:chat-cli`, these get shortened when initially printed out. To view the entire contents, you can select the message in various ways.
370−
371−```
372−~sampel-palnet+ some message
373−----------[240]
374−~sampel-palnet+ let's try selecting this message!
375−~sampel-palnet+ another message
376−~sampel-palnet:chat-cli=
377−```
378−
379−In the above example, we can select the middle message by issuing any of the following command:
380−
381−```
382−;240
383−;40
384−;;
385−```
386−
387−`;n` looks for the last message whose sequence number ends in `n`. `;;` simply picks the second-to-last message.
388−
389−Detailed message output will look something like this:
390−
391−```
392−? 240
393− 0v5.g7r7l.n0d7m.mp4bn.gp6vr.sm5lj at ~2019.10.17..22.08.27..8a03
394− ~sampel-palnet
395− to ~dopzod/urbit-help
396−let's try selecting this message!
397−```
398−
399−### Creating and managing chats {#chat-management}
400−
401−As mentioned before, any urbit can host any number of chats. Existing chats can be deleted or modified with various commands. All commands in this section should be sent from the `chat-cli>` prompt.
402−
403−#### Create
404−
405−Syntax: `;create [type] /name +`, where `+` represents an optional glyph.
406−
407−Creates and joins a chat, where `[type]` is any of the following:
408−- `channel`: public chat. Has a blacklist for write control.
409−- `village`: invite-only chat.
410−- `journal`: publicly readable, invite-only for writing.
411−- `mailbox`: publicly writeable, invite-only for reading.
412−
413−Let's create an example mailbox:
414−
415−```
416−~sampel-palnet:chat-cli> ;create mailbox /coolbox ^
417−```
418−
419−#### Delete
420−
421−Syntax: `;delete /name`
422−
423−Deletes a chat.
424−
425−#### Permission management
426−
427−You can permit and ban people from reading and/or writing to the chats you host, using `;invite` and `;banish` command respectively.
428−
429−Syntax: `;invite [rw] /name ~ships`
430−
431−Where `rw` is either `r`, `w`, or `rw`, representing "read" and "write" permissions.
432−And where `~ships` is a comma-seperated list of ships to invite.
433−
434−For example, to grant two people full access to a `village` we created:
435−
436−```
437−~sampel-palnet:chat-cli> ;invite rw /hidden-village ~ravmel-ropdyl, ~rapfyr-diglyt
438−```
439−
440−Similarly, if we later want to revoke the writing permissions for one of them, but still allow them to read new messages, we can run:
441−
442−```
443−~sampel-palnet:chat-cli> ;banish w /hidden-village ~rapfyr-diglyt
444−```
445−
446−#### Chat glyphs
447−
448−Glyphs are found at the end of your prompt, as a quick indicator of where
449−your messages will be sent.
450−
451−Glyphs are assigned by chat hash out of the following list:
452−
453−```
454−! @ # $ % ^ & ( ) - = _ + [ ] { } ; ' \ : " , . < > ?
455−```
456−
457−Alphanumeric characters and `|#/*~` are reserved; all others can be manually assigned.
458−
459−For example, `-` the glyph at the end of the prompt below might indicates that
460−messages sent from this prompt will go to some chat with that glyph:
461−
462−```
463−~sampel-palnet:chat-cli-
464−```
465−
466−To see what chat is bound to a glyph, use the `;what` command followed by the
467−glyph in question, or use `;what` without specifying a glyph to see all of your
468−subscriptions which are bound to glyphs. For example, to see `=`:
469−
470−```
471−~sampel-palnet:chat-cli> ;what =
472−~dopzod/urbit-help
473−```
474−
475−To see all of your glyph bindings:
476−
477−```
478−~sampel-palnet:chat-cli> ;what
479−> ~paldev/numismatic-forum
480−. ~middev/ny-martians
481−= ~dopzod/urbit-help
482−```
483−
484−When the messaging target doesn't have a glyph, we see their name at the end of
485−the prompt instead. Here we're talking into `~dannum-mitryl/homework`:
486−
487−```
488−~sampel-palnet:chat-cli[~dannum-mitryl/homework]
489−```
490−
491−#### Bind
492−
493−Syntax: `;bind [glyph] ~host/chat-name`
494−
495−Assigns the chosen glyph to a chat.
496−
497−For example:
498−
499−```
500−~sampel-palnet:chat-cli> ;bind + ~dopzod/urbit-help
501−```
502−
503−#### Unbind
504−
505−Syntax: `;unbind [glyph] ~host/chat-name`
506−
507−Unassigns the chosen glyph from a chat owned by your ship.
508−
509−For example:
510−
511−```
512−~sampel-palnet:chat-cli> ;unbind + ~dopzod/urbit-help
513−```
514−
515−If you don't specify a chat, all bindings for that glyph are removed.
516−
517−#### Prefixes
518−
519−Received posts are prefixed with a glyph to let you know what the
520−audience is. You can activate an individual post to see the full
521−audience.
522−
523−There are a few special-purpose "glyphs":
524−
525−- `|` - Informational messages
526−- `*` - Posts to a target you don't have a glyph binding for
527−
528−
529−### Configuration
530−
531−#### Set audience
532−
533−`;~ship/chat`
534−
535−Set audience to `~ship/chat`.
536−
537−#### Set audience by glyph
538−
539−Syntax: `;[glyph]`
540−
541−Set audience to the chat previously bound to the chosen glyph.
542−
543−#### Set audience to own chat
544−
545−Syntax: `;/chat`
546−
547−Set audience to a chat on your own ship.
548−
549−### Miscellaneous configuration
550−
551−#### Change timezone
552−
553−Syntax: `;set timezone [+/-][hours]`
554−
555−Adjust the display of timestamps to a specific timezone. Relative to UTC.
556−
557−#### Set width
558−
559−Syntax: `;set width [number]`
560−
561−Set the rendering width of `:chat-cli` to a specific number of characters.
562−(Minimum of 30.)
563−
564−#### Show timestamps
565−
566−Syntax: `;set showtime`
567−
568−Show the timestamp for each message. This is set by default.
569−
570−#### Hide timestamps
571−
572−Syntax: `;unset showtime`
573−
574−Stop showing the timestamp for each message.
575−
576−#### Sound notification on
577−
578−Syntax: `;set notify`
579−
580−Emit a terminal bell sound if your six-syllable ship name is mentioned in
581−a message. This is set by default.
582−
583−#### Sound notification off
584−
585−Syntax `;unset notify`
586−
587−Do not notify when your ship name is mentioned.
588−
589−
590−## S3 {#s3}
591−
592−Amazon S3, which stands for Amazon Simple Storage Service, is a technology that was introduced by Amazon Web Services for cloud storage that has since been extended more broadly into a [standard programming interface](https://en.wikipedia.org/wiki/Amazon_S3#S3_API_and_competing_services).
593−
594−Our S3 support lets you store credentials for your S3 object storage buckets on your Urbit ship; once you have done so, you will get additional functionality for uploading your own media within Chat and Groups (for avatars).
595−
596−To enable S3 support on your ship you'll need to first set up a bucket, and then add its credentials to Landscape using *either* Landscape or the Dojo.
597−
598−### Bucket Setup
599−
600−If you’re using AWS, it will have to support signature v2, not v4. We've found DigitalOcean's Spaces to work well also. The bucket has to be publicly readable, allow CORS from `*` origins, allow GET and PUT methods, and allow `*` headers. Your provider should have details on setting access permissions and CORS.
601−
602−### Add your credentials: Landscape
603−
604−Navigate to your `https://<your-ship-url>/~profile/settings`, or click your sigil in the upper-right corner of the window. Fill out the **S3 Credentials** and **S3 Buckets** sections and you're all set!
605−
606−### Add your credentials: Dojo
607−
608−Once you have gotten your bucket setup, poke the `s3-store` on your ship with your details. You can do this in Dojo or in web Dojo.
609−
610−```
611−:s3-store|set-endpoint 'endpoint.mys3provider.com'
612−:: AWS endpoint example: s3-us-west-2.amazonaws.com
613−:: Digital Ocean endpoint example: sfo2.digitaloceanspaces.com
614−:s3-store|set-access-key-id 'MYACCESSKEYID'
615−:s3-store|set-secret-access-key 'MYSECRETACCESSKEY'
616−:s3-store|set-current-bucket 'yourbucketname'
617−```
618−
619−Done! If you need to peek at s3-store’s state, you can always run :s3-store +dbug (inside Dojo, not web Dojo, unfortunately). You’ll see the additional functionality appear in Groups and Chat.
620−
621−## Shell {#using-the-shell}
622−
623−The Dojo is our shell; it processes system commands and returns output. It's a
624−good place to quickly experiment with Urbit. On the surface the Dojo is just a
625−Hoon REPL. On the inside, the Dojo is a system for operating on and transforming
626−data in Urbit.
627−
628−### Quickstart
629−
630−You can use the Dojo to run arbitrary Hoon code, as well as non-Hoon system
631−commands.
632−
633−#### Math
634−
635−Evaluate a Hoon expression (whitespace matters):
636−
637−```
638−~your-urbit:dojo> (add 2 2)
639−~your-urbit:dojo> %+ add 2 2
640−```
641−
642−Tall-form Hoon may require multiple lines:
643−
644−```
645−~your-urbit:dojo> %+ add
646−~your-urbit:dojo< 2
647−~your-urbit:dojo< 2
648−```
649−
650−Hoon uses something called [the subject](@/docs/tutorials/hoon/hoon-school/the-subject-and-its-legs.md).
651−The Dojo has its own subject and that's where Hoon's equivalent of variables,
652−called faces, are stored.
653−
654−Use `=var` to save faces to the Dojo subject.
655−
656−```
657−~your-urbit:dojo> =foo (add 2 2)
658−```
659−
660−Note, however, that `=var` is Dojo syntax, not Hoon syntax. You cannot bind a
661−face in a `.hoon` file in this way.
662−
663−#### System commands
664−
665−Use `=dir` to set the current working directory:
666−
667−```
668−~your-urbit:dojo> =dir %/gen
669−```
670−
671−(`%` represents your current directory. For a complete explanation on urbit
672−paths, see the [filesystem section](#filesystem).)
673−
674−Generators (files in `/gen`) are run with `+`:
675−
676−```
677−~your-urbit:dojo> +hello 'world'
678−```
679−
680−Save output to a file in `%clay` with `*`:
681−
682−```
683−~your-urbit:dojo> *some/file/path/hoon 'hello world'
684−```
685−
686−Run system commands from `:hood`, like `reload`, using `|`:
687−
688−```
689−~your-urbit:dojo> |reload %eyre
690−```
691−
692−### Generators
693−
694−Generators are short Hoon scripts, saved as `.hoon` files in the `/gen`
695−directory. Many Dojo commands exist in the form of generators. The syntax for
696−running a generator is `+genname` for a generator saved as `genname.hoon`.
697−
698−#### `+cat`
699−
700−Accepts a path and displays the file. Similar to Unix `cat`.
701−
702−```
703−~your-urbit:dojo> +cat %/gen/curl/hoon
704−```
705−
706−#### `+code`
707−
708−Generates a code that is used to remotely log into your ship. No
709−arguments.
710−
711−```
712−~your-urbit:dojo> +code
713−```
714−
715−You can change your code to a new randomly generated one by entering `|code
716−%reset`. Please note that this will prevent [Bridge](@/docs/glossary/bridge.md)
717−from being able to derive your code in the future.
718−
719−#### `+curl`
720−
721−Retrieves data from a URL. Accepts a `tape`. Similar to Unix `curl`.
722−
723−```
724−~your-urbit:dojo> +curl "http://nyt.com"
725−```
726−
727−#### `+hello`
728−
729−Just prints the argument. Accepts a `@ta`.
730−
731−```
732−~your-urbit:dojo> +hello 'mars'
733−```
734−
735−#### `+ls`
736−
737−Similar to Unix `ls`. Accepts a path.
738−
739−```
740−~your-urbit:dojo> +ls %/gen
741−~your-urbit:dojo> +ls /~talsur-todres/home/2/gen/program
742−```
743−
744−#### `+solid`
745−
746−Compile the current state of the kernel and output a
747−noun. Usually downloaded to a file in unix. No arguments.
748−
749−```
750−~your-urbit:dojo> .urbit/pill +solid
751−```
752−
753−#### `+test`
754−
755−Testrunner. Can test multiple generators at once, conventionally ones
756−in the `/test` folder. Takes a path.
757−
758−```
759−~your-urbit:dojo> +test /lib
760−```
761−
762−#### `+ticket`
763−
764−Generate a ticket for an urbit ship. Takes an urbit name (`@p`).
765−
766−
767−```
768−~your-urbit:dojo> +ticket ~talsur-todres-your-urbit
769−```
770−
771−#### `+tree`
772−
773−Generate a recursive directory listing. Takes a path.
774−
775−```
776−~your-urbit:dojo> +tree %/sys
777−```
778−
779−### Hood
780−
781−The hood is the system daemon. See `gen/hood` and `app/hood`.
782−
783−`|hi` - Sends a direct message. Sort of like Unix `write`. Accepts
784−an urbit name (`@p`) and a string (`tape`, which is text wrapped with double-quotes).
785−
786−```
787−~your-urbit:dojo> |hi ~binzod "you there?"
788−```
789−
790−`|link` / `|unlink` - Link / unlink a remote app. Accepts an
791−Urbit name and an app name.
792−
793−```
794−~your-urbit:dojo> |link ~talsur-todres %octo
795−```
796−
797−`|mass` - Prints the current memory usage of all the kernel modules.
798−No arguments.
799−
800−```
801−~your-urbit:dojo> |mass
802−```
803−
804−`|reload` - Reloads a kernel module (vane) from source. Accepts any
805−number of vane names.
806−
807−```
808−~your-urbit:dojo> |reload %clay %eyre
809−```
810−
811−`|reset` - Reloads `hoon.hoon` and all modules. No arguments.
812−
813−```
814−~your-urbit:dojo> |reset
815−```
816−
817−`|start` - Starts an app. Accepts an app name.
818−
819−```
820−~your-urbit:dojo> |start %curl
821−```
822−
823−---
824−
825−### Dojo manual
826−
827−#### Sources and sinks
828−
829−A Dojo command is either a **source** or a **sink**. A source is just something
830−that can be printed to your console or the result of some computation. A
831−sink is an **effect**: a change to the filesystem, a network message, a
832−change to your environment, or a typed message to an app.
833−
834−Sources can be chained together, but we can only produce one effect per
835−command.
836−
837−#### Sinks
838−
839−#### `=` - Set variable
840−
841−Set any environment variable:
842−
843−```
844−~your-urbit:dojo> =foo 42
845−~your-urbit:dojo> (add 2 foo)
846−
847−44
848−```
849−
850−Make sure to note that `=var` is Dojo syntax, not Hoon syntax. You cannot bind a
851−variable in a `.hoon` file in this way.
852−
853−#### Special variables
854−
855−There are a few special variables that the Dojo maintains.
856−
857−#### `:` - Send to app
858−
859−`:app` goes to a local `app`, `:~ship/app` goes to the `app` on `~ship`.
860−
861−Send a `helm-hi` message to `hood`:
862−
863−```
864−~your-urbit:dojo> :hood &helm-hi 'hi'
865−```
866−
867−Apps usually expect marked data, so `&` is often used here.
868−
869−#### `*` - Save in `%clay`
870−
871−Save a new `.hoon` file in `gen`:
872−
873−```
874−~your-urbit:dojo> *%/gen/foo/hoon '# hello'
875−```
876−
877−The last component of the path is expected to be the mark (or mime
878−type).
879−
880−#### `.` - Export to Unix
881−
882−Export a noun to Unix with `.`:
883−
884−```
885−~your-urbit:dojo> .foo/bar/baz (add 2 2)
886−```
887−
888−Which creates a file at `pier/.urb/put/foo/bar.baz`.
889−
890−This is very often used with `+solid`:
891−
892−```
893−~your-urbit:dojo> .urbit/pill +solid
894−```
895−
896−Which outputs a new `urbit.pill` to `pier/.urb/put/urbit.pill`
897−
898−### Sources
899−
900−#### `_` - Run a function
901−
902−Use `_` to run a gate (or function):
903−
904−Write an arbitrary function and pass data to it:
905−
906−```
907−~your-urbit:dojo> _|=([a=@] (mul a 3)) 3
908−9
909−```
910−
911−Use a function to get the status code from an http request:
912−
913−```
914−~your-urbit:dojo> _|=([p=@ud q=* r=*] p) +http://google.com
915−301
916−```
917−
918−#### `+` `-` - HTTP requests
919−
920−`+http[s]://example.com` - sends a GET request
921−
922−`+http[s]://example.com &json [%s 'hi']` - sends a POST request with the
923−JSON `"hi"` in the body.
924−
925−`-http[s]://example.com &json [%s 'hi']` - sends a PUT request with the
926−JSON `"hi"` in the body.
927−
928−Note that the first of these is a source while the last two are sinks.
929−
930−#### `+` - Generators
931−
932−Generators are simple Hoon scripts loaded from the filesystem. They live
933−in `gen/`.
934−
935−An example of a generator that is built into your urbit is `+code`. It produces
936−the code needed to log into your ship remotely.
937−
938−```
939−~your-urbit:dojo> +code
940−fintyr-haldet-fassev-solhex
941−```
942−
943−### Variables
944−
945−You can use `=` to set an environment variable in Dojo, but there are
946−a few reserved names that have special uses.
947−
948−#### `dir`
949−
950−Current working `%clay` desk and revision. Read / write.
951−
952−**Examples:**
953−
954−```
955−~your-urbit:dojo> =dir %/gen
956−~your-urbit:dojo> +ls %
957−404/hoon docs/ dojo/hoon lib/ listen/hoon md static/udon talk/ testing/udon tree/main/ unmark/ womb/
958−```
959−
960−#### `lib`
961−
962−Current set of libraries (`/lib`) in your environment. Can be set
963−with `/+`. Read / write.
964−
965−**Examples:**
966−
967−```
968−~your-urbit:dojo> /+ number-to-words
969−```
970−Now we can use arms from lib/number-to-words.hoon
971−```
972−~your-urbit:dojo> (to-words:eng-us:number-to-words 123.456)
973−```
974−
975−#### `sur`
976−
977−Current set of structures (`/sur`) in your environment. Can be set
978−with `/-`. Read / write.
979−
980−**Examples:**
981−
982−```
983−~your-urbit:dojo> /- sole
984−```
985−Now we can use arms in sur/sole.hoon.
986−```
987−~your-urbit:dojo> `sole-effect:sole`[%bel ~]
988−```
989−
990−#### `now`
991−
992−The current (128-bit `@da`) time. Read-only.
993−
994−**Example:**
995−
996−```
997−~your-urbit:dojo> now
998−~2016.3.21..21.10.57..429a
999−```
1000−
1001−#### `our`
1002−
1003−The current urbit ship. Read-only.
1004−
1005−**Example:**
1006−
1007−```
1008−~your-urbit:dojo> our
1009−~your-urbit
1010−```
1011−
1012−#### `eny`
1013−
1014−512 bits of entropy. Read-only.
1015−
1016−**Example:**
1017−
1018−```
1019−~your-urbit:dojo> eny
1020−\/0vnt.d474o.gpahj.jcf3o.448fh.2lamb.82ljm.8ol8u.b02vi.mrvvp.b7et2.knb7m.l8he\/
1021− 8.8qb9s.drm36.77n9b.a0qst.30g03.l5lb5.nvsbc.v39tn
1022−\/
1023−```
1024−
1025−### Troubleshooting
1026−
1027−If you encounter `%dy-edit-busy` while entering commands, it is
1028−because your Dojo is blocked on a timer or an HTTP request. Type backspace
1029−and your Dojo will end the blocked command.
1030−
1031−
1032−## Filesystem {#filesystem}
1033−
1034−Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
1035−referentially transparent namespace. An easy way to think about it is like typed
1036−`git`.
1037−
1038−The most common way to use Clay is to mount a Clay node in a Unix directory. The mounted directory is always at the root of your pier directory.
1039−
1040−### Quickstart
1041−
1042−This quick-start guide will walk you through some common commands. Follow along
1043−using your Dojo. When you get a `>=` message after entering a command, this means
1044−that the command was successful.
1045−
1046−It's important to note that whenever you want to sync changes from your Unix
1047−directory to your ship, you must use the `|commit %desk` command, where `%desk`
1048−is the desk that you'd like to sync to.
1049−
1050−When developing it's a good idea to use a separate desk. Create a `%sandbox`
1051−desk based on the `%home` desk:
1052−
1053−```
1054−~your-urbit:dojo> |merge %sandbox ~your-urbit %home
1055−```
1056−
1057−Running `our` produces your ship-name, meaning that you can run the following
1058−command instead of typing out the entire thing. Useful for comets due to their
1059−very long names.
1060−
1061−```
1062−~your-urbit:dojo> |merge %sandbox our %home
1063−```
1064−
1065−Most of the time we want to use Clay from Unix. Mount the entire contents of
1066−your `sandbox` desk to Unix:
1067−
1068−```
1069−~your-urbit:dojo> |mount /=sandbox=
1070−```
1071−
1072−To explore the filesystem from inside Urbit `+ls` and `+cat` are useful. `+ls`
1073−displays files in the current directory, and `+cat` displays the contents of
1074−a file.
1075−
1076−We can use `%` to mean "current directory." The result of the command below
1077−is just like using `ls` in a Unix terminal.
1078−
1079−```
1080−~your-urbit:dojo> +ls %
1081−```
1082−
1083−Notice how `+cat %` does the same thing. That's because everything in Clay,
1084−including directories, is a file.
1085−
1086−Sync from your friend `~some-ship`'s `%experiment` desk to your
1087−`%sandbox` desk:
1088−
1089−```
1090−~your-urbit:dojo> |sync %sandbox ~some-ship %experiment
1091−```
1092−
1093−If and when your sync is successful, you will receive a message:
1094−
1095−```
1096−activated sync from %experiment on ~some-ship to %sandbox
1097−```
1098−
1099−The ship that you sync from will get their own message indicating that you're
1100−both connected as peers:
1101−
1102−```
1103−; ~your-urbit is your neighbor.
1104−```
1105−
1106−---
1107−
1108−### Clay manual
1109−
1110−#### Paths
1111−
1112−A path in Clay is a list of URL-safe text, restricted to the characters
1113−`[a z]`,`[0 9]`, `.`, `-`, `_`, and `~`. Formally this is a `(list knot)`,
1114−meaning that each segment, delineated by `/`, is of the `knot` ASCII-text type.
1115−In other words, paths are expressed as `/foo/bar/baz`. File extensions are
1116−separated from file names with `/`, not `.`. Extensions are syntactically
1117−identical to subdirectories, except that they must terminate the path.
1118−
1119−Paths begin with a piece of data called a `beak`. A beak is formally a
1120−`(p=ship q=desk r=case)`; it has three components, and might look like
1121−`/~dozbud-namsep/home/11`.
1122−
1123−The first `beak` component is `ship`, which is, as you might guess, the name of
1124−an Urbit ship. The second component is `desk`, which is a workspace meant to
1125−contain other directories; the default desk is `%home`. The third component is
1126−`case`, which represents version information in various ways: date and time;
1127−a version sequence, which is a value incremented by one whenever a file on the
1128−given `desk` is modified; or an arbitrary plaintext label.
1129−
1130−You can find what your `beak` is at any given moment by
1131−typing `%` in the Dojo and looking at the first three results.
1132−
1133−We use `beak`s because, unlike the current internet, the Urbit network uses a
1134−global namespace. That means that a file named `example.hoon` in the `/gen`
1135−directory on the `%home` desk of your ship `~lodleb-ritrul` would have a
1136−universal address to anyone else on the network:
1137−`/~lodleb-ritrul/home/186/gen/example/hoon`. That, of
1138−course, doesn't mean that everyone on the network has privileges to access that
1139−path.
1140−
1141−The structure that combines a `beak` with further path information is called a
1142−`beam`.
1143−
1144−#### Relative paths
1145−
1146−The `%` command, which we gestured at in the above section, represents the
1147−**relative path**, which is the path where you are currently working. If your
1148−working directory is just your home desk, indicated by the
1149−prompt `~your-planet:dojo>`, then running the command below will print your
1150−working directory's `beam` information: your `beak`, and a `~` that represents
1151−the empty list since no path is present.
1152−
1153−```
1154−~your-urbit:dojo> %
1155−```
1156−
1157−`%`s can be stacked to indicate one level further up in the hierarchy for each
1158−additional `%`. Try the following command:
1159−
1160−```
1161−~your-planet:dojo> %%%
1162−```
1163−
1164−You'll probably notice that it only has your ship name and the empty list. The
1165−two additional `%`s abandoned the `case` and the `desk` information by moving
1166−up twice the hierarchy.
1167−
1168−There are no local relative paths. `/foo/bar` must be written as
1169−`%/foo/bar`.
1170−
1171−#### Substitution
1172−
1173−You don't need to write out the explicit path every time you want to reference
1174−somewhere outside of your working directory. You can substitute `=` for the
1175−segments of a path.
1176−
1177−Recall that a full address in the the Urbit namespace is a `beam`: the
1178−`/ship/desk/case/path`. If you've switched to another desk before, you're
1179−already familiar with substitution syntax:
1180−
1181−```
1182−~your-urbit:dojo> =dir /=sandbox=
1183−```
1184−
1185−The above command uses substitution to use your current `ship` and
1186−`case`; only the `desk` argument, which is located between the other two, is
1187−given something new. Without substitution, you would need to write:
1188−
1189−```
1190−~your-urbit:dojo> =dir /~your-urbit/sandbox/85
1191−```
1192−
1193−Substitutions work the same way in `beak`s (the `ship/desk/case` part) and
1194−paths. For example, if you are in the `/gen` directory, you can reference a file
1195−in the `/app` directory like below. (`+cat` displays the contents of a file).
1196−
1197−```
1198−~your-urbit:dojo> =dir %/gen
1199−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> +cat /===/app/curl/hoon
1200−```
1201−
1202−Note what was substituted out, and note that we don't need to separate `=` with
1203−`/`.
1204−
1205−If we changed our working directory to something called `/gen/gmail`, we could
1206−access a file called
1207−
1208−```
1209−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> =dir %/gmail
1210−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/gmail> +cat /===/app/=/split/hoon
1211−```
1212−
1213−Because both paths share a directory named `/gmail` at the same position in the
1214−address hierarchy – which, if you recall, is just a `list` – the above command
1215−works!
1216−
1217−We can do the same thing between desks. If `%sandbox` has been merged with
1218−`%home`, the following command will produce the same results as the above
1219−command.
1220−
1221−```
1222−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/gmail> +cat /=sandbox=/app/=/split/hoon
1223−```
1224−
1225−Most commonly this is used to avoid having to know the current revision
1226−number in the `dojo`: `/~lodleb-ritrul/home/~2018.10.2..00.35.44..d7e8/gen/example/hoon`
1227−
1228−#### Changing directories
1229−
1230−Change the working directory with `=dir`. It's our equivalent of the Unix `cd`.
1231−
1232−For example, the syntax to navigate to `/home/gen/ask` is:
1233−
1234−```
1235−~your-urbit:dojo> =dir /=home=/gen/ask
1236−```
1237−
1238−This command will turn your prompt into something like this:
1239−
1240−```
1241−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/ask>
1242−```
1243−
1244−Using `=dir` without anything else uses the null path, which returns you to
1245−your home desk.
1246−
1247−```
1248−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/ask> =dir
1249−```
1250−
1251−Your dojo prompt will turn back into `~your-urbit:dojo>`.
1252−
1253−To go up levels in the path hierarchy, recall the relative path expression
1254−`%`. Stacking them represents another level higher in the hierarchy than
1255−the current working directory for each `%` beyond the initial. The command below
1256−brings you one level up:
1257−
1258−```
1259−~your-urbit:dojo> =dir %/gen
1260−~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> =dir %%
1261−```
1262−
1263−### Revision-control
1264−
1265−#### Mount
1266−
1267−Syntax: `|mount /clay/path [Unix-name]`
1268−
1269−Mount the `clay-path` at the Unix mount point `Unix-name`.
1270−
1271−**Examples:**
1272−
1273−```
1274−|mount %/gen generators
1275−```
1276−
1277−Mounts `%/gen` to `/generators` inside your pier directory.
1278−
1279−#### Unmount
1280−
1281−```
1282−|unmount [clay-path || Unix-name]
1283−```
1284−
1285−Unmount the path or name from Unix.
1286−
1287−**Examples:**
1288−
1289−```
1290−|unmount %/gen
1291−```
1292−
1293−Unmounts the Clay path `%/gen` from whatever name it was mounted as.
1294−
1295−```
1296−|unmount %generators
1297−```
1298−
1299−Unmounts the Unix path `/generators`.
1300−
1301−#### Merge
1302−
1303−```
1304−|merge desk beak[, =gem strategy]
1305−```
1306−
1307−Merges a `beak` into a `desk` using an optional merge `strategy`.
1308−
1309−A `beak` is a ship-desk-case triple, encoded as a
1310−path(`/~dozbud/home/2`)
1311−
1312−**Examples:**
1313−
1314−```
1315−|merge %home-work /=home=, =gem %fine
1316−```
1317−
1318−Merge `/=home=` into `%home-work` using merge strategy `%fine`.
1319−
1320−```
1321−|merge %examples ~wacbex-ribmex %examples
1322−```
1323−
1324−Merge the `%examples` desk from `~waxbex-ribmex`
1325−
1326−#### Sync
1327−
1328−```
1329−|sync desk plot [plot-desk]
1330−```
1331−
1332−Subscribe to continuous updates from remote `plot` on local `desk`.
1333−`plot-desk` can specify the remote `desk` name. When omitted it defaults
1334−to being the same as `desk`. Non-comet urbits have
1335−`|sync %home ~parent %kids` automatically set up (where `~parent` is the
1336−planet that issued a moon, the star that issued a planet, or the galaxy
1337−that issued a star).
1338−
1339−**Examples:**
1340−
1341−```
1342−|sync %home-local ~dozbud %home
1343−
1344−|sync %home ~doznec
1345−```
1346−
1347−#### Unsync
1348−
1349−```
1350−|unsync desk plot [plot-desk]
1351−```
1352−
1353−Unsubscribe from updates from remote `plot` on local `desk` with
1354−optional `plot-desk`. Arguments must match original `|sync` command.
1355−
1356−Example:
1357−
1358−```
1359−|unsync %home-local ~dozbud %home
1360−```
1361−
1362−#### Label
1363−
1364−```
1365−|label desk name
1366−```
1367−
1368−Label the current version of `desk` `name`.
1369−
1370−Example:
1371−
1372−```
1373−|label %home release
1374−```
1375−
1376−### Merge strategies
1377−
1378−See [Clay merge strategies](@/docs/tutorials/arvo/clay.md#merge-strategies).
1379−
1380−### Manipulation
1381−
1382−#### `+cat`
1383−
1384−Syntax: `+cat path [path ...]`
1385−
1386−Similar to Unix `cat`. `+cat` takes one or more `path`s, and prints their
1387−contents. If that `path` is a file, the contents of the file is printed. If the
1388−`path` terminates in a directory, the list of names at that path is produced.
1389−
1390−#### `+ls`
1391−
1392−Syntax: `+ls path`
1393−
1394−Similar to Unix `ls`. `+ls` takes a single `path`.
1395−
1396−Produces a list of names at the `path`.
1397−
1398−```
1399−~your-urbit:dojo> +cat %/our/home/gen/curl/hoon
1400−```
1401−
1402−#### `|rm`
1403−
1404−Syntax: `|rm path`
1405−
1406−Remove the data at `path`. `Path` must be a path to the actual node, not a
1407−'directory'.
1408−
1409−#### `|cp`
1410−
1411−Syntax: `|cp to from`
1412−
1413−Copy the file at `from` into the path `to`.
1414−
1415−#### `|mv`
1416−
1417−Syntax: `|mv to from`
1418−
1419−Move the file at `from` into the path `to`.
1420−
1421−In Clay, `|mv` is just a shorthand for `|cp` then `|rm`. The `|rm`
1422−doesn't happen unless the `|cp` succeeds.
content/using/os/_index.mdnew file+36
@@ -0,0 +1,36 @@
1++++
2+title = "Urbit OS"
3+sort_by = "weight"
4+description = "How to use Urbit OS"
5+template = "sections/docs/chapters.html"
6+weight = 10
7++++
8+
9+This section describes how to interact with your running Urbit ship: this
10+includes working with the filesystem, command line (`dojo`), resolving common
11+issues, and more.
12+
13+### [Getting Started](@/using/os/getting-started.md)
14+
15+An overview of common commands and useful general knowledge for operating your
16+ship.
17+
18+### [Messaging](@/using/os/messaging.md)
19+
20+Using chat from its command-line interface.
21+
22+### [Configuring S3 Storage](@/using/os/s3.md)
23+
24+How to set up S3 storage so you can share files in Landscape.
25+
26+### [Shell](@/using/os/shell.md)
27+
28+A comprehensive overview of `dojo` commands.
29+
30+### [Star and Galaxy Operations](@/using/os/stars-and-galaxies.md)
31+
32+How to run an infrastructure node.
33+
34+### [Ship Troubleshooting](@/using/os/ship-troubleshooting.md)
35+
36+How to resolve common problems.
content/using/os/filesystem.mdnew file+394
@@ -0,0 +1,394 @@
1++++
2+title = "Filesystem"
3+template = "doc.html"
4+weight = 3
5++++
6+
7+Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
8+referentially transparent namespace. An easy way to think about it is like typed
9+`git`.
10+
11+The most common way to use Clay is to mount a Clay node in a Unix directory. The mounted directory is always at the root of your pier directory.
12+
13+### Quickstart
14+
15+This quick-start guide will walk you through some common commands. Follow along
16+using your Dojo. When you get a `>=` message after entering a command, this means
17+that the command was successful.
18+
19+It's important to note that whenever you want to sync changes from your Unix
20+directory to your ship, you must use the `|commit %desk` command, where `%desk`
21+is the desk that you'd like to sync to.
22+
23+When developing it's a good idea to use a separate desk. Create a `%sandbox`
24+desk based on the `%home` desk:
25+
26+```
27+~your-urbit:dojo> |merge %sandbox ~your-urbit %home
28+```
29+
30+Running `our` produces your ship-name, meaning that you can run the following
31+command instead of typing out the entire thing. Useful for comets due to their
32+very long names.
33+
34+```
35+~your-urbit:dojo> |merge %sandbox our %home
36+```
37+
38+Most of the time we want to use Clay from Unix. Mount the entire contents of
39+your `sandbox` desk to Unix:
40+
41+```
42+~your-urbit:dojo> |mount /=sandbox=
43+```
44+
45+To explore the filesystem from inside Urbit `+ls` and `+cat` are useful. `+ls`
46+displays files in the current directory, and `+cat` displays the contents of
47+a file.
48+
49+We can use `%` to mean "current directory." The result of the command below
50+is just like using `ls` in a Unix terminal.
51+
52+```
53+~your-urbit:dojo> +ls %
54+```
55+
56+Notice how `+cat %` does the same thing. That's because everything in Clay,
57+including directories, is a file.
58+
59+Sync from your friend `~some-ship`'s `%experiment` desk to your
60+`%sandbox` desk:
61+
62+```
63+~your-urbit:dojo> |sync %sandbox ~some-ship %experiment
64+```
65+
66+If and when your sync is successful, you will receive a message:
67+
68+```
69+activated sync from %experiment on ~some-ship to %sandbox
70+```
71+
72+The ship that you sync from will get their own message indicating that you're
73+both connected as peers:
74+
75+```
76+; ~your-urbit is your neighbor.
77+```
78+
79+---
80+
81+### Clay manual
82+
83+#### Paths
84+
85+A path in Clay is a list of URL-safe text, restricted to the characters
86+`[a z]`,`[0 9]`, `.`, `-`, `_`, and `~`. Formally this is a `(list knot)`,
87+meaning that each segment, delineated by `/`, is of the `knot` ASCII-text type.
88+In other words, paths are expressed as `/foo/bar/baz`. File extensions are
89+separated from file names with `/`, not `.`. Extensions are syntactically
90+identical to subdirectories, except that they must terminate the path.
91+
92+Paths begin with a piece of data called a `beak`. A beak is formally a
93+`(p=ship q=desk r=case)`; it has three components, and might look like
94+`/~dozbud-namsep/home/11`.
95+
96+The first `beak` component is `ship`, which is, as you might guess, the name of
97+an Urbit ship. The second component is `desk`, which is a workspace meant to
98+contain other directories; the default desk is `%home`. The third component is
99+`case`, which represents version information in various ways: date and time;
100+a version sequence, which is a value incremented by one whenever a file on the
101+given `desk` is modified; or an arbitrary plaintext label.
102+
103+You can find what your `beak` is at any given moment by
104+typing `%` in the Dojo and looking at the first three results.
105+
106+We use `beak`s because, unlike the current internet, the Urbit network uses a
107+global namespace. That means that a file named `example.hoon` in the `/gen`
108+directory on the `%home` desk of your ship `~lodleb-ritrul` would have a
109+universal address to anyone else on the network:
110+`/~lodleb-ritrul/home/186/gen/example/hoon`. That, of
111+course, doesn't mean that everyone on the network has privileges to access that
112+path.
113+
114+The structure that combines a `beak` with further path information is called a
115+`beam`.
116+
117+#### Relative paths
118+
119+The `%` command, which we gestured at in the above section, represents the
120+**relative path**, which is the path where you are currently working. If your
121+working directory is just your home desk, indicated by the
122+prompt `~your-planet:dojo>`, then running the command below will print your
123+working directory's `beam` information: your `beak`, and a `~` that represents
124+the empty list since no path is present.
125+
126+```
127+~your-urbit:dojo> %
128+```
129+
130+`%`s can be stacked to indicate one level further up in the hierarchy for each
131+additional `%`. Try the following command:
132+
133+```
134+~your-planet:dojo> %%%
135+```
136+
137+You'll probably notice that it only has your ship name and the empty list. The
138+two additional `%`s abandoned the `case` and the `desk` information by moving
139+up twice the hierarchy.
140+
141+There are no local relative paths. `/foo/bar` must be written as
142+`%/foo/bar`.
143+
144+#### Substitution
145+
146+You don't need to write out the explicit path every time you want to reference
147+somewhere outside of your working directory. You can substitute `=` for the
148+segments of a path.
149+
150+Recall that a full address in the the Urbit namespace is a `beam`: the
151+`/ship/desk/case/path`. If you've switched to another desk before, you're
152+already familiar with substitution syntax:
153+
154+```
155+~your-urbit:dojo> =dir /=sandbox=
156+```
157+
158+The above command uses substitution to use your current `ship` and
159+`case`; only the `desk` argument, which is located between the other two, is
160+given something new. Without substitution, you would need to write:
161+
162+```
163+~your-urbit:dojo> =dir /~your-urbit/sandbox/85
164+```
165+
166+Substitutions work the same way in `beak`s (the `ship/desk/case` part) and
167+paths. For example, if you are in the `/gen` directory, you can reference a file
168+in the `/app` directory like below. (`+cat` displays the contents of a file).
169+
170+```
171+~your-urbit:dojo> =dir %/gen
172+~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> +cat /===/app/curl/hoon
173+```
174+
175+Note what was substituted out, and note that we don't need to separate `=` with
176+`/`.
177+
178+If we changed our working directory to something called `/gen/gmail`, we could
179+access a file called
180+
181+```
182+~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> =dir %/gmail
183+~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/gmail> +cat /===/app/=/split/hoon
184+```
185+
186+Because both paths share a directory named `/gmail` at the same position in the
187+address hierarchy – which, if you recall, is just a `list` – the above command
188+works!
189+
190+We can do the same thing between desks. If `%sandbox` has been merged with
191+`%home`, the following command will produce the same results as the above
192+command.
193+
194+```
195+~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/gmail> +cat /=sandbox=/app/=/split/hoon
196+```
197+
198+Most commonly this is used to avoid having to know the current revision
199+number in the `dojo`: `/~lodleb-ritrul/home/~2018.10.2..00.35.44..d7e8/gen/example/hoon`
200+
201+#### Changing directories
202+
203+Change the working directory with `=dir`. It's our equivalent of the Unix `cd`.
204+
205+For example, the syntax to navigate to `/home/gen/ask` is:
206+
207+```
208+~your-urbit:dojo> =dir /=home=/gen/ask
209+```
210+
211+This command will turn your prompt into something like this:
212+
213+```
214+~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/ask>
215+```
216+
217+Using `=dir` without anything else uses the null path, which returns you to
218+your home desk.
219+
220+```
221+~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen/ask> =dir
222+```
223+
224+Your dojo prompt will turn back into `~your-urbit:dojo>`.
225+
226+To go up levels in the path hierarchy, recall the relative path expression
227+`%`. Stacking them represents another level higher in the hierarchy than
228+the current working directory for each `%` beyond the initial. The command below
229+brings you one level up:
230+
231+```
232+~your-urbit:dojo> =dir %/gen
233+~your-urbit:dojo/=/=/~2018.10.2..00.35.44..d7e8/gen> =dir %%
234+```
235+
236+### Revision-control
237+
238+#### Mount
239+
240+Syntax: `|mount /clay/path [Unix-name]`
241+
242+Mount the `clay-path` at the Unix mount point `Unix-name`.
243+
244+**Examples:**
245+
246+```
247+|mount %/gen generators
248+```
249+
250+Mounts `%/gen` to `/generators` inside your pier directory.
251+
252+#### Unmount
253+
254+```
255+|unmount [clay-path || Unix-name]
256+```
257+
258+Unmount the path or name from Unix.
259+
260+**Examples:**
261+
262+```
263+|unmount %/gen
264+```
265+
266+Unmounts the Clay path `%/gen` from whatever name it was mounted as.
267+
268+```
269+|unmount %generators
270+```
271+
272+Unmounts the Unix path `/generators`.
273+
274+#### Merge
275+
276+```
277+|merge desk beak[, =gem strategy]
278+```
279+
280+Merges a `beak` into a `desk` using an optional merge `strategy`.
281+
282+A `beak` is a ship-desk-case triple, encoded as a
283+path(`/~dozbud/home/2`)
284+
285+**Examples:**
286+
287+```
288+|merge %home-work /=home=, =gem %fine
289+```
290+
291+Merge `/=home=` into `%home-work` using merge strategy `%fine`.
292+
293+```
294+|merge %examples ~wacbex-ribmex %examples
295+```
296+
297+Merge the `%examples` desk from `~waxbex-ribmex`
298+
299+#### Sync
300+
301+```
302+|sync desk plot [plot-desk]
303+```
304+
305+Subscribe to continuous updates from remote `plot` on local `desk`.
306+`plot-desk` can specify the remote `desk` name. When omitted it defaults
307+to being the same as `desk`. Non-comet urbits have
308+`|sync %home ~parent %kids` automatically set up (where `~parent` is the
309+planet that issued a moon, the star that issued a planet, or the galaxy
310+that issued a star).
311+
312+**Examples:**
313+
314+```
315+|sync %home-local ~dozbud %home
316+
317+|sync %home ~doznec
318+```
319+
320+#### Unsync
321+
322+```
323+|unsync desk plot [plot-desk]
324+```
325+
326+Unsubscribe from updates from remote `plot` on local `desk` with
327+optional `plot-desk`. Arguments must match original `|sync` command.
328+
329+Example:
330+
331+```
332+|unsync %home-local ~dozbud %home
333+```
334+
335+#### Label
336+
337+```
338+|label desk name
339+```
340+
341+Label the current version of `desk` `name`.
342+
343+Example:
344+
345+```
346+|label %home release
347+```
348+
349+### Merge strategies
350+
351+See [Clay merge strategies](@/docs/arvo/clay/using.md#merging).
352+### Manipulation
353+
354+#### `+cat`
355+
356+Syntax: `+cat path [path ...]`
357+
358+Similar to Unix `cat`. `+cat` takes one or more `path`s, and prints their
359+contents. If that `path` is a file, the contents of the file is printed. If the
360+`path` terminates in a directory, the list of names at that path is produced.
361+
362+#### `+ls`
363+
364+Syntax: `+ls path`
365+
366+Similar to Unix `ls`. `+ls` takes a single `path`.
367+
368+Produces a list of names at the `path`.
369+
370+```
371+~your-urbit:dojo> +cat %/our/home/gen/curl/hoon
372+```
373+
374+#### `|rm`
375+
376+Syntax: `|rm path`
377+
378+Remove the data at `path`. `Path` must be a path to the actual node, not a
379+'directory'.
380+
381+#### `|cp`
382+
383+Syntax: `|cp to from`
384+
385+Copy the file at `from` into the path `to`.
386+
387+#### `|mv`
388+
389+Syntax: `|mv to from`
390+
391+Move the file at `from` into the path `to`.
392+
393+In Clay, `|mv` is just a shorthand for `|cp` then `|rm`. The `|rm`
394+doesn't happen unless the `|cp` succeeds.
content/using/os/getting-started.mdnew file+337
@@ -0,0 +1,337 @@
1++++
2+title = "Getting Started"
3+description = "How to operate your ship, including using your ship's filesystem and messaging applications, starting a moon, or requesting a DNS proxy."
4+template = "doc.html"
5+weight = 1
6+aliases = ["docs/using/messaging/", "docs/using/admin/"]
7+[extra]
8+hidetitle = "true"
9++++
10+
11+Your urbit (also called your _ship_) is a persistent Unix process that you
12+mainly control from its console, called the `dojo`.
13+
14+### Shutdown
15+
16+You can turn your urbit off with `Ctrl-d` from the Chat or Dojo prompts.
17+
18+You can force-quit your urbit with `Ctrl-z` from anywhere.
19+
20+### Restart
21+
22+To restart your urbit simply pass the name of your pier:
23+
24+```sh
25+$ ./urbit some-planet
26+```
27+
28+or
29+
30+```sh
31+$ ./urbit comet
32+```
33+
34+### Logging
35+
36+To log an urbit's command line output to a file, use `script`:
37+
38+```sh
39+$ script urbit.log ./urbit your-urbit
40+```
41+
42+### Moving your pier
43+
44+Piers are designed to be portable, but it _must_ be done while the urbit
45+is not running. Urbit networking is stateful, so you can't run two copies
46+of the same urbit in two places.
47+
48+To move a pier, simply move the contents of the directory it lives in.
49+To keep these files as small as possible we usually use the `--sparse`
50+option in `tar`. With a pier `your-urbit/`, something like this should work:
51+
52+```sh
53+tar -Scvzf ~/your-urbit.tar.gz ~/your-urbit/
54+scp your-old-server:~/your-urbit.tar.gz your-new-server:~
55+```
56+
57+Then to unzip it, on your other Unix server, run:
58+
59+```sh
60+tar xfvz your-urbit.tar.gz
61+```
62+
63+Delete the tar file, and, after installing Urbit on your new server, start your urbit back up with:
64+
65+```sh
66+./urbit your-urbit
67+```
68+
69+### Hardware requirements
70+
71+Urbit can run on any x86 computer (unofficial, unsupported [ARM binaries](https://botter-nidnul.github.io/AArch64_Urbit_Static_Binaries.html) are also available), ideally with at least 2GB of RAM.
72+
73+Urbit maintains a persistent log of the history of your ship. Eventually this log will be automatically trimmed when necessary, but for now it only increases in size. An actively used planet will consume 5-50 GB of storage space per year of operation.
74+
75+### Console
76+
77+Your Urbit terminal is separated into two parts: the prompt (the bottom line) and the record (everything above that). The record is shared; all the output from all the apps in your command set appears in it. The prompt is multiplexed.
78+
79+In the CLI, Urbit apps can process your input before you hit return. To see this in action try entering `)` as the first character at the Dojo prompt. Since there is no Dojo command or Hoon expression that starts with ')', the Dojo rejects it.
80+
81+`Ctrl-x` - Switches the prompt between running console apps
82+
83+`Ctrl-c` - Crash current event. Processed at the Unix layer and prints a stack
84+trace.
85+
86+`Ctrl-d` - From Chat or Dojo, stops your Urbit process.
87+
88+`Ctrl-z` - Stops the Urbit process from _anywhere_.
89+
90+`↑` / `↓` - History navigation
91+
92+The following emacs-style key bindings are available:
93+
94+```
95+Ctrl-a Cursor to beginning of the line (Home)
96+Ctrl-b Cursor one character backward (left-arrow)
97+Ctrl-e Cursor to the end of the line (End)
98+Ctrl-f Cursor one character forward (right-arrow)
99+Ctrl-g Beep; cancel reverse-search
100+Ctrl-k Kill to end of line
101+Ctrl-l Clear the screen
102+Ctrl-n Next line in history (down-arrow)
103+Ctrl-p Previous line in history (up-arrow)
104+Ctrl-r Reverse-search
105+Ctrl-t Transpose characters
106+Ctrl-u Kill to beginning of line
107+Ctrl-y Yank from kill buffer
108+```
109+
110+### Updates
111+
112+By default, you will automatically receive updates ([OTAs](@/docs/glossary/ota-updates.md)) from your sponsor. To check your OTA source, run `|ota` in the [dojo](@/docs/glossary/dojo.md).
113+
114+If for some reason (for example, if your sponsor is out of date), you can switch OTA sources by running `|ota ~otasrc %kids` in the dojo, where `~otasrc` is the ship from which you want to receive updates. It is a good idea to contact the source ship and ask permission to sync from them.
115+
116+If OTAs are not succeeding, or if you are on an version of Urbit before the `|ota` command was introduced, you can run `|merge %home (sein:title our now our) %kids, =gem %take-that`. **Note:** This will wipe out any custom changes to the base distribution.
117+
118+#### Additional OTA Troubleshooting
119+Please check the Support Wiki for additional OTA troubleshooting, such as:
120+[OTA 1.0.71 failed](https://github.com/urbit/support/wiki/OTA-1.0.71-failed),
121+[Missing OTA](https://github.com/urbit/support/wiki/Missing-OTA),
122+[Stuck flow preventing planets from receiving
123+OTAs](https://github.com/urbit/support/wiki/Stuck-flow-preventing-planets-from-receiving-OTAs),
124+and [No content shows in Links page after OTA](https://github.com/urbit/support/wiki/No-content-shows-in-Links-page-after-OTA).
125+
126+### Landscape
127+
128+On startup Urbit tries to bind to `localhost:80`. If you're already running something on port `80` -- such as any other HTTP server, or another urbit -- you'll find the urbit that you just started on `8080`, `8081`, and so on. For planets only, we also proxy web domains through Urbit's own servers. Any planet `~your-urbit` is also at `your-urbit.arvo.network`, but only after you [set up DNS](#dns-proxying).
129+
130+Once running, you can sign into Landscape, your ship’s web interface, from `http://localhost` or `https://your-urbit.arvo.network`. Since our HTTPS isn't audited / battle tested, we just call it "secure" HTTPS. You can find that on `8443`. Or `8444` (and so on) if you're already running something on `8443`.
131+
132+### Moons {#moons}
133+
134+Planets can spawn moons, which are meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
135+
136+To generate a random moon from your planet, run:
137+
138+```
139+~sampel-palnet:dojo> |moon
140+moon: ~faswep-navred-sampel-palnet
141+\/0w5cT5t.wCO6i.~e1xg.Oz0qb.QNO6I.3Kt2T.h9M9F.U3vU~.X3Qu0.gtb19.IYTkY.80kWZ.SI\/
142+ EUE.DXa8i.TiDof.o3-1C.RHLKS.k81M0.ecz5o.ic0Bg.600g1
143+\/ \/
144+```
145+
146+You must manually edit the output of `|moon` to get the correct format for the `<key>`:
147+
148+- strip out the `\/`
149+
150+- combine into one line, omitting spaces
151+
152+`<key>` would be `0w5cT5t.wCO6i.~e1xg.Oz0qb.QNO6I.3Kt2T.h9M9F.U3vU~.X3Qu0.gtb19.IYTkY.80kWZ.SIEUE.DXa8i.TiDof.o3-1C.RHLKS.k81M0.ecz5o.ic0Bg.600g1`
153+in this example.
154+
155+Put `<key>` in a file and that file becomes `<keyfile>`.
156+
157+You can use the resulting output in the same installation flow from the [Installing Urbit](@/getting-started.md) guide, following the same scheme as for booting a planet. That scheme is:
158+
159+```sh
160+$ ./urbit -w <moonname> -G <key> -c <piername>
161+```
162+
163+or
164+
165+```sh
166+$ ./urbit -w <moonname> -k <keyfile> -c <piername>
167+```
168+
169+The `-c <piername>` argument is not required, but it is recommended; otherwise,
170+the resulting directory is a rather unwieldy moon name.
171+
172+Here's how an example moon might be booted:
173+
174+```sh
175+$ ./urbit -w faswep-navred-sampel-palnet -G <key> -c mymoon
176+```
177+
178+or
179+
180+```sh
181+$ ./urbit -w faswep-navred-sampel-palnet -k <keyfile> -c mymoon
182+```
183+
184+Moons are automatically synced to their parent `%kids` desk, and can control applications on their parent planet using `|link`.
185+
186+To breach a moon -- that is, to reset its presence on the network so that it's treated as a freshly spawned ship by others -- run from the parent ship:
187+
188+```
189+|moon-breach ~faswep-navred-sampel-palnet
190+```
191+
192+To cycle the keys of a moon without breaching, run:
193+
194+```
195+|moon-cycle-keys ~sampel-sipnym-wicdev-wisryt
196+```
197+
198+
199+### Escaping A Sponsor {#escape}
200+
201+To use the network as a planet or star, you must be sponsored by an active star
202+or galaxy, respectively. If your sponsor isn't suiting your needs, you can
203+escape to a different one. This can be done with
204+[Bridge](https://bridge.urbit.org/) following the instructions
205+[here](@/using/id/using-bridge.md#escaping-your-sponsor).
206+
207+### Continuity breaches
208+
209+While the Urbit network is in this alpha state, we sometimes have to reboot the whole network. This happens either when major changes need to be shipped or we hit a bug that can't be fixed over the air.
210+
211+Because Urbit networking is stateful we call this a _continuity breach_. Everything has to be restarted from scratch. Your pier will continue to function after we have breached, but it won’t connect to the rest of the Urbit network.
212+
213+When this happens, back up any files you'd like to save, shut down your urbit, and recreate it (as if you were starting for the first time).
214+
215+### Life and rift number
216+
217+You can check your ship's _life_ and _rift_ number by running `+keys our` in
218+dojo. You can inspect another ship's life and rift number by running `+keys
219+~sampel-palnet`. For information on what life and rift are, see [Guide to Breaches](@/using/id/guide-to-breaches.md).
220+
221+## DNS proxying {#dns-proxying}
222+
223+We have a system that lets you request a domain name for your ship in the form of `ship.arvo.network`, where `ship` is your ship's name minus the `~`. This allows users to access their ships remotely using Landscape, our graphical web interface.
224+
225+Stars and planets follow the same process DNS proxying process, and galaxies have their own requirements. Moons and comets are not supported.
226+
227+### Planets and Stars
228+
229+For a planet or star's DNS proxying request to be made and fulfilled, they must be hosting their ship someplace with a public IP address, and its HTTP server must be listening on port 80.
230+
231+To get `ship.arvo.network` on a planet or star, you must set up DNS routing with its parent ship by starting the `:dns` app.
232+
233+To do so, simply run this command in your ship's Dojo, passing the IP address as an argument, using the .0.0.0.0 (`@if`) syntax. For example:
234+
235+```
236+> -dns-address &dns-address [%if .1.2.3.4]
237+```
238+
239+`:dns`, running locally, will make an HTTP request to that IP address on port 80 to confirm that it is itself available at that IP and port. If that fails, you'll receive a `%bail-early` message in `:chat-cli`; this request will retry a few times. If the self-check is successful, the request is relayed to `~zod`, and you'll receive a message saying, `request for DNS sent to ~zod`. Once `~zod` has acknowledged receipt of the request, your local `:dns` app will send a `:chat-cli` message saying `awaiting response from ~zod`.
240+
241+The request will be picked up shortly, and the `ship.arvo.network` DNS record will be set to the given IP address. Once that's set up, `~zod` will be notified and `~zod` will, in turn, notify your ship. That ship will now try to verify that it can reach itself on `ship.arvo.network` over port 80. If it can't, it'll send a message saying, `unable to access via ship.arvo.network`. If it can, it will configure itself with that domain and say `confirmed access via ship.arvo.network`.
242+
243+Great! You're set up now. Try accessing your `ship.arvo.network` in your browser to use Landscape; we recommend Chrome or Brave.
244+
245+### Configuring SSL
246+
247+To enable SSL on your ship, use the `acme` agent, which will request a certificate through Let's Encrypt. First, make sure the agent is started:
248+
249+```
250+> |start %acme
251+```
252+
253+Next, provide the path for the SSL certificate by poking the `acme` agent. The path format is `/tld/your_domain/your_subdomain`, so if your domain is `sampel-palnet.arvo.network`, you'd use it like so:
254+
255+```
256+> :acme &path /network/arvo/sampel-palnet
257+```
258+
259+### Galaxies
260+
261+Galaxies are already required to have separate DNS entry at galaxy.urbit.org. There's no automated process for getting that binding, so if you're a galaxy-holder, get in touch with us at support@urbit.org.
262+
263+There is a command for galaxies that will try to re-use their already-necessary Ames DNS entry for HTTPS:
264+
265+```
266+> -dns-auto
267+```
268+
269+This will make HTTP-requests to self-check availability over `galaxy.$AMES-DOMAIN` (currently galaxy.urbit.org), where `galaxy` is the galaxy's name minus the `~`.
270+
271+Otherwise, `-dns-auto` works the same as `:dns|ip` does with stars and planets: if it's available or unavailable, Chat messages, and so on.
272+
273+### Ports
274+
275+The built-in logic for listening on port 80 is to try to bind to port 80; if it cannot, it tries 8080, then increments until it can bind a port. Port 80 is available to unprivileged process on recent version of macOS. Otherwise, the process needs to either be run as root, or be given special permission (CAP\_NET_BIND on Linux).
276+
277+### Hoon
278+
279+You can use Chat to evaluate Hoon code and share the results with everyone in a chat. To do so, preface your Hoon with `#`.
280+
281+```
282+~sampel-palnet:chat-cli= #(add 2 2)
283+```
284+
285+This will print as:
286+
287+```
288+~sampel-palnet# (add 2 2)
289+ 4
290+```
291+
292+### URLs
293+
294+To share a URL, send it as its own message, with no content before or after it.
295+
296+```
297+~sampel-palnet:chat-cli= https://urbit.org/
298+```
299+
300+This will print as:
301+
302+```
303+~sampel-palnet/ https://urbit.org/
304+```
305+
306+### Expanding messages
307+
308+In the case of URLs, they may be too long to display on a single message line. For Hoon code, the code or result could be big. In `:chat-cli`, these get shortened when initially printed out. To view the entire contents, you can select the message in various ways.
309+
310+```
311+~sampel-palnet+ some message
312+----------[240]
313+~sampel-palnet+ let's try selecting this message!
314+~sampel-palnet+ another message
315+~sampel-palnet:chat-cli=
316+```
317+
318+In the above example, we can select the middle message by issuing any of the following command:
319+
320+```
321+;240
322+;40
323+;;
324+```
325+
326+`;n` looks for the last message whose sequence number ends in `n`. `;;` simply picks the second-to-last message.
327+
328+Detailed message output will look something like this:
329+
330+```
331+? 240
332+ 0v5.g7r7l.n0d7m.mp4bn.gp6vr.sm5lj at ~2019.10.17..22.08.27..8a03
333+ ~sampel-palnet
334+ to ~dopzod/urbit-help
335+let's try selecting this message!
336+```
337+
content/using/os/messaging.mdnew file+254
@@ -0,0 +1,254 @@
1++++
2+title = "Messaging"
3+template = "doc.html"
4+weight = 2
5++++
6+
7+Let’s get started using the `:chat-cli` application, also known more simply as
8+_Chat_. It's the simplest way to talk to people using the command line
9+interface.
10+
11+### Quickstart
12+
13+The most common use for `:chat-cli` right now is, of course, communicating in group chats.
14+
15+### Joining a chat
16+
17+In `:chat-cli`, any kind of medium for a message is called a _chat_. There are four "types" of chats, but for now we'll be dealing with the _channel_, a publicly accessible chatroom for general use. We'll discuss the other three kinds in the [chat management](#chat-management) section later on.
18+
19+Join the Urbit Community from Dojo using `:group-store|join ~bitbet-bolbel/urbit-community`. Once you've joined, join the General chat from chat-cli. Use `ctrl-x` to switch from the Dojo prompt to the Chat prompt.
20+
21+Then:
22+
23+```
24+~sampel-palnet:chat-cli/ ;join ~darrux-landes/general
25+```
26+
27+Now that you're in, try post a line to `~darrux-landes/general`:
28+
29+```
30+~sampel-palnet:chat-cli= Hello, world!
31+```
32+
33+You'll see your message printed below messages from others that came before it. You can always type `;chats` in the `chat-cli` prompt to list all the chats you're in:
34+
35+```
36+~sampel-palnet:chat-cli= ;chats
37+~darrux-landes/general
38+```
39+
40+Glyphs will be automatically assigned to channels, but have the option of binding a glyph (single non-alphanumeric character) to the channel you're joining; the syntax is in the form of `;join ~/~dopzod/books +`. The chosen glyph will be the symbol that ends your prompt, and it will be what you use as a shortcut to switch to this channel.
41+
42+```
43+~sampel-palnet:chat-cli= ;+
44+~sampel-palnet:chat-cli+
45+```
46+
47+Use `;leave` to unsubscribe from a channel:
48+
49+```
50+~sampel-palnet:chat-cli= ;leave ~darrux-landes/general
51+```
52+
53+Now, let's create a channel we can invite some friends to:
54+
55+```
56+~sampel-palnet:chat-cli= ;create channel /my-channel
57+```
58+
59+Now you can tell your friends to `;join ~your-urbit/my-channel`.
60+
61+In order to see messages in `:chat-cli` you may need to do the following in Dojo:
62+
63+```
64+:chat-cli %connect
65+```
66+ ### Creating and managing chats {#chat-management}
67+
68+As mentioned before, any urbit can host any number of chats. Existing chats can be deleted or modified with various commands. All commands in this section should be sent from the `chat-cli>` prompt.
69+
70+#### Create
71+
72+Syntax: `;create [type] /name +`, where `+` represents an optional glyph.
73+
74+Creates and joins a chat, where `[type]` is any of the following:
75+- `channel`: public chat. Has a blacklist for write control.
76+- `village`: invite-only chat.
77+- `journal`: publicly readable, invite-only for writing.
78+- `mailbox`: publicly writeable, invite-only for reading.
79+
80+Let's create an example mailbox:
81+
82+```
83+~sampel-palnet:chat-cli> ;create mailbox /coolbox ^
84+```
85+
86+#### Delete
87+
88+Syntax: `;delete /name`
89+
90+Deletes a chat.
91+
92+#### Permission management
93+
94+You can permit and ban people from reading and/or writing to the chats you host, using `;invite` and `;banish` command respectively.
95+
96+Syntax: `;invite [rw] /name ~ships`
97+
98+Where `rw` is either `r`, `w`, or `rw`, representing "read" and "write" permissions.
99+And where `~ships` is a comma-seperated list of ships to invite.
100+
101+For example, to grant two people full access to a `village` we created:
102+
103+```
104+~sampel-palnet:chat-cli> ;invite rw /hidden-village ~ravmel-ropdyl, ~rapfyr-diglyt
105+```
106+
107+Similarly, if we later want to revoke the writing permissions for one of them, but still allow them to read new messages, we can run:
108+
109+```
110+~sampel-palnet:chat-cli> ;banish w /hidden-village ~rapfyr-diglyt
111+```
112+
113+#### Chat glyphs
114+
115+Glyphs are found at the end of your prompt, as a quick indicator of where
116+your messages will be sent.
117+
118+Glyphs are assigned by chat hash out of the following list:
119+
120+```
121+! @ # $ % ^ & ( ) - = _ + [ ] { } ; ' \ : " , . < > ?
122+```
123+
124+Alphanumeric characters and `|#/*~` are reserved; all others can be manually assigned.
125+
126+For example, `-` the glyph at the end of the prompt below might indicates that
127+messages sent from this prompt will go to some chat with that glyph:
128+
129+```
130+~sampel-palnet:chat-cli-
131+```
132+
133+To see what chat is bound to a glyph, use the `;what` command followed by the
134+glyph in question, or use `;what` without specifying a glyph to see all of your
135+subscriptions which are bound to glyphs. For example, to see `=`:
136+
137+```
138+~sampel-palnet:chat-cli> ;what =
139+~dopzod/urbit-help
140+```
141+
142+To see all of your glyph bindings:
143+
144+```
145+~sampel-palnet:chat-cli> ;what
146+> ~paldev/numismatic-forum
147+. ~middev/ny-martians
148+= ~dopzod/urbit-help
149+```
150+
151+When the messaging target doesn't have a glyph, we see their name at the end of
152+the prompt instead. Here we're talking into `~dannum-mitryl/homework`:
153+
154+```
155+~sampel-palnet:chat-cli[~dannum-mitryl/homework]
156+```
157+
158+#### Bind
159+
160+Syntax: `;bind [glyph] ~host/chat-name`
161+
162+Assigns the chosen glyph to a chat.
163+
164+For example:
165+
166+```
167+~sampel-palnet:chat-cli> ;bind + ~dopzod/urbit-help
168+```
169+
170+#### Unbind
171+
172+Syntax: `;unbind [glyph] ~host/chat-name`
173+
174+Unassigns the chosen glyph from a chat owned by your ship.
175+
176+For example:
177+
178+```
179+~sampel-palnet:chat-cli> ;unbind + ~dopzod/urbit-help
180+```
181+
182+If you don't specify a chat, all bindings for that glyph are removed.
183+
184+#### Prefixes
185+
186+Received posts are prefixed with a glyph to let you know what the
187+audience is. You can activate an individual post to see the full
188+audience.
189+
190+There are a few special-purpose "glyphs":
191+
192+- `|` - Informational messages
193+- `*` - Posts to a target you don't have a glyph binding for
194+
195+
196+### Configuration
197+
198+#### Set audience
199+
200+`;~ship/chat`
201+
202+Set audience to `~ship/chat`.
203+
204+#### Set audience by glyph
205+
206+Syntax: `;[glyph]`
207+
208+Set audience to the chat previously bound to the chosen glyph.
209+
210+#### Set audience to own chat
211+
212+Syntax: `;/chat`
213+
214+Set audience to a chat on your own ship.
215+
216+### Miscellaneous configuration
217+
218+#### Change timezone
219+
220+Syntax: `;set timezone [+/-][hours]`
221+
222+Adjust the display of timestamps to a specific timezone. Relative to UTC.
223+
224+#### Set width
225+
226+Syntax: `;set width [number]`
227+
228+Set the rendering width of `:chat-cli` to a specific number of characters.
229+(Minimum of 30.)
230+
231+#### Show timestamps
232+
233+Syntax: `;set showtime`
234+
235+Show the timestamp for each message. This is set by default.
236+
237+#### Hide timestamps
238+
239+Syntax: `;unset showtime`
240+
241+Stop showing the timestamp for each message.
242+
243+#### Sound notification on
244+
245+Syntax: `;set notify`
246+
247+Emit a terminal bell sound if your six-syllable ship name is mentioned in
248+a message. This is set by default.
249+
250+#### Sound notification off
251+
252+Syntax `;unset notify`
253+
254+Do not notify when your ship name is mentioned.
content/using/os/s3.mdnew file+34
@@ -0,0 +1,34 @@
1++++
2+title = "Configuring S3 Storage"
3+template = "doc.html"
4+weight = 2
5++++
6+
7+Amazon S3, which stands for Amazon Simple Storage Service, is a technology that was introduced by Amazon Web Services for cloud storage that has since been extended more broadly into a [standard programming interface](https://en.wikipedia.org/wiki/Amazon_S3#S3_API_and_competing_services).
8+
9+Our S3 support lets you store credentials for your S3 object storage buckets on your Urbit ship; once you have done so, you will get additional functionality for uploading your own media within Chat and Groups (for avatars).
10+
11+To enable S3 support on your ship you'll need to first set up a bucket, and then add its credentials to Landscape using *either* Landscape or the Dojo.
12+
13+### Bucket Setup
14+
15+If you’re using AWS, it will have to support signature v2, not v4. We've found DigitalOcean's Spaces to work well also. The bucket has to be publicly readable, allow CORS from `*` origins, allow GET and PUT methods, and allow `*` headers. Your provider should have details on setting access permissions and CORS.
16+
17+### Add your credentials: Landscape
18+
19+Navigate to your `https://<your-ship-url>/~profile/settings`, or click your sigil in the upper-right corner of the window. Fill out the **S3 Credentials** and **S3 Buckets** sections and you're all set!
20+
21+### Add your credentials: Dojo
22+
23+Once you have gotten your bucket setup, poke the `s3-store` on your ship with your details. You can do this in Dojo or in web Dojo.
24+
25+```
26+:s3-store|set-endpoint 'endpoint.mys3provider.com'
27+:: AWS endpoint example: s3-us-west-2.amazonaws.com
28+:: Digital Ocean endpoint example: sfo2.digitaloceanspaces.com
29+:s3-store|set-access-key-id 'MYACCESSKEYID'
30+:s3-store|set-secret-access-key 'MYSECRETACCESSKEY'
31+:s3-store|set-current-bucket 'yourbucketname'
32+```
33+
34+Done! If you need to peek at s3-store’s state, you can always run :s3-store +dbug (inside Dojo, not web Dojo, unfortunately). You’ll see the additional functionality appear in Groups and Chat.
content/using/os/shell.mdnew file+413
@@ -0,0 +1,413 @@
1++++
2+title = "Shell"
3+template = "doc.html"
4+weight = 2
5++++
6+
7+The Dojo is our shell; it processes system commands and returns output. It's a
8+good place to quickly experiment with Urbit. On the surface the Dojo is just a
9+Hoon REPL. On the inside, the Dojo is a system for operating on and transforming
10+data in Urbit.
11+
12+### Quickstart
13+
14+You can use the Dojo to run arbitrary Hoon code, as well as non-Hoon system
15+commands.
16+
17+#### Math
18+
19+Evaluate a Hoon expression (whitespace matters):
20+
21+```
22+~your-urbit:dojo> (add 2 2)
23+~your-urbit:dojo> %+ add 2 2
24+```
25+
26+Tall-form Hoon may require multiple lines:
27+
28+```
29+~your-urbit:dojo> %+ add
30+~your-urbit:dojo< 2
31+~your-urbit:dojo< 2
32+```
33+
34+Hoon uses something called [the subject](@/docs/hoon/hoon-school/the-subject-and-its-legs.md).
35+The Dojo has its own subject and that's where Hoon's equivalent of variables,
36+called faces, are stored.
37+
38+Use `=var` to save faces to the Dojo subject.
39+
40+```
41+~your-urbit:dojo> =foo (add 2 2)
42+```
43+
44+Note, however, that `=var` is Dojo syntax, not Hoon syntax. You cannot bind a
45+face in a `.hoon` file in this way.
46+
47+#### System commands
48+
49+Use `=dir` to set the current working directory:
50+
51+```
52+~your-urbit:dojo> =dir %/gen
53+```
54+
55+(`%` represents your current directory. For a complete explanation on urbit
56+paths, see the [filesystem section](#filesystem).)
57+
58+Generators (files in `/gen`) are run with `+`:
59+
60+```
61+~your-urbit:dojo> +hello 'world'
62+```
63+
64+Save output to a file in `%clay` with `*`:
65+
66+```
67+~your-urbit:dojo> *some/file/path/hoon 'hello world'
68+```
69+
70+Run system commands from `:hood`, like `reload`, using `|`:
71+
72+```
73+~your-urbit:dojo> |reload %eyre
74+```
75+
76+### Generators
77+
78+Generators are short Hoon scripts, saved as `.hoon` files in the `/gen`
79+directory. Many Dojo commands exist in the form of generators. The syntax for
80+running a generator is `+genname` for a generator saved as `genname.hoon`.
81+
82+#### `+cat`
83+
84+Accepts a path and displays the file. Similar to Unix `cat`.
85+
86+```
87+~your-urbit:dojo> +cat %/gen/curl/hoon
88+```
89+
90+#### `+code`
91+
92+Generates a code that is used to remotely log into your ship. No
93+arguments.
94+
95+```
96+~your-urbit:dojo> +code
97+```
98+
99+You can change your code to a new randomly generated one by entering `|code
100+%reset`. Please note that this will prevent [Bridge](@/docs/glossary/bridge.md)
101+from being able to derive your code in the future.
102+
103+#### `+curl`
104+
105+Retrieves data from a URL. Accepts a `tape`. Similar to Unix `curl`.
106+
107+```
108+~your-urbit:dojo> +curl "http://nyt.com"
109+```
110+
111+#### `+hello`
112+
113+Just prints the argument. Accepts a `@ta`.
114+
115+```
116+~your-urbit:dojo> +hello 'mars'
117+```
118+
119+#### `+ls`
120+
121+Similar to Unix `ls`. Accepts a path.
122+
123+```
124+~your-urbit:dojo> +ls %/gen
125+~your-urbit:dojo> +ls /~talsur-todres/home/2/gen/program
126+```
127+
128+#### `+solid`
129+
130+Compile the current state of the kernel and output a
131+noun. Usually downloaded to a file in unix. No arguments.
132+
133+```
134+~your-urbit:dojo> .urbit/pill +solid
135+```
136+
137+#### `+test`
138+
139+Testrunner. Can test multiple generators at once, conventionally ones
140+in the `/test` folder. Takes a path.
141+
142+```
143+~your-urbit:dojo> +test /lib
144+```
145+
146+#### `+ticket`
147+
148+Generate a ticket for an urbit ship. Takes an urbit name (`@p`).
149+
150+
151+```
152+~your-urbit:dojo> +ticket ~talsur-todres-your-urbit
153+```
154+
155+#### `+tree`
156+
157+Generate a recursive directory listing. Takes a path.
158+
159+```
160+~your-urbit:dojo> +tree %/sys
161+```
162+
163+### Hood
164+
165+The hood is the system daemon. See `gen/hood` and `app/hood`.
166+
167+`|hi` - Sends a direct message. Sort of like Unix `write`. Accepts
168+an urbit name (`@p`) and a string (`tape`, which is text wrapped with double-quotes).
169+
170+```
171+~your-urbit:dojo> |hi ~binzod "you there?"
172+```
173+
174+`|link` / `|unlink` - Link / unlink a remote app. Accepts an
175+Urbit name and an app name.
176+
177+```
178+~your-urbit:dojo> |link ~talsur-todres %octo
179+```
180+
181+`|mass` - Prints the current memory usage of all the kernel modules.
182+No arguments.
183+
184+```
185+~your-urbit:dojo> |mass
186+```
187+
188+`|reload` - Reloads a kernel module (vane) from source. Accepts any
189+number of vane names.
190+
191+```
192+~your-urbit:dojo> |reload %clay %eyre
193+```
194+
195+`|reset` - Reloads `hoon.hoon` and all modules. No arguments.
196+
197+```
198+~your-urbit:dojo> |reset
199+```
200+
201+`|start` - Starts an app. Accepts an app name.
202+
203+```
204+~your-urbit:dojo> |start %curl
205+```
206+
207+---
208+
209+### Dojo manual
210+
211+#### Sources and sinks
212+
213+A Dojo command is either a **source** or a **sink**. A source is just something
214+that can be printed to your console or the result of some computation. A
215+sink is an **effect**: a change to the filesystem, a network message, a
216+change to your environment, or a typed message to an app.
217+
218+Sources can be chained together, but we can only produce one effect per
219+command.
220+
221+#### Sinks
222+
223+#### `=` - Set variable
224+
225+Set any environment variable:
226+
227+```
228+~your-urbit:dojo> =foo 42
229+~your-urbit:dojo> (add 2 foo)
230+
231+44
232+```
233+
234+Make sure to note that `=var` is Dojo syntax, not Hoon syntax. You cannot bind a
235+variable in a `.hoon` file in this way.
236+
237+#### Special variables
238+
239+There are a few special variables that the Dojo maintains.
240+
241+#### `:` - Send to app
242+
243+`:app` goes to a local `app`, `:~ship/app` goes to the `app` on `~ship`.
244+
245+Send a `helm-hi` message to `hood`:
246+
247+```
248+~your-urbit:dojo> :hood &helm-hi 'hi'
249+```
250+
251+Apps usually expect marked data, so `&` is often used here.
252+
253+#### `*` - Save in `%clay`
254+
255+Save a new `.hoon` file in `gen`:
256+
257+```
258+~your-urbit:dojo> *%/gen/foo/hoon '# hello'
259+```
260+
261+The last component of the path is expected to be the mark (or mime
262+type).
263+
264+#### `.` - Export to Unix
265+
266+Export a noun to Unix with `.`:
267+
268+```
269+~your-urbit:dojo> .foo/bar/baz (add 2 2)
270+```
271+
272+Which creates a file at `pier/.urb/put/foo/bar.baz`.
273+
274+This is very often used with `+solid`:
275+
276+```
277+~your-urbit:dojo> .urbit/pill +solid
278+```
279+
280+Which outputs a new `urbit.pill` to `pier/.urb/put/urbit.pill`
281+
282+### Sources
283+
284+#### `_` - Run a function
285+
286+Use `_` to run a gate (or function):
287+
288+Write an arbitrary function and pass data to it:
289+
290+```
291+~your-urbit:dojo> _|=([a=@] (mul a 3)) 3
292+9
293+```
294+
295+Use a function to get the status code from an http request:
296+
297+```
298+~your-urbit:dojo> _|=([p=@ud q=* r=*] p) +http://google.com
299+301
300+```
301+
302+#### `+` `-` - HTTP requests
303+
304+`+http[s]://example.com` - sends a GET request
305+
306+`+http[s]://example.com &json [%s 'hi']` - sends a POST request with the
307+JSON `"hi"` in the body.
308+
309+`-http[s]://example.com &json [%s 'hi']` - sends a PUT request with the
310+JSON `"hi"` in the body.
311+
312+Note that the first of these is a source while the last two are sinks.
313+
314+#### `+` - Generators
315+
316+Generators are simple Hoon scripts loaded from the filesystem. They live
317+in `gen/`.
318+
319+An example of a generator that is built into your urbit is `+code`. It produces
320+the code needed to log into your ship remotely.
321+
322+```
323+~your-urbit:dojo> +code
324+fintyr-haldet-fassev-solhex
325+```
326+
327+### Variables
328+
329+You can use `=` to set an environment variable in Dojo, but there are
330+a few reserved names that have special uses.
331+
332+#### `dir`
333+
334+Current working `%clay` desk and revision. Read / write.
335+
336+**Examples:**
337+
338+```
339+~your-urbit:dojo> =dir %/gen
340+~your-urbit:dojo> +ls %
341+404/hoon docs/ dojo/hoon lib/ listen/hoon md static/udon talk/ testing/udon tree/main/ unmark/ womb/
342+```
343+
344+#### `lib`
345+
346+Current set of libraries (`/lib`) in your environment. Can be set
347+with `/+`. Read / write.
348+
349+**Examples:**
350+
351+```
352+~your-urbit:dojo> /+ number-to-words
353+```
354+Now we can use arms from lib/number-to-words.hoon
355+```
356+~your-urbit:dojo> (to-words:eng-us:number-to-words 123.456)
357+```
358+
359+#### `sur`
360+
361+Current set of structures (`/sur`) in your environment. Can be set
362+with `/-`. Read / write.
363+
364+**Examples:**
365+
366+```
367+~your-urbit:dojo> /- sole
368+```
369+Now we can use arms in sur/sole.hoon.
370+```
371+~your-urbit:dojo> `sole-effect:sole`[%bel ~]
372+```
373+
374+#### `now`
375+
376+The current (128-bit `@da`) time. Read-only.
377+
378+**Example:**
379+
380+```
381+~your-urbit:dojo> now
382+~2016.3.21..21.10.57..429a
383+```
384+
385+#### `our`
386+
387+The current urbit ship. Read-only.
388+
389+**Example:**
390+
391+```
392+~your-urbit:dojo> our
393+~your-urbit
394+```
395+
396+#### `eny`
397+
398+512 bits of entropy. Read-only.
399+
400+**Example:**
401+
402+```
403+~your-urbit:dojo> eny
404+\/0vnt.d474o.gpahj.jcf3o.448fh.2lamb.82ljm.8ol8u.b02vi.mrvvp.b7et2.knb7m.l8he\/
405+ 8.8qb9s.drm36.77n9b.a0qst.30g03.l5lb5.nvsbc.v39tn
406+\/
407+```
408+
409+### Troubleshooting
410+
411+If you encounter `%dy-edit-busy` while entering commands, it is
412+because your Dojo is blocked on a timer or an HTTP request. Type backspace
413+and your Dojo will end the blocked command.
content/using/os/ship-troubleshooting.mdnew file+212
@@ -0,0 +1,212 @@
1++++
2+title = "Ship Troubleshooting"
3+weight = 8
4+template = "doc.html"
5+aliases = ["docs/using/ship-troubleshooting/"]
6++++
7+
8+Urbit is still in the development stage, so there's a chance that your ship won't start properly, or will stop working properly when you're running it. That's ok! This document is intended to help you in such an event.
9+
10+This page contains resolutions to many of the most commonly encountered issues.
11+If your issue is not covered here, please check out our [Troubleshooting Knowledgebase](https://github.com/urbit/support/wiki).
12+
13+## Table of Contents
14+
15+- [Best practices](#best-practices)
16+- [Operation issues](#operation-issues)
17+- [Connectivity issues](#connectivity-issues)
18+- [Booting issues](#booting-issues)
19+- [Crashing issues](#crashing-issues)
20+
21+## Best Practices {#best-practices}
22+
23+An ounce of prevention is worth a pound of cure, so let's first go over some best practices to keep your ship in working order.
24+
25+### Only boot with your keyfile once
26+
27+Once your ship is booted with your keyfile, you should never use that same keyfile again. If you do boot with the same keyfile twice, any other ship on the network that your ship has communicated with will not be able to talk to your ship.
28+
29+If you accidentally booted with the same keyfile twice, the only remedy is performing a [personal breach](#personal-breach), which is explained in the next section.
30+
31+### Do not delete your pier
32+
33+Urbit is stateful, meaning that it needs to hold onto all your data. If you delete your pier and start your ship again, you won't be able to talk to any ship you've talked to before. The only solution to this is performing a [personal breach](#personal-breach)
34+
35+### Keep track of the directory that you put your ship in
36+
37+When you first start your ship, you should make sure you put it a place where you can find it again and where it won't get accidentally deleted. Remember that you must perform `|mount %` in your ship's Dojo to make your ship visible as a directory in the Unix file system.
38+
39+### Keep up-to-date builds
40+
41+Check for latest Urbit version at https://github.com/urbit/urbit/releases. If you're behind, update using [this guide](@/getting-started.md#updating).
42+
43+### `|hi` your star to see if you're connected
44+
45+Find out who your star is by running `(sein:title our now our)` in the Dojo. Then, run `|hi ~star`, where `~star` is the star's name, and if things are working properly, you should get the message `hi ~star successful`. It could also be helpful to use `|hi` to check connectivity with `~zod` or another planet that you're in a Chat channel with.
46+
47+### Turn your ship off and on again
48+
49+Use `ctrl-d` to gracefully exit your ship, and then start it again. This can solve many issues.
50+
51+### Use the `|knob` command to customize your error messages
52+
53+Error messages can be by overwhelming, so the `|knob` command is intended to remedy this. It's used to silence errors that aren't important.
54+
55+The command takes two arguments, and comes in the form of `|knob %error-tag %level`.
56+
57+`%error-tag` is the name of the error in question. It's usually printed at the top of the stack trace, such as in `crud: %hole event failed` -- `%hole` here is an example of an error tag.
58+
59+`%level` determines how much you will see of errors with your chosen `%error-tag`. There are three levels:
60+
61+- `%hush`: no output.
62+- `%soft`: one line of output, just containing the error tag.
63+- `%loud`: full output.
64+
65+So for example, to silence all Ames packet-related errors, try `|knob %hole %hush`.
66+
67+### Perform a personal breach. {#personal-breach}
68+
69+A personal breach is when a ship tells all the other ships that have communicated with it to treat it as though the ship was just started for the first time again, since everyone on the network has forgotten about it.
70+
71+Personal breaches often fix connectivity issues, but should only be used as a
72+last resort. To find out how to perform a personal breach, check out our [Guide
73+to Breaches](../guide-to-breaches). Before taking such a drastic measure, try
74+other methods in this guide. You can also ask for help on
75+in the Help channel in the Urbit Community group at `~bitbet-bolbel/urbit-community` or, failing that, in the `#ship-starting-support`
76+channel in our [Discord server](https://discord.gg/n9xhMdz).
77+
78+### Reset `+code`
79+
80+You login to Landscape using the camel-case phrase obtained from dojo by
81+entering `+code`. For security reasons you may wish to change this code
82+regularly. You may do so by entering `|code %reset` into dojo. Doing this
83+will prevent [Bridge](@/docs/glossary/bridge.md) from being to derive your code,
84+meaning you will only be able to check it from dojo in the future.
85+
86+## Operation Issues {#operation-issues}
87+
88+### My urbit is very slow
89+
90+Run `|wash-gall`. This clears caches in Gall, and may result in steep performance improvements.
91+
92+### My urbit is frozen
93+
94+Sometimes this happens if you're processing a very large event, or if you're in an infinite loop, or for a variety of other reasons.
95+
96+Before doing anything, try waiting for a minute: an event might finish processing. If it doesn't clear up, then use the Unix kill-command, `ctrl-z`, to end your ship's process. Then restart your ship.
97+
98+### When I try to type into the Dojo, it prints `dy-noprompt`
99+
100+This happens when your Dojo is waiting on a request, such as an HTTP request. You can fix it simply by typing `backspace` or (`delete` on Mac).
101+
102+### My ship doesn't recognize file changes that I make in my pier
103+
104+Since version `0.8.0`, changes no longer automatically sync between the Unix side (your pier) and your ship. To sync your file changes, you must run `|commit %desk` in your Dojo, where `%desk` is the desk you'd like to sync.
105+
106+## Connectivity Issues {#connectivity-issues}
107+
108+### I can't communicate with anyone
109+
110+You may have booted a ship with your keyfile twice in the same era. To fix this, you must perform a [personal breach](#personal-breach).
111+
112+### I don't have the latest OTA
113+
114+You can check what build your ship is on by entering `+trouble` into dojo and
115+reading the `%base` hash. If this does not match the latest hash published in
116+the `urbit-dev` mailing list, you are behind.
117+
118+Your sponsor may just be lagging behind, so sometimes this will resolve on its
119+own with patience. Otherwise, try the procedure outlined [here](https://github.com/urbit/support/wiki/Missing-OTA).
120+
121+### I keep getting an `ames` error stack-trace
122+
123+You may see a message like this one: `/~zod/home/~2019.7.22..18.55.46..83a3/sys/vane/ames:<[line column].[line column]>`. This is a clay path to a Hoon file, pointing to the line and column where an expression crashed. This kind of error might be accompanied by a `crud` message.
124+
125+This means that another ship is sending invalid packets to you. This could be because one of the ships has not updated the other ship's "life number", which is the number that starts at one and increments every time that ship performs a personal breach.
126+
127+This can happen if they have the wrong keys of yours, or if you have the wrong keys of theirs. You can figure out who has the wrong keys by running this scry command in your dojo: `.^(* %j /=life=/shipname)`, where shipname is the other ship's name. Save that information. Then, go to the [Azimuth contract on Etherscan](https://etherscan.io/address/0x223c067f8cf28ae173ee5cafea60ca44c335fecb#readContract), scroll down to `32. points`, and put in the hexadecimal representation of the other ship's `@p`. You can find the hexadecimal representation by running ...
128+
129+```
130+`@ux`~sampel-palnet
131+```
132+
133+... in the Dojo, where `~sampel-palnet` is the other ship's name. Then, compare it to the scry information that you saved. If that information matches up, it means that the other ship is the problem. If it **doesn't** match up, your ship has wrong information about the other ship. If you have such wrong information, you can fix this by running:
134+
135+```
136+:azimuth-tracker|listen ~ %app %azimuth-tracker
137+```
138+
139+The last line above syncs from an Ethereum node for _all_ ships on the network. If you only wanted to sync with certain ships, run:
140+
141+```
142+:azimuth-tracker|listen ~[~sampel-palnet ~zod ~marzod] %app %azimuth-tracker
143+```
144+
145+`~sampel-palnet ~zod ~marzod` are example ship-names; replace these with any number of desired ships-names.
146+
147+The above commands work if you have the wrong keys of other ships. If other ships have wrong keys of _yours_, you need to somehow ask them to to run such a command.
148+
149+### I can talk to some ships, but I can't talk to my sponsor and some other ships
150+
151+This is the result of deleting your pier and starting your ship again. To fix this, you must perform a [personal breach](#personal-breach).
152+
153+## Booting Issues {#booting-issues}
154+
155+### My ship booted for the first time, but it turned into a comet instead of my planet or star
156+
157+You may have used the wrong arguments when booting your ship for the first time. Delete this comet and try again.
158+
159+### My development ship ("fakezod") gets a `boot: malformed` failure
160+
161+This means that you gave your development ship an invalid `@p`. So, you will get this error if you write, for example, `urbit -F zodzod` instead of `urbit -F zod`.
162+
163+## Crashing Issues {#crashing-issues}
164+
165+### I got a `bail` error and my ship crashed
166+
167+Try bringing it back up; it will often start working just fine again.
168+
169+However, if you get a `bail` error again, you should perform a [personal breach](#personal-breach).
170+
171+#### Making a GitHub issue out of your `bail`
172+
173+You can get help with you problem by creating an issue at [github.com/urbit/urbit](https://github.com/urbit/urbit/issues). But to make a good issue, you need to include some information.
174+
175+When your urbit crashes with a `bail`, you'll probably get a core dump, which is a file that contains the program state of your urbit when it crashed. On Mac, core dumps can be found in `/cores`. On Linux, cores can often be found in `/var/crash`, or the home directory.
176+
177+Navigate to the folder containing your core dumps. Find the most recent core dump by looking at the dates after you run `ls -l`. Then `lldb -c <corename>`. Once that loads, you'll be at an `(lldb)` prompt; type `bt` at this prompt. This will create a stack trace that looks like this:
178+
179+```
180+(lldb) bt
181+* thread #1, stop reason = signal SIGSTOP
182+ * frame #0: 0x000000010583d871 urbit`_box_free + 17
183+ frame #1: 0x0000000105845ee6 urbit`u3j_boot + 182
184+ frame #2: 0x000000010584d1f9 urbit`u3m_boot + 89
185+ frame #3: 0x000000010583d15d urbit`main + 2765
186+ frame #4: 0x00007fff75cb83d5 libdyld.dylib`start + 1
187+(lldb)
188+```
189+
190+Copy this stack trace and include it in your GitHub issue.
191+
192+### My ship crashed with a `bail: meme` error.
193+
194+This means that your ship ran out of memory.
195+
196+1. Make sure you are running the latest binary if you are not already on it.
197+
198+2. Restart your ship. If you don't crash again, everything may be fine.
199+
200+3. Try the procedure outlined [here](https://github.com/urbit/support/wiki/ship-exits-with-a-bail:-meme-error).
201+
202+4. If you **do** crash again, then you should perform a [personal breach](#personal-breach).
203+
204+### My ship crashed with a `bail: oops` error
205+
206+Restart your ship. These issues often just go away on their own. If this error repeats after restart two or more times, post the messages in an issue at [github.com/urbit/urbit](https://github.com/urbit/urbit/issues).
207+
208+This same error might also appear with a message like `Assertion '0'`.
209+
210+### My ship crashed with an `pier: work error` error
211+
212+This means that the Urbit worker process has shut down for one reason or another. Just restart your ship; this is not a notable or reportable error.
content/using/operations/stars-and-galaxies.md → content/using/os/stars-and-galaxies.mdrenamed+5−5
@@ -1,12 +1,12 @@
11+++
22title = "Star and Galaxy Operations"
33description = "Additional information and suggested ettiquette for Star and Galaxy owners."
4−weight = 3
4+weight = 4
55aliases = ["/docs/using/operating-a-star/"]
6−template = "page_indiced.html"
6+template = "doc.html"
77+++
88
9−To boot your galaxy or star, follow our [installation instructions](@/using/install.md).
9+To boot your galaxy or star, follow our [installation instructions](@/getting-started.md).
1010
1111### Hosting your star
1212
@@ -14,7 +14,7 @@ If you plan to distribute planets in any capacity, we ask that you keep your sta
1414running. If you fail to do so, those planets will become orphans that are unable
1515to communicate with the network unless they transfer to a new star.
1616
17−See our [cloud hosting instructions](@/using/operations/hosting.md) for
17+See our [cloud hosting instructions](@/using/running/hosting.md) for
1818instructions on settings up a Digital Ocean droplet.
1919
2020### Distributing planets
@@ -27,7 +27,7 @@ By default, your star accepts software updates from its galaxy and routes them t
2727
2828#### Breaches
2929
30−To ensure new planets can connect to your ship, users are expected to participate in network-wide breaches by [updating to the latest Urbit version](@/using/install.md), deleting (or archiving) your pier, and then booting your ship using the new binary. If you don’t participate, you won’t be able to communicate with anyone on the network who has updated to the new era.
30+To ensure new planets can connect to your ship, users are expected to participate in network-wide breaches by [updating to the latest Urbit version](@/getting-started.md), deleting (or archiving) your pier, and then booting your ship using the new binary. If you don’t participate, you won’t be able to communicate with anyone on the network who has updated to the new era.
3131
3232Network-wide breaches are distinct from personal breaches, wherein an individual ship cycles its personal network keys using Bridge, and then follows the same steps outlined above.
3333
content/using/running/_index.mdnew file+16
@@ -0,0 +1,16 @@
1++++
2+title = "Running Urbit"
3+sort_by = "weight"
4+description = "How to run Urbit in various environments."
5+template = "sections/docs/chapters.html"
6+weight = 30
7++++
8+
9+Urbit can be run in a variety of contexts. Our [Getting Started
10+Guide](@/getting-started.md) covers how to run an Urbit locally on your
11+computer; this section covers alternative ways of running Urbit.
12+
13+### [Cloud Hosting](@/using/running/hosting.md)
14+
15+This guide covers the provisioning and setup of a cloud server in Digital Ocean
16+running your Urbit. This enables your Urbit to be accessed from anywhere.
content/using/operations/hosting.md → content/using/running/hosting.mdrenamed+5−6
@@ -1,13 +1,12 @@
11+++
2−title = "Hosting Your Ship In The Cloud"
2+title = "Cloud Hosting"
33description = "How to host your ship in the cloud so you can access it from any device."
4−template = "page_indiced.html"
4+template = "doc.html"
55weight = 2
66[extra]
77hidetitle = "true"
88+++
99
10−## Hosting Your Ship In The Cloud
1110The goal of this guide is to have clear and easy to follow best practices for deploying an Urbit node to a server you control in the cloud. Deploying in the cloud allows you to access your Urbit from any device.
1211
1312Most Urbit users start out running their ship locally on one machine in order to play with it, but this means when your machine is offline your Urbit node is offline too (and can't get updates). You can also only access your Urbit from that one machine.
@@ -104,8 +103,8 @@ Continuing to follow the DO docs we're going to configure the ufw firewall.
104103 ```
105104
106105## Installing Urbit
107−Finally we're ready to install Urbit on your very own server. This part is actually pretty easy, if you haven't installed Urbit locally then the instructions are the exact same as the ones in the Urbit [install doc](@/using/install.md). If you have a local ship already, we're going to install Urbit on the server and then send your local ship up.
108− - **WARN**: Since Urbit is p2p you don't want to ever run two copies of your ship simultaneously. This is because other nodes that interact with each of your copies will be confused by which one is the most up to date. If you end up accidentally doing this you'll have to do a 'personal breach' described in the [guide to breaches](@/docs/tutorials/guide-to-breaches.md) to fix things.
106+Finally we're ready to install Urbit on your very own server. This part is actually pretty easy, if you haven't installed Urbit locally then the instructions are the exact same as the ones in the Urbit [install doc](@/getting-started.md). If you have a local ship already, we're going to install Urbit on the server and then send your local ship up.
107+ - **WARN**: Since Urbit is p2p you don't want to ever run two copies of your ship simultaneously. This is because other nodes that interact with each of your copies will be confused by which one is the most up to date. If you end up accidentally doing this you'll have to do a 'personal breach' described in the [guide to breaches](@/using/id/guide-to-breaches.md) to fix things.
109108 - The first thing you're going to want to do is shut down your local ship, either with control-d or `|exit` in dojo.
110109 - Next we're going to install Urbit on the server and permit it to bind to the web ports:
111110 ```
@@ -167,7 +166,7 @@ On iOS you can save a website to your homescreen as an icon. If you do this for
167166 - [Digital Ocean Nginx Installation][DO Nginx Install]
168167 - [Digital Ocean Nginx Config][DO Nginx Config]
169168 - [Digital Ocean SSL Cert Setup][DO SSL Config]
170− - [Urbit Install Docs](@/using/install.md)
169+ - [Urbit Install Docs](@/getting-started.md)
171170 - [Urbit Basic Cloud Install][Urbit Basic Cloud Install]
172171
173172 [Gandi]: https://www.gandi.net/
sass/_main.scss+15−14
@@ -215,20 +215,21 @@ body.essay {
215215 img {
216216 display: block;
217217 }
218− div.footnote-definition {
219− &[id="1"] {
220− margin-top: 4rem;
221− padding-top: 2rem;
222− border-top: 1px solid black;
223− }
224− &:not([id="1"]) {
225− margin: 1rem 0;
226− }
227− p {
228− display: inline;
229− font-size: smaller;
230− }
231− }
218+}
219+
220+div.footnote-definition {
221+ &[id="0"] {
222+ margin-top: 4rem;
223+ padding-top: 2rem;
224+ border-top: 1px solid black;
225+ }
226+ &:not([id="0"]) {
227+ margin: 1rem 0;
228+ }
229+ p {
230+ display: inline;
231+ font-size: smaller;
232+ }
232233}
233234
234235// components
static/_redirects+163−13
@@ -1,13 +1,163 @@
1−/docs/introduction /docs 301!
2−/docs/getting-started /using/install 301!
3−/docs/getting-started/azimuth /understanding-urbit/urbit-id 301!
4−/landscape /using/develop 301!
5−/docs/getting-started/using-a-star /using/operations/stars-and-galaxies/ 301!
6−/docs/bridge /using/operations/using-bridge/ 301!
7−/docs/pki /docs/concepts/azimuth/ 301!
8−/docs/arvo/internals/ /docs/tutorials/arvo/ 301!
9−/primer /understanding-urbit/ 301!
10−/install /using/install 301!
11−/install/mac/latest http://github.com/urbit/urbit/releases/latest/download/darwin.tgz
12−/install/linux64/latest http://github.com/urbit/urbit/releases/latest/download/linux64.tgz
13−/breach /reset 301!
1+/primer /understanding-urbit/ 301!
2+/breach /reset 301!
3+/landscape /docs/development/develop 301!
4+/install /getting-started 301!
5+/install/mac/latest http://github.com/urbit/urbit/releases/latest/download/darwin.tgz
6+/install/linux64/latest http://github.com/urbit/urbit/releases/latest/download/linux64.tgz
7+/using/install /getting-started 301!
8+/using/planet /getting-started/planet 301!
9+/using/develop /docs/development/develop 301!
10+/using/integrating-api /docs/arvo/eyre/using-eyre 301!
11+/using/operations /using 301!
12+/using/operations/bridge /using/id/using-bridge 301!
13+/using/operations/hosting /using/running/hosting 301!
14+/using/operations/using-your-ship /using/os/getting-started 301!
15+/using/operations/stars-and-galaxies /using/os/stars-and-galaxies 301!
16+/using/operations/bridge-troubleshooting /using/os/bridge-troubleshooting 301!
17+/docs/getting-started/using-a-star /using/os/stars-and-galaxies/ 301!
18+/docs/bridge /using/id/using-bridge/ 301!
19+/docs/pki /docs/system-overview/azimuth 301!
20+/docs/getting-started/azimuth /understanding-urbit/urbit-id 301!
21+/docs/arvo/internals/ /docs/arvo/overview/ 301!
22+/docs/reference/vane-apis/airlock /docs/arvo/eyre/using-eyre 301!
23+/docs/introduction /docs 301!
24+/docs/getting-started /getting-started 301!
25+/docs/tutorials/concepts/technical-overview /docs/system-overview 301!
26+/docs/tutorials/ship-troubleshooting /using/os/ship-troubleshooting 301!
27+/docs/tutorials/creating-an-invite-pool /using/id/creating-an-invite-pool 301!
28+/docs/tutorials/guide-to-breaches/ /using/id/guide-to-breaches 301!
29+/docs/tutorials/arvo/arvo /docs/arvo/overview 301!
30+/docs/tutorials/arvo/ames /docs/arvo/ames/ames 301!
31+/docs/reference/vane-apis/ames /docs/arvo/ames/ames-api 301!
32+/docs/tutorials/arvo/behn /docs/arvo/behn/behn 301!
33+/docs/reference/vane-apis/behn /docs/arvo/behn/behn-api 301!
34+/docs/tutorials/arvo/clay /docs/arvo/clay/clay 301!
35+/docs/tutorials/arvo/dill /docs/arvo/dill/dill 301!
36+/docs/reference/vane-apis/dill /docs/arvo/dill/dill-api 301!
37+/docs/tutorials/arvo/eyre /docs/arvo/eyre/eyre 301!
38+/docs/tutorials/arvo/gall /docs/arvo/gall/gall 301!
39+/docs/reference/vane-apis/gall /docs/arvo/gall/gall-api 301!
40+/docs/reference/vane-apis/iris /docs/arvo/iris/iris-api 301!
41+/docs/reference/vane-apis/jael /docs/arvo/jael/jael-api 301!
42+/docs/tutorials/arvo/move-trace /docs/arvo/tutorials/move-trace 301!
43+/docs/tutorials/advanced-azimuth-tools /docs/azimuth/advanced-azimuth-tools 301!
44+/docs/tutorials/hoon/hoon-school/aqua /docs/hoon/guides/aqua 301!
45+/docs/tutorials/hoon/cli-tutorial /docs/hoon/guides/cli-tutorial 301!
46+/docs/tutorials/hoon/parsing /docs/hoon/guides/parsing 301!
47+/docs/tutorials/hoon/hoon-school/ackermann /docs/hoon/hoon-school/ackermann 301!
48+/docs/tutorials/hoon/hoon-school/arms-and-cores /docs/hoon/hoon-school/arms-and-cores 301!
49+/docs/tutorials/hoon/hoon-school/atoms-auras-and-simple-cell-types /docs/hoon/hoon-school/atoms-auras-and-simple-cell-types 301!
50+/docs/tutorials/hoon/hoon-school/bank-account /docs/hoon/hoon-school/bank-account 301!
51+/docs/tutorials/hoon/hoon-school/behn /docs/hoon/hoon-school/behn 301!
52+/docs/tutorials/hoon/hoon-school/caesar /docs/hoon/hoon-school/caesar 301!
53+/docs/tutorials/hoon/hoon-school/conditionals /docs/hoon/hoon-school/conditionals 301!
54+/docs/tutorials/hoon/hoon-school/doors /docs/hoon/hoon-school/doors 301!
55+/docs/tutorials/hoon/hoon-school/egg-timer /docs/hoon/hoon-school/egg-timer 301!
56+/docs/tutorials/hoon/hoon-school/fibonacci /docs/hoon/hoon-school/fibonacci 301!
57+/docs/tutorials/hoon/hoon-school/gall /docs/hoon/hoon-school/gall 301!
58+/docs/tutorials/hoon/hoon-school/gates /docs/hoon/hoon-school/gates 301!
59+/docs/tutorials/hoon/hoon-school/generators /docs/hoon/hoon-school/generators 301!
60+/docs/tutorials/hoon/hoon-school/hoon-syntax /docs/hoon/hoon-school/hoon-syntax 301!
61+/docs/tutorials/hoon/hoon-school/iron-polymorphism /docs/hoon/hoon-school/iron-polymorphism 301!
62+/docs/tutorials/hoon/hoon-school/lead-polymorphism /docs/hoon/hoon-school/lead-polymorphism 301!
63+/docs/tutorials/hoon/hoon-school/libraries /docs/hoon/hoon-school/libraries 301!
64+/docs/tutorials/hoon/hoon-school/lists /docs/hoon/hoon-school/lists 301!
65+/docs/tutorials/hoon/hoon-school/list-of-numbers /docs/hoon/hoon-school/list-of-numbers 301!
66+/docs/tutorials/hoon/hoon-school/molds /docs/hoon/hoon-school/molds 301!
67+/docs/tutorials/hoon/hoon-school/nouns /docs/hoon/hoon-school/nouns 301!
68+/docs/tutorials/hoon/hoon-school/recursion /docs/hoon/hoon-school/recursion 301!
69+/docs/tutorials/hoon/hoon-school/setup /docs/hoon/hoon-school/setup 301!
70+/docs/tutorials/hoon/hoon-school/structures-and-complex-types /docs/hoon/hoon-school/structures-and-complex-types 301!
71+/docs/tutorials/hoon/hoon-school/the-subject-and-its-legs /docs/hoon/hoon-school/the-subject-and-its-legs 301!
72+/docs/tutorials/hoon/hoon-school/trees-sets-and-maps /docs/hoon/hoon-school/trees-sets-and-maps 301!
73+/docs/tutorials/hoon/hoon-school/type-checking-and-type-inference /docs/hoon/hoon-school/type-checking-and-type-inference 301!
74+/docs/tutorials/hoon/hoon-school/type-polymorphism /docs/hoon/hoon-school/type-polymorphism 301!
75+/docs/tutorials/hoon/hoon-school/_index /docs/hoon/hoon-school/_index 301!
76+/docs/reference/hoon-expressions/advanced /docs/hoon/reference/advanced 301!
77+/docs/reference/hoon-expressions/basic /docs/hoon/reference/basic 301!
78+/docs/reference/cheat-sheet /docs/hoon/reference/cheat-sheet 301!
79+/docs/tutorials/hoon/hoon-errors /docs/hoon/reference/hoon-errors 301!
80+/docs/reference/hoon-expressions/irregular /docs/hoon/reference/irregular 301!
81+/docs/tutorials/hoon/hoon-school/style /docs/hoon/reference/style 301!
82+/docs/reference/hoon-expressions/limb/limb /docs/hoon/reference/limbs/limb 301!
83+/docs/reference/hoon-expressions/rune/bar /docs/hoon/reference/rune/bar 301!
84+/docs/reference/hoon-expressions/rune/buc /docs/hoon/reference/rune/buc 301!
85+/docs/reference/hoon-expressions/rune/cen /docs/hoon/reference/rune/cen 301!
86+/docs/reference/hoon-expressions/rune/col /docs/hoon/reference/rune/col 301!
87+/docs/reference/hoon-expressions/rune/constants /docs/hoon/reference/rune/constants 301!
88+/docs/reference/hoon-expressions/rune/dot /docs/hoon/reference/rune/dot 301!
89+/docs/reference/hoon-expressions/rune/ket /docs/hoon/reference/rune/ket 301!
90+/docs/reference/hoon-expressions/rune/lus /docs/hoon/reference/rune/lus 301!
91+/docs/reference/hoon-expressions/rune/mic /docs/hoon/reference/rune/mic 301!
92+/docs/reference/hoon-expressions/rune/sig /docs/hoon/reference/rune/sig 301!
93+/docs/reference/hoon-expressions/rune/terminators /docs/hoon/reference/rune/terminators 301!
94+/docs/reference/hoon-expressions/rune/tis /docs/hoon/reference/rune/tis 301!
95+/docs/reference/hoon-expressions/rune/wut /docs/hoon/reference/rune/wut 301!
96+/docs/reference/hoon-expressions/rune/zap /docs/hoon/reference/rune/zap 301!
97+/docs/reference/hoon-expressions/rune/_index /docs/hoon/reference/rune/_index 301!
98+/docs/reference/library/1a /docs/hoon/reference/stdlib/1a 301!
99+/docs/reference/library/1b /docs/hoon/reference/stdlib/1b 301!
100+/docs/reference/library/1c /docs/hoon/reference/stdlib/1c 301!
101+/docs/reference/library/2a /docs/hoon/reference/stdlib/2a 301!
102+/docs/reference/library/2b /docs/hoon/reference/stdlib/2b 301!
103+/docs/reference/library/2c /docs/hoon/reference/stdlib/2c 301!
104+/docs/reference/library/2d /docs/hoon/reference/stdlib/2d 301!
105+/docs/reference/library/2e /docs/hoon/reference/stdlib/2e 301!
106+/docs/reference/library/2f /docs/hoon/reference/stdlib/2f 301!
107+/docs/reference/library/2g /docs/hoon/reference/stdlib/2g 301!
108+/docs/reference/library/2h /docs/hoon/reference/stdlib/2h 301!
109+/docs/reference/library/2i /docs/hoon/reference/stdlib/2i 301!
110+/docs/reference/library/2j /docs/hoon/reference/stdlib/2j 301!
111+/docs/reference/library/2k /docs/hoon/reference/stdlib/2k 301!
112+/docs/reference/library/2l /docs/hoon/reference/stdlib/2l 301!
113+/docs/reference/library/2m /docs/hoon/reference/stdlib/2m 301!
114+/docs/reference/library/2n /docs/hoon/reference/stdlib/2n 301!
115+/docs/reference/library/2o /docs/hoon/reference/stdlib/2o 301!
116+/docs/reference/library/2p /docs/hoon/reference/stdlib/2p 301!
117+/docs/reference/library/2q /docs/hoon/reference/stdlib/2q 301!
118+/docs/reference/library/3a /docs/hoon/reference/stdlib/3a 301!
119+/docs/reference/library/3b /docs/hoon/reference/stdlib/3b 301!
120+/docs/reference/library/3c /docs/hoon/reference/stdlib/3c 301!
121+/docs/reference/library/3d /docs/hoon/reference/stdlib/3d 301!
122+/docs/reference/library/3e /docs/hoon/reference/stdlib/3e 301!
123+/docs/reference/library/3f /docs/hoon/reference/stdlib/3f 301!
124+/docs/reference/library/3g /docs/hoon/reference/stdlib/3g 301!
125+/docs/reference/library/4a /docs/hoon/reference/stdlib/4a 301!
126+/docs/reference/library/4b /docs/hoon/reference/stdlib/4b 301!
127+/docs/reference/library/4c /docs/hoon/reference/stdlib/4c 301!
128+/docs/reference/library/4d /docs/hoon/reference/stdlib/4d 301!
129+/docs/reference/library/4e /docs/hoon/reference/stdlib/4e 301!
130+/docs/reference/library/4f /docs/hoon/reference/stdlib/4f 301!
131+/docs/reference/library/4g /docs/hoon/reference/stdlib/4g 301!
132+/docs/reference/library/4h /docs/hoon/reference/stdlib/4h 301!
133+/docs/reference/library/4i /docs/hoon/reference/stdlib/4i 301!
134+/docs/reference/library/4j /docs/hoon/reference/stdlib/4j 301!
135+/docs/reference/library/4k /docs/hoon/reference/stdlib/4k 301!
136+/docs/reference/library/4l /docs/hoon/reference/stdlib/4l 301!
137+/docs/reference/library/4m /docs/hoon/reference/stdlib/4m 301!
138+/docs/reference/library/4n /docs/hoon/reference/stdlib/4n 301!
139+/docs/reference/library/4o /docs/hoon/reference/stdlib/4o 301!
140+/docs/reference/library/5a /docs/hoon/reference/stdlib/5a 301!
141+/docs/reference/library/5b /docs/hoon/reference/stdlib/5b 301!
142+/docs/reference/library/5c /docs/hoon/reference/stdlib/5c 301!
143+/docs/reference/library/5d /docs/hoon/reference/stdlib/5d 301!
144+/docs/reference/library/5e /docs/hoon/reference/stdlib/5e 301!
145+/docs/reference/library/5f /docs/hoon/reference/stdlib/5f 301!
146+/docs/reference/library/5g /docs/hoon/reference/stdlib/5g 301!
147+/docs/reference/library/table-of-contents /docs/hoon/reference/stdlib/table-of-contents 301!
148+/docs/reference/library/_index /docs/hoon/reference/stdlib/_index 301!
149+/docs/tutorials/concepts/arch /docs/landscape/overview 301!
150+/docs/tutorials/hoon/graph /docs/landscape/reference/graph-store 301!
151+/docs/tutorials/nock/definition /docs/nock/definition 301!
152+/docs/tutorials/nock/example /docs/nock/example 301!
153+/docs/tutorials/nock/explanation /docs/nock/explanation 301!
154+/docs/tutorials/nock/implementations /docs/nock/implementations 301!
155+/docs/tutorials/nock/_index /docs/nock/_index 301!
156+/docs/tutorials/vere/api /docs/vere/api 301!
157+/docs/tutorials/vere/c /docs/vere/c 301!
158+/docs/tutorials/vere/jetting /docs/vere/jetting 301!
159+/docs/tutorials/vere/nouns /docs/vere/nouns 301!
160+/docs/tutorials/vere/runtime /docs/vere/runtime 301!
161+/docs/tutorials/vere/_index /docs/vere/_index 301!
162+/docs/tutorials/concepts/azimuth /docs/azimuth/azimuth 301!
163+/docs/tutorials/advanced-azimuth-tools /docs/azimuth/advanced-azimuth-tools 301!
templates/index.html+2−2
@@ -38,8 +38,8 @@
3838<section class="full lh-copy c2-7-md c3-7-lg mb6">
3939 <ul class="list mt0">
4040 <li class="mt0">
41− <a class="b--blue2 blue2 bb" href="/using/install/">Join the Network</a><br />
42− Learn more about how to join the Urbit network.
41+ <a class="b--blue2 blue2 bb" href="/getting-started/">Get Started</a><br />
42+ Learn more about how to run Urbit and join the network.
4343 </li>
4444 <li class="mt3">
4545 <a class="b--green2 green2 bb" href="/docs/">Documentation</a><br />
templates/list.html+1
@@ -21,6 +21,7 @@
2121 {{ section.title }}
2222 </a>
2323 {% include "partials/navigation-search.html" %}
24+ <a href="using/install/">Install / Get Started -></a>
2425</nav>
2526<!-- content -->
2627<article class="mt4 mb4 c1-13 c4-12-lg measure-wide">
templates/page/getting_started.htmlnew file+68
@@ -0,0 +1,68 @@
1+{% extends "base.html" %}
2+<!-- JAL(2021.3.12) This page is a hack in order to get the title set properly in the /getting-started/planet route because I'm a Zola noob. -->
3+{% block bodyclasses %}class="page-indiced"{% endblock bodyclasses %}
4+
5+{% block title %}
6+ <meta name="og:title" content="{{ page.title }} - {{ config.title }}">
7+ <title>{{ page.title }} - {{ config.title }}</title>
8+{% endblock title %}
9+
10+{% block description %}
11+ {% if page.description %}
12+ <meta name="og:description" content="{{ page.description }}">
13+ <meta name="description" content="{{ page.description }}">
14+ {% else %}
15+ <meta name="og:description" content="{{ config.description }}">
16+ <meta name="description" content="{{ config.description }}">
17+ {% endif %}
18+{% endblock description %}
19+
20+{% block image %}
21+ {% if page.extra.image %}
22+ <meta name="twitter:image" content="{{ page.extra.image }}">
23+ {% else %}
24+ <meta name="twitter:image" content="https://media.urbit.org/logo/urbit-logo-card.png">
25+ {% endif %}
26+{% endblock image %}
27+
28+{% block content %}
29+
30+<!-- header -->
31+<!-- content -->
32+<nav class="mt4 fixed-xl full fourth-1-lg page-indiced mb3 mb0-m mb0-l mb0-xl">
33+ <a class="gray3" href="/">Urbit</a>
34+ <span class="gray3"> / </span>
35+ <a href="/{{ page.components[0] }}{% if page.components[2] %}/{{ page.components[1] }}{% endif %}">
36+ Getting Started
37+ </a>
38+
39+ {% include "partials/navigation-search.html" %}
40+
41+{% for h2 in toc %}
42+{% if h2.children %}
43+<details class="dn mw5-xl mt2 mw5-l db-xl page-indiced f6"><summary>{{ h2.title }}</summary>
44+ {% for h3 in h2.children %}
45+ <li class="ml3 mv1"><a href="{{h3.permalink | safe}}">{{h3.title}}</a></li>
46+ {% endfor %}
47+</details>
48+{% else %}
49+ <li class="dn mw5-xl mw5-l db-xl page-indiced mv2"><a class="f6" href="{{h2.permalink}}">{{h2.title}}</a></li>
50+{% endif %}
51+{% endfor %}
52+</nav>
53+ <article class="mt4 mb6 c1-13 c4-12-lg measure-wide">
54+ {% if page.extra.hidetitle %} {% else %}<h1>{{ page.title }}</h1>{% endif %}
55+ {% if page.extra.author %}
56+ <span class="mt2 dib" rel="author"> {{ page.extra.author }} </span>
57+ {% if page.extra.ship %}
58+ <address class="mono">{{ page.extra.ship }}</address>
59+ {% endif %}
60+ {% if page.date %}
61+ <time class="mono db mv1 gray4 f5">{{page.date | date(format="~%Y.%-m.%-d") }}</time>
62+ {% endif %}
63+ {% endif %}
64+ <!-- body -->
65+ {{ page.content | safe }}
66+ {% include "partials/pagination.html" %}
67+ </article>
68+{% endblock content %}
templates/page_indiced.html+2−1
@@ -44,7 +44,8 @@
4444 <a class="gray3" href="/">Urbit</a>
4545 <span class="gray3"> / </span>
4646 <a href="/{{ page.components[0] }}{% if page.components[2] %}/{{ page.components[1] }}{% endif %}">
47− {% if page.components[2] %}{{ page.components[1] | capitalize }}
47+ {% if page.components[2] %}
48+ {{ page.components[1] | capitalize }}
4849 {% else %}
4950 {{ page.components[0] | capitalize }}
5051 {% endif %}
templates/partials/footer.html+4−4
@@ -18,9 +18,9 @@
1818
1919 <nav class="c7-10-md c7-9-lg half-1 mt5">
2020 <h3 class="mt0 mb3 pt0 pb0">Using + Contributing</h3>
21− <li class="mt2 f6"><a href="/using/install">Install + Setup</a></li>
22− <li class="mt2 f6"><a href="/using/develop">Developer's Guide</a></li>
23− <li class="mt2 f6"><a href="/using/operations">Operations Manual</a></li>
21+ <li class="mt2 f6"><a href="/getting-started">Getting Started</a></li>
22+ <li class="mt2 f6"><a href="/using">Operations Manual</a></li>
23+ <li class="mt2 f6"><a href="/docs/development/develop">Developer's Guide</a></li>
2424 </nav>
2525 <nav class="c10-13-md c9-11-lg half-2 mt5">
2626 <h3 class="mt0 mb3 pt0 pb0">Community</h3>
@@ -34,7 +34,7 @@
3434 <section class="full-bleed full grid12">
3535 <nav class="c1-4-md c3-5-lg half-1 mt4 mb5">
3636 <h3 class="mt0 mb3 pt0 pb0">Developers</h3>
37− <li class="mt2 f6"><a href="/docs">Documentation</a></li>
37+ <li class="mt2 f6"><a href="/docs">Developer Documentation</a></li>
3838 <li class="mt2 f6"><a href="https://grants.urbit.org">Developer Grants</a></li>
3939 <li class="mt2 f6"><a href="/bounties">Security Bounties</a></li>
4040 </nav>
templates/partials/navigation-docs.html+61−10
@@ -1,6 +1,7 @@
11<!-- First nav is desktop-specific. Second nav is dropdown version for mobile. -->
22
33{% set sectionTitle = "urbit.org" %}
4+{% set directory = "docs" %}
45{% if page %}
56 {% if "docs" in page.components %}
67 {% set sectionTitle = "Docs" %}
@@ -11,6 +12,9 @@
1112 {% if "blog" in page.components %}
1213 {% set sectionTitle = "Blog" %}
1314 {% endif %}
15+ {% if "using" in page.components %}
16+ {% set directory = "using" %}
17+ {% endif %}
1418{% endif %}
1519
1620{% if section %}
@@ -23,30 +27,77 @@
2327 {% if "blog" in section.components %}
2428 {% set sectionTitle = "Blog" %}
2529 {% endif %}
30+ {% if "using" in section.components %}
31+ {% set directory = "using" %}
32+ {% endif %}
33+
2634{% endif %}
2735
2836{% block content %}
37+{% if section %}
38+ {%- set base = section.components[0] -%}
39+{% elif page %}
40+ {%- set base = page.components[0] -%}
41+{% endif %}
2942<nav class="bg-gray5 dn db-xl pt4 full-left no-break docs pr4">
3043 <a class="gray3" href="{{config.base_url}}">Urbit</a>
3144 <span class="gray3"> / </span>
45+ {% if base == "docs" %}
3246 <a href="{{config.base_url}}/docs/">
33− Documentation
47+ Development Docs
3448 </a>
35−<button id="js-search-window-toggle" class="pointer pa0 pv3 dn db-m db-l db-xl bw-0 relative" type="button"
49+ {% elif base == "using" %}
50+ <a href="{{config.base_url}}/using/">
51+ Usage Docs
52+ </a>
53+ {% endif %}
54+ <button id="js-search-window-toggle" class="pointer pa0 pv3 dn db-m db-l db-xl bw-0 relative" type="button"
3655 style="outline:none">
37− <span class="dib pv1 v-mid gray3">Search {{sectionTitle}}</span>
56+ <span class="dib pv1 v-mid gray3">Search Docs</span>
3857 <span class="ml1 pa1 dib v-mid ba br1 b--gray3 gray3 f7" id="keyhint">Ctrl + /</span>
3958</button>
4059 <ul class="lh-copy">
41− <li class="ml2 mt1"><a href="/using/install">Install -> </a></li>
42− <li class="ml2 mt1"><a href="/using/operations/">Operations Manual -></a></li>
43− <li class="ml2 mt1 mb4"><a href="/using/develop/">Developer's Guide -></a></li>
60+ <li class="ml2 mt1"><a href="/getting-started">Install / Get Started -> </a></li>
61+ <li class="ml2 mt1">
62+ <a href="/using/"
63+ {% if base == "using" %}
64+ class="fw6"
65+ {% endif %}
66+ >
67+ Usage Docs ->
68+ </a>
69+ </li>
70+ <li class="ml2 mt1 mb4">
71+ <a href="/docs/"
72+ {% if base == "docs" %}
73+ class="fw6"
74+ {% endif %}
75+ >
76+ Development Docs ->
77+ </a>
78+ </li>
4479 {% block menu %}
45− {% set index = get_section(path="docs/_index.md") %}
80+ <li class="ml3 mt1">
81+ <a
82+ {% if section and section.relative_path == "docs/_index.md" %}
83+ class="fw6"
84+ {% elif section and section.relative_path == "using/_index.md" %}
85+ class="fw6"
86+ {% endif %}
87+ {% if base == "docs" %}
88+ href="/docs"
89+ {% elif base == "using" %}
90+ href="/using"
91+ {% endif %}
92+ >
93+ Introduction
94+ </a>
95+ </li>
96+ {% set index = get_section(path=directory ~ "/_index.md") %}
4697 {% for s in index.subsections %}
4798 {% set subsection = get_section(path=s) %}
4899 {% if subsection.extra.nav %}
49− <li class="ml3 mt1"><a
100+ <li class="ml3 mt2"><a
50101 {% if current_url == subsection.permalink %}
51102 class="fw6"
52103 {% endif %}
@@ -126,8 +177,8 @@
126177 <select class="db mt4 pa2 b--black ba br0 mw4 f6 fw5" id="docsSelect" style="text-indent: 0.725rem;">
127178 <option>Navigation ↓</option>
128179 <option> </option>
129− <option value="https://urbit.org/using/install">Install</option>
130− <option value="https://urbit.org/using/operations/">Operations Manual</option>
180+ <option value="https://urbit.org/getting-started">Install</option>
181+ <option value="https://urbit.org/using">Operations Manual</option>
131182 <option value="https://urbit.org/using/develop">Developer's Guide</option>
132183 {% set index = get_section(path="docs/_index.md") %}
133184 {% for s in index.subsections %}
templates/sections/docs/hoon.html+1−1
@@ -25,7 +25,7 @@
2525<div class="measure-wide mb4">
2626{{ section.content | safe }}
2727
28−{% set lessons = get_section(path="docs/tutorials/hoon/hoon-school/_index.md") %}
28+{% set lessons = get_section(path="docs/hoon/hoon-school/_index.md") %}
2929
3030<ul>
3131 <h2 class="mv4">Chapter 1</h2>
templates/understanding-urbit/list.html+1−1
@@ -57,7 +57,7 @@
5757 <p class="full mt0 mb4 mb4-xl lh-copy b">2 - User experience</p>
5858 <p class="full mt0 mb4 mb4-xl lh-copy">We want Urbit to be a single, simple interface for your whole digital life.</p>
5959 <img class="full ba mb4" src="https://media.urbit.org/site/understanding-urbit/uu-intro-4.png"/>
60− <p class="full mt0 mb4 mb4-xl lh-copy">Over the years, Urbit has been built in public as an open source project. Anyone can <a class="bb" href="/using/install/">join the network</a> and check out what we’re up to. It’s a bit like signing on to IRC in the early 90s. </p>
60+ <p class="full mt0 mb4 mb4-xl lh-copy">Over the years, Urbit has been built in public as an open source project. Anyone can <a class="bb" href="/getting-started/">join the network</a> and check out what we’re up to. It’s a bit like signing on to IRC in the early 90s. </p>
6161 <p class="full mt0 mb4 mb4-xl lh-copy">In early 2020, we released Urbit OS 1: a minimal interface for group communication, and our first complete interface. OS 1 is a tool to chat, share notes and links, and stay connected. </p>
6262 <p class="full mt0 mb4 mb4-xl lh-copy">OS 1 is the first step toward a truly complete OS for a networked world. </p>
6363 <p class="full mt0 mb4 mb4-xl lh-copy">Over time, Urbit will grow into a system that can bring together all our different modes of communicating: chat, payments, documents, images, biometric data. We want individuals and their communities to be able to both control their software in fact, through the source code, and in action, through a simple interface.</p>