Hoon Tutorial

This series is designed to teach you Hoon without assuming you have an extensive programming background. In fact, you should be able to follow much of it even if you have no programming experience at all, though of course experience helps. We strongly encourage you to try out all the examples of each lesson. These lessons are meant for the beginner but they aren't meant to be skimmed. Each lesson falls into one of two categories: readings, which are prose-heavy explanations of Hoon fundamentals, and walkthroughs, which are line-by-line explanations of example programs. Walkthroughs are found between readings, offering a practical implementation of the concepts taught in the reading before.

Chapter 1 introduces and explains the fundamental concepts you need in order to understand Hoon's semantics.

Hoon is a 'subject-oriented' programming language -- every expression of Hoon is evaluated relative to a subject. The subject is a piece of data that represents the environment, or the context, of an expression. After reading Chapter 1 you should understand what the subject is and how to refer to its various parts. In this chapter you'll also learn about cores, which are an important data structure in Hoon. Once you get the hang of cores you'll be able to write your own functions in Hoon.

Chapter 2 covers the type system, and writing apps, and the workings of the Arvo kernel.

Lessons

Chapter 1

Chapter 2

Other Resources

Consult the Reference section to look up any unknown rune or standard library function you don't understand.

As you work your way through these lessons you may want to work on example problems from the Hoon Workbook for practice. Once you finish the lessons here you may want to write more versatile Hoon programs which can make use of more of your urbit's environment, in which case you'll want to check out the Generators documentation. Or maybe you'd like to learn how to write a Gall app. Learn about Udon, Urbit's stripped-down version of Markdown. Or learn Sail, a subset of Hoon used for generating XML nodes.

Last major revision of this section: February 2019