on 08c1f13 help sign in
114 lines 5.6 kB history raw
1+++
2title = "Getting Started"
3description = "How to get started developing on Urbit."
4weight = 10
5template = "doc.html"
6aliases = ["/docs/using/creating-a-development-ship/", "/docs/getting-started/contributing"]
7+++
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.md), 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
26throughout the docs.
28### Build Clients {#clients}
30Urbit ships with [Landscape](@/docs/userspace/landscape/overview.md), 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.md)
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
46communicate over HTTP.
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, have a look at [this document](@/docs/arvo/eyre/external-api-ref.md).
53Alternatively, command-line interface (CLI) applications can be built using a
54library called `shoe`, which you can learn more about
55[here](@/docs/hoon/guides/cli-tutorial.md). This does require Hoon knowledge.
57### Develop Agents {#agents}
59Gall agents can be best thought of as individual services with a
60statically-typed interface and built-in database. They're written in
61[Hoon](@/docs/hoon/overview.md) and all conform to a specific
62[interface](@/docs/userspace/gall/gall-api.md) that's defined by the kernel vane
63called [Gall](@/docs/userspace/gall/gall.md).
65Applications built on Urbit utilize a collection of different agents, each of
66which handle specific functionality. The [Landscape
67architecture](@/docs/userspace/landscape/overview.md) is a good reference implementation
68to see how this pattern works in practice.
70If you want to learn how to build gall agents, your best bet is to first [learn
71the Hoon programming language](@/docs/hoon/hoon-school/_index.md), and then follow that
72up with the [Gall guide](@/docs/userspace/gall/tutorial.md).
74### Contribute to Urbit Core {#core}
76Working on the core means improving the Urbit project itself, working with the
77existing community of Urbit developers. The kernel is much more stable, but
78generally more challenging from an engineering standpoint.
80Just arrived and unsure what to work on? An ideal way to get started is by
81experimenting with the system, talking to other developers, and reading (or
82[contributing to](https://github.com/urbit/docs)) the [documentation](/docs/).
84Prefer learning with an instructor? Our community runs an online course that
85covers the basics of Urbit development called
86[Hooniversity](https://hooniversity.org/). If course-based learning works well
87for you, we recommend you sign up.
89The Urbit developer community congregates around [the urbit-dev mailing
90list](https://groups.google.com/a/urbit.org/forum/#!forum/dev), the
91`~bitbet-bolbel/urbit-community` group on Landscape, and [Urbit’s GitHub
92repository](https://github.com/urbit/urbit). It’s a good idea to sign up, see
93what people are talking about, and introduce yourself.
95Once you’re comfortable working with Urbit, check out the [project’s issues on
96GitHub](https://github.com/urbit/urbit/issues) or some of our [contribution
97bounties](https://grants.urbit.org/).
99If you’re looking for some guidance, need help, or would prefer direct
100communication for your ideas, you can also always reach out to us directly at
101[support@urbit.org](mailto:support@urbit.org).
103## Next Steps
105From here, you'll probably want to learn more about:
107- How to set up a [development environment](@/docs/development/environment.md)
108- Our [grants program](@/docs/development/grants.md), where you can earn address
109 space for helping the project grow
110- The different [project
111 repositories](@/docs/development/project-repositories.md), both official and
112 community-maintained
113- Our development [Precepts](@/docs/development/precepts.md), which outline the
114 philosophies that drive Urbit development