on 52f2e0d help sign in
urbit.org/docs/using/layout.md
140 lines 2.9 kB history raw
1---
2navhome: /docs/
3navuptwo: true
4next: true
5sort: 4
6title: Source layout
7---
9# Arvo source
11When you boot an Urbit we transfer the current version of the Arvo
12operating environment to your Urbit over our network. That is, the
13source for the system lives on your Urbit. Here we'll take a brief tour
14through the structure of a base Arvo desk.
16Looking at the top level of
17[the Arvo repo](http://github.com/urbit/arvo), or any Urbit desk that
18has been mounted to Unix we see something like:
20```
21app/
22arvo/
23gen/
24lib/
25mar/
26ren/
27sec/
28sur/
29sys/
30web/
31web.md
32```
34Let's step through directory by directory.
36## `sys/`
38This is where the Arvo kernel lives. `sys/` contains:
40### `sys/hoon.hoon`
42Hoon is our programming langauge. Since Hoon compiles itself the
43language is actually specified in this source file.
45### `sys/zuse.hoon`
47Zuse is the Arvo standard library.
49### `sys/arvo/hoon`
51This is the source file for the central Arvo event dispatcher.
53### `sys/vane`
55Vanes are sort of like kernel modules. These are worth listing one by one:
57### `sys/vane/ames.hoon`
59Ames is our network protocol.
61### `sys/vane/behn.hoon`
63Behn is a simple timer.
65### `sys/vane/clay.hoon`
67Clay is our filesystem.
69### `sys/vane/dill.hoon`
71Dill is our terminal driver.
73### `sys/vane/eyre.hoon`
75Eyre is our webserver.
77### `sys/vane/ford.hoon`
79Ford is our build system.
81### `sys/vane/gall.hoon`
83Gall is our application model.
85### `sys/vane/jael.hoon`
87Jael is our secret vault.
89### `sys/vane/xmas.hoon`
91Xmas is the new Ames, which will go live in our next big release.
93That's it. That's the whole system.
95## `app/`
97This is where Gall apps live. Gall apps are stateful servers, sort of
98like unix daemons. One familiar one is `app/hall.hoon` which is the
99source code for Hall, the Urbit messaging transport layer. And there's
100also `app/dojo.hoon` — that's your shell.
102## `gen/`
104`gen/` holds generators. Generators are short Dojo scripts.
106## `lib/`
108`lib/` holds shared libraries for programs. `lib/sole` is a good
109example — that's the console library that's shared by both Dojo in the
110command line, and the Dojo web client.
112## `mar/`
114This is where marks live. Marks are data type definitions used by Ford.
115A mark is like a mime-type, but specified in executable code.
117## `ren/`
119These are web renderers. A renderer handles web requests of a particular
120type.
122Default web requests in urbit are handled as a `.urb`, which is caught
123by the `urb.hoon` renderer. This wraps the request in our default `CSS`
124and `JS` and adds some routing magic for certain paths.
126## `sur/`
128`sur/` contains shared data structures. Files in `sur` are like header
129files in C.
131## `web/`
133There are the files publicly accessible to the web, as made possible by
134Eyre.
136## `web.md`
138This is the homepage for your urbit. You'll see it at
139`http://localhost:8080/` or `https://your-urbit.urbit.org/`.