the programmable interface
“tree-shaped spreadsheet”
“the manx machine”
“programming environment for individuals"
“emacs for the personal server”
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
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.
+$ 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 ==
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.