2title = "Getting Started"
3description = "How to get started developing on Urbit."
6aliases = ["/docs/using/creating-a-development-ship/", "/docs/getting-started/contributing"]
9There are many ways to get involved as a developer. This guide serves to give
10you a "lay of the land" for developing on Urbit. Let's start with what you can
11contribute to. At a high level, you can:
13- [Build clients](#clients), which use Urbit as their back-end to store data and
14 interact with the network
15- [Develop agents](#agents), or more precisely [_gall_
16 agents](/docs/userspace/gall/gall), which are written in [Hoon](/docs/hoon/)
17 and can best be thought of as microservices
18- [Contribute to Urbit's core](#core), which involves contributing to Urbit
19 itself — either the operating system
20 ([Arvo](https://github.com/urbit/urbit/tree/master/pkg/arvo)), runtime
21 ([Vere](https://github.com/urbit/urbit/tree/master/pkg/urbit)), or public key
22 infrastructure ([Azimuth](https://github.com/urbit/azimuth))
24Below we'll go into more detail about each of these options and do our best to
25point you towards a number of additional helpful resources that can be found
28### Build Clients {#clients}
30Urbit ships with [Landscape](/docs/userspace/landscape/overview), which can be thought
31of as its flagship client. Landscape can be broken into two different technical
32components: there's the collection of [agents](#agents) that utilize the
33Urbit for networking and data persistence, and the JavaScript client, which is
34an [interface](https://github.com/urbit/urbit/tree/master/pkg/interface) built
35with [React](https://reactjs.org).
37Additionally, you can [contribute to
38Landscape](https://github.com/urbit/urbit/blob/master/pkg/interface/CONTRIBUTING)
39by tackling issues in its [issue
40tracker](https://github.com/urbit/landscape/issues) and/or running the
41[development stream](https://groups.google.com/a/urbit.org/g/dev/c/r2hv4ajCLwk).
43You can create your own clients that uses Urbit to store data and interact with
44other Urbit ships without writing any Hoon code thanks to Urbit's HTTP APIs.
45This could be a chat client, a writing app, a game, or anything else that can
48To get started quickly with the language of your choice, see the list
49libraries that provide HTTP interfaces to Urbit [here](https://github.com/urbit/awesome-urbit#http-apis-airlock).
51To learn more about how to work with Urbit's HTTP interface, follow [this
52guide](/docs/arvo/eyre/external-api-ref).
54Alternatively, command-line interface (CLI) applications can be built using a
55library called `shoe`, which you can learn more about
56[here](/docs/hoon/guides/cli-tutorial). This does require Hoon knowledge.
58### Develop Agents {#agents}
60Gall agents can be best thought of as individual services with a
61statically-typed interface and built-in database. They're written in
62[Hoon](/docs/hoon/overview) and all conform to a specific
63[interface](/docs/userspace/gall/gall-api) that's defined by the kernel vane
64called [Gall](/docs/userspace/gall/gall).
66Applications built on Urbit utilize a collection of different agents, each of
67which handle specific functionality. The [Landscape
68architecture](/docs/userspace/landscape/overview) is a good reference implementation
69to see how this pattern works in practice.
71If you want to learn how to build gall agents, your best bet is to first [learn
72the Hoon programming language](/docs/hoon/hoon-school/), and then follow that
73up with the [Gall guide](/docs/userspace/gall/tutorial).
75### Contribute to Urbit Core {#core}
77Working on the core means improving the Urbit project itself, working with the
78existing community of Urbit developers. The kernel is much more stable, but
79generally more challenging from an engineering standpoint.
81Just arrived and unsure what to work on? An ideal way to get started is by
82experimenting with the system, talking to other developers, and reading (or
83[contributing to](https://github.com/urbit/docs)) the [documentation](/docs/).
85Prefer learning with an instructor? Our community runs an online course that
86covers the basics of Urbit development called
87[Hooniversity](https://hooniversity.org/). If course-based learning works well
88for you, we recommend you sign up.
90The Urbit developer community congregates around [the urbit-dev mailing
91list](https://groups.google.com/a/urbit.org/forum/#!forum/dev), the
92`~bitbet-bolbel/urbit-community` group on Landscape, and [Urbit’s GitHub
93repository](https://github.com/urbit/urbit). It’s a good idea to sign up, see
94what people are talking about, and introduce yourself.
96Once you’re comfortable working with Urbit, check out the [project’s issues on
97GitHub](https://github.com/urbit/urbit/issues) or some of our [contribution
98bounties](https://grants.urbit.org/).
100If you’re looking for some guidance, need help, or would prefer direct
101communication for your ideas, you can also always reach out to us directly at
102[support@urbit.org](mailto:support@urbit.org).
106From here, you'll probably want to learn more about:
108- How to set up a [development environment](/docs/development/environment)
109- Our [grants program](/docs/development/grants), where you can earn address
110 space for helping the project grow
111- The different [project
112 repositories](/docs/development/project-repositories), both official and
114- Our development [Precepts](/docs/development/precepts), which outline the
115 philosophies that drive Urbit development
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list