on 0d9fe15 help sign in
urbit.org/docs/using/layout.md
106 lines 2.7 kB history raw
1---
2sort: 8
3title: Source layout
4---
6<div class="row">
7<div class="col-md-8">
9# Arvo source
11When 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.
13</div>
14</div>
16Looking 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:
18 app/
19 arvo/
20 gen/
21 lib/
22 mar/
23 ren/
24 sec/
25 sur/
26 web/
27 web.md
29Let's step through directory by directory.
31## `app/`
33This is where `%gall` apps live. `%gall` apps are stateful servers, sort of like unix daemons. One 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.
35## `arvo/`
37This is where the `%arvo` vanes live. Vanes are sort of like kernel modules. These are worth listing one by one:
39### `arvo/ames.hoon`
41`%ames` is our network protocol.
43### `arvo/behn.hoon`
45`%behn` is a simple timer.
47### `arvo/clay.hoon`
49`%clay` is our filesystem.
51### `arvo/dill.hoon`
53`%dill` is our terminal driver.
55### `arvo/eyre.hoon`
57`%eyre` is our webserver.
59### `arvo/ford.hoon`
61`%ford` is our build system.
63### `arvo/gall.hoon`
65`%gall` is our application model.
67### `arvo/hoon.hoon`
69`%hoon` is our programming langauge. Since Hoon compiles itself the language is actually specified in this source file.
71### `arvo/zuse.hoon`
73`%zuse` is the Hoon library.
75That's it. That's the whole system.
77## `gen/`
79`gen/` holds generators. Generators are short `:dojo` scripts.
81## `lib/`
83`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.
85## `mar/`
87This is where marks live. Marks are data type definitions used by `%ford`. A mark is like a mime-type, but specified in executable code.
89## `ren/`
91These are web renderers. A renderer handles web requests of a particular type.
93Default 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.
95## `sur/`
97`sur/` contains shared data structures. Files in `sur` are like header files in C.
99## `web/`
101There are the files publicly accessible to the web, as made possible by `%eyre`.
103## `web.md`
105This is the homepage for your urbit. You'll see it at `http://localhost:8080/` or `http://fintud-macrep.urbit.org/`.