on ebbafa3 help sign in
102 lines 2.6 kB history raw
1---
2sort: 6
3title: Arvo source
4---
6# Arvo source
8When you boot an Urbit we transfer the current version of the Arvo operating environment to your Urbit over our network. That is, the source for the system lives on your Urbit. Here we'll take a brief tour through the structure of a base Arvo desk.
10Looking at the top level of [the Arvo repo](http://github.com/urbit/arvo), or any Urbit desk that has been mounted to Unix we see something like:
12 app/
13 arvo/
14 gen/
15 lib/
16 mar/
17 ren/
18 sec/
19 sur/
20 web/
21 web.md
23Let's step through directory by directory.
25## `app/`
27This is where `%gall` apps live. `%gall` apps are stateful servers, sort of like unix daemons. One very familiar one is `app/talk.hoon` which is the source code for `:talk` the urbit messaging transport layer. And there's also `app/dojo.hoon` — that's your shell.
29## `arvo/`
31This is where the `%arvo` vanes live. Vanes are sort of like kernel modules. These are worth listing one by one:
33### `arvo/ames.hoon`
35`%ames` is our network protocol.
37### `arvo/behn.hoon`
39`%behn` is a simple timer.
41### `arvo/clay.hoon`
43`%clay` is our filesystem.
45### `arvo/dill.hoon`
47`%dill` is our terminal driver.
49### `arvo/eyre.hoon`
51`%eyre` is our webserver.
53### `arvo/ford.hoon`
55`%ford` is our build system.
57### `arvo/gall.hoon`
59`%gall` is our application model.
61### `arvo/hoon.hoon`
63`%hoon` is our programming langauge. Since Hoon compiles itself the language is actually specified in its source.
65### `arvo/zuse.hoon`
67`%zuse` is the Hoon library.
69That's it. That's the whole system.
71## `gen/`
73`gen/` holds generators. Generators are command-line scripts.
75## `lib/`
77`lib/` holds shared libraries for programs. `lib/sole` is a good example — that's the console library that's shared by both `:dojo` in the command line, and the `dojo` web client.
79## `mar/`
81This is where marks live. Marks are data type definitions used by `%ford`. A mark is like a mime-type, but precisely specified in executable code.
83## `ren/`
85These are web renderers. A renderer handles web requests of a particular type.
87Default web requets in urbit are handled as a `.urb`, which is caught by the `urb.hoon` renderer. This wraps the request in our default `css` and `js` and adds some routing magic for certain paths.
89## `sur/`
91`sur/` contains shared data structures.
93Files in `sur` are like headers in C.
95## `web/`
97There are the files publicly accessible to the web, as made possible by `%eyre`.
99## `web.md`
101This is the homepage for your urbit. You'll see it at `http://localhost:8080/` or `http://your-urbit.urbit.org/`.