on master help sign in
add new getting started flow

adds an outline of the content, some actual copy, and lots of notes

commit3e285df0fc1505af0e87b4353231e7c580bcb997 authorJosh Lehman <josh@urbit.org> dateMon 23 Jan 2023, 01:46 (4 years ago) parente148594
14 files changed+798−301
content/getting-started/_index.md+23−14 content/getting-started/cli.md+8−7 content/getting-started/cloud-hosting.md+460 content/getting-started/free-trial.md+11 content/getting-started/get-planet.md → content/getting-started/get-id.md+23−37 content/getting-started/getting-around.md−75 content/getting-started/hosted.md+11−24 content/getting-started/installing-applications.md+2−2 content/getting-started/interfaces.md+13 content/getting-started/joining-groups.md+1−1 content/getting-started/local-hosting.md+10 content/getting-started/providers.md+31 content/getting-started/self-host.md+28 pages/getting-started/[[...slug]].js+177−141
content/getting-started/_index.md+23−14
@@ -1,25 +1,34 @@
11+++
2−title = "Overview"
2+title = "Introduction"
33weight = 0
44description = ""
55+++
66
7−### Introduction
7+*These documents are intended to show you how to use Urbit. They'll guide you through the various options and give you enough context to find your way around. If dont know what Urbit is, you might want to read the [Overview](https://urbit.org/overview) first.*
88
9−Nothing about building a new OS from scratch has been easy. Or creating an identity system that adequately replaces the IP address.
9+The goal of Urbit is to make peer-to-peer software easy for developers to write
10+and for users to run on their own. The code is [completely open
11+source](https://github.com/urbit), [actively
12+maintained](https://github.com/urbit/urbit/graphs/code-frequency), supported by
13+a [growing ecosystem](https://urbit.org/ecosystem), and [used daily by
14+thousands](https://network.urbit.org).
1015
11−Getting on Urbit isn't always easy, either. The onboarding process hasn't been optimized by product managers in search of maximal profit. There's no checkbox for your interests—you have to discover them yourself.
16+The Urbit software stack consists of two high-level components: an operating
17+system (Urbit OS) and an identity system (Urbit ID). If Urbit OS were a door,
18+Urbit ID would be the key that unlocks it; the former requires the latter.
1219
13−But we like to think this hard work is exactly what makes Urbit special. **Consider yourself warned.**
20+Urbit OS enables its user to communicate directly with others using Urbit OS via
21+their Urbit ID's. You can think of these like phone numbers &mdash; meaningless
22+but memorizable, and likely to identify the same person reliably through time.
1423
15−### Why Urbit?
24+Using Urbit requires having access to a running **ship**: an Urbit OS running
25+with a supplied Urbit ID. You can run Urbit yourself if you're comfortable at a
26+command-line or willing to learn. Otherwise you should probably use a hosting
27+provider &mdash; that is, someone that provides you with an Urbit as a service.
1628
17−**As a user**, you can explore the people, community, and sheer novelty of the Urbit ecosystem while owning your entire experience. Your data, your messages, your apps.
29+## Next steps
1830
19−**As a developer**, you can now build apps, a protocol for a whole suite of apps, or an entire online subculture, and distribute your work directly to your users' operating systems. No middlemen, no MEGACORPs, and no lock-in.
20−
21−Someone once said, "All the smart people I know disappear into Urbit." If you're smart, you will too — not just installing and running Urbit, but taking the first step toward deploying your Final Computer.
22−
23−### Launch into Urbit
24−
25−Choose how you want to disappear into Urbit.
31+1. [Run Urbit yourself](/getting-started/self-host) or get a [hosted ship](/getting-started/hosted)
32+2. Use [interfaces](/getting-started/interfaces) that talk to your ship
33+3. [Install apps](/getting-started/installing-apps) to experiment with
34+4. [Join groups](/getting-started/joining-groups) using the Groups app
content/getting-started/cli.md+8−7
@@ -1,13 +1,14 @@
11+++
2−title = "Command line app"
3−weight = 2
4−description = "Installation instructions for power users."
2+title = "Command-line Install"
3+weight = 3
4+description = "Installation instructions for technical users"
5+tag = "selfhost"
56+++
67
7−If you're a power user, you can run the Urbit runtime (Vere) using the command
8−line. This can be run on your local machine or a server in the cloud, we
9−just cover the local case here. The runtime is what interprets the Urbit kernel
10−code (Arvo) into commands your specific machine (macOS or Linux) understands.
8+This guide covers running the Urbit runtime (Vere) using the command line. This
9+can be run on your local machine or a server in the cloud, we just cover the
10+local case here. The runtime is what interprets the Urbit kernel code (Arvo)
11+into commands your specific machine (macOS or Linux) understands.
1112
1213Note there is a much more comprehensive [cloud hosting
1314guide](https://operators.urbit.org/manual/running/hosting) which walks through
content/getting-started/cloud-hosting.mdnew file+460
@@ -0,0 +1,460 @@
1++++
2+title = "Cloud Hosting"
3+weight = 4
4+description = "How to host your ship in the cloud so you can access it from any device"
5+tag = "selfhost"
6++++
7+
8+The goal of this guide is to have clear and easy to follow best practices for
9+deploying an Urbit node to a server you control in the cloud. Deploying in the
10+cloud allows you to access your Urbit from any device.
11+
12+Most Urbit users start out running their ship locally on one machine in order to
13+play with it, but this means when your machine is offline your Urbit node is
14+offline too (and can't get updates). You can also only access your Urbit from
15+that one machine.
16+
17+This guide uses Digital Ocean as the cloud provider, but others can be used. If
18+using another provider, the setup script provided and other server configuration
19+instructions may need to be modified or done manually.
20+
21+## 1. Create a Droplet
22+
23+Create an account on [Digital Ocean](https://digitalocean.com). Once you make an
24+account, choose "Deploy a virtual machine".
25+
26+You should see the page below where you can create your Droplet, aka Virtual Machine:
27+
28+![do screenshot](https://media.urbit.org/operators/manual/running/hosting/do-screenshot.png)
29+
30+Fill out the options like so:
31+
32+#### Image
33+
34+Ubuntu 22.04 x64
35+
36+#### Plan
37+
38+- Shared CPU: Basic
39+- CPU options: Regular with SSD
40+- 2GB / 1 CPU ($12/mo)
41+
42+You can choose a more powerful option if you'd like but the $12 option should be
43+sufficient. Note Urbit needs 2GB of memory; it's possible to choose a cheaper
44+option and run it with less memory by using swap but it will impact performance.
45+
46+#### Add block storage
47+
48+The $12 plan includes 50GB which should be sufficient for quite some time, so
49+you can skip this.
50+
51+#### Datacenter region
52+
53+Choose the region closest to you.
54+
55+#### VPC Network
56+
57+Leave this as default.
58+
59+#### Authentication
60+
61+In the "Authentication" field, select "SSH keys" and hit "New SSH Key". Run the
62+following command in the terminal on your local machine, replacing
63+`riclen-tinlyr` with the name of your ship (sans the leading `~`):
64+
65+```bash {% copy=true %}
66+SHIP="riclen-tinlyr" bash -c 'ssh-keygen -q -N "" -C $SHIP -f ~/.ssh/$SHIP && cat ~/.ssh/$SHIP.pub'
67+```
68+
69+It should spit out a long string of letters and numbers beginning with `ssh-rsa`
70+and ending with your ship name. Copy the whole thing and paste it into the "SSH
71+key content" field on Digital Ocean. In the "Name" field, enter your ship name.
72+
73+#### Additional options
74+
75+Click "User data" and paste the script below into the field provided. This
76+will automatically configure the server and install necessary software.
77+
78+```bash {% copy=true %}
79+#!/bin/bash
80+
81+# configure swap
82+fallocate -l 2G /swapfile
83+chmod 600 /swapfile
84+mkswap /swapfile
85+swapon /swapfile
86+echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
87+
88+# setup firewall
89+ufw allow OpenSSH
90+ufw allow www
91+ufw allow https
92+ufw allow 34543/udp
93+ufw enable
94+
95+# create and configure user
96+useradd -s /bin/bash -d /home/urbit -m -G sudo urbit
97+passwd -d urbit
98+echo "urbit ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
99+
100+# configure ssh keys for user
101+mkdir -p /home/urbit/.ssh
102+chmod 700 /home/urbit/.ssh
103+cp /root/.ssh/authorized_keys /home/urbit/.ssh/authorized_keys
104+chmod 600 /home/urbit/.ssh/authorized_keys
105+chown -R urbit:urbit /home/urbit/.ssh
106+
107+# configure sshd
108+mkdir -p /etc/ssh/sshd_config.d
109+cat > /etc/ssh/sshd_config.d/override.conf <<EOF
110+PermitRootLogin no
111+PubkeyAuthentication yes
112+PasswordAuthentication no
113+EOF
114+
115+# fetch and extract urbit binary
116+curl -L https://urbit.org/install/linux-x86_64/latest | tar xzk --transform='s/.*/urbit/g' -C /home/urbit/
117+chown urbit:urbit /home/urbit/urbit
118+
119+# install tmux
120+apt -y update
121+apt install -y tmux
122+
123+# reboot
124+systemctl reboot
125+```
126+
127+#### How many Droplets?
128+
129+1
130+
131+#### Choose a hostname
132+
133+This will be the name the server calls itself locally, you can put in whatever
134+you want. Your planet name is a good choice.
135+
136+#### Add tags
137+
138+Leave empty.
139+
140+#### Select project
141+
142+Leave as the default.
143+
144+#### Create Droplet
145+
146+Hit this button to create the droplet.
147+
148+## 2. Prepare for upload
149+
150+{% callout %}
151+
152+**Note**
153+
154+This step is necessary if you already have a ship running locally and want to
155+move it to the cloud. If you don't, you can skip this step.
156+
157+{% /callout %}
158+
159+In the Dojo, use either `"CTRL + D"` or `|exit` to shut down your ship.
160+
161+Archive your pier by running `tar cvzf riclen-tinlyr.tar.gz ~/path/to/your/pier`
162+(substitute your own ship name and pier location).
163+
164+## 3. Connect to the server
165+
166+To make connecting simple, you can add an alias to `~/.ssh/config` on your local
167+machine. Open `~/.ssh/config` in an editor (you may need to create it if the
168+file doesn't exist), and add the following to the bottom of the file (replacing
169+the ship name with your own and the IP address with that of your droplet):
170+
171+``` {% copy=true %}
172+Host riclen-tinlyr
173+ HostName 161.35.148.247
174+ User urbit
175+ IdentityFile ~/.ssh/riclen-tinlyr
176+ IdentitiesOnly yes
177+```
178+
179+{% tabs %}
180+
181+{% tab label="If you have an existing pier" %}
182+
183+
184+Copy the archived pier to the server with the following (substituting your ship
185+name and Host):
186+
187+```bash {% copy=true %}
188+scp riclen-tinlyr.tar.gz riclen-tinlyr:
189+```
190+
191+It may take a while to upload if your pier is large and/or your internet is
192+slow.
193+
194+{% /tab %}
195+
196+{% tab label="If you have a key file" %}
197+
198+If you have obtained a planet and want to boot it for the first time, you'll
199+need to upload its key file to the server. These instructions assume you've
200+received an invite. If you've got a planet by another method, you can also login
201+to [Bridge](https://bridge.urbit.org) and download the key file from there.
202+
203+If you've received a planet invite via email or a claim link like
204+`https://bridge.urbit.org/#labfur-batteg-dapnex-binsup-riclen-tinlyr`, open it
205+in a browser and you should see a page like the following:
206+
207+![claim planet screenshot](https://media.urbit.org/operators/manual/running/hosting/claim-planet.png)
208+
209+If you hit "Claim", it'll bring you here:
210+
211+![download passport
212+screenshot](https://media.urbit.org/operators/manual/running/hosting/download-passport.png)
213+
214+Hit "Download Backup (Passport)" and it'll have you download a file named like
215+`riclen-tinlyr-passport.zip`.
216+
217+Unzip the file with:
218+
219+```bash {% copy=true %}
220+unzip ~/path/to/download/folder/riclen-tinlyr-passport.zip
221+```
222+
223+It'll create a folder called `riclen-tinlyr-passport` which will contain three files:
224+
225+- `riclen-tinlyr-1.key`
226+- `riclen-tinlyr-Management Proxy.png`
227+- `riclen-tinlyr-Master Ticket.png`
228+
229+You can physically print out the two `.png` files and store them in a safe and
230+secure location. Importantly, you should ensure the *master ticket* (which will
231+look something like `~tarnes-pilryd-dassed-sogsul`) is securely and safely
232+stored. If anyone gains access to the master ticket they'll have ownership and
233+control of your Urbit ID, and if you lose it you'll irreversibly lose ownership
234+and control of your Urbit ID.
235+
236+The next screen on the claim page will ask you to re-enter the master ticket to
237+ensure you've recorded it accurately, and then the claim process is complete.
238+Once you've securely, physically backed up the master ticket and the `.png`
239+passports, it's a good idea to delete the `riclen-tinlyr-passport.zip` file and
240+the two `.png` files, so if someone gains access to your computer, your Urbit ID
241+will be safe.
242+
243+This will leave only the `riclen-tinlyr-1.key` file. The key file contains your
244+planet's private keys, which are necessary to boot it up for the first time.
245+You'll need to copy that file to the server with the following command (again,
246+replacing `riclen-tinlyr` with your own ship and Host):
247+
248+```bash {% copy=true %}
249+scp riclen-tinlyr-passport/riclen-tinlyr-1.key riclen-tinlyr:
250+```
251+
252+Note: you should keep the `riclen-tinlyr-1.key` until you've completed this
253+guide and your ship is booted to be sure it was copied successfully, but
254+afterwards you should also delete that file for security.
255+
256+{% /tab %}
257+
258+{% /tabs %}
259+
260+Once you've either uploaded your pier or uploaded your key file as the case may
261+be, you can connect to your server:
262+
263+```bash {% copy=true %}
264+ssh riclen-tinlyr
265+```
266+You'll be taken to the shell on your server.
267+
268+## 5. Boot your ship
269+
270+{% tabs %}
271+
272+{% tab label="If you have an existing pier" %}
273+
274+In the previous section you ssh'd into the server. In the same ssh session,
275+extract the pier archive you previously uploaded, then delete the archive:
276+
277+```bash {% copy=true %}
278+tar xvzf riclen-tinlyr.tar.gz && rm riclen-tinlyr.tar.gz
279+```
280+
281+You'll now have a folder called `riclen-tinlyr`, which is your pier. Urbit is
282+best run in a tmux or screen session so it's easy to keep it running when
283+you disconnect. In this case we'll use tmux, which has already been installed
284+by the setup script.
285+
286+Run tmux:
287+
288+```bash {% copy=true %}
289+tmux
290+```
291+
292+You should now be in tmux. First, dock your ship:
293+
294+```bash {% copy=true %}
295+./urbit dock riclen-tinlyr
296+```
297+
298+That will copy the `urbit` runtime inside the pier, so you can now delete the
299+separate binary:
300+
301+```bash {% copy=true %}
302+rm urbit
303+```
304+
305+{% /tab %}
306+
307+{% tab label="If you have a key file" %}
308+
309+In the previous section you ssh'd into the server. In the same ssh session,
310+start tmux:
311+
312+```bash {% copy=true}
313+tmux
314+```
315+
316+You should now be in tmux. Boot a new ship with the following command,
317+specifying the ship name and key file, as well as the Ames port that was
318+previously opened in the firewall by the setup script:
319+
320+```bash {% copy=true %}
321+./urbit -w riclen-tinlyr -k riclen-tinlyr-1.key -p 34543
322+```
323+
324+It may take several minutes to boot the new ship. Eventually, it'll take you to
325+the Dojo (Urbit's shell) and show a prompt like `~riclen-tinlyr:dojo>`. Once
326+booted, shut the ship down again by typing `|exit` in the Dojo. After it quits,
327+it should print something like "docked successfully", which means the binary has
328+been copied inside the pier. This means you can delete the separate binary:
329+
330+```bash {% copy=true %}
331+rm urbit
332+```
333+
334+The key file is only needed when you first boot the ship, so it's good practice
335+to delete it after first boot:
336+
337+```bash {% copy=true %}
338+rm riclen-tinlyr-1.key
339+```
340+
341+{% /tab %}
342+
343+{% /tabs %}
344+
345+Run the following to allow the runtime to bind ports 80 and 443:
346+
347+```bash {% copy=true %}
348+sudo setcap 'cap_net_bind_service=+ep' riclen-tinlyr/.run
349+```
350+
351+Now you can start your ship up with the following:
352+
353+```bash {% copy=true %}
354+./riclen-tinlyr/.run -p 34543
355+```
356+
357+After a few moments it'll show the Dojo prompt like `~riclen-tinlyr:dojo>`.
358+
359+## 6. Get a domain
360+
361+To make accessing the web interface convenient, you should request an
362+`arvo.network` domain name. To do so, run the following command in the Dojo,
363+replacing the IP address with your droplet's:
364+
365+``` {% copy=true %}
366+-dns-address [%if .161.35.148.247]
367+```
368+
369+This will request a subdomain of your ship like `riclen-tinlyr.arvo.network`.
370+
371+The domain should be registered almost instantly, but sometimes it takes a while
372+for it to propagate to other DNS servers. You might therefore see the following:
373+
374+```
375+> -dns-address [%if .161.35.148.247]
376+dns: request for DNS sent to ~deg
377+dns: awaiting response from ~deg
378+http: fail (13, 504): unknown node or service
379+http: fail (14, 504): unknown node or service
380+http: fail (15, 504): unknown node or service
381+http: fail (16, 504): unknown node or service
382+http: fail (17, 504): unknown node or service
383+dns: unable to access via riclen-tinlyr.arvo.network
384+XX confirm port 80
385+XX check via nslookup
386+0
387+```
388+
389+If that happens, wait five or ten minutes and then try again. You should
390+eventually see:
391+
392+```
393+> -dns-address [%if .161.35.148.247]
394+dns: request for DNS sent to ~deg
395+dns: awaiting response from ~deg
396+[%key iter=0 width=2.047]
397+[%key iter=1 width=2.047]
398+[%key iter=2 width=2.047]
399+[%key iter=3 width=2.047]
400+acme: requesting an https certificate for riclen-tinlyr.arvo.network
401+dns: confirmed access via riclen-tinlyr.arvo.network
402+0
403+acme: received https certificate for riclen-tinlyr.arvo.network
404+http: restarting servers to apply configuration
405+http: web interface live on https://localhost:443
406+http: web interface live on http://localhost:80
407+http: loopback live on http://localhost:12321
408+```
409+
410+That means the domain has been registered and an SSL certificate has been
411+installed, so you can access the web interface securely with HTTPS.
412+
413+## 7. Log in to Landscape
414+
415+In order to login to the web interface, you need to get the web login code. Run
416+the following in the Dojo:
417+
418+``` {% copy=true %}
419++code
420+```
421+
422+It'll spit out something like `ropnys-batwyd-nossyt-mapwet`. That's your web
423+login code, you can copy that and save it in a password manager or similar. Note
424+that the web login code is separate from the master ticket.
425+
426+The server configuration should now be complete, and you can access Landscape in
427+the browser. Navigate to the domain you configured previously, in this case
428+`riclen-tinlyr.arvo.network`. You should see the Landscape login screen:
429+
430+![landscape login screen](https://media.urbit.org/operators/manual/running/hosting/landscape-login.png)
431+
432+Enter the web login code and you'll be taken to your ship's homescreen. Your
433+ship is now running in the cloud, and you can access it from any device by
434+visiting its URL.
435+
436+## 8. Disconnect
437+
438+You can now disconnect from the tmux session by hitting `CTRL+b d` (that is, you
439+hit `CTRL+b`, release it, and then hit `d`). You'll be taken back to the
440+ordinary shell, but the ship will still be running in the background. If you
441+want to get back to the Dojo again, you can reattach the tmux session with:
442+
443+```bash {% copy=true %}
444+tmux a
445+```
446+
447+Finally, you can disconnect from the ssh session completely by hitting `CTRL+d`.
448+
449+## 9. Cleanup
450+
451+If you booted a new ship by uploading a key file, it's a good idea to now delete
452+the key file on your local machine.
453+
454+If you uploaded an existing pier, you should delete the old copy of both the
455+pier directory and the `.tar.gz` archive on your local machine. You might be
456+tempted to keep one of these as a backup, but note that **you must never again
457+boot the old copy on the live network**. Doing so will create unfixable
458+networking problems and require you to perform a factory reset through Bridge,
459+wiping your ship's data. We therefore don't recommend you keep duplicates of
460+your pier lying around.
content/getting-started/free-trial.mdnew file+11
@@ -0,0 +1,11 @@
1++++
2+title = "Free Trial"
3+weight = 1
4+description = "One day of a free Urbit to check things out."
5+tag = "hostprov"
6++++
7+
8+The Urbit Foundation provides free Urbit hosting for one day for a limited
9+number of people per day.
10+
11+TODO:
content/getting-started/get-planet.md → content/getting-started/get-id.mdrenamed+23−37
@@ -1,36 +1,34 @@
11+++
2−title = "Get a planet"
3−weight = 1
4−description = "How to acquire a planet, or an Urbit ID"
5−tag = "additional"
2+title = "Get an Urbit ID"
3+weight = 2
4+description = "How to acquire an Urbit ID"
5+tag = "selfhost"
66+++
77
8−### What's a planet?
8+### Types of ID
99
10−Planets are a type of [Urbit ID](/understanding-urbit/urbit-id) that is useful for providing individuals long-term access to the Urbit network.
10+There are [five different
11+types](https://operators.urbit.org/guides/which-id-should-i-buy) of Urbit ID,
12+but for our purposes we'll only talk about two of them: **comets** and **planets**.
1113
12−### Where to get a planet
13−
14−There are a few ways to get your own planet:
14+**Comets** are identities that you can issue yourself and are best-suited for
15+short-term usage. **Planets** are how most people use Urbit and are suitable for
16+long-term use.
1517
16−- Getting an invitation from a friend (or stranger)
17−- Purchasing a planet, including hosting, from a hosting provider
18−- Manually setting up and hosting a planet purchased from a third party marketplace
18+If you're just trying it out, a comet is fine and you can skip to the [Command line instructions](/getting-started/cli).
1919
20−### Hosting Providers {% #hosting-providers %}
20+If you plan to use Urbit regularly you'll want to keep reading.
2121
22−Hosting providers will often sell you a planet and run it for you. This option is very simple but will probably cost a regular fee.
23−
24−Urbit is designed to be portable. This means that if you sign up for hosting now but later want to leave your hosting provider and run your Urbit yourself, you should be able to work with them to obtain all of your data and boot your planet back up without losing anything.
22+### Where to get a planet
2523
26−Using hosting does mean that you're trusting your provider with your data, but so long as you have your planet, you'll always own your identity.
24+There are a few ways to get your own planet:
2725
28−Current hosting providers are:
26+- Receiving one from a friend
27+- Asking on Twitter (if you're lucky)
28+- Booting a comet and being friendly in [Urbit Community](https://urbit.org/groups/~bitbet-bolbel/urbit-community)
29+- Purchasing one from a marketplace
2930
30−- [UrbitHost](https://urbithost.com)
31−- [escape pod store](https://www.escapepod.store/)
32−- [Third Earth](https://third.earth/)
33−- [Tlon Corporation](https://tlon.io)
31+This guide will cover the last case and what to do after receiving one.
3432
3533### Buying a planet
3634
@@ -103,20 +101,8 @@ Now that you have your planet, you can create your keyfile (eg. `sample-palnet.k
103101- **L1 Planet Purchasers**
104102 Log in to Bridge with your Ethereum wallet using Metamask or the wallet of your choice with WalletConnect. Click the “OS” box on the bottom of the page to open the OS page, and then click the **Download Keyfile** button.
105103
104+### Next Steps
106105
107−### Next steps
108−
109−Got your planet?
110−
111−Get it up and running with one of these options:
112−
113−- Let a [hosting provider](/getting-started/hosted) do the hard work for you.
114−
115−- For power users, check out the [command line install
116− guide](/getting-started/cli) and run your urbit from the terminal.
117−
118−- If you have a bit of Linux server experience, the [cloud hosting
119− guide](https://operators.urbit.org/manual/running/hosting) will help you set
120− up Urbit on a Digital Ocean VPS, so you can access it from anywhere.
106+Now that you have a keyfile let's move on to booting the Urbit OS.
121107
122−Remember, your planet is yours and you can always change how you run your urbit in the future.
108+TODO: Pagination that points to CLI instructions
content/getting-started/getting-around.mddeleted−75
@@ -1,75 +0,0 @@
1−+++
2−title = "Getting around"
3−description = "Get around your urbit"
4−weight = 4
5−+++
6−
7−### 1. Get oriented
8−
9−After you've logged into your Urbit for the first time, you're officially an Urbiter! You've unlocked the entire Urbit network with your newly-minted ID — the key to your new digital life.
10−
11−![](https://media.urbit.org/site/additional-guides/groups-1.png)
12−
13−You'll see your Home and a few pre-installed applications: Terminal, Groups, and Bitcoin. More on them in a moment.
14−
15−Above those are buttons to view System Preferences and Help and Support and check out notifications for newly-installed or recently-updated applications, respectively. The search bar helps you surface applications you already have installed, or discover developers and applications across the Urbit network.
16−
17−You'll likely want to focus on finding and joining new communities, which you can do with the **Groups** app. Click on the box to open the application.
18−
19−### 2. Join a few groups with fellow Urbiters
20−
21−No two people will ever have the same experience on Urbit. That depends entirely on who you find and where they invite you to join them. But we can set you down a good path.
22−
23−First, Open the Groups app.
24−
25−Then click on "Find Groups" in the left column. Enter [~bitbet-bolbel/urbit-community](/groups/~bitbet-bolbel/urbit-community) — the official Urbit community. Click the "Join" button when you see the group listing.
26−
27−Give it a minute, and the group will load its default channels. To join additional channels in the group, click the "All Channels" button.
28−
29−Here are a few more useful groups to join:
30−
31−- [`~rondev/group-discovery`](/groups/~rondev/group-discovery): A group for finding other groups.
32−- [`~middev/the-forge`](/groups/~middev/the-forge): A group for sharing, discussing, and discovering new Urbit applications.
33−- [`~hocwyn-tipwex/uqbar-event-horizon`](/groups/~hocwyn-tipwex/uqbar-event-horizon): A community around [Uqbar](https://uqbar.network), a company creating applications and experiences on top of Urbit — notably EScape, which is an alternative to the default Groups application for joining communities and messaging with other Urbiters.
34−
35−### 3. Get more Urbit apps
36−
37−Groups are great, but Urbit goes way deeper with apps that are developed specifically for Urbit and use P2P networking for everything.
38−
39−We'll use [Canvas](/applications/~dister-norsyr-torryn/canvas) — a collaborative app for creating pixel art with others — as an example to show the process.
40−
41−Head back to your Urbit's home — the URL you used to log in and view your preinstalled apps. From there, click on the search bar and enter `~dister-norsyr-torryn/canvas`. Click on the first result, which shows you details about the developer, the license, a website for more information, and when the app was last updated.
42−
43−Click **Get App**, then **Get "Canvas"** to continue. Your Urbit gets to work, and once installation is finished, click Open App to see it in action.
44−
45−Some popular apps to get things moving:
46−
47−- [EScape](/applications/~dister-fabnev-hinmur/escape): An alternative UI to the core groups, communities, and messaging capabilities in Urbit.
48−- [Studio](/applications/~tirrel/studio): Run a blog on your urbit.
49−- [Wrdu](/applications/~magped-magped-rabsef-bicrym/wrdu): A Wordle clone.
50−
51−Discover more applications on the [Ecosystem page](https://urbit.org/ecosystem?type=applications).
52−
53−### 4. Get help
54−
55−If you need help getting around Urbit, the best place to go is the official Urbit community: [`~bitbet-bolbel/urbit-community`](/groups/~bitbet-bolbel/urbit-community). Those in the Help channel are willing to troubleshoot or provide links to resources to help you get out of a jam.
56−
57−That community isn't for every support request, however. If your question involves an app, you're better served reaching out to the developer — for example, if you have an issue with EScape's notifications feature, reach out to Uqbar in [`~hocwyn-tipwex/uqbar-event-horizon`](/groups/~hocwyn-tipwex/uqbar-event-horizon).
58−
59−If you're having trouble with your planet or the hosting provider that's running your ship, try their support, as they'll have more context and resources to help solve your issue.
60−
61−And if you can't get through this guide and launch into Urbit, you may have luck with the [Urbit Live community](https://t.me/UrbitLiveGroup) on Telegram.
62−
63−### 5. What's next?
64−
65−You made it! You did the work and now have your Final Computer.
66−
67−What you do with it is up to you. Where you go from here is up to you. No two experiences on Urbit will be the same, so we encourage you to follow your own intuition and explore.
68−
69−**Learn more about using Urbit**: Check out the [Operators Site](https://operators.urbit.org/) to learn more about running your own Urbit and how the network functions.
70−
71−**Get updates about Urbit**: [Subscribe](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&id=be143888d2) to the Urbit Newsletter for news, blog posts, and events from the Urbit Foundation.
72−
73−**Join an event or meetup**: Many of the organizations and people behind Urbit host virtual and in-person events on a regular basis — check out the latest on our [Events feed](/events/), or a local [Meetup group](/ecosystem?type=communities).
74−
75−**Learn how to build on Urbit**: If you're the kind of person who wants to build applications directly for discerning communities with built-in identity and networking primitives, or even jump into the Urbit kernel's core, we have the most comprehensive information to get you started on the [Urbit Developers Site](https://developers.urbit.org/).
content/getting-started/hosted.md+11−24
@@ -1,27 +1,14 @@
11+++
2−title = "Hosted urbit"
3−description = "Run Urbit on a managed service"
4−weight = 1
2+title = "Overview"
3+weight = 0
4+description = ""
5+tag = "hostprov"
56+++
67
7−### 1. Select a hosting provider
8−
9−Hosting providers can sell you a planet and manage the hosting for you for a regular fee. Two important points one should know about hosting providers:
10−
11−- Because the provider has access to the resources that run your Urbit experience, you must trust them with your data.
12−
13−- Urbit has portable data, so you should be able to work with a hosting provider to download all your data and boot up elsewhere if you choose to migrate or start self-hosting.
14−
15−Some hosting providers we like include:
16−- [Tlon](https://tlon.network/)
17−- [ThirdEarth](https://third.earth/)
18−- [Planet One](https://planet.one/)
19−
20−
21−### 2. Log in
22−
23−The exact steps for logging into your Urbit will depend on your hosting provider's infrastructure and the flow they've developed. If you have questions about logging into your hosted Urbit ship, contact their support.
24−
25−### Next steps
26−
27−Learn how to [get around your urbit](/getting-started/getting-around).
8+- Hosting providers are companies that offer "Urbit as a Service"
9+ - Generally bundle ID with hosting, making it turnkey
10+ - Some offer BYOID
11+- Tradeoffs: turnkey, customer service to take care of things, ownership is
12+ contingent on third party
13+- Exit: assuming good actors, you can go from hosting service to self-hosted and
14+ vice versa, unlike with, e.g. Twitter
content/getting-started/installing-applications.md+2−2
@@ -1,7 +1,7 @@
11+++
22title = "Installing apps"
3−tag = "additional"
4−weight = 3
3+tag = "around"
4+weight = 1
55+++
66
77### 1. Get on the network
content/getting-started/interfaces.mdnew file+13
@@ -0,0 +1,13 @@
1++++
2+title = "Interfaces"
3+weight = 0
4+description = "Ways to interact with Urbit"
5+tag = "around"
6++++
7+
8+- Only true Urbit interface is the dojo, Urbit's CLI
9+- Urbit ships by default with Landscape, a web-based interface for managing your
10+ ship and the software installed on it, and launching other web-based applications
11+- EScape, Landscape fork by Uqbar with mobile app
12+- Scene and Realm
13+
content/getting-started/joining-groups.md+1−1
@@ -1,6 +1,6 @@
11+++
22title = "Joining groups"
3−tag = "additional"
3+tag = "around"
44weight = 2
55+++
66
content/getting-started/local-hosting.mdnew file+10
@@ -0,0 +1,10 @@
1++++
2+title = "Home Servers"
3+weight = 5
4+description = "Options for hosting with a home server"
5+tag = "selfhost"
6++++
7+
8+- TODO: Umbrel
9+- TODO: Native Planet
10+- TODO: Groundseg & Starram
content/getting-started/providers.mdnew file+31
@@ -0,0 +1,31 @@
1++++
2+title = "Providers"
3+weight = 2
4+description = "Companies that provide Urbit hosting as a service"
5+tag = "hostprov"
6++++
7+
8+TODO: should have more information about each provider (why they're good), perhaps pricing, images.
9+
10+### 1. Select a hosting provider
11+
12+Hosting providers can sell you a planet and manage the hosting for you for a regular fee. Two important points one should know about hosting providers:
13+
14+- Because the provider has access to the resources that run your Urbit experience, you must trust them with your data.
15+
16+- Urbit has portable data, so you should be able to work with a hosting provider to download all your data and boot up elsewhere if you choose to migrate or start self-hosting.
17+
18+Some hosting providers we like include:
19+
20+- [Tlon](https://tlon.network/)
21+- [ThirdEarth](https://third.earth/)
22+- [Planet One](https://planet.one/)
23+
24+
25+### 2. Log in
26+
27+The exact steps for logging into your Urbit will depend on your hosting provider's infrastructure and the flow they've developed. If you have questions about logging into your hosted Urbit ship, contact their support.
28+
29+### Next steps
30+
31+Learn how to [get around your urbit](/getting-started/getting-around).
content/getting-started/self-host.mdnew file+28
@@ -0,0 +1,28 @@
1++++
2+title = "Overview"
3+weight = 1
4+description = ""
5+tag = "selfhost"
6++++
7+
8+TODO
9+
10+- Brief bit about technical architecture, since audience is technical
11+- To start, read about the different types of ID
12+- Choose where to run Urbit.
13+- On your local computer is good for experimentation, but not long-term usage
14+ because you want it to run as a server.
15+- Can start local and move to a cloud hosting or home server, or start with
16+ either of the latter options
17+- Tradeoff: ownership over data and ID, ongoing maintenance costs
18+
19+NOTES
20+
21+To run Urbit on your own you need to be comfortable using a command line
22+interface (CLI), and should have a basic understanding of how to interact with
23+the Ethereum blockchain.
24+
25+Urbit OS is comprised of a virtual operating system (Arvo) and a runtime called
26+(Vere). The runtime has official versions targeting Linux and macOS, although
27+workarounds exist for Windows.
28+
pages/getting-started/[[...slug]].js+177−141
@@ -22,19 +22,27 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
2222 });
2323 };
2424
25− let menu = [{ title: "Overview", slug: "", weight: 0 }],
26− additional = [];
25+ let started = [{ title: "Introduction", slug: "", weight: 0 }],
26+ around = [],
27+ selfhost = [],
28+ hostprov = [];
2729
2830 posts.pages.map((post) => {
29− if (post?.tag === "additional") {
30− additional.push(post);
31− } else {
32− menu.push(post);
31+ if (post?.tag === "around") {
32+ around.push(post);
33+ } else if (post?.tag === "selfhost") {
34+ selfhost.push(post);
35+ } else if (post?.tag === "hostprov") {
36+ hostprov.push(post);
37+ } else if (post?.tag === "started") {
38+ started.push(post);
3339 }
3440 });
3541
36− menu.sort((a, b) => a.weight > b.weight);
37− additional.sort((a, b) => a.weight > b.weight);
42+ started.sort((a, b) => a.weight > b.weight);
43+ selfhost.sort((a, b) => a.weight > b.weight);
44+ hostprov.sort((a, b) => a.weight > b.weight);
45+ around.sort((a, b) => a.weight > b.weight);
3846
3947 const rootClasses = "pl-0 font-semibold text-base hover:text-green-400";
4048
@@ -50,7 +58,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
5058 Getting Started
5159 </p>
5260 <ul>
53− {menu.map((post) => (
61+ {started.map((post) => (
5462 <li>
5563 <Link href={post.slug} passHref>
5664 <a className={`relative ${select(post.slug)} ${rootClasses}`}>
@@ -62,9 +70,37 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
6270 </ul>
6371 <ul className="mt-8">
6472 <p className="uppercase pb-1 font-bold text-xs text-wall-400">
65− Additional Guides
73+ Run Yourself (Technical)
6674 </p>
67− {additional.map((post) => (
75+ {selfhost.map((post) => (
76+ <li>
77+ <Link href={post.slug} passHref>
78+ <a className={`relative ${select(post.slug)} ${rootClasses}`}>
79+ {post.title}
80+ </a>
81+ </Link>
82+ </li>
83+ ))}
84+ </ul>
85+ <ul className="mt-8">
86+ <p className="uppercase pb-1 font-bold text-xs text-wall-400">
87+ Hosting Services (Non-technical)
88+ </p>
89+ {hostprov.map((post) => (
90+ <li>
91+ <Link href={post.slug} passHref>
92+ <a className={`relative ${select(post.slug)} ${rootClasses}`}>
93+ {post.title}
94+ </a>
95+ </Link>
96+ </li>
97+ ))}
98+ </ul>
99+ <ul className="mt-8">
100+ <p className="uppercase pb-1 font-bold text-xs text-wall-400">
101+ Getting Around
102+ </p>
103+ {around.map((post) => (
68104 <li>
69105 <Link href={post.slug} passHref>
70106 <a className={`relative ${select(post.slug)} ${rootClasses}`}>
@@ -87,7 +123,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
87123 <div className="markdown">
88124 <Markdown.render content={JSON.parse(markdown)} />
89125 </div>
90− {!params?.slug && <LaunchCards />}
126+ {/* {!params?.slug && <LaunchCards />} */}
91127 </ContentArea>
92128 </div>
93129 </>
@@ -112,135 +148,135 @@ const breadcrumbs = (posts, paths) => {
112148 return results;
113149};
114150
115−function LaunchCards() {
116− const info = [
117− {
118− title: "Hosted urbit",
119− subtitle: "Deploy Urbit on a managed service",
120− points: [
121− {
122− title: "Benefits",
123− content: [
124− "Accessibility from anywhere",
125− "Streamlined setup for ownership and identity",
126− "No technical proficiency required",
127− ],
128− },
129− {
130− title: "Considerations",
131− content: [
132− "Requires monthly subscription",
133− "Requires trust in your service provider",
134− ],
135− },
136− ],
137− svg: (
138− <svg
139− width="50"
140− height="50"
141− viewBox="0 0 50 50"
142− fill="none"
143− xmlns="http://www.w3.org/2000/svg"
144− >
145− <rect width="50" height="23.1481" rx="10" className="fill-wall-600" />
146− <rect
147− y="26.8519"
148− width="50"
149− height="23.1481"
150− rx="10"
151− className="fill-wall-600"
152− />
153− <ellipse
154− cx="40.4167"
155− cy="11.5741"
156− rx="2.91667"
157− ry="3.24074"
158− className="fill-white"
159− />
160− <ellipse
161− cx="40.4167"
162− cy="38.4259"
163− rx="2.91667"
164− ry="3.24074"
165− className="fill-white"
166− />
167− </svg>
168− ),
169− href: "/getting-started/hosted",
170− },
171− {
172− title: "Command line app",
173− subtitle: "Run Urbit from the terminal",
174− points: [
175− {
176− title: "Benefits",
177− content: ["Greater control", "Reliable", "Smaller footprint"],
178− },
179− {
180− title: "Considerations",
181− content: ["Requires familiarity with the command line"],
182− },
183− ],
184− svg: (
185− <svg
186− width="55"
187− height="55"
188− viewBox="0 0 66 50"
189− fill="none"
190− xmlns="http://www.w3.org/2000/svg"
191− >
192− <path
193− fill-rule="evenodd"
194− clip-rule="evenodd"
195− d="M52.9288 0.03125H3.07125C1.39393 0.03125 0.03125 1.39393 0.03125 3.07125V52.9288C0.03125 53.7333 0.351879 54.5081 0.921894 55.0781C1.49191 55.6481 2.26671 55.9688 3.07125 55.9688H52.9288C53.7333 55.9688 54.5081 55.6481 55.0781 55.0781C55.6481 54.5081 55.9688 53.7333 55.9688 52.9288V3.07125C55.9688 2.26671 55.6481 1.49189 55.0781 0.921894C54.5081 0.351894 53.7333 0.03125 52.9288 0.03125V0.03125ZM12.8 38.7912L20.78 30.7368L12.8 22.7568L17.1314 18.4254L27.2402 28.6079C27.8191 29.1779 28.1456 29.9586 28.1456 30.7721C28.1456 31.5885 27.8191 32.3693 27.2402 32.9393L17.0577 43.0481L12.8 38.7912ZM38.9425 43.1226H27.0113V37.0426H38.8688L38.9425 43.1226Z"
196− className="fill-wall-600"
197− />
198− </svg>
199− ),
200− href: "/getting-started/cli",
201− }
202− ];
203− return (
204− <div className="flex flex-col space-y-8 mt-8">
205− {info.map((e) => {
206− return (
207− <div className="p-8 bg-wall-100 rounded-xl max-w-screen-md flex flex-col">
208− <div className="flex">
209− <div className="pl-4 pr-8 justify-center items-center flex">
210− {e.svg}
211− </div>
212− <div className="flex flex-col">
213− <h4 className="text-2xl">{e.title}</h4>
214− <p className="font-light text-lg">{e.subtitle}</p>
215− </div>
216− </div>
217− <div className="flex mt-8 border-b-neutral-300 pt-2 pb-5 ">
218− {e.points.map((section) => {
219− return (
220− <div className="basis-1/2">
221− <p className="uppercase font-bold text-sm text-black">
222− {section.title}
223− </p>
224− <ul className="mx-8 my-2 list-disc text-sm flex flex-col space-y-2">
225− {section.content.map((point) => (
226− <li>{point}</li>
227− ))}
228− </ul>
229− </div>
230− );
231− })}
232− </div>
233− <Link href={e.href} passHref>
234− <a className="button-lg max-w-fit text-white mt-4 bg-green-400">
235− Get Started
236− </a>
237− </Link>
238− </div>
239− );
240− })}
241− </div>
242− );
243−}
151+// function LaunchCards() {
152+// const info = [
153+// {
154+// title: "Hosted urbit",
155+// subtitle: "Deploy Urbit on a managed service",
156+// points: [
157+// {
158+// title: "Benefits",
159+// content: [
160+// "Accessibility from anywhere",
161+// "Streamlined setup for ownership and identity",
162+// "No technical proficiency required",
163+// ],
164+// },
165+// {
166+// title: "Considerations",
167+// content: [
168+// "Requires monthly subscription",
169+// "Requires trust in your service provider",
170+// ],
171+// },
172+// ],
173+// svg: (
174+// <svg
175+// width="50"
176+// height="50"
177+// viewBox="0 0 50 50"
178+// fill="none"
179+// xmlns="http://www.w3.org/2000/svg"
180+// >
181+// <rect width="50" height="23.1481" rx="10" className="fill-wall-600" />
182+// <rect
183+// y="26.8519"
184+// width="50"
185+// height="23.1481"
186+// rx="10"
187+// className="fill-wall-600"
188+// />
189+// <ellipse
190+// cx="40.4167"
191+// cy="11.5741"
192+// rx="2.91667"
193+// ry="3.24074"
194+// className="fill-white"
195+// />
196+// <ellipse
197+// cx="40.4167"
198+// cy="38.4259"
199+// rx="2.91667"
200+// ry="3.24074"
201+// className="fill-white"
202+// />
203+// </svg>
204+// ),
205+// href: "/getting-started/hosted",
206+// },
207+// {
208+// title: "Command line app",
209+// subtitle: "Run Urbit from the terminal",
210+// points: [
211+// {
212+// title: "Benefits",
213+// content: ["Greater control", "Reliable", "Smaller footprint"],
214+// },
215+// {
216+// title: "Considerations",
217+// content: ["Requires familiarity with the command line"],
218+// },
219+// ],
220+// svg: (
221+// <svg
222+// width="55"
223+// height="55"
224+// viewBox="0 0 66 50"
225+// fill="none"
226+// xmlns="http://www.w3.org/2000/svg"
227+// >
228+// <path
229+// fill-rule="evenodd"
230+// clip-rule="evenodd"
231+// d="M52.9288 0.03125H3.07125C1.39393 0.03125 0.03125 1.39393 0.03125 3.07125V52.9288C0.03125 53.7333 0.351879 54.5081 0.921894 55.0781C1.49191 55.6481 2.26671 55.9688 3.07125 55.9688H52.9288C53.7333 55.9688 54.5081 55.6481 55.0781 55.0781C55.6481 54.5081 55.9688 53.7333 55.9688 52.9288V3.07125C55.9688 2.26671 55.6481 1.49189 55.0781 0.921894C54.5081 0.351894 53.7333 0.03125 52.9288 0.03125V0.03125ZM12.8 38.7912L20.78 30.7368L12.8 22.7568L17.1314 18.4254L27.2402 28.6079C27.8191 29.1779 28.1456 29.9586 28.1456 30.7721C28.1456 31.5885 27.8191 32.3693 27.2402 32.9393L17.0577 43.0481L12.8 38.7912ZM38.9425 43.1226H27.0113V37.0426H38.8688L38.9425 43.1226Z"
232+// className="fill-wall-600"
233+// />
234+// </svg>
235+// ),
236+// href: "/getting-started/cli",
237+// }
238+// ];
239+// return (
240+// <div className="flex flex-col space-y-8 mt-8">
241+// {info.map((e) => {
242+// return (
243+// <div className="p-8 bg-wall-100 rounded-xl max-w-screen-md flex flex-col">
244+// <div className="flex">
245+// <div className="pl-4 pr-8 justify-center items-center flex">
246+// {e.svg}
247+// </div>
248+// <div className="flex flex-col">
249+// <h4 className="text-2xl">{e.title}</h4>
250+// <p className="font-light text-lg">{e.subtitle}</p>
251+// </div>
252+// </div>
253+// <div className="flex mt-8 border-b-neutral-300 pt-2 pb-5 ">
254+// {e.points.map((section) => {
255+// return (
256+// <div className="basis-1/2">
257+// <p className="uppercase font-bold text-sm text-black">
258+// {section.title}
259+// </p>
260+// <ul className="mx-8 my-2 list-disc text-sm flex flex-col space-y-2">
261+// {section.content.map((point) => (
262+// <li>{point}</li>
263+// ))}
264+// </ul>
265+// </div>
266+// );
267+// })}
268+// </div>
269+// <Link href={e.href} passHref>
270+// <a className="button-lg max-w-fit text-white mt-4 bg-green-400">
271+// Get Started
272+// </a>
273+// </Link>
274+// </div>
275+// );
276+// })}
277+// </div>
278+// );
279+// }
244280
245281export async function getStaticProps({ params }) {
246282 let posts = GettingStartedTree;