introduction to hawk

the programmable interface


as phrases

“tree-shaped spreadsheet”

“the manx machine”

“programming environment for individuals"

“emacs for the personal server”


in plain english

hawk is a filesystem with a few useful properties.

files may be shared with other people on the urbit network

files may be made public to the internet

files may display forms & inputs for modifying themselves

every file is completely programmable by you, the user


with jargon

hawk views a tree of programmable pages.

each page has metadata, code, and data.

the code accepts a command and produces the new data for the page.

the data is its own interface.

there is no distinction between files and folders; files can have sub-files

when a page changes, any page that is dependent on it will be passed an empty command which means “update if you need to”.

a page is implicitly dependent on: all of its sub-pages.

a page is explicitly dependent on: the pages it references in its code.


in hoon

+$  file  (axal page) :: namespace
+$  info  (axal dime) :: atom tree
+$  page              :: node type
  $:                  ::
  meta=info           :: meta data
  code=mime           :: evals to $load
  data=manx           :: rendered $load
  ==                  ::
+$  card  info        :: command
+$  load              :: intermediate state
  $%                  ::
  [%cons load load]   :: prepend a into b
  [%snoc load load]   :: append b into a
  [%join (list load)] :: compose many
  [%view =path]       :: overlay data
  [%twin =path]       :: overlay code
  [%call =path =card] :: overlay code w/card
  [%lens =path =hoon] :: recurse at path
  [%vase =vase]       :: pretty printer
  [%marx =marx =load] :: rewrite tag
  [%shed =shed:khan]  :: final w/sys-calls
  [%manx =manx]       :: final
  ==

how to read the manual

we recommended reading the manual in breadth-first order.

familiarity with hoon will help when reading the lower leafs of the manual.

the manual itself is a good example of how to build things in hawk.

if you are reading this manual within a local instance of hawk, click the edit button in the top right to see how a page is implemented.