You're not currently signed in. Sign in »

CS 498MC • Martian Computing

Neal Davis • Department of Computer Science

The underlying infrastructure of modern networked computing—namely Unix and its derivatives—is approaching fifty years of age. What will come to replace it? A strong competitor is the clean-slate “operating function” approach of Urbit. Jocosely branded as “computing for Martians,” Urbit provides a fresh and updated vision of what Internet computing could come to look like in future years. Featuring end-to-end encryption and true peer-to-peer routing built on a network-first operating system, Urbit fosters decentralized digital societies and stable user identities.

Our primary objectives in this course are for you to be able to explain and navigate the technical layout of Urbit, as well as construct novel applications for Arvo, the Urbit operating function, using the Hoon programming language.


My target audience for the course consists of graduate students in computer science and neighboring fields interested in sound computing and functional operating system design (functional-as-in-language). (Seniors are welcome to email me and apply as well.) The course assumes an interest in functional programming but no specific experience.


What When and Where
Discussions Wed/Fri 14h00–15h15 • Online (active discussion)
Labs/Office hours Mon 14h00–14h50 • Online by appointment
Instructor email
Class URL
Class forum ~magbel/martian-computing


The use of Urbit requires an Urbit ID. While I intend to arrange for students participating in the course to obtain an Urbit ID as part of their enrollment, you can also purchase an ID on a third-party site like or OpenSea. You can also use a transient ID (called a "comet") as a permanent ID; these are free and can be generated on your own machine.


Lessons focus on conceptual or architectural aspects of Urbit, including technical discussions of Urbit’s behavior and internals. Labs are hands-on tutorials to familiarize students with operations and language features.

Wk Date Number Lecture Lab MP
0 08/26 00 Prospectus
08/28 01 Dojo
1 08/31 02 Azimuth I
09/02 03 Generators
09/04 04 Aura
2 09/07 (no lab)
09/09 05 Syntax
09/11 06 Cores mp0
3 09/14 07 %say Generators
09/16 08 Subject-Oriented Programming
09/18 09 Clay I
4 09/21 10 Libraries
09/23 11 Ford I
09/25 12 Debugging Hoon mp1
5 09/28 13 %ask Generators
09/30 14 Types & Molds
10/02 15 Standard Library
6 10/05 16 Common Containers
10/07 17 Gall I
10/09 18 Kernel Philosophy mp2
7 10/12 19 Data & Text Parsing
10/14 20 Ames
10/16 21 Behn
8 10/19 22 Clay II
10/21 23 Polymorphism
10/23 24 Urbit Foundation mp3
9 10/26 25 Gall II State
10/28 26 Gall III Landscape
10/30 27 Buffer
10 11/02 28 Eyre & Iris
11/04 29 Gall IV
11/06 30 Boot Process mp4
11 11/09 31 CLI
11/11 32 Arvo I
11/13 33 Hoon I
12 11/16 34 Hoon II
11/18 35 Vere I
11/20 36 Vere II mp5
13 11/30 37 Arvo II
12/02 38 Nock I
12/04 39 Nock II
14 12/07 40 Azimuth II
12/09 41 Final Thoughts
12/11 mp6


MP Description
mp0 Write naked generators.
mp1 Write %say generators.
mp2 Write %ask generators.
mp3 Write basic Gall apps.
mp4 Write intermediate Gall apps.
mp5 Produce a Landscape tile for a Gall app.
mp6 Interpret Nock code.
bonus A proposed scoped project, such as writing a jet. (See below.)


As this is a graduate course, we expect but do not promise that you will get an A in the course. Assignments are simply graded pass/fail with feedback but can be resubmitted if necessary. (Read "completion" in the table below as receiving a passing grade.)

A requirements

B requirements

C requirements

There is no final exam; the bonus project, if elected, is due by the end of finals week.

Bonus Project. To obtain an A+ in the course, you must meet the requirements for an A and complete a specific scoped project. This project should be proposed to the instructor and worked on with frequent feedback from him.