on bdf9204 help sign in
urbit.org/docs/using/layout.md
120 lines 2.7 kB history raw
1---
2navhome: '/docs/'
3sort: 9
4title: Source layout
5---
7<div class="row">
8<div class="col-md-8">
9# Arvo source
11When you boot an Urbit we transfer the current version of the Arvo operating
12environment to your Urbit over our network. That is, the source for the system
13lives on your Urbit. Here we'll take a brief tour through the structure of a
14base Arvo desk.
16</div>
17</div>
18Looking at the top level of [the Arvo repo](http://github.com/urbit/arvo), or
19any Urbit desk that has been mounted to Unix we see something like:
21 app/
22 arvo/
23 gen/
24 lib/
25 mar/
26 ren/
27 sec/
28 sur/
29 web/
30 web.md
32Let's step through directory by directory.
34## `app/`
36This is where `%gall` apps live. `%gall` apps are stateful servers, sort of like
37unix daemons. One familiar one is `app/talk.hoon` which is the source code for
38`:talk` the urbit messaging transport layer. And there's also `app/dojo.hoon` —
39that's your shell.
41## `arvo/`
43This is where the `%arvo` vanes live. Vanes are sort of like kernel modules.
44These are worth listing one by one:
46### `arvo/ames.hoon`
48`%ames` is our network protocol.
50### `arvo/behn.hoon`
52`%behn` is a simple timer.
54### `arvo/clay.hoon`
56`%clay` is our filesystem.
58### `arvo/dill.hoon`
60`%dill` is our terminal driver.
62### `arvo/eyre.hoon`
64`%eyre` is our webserver.
66### `arvo/ford.hoon`
68`%ford` is our build system.
70### `arvo/gall.hoon`
72`%gall` is our application model.
74### `arvo/hoon.hoon`
76`%hoon` is our programming langauge. Since Hoon compiles itself the language is
77actually specified in this source file.
79### `arvo/zuse.hoon`
81`%zuse` is the Hoon library.
83That's it. That's the whole system.
85## `gen/`
87`gen/` holds generators. Generators are short `:dojo` scripts.
89## `lib/`
91`lib/` holds shared libraries for programs. `lib/sole` is a good example —
92that's the console library that's shared by both `:dojo` in the command line,
93and the `dojo` web client.
95## `mar/`
97This is where marks live. Marks are data type definitions used by `%ford`. A
98mark is like a mime-type, but specified in executable code.
100## `ren/`
102These are web renderers. A renderer handles web requests of a particular type.
104Default web requests in urbit are handled as a `.urb`, which is caught by the
105`urb.hoon` renderer. This wraps the request in our default `css` and `js` and
106adds some routing magic for certain paths.
108## `sur/`
110`sur/` contains shared data structures. Files in `sur` are like header files in
111C.
113## `web/`
115There are the files publicly accessible to the web, as made possible by `%eyre`.
117## `web.md`
119This is the homepage for your urbit. You'll see it at `http://localhost:8080/`
120or `http://fintud-macrep.urbit.org/`.