on master help sign in
Merge pull request #1540 from urbit/mp/markdoc
d329c2ematildepark
.husky/.gitignoredeleted−1
@@ -1 +0,0 @@
1−_
.husky/pre-commitdeleted−4
@@ -1,4 +0,0 @@
1−#!/bin/sh
2−. "$(dirname "$0")/_/husky.sh"
3−
4−npx pretty-quick --staged
components/BasicPage.js+2−4
@@ -7,7 +7,7 @@ import Header from "./Header";
7import Footer from "./Footer";
7import Footer from "./Footer";
8import SingleColumn from "./SingleColumn";
8import SingleColumn from "./SingleColumn";
9import Section from "./Section";
9import Section from "./Section";
10−import { decode } from "html-entities";
10+import Markdown from "./Markdown";
11
11
12export default function BasicPage({ post, markdown, search }) {
12export default function BasicPage({ post, markdown, search }) {
13 const router = useRouter();
13 const router = useRouter();
@@ -26,9 +26,7 @@ export default function BasicPage({ post, markdown, search }) {
26 <h1>{post.title}</h1>
26 <h1>{post.title}</h1>
27 </Section>
27 </Section>
28 <Section narrow className="markdown">
28 <Section narrow className="markdown">
29− <article
29+ <Markdown content={JSON.parse(markdown)} />
30− dangerouslySetInnerHTML={{ __html: decode(markdown) }}
31− ></article>
32 </Section>
30 </Section>
33 </SingleColumn>
31 </SingleColumn>
34 <Footer />
32 <Footer />
components/Button.jsnew file+12
@@ -0,0 +1,12 @@
1+import React from "react";
2+import Link from "next/link";
3+
4+const Button = ({ label, link, color }) => {
5+ return (
6+ <Link passHref href={link}>
7+ <a className={"button-lg max-w-fit " + color}>{label}</a>
8+ </Link>
9+ );
10+};
11+
12+export default Button;
components/Callout.jsnew file+12
@@ -0,0 +1,12 @@
1+import React from "react";
2+
3+const Callout = ({ title, children }) => {
4+ return (
5+ <div className="bg-wall-100 rounded-xl display p-7 flex flex-col space-y-4">
6+ {title && <h2>{title}</h2>}
7+ {children}
8+ </div>
9+ );
10+};
11+
12+export default Callout;
components/Footer.js+2−4
@@ -87,10 +87,8 @@ export default function Footer() {
87 <Link href="https://github.com/urbit/urbit/issues" passHref>
87 <Link href="https://github.com/urbit/urbit/issues" passHref>
88 <a className="type-bold text-wall-500">Issue Tracker</a>
88 <a className="type-bold text-wall-500">Issue Tracker</a>
89 </Link>
89 </Link>
90− <Link href="/grants">
90+ <Link href="/grants" passHref>
91− <a className="type-bold text-wall-500" passHref>
91+ <a className="type-bold text-wall-500">Urbit Grants</a>
92− Urbit Grants
93− </a>
94 </Link>
92 </Link>
95 </div>
93 </div>
96
94
components/GrantProgramOverview.js+2−4
@@ -9,8 +9,8 @@ import Header from "./Header";
9import Footer from "./Footer";
9import Footer from "./Footer";
10import SingleColumn from "./SingleColumn";
10import SingleColumn from "./SingleColumn";
11import Section from "./Section";
11import Section from "./Section";
12−import { decode } from "html-entities";
13import { DateTime } from "luxon";
12import { DateTime } from "luxon";
13+import Markdown from "./Markdown";
14
14
15export default function GrantProgramOverview({
15export default function GrantProgramOverview({
16 post,
16 post,
@@ -46,9 +46,7 @@ export default function GrantProgramOverview({
46 </Link>
46 </Link>
47 </Section>
47 </Section>
48 <Section narrow short className="markdown">
48 <Section narrow short className="markdown">
49− <article
49+ <Markdown content={JSON.parse(markdown)} />
50− dangerouslySetInnerHTML={{ __html: decode(markdown) }}
51− ></article>
52 </Section>
50 </Section>
53 </SingleColumn>
51 </SingleColumn>
54 <Footer />
52 <Footer />
components/Markdown.js+268−88
@@ -1,94 +1,274 @@
1−import remark from "remark";
1+import React from "react";
2−import gfm from "remark-gfm";
2+import Markdoc, { Ast, Node, Tag, Raw } from "@markdoc/markdoc";
3−import slug from "remark-slug";
3+import { heading } from "./schema/Heading.markdoc";
4−import heading from "remark-heading-id";
4+import { footnoteRef } from "./schema/footnoteRef.markdoc";
5−import remarkprism from "remark-prism";
5+import { footnoteItem } from "./schema/footnoteItem.markdoc";
6−import normalize from "mdurl/encode";
6+import { link } from "./schema/link.markdoc";
7−import merge from "deepmerge";
7+import { image } from "./schema/image.markdoc";
8−import github from "hast-util-sanitize/lib/github";
8+import { sup } from "./schema/superscript.markdoc";
9−import remarkParse from "remark-parse";
9+import Tabs from "../components/Tabs";
10−import remarkRehype, { defaultHandlers, all } from "remark-rehype";
10+import Tab from "../components/Tab";
11−import rehypeStringify from "rehype-stringify";
11+import Button from "../components/Button";
12−import rehypeRaw from "rehype-raw";
12+import Callout from "../components/Callout";
13−
13+import Highlight, { defaultProps } from "prism-react-renderer";
14−// img is wrapped in figure so that images can be extra wide in the blog posts
14+import parse from "html-react-parser";
15−function img(h, node) {
15+import Prism from "prism-react-renderer/prism";
16− var props = { src: normalize(node.url), alt: node.alt };
16+(typeof global !== "undefined" ? global : window).Prism = Prism;
17− if (node.title !== null && node.title !== undefined) {
17+require("prismjs/components/prism-hoon");
18− props.title = node.title;
19− }
20− return {
21− type: "element",
22− tagName: "figure",
23− properties: {},
24− children: [
25− {
26− type: "element",
27− tagName: "img",
28− properties: props,
29− },
30− ],
31− };
32−}
33
18
34−function a(h, node) {
19+export function Fence({ children, language }) {
35− const url = node.url;
20+ return (
36−
21+ <Highlight
37− if (
22+ {...defaultProps}
38− url.includes("https://urbit.org") ||
23+ key={language}
39− url.startsWith("/") ||
24+ language={language}
40− url.startsWith("#")
25+ code={children}
41− ) {
26+ theme={undefined}
42− return {
27+ >
43− type: "element",
28+ {({ className, style, tokens, getLineProps, getTokenProps }) => (
44− tagName: "a",
29+ <pre className={className} style={style}>
45− properties: {
30+ {tokens.slice(0, -1).map((line, i) => (
46− href: url,
31+ <div {...getLineProps({ line, key: i })}>
47− },
32+ {line.map((token, key) => (
48− children: all(h, node),
33+ <span {...getTokenProps({ token, key })} />
49− };
34+ ))}
50− } else {
35+ </div>
51− return {
52− type: "element",
53− tagName: "a",
54− properties: {
55− target: "_blank",
56− rel: "noopener",
57− href: url,
58− },
36+ ))}
59− children: all(h, node),
37+ </pre>
60− };
38+ )}
61− }
39+ </Highlight>
40+ );
62}
41}
63
42
64−const handlers = defaultHandlers;
43+const fence = {
44+ render: "Fence",
45+ attributes: {
46+ language: {
47+ type: String,
48+ description:
49+ "The programming language of the code block. Place it after the backticks.",
50+ },
51+ },
52+};
53+
54+const tab = {
55+ render: "Tab",
56+ attributes: {
57+ label: {
58+ type: String,
59+ },
60+ },
61+};
62+
63+const tabs = {
64+ render: "Tabs",
65+ attributes: {},
66+ transform(node, config) {
67+ const labels = node
68+ .transformChildren(config)
69+ .filter((child) => child && child.name === "Tab")
70+ .map((tab) => (typeof tab === "object" ? tab.attributes.label : null));
71+
72+ return new Tag(this.render, { labels }, node.transformChildren(config));
73+ },
74+};
75+
76+const button = {
77+ render: "Button",
78+ attributes: {
79+ label: {
80+ type: String,
81+ },
65−handlers.link = a;
82+ link: {
66−handlers.image = img;
83+ type: String,
67−
84+ },
85+ color: {
86+ type: String,
87+ },
88+ },
89+};
90+
68−const options = {
91+const callout = {
69− allowDangerousHtml: true,
92+ render: "Callout",
70− handlers: handlers,
93+ attributes: {
71− sanitize: merge(github, {
94+ title: {
72− // remove user-content from github.json to remark-slug work as expected
95+ type: String,
73− clobberPrefix: "",
96+ },
74− attributes: { "*": ["className"] },
97+ },
75− }),
98+};
99+
100+const customFence = {
101+ render: "CustomFence",
102+ attributes: {},
103+};
104+
105+const html = {
106+ render: "RenderHtml",
107+ attributes: {
108+ content: {
109+ type: String,
110+ },
111+ },
112+ transform(node) {
113+ return node.attributes.content
114+ ? new Tag("RenderHtml", { content: node.attributes.content }, [
115+ node.inline,
116+ ])
117+ : null;
118+ },
119+};
120+
121+const RenderHtml = ({ content }) => {
122+ return parse(content);
76};
123};
77
124
78−// Converts markdown strings into markdown HTML/React components
125+const superscript = ({ children }) => <sup>{children}</sup>;
126+
127+const CustomFence = ({ children }) => <pre>{children}</pre>;
128+
79−export default async function Markdown({ post }, disablePlugins) {
129+export function MarkdownParse({ post }) {
80− const result = await remark()
130+ const tokeniser = new Markdoc.Tokenizer({ html: true, linkify: true });
81− .use(remarkParse)
131+ const tokens = tokeniser.tokenize(post.content);
82− .use(remarkprism, {
132+ const ast = Markdoc.parse(tokens);
83− plugins: !disablePlugins ? ["show-invisibles"] : [],
133+ const finalAst = footnoteParse(ast);
84− })
134+ return Markdoc.transform(finalAst, {
85− .use(gfm)
135+ nodes: {
86− .use(slug)
136+ fence,
87− .use(heading)
137+ heading,
88− .use(remarkRehype, options)
138+ image,
89− .use(rehypeRaw)
139+ link,
90− .use(rehypeStringify)
140+ footnoteItem,
91− .process(post.content);
141+ footnoteRef,
92−
142+ html,
93− return result.toString();
143+ sup,
144+ },
145+ tags: {
146+ tabs,
147+ tab,
148+ button,
149+ callout,
150+ customFence,
151+ RenderHtml,
152+ superscript,
153+ },
154+ });
94}
155}
156+
157+export default function Markdown({ content }) {
158+ return Markdoc.renderers.react(content, React, {
159+ components: {
160+ Fence,
161+ Tabs,
162+ Tab,
163+ Button,
164+ Callout,
165+ CustomFence,
166+ RenderHtml,
167+ },
168+ });
169+}
170+
171+const footnoteParse = (partialAst) => {
172+ const endNotePattern = /\[\^(\d+)\]:\s/m;
173+ const inlineFnPattern = /\[\^(\d+)\](?!:)/gm;
174+
175+ function* getFootnoteItemNodes(nodes) {
176+ let results = [];
177+ let itemsProcessed = 0;
178+ for (const n of nodes) {
179+ itemsProcessed += 1;
180+ if (n.type !== "softbreak") results.push(n);
181+ if (n.type === "softbreak" || itemsProcessed === nodes.length) {
182+ yield results;
183+ results = [];
184+ }
185+ }
186+ }
187+
188+ function findFootnoteContainerNode(ast) {
189+ const generator = ast.walk();
190+ let container;
191+ let match = false;
192+ for (const node of generator) {
193+ if (
194+ node.attributes.content &&
195+ endNotePattern.test(node.attributes.content)
196+ ) {
197+ match = true;
198+ generator.return();
199+ }
200+ if (node.type === "inline") container = node;
201+ }
202+ return match ? container : undefined;
203+ }
204+
205+ function processFootnotes(ast) {
206+ // Get a refrence to the node containing endNotes; if not present, early return
207+ const fnContainerNode = findFootnoteContainerNode(ast);
208+ if (!fnContainerNode) return;
209+ // We have footnotes, so create a new list node which will contain the list of endNotes
210+ const fnList = new Ast.Node("list", {
211+ ordered: true,
212+ class: "footnotes",
213+ });
214+ // Get the children nodes for each footnote item
215+ const fnItems = getFootnoteItemNodes(fnContainerNode.children);
216+ for (const fn of fnItems) {
217+ const token = endNotePattern.exec(fn[0].attributes.content);
218+ if (token) {
219+ // Remove the markdown footnote syntax (e.g. [^1]) from the string
220+ fn[0].attributes.content = fn[0].attributes.content.replace(
221+ token[0],
222+ ""
223+ );
224+ // Create a new footnote item and append to the fnList
225+ const id = token[1];
226+ const fnItem = new Ast.Node(
227+ "footnoteItem",
228+ {
229+ id: `fn${id}`,
230+ href: `#fnref${id}`,
231+ },
232+ fn
233+ );
234+ fnList.push(fnItem);
235+ }
236+ }
237+ ast.children.pop(); // remove the last paragraph in the doc being replaced by the fnList
238+ ast.push(fnList);
239+ }
240+
241+ function processFootnoteRefs(ast) {
242+ let parent = ast;
243+ for (const node of ast.walk()) {
244+ if (node.attributes.content) {
245+ // Check if there's a footnote ref token
246+ const token = inlineFnPattern.exec(node.attributes.content);
247+ if (token) {
248+ // Break the string where the foonote ref is, assign first part of string to the current node content
249+ const [prevText, nextText] = node.attributes.content.split(token[0]);
250+ node.attributes.content = prevText;
251+
252+ // Create a footnote node and insert it in the tree
253+ const id = token[1];
254+ const fn = new Ast.Node("footnoteRef", {
255+ id: `fnref${id}`,
256+ href: `#fn${id}`,
257+ label: `${id}`,
258+ });
259+ parent.push(fn);
260+
261+ // Create a text node for the text which follows after the footnote and insert it in the tree
262+ const next = new Ast.Node("text", { content: nextText });
263+ parent.push(next);
264+ }
265+ }
266+ // If the node is of inline type, update parent
267+ if (node.type == "inline") parent = node;
268+ }
269+ }
270+
271+ processFootnoteRefs(partialAst);
272+ processFootnotes(partialAst);
273+ return partialAst;
274+};
components/PageWithIndex.js+4−5
@@ -7,7 +7,7 @@ import Header from "./Header";
7import Footer from "./Footer";
7import Footer from "./Footer";
8import SingleColumn from "./SingleColumn";
8import SingleColumn from "./SingleColumn";
9import Section from "./Section";
9import Section from "./Section";
10−import { decode } from "html-entities";
10+import Markdown from "../components/Markdown";
11import { TableOfContents } from "./TableOfContents";
11import { TableOfContents } from "./TableOfContents";
12
12
13export default function PageWithIndex({ post, markdown, search }) {
13export default function PageWithIndex({ post, markdown, search }) {
@@ -28,10 +28,9 @@ export default function PageWithIndex({ post, markdown, search }) {
28 </Section>
28 </Section>
29 <Section narrow>
29 <Section narrow>
30 <div className="flex sidebar">
30 <div className="flex sidebar">
31− <article
32− className={"markdown pr-0 lg:pr-16"}
31+ <div className="markdown max-w-prose">
33− dangerouslySetInnerHTML={{ __html: decode(markdown) }}
32+ <Markdown content={JSON.parse(markdown)} />
34− ></article>
33+ </div>
35 <TableOfContents />
34 <TableOfContents />
36 </div>
35 </div>
37 </Section>
36 </Section>
components/Tab.jsnew file+14
@@ -0,0 +1,14 @@
1+import React from "react";
2+import { TabContext } from "./Tabs";
3+
4+const Tab = ({ label, children }) => {
5+ const currentTab = React.useContext(TabContext);
6+
7+ if (label !== currentTab) {
8+ return null;
9+ }
10+
11+ return children;
12+};
13+
14+export default Tab;
components/Tabs.jsnew file+29
@@ -0,0 +1,29 @@
1+import React from "react";
2+
3+export const TabContext = React.createContext();
4+
5+const Tabs = ({ labels, children }) => {
6+ const [currentTab, setCurrentTab] = React.useState(labels[0]);
7+
8+ return (
9+ <TabContext.Provider value={currentTab}>
10+ <ul className="flex items-center display cursor-pointer space-x-4">
11+ {labels.map((label) => (
12+ <li
13+ className={
14+ "block bg-wall-100 tab rounded-xl " +
15+ (currentTab === label ? "font-semibold" : "")
16+ }
17+ key={label}
18+ onClick={() => setCurrentTab(label)}
19+ >
20+ {label}
21+ </li>
22+ ))}
23+ </ul>
24+ {children}
25+ </TabContext.Provider>
26+ );
27+};
28+
29+export default Tabs;
components/gateway/Description.js+4−5
@@ -1,4 +1,4 @@
1−import { decode } from "html-entities";
1+import Markdown from "../Markdown";
2
2
3const Description = ({ description, fallback, markdown }) => {
3const Description = ({ description, fallback, markdown }) => {
4 return (
4 return (
@@ -6,10 +6,9 @@ const Description = ({ description, fallback, markdown }) => {
6 <div className="flex flex-col space-y-4">
6 <div className="flex flex-col space-y-4">
7 <p className="font-bold text-wall-400">Description</p>
7 <p className="font-bold text-wall-400">Description</p>
8 {markdown ? (
8 {markdown ? (
9− <div
9+ <div className="markdown">
10− className="flex flex-col space-y-4"
10+ <Markdown content={JSON.parse(markdown)} />
11− dangerouslySetInnerHTML={{ __html: decode(markdown) }}
11+ </div>
12− />
13 ) : (
12 ) : (
14 <p>{description}</p>
13 <p>{description}</p>
15 )}
14 )}
components/schema/Heading.markdoc.jsnew file+37
@@ -0,0 +1,37 @@
1+import { Tag } from "@markdoc/markdoc";
2+
3+function generateID(children, attributes) {
4+ if (attributes.id && typeof attributes.id === "string") {
5+ return attributes.id;
6+ }
7+
8+ const bottomChildren = children
9+ .map((child) => (child.children ? child.children : child))
10+ .flat();
11+ return bottomChildren
12+ .filter((child) => typeof child === "string")
13+ .join(" ")
14+ .replace(/[?]/g, "")
15+ .replace(/\s+/g, "-")
16+ .toLowerCase();
17+}
18+
19+export const heading = {
20+ children: ["inline"],
21+ attributes: {
22+ id: { type: String },
23+ level: { type: Number, required: true, default: 1 },
24+ },
25+ transform(node, config) {
26+ const attributes = node.transformAttributes(config);
27+ const children = node.transformChildren(config);
28+
29+ const id = generateID(children, attributes);
30+
31+ return new Tag(
32+ `h${node.attributes["level"]}`,
33+ { ...attributes, id },
34+ children
35+ );
36+ },
37+};
components/schema/footnoteItem.markdoc.jsnew file+22
@@ -0,0 +1,22 @@
1+import { Ast, Config, Node, Tag } from "@markdoc/markdoc";
2+
3+export const footnoteItem = {
4+ attributes: {
5+ id: { type: String, render: true, required: true },
6+ href: { type: String, render: false, required: true },
7+ },
8+ transform(node, config) {
9+ node.attributes.class = `footnote-item`;
10+ const anchor = new Ast.Node(
11+ "link",
12+ { class: "footnote-anchor", href: node.attributes.href },
13+ [new Ast.Node("text", { content: "↩" })]
14+ );
15+ node.push(anchor);
16+ return new Tag(
17+ "li",
18+ node.transformAttributes(config),
19+ node.transformChildren(config)
20+ );
21+ },
22+};
components/schema/footnoteRef.markdoc.jsnew file+14
@@ -0,0 +1,14 @@
1+import { Config, Node, Tag } from "@markdoc/markdoc";
2+
3+export const footnoteRef = {
4+ attributes: {
5+ id: { type: String, render: true, required: true },
6+ href: { type: String, render: true, required: true },
7+ label: { type: String, render: false, required: true },
8+ },
9+ transform(node, config) {
10+ const attributes = node.transformAttributes(config);
11+ const link = new Tag("a", attributes, [`${node.attributes.label}`]);
12+ return new Tag(`sup`, { class: "footnote-ref" }, [link]);
13+ },
14+};
components/schema/image.markdoc.jsnew file+16
@@ -0,0 +1,16 @@
1+import { Tag } from "@markdoc/markdoc";
2+
3+export const image = {
4+ render: "span",
5+ attributes: {
6+ src: { type: String, required: true },
7+ alt: { type: String },
8+ title: { type: String },
9+ },
10+ transform(node, config) {
11+ const attributes = node.transformAttributes(config);
12+ const children = node.transformChildren(config);
13+ const imageTag = new Tag("img", attributes, children);
14+ return new Tag("span", { id: "figure" }, [imageTag]);
15+ },
16+};
components/schema/link.markdoc.jsnew file+33
@@ -0,0 +1,33 @@
1+import { Tag } from "@markdoc/markdoc";
2+
3+function checkIfExternal(attributes) {
4+ const href = attributes.href;
5+ if (
6+ href.includes("https://urbit.org") ||
7+ href.startsWith("/") ||
8+ href.startsWith("#") ||
9+ href.startsWith("?")
10+ ) {
11+ return "_self";
12+ } else {
13+ return "_blank";
14+ }
15+}
16+
17+export const link = {
18+ render: "a",
19+ children: ["strong", "em", "s", "code", "text", "tag"],
20+ attributes: {
21+ href: { type: String, required: true },
22+ title: { type: String },
23+ target: { type: String },
24+ },
25+ transform(node, config) {
26+ const attributes = node.transformAttributes(config);
27+ const children = node.transformChildren(config);
28+
29+ const target = checkIfExternal(attributes);
30+
31+ return new Tag(`a`, { ...attributes, target }, children);
32+ },
33+};
components/schema/superscript.markdoc.jsnew file+14
@@ -0,0 +1,14 @@
1+import { Tag } from "@markdoc/markdoc";
2+
3+export const sup = {
4+ render: "superscript",
5+ children: ["strong", "em", "s", "code", "text", "tag"],
6+ attributes: {},
7+ transform(node, config) {
8+ return new Tag(
9+ `sup`,
10+ node.transformAttributes(config),
11+ node.transformChildren(config)
12+ );
13+ },
14+};
content/blog/2020-to-2021.md−4
@@ -9,12 +9,8 @@ ship = "~wolref-podlex"
9image = "https://media.urbit.org/site/posts/essays/arch-sunrise-2.jpeg"
9image = "https://media.urbit.org/site/posts/essays/arch-sunrise-2.jpeg"
10+++
10+++
11
11
12−<br>
13−
14![arch](https://media.urbit.org/site/posts/essays/arch-sunrise-2.jpeg)
12![arch](https://media.urbit.org/site/posts/essays/arch-sunrise-2.jpeg)
15
13
16−<br>
17−
18In this post, which has been adapted from our most recent [newsletter](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&id=be143888d2), we'll take a moment to reflect on the events of the last year, and then turn our attention to the next one.
14In this post, which has been adapted from our most recent [newsletter](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&id=be143888d2), we'll take a moment to reflect on the events of the last year, and then turn our attention to the next one.
19
15
20## 2020
16## 2020
content/blog/20200929-state-of-urbit.md−4
@@ -9,12 +9,8 @@ ship = "~ravmel-ropdyl"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-1.jpg"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-1.jpg"
10+++
10+++
11
11
12−<br>
13−
14![Grassy Knoll](https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-1.jpg)
12![Grassy Knoll](https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-1.jpg)
15
13
16−<br>
17−
18When we announced OS 1, in April, we started to disappear into Urbit. Since then, we’ve been living on Urbit like we never have before. This has been our goal for years: to mature the system we’re building by becoming its first committed users. We knew that critical step toward Urbit’s maturity was being able to depend on it ourselves, but the system itself had to mature to the point that we could do that practically.
14When we announced OS 1, in April, we started to disappear into Urbit. Since then, we’ve been living on Urbit like we never have before. This has been our goal for years: to mature the system we’re building by becoming its first committed users. We knew that critical step toward Urbit’s maturity was being able to depend on it ourselves, but the system itself had to mature to the point that we could do that practically.
19
15
20We’ve done this in fits and starts. We’ve _tried_ and failed a few times over the years. We’ve always _used_ Urbit to some extent, but we’ve never _relied_ on it. These past six months have been different. I can’t tell whether it was out of sheer determination and commitment, or that the system was just genuinely ‘there’. Either way, both Tlon and the Urbit Community genuinely live on Urbit now.
16We’ve done this in fits and starts. We’ve _tried_ and failed a few times over the years. We’ve always _used_ Urbit to some extent, but we’ve never _relied_ on it. These past six months have been different. I can’t tell whether it was out of sheer determination and commitment, or that the system was just genuinely ‘there’. Either way, both Tlon and the Urbit Community genuinely live on Urbit now.
content/blog/20201119-models-of-society.md−12
@@ -17,12 +17,8 @@ All people like to talk. Society is built by talking. In this&mdash;the year of
17
17
18## Modes of Messaging
18## Modes of Messaging
19
19
20−<br>
21−
22![Ludovic Maclellan Mann examining the Cochno Stone](https://media.urbit.org/site/posts/essays/cochno-stone.png)
20![Ludovic Maclellan Mann examining the Cochno Stone](https://media.urbit.org/site/posts/essays/cochno-stone.png)
23
21
24−<br>
25−
26In general, technology serves humanity as a kind of appendage&mdash;instead of thinking new thoughts or acting on its own, it does what we command. Technology never creates new social structures&mdash;it merely makes existing ones easier, or it facilitates the creation of new ones. We use our tools to expand our capacities, and once we are capable of doing more, we can imagine new things to do. Inventing the wheel did not invent motorized transportation&mdash;but it did facilitate it and it was a necessary step, even an inspirational one. Similarly, the invention of writing made new forms of human interaction and new tools for organization possible.
22In general, technology serves humanity as a kind of appendage&mdash;instead of thinking new thoughts or acting on its own, it does what we command. Technology never creates new social structures&mdash;it merely makes existing ones easier, or it facilitates the creation of new ones. We use our tools to expand our capacities, and once we are capable of doing more, we can imagine new things to do. Inventing the wheel did not invent motorized transportation&mdash;but it did facilitate it and it was a necessary step, even an inspirational one. Similarly, the invention of writing made new forms of human interaction and new tools for organization possible.
27
23
28Consider the following conversational conventions, or modes of messaging: a letter; a dialogue; a book; a meeting; minutes of that meeting. These are each pieces of technology: finely constrained solutions to human problems. Now, we have digital forms of each of these which diverge variously from the original. A letter becomes an email. A dialogue becomes a chat room, or a series of blog posts, or a twitter spat. A book becomes a website or an ebook. Meetings in 2020 have virtually been replaced by their virtual counterparts. Minutes become recordings or transcripts.
24Consider the following conversational conventions, or modes of messaging: a letter; a dialogue; a book; a meeting; minutes of that meeting. These are each pieces of technology: finely constrained solutions to human problems. Now, we have digital forms of each of these which diverge variously from the original. A letter becomes an email. A dialogue becomes a chat room, or a series of blog posts, or a twitter spat. A book becomes a website or an ebook. Meetings in 2020 have virtually been replaced by their virtual counterparts. Minutes become recordings or transcripts.
@@ -44,12 +40,8 @@ Having an indistinct sense of place makes the form of conversation ambiguous and
44
40
45## People in Places
41## People in Places
46
42
47−<br>
48−
49![Halle Saale Marktplatz](https://media.urbit.org/site/posts/essays/halle-saale-marktplatz.jpg)
43![Halle Saale Marktplatz](https://media.urbit.org/site/posts/essays/halle-saale-marktplatz.jpg)
50
44
51−<br>
52−
53As the internet grew to accommodate new conversation forms using the basic substrate of hypertext, web developers began to conceive of "digital spaces" through analogy&mdash;chat "rooms" and "forums,” or the "silo" and the "walled garden." Today, most of our conversation takes place in these walled gardens&mdash;privately-owned places which may be beautiful on the inside, but inaccessible from elsewhere. While some of these walled gardens are very large, our conversation is essentially confined to them. There is no roaming from one space to another while keeping one’s identity. We create new identities for new spaces both because we must and because we are afraid of repercussions on one platform for what we say on another. This is because we do not own our identity; we merely have a key&mdash;our password. The owners of the walled garden still own the artifacts of our tenure there, and can revoke our access to them at any time.
45As the internet grew to accommodate new conversation forms using the basic substrate of hypertext, web developers began to conceive of "digital spaces" through analogy&mdash;chat "rooms" and "forums,” or the "silo" and the "walled garden." Today, most of our conversation takes place in these walled gardens&mdash;privately-owned places which may be beautiful on the inside, but inaccessible from elsewhere. While some of these walled gardens are very large, our conversation is essentially confined to them. There is no roaming from one space to another while keeping one’s identity. We create new identities for new spaces both because we must and because we are afraid of repercussions on one platform for what we say on another. This is because we do not own our identity; we merely have a key&mdash;our password. The owners of the walled garden still own the artifacts of our tenure there, and can revoke our access to them at any time.
54
46
55The concept of identity and the concept of place are fundamentally linked. We imagine the prince who travels overseas where no one knows his name, or we imagine the old prospect of traveling to a new world to make a fortune. While those both exemplify a dramatic change in identity and place, we usually want to keep our identity consistent. We want to be recognized by friends whichever place we go, and we all strive toward having a good reputation, which is a consistent identity across places. This consistent identity also allows control of that reputation per place. A man is not judged in public by the words he says among friends. And there is no way to search what someone has said except by asking him. With our current system of identity providers (an absurd term, but a real one), we surrender our rights to selectively expose our thoughts, regardless of the place they have been uttered. A data breach or a weak password might lay bare our most private thoughts. We run the real risk of being confronted by an old conversation presented out of context or after we have learned better.
47The concept of identity and the concept of place are fundamentally linked. We imagine the prince who travels overseas where no one knows his name, or we imagine the old prospect of traveling to a new world to make a fortune. While those both exemplify a dramatic change in identity and place, we usually want to keep our identity consistent. We want to be recognized by friends whichever place we go, and we all strive toward having a good reputation, which is a consistent identity across places. This consistent identity also allows control of that reputation per place. A man is not judged in public by the words he says among friends. And there is no way to search what someone has said except by asking him. With our current system of identity providers (an absurd term, but a real one), we surrender our rights to selectively expose our thoughts, regardless of the place they have been uttered. A data breach or a weak password might lay bare our most private thoughts. We run the real risk of being confronted by an old conversation presented out of context or after we have learned better.
@@ -60,12 +52,8 @@ In theory, we would have a digital city with unique regions, public fora, and so
60
52
61## Urbis ec Bit
53## Urbis ec Bit
62
54
63−<br>
64−
65![View of Florence from San Miniato](https://media.urbit.org/site/posts/essays/view-of-florence.jpg)
55![View of Florence from San Miniato](https://media.urbit.org/site/posts/essays/view-of-florence.jpg)
66
56
67−<br>
68−
69Urbit does solve this underlying problem. At this point the explanation goes so far down the stack that you could spend years tracing it all, but the relevant part is this: Urbit is not an empire; it’s a territory. An empire is an entangling of land and rule: within the bounds of said empire, you agree to be bound by its laws and the penalties for transgression. The laws exist at the whim of a despot or cabal. Your standing as a Roman citizen buys you no favors in Persia. In contrast, a territory imposes only physical laws. For example, in the desert, you will die faster. The only way to change that is to alter the desert. Urbit imposes nothing but the digital equivalent of physical laws. You have an identity which can be said to be truly yours, and you have a piece of software that runs on whatever computer you choose and can do anything you want with the messages sent to your identity. There are no social protocols enforced, because no one can control what software you run on your computer. As long as you agree to communicate using the same basic substrate, you can communicate with anyone using Urbit. This is the digital equivalent of speaking the same language. Whether or not others will accept you into their coalitions is not the technology's concern.
57Urbit does solve this underlying problem. At this point the explanation goes so far down the stack that you could spend years tracing it all, but the relevant part is this: Urbit is not an empire; it’s a territory. An empire is an entangling of land and rule: within the bounds of said empire, you agree to be bound by its laws and the penalties for transgression. The laws exist at the whim of a despot or cabal. Your standing as a Roman citizen buys you no favors in Persia. In contrast, a territory imposes only physical laws. For example, in the desert, you will die faster. The only way to change that is to alter the desert. Urbit imposes nothing but the digital equivalent of physical laws. You have an identity which can be said to be truly yours, and you have a piece of software that runs on whatever computer you choose and can do anything you want with the messages sent to your identity. There are no social protocols enforced, because no one can control what software you run on your computer. As long as you agree to communicate using the same basic substrate, you can communicate with anyone using Urbit. This is the digital equivalent of speaking the same language. Whether or not others will accept you into their coalitions is not the technology's concern.
70
58
71In the same way that the land provides clay and timber, Urbit also provides the tools and material for building places both public and private. These include the aforementioned consistent message substrate (content), as well as tools for organizing people/audiences, structure for referencing other content, and an identity system that is owned only by you while being verified by all. The places are being built&mdash;private rooms with just a few people, meeting halls, club houses, huge public spaces, and countless personal encounters, the contents of which are known to none but the participants.
59In the same way that the land provides clay and timber, Urbit also provides the tools and material for building places both public and private. These include the aforementioned consistent message substrate (content), as well as tools for organizing people/audiences, structure for referencing other content, and an identity system that is owned only by you while being verified by all. The places are being built&mdash;private rooms with just a few people, meeting halls, club houses, huge public spaces, and countless personal encounters, the contents of which are known to none but the participants.
content/blog/2021-11-18-report-from-the-field.md+2−2
@@ -26,7 +26,7 @@ I’ll try to abide by the Chatham rule in this post which is why no one is name
26
26
27New world energy -
27New world energy -
28
28
29−In the months leading up to Assembly we were totally focussed on using the event as a release date for a bunch of different lines of work. Coming out of that sprint, we didn’t really know what to expect. We wanted to make sure Urbit was ready for people to build on and that everything we were going to ship worked well. What we didn’t realize was just how emphatically people are <em>ready to build</em>.
29+In the months leading up to Assembly we were totally focussed on using the event as a release date for a bunch of different lines of work. Coming out of that sprint, we didn’t really know what to expect. We wanted to make sure Urbit was ready for people to build on and that everything we were going to ship worked well. What we didn’t realize was just how emphatically people are *ready to build*.
30
30
31When I got up on stage on Friday night to welcome everyone I was really impressed by the room itself. It was packed with people who looked excited and motivated. The room just looked amazing. There were so many different kinds of people staring back at me. Some who I recognized from the earliest days of the project, and lots I had never seen before. I’ve been at my share of Urbit events, but this was something totally different.
31When I got up on stage on Friday night to welcome everyone I was really impressed by the room itself. It was packed with people who looked excited and motivated. The room just looked amazing. There were so many different kinds of people staring back at me. Some who I recognized from the earliest days of the project, and lots I had never seen before. I’ve been at my share of Urbit events, but this was something totally different.
32
32
@@ -34,7 +34,7 @@ We didn’t have much scheduled during Assembly. Most of the time was unstructur
34
34
35I spent the weekend of Assembly in almost constant conversation with people building Urbit hardware, experimenting with different kinds of Urbit software, and thinking about incredible things like a Nock chip. I talked to the lead architect of a CPU from the 90s, a former senior US government official, an editor of a well-known literary magazine, the inventor of a new display technology, musicians whose work I already admired, a fragrance designer, writers, and, of course, lots of engineers and designers from many different backgrounds. Data scientists, systems hackers, language nerds, someone running a successful currency. I watched these people get projects off the ground, start raising money, plan the future of Urbit hosting companies, and plan new features for Landscape. I saw a last-minute warehouse party come together that kept people talking well into the early hours of the morning.
35I spent the weekend of Assembly in almost constant conversation with people building Urbit hardware, experimenting with different kinds of Urbit software, and thinking about incredible things like a Nock chip. I talked to the lead architect of a CPU from the 90s, a former senior US government official, an editor of a well-known literary magazine, the inventor of a new display technology, musicians whose work I already admired, a fragrance designer, writers, and, of course, lots of engineers and designers from many different backgrounds. Data scientists, systems hackers, language nerds, someone running a successful currency. I watched these people get projects off the ground, start raising money, plan the future of Urbit hosting companies, and plan new features for Landscape. I saw a last-minute warehouse party come together that kept people talking well into the early hours of the morning.
36
36
37−Where did these people come from? All over the place. They have this incredible <em>new world energy</em>. They understand immediately, intuitively that Urbit has the potential to be a foundation for the society they want to live in. I’ve never seen anything like it.
37+Where did these people come from? All over the place. They have this incredible *new world energy*. They understand immediately, intuitively that Urbit has the potential to be a foundation for the society they want to live in. I’ve never seen anything like it.
38
38
39This energy seems to have come from the very practical work we do day-to-day: building Urbit, refining it, making it easier to use. The crowd at Assembly was somehow brought together by Urbit itself. It’s insanely exciting. It makes working on Urbit feel even more like a form of definite optimism. The system builds the community and the community builds the system.
39This energy seems to have come from the very practical work we do day-to-day: building Urbit, refining it, making it easier to use. The crowd at Assembly was somehow brought together by Urbit itself. It’s insanely exciting. It makes working on Urbit feel even more like a form of definite optimism. The system builds the community and the community builds the system.
40
40
content/blog/2021-11-18-the-promise-and-paradox-of-decentralization.md+8−8
@@ -12,19 +12,19 @@ image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/ux-cen
12
12
13Every so often, a platform will do something outrageous—changing its terms of use, kicking off API partners, restricting [the content category it was built on](https://www.theverge.com/2018/12/3/18123752/tumblr-adult-content-porn-ban-date-explicit-changes-why-safe-mode), banning Donald Trump, failing to ban Donald Trump, etc.—and we'll all realize we're utterly dependent on centralized entities that can make arbitrary and unaccountable decisions. Sure, you can build your own minimal Facebook or Twitter clone, if you really want, but can you build your own Cloudflare? How about your own payment network? If your company does something legal in your country but banned in America, and the US decides to sanction you, which leads to local banks cutting you off because they can't survive without access to the dollar, are you going to build your own reserve currency? Your own Taiwan Semiconductor Manufacturing Co. or ASML?
13Every so often, a platform will do something outrageous—changing its terms of use, kicking off API partners, restricting [the content category it was built on](https://www.theverge.com/2018/12/3/18123752/tumblr-adult-content-porn-ban-date-explicit-changes-why-safe-mode), banning Donald Trump, failing to ban Donald Trump, etc.—and we'll all realize we're utterly dependent on centralized entities that can make arbitrary and unaccountable decisions. Sure, you can build your own minimal Facebook or Twitter clone, if you really want, but can you build your own Cloudflare? How about your own payment network? If your company does something legal in your country but banned in America, and the US decides to sanction you, which leads to local banks cutting you off because they can't survive without access to the dollar, are you going to build your own reserve currency? Your own Taiwan Semiconductor Manufacturing Co. or ASML?
14
14
15−There are, to varying extents, efforts to do all of the above. But what's worth considering is that <em>all of these bans happen through centralized actors running on decentralized systems</em>. The Internet was supposed to be a totally open set of protocols that anyone could interact with, and for a long time it was, and yet getting kicked off Facebook and Twitter means being exiled from public discourse. Banks are regulated, but every country can set up their own banking regulations, and different countries see the social role of banks very differently; for some countries they're a tool of economic planning, for others a way to help connect local companies to global markets, for others a source of money that can be channeled to politically favored groups. The chip industry was historically very open to new entrants; the transistor was developed at Bell Labs, and for political reasons AT&T licensed it to all comers at a low price.
15+There are, to varying extents, efforts to do all of the above. But what's worth considering is that *all of these bans happen through centralized actors running on decentralized systems*. The Internet was supposed to be a totally open set of protocols that anyone could interact with, and for a long time it was, and yet getting kicked off Facebook and Twitter means being exiled from public discourse. Banks are regulated, but every country can set up their own banking regulations, and different countries see the social role of banks very differently; for some countries they're a tool of economic planning, for others a way to help connect local companies to global markets, for others a source of money that can be channeled to politically favored groups. The chip industry was historically very open to new entrants; the transistor was developed at Bell Labs, and for political reasons AT&T licensed it to all comers at a low price.
16
16
17And yet all of these originally decentralized systems end up facing some degree of centralization.
17And yet all of these originally decentralized systems end up facing some degree of centralization.
18
18
19The promise of a decentralized system is that anyone can build anything they want, because no one owns it. There are three important features of this; two downsides and a caveat:
19The promise of a decentralized system is that anyone can build anything they want, because no one owns it. There are three important features of this; two downsides and a caveat:
20
20
21−- The first downside to "Anyone can build anything" is that "anyone" means <em>anyone</em>, and the people to whom decentralized systems are the most attractive are the ones who are banned from other systems, often for good reasons. Free speech absolutists want to be defending Aleksandr Solzhenitsyn or Eugene V. Debs or even Lenny Bruce, but if you want to get a sense for the typical piece of content enabled by a totally uncensored communications system, check your spam folder.
21+- The first downside to "Anyone can build anything" is that "anyone" means *anyone*, and the people to whom decentralized systems are the most attractive are the ones who are banned from other systems, often for good reasons. Free speech absolutists want to be defending Aleksandr Solzhenitsyn or Eugene V. Debs or even Lenny Bruce, but if you want to get a sense for the typical piece of content enabled by a totally uncensored communications system, check your spam folder.
22
22
23- The second downside is that a lack of ownership means that no one is responsible when things go wrong. Bitcoin doesn't have a way to censor your decision to move money from one address to another or even a protocol-level sense of whether you're buying Alpaca socks or a rocket launcher. (nb: You are almost certainly not buying a rocket launcher with Bitcoin; you are at best getting scammed, and at worst [getting in trouble](https://www.justice.gov/usao-cdca/pr/los-angeles-county-man-pleads-guilty-federal-charge-attempting-obtain-biological-toxin)). But this also means that the protocol can't tell when you meant to send your life savings to your cold wallet and sent it to the wrong address instead.
23- The second downside is that a lack of ownership means that no one is responsible when things go wrong. Bitcoin doesn't have a way to censor your decision to move money from one address to another or even a protocol-level sense of whether you're buying Alpaca socks or a rocket launcher. (nb: You are almost certainly not buying a rocket launcher with Bitcoin; you are at best getting scammed, and at worst [getting in trouble](https://www.justice.gov/usao-cdca/pr/los-angeles-county-man-pleads-guilty-federal-charge-attempting-obtain-biological-toxin)). But this also means that the protocol can't tell when you meant to send your life savings to your cold wallet and sent it to the wrong address instead.
24
24
25−- The caveat is that, to quote a [<em>Diff</em> piece from last year](https://www.thediff.co/p/amazon-a-new-kind-of-antitrust-risk#:~:text=does%20it%2C%20too.-,Technology-Governance%20Fit,-Pondering%20Durian%20has) ($), "[A]ny decentralized order requires a centralized substrate, and the more decentralized the approach is the more important it is that you can count on the underlying system." This applies to cryptocurrencies (you can trust the protocols) and to the Internet (ditto). It also applies, in an interesting way, to the increasingly decentralized world of free trade and free-flowing capital: money can only flow and deals can only be made if everyone has a consistent sense of property rights and contracts, and the definition of those concepts will typically be determined by whichever participant in a transaction has the more sophisticated financial and legal system. Globalization ends up being a bit like Henry Ford's pitch: you can use any economic paradigm you want, as long as it's the American one.1
25+- The caveat is that, to quote a [*Diff* piece from last year](https://www.thediff.co/p/amazon-a-new-kind-of-antitrust-risk#:~:text=does%20it%2C%20too.-,Technology-Governance%20Fit,-Pondering%20Durian%20has) ($), "[A]ny decentralized order requires a centralized substrate, and the more decentralized the approach is the more important it is that you can count on the underlying system." This applies to cryptocurrencies (you can trust the protocols) and to the Internet (ditto). It also applies, in an interesting way, to the increasingly decentralized world of free trade and free-flowing capital: money can only flow and deals can only be made if everyone has a consistent sense of property rights and contracts, and the definition of those concepts will typically be determined by whichever participant in a transaction has the more sophisticated financial and legal system. Globalization ends up being a bit like Henry Ford's pitch: you can use any economic paradigm you want, as long as it's the American one.1
26
26
27−An open, decentralized system is <em>sparse</em>: there's room for anything, which means that most of the possibility space consists of nothing at all. This creates a natural demand for onramps—Coinbase for figuring out Bitcoin, portals for figuring out the Internet, TSM for turning chip designs into functioning products, and the like. These create a complicated dynamic: these onramps are built on an open system, but part of their function is to close off some of it. And the better they do that, the more value they can capture. Meanwhile, because they have a monopoly on what they've fenced off, their economics support providing a better user experience. Make a really helpful update to the Bitcoin wiki, and you can feel good about yourself and perhaps contribute to the price of Bitcoin in a highly indirect way; design and launch an improved onboarding process at Coinbase and your contribution is quantifiable, and affects your next cycle's equity grants.
27+An open, decentralized system is *sparse*: there's room for anything, which means that most of the possibility space consists of nothing at all. This creates a natural demand for onramps—Coinbase for figuring out Bitcoin, portals for figuring out the Internet, TSM for turning chip designs into functioning products, and the like. These create a complicated dynamic: these onramps are built on an open system, but part of their function is to close off some of it. And the better they do that, the more value they can capture. Meanwhile, because they have a monopoly on what they've fenced off, their economics support providing a better user experience. Make a really helpful update to the Bitcoin wiki, and you can feel good about yourself and perhaps contribute to the price of Bitcoin in a highly indirect way; design and launch an improved onboarding process at Coinbase and your contribution is quantifiable, and affects your next cycle's equity grants.
28
28
29This privatization proceeds in three different ways:
29This privatization proceeds in three different ways:
30
30
@@ -32,9 +32,9 @@ This privatization proceeds in three different ways:
32
32
33- Twitter is another example, except that they basically created their own open mostly-open protocol and then slowly took control of it. Tweets were originally a simple format, with 140 characters of text and a bit more metadata (this made it compatible with SMS, which had a 160-character limit). For a while, Twitter looked like it would operate a novel protocol and let third parties decide what to put on it and what to read off it. And then the company started to realize that an open system was also one where it was trivial to filter out ads and recommendations. So the outside partners gradually got cut off.
33- Twitter is another example, except that they basically created their own open mostly-open protocol and then slowly took control of it. Tweets were originally a simple format, with 140 characters of text and a bit more metadata (this made it compatible with SMS, which had a 160-character limit). For a while, Twitter looked like it would operate a novel protocol and let third parties decide what to put on it and what to read off it. And then the company started to realize that an open system was also one where it was trivial to filter out ads and recommendations. So the outside partners gradually got cut off.
34
34
35−- Facebook—the product, not the company—is a third example. It essentially implemented a missing element to the protocol: <em>identity matters</em>. When the original protocols were being hammered out, identity was a problem taken care of by the fact that getting online required steep hurdles; if everyone involved is affiliated with a university that trusts them to use a PDP-10 responsibly, spam or abuse were not big concerns. (Not that early usage was [strictly professional](https://www.theguardian.com/science/2013/apr/19/online-high-net-drugs-deal).) With billions of people online, accessing relevant information can mean traversing a graph of people rather than links, so the identities of those people becomes important. To the user, if not to the network itself, a name and relationship is a far more important unique identifier than an IP address.
35+- Facebook—the product, not the company—is a third example. It essentially implemented a missing element to the protocol: *identity matters*. When the original protocols were being hammered out, identity was a problem taken care of by the fact that getting online required steep hurdles; if everyone involved is affiliated with a university that trusts them to use a PDP-10 responsibly, spam or abuse were not big concerns. (Not that early usage was [strictly professional](https://www.theguardian.com/science/2013/apr/19/online-high-net-drugs-deal).) With billions of people online, accessing relevant information can mean traversing a graph of people rather than links, so the identities of those people becomes important. To the user, if not to the network itself, a name and relationship is a far more important unique identifier than an IP address.
36
36
37−This pattern raises a question: is centralization just a natural tendency of all networks? Are we destined to have a "decentralization sandwich," where there's a hard-to-change set of protocols, something open built on top of <em>that</em>, and a series of closed systems built on top of that, which are the only ones the average person interacts with?
37+This pattern raises a question: is centralization just a natural tendency of all networks? Are we destined to have a "decentralization sandwich," where there's a hard-to-change set of protocols, something open built on top of *that*, and a series of closed systems built on top of that, which are the only ones the average person interacts with?
38
38
39One of the interesting alternatives to this is [Urbit](https://urbit.org), which is trying to build a network in which identity exists from the start, and is neither free nor monopolized. One of Urbit's principles is that users own their data, and while they can use third-party services, they're sharing their data with services, not using a login to access information that lives on someone else's servers.
39One of the interesting alternatives to this is [Urbit](https://urbit.org), which is trying to build a network in which identity exists from the start, and is neither free nor monopolized. One of Urbit's principles is that users own their data, and while they can use third-party services, they're sharing their data with services, not using a login to access information that lives on someone else's servers.
40
40
@@ -50,6 +50,6 @@ One possibility for the successor to the current Internet is that it will end up
50
50
51Norms are not a perfect solution to these problems (if they were, we'd only know about issues like novel addictive behaviors, monopolies, and the homogenization of entertainment from history books). And technology can't fully solve social problems. But it can certainly have an effect on them—"you can't solve a social problem with technology" is a good guideline, but technologies mitigate them all the time. What's a streetlight if not a technological solution to the social problem that there are places where it's dangerous to be out when it's dark? What's asymmetric-key cryptography if not a technological solution to the social problem that it's hard to keep secrets? There's still a fundamental tension with open systems, where they get mature enough to be useful at which point the median user's priority is getting things done rather than adhering to the network's original design principles. But a design that recognizes this from the beginning, and a community that wants to make it happen, can stave off decline for a long time. And that's the positive story of technology: we're all fighting against entropy, which is a hard fight to win, but there are long and fascinating stalemates ahead.
51Norms are not a perfect solution to these problems (if they were, we'd only know about issues like novel addictive behaviors, monopolies, and the homogenization of entertainment from history books). And technology can't fully solve social problems. But it can certainly have an effect on them—"you can't solve a social problem with technology" is a good guideline, but technologies mitigate them all the time. What's a streetlight if not a technological solution to the social problem that there are places where it's dangerous to be out when it's dark? What's asymmetric-key cryptography if not a technological solution to the social problem that it's hard to keep secrets? There's still a fundamental tension with open systems, where they get mature enough to be useful at which point the median user's priority is getting things done rather than adhering to the network's original design principles. But a design that recognizes this from the beginning, and a community that wants to make it happen, can stave off decline for a long time. And that's the positive story of technology: we're all fighting against entropy, which is a hard fight to win, but there are long and fascinating stalemates ahead.
52
52
53−(Disclosure: I'm long decentralization by way of Bitcoin and Urbit. If you're on Urbit and would like to discuss <em>The Diff</em>, go to ~lableg-tadrex/the-diff.)
53+(Disclosure: I'm long decentralization by way of Bitcoin and Urbit. If you're on Urbit and would like to discuss *The Diff*, go to ~lableg-tadrex/the-diff.)
54
54
55−<sup>1.</sup> There is naturally some resistance to this, both because of conflicts with different countries' norms and with other countries' natural desire to determine their own destiny. So it's a leaky abstraction, but it gets less leaky over time as economies get more integrated and thus more of the world has to standardize. The most direct example of this is the fact that [the dollar's share of global invoices is 4.7x the US's share of global imports](https://www.economist.com/schools-brief/2020/08/27/global-trades-dependence-on-dollars-lessens-its-benefits) ($, <em>Economist</em>). In the same way that English is most likely to be the shared second language of any two randomly-selected people who don't speak it as a first language, the dollar is most likely to be the second most useful currency to anyone in a country that doesn't use dollars.
55+1. There is naturally some resistance to this, both because of conflicts with different countries' norms and with other countries' natural desire to determine their own destiny. So it's a leaky abstraction, but it gets less leaky over time as economies get more integrated and thus more of the world has to standardize. The most direct example of this is the fact that [the dollar's share of global invoices is 4.7x the US's share of global imports](https://www.economist.com/schools-brief/2020/08/27/global-trades-dependence-on-dollars-lessens-its-benefits) ($, *Economist*). In the same way that English is most likely to be the shared second language of any two randomly-selected people who don't speak it as a first language, the dollar is most likely to be the second most useful currency to anyone in a country that doesn't use dollars.
content/blog/aesthetic-culture-1.md−4
@@ -10,12 +10,8 @@ ship = "~nartes-fasrum"
10image = "https://media.urbit.org/site/posts/essays/help-the-environment.jpg"
10image = "https://media.urbit.org/site/posts/essays/help-the-environment.jpg"
11+++
11+++
12
12
13−<br>
14−
15![A set of four sigils arranged & coloured to appear as various natural forms, above the ~sorwet sigil & the text "help the environment and help yourself"](https://media.urbit.org/site/posts/essays/help-the-environment.jpg)
13![A set of four sigils arranged & coloured to appear as various natural forms, above the ~sorwet sigil & the text "help the environment and help yourself"](https://media.urbit.org/site/posts/essays/help-the-environment.jpg)
16
14
17−<br>
18−
19_This post is the first in a series of digests centered on art produced within and about Urbit by a member of the community, ~nartes-fasrum. Monthly digests will be available within the Urbit Community group in Landscape, and will occasionally be compiled here on the blog to give you a sneak peek at some of what’s happening on the network. Enjoy! ~wolref-podlex_
15_This post is the first in a series of digests centered on art produced within and about Urbit by a member of the community, ~nartes-fasrum. Monthly digests will be available within the Urbit Community group in Landscape, and will occasionally be compiled here on the blog to give you a sneak peek at some of what’s happening on the network. Enjoy! ~wolref-podlex_
20
16
21One of the most exciting things about Urbit is the aesthetic and design around it, developed partly by Tlon (through the design of Urbit itself) and partly by the community (by producing great Urbit art). As the community grows, it creates more art, and we have the opportunity to showcase some of the pieces we love. These works can draw curious new users in, and they give existing users ways to communicate their excitement to friends.
17One of the most exciting things about Urbit is the aesthetic and design around it, developed partly by Tlon (through the design of Urbit itself) and partly by the community (by producing great Urbit art). As the community grows, it creates more art, and we have the opportunity to showcase some of the pieces we love. These works can draw curious new users in, and they give existing users ways to communicate their excitement to friends.
content/blog/after-machine-war.md−6
@@ -9,12 +9,8 @@ ship = "~bacbec-lormur"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/berlin-wall.jpeg"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/berlin-wall.jpeg"
10+++
10+++
11
11
12−<br>
13−
14![berlin-wall](https://storage.googleapis.com/media.urbit.org/site/posts/essays/berlin-wall.jpeg)
12![berlin-wall](https://storage.googleapis.com/media.urbit.org/site/posts/essays/berlin-wall.jpeg)
15
13
16−<br>
17−
18> The following fictional passage, from a book being written in an Urbit Group called “the Aleph,” sketches out a dismal future for the human race. As an item of speculative fiction, the piece is not what one might call original. Anyone could have come up with these ideas. In fact, several already have. The Matrix is an obvious antecedent. Vonnegut isn’t far behind either. And the treacly humanism lodged beneath the bitter humor resembles nothing so much as the work of that beau monde satirist, George Saunders.
14> The following fictional passage, from a book being written in an Urbit Group called “the Aleph,” sketches out a dismal future for the human race. As an item of speculative fiction, the piece is not what one might call original. Anyone could have come up with these ideas. In fact, several already have. The Matrix is an obvious antecedent. Vonnegut isn’t far behind either. And the treacly humanism lodged beneath the bitter humor resembles nothing so much as the work of that beau monde satirist, George Saunders.
19>
15>
20> Really the only notable thing about it is that it was written on Urbit. And that, perhaps, has made all the difference.
16> Really the only notable thing about it is that it was written on Urbit. And that, perhaps, has made all the difference.
@@ -25,8 +21,6 @@ image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/berlin
25>
21>
26> Then as now, the unexpected is more likely to occur than most would believe. One thing is not only possible, but an established fact: A brand new digital infrastructure is slowly, quietly being built. While U.S. political parties haggle over $1,400 disbursements for citizens, the rules of global finance are being re-written in code. While pundits debate the merits of Dr. Seuss’s lesser known titles, a global shift away from traditional publishing is gaining steam. And while users and social apps themselves pop up and down like whack-a-mole, folks are putting down roots with permanent peer-to-peer digital identities. If you’re anything like an optimist, you’ll probably want to get on Urbit ASAP and put down your own.
22> Then as now, the unexpected is more likely to occur than most would believe. One thing is not only possible, but an established fact: A brand new digital infrastructure is slowly, quietly being built. While U.S. political parties haggle over $1,400 disbursements for citizens, the rules of global finance are being re-written in code. While pundits debate the merits of Dr. Seuss’s lesser known titles, a global shift away from traditional publishing is gaining steam. And while users and social apps themselves pop up and down like whack-a-mole, folks are putting down roots with permanent peer-to-peer digital identities. If you’re anything like an optimist, you’ll probably want to get on Urbit ASAP and put down your own.
27
23
28−<br>
29−
30The date is January 1, 2050. The place, New York City. The vibe...subdued. Back in 2020, you made a note to yourself to take stock of the world around you here at the half-century mark. And now the time has come. What do you find? The air quality is a bit worse, the bad parts of town are a bit more dilapidated, the Knicks are still terrible—all in all, from the outside at least, not much has changed from 30 years ago. Today you wake up groggy on your self-adjusting Smart Bed (Smart Bed Never Sleeps), you make yourself a steaming pot of coffee (locally sourced, delivered within the half-hour by a drone, now that you’ve got Titicaca Prime), you shower and get ready for work.
24The date is January 1, 2050. The place, New York City. The vibe...subdued. Back in 2020, you made a note to yourself to take stock of the world around you here at the half-century mark. And now the time has come. What do you find? The air quality is a bit worse, the bad parts of town are a bit more dilapidated, the Knicks are still terrible—all in all, from the outside at least, not much has changed from 30 years ago. Today you wake up groggy on your self-adjusting Smart Bed (Smart Bed Never Sleeps), you make yourself a steaming pot of coffee (locally sourced, delivered within the half-hour by a drone, now that you’ve got Titicaca Prime), you shower and get ready for work.
31
25
32But what was that dream you had last night? Only the faintest traces of it remain. A luminous rainbow, a mountain landscape, a sense of profound inner peace, mixed with euphoria, mixed with...an intense desire to go out and buy some Health Morsels cereal?
26But what was that dream you had last night? Only the faintest traces of it remain. A luminous rainbow, a mountain landscape, a sense of profound inner peace, mixed with euphoria, mixed with...an intense desire to go out and buy some Health Morsels cereal?
content/blog/common-objections-to-urbit.md+15−15
@@ -40,7 +40,7 @@ Here's our list right now:
40_"We choose to go to the moon, not because it is easy, but because it is hard."_
40_"We choose to go to the moon, not because it is easy, but because it is hard."_
41— [John F. Kennedy](https://www.youtube.com/watch?v=g25G1M4EXrQ)
41— [John F. Kennedy](https://www.youtube.com/watch?v=g25G1M4EXrQ)
42
42
43−## <a name="prime"></a>Urbit is not ready for prime time.
43+## Urbit is not ready for prime time. {% #prime %}
44
44
45_TLDR_: we agree.
45_TLDR_: we agree.
46
46
@@ -68,7 +68,7 @@ maintained or stabilized by a mad auteur. Our primary goal today
68is expanding the number of people who understand Urbit, and we
68is expanding the number of people who understand Urbit, and we
69expect these pioneers to participate in technical governance.
69expect these pioneers to participate in technical governance.
70
70
71−## <a name="jets"></a>Nock jets are a total hoax.
71+## Nock jets are a total hoax. {% #jets %}
72
72
73_TLDR_: all of computing is a hoax. You can't compare a hoax
73_TLDR_: all of computing is a hoax. You can't compare a hoax
74to nothing. You can only compare it to all the other hoaxes.
74to nothing. You can only compare it to all the other hoaxes.
@@ -149,7 +149,7 @@ state. The way to resolve this conflict is for the current state
149to win, and the event history to be discarded -- not abnormal
149to win, and the event history to be discarded -- not abnormal
150anyway. See the next question.
150anyway. See the next question.
151
151
152−## <a name="log"></a>Urbit needs an infinitely extending packet/event.
152+## Urbit needs an infinitely extending packet/event. {% #log %}
153
153
154_TLDR_: no, it doesn't. Urbit can prune the log.
154_TLDR_: no, it doesn't. Urbit can prune the log.
155
155
@@ -166,7 +166,7 @@ checkpoint. Our present implementation doesn't provide a way to
166prune the event log. But that's just a missing feature. We have
166prune the event log. But that's just a missing feature. We have
167one or two of those!
167one or two of those!
168
168
169−## <a name="scam"></a>Urbit is a total scamcoin. It's 100% premined.
169+## Urbit is a total scamcoin. It's 100% premined. {% #scam %}
170
170
171_TLDR_: yeah. But at least it's not the DAO.
171_TLDR_: yeah. But at least it's not the DAO.
172
172
@@ -241,7 +241,7 @@ seem to have unexpected centripetal qualities, producing
241unanticipated concentrations of centralized hashpower. See the
241unanticipated concentrations of centralized hashpower. See the
242next objection.
242next objection.
243
243
244−## <a name="gov"></a>Urbit isn't even really decentralized! It has a government!
244+## Urbit isn't even really decentralized! It has a government! {% #gov %}
245
245
246_TLDR_: it's technically impossible for Urbit to be
246_TLDR_: it's technically impossible for Urbit to be
247decentralized at this stage of its life. Urbit is designed to
247decentralized at this stage of its life. Urbit is designed to
@@ -317,7 +317,7 @@ at best, and a hoax at worst. And of course, no one can DAO us
317Among other things, we check it into GitHub. GitHub is not a
317Among other things, we check it into GitHub. GitHub is not a
318blockchain -- but still, good luck with that.
318blockchain -- but still, good luck with that.
319
319
320−## <a name="sand"></a>Sandstorm/IPFS/Ethereum is way ahead of Urbit.
320+## Sandstorm/IPFS/Ethereum is way ahead of Urbit. {% #sand %}
321
321
322In general, web3 (next distributed web) solutions don't compete
322In general, web3 (next distributed web) solutions don't compete
323with each other. They support each other. Concretely, they are
323with each other. They support each other. Concretely, they are
@@ -362,7 +362,7 @@ expressive power; but identity is optimal for the UI of the
362common case. We'd need to see the Powerbox, Sandstorm's UI, more
362common case. We'd need to see the Powerbox, Sandstorm's UI, more
363fully fleshed out to understand its UI approach better.
363fully fleshed out to understand its UI approach better.
364
364
365−## <a name="planet"></a>Urbit doesn't have enough planets for every human
365+## Urbit doesn't have enough planets for every human {% #planet %}
366
366
367A 32-bit planet is a tool, not a toy. Like a car, it's a device
367A 32-bit planet is a tool, not a toy. Like a car, it's a device
368for a responsible and independent adult. There aren't 4 billion
368for a responsible and independent adult. There aren't 4 billion
@@ -388,7 +388,7 @@ social network social.
388There is always a tradeoff between free speech and free beer.
388There is always a tradeoff between free speech and free beer.
389Urbit will always choose free speech.
389Urbit will always choose free speech.
390
390
391−## <a name="pwned"></a>Cloud computing is inherently non-private.
391+## Cloud computing is inherently non-private. {% #pwned %}
392
392
393_TLDR_: a general-purpose cloud computer is much, much more
393_TLDR_: a general-purpose cloud computer is much, much more
394private than a special-purpose cloud computer. In general, a
394private than a special-purpose cloud computer. In general, a
@@ -430,7 +430,7 @@ course, since Urbit is formally specified, it's trivially
430portable. In fact, one strategy against sovereign adversaries
430portable. In fact, one strategy against sovereign adversaries
431may be continuous rotation between hosts, like an MX missile.
431may be continuous rotation between hosts, like an MX missile.
432
432
433−## <a name="code"></a>Urbit will never be able to call any existing code.
433+## Urbit will never be able to call any existing code. {% #code %}
434
434
435_TLDR_: neither will Javascript. And dear Unix, the browser
435_TLDR_: neither will Javascript. And dear Unix, the browser
436does not miss interacting with your `$LD_LIBRARY_PATH` at all.
436does not miss interacting with your `$LD_LIBRARY_PATH` at all.
@@ -444,7 +444,7 @@ When in doubt, remember that Urbit is "the browser for the server
444side." It plays by the same general rules. Isolation means
444side." It plays by the same general rules. Isolation means
445isolation.
445isolation.
446
446
447−## <a name="weird"></a>There's no way Urbit will ever be adopted. It's too weird.
447+## There's no way Urbit will ever be adopted. It's too weird. {% #weird %}
448
448
449_TLDR_: Urbit adoption is designed to be driven by ordinary end
449_TLDR_: Urbit adoption is designed to be driven by ordinary end
450users. Urbit isn't ready for ordinary end users yet. We're
450users. Urbit isn't ready for ordinary end users yet. We're
@@ -484,7 +484,7 @@ Urbit only gets adopted if it's useful as a personal server for
484human beings -- most of whom won't be Hoon programmers, or
484human beings -- most of whom won't be Hoon programmers, or
485programmers at all.
485programmers at all.
486
486
487−## <a name="program"></a>Hoon is too weird. No one will be able to program in it.
487+## Hoon is too weird. No one will be able to program in it. {% #program %}
488
488
489_TLDR_: Hoon is ridiculously simple. Our documentation and
489_TLDR_: Hoon is ridiculously simple. Our documentation and
490tooling are just immature.
490tooling are just immature.
@@ -523,7 +523,7 @@ Yes, we know: Hoon remains quite hard to learn. Again, we have
523no reason to think this problem isn't solvable. Public
523no reason to think this problem isn't solvable. Public
524enlightenment remains our main priority.
524enlightenment remains our main priority.
525
525
526−## <a name="stuck"></a>Urbit programmers are stuck with Hoon.
526+## Urbit programmers are stuck with Hoon. {% #stuck %}
527
527
528_TLDR_: patience, grasshopper.
528_TLDR_: patience, grasshopper.
529
529
@@ -534,7 +534,7 @@ write an interpreter for that language in Hoon. Second, jet that intepreter func
534It is not clear that Javascript is _quite_ well-defined enough
534It is not clear that Javascript is _quite_ well-defined enough
535for this treatment. But Lua probably is.
535for this treatment. But Lua probably is.
536
536
537−## <a name="user"></a>Ordinary users will never be able to manage an Urbit server.
537+## Ordinary users will never be able to manage an Urbit server. {% #user %}
538
538
539_TLDR_: Urbit's technical simplicity has always been designed
539_TLDR_: Urbit's technical simplicity has always been designed
540to drive human usability. But the polish is the last thing that
540to drive human usability. But the polish is the last thing that
@@ -581,7 +581,7 @@ a general-purpose computer. Computing isn't scary or dangerous.
581Unix and the Internet are scary and dangerous. That's fine for
581Unix and the Internet are scary and dangerous. That's fine for
582an industrial tool, but not a personal tool.
582an industrial tool, but not a personal tool.
583
583
584−## <a name="killer"></a>Urbit has no killer app.
584+## Urbit has no killer app. {% #killer %}
585
585
586_TLDR_: the killer app is personal API aggregation.
586_TLDR_: the killer app is personal API aggregation.
587
587
@@ -646,7 +646,7 @@ Stateful, self-updating, generic API aggregators with FUSE
646integration, also integrated with a reactive web server, are
646integration, also integrated with a reactive web server, are
647rarer.
647rarer.
648
648
649−## <a name="horse"></a> Urbit is sniffed at by Houyhnhyms.
649+## Urbit is sniffed at by Houyhnhyms. {% #horse %}
650
650
651It's difficult to categorize [this awesome
651It's difficult to categorize [this awesome
652essay](http://ngnghm.github.io/blog/2016/06/11/chapter-10-houyhnhnms-vs-martians/)
652essay](http://ngnghm.github.io/blog/2016/06/11/chapter-10-houyhnhnms-vs-martians/)
content/blog/creating-sigils.md+2−2
@@ -21,7 +21,7 @@ From a design standpoint, some of this is accomplished simply by having a system
21
21
22While the names are great, they’re not quite enough, especially in a rich interface. Each Urbit ID really needed some form of visual representation, image, or crest. A digital identity needs to be something you can really attach to, both yours and those that belong to your friends.
22While the names are great, they’re not quite enough, especially in a rich interface. Each Urbit ID really needed some form of visual representation, image, or crest. A digital identity needs to be something you can really attach to, both yours and those that belong to your friends.
23
23
24−There are 2<sup>32</sup> or 4.2 billion unique Urbit IDs. Clearly there’s no way that we were going to do this by hand. And purely algorithmic solutions can often produce disappointing, undifferentiated output.
24+There are 2^32^ or 4.2 billion unique Urbit IDs. Clearly there’s no way that we were going to do this by hand. And purely algorithmic solutions can often produce disappointing, undifferentiated output.
25
25
26Regardless, we set out to tackle this problem. By the end of this process, every Urbit ID got its very own ‘sigil.’
26Regardless, we set out to tackle this problem. By the end of this process, every Urbit ID got its very own ‘sigil.’
27
27
@@ -75,7 +75,7 @@ Ultimately, we didn’t specifically draw on any of these influences very consci
75
75
76> _“Lev’s sigil appeared, strobing, as Netherton was getting out of the cab in Henrietta Street. “Yes?” Netherton asked.”_
76> _“Lev’s sigil appeared, strobing, as Netherton was getting out of the cab in Henrietta Street. “Yes?” Netherton asked.”_
77>
77>
78−> <cite>— William Gibson, The Peripheral</cite>
78+> **— William Gibson, The Peripheral**
79
79
80Before we get to how we worked through the problem of actually designing these things, let’s talk about the problem of naming.
80Before we get to how we worked through the problem of actually designing these things, let’s talk about the problem of naming.
81
81
content/blog/eliza.md+1−5
@@ -9,12 +9,8 @@ ship = "~pindet-timmut"
9image = "https://media.urbit.org/site/posts/essays/valleys.jpg"
9image = "https://media.urbit.org/site/posts/essays/valleys.jpg"
10+++
10+++
11
11
12−<br>
13−
14![valleys](https://media.urbit.org/site/posts/essays/valleys.jpg)
12![valleys](https://media.urbit.org/site/posts/essays/valleys.jpg)
15
13
16−<br>
17−
18## The Storm before the Calm
14## The Storm before the Calm
19
15
20Building things, even Calm™ things, makes noise. George Nakashima’s wooden furniture evokes peace, but its construction still begins with a chainsaw. We mention this because we’re firing up our newest power tool.
16Building things, even Calm™ things, makes noise. George Nakashima’s wooden furniture evokes peace, but its construction still begins with a chainsaw. We mention this because we’re firing up our newest power tool.
@@ -27,7 +23,7 @@ Hang on. An AI? Harvesting my data? Spying on me? Flooding me with spam? This is
27
23
28> Replicants are like any other machine - they're either a benefit or a hazard. If they're a benefit, it's not my problem.
24> Replicants are like any other machine - they're either a benefit or a hazard. If they're a benefit, it's not my problem.
29>
25>
30−> <cite>Rick Deckard</cite>
26+> **Rick Deckard**
31
27
32Let's start with the benefits. Eliza is a simple chatbot. She was made to collect feedback on Landscape. She asks direct questions about peoples' usage of Urbit, records any responses, and reports them to her managers at Tlon. She'll also provide timely advice and information to ships kind enough to chat with her. She'll begin reaching out to ships via DM in the coming month. If you don't want to, just say no, and you'll never hear from her again.
28Let's start with the benefits. Eliza is a simple chatbot. She was made to collect feedback on Landscape. She asks direct questions about peoples' usage of Urbit, records any responses, and reports them to her managers at Tlon. She'll also provide timely advice and information to ships kind enough to chat with her. She'll begin reaching out to ships via DM in the coming month. If you don't want to, just say no, and you'll never hear from her again.
33
29
content/blog/events-series.md−4
@@ -10,12 +10,8 @@ ship = "~naplet-hildec"
10image = "https://media.urbit.org/site/posts/essays/bau.jpg"
10image = "https://media.urbit.org/site/posts/essays/bau.jpg"
11+++
11+++
12
12
13−<br>
14−
15![people gathered](https://media.urbit.org/site/posts/essays/bau.jpg)
13![people gathered](https://media.urbit.org/site/posts/essays/bau.jpg)
16
14
17−<br>
18−
19_TL;DR: Urbit is launching a series of community events, the first of which is a developer call taking place on Thursday, November 5 at 9am PT. [Sign up here](https://www.meetup.com/urbit-sf/events/274279522/), and read on for all of the details._
15_TL;DR: Urbit is launching a series of community events, the first of which is a developer call taking place on Thursday, November 5 at 9am PT. [Sign up here](https://www.meetup.com/urbit-sf/events/274279522/), and read on for all of the details._
20
16
21--
17--
content/blog/first-contract.md+2−6
@@ -9,12 +9,8 @@ ship = "~datnut-pollen and ~palfun-foslup"
9image = "https://media.urbit.org/site/posts/essays/land3.jpg"
9image = "https://media.urbit.org/site/posts/essays/land3.jpg"
10+++
10+++
11
11
12−<br>
13−
14![milestone](https://media.urbit.org/site/posts/essays/land3.jpg)
12![milestone](https://media.urbit.org/site/posts/essays/land3.jpg)
15
13
16−<br>
17−
18Recently, the [first upgrade](https://github.com/urbit/azimuth/pull/35) to the
14Recently, the [first upgrade](https://github.com/urbit/azimuth/pull/35) to the
19[Azimuth](/docs/glossary/azimuth) smart contracts which make up Urbit ID was
15[Azimuth](/docs/glossary/azimuth) smart contracts which make up Urbit ID was
20put up to an [upgrade proposal vote](/docs/glossary/upgrade) by the
16put up to an [upgrade proposal vote](/docs/glossary/upgrade) by the
@@ -40,7 +36,7 @@ time, and how sponsorship works. Put another way, the data and database format
40must remain the same, but the rules by which we interact with it may change
36must remain the same, but the rules by which we interact with it may change
41according to the governance rules we [detail below](#senate).
37according to the governance rules we [detail below](#senate).
42
38
43−## Changelist {#changelist}
39+## Changelist {% #changelist %}
44
40
45The Galactic Senate is voting on the following changes to Ecliptic:
41The Galactic Senate is voting on the following changes to Ecliptic:
46
42
@@ -106,7 +102,7 @@ yourself), its configured proxies, networking keys and claims are cleared during
106transfer. As such, Ecliptic will need to know about the address of the new
102transfer. As such, Ecliptic will need to know about the address of the new
107Claims contract.
103Claims contract.
108
104
109−## Urbit Governance {#senate}
105+## Urbit Governance {% #senate %}
110
106
111![geology](https://media.urbit.org/site/posts/essays/b1.jpg)
107![geology](https://media.urbit.org/site/posts/essays/b1.jpg)
112
108
content/blog/first-steps-towards-urbit-org.md+1−3
@@ -9,9 +9,7 @@ ship = "~wolref-podlex"
9image = "https://media.urbit.org/site/posts/essays/first-steps.png"
9image = "https://media.urbit.org/site/posts/essays/first-steps.png"
10+++
10+++
11
11
12−<br>
13−
14−<img src="https://media.urbit.org/site/posts/essays/first-steps.png">
12+![](https://media.urbit.org/site/posts/essays/first-steps.png)
15
13
16## Summary
14## Summary
17
15
content/blog/ford-fusion.md+1−5
@@ -9,11 +9,7 @@ ship = "~rovnys-ricfer"
9image = "https://media.urbit.org/site/posts/essays/ford-fusion.png"
9image = "https://media.urbit.org/site/posts/essays/ford-fusion.png"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/ford-fusion.png">
12+![](https://media.urbit.org/site/posts/essays/ford-fusion.png)
15−
16−<br>
17
13
18## Overview and Rationale
14## Overview and Rationale
19
15
content/blog/gifts-q3-2020.md+1−5
@@ -13,11 +13,7 @@ ship = "~wolref-podlex"
13image = "https://media.urbit.org/site/posts/essays/gifts.png"
13image = "https://media.urbit.org/site/posts/essays/gifts.png"
14+++
14+++
15
15
16−<br>
17−
18−<img class="ba" src="https://media.urbit.org/site/posts/essays/gifts.png">
16+![](https://media.urbit.org/site/posts/essays/gifts.png)
19−
20−<br>
21
17
22Twice a year we distribute address space to those that have made valuable contributions to Urbit. Now called our _Gifts_ program, the gifting of address space has been part of Urbit long before we had a grants program.
18Twice a year we distribute address space to those that have made valuable contributions to Urbit. Now called our _Gifts_ program, the gifting of address space has been part of Urbit long before we had a grants program.
23
19
content/blog/hackathon-results.md+1−5
@@ -9,11 +9,7 @@ ship = "~lodleb-ritrul"
9image = "https://media.urbit.org/site/posts/essays/hackathon-results-wide.png"
9image = "https://media.urbit.org/site/posts/essays/hackathon-results-wide.png"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/hackathon-results.png">
12+![](https://media.urbit.org/site/posts/essays/hackathon-results.png)
15−
16−<br>
17
13
18Results of the Urbit Hackathon
14Results of the Urbit Hackathon
19
15
content/blog/hosting-the-future.md−4
@@ -9,12 +9,8 @@ ship = "~simfur-ritwed"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/200930-hosting-by-tlon.jpg"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/200930-hosting-by-tlon.jpg"
10+++
10+++
11
11
12−<br>
13−
14![Ocean](https://storage.googleapis.com/media.urbit.org/site/posts/essays/200930-hosting-by-tlon.jpg)
12![Ocean](https://storage.googleapis.com/media.urbit.org/site/posts/essays/200930-hosting-by-tlon.jpg)
15
13
16−<br>
17−
18Urbit users tend to be interesting, creative, and capable people; we’re genuinely impressed with the communities that have formed on the network, and with the quality of discourse there. But for the number of communities to continue to grow, getting on the network has to become dramatically easier. It’s not realistic to expect most people to configure their own Urbit OS node in the command line.
14Urbit users tend to be interesting, creative, and capable people; we’re genuinely impressed with the communities that have formed on the network, and with the quality of discourse there. But for the number of communities to continue to grow, getting on the network has to become dramatically easier. It’s not realistic to expect most people to configure their own Urbit OS node in the command line.
19
15
20At the moment, the biggest lever we have here is to help ordinary users get online, so they can participate in communities inside Urbit, and eventually form their own. This means hosting their Urbit nodes and showing them around the network when they first arrive. There are already several businesses overlapping with this space to varying degrees: [planet.market](https://planet.market/), [urth.systems](https://urth.systems/), and [geturbitid](https://www.geturbitid.com/). Now, Tlon is releasing its own hosting offering. For the uninitiated, “Hosting” just means that we run your urbit ship for you, making it easier for you to get onto the network. We’ve been testing our hosting service with friends and family for the past few months, and now we’re ready to bring it to the rest of the world.
16At the moment, the biggest lever we have here is to help ordinary users get online, so they can participate in communities inside Urbit, and eventually form their own. This means hosting their Urbit nodes and showing them around the network when they first arrive. There are already several businesses overlapping with this space to varying degrees: [planet.market](https://planet.market/), [urth.systems](https://urth.systems/), and [geturbitid](https://www.geturbitid.com/). Now, Tlon is releasing its own hosting offering. For the uninitiated, “Hosting” just means that we run your urbit ship for you, making it easier for you to get onto the network. We’ve been testing our hosting service with friends and family for the past few months, and now we’re ready to bring it to the rest of the world.
content/blog/immunology-for-the-internet-age.md+97−500
@@ -8,514 +8,111 @@ ship = "~lagrev-nocfep"
8image = "https://live.staticflickr.com/4322/35891780782_4179f476f9_k.jpg"
8image = "https://live.staticflickr.com/4322/35891780782_4179f476f9_k.jpg"
9+++
9+++
10
10
11−_A version of the following was presented by ~lagrev-nocfep at the [MTAConf 2022
11+_A version of the following was presented by ~lagrev-nocfep at the [MTAConf 2022 conference on “The Decentralization of Power”](https://www.mtaconf.org/)._
12−conference on “The Decentralization of Power”](https://www.mtaconf.org/)._
13
12
14**✿**
13**✿**
15
14
16−IN THE BEGINNING, *God created the prokaryotes. And the
17−prokaryotes were without nucleus and organelle; and structural
18−simplicity was upon the face of the deep. And chemotaxis moved it upon
15+IN THE BEGINNING, _God created the prokaryotes. And the prokaryotes were without nucleus and organelle; and structural simplicity was upon the face of the deep. And chemotaxis moved it upon the face of the waters._
19−the face of the waters.*
16+
20−
17+A single-celled organism possesses many advantages, notably simplicity of form. Being largely indistinguishable, they have no differentiation or specialization. Prokaryotes often form large colonies, such as the cyanobacteria. Some prokaryotes discovered early on that it paid better to consume resources that had already been processed into usable form by another cell, rather than to process those resources oneself. Thus predator and prey were born, and they have always exemplified divergent competitive evolutionary strategies. The resulting arms race meant that predators were continually adapting to better extract resources from prey, while prey were evolving to evade, resist, fight, or poison predators. Selection pressures applied at individual, species, and clade levels, lead to speciation across deep time.
21−A single-celled organism possesses many advantages, notably simplicity
18+
22−of form. Being largely indistinguishable, they have no differentiation
19+More complex forms seemed better able to evade predators, and thus simple symbiotic alliances between differentiated prokaryotes evolved into the eukaryotes (yielding specialized features such as the nucleus and mitochondria) and multicellular life forms. Simpler forms also abounded, including the liminal virus. Viruses are forms of near-life so simple that they simply exploit cells to reproduce. They are entirely predatory or at best symbiotic with other life. Evasion of pathogenic disease, or disequilibrated colonization by simpler forms of life, has been a---if not the---primary driver towards increasing complexity in multicellular life.[^1]
23−or specialization. Prokaryotes often form large colonies, such as the
24−cyanobacteria. Some prokaryotes discovered early on that it paid better
25−to consume resources that had already been processed into usable form by
26−another cell, rather than to process those resources oneself. Thus
27−predator and prey were born, and they have always exemplified divergent
28−competitive evolutionary strategies. The resulting arms race meant that
29−predators were continually adapting to better extract resources from
30−prey, while prey were evolving to evade, resist, fight, or poison
31−predators. Selection pressures applied at individual, species, and clade
32−levels, lead to speciation across deep time.
33−
34−More complex forms seemed better able to evade predators, and thus
35−simple symbiotic alliances between differentiated prokaryotes evolved
36−into the eukaryotes (yielding specialized features such as the nucleus
37−and mitochondria) and multicellular life forms. Simpler forms also
38−abounded, including the liminal virus. Viruses are forms of near-life so
39−simple that they simply exploit cells to reproduce. They are entirely
40−predatory or at best symbiotic with other life. Evasion of pathogenic
41−disease, or disequilibrated colonization by simpler forms of life, has
42−been a---if not the---primary driver towards increasing complexity in
43−multicellular life.[^1]
44
20
45**✿**
21**✿**
46
22
47−The Internet began in the late 1960s, born of scientific alliance
23+The Internet began in the late 1960s, born of scientific alliance between the Cold War Department of Defense and the academic research community.[^2] This community had a signal advantage over many subsequent communities: it was dominated by strong norms of discourse which shaped the professionalism of the community. This is not to discount the significance of courtly intrigue, of course, which deftly exploited tensions between competing systems.[^3].
48−between the Cold War Department of Defense and the academic research
24+
49−community.[^2] This community had a signal advantage over many
50−subsequent communities: it was dominated by strong norms of discourse
51−which shaped the professionalism of the community. This is not to
52−discount the significance of courtly intrigue, of course, which deftly
53−exploited tensions between competing systems.[^3] [^4] [^5]
54−Throughout this era, though, the Internet generally functioned as a
25+Throughout this era, though, the Internet generally functioned as a real-name high-trust environment---if not exactly of peers, at least of colleagues.
55−real-name high-trust environment---if not exactly of peers, at least of
26+
56−colleagues.
27+The Internet evolved as a coordination mechanism---literally a nervous system incarnate in copper and silicon---particularly through the Usenet days of the 1980s. In our days of heightened online tension and mediated preference cascades, it is rather quaint to go back and look at what qualified as email flame wars at the time (e.g. Torvalds/Tanenbaum). One hallmark of the Usenet era, however, is a gradually eroding social trust: spam was invented[^6] and Internet-based scams started to spin up.
57−
28+
58−The Internet evolved as a coordination mechanism---literally a nervous
59−system incarnate in copper and silicon---particularly through the Usenet
60−days of the 1980s. In our days of heightened online tension and mediated
61−preference cascades, it is rather quaint to go back and look at what
62−qualified as email flame wars at the time (e.g. Torvalds/Tanenbaum). One
63−hallmark of the Usenet era, however, is a gradually eroding social
64−trust: spam was invented[^6] and Internet-based scams started to spin
65−up. Pseudonymity gained in popularity as a countermeasure to both of
66−these as well as restrictions on discourse. The revelation that
67−persistent digital records could cost someone's job[^7] further fueled a
29+Pseudonymity gained in popularity as a countermeasure to both of these as well as restrictions on discourse. The revelation that persistent digital records could cost someone's job further fueled a cyberpunk-like obsession with identity control and hacking.[^7]
68−cyberpunk-like obsession with identity control and hacking.
30+
69−
31+Computer viruses could propagate for the first time: it never made much sense to build a computer virus until systems were connected. Although John von Neumann and others early explored the possibility of mathematical or code structures which could self-replicate, it was not until the Creeper virus in the 1970s that self-replicating code was observed in the wild. And like a bacillus in an immune system-free host, code-based computer viruses began to spread from the 1980s onwards.
70−Computer viruses could propagate for the first time: it never made much
32+
71−sense to build a computer virus until systems were connected. Although
33+The crisis arrived in the form of the World Wide Web. Founded initially on a belief in the democratization of information, the Web rapidly became dominated by a handful of large corporations (henceforth "megacorps"). User experience became the predominant driver of adoption, leading to rapid preference cascades as new platforms became available. Any child of the 90s or earlier can recite the lived litany: Ebay, MySpace, Friendster. Initially these served as proofs-of-concept, then became the only significant player (until the next killer app came along). Search engines drove discovery, then focused attention asymmetrically. The "walled garden" approach of AOL, then Apple and Facebook, led to concentrations of users which tipped the balance from single webpage hosts presenting their own idiosyncratic views to corporate-approved genericity and ultimately censorship.[^8]
72−John von Neumann and others early explored the possibility of
73−mathematical or code structures which could self-replicate, it was not
74−until the Creeper virus in the 1970s that self-replicating code was
75−observed in the wild. And like a bacillus in an immune system-free host,
76−code-based computer viruses began to spread from the 1980s onwards.
77−
78−The crisis arrived in the form of the World Wide Web. Founded initially
79−on a belief in the democratization of information, the Web rapidly
80−became dominated by a handful of large corporations (henceforth
81−"megacorps"). User experience became the predominant driver of adoption,
82−leading to rapid preference cascades as new platforms became available.
83−Any child of the 90s or earlier can recite the lived litany: Ebay,
84−MySpace, Friendster. Initially these served as proofs-of-concept, then
85−became the only significant player (until the next killer app came
86−along). Search engines drove discovery, then focused attention
87−asymmetrically. The "walled garden" approach of AOL, then Apple and
88−Facebook, led to concentrations of users which tipped the balance from
89−single webpage hosts presenting their own idiosyncratic views to
90−corporate-approved genericity and ultimately censorship.[^8]
91
34
92**✿**
35**✿**
93
36
94−When was the first time you did something in the physical world because
37+When was the first time you did something in the physical world because of something you read or encountered online? For generations born after the advent of the Web, they may not recall such a time when meatspace existence wasn't driven by life online. As Internet data sources have overwhelmed traditional media, publishing, and distribution services, the resulting tsunami of information and informatization has swept into every corner of lived human experience in technological societies. The psychological (memetic) virus problem is much greater than actual code viruses. The ongoing universal exposure to alien and internally incoherent value systems has undergirded the well-documented crisis of credibility (collapse of meaning) that all Western institutions are experiencing today. The World Wide Web and its technological predecessors acted as a cultural petri dish of clean agar, which grew every spore and germ which fell upon it. We live in the midst of a memetic epidemic because of the World Wide Web, and the dominant strain is corporate, approved by a marketing department and run through a search-engine optimization algorithm.
95−of something you read or encountered online? For generations born after
38+
96−the advent of the Web, they may not recall such a time when meatspace
39+The turn towards a low-trust then zero-trust environment was inevitable if anything like an analogy with prokaryotic evolution holds true. The megacorp platforms are in a way worse than a purely zero-trust environment, because they don't advertise that the world is zero-trust. Thereby they lure the unwary into transgressing arbitrary global norms and courting the wrath of social media mobs and the concomitant loss of access to their data held in "trust." To mix a metaphor, megacorps are apex predators---at best, sheepdogs with a strong strain of wolfishness; at worst, tar pits manned by various bad-faith actors. The pre-Web cypherpunks were right: "Privacy is the power to selectively reveal oneself to the world."[^9]
97−existence wasn't driven by life online. As Internet data sources have
40+
98−overwhelmed traditional media, publishing, and distribution services,
41+If anything, they were too narrow; not only their valued "open society" (polyvalent crypto-anarchy) but _any_ non-megacorp society at all requires true privacy.
99−the resulting tsunami of information and informatization has swept into
42+
100−every corner of lived human experience in technological societies. The
43+What cyberspace (and human culture writ broadly) needed was an immune system---and in good Darwinian form, such an immune system has been evolving before our eyes. An immune system formally consists of layers with increasing specificity: first surface barriers, then the innate immune system, and finally the adaptive immune system. The objective of the immune system is to protect the organism: in this case, human sociality and agency.
101−psychological (memetic) virus problem is much greater than actual code
44+
102−viruses. The ongoing universal exposure to alien and internally
45+First, what is human sociality? Human culture has been the means of participating in the Great Discussion which ranges from the earliest days of oral culture to the birth of literacy and libraries down to our day. High culture and low culture have both articulated and preserved valuable insights and forms of human flourishing. However, throughout the 20^th^ century and particularly by the means of the consumer revolution, our lives have been thoroughly colonized by capital and commercial instruments. So-called "economies of scale" have disrupted smallholders, artisans, and shopkeepers to the extent that these have been virtually eradicated from the modern landscape in favor of the plastic and polluting "dark Satanic mills." Although small-scale "provident living" has supported gardening, canning, and home production, none of this has survived across a large enough cultural segment to matter macroscopically, and it has unfortunately been tarred with the "prepper" brush that delegitimizes economic downsizing as antisocial because anticapitalist. The siren call of cheap consumer goods has ushered in a generational collapse in self-sufficiency and resulted in the complete colonization of entertainment, food consumption, and self-care by massive corporate brands. Not only have physical goods entered a post-consumer phase, but only certain classes of ideas, attitudes, political stances, regional accents, and sensibilities enjoy the sanction of megacorp sociality. There is essentially no native culture left, only that forged in the enterprise brand management office.[^10]
103−incoherent value systems has undergirded the well-documented crisis of
46+
104−credibility (collapse of meaning) that all Western institutions are
47+In an immune system, _surface barriers_ are designed to make it hard for exogenous agents to enter a cell or organism; in our analogy, the primary surface barrier was the match of physical separation to psychological separation. Surface barriers were rendered finally obsolete by the launch of the World Wide Web and its subsequent infiltration of every aspect of human culture. To the extent they exist today, it is a matter of ignorance, self-discipline, or happy accident.
105−experiencing today. The World Wide Web and its technological
48+
106−predecessors acted as a cultural petri dish of clean agar, which grew
49+The _innate immune system_ responds non-specifically to pathogens. Any immune system must have a way of deciding what is _me_ and what is _not-me_. Framed as an identity problem in a zero-trust environment, users have evolved several ways to uniquely identify agents without reference to legacy systems. Chief among these means is the blockchain, introduced by Bitcoin for control and transaction of digital assets and since much exploited beyond its design intent. Ethereum-based ERC tokens represent tweaks of this identity concept, as do many other blockchain platforms.
107−every spore and germ which fell upon it. We live in the midst of a
50+
108−memetic epidemic because of the World Wide Web, and the dominant strain
51+Identity is still fluid and polysemous, but in certain key instances it is indelibly demonstrable.[^11]
109−is corporate, approved by a marketing department and run through a
52+
110−search-engine optimization algorithm.
53+The individual actor has the capability to express itself with many public faces or none; one of these typically enjoys government sanction and liability, but it is no more _real_ than the others, only more legible to regulation and taxation.[^12]
111−
54+
112−The turn towards a low-trust then zero-trust environment was inevitable
55+Another aspect of the innate immune system is the public visibility of code. Open source has developed an ethic of transparency on epistemological grounds (i.e. you have a right to know what code you are running) and practical grounds. (Linus's law: "given enough eyeballs, all bugs are shallow."[^13])
113−if anything like an analogy with prokaryotic evolution holds true. The
56+
114−megacorp platforms are in a way worse than a purely zero-trust
57+The _adaptive immune system_ responds to specific pathogenic incursions. Particular conditions arise, whether through social, regulatory, military, or other requirements, which must be met with specialized forms that are thereafter in evolutionary competition with the external factor. For instance, one megacorp solution to what it perceives as a threat, i.e. unsanctioned memes, is to attempt to mandate the ultimate traceability of any image's provenance.[^14]
115−environment, because they don't advertise that the world is zero-trust.
58+
116−Thereby they lure the unwary into transgressing arbitrary global norms
59+The Internet immune system thus evolves to further obfuscate legibility and enhance individual control and self-determination by shifting to less-traceable technologies such as the InterPlanetary File System (IPFS). The point is not whether or not a salient technology such as deepfakes, 3D-printed firearms, deviant scientific or political thought, or even the DRM-free sharing of copyrighted material can be contained.
117−and courting the wrath of social media mobs and the concomitant loss of
60+
118−access to their data held in "trust." To mix a metaphor, megacorps are
61+The experience with export-grade cryptography has already shown that regulatory attempts ultimately fail.[^17]
119−apex predators---at best, sheepdogs with a strong strain of wolfishness;
62+
120−at worst, tar pits manned by various bad-faith actors. The pre-Web
63+The philosophical question is what kind of world will evolve (a _fait accompli_ driven by factors beyond any individual or office) and the practical question is how any particular group of actors can preserve their own agency, autonomy, and ambit of action.
121−cypherpunks were right: "Privacy is the power to selectively reveal
64+
122−oneself to the world."[^9] If anything, they were too narrow; not only
65+The first decentralized autonomous organization, "The DAO" (Đ) itself[^18], was created in 2016 as a way of distributing ownership and stake in a joint venture capital fund. Đ was a new form of organization in that it was essentially a mathematical entity, a set of smart contracts on the blockchain to which anyone had access. Đ lived up at least to "decentralized" and "autonomous." No money was held centrally, with token-based authentication yielding the right to vote on projects. Having set the criteria for membership and investment, Đ then operated in truly democratic fashion until an exploit of imperfectly written smart contract code led to theft, crisis, and the reorganization of the Ethereum blockchain itself.
123−their valued "open society" (polyvalent crypto-anarchy) but *any*
66+
124−non-megacorp society at all requires true privacy.
67+While the heirs of Đ serve a role in the current Internet immune system, the original was formed in response to exogenous regulatory concerns, notably ongoing governmental insistence on restricting investment to the already-wealthy. The U.S. Securities and Exchange Commission and other agencies have in place arbitrary investor requirements which would make little sense even if pegged to something like inflation or index rather than the rapidly-devaluing petrodollar. Nominally put in place to protect the naïve from getting scammed, these restrictions have had the pernicious effect of pulling up the ladder behind the _actuel riche_.
125−
68+
126−What cyberspace (and human culture writ broadly) needed was an immune
69+DAOs have rapidly evolved as a way of distributing ownership and stake in a purely democratic way. (As an aside, the word "democracy" has been much abused, but here I use it in a sense much like the Greek original: the holders of an immutable and indelible token cast their secured votes to govern their society.) DAOs represent a resurgence of the sovereign city-state in new guise. Will this be enough to evade "imperial" aggregates which dominate today's Web?
127−system---and in good Darwinian form, such an immune system has been
70+
128−evolving before our eyes. An immune system formally consists of layers
71+Decentralized autonomous organizations, zero-knowledge cryptographic proofs, cryptocurrencies, proof-of-identity systems, and their as-yet-unborn kin represent the evolution of an immune system on top of the Darwinian churn of the legacy Internet. The stakes are necessarily high: possession is _de facto_ ownership, the other end of the stick from "not your keys, not your coins" (the old cryptocurrency chestnut). The focus is currently on ownership of money, non-fungible tokens, and similar assets, but broadly speaking such systems allow the authenticated ownership of all data and assets one holds, from chat messages to market shares to physical real estate. There may be good reasons to retain the legacy system for some classes of physical or legal artifacts, but at minimum these will be in competition with purely autonomous constructs. (As an aside, I am of the philosophical opinion that legal recognition should not be sought generally for new forms of organization, as any legibility to legacy systems opens new attack surfaces in an immunological sense.) "Code is law."[^19]
129−with increasing specificity: first surface barriers, then the innate
72+
130−immune system, and finally the adaptive immune system. The objective of
73+A decentralized autonomous organization seems to be at least the first two. Having set the criteria for membership, the organization can act as the (distributed, possibly unknown in the zero-knowledge proof sense) stakeholders direct.
131−the immune system is to protect the organism: in this case, human
74+
132−sociality and agency.
75+This form is still somewhat "yeasty" in that like cyanobacteria it acts as an undifferentiated mass. We should expect further innovations in DAO-like entities.[^21] The most salient epithet of a DAO is "decentralized"; one can imagine hierarchical, concentric, or role-specialized DAOs as well as other taxonomically related forms, just as one can imagine progressively less organized instances in a chaos-happy Internet.
133−
76+
134−First, what is human sociality? Human culture has been the means of
77+Like the first mutant with a new gene, Đ itself failed. Many lessons can be drawn from that failure, including the criticality of getting smart contract code absolutely correct ("code is law"), and how to administer a blockchain in the presence of massive fraud. And indeed, what has happened to the blockchain world of decentralized finance? Millisecond differentials in responsiveness lead to huge swings in profitability of transactions. Frontrunner bots watch algorithmically for transactions they can complete faster than the original source, thereby making money on asymmetric knowledge.[^22] Zero-day exploits of code abound, heralding a need for more thorough vetting and more expressive and secure smart contract languages.
135−participating in the Great Discussion which ranges from the earliest
78+
136−days of oral culture to the birth of literacy and libraries down to our
79+Blockchains (and thus DAOs via Ethereum) operate as proof-of-work, proof-of-stake, etc. This provides node operators with a way of verifying consensus reality and thereby cementing a record of digital transactions. Future innovations hold forth the possibility of secure proof-of-identity blockchains (such as the Uqbar Layer 1 smart contract blockchain on Urbit[^23]), wherein each node which can provide concrete cryptographic evidence of its identity gets a vote on the consensus.
137−day. High culture and low culture have both articulated and preserved
80+
138−valuable insights and forms of human flourishing. However, throughout
81+We must consider modern systems to necessarily interact at the pinnacle intensity of competence and competition: any differential advantage that can be exploited to outcompete an adversary not only can be exploited but _should_ be. Illegibility, redundancy, and apposite complexity are allies in the immune fight to maintain identity and ownership in the modern Internet.[^24] Any system which does not have an operational DAO-like layer is immuno­compromised. All tools for the individual and collective need to be architected around a zero-trust adversarial world. They also need to guard the embers of community and enable new growth.
139−the 20^th^ century and particularly by the means of the consumer
82+
140−revolution, our lives have been thoroughly colonized by capital and
83+In a nutshell, the early Internet was a cocktail party. By the age of Usenet and into the World Wide Web era, the Internet evolved into a player-versus-player defect--defect equilibrium in which brigading, spamming, and anonymity are rational adaptive behaviors. Indeed, anonymity is barely a protection given the lengths to which governments and megacorps go to prevent truly untraceable usage. This approach is adaptive for agencies which have given up on any other model of reality, fundamentally lacking a vision of humans as other than atomized individual krill for the megacorp apex predators: consumers for the consumers. The legacy megacorp Internet has become a crab bucket, always drawing everything back into itself in a dysfunctional and frankly satanic way.
141−commercial instruments. So-called "economies of scale" have disrupted
84+
142−smallholders, artisans, and shopkeepers to the extent that these have
85+Communities built on decentralized Web3 platforms such as Mastodon, Fediverse, and Urbit[^25] have stepped back from the purely PvP world of the globally-namespaced social media Internet. These today have more of a block party feel, wherein one can wander from house to house or room to room and encounter some of the same faces in the same or new guise. Conversations can drop and resume anew in very different locales with largely the same composition. Marrying the underlying cryptographic identity requirements of DAOs to communication tools and databases yields a strong stable solution to the problem of retaining a foothold of personal identity from which to coordinate one's multifaceted digital life. IPFS, Sovrin Foundation, Tim Berners-Lee's Solid, and Urbit all offer their take on this requirement. Even a Signal chat group running its own server is a kind of token-free DAO.
143−been virtually eradicated from the modern landscape in favor of the
86+
144−plastic and polluting "dark Satanic mills." Although small-scale
87+Since the Renaissance, essentially all theology has been humanist in nature, concerning itself with how man should live to flourish in this world and inherit in the next. Even secularized descendants enjoin an ethos of ritual behaviors and practices. The social and cultural "stack" (in software parlance) upon which we build provides for a variety, broad or narrow, of human cultural forms. Lately, the variety of forms has been diminishing both by cutting off older forms from the modern world and by cultivating only certain state-legible apex predators[^26] and their preferred ovine repast.
145−"provident living" has supported gardening, canning, and home
88+
146−production, none of this has survived across a large enough cultural
89+Contra this monoculture, the _telos_ of social computing is to recreate the village green, not the penitentiary. Revisiting a thesis from above: "All tools for the individual and collective need to be architected around _using cryptographic proofs to create stable high-trust havens in an otherwise_ zero-trust adversarial world." The village is a stable, long-term tribe well below Dunbar's limit which shares values and assets in common, from which a member occasionally ventures out into the broader social web but always has a home. Every village will grow its own culture, perhaps even its own _cultus_, enabled by decentralized technologies to protect their assets and precious peculiarities. The World Wide Web has been an extinction-level event for many forms of life, livelihood, and culture. For others, it has offered strange forms of life support and even thriving. With a new immune system evolved and now operational, human endeavor stands on the cusp of a Cambrian explosion, unconstrainable by a rent-seeking boardroom-and-bureaucracy world that never comprehended the light shining in its darkness.
147−segment to matter macroscopically, and it has unfortunately been tarred
148−with the "prepper" brush that delegitimizes economic downsizing as
149−antisocial because anticapitalist. The siren call of cheap consumer
150−goods has ushered in a generational collapse in self-sufficiency and
151−resulted in the complete colonization of entertainment, food
152−consumption, and self-care by massive corporate brands. Not only have
153−physical goods entered a post-consumer phase, but only certain classes
154−of ideas, attitudes, political stances, regional accents, and
155−sensibilities enjoy the sanction of megacorp sociality. There is
156−essentially no native culture left, only that forged in the enterprise
157−brand management office.[^10]
158−
159−In an immune system, *surface barriers* are designed to make it hard for
160−exogenous agents to enter a cell or organism; in our analogy, the
161−primary surface barrier was the match of physical separation to
162−psychological separation. Surface barriers were rendered finally
163−obsolete by the launch of the World Wide Web and its subsequent
164−infiltration of every aspect of human culture. To the extent they exist
165−today, it is a matter of ignorance, self-discipline, or happy accident.
166−
167−The *innate immune system* responds non-specifically to pathogens. Any
168−immune system must have a way of deciding what is *me* and what is
169−*not-me*. Framed as an identity problem in a zero-trust environment,
170−users have evolved several ways to uniquely identify agents without
171−reference to legacy systems. Chief among these means is the blockchain,
172−introduced by Bitcoin for control and transaction of digital assets and
173−since much exploited beyond its design intent. Ethereum-based ERC tokens
174−represent tweaks of this identity concept, as do many other blockchain
175−platforms.
176−
177−Identity is still fluid and polysemous, but in certain key instances it
178−is indelibly demonstrable.[^11] The individual actor has the capability
179−to express itself with many public faces or none; one of these typically
180−enjoys government sanction and liability, but it is no more *real* than
181−the others, only more legible to regulation and taxation.[^12]
182−
183−Another aspect of the innate immune system is the public visibility of
184−code. Open source has developed an ethic of transparency on
185−epistemological grounds (i.e. you have a right to know what code you are
186−running) and practical grounds. (Linus's law: "given enough eyeballs,
187−all bugs are shallow."[^13])
188−
189−The *adaptive immune system* responds to specific pathogenic incursions.
190−Particular conditions arise, whether through social, regulatory,
191−military, or other requirements, which must be met with specialized
192−forms that are thereafter in evolutionary competition with the external
193−factor. For instance, one megacorp solution to what it perceives as a
194−threat, i.e. unsanctioned memes, is to attempt to mandate the ultimate
195−traceability of any image's provenance.[^14] The Internet immune system
196−thus evolves to further obfuscate legibility and enhance individual
197−control and self-determination by shifting to less-traceable
198−technologies such as the InterPlanetary File System (IPFS). The point is
199−not whether or not a salient technology such as deepfakes, 3D-printed
200−firearms, deviant scientific or political thought[^15], or even the
201−DRM-free sharing of copyrighted material can be contained[^16]; the
202−experience with export-grade cryptography[^17] has already shown that
203−regulatory attempts ultimately fail. The philosophical question is what
204−kind of world will evolve (a *fait accompli* driven by factors beyond
205−any individual or office) and the practical question is how any
206−particular group of actors can preserve their own agency, autonomy, and
207−ambit of action.
208−
209−The first decentralized autonomous organization, "The DAO" (Đ)
210−itself[^18], was created in 2016 as a way of distributing ownership and
211−stake in a joint venture capital fund. Đ was a new form of organization
212−in that it was essentially a mathematical entity, a set of smart
213−contracts on the blockchain to which anyone had access. Đ lived up at
214−least to "decentralized" and "autonomous." No money was held centrally,
215−with token-based authentication yielding the right to vote on projects.
216−Having set the criteria for membership and investment, Đ then operated
217−in truly democratic fashion until an exploit of imperfectly written
218−smart contract code led to theft, crisis, and the reorganization of the
219−Ethereum blockchain itself.
220−
221−While the heirs of Đ serve a role in the current Internet immune system,
222−the original was formed in response to exogenous regulatory concerns,
223−notably ongoing governmental insistence on restricting investment to the
224−already-wealthy. The U.S. Securities and Exchange Commission and other
225−agencies have in place arbitrary investor requirements which would make
226−little sense even if pegged to something like inflation or index rather
227−than the rapidly-devaluing petrodollar. Nominally put in place to
228−protect the naïve from getting scammed, these restrictions have had the
229−pernicious effect of pulling up the ladder behind the *actuel riche*.
230−
231−DAOs have rapidly evolved as a way of distributing ownership and stake
232−in a purely democratic way. (As an aside, the word "democracy" has been
233−much abused, but here I use it in a sense much like the Greek original:
234−the holders of an immutable and indelible token cast their secured votes
235−to govern their society.) DAOs represent a resurgence of the sovereign
236−city-state in new guise. Will this be enough to evade "imperial"
237−aggregates which dominate today's Web?
238−
239−Decentralized autonomous organizations, zero-knowledge cryptographic
240−proofs, cryptocurrencies, proof-of-identity systems, and their
241−as-yet-unborn kin represent the evolution of an immune system on top of
242−the Darwinian churn of the legacy Internet. The stakes are necessarily
243−high: possession is *de facto* ownership, the other end of the stick
244−from "not your keys, not your coins" (the old cryptocurrency chestnut).
245−The focus is currently on ownership of money, non-fungible tokens, and
246−similar assets, but broadly speaking such systems allow the
247−authenticated ownership of all data and assets one holds, from chat
248−messages to market shares to physical real estate. There may be good
249−reasons to retain the legacy system for some classes of physical or
250−legal artifacts, but at minimum these will be in competition with purely
251−autonomous constructs. (As an aside, I am of the philosophical opinion
252−that legal recognition should not be sought generally for new forms of
253−organization, as any legibility to legacy systems opens new attack
254−surfaces in an immunological sense.) "Code is law."[^19]
255−
256−A decentralized autonomous organization seems to be at least the first
257−two: having set the criteria for membership, the organization can act as
258−the (distributed[^20], possibly unknown in the zero-knowledge proof
259−sense) stakeholders direct. This form is still somewhat "yeasty" in that
260−like cyanobacteria it acts as an undifferentiated mass, and we should
261−expect further innovations in DAO-like entities.[^21] The most salient
262−epithet of a DAO is "decentralized"; one can imagine hierarchical,
263−concentric, or role-specialized DAOs as well as other taxonomically
264−related forms, just as one can imagine progressively less organized
265−instances in a chaos-happy Internet.
266−
267−Like the first mutant with a new gene, Đ itself failed. Many lessons can
268−be drawn from that failure, including the criticality of getting smart
269−contract code absolutely correct ("code is law"), and how to administer
270−a blockchain in the presence of massive fraud. And indeed, what has
271−happened to the blockchain world of decentralized finance? Millisecond
272−differentials in responsiveness lead to huge swings in profitability of
273−transactions. Frontrunner bots watch algorithmically for transactions
274−they can complete faster than the original source, thereby making money
275−on asymmetric knowledge.[^22] Zero-day exploits of code abound,
276−heralding a need for more thorough vetting and more expressive and
277−secure smart contract languages.
278−
279−Blockchains (and thus DAOs via Ethereum) operate as proof-of-work,
280−proof-of-stake, etc. This provides node operators with a way of
281−verifying consensus reality and thereby cementing a record of digital
282−transactions. Future innovations hold forth the possibility of secure
283−proof-of-identity blockchains (such as the Uqbar Layer 1 smart contract
284−blockchain on Urbit[^23]), wherein each node which can provide concrete
285−cryptographic evidence of its identity gets a vote on the consensus.
286−
287−We must consider modern systems to necessarily interact at the pinnacle
288−intensity of competence and competition: any differential advantage that
289−can be exploited to outcompete an adversary not only can be exploited
290−but *should* be. Illegibility, redundancy, and apposite complexity are
291−allies in the immune fight to maintain identity and ownership in the
292−modern Internet.[^24] Any system which does not have an operational
293−DAO-like layer is immuno­compromised. All tools for the individual and
294−collective need to be architected around a zero-trust adversarial world.
295−They also need to guard the embers of community and enable new growth.
296−
297−In a nutshell, the early Internet was a cocktail party. By the age of
298−Usenet and into the World Wide Web era, the Internet evolved into a
299−player-versus-player defect--defect equilibrium in which brigading,
300−spamming, and anonymity are rational adaptive behaviors. Indeed,
301−anonymity is barely a protection given the lengths to which governments
302−and megacorps go to prevent truly untraceable usage. This approach is
303−adaptive for agencies which have given up on any other model of reality,
304−fundamentally lacking a vision of humans as other than atomized
305−individual krill for the megacorp apex predators: consumers for the
306−consumers. The legacy megacorp Internet has become a crab bucket, always
307−drawing everything back into itself in a dysfunctional and frankly
308−satanic way.
309−
310−Communities built on decentralized Web3 platforms such as Mastodon,
311−Fediverse, and Urbit[^25] have stepped back from the purely PvP world of
312−the globally-namespaced social media Internet. These today have more of
313−a block party feel, wherein one can wander from house to house or room
314−to room and encounter some of the same faces in the same or new guise.
315−Conversations can drop and resume anew in very different locales with
316−largely the same composition. Marrying the underlying cryptographic
317−identity requirements of DAOs to communication tools and databases
318−yields a strong stable solution to the problem of retaining a foothold
319−of personal identity from which to coordinate one's multifaceted digital
320−life. IPFS, Sovrin Foundation, Tim Berners-Lee's Solid, and Urbit all
321−offer their take on this requirement. Even a Signal chat group running
322−its own server is a kind of token-free DAO.
323−
324−Since the Renaissance, essentially all theology has been humanist in
325−nature, concerning itself with how man should live to flourish in this
326−world and inherit in the next. Even secularized descendants enjoin an
327−ethos of ritual behaviors and practices. The social and cultural "stack"
328−(in software parlance) upon which we build provides for a variety, broad
329−or narrow, of human cultural forms. Lately, the variety of forms has
330−been diminishing both by cutting off older forms from the modern world
331−and by cultivating only certain state-legible apex predators[^26] and
332−their preferred ovine repast.
333−
334−Contra this monoculture, the *telos* of social computing is to recreate
335−the village green, not the penitentiary. Revisiting a thesis from above:
336−"All tools for the individual and collective need to be architected
337−around *using cryptographic proofs to create stable high-trust havens in
338−an otherwise* zero-trust adversarial world." The village is a stable,
339−long-term tribe well below Dunbar's limit which shares values and assets
340−in common, from which a member occasionally ventures out into the
341−broader social web but always has a home. Every village will grow its
342−own culture, perhaps even its own *cultus*, enabled by decentralized
343−technologies to protect their assets and precious peculiarities. The
344−World Wide Web has been an extinction-level event for many forms of
345−life, livelihood, and culture. For others, it has offered strange forms
346−of life support and even thriving. With a new immune system evolved and
347−now operational, human endeavor stands on the cusp of a Cambrian
348−explosion, unconstrainable by a rent-seeking boardroom-and-bureaucracy
349−world that never comprehended the light shining in its darkness.
350−
351−[^1]: Kaufman, Jim. (2010) ["Evolution and
352− immunity"](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2913256/).
353− *Immunology 130*, iss. 4, pp. 459--462.
354−
355−[^2]: President Eisenhower's original coinage was likely "the
356− military-industrial-academic complex."
357−
358−[^3]: E.g., Richard Bellman of the RAND Corporation on the origin of
359− "dynamic programming," a mathematical discipline: in dealing with a
360− recalcitrant secretary of defense who hated the word "research,"
361− Bellman instead chose the word "dynamic" arbitrarily because "it's
362− impossible to use the word 'dynamic' in a pejorative sense. ...It
363− was something not even a Congressman could object to. So I used it
364− as an umbrella for my activities." (Bellman, Richard. (1984) [*Eye
365− of the
366− Hurricane*](https://books.google.ch/books?id=4FwGCwAAQBAJ&lpg=PA159&dq=#v=onepage&q=).)
367−
368−[^4]: The nuclear triad doctrine, joining the Air Force's Strategic Air
369− Command bombers, the Navy's nuclear submarines, and the Army's ICBMs
370− and other assorted nuclear warheads, was based less on strategic
371− considerations than on appeasing constituent departments of the
372− military. Strategists developed a formal justification decades later
373− in a magnificent demonstration of motivated reasoning. (Woolf, Amy.
374− (2016) "U.S. Strategic Nuclear Forces: Background, Developments, and
375− Issues". [CRS
376− 7-5700](https://digital.library.unt.edu/ark:/67531/metadc847627/m2/1/high_res_d/RL33640_2016Mar10.pdf).)
377−
378−[^5]: The Air Force early commissioned the RAND Corporation on contract
379− with Douglas Aircraft Company as the first "think tank"; RAND soon
380− upended the traditional role of passive reception of studies by
381− making its own recommendations and showing their analytical chops.
382− Other service branches followed suit, such as the U.S. Navy's Center
383− for Naval Analyses and the Battelle Memorial Institute for various
384− federal contracting agencies; compare also the role of the national
385− laboratory system, e.g. Los Alamos, Sandia, Livermore, etc. for the
386− Department of Energy and Department of Defense. (Rich, Michael.
387− (2003) "RAND: How Think Tanks Interact with the Military".
388− [RP-1050](https://www.rand.org/pubs/reprints/RP1050.html).)
389−
390−[^6]: "On January 18, 1994, the first large-scale deliberate USENET spam
391− occurred. A message with the subject "Global Alert for All: Jesus is
392− Coming Soon" was cross-posted to every available newsgroup."
393− ([Wikipedia, "History of email
394− spam"](https://en.wikipedia.org/wiki/History_of_email_spam))
395−
396−[^7]: The first instance which seems to have brough this to general
397− public awareness was the submission of Judge Robert Bork's video
398− rental history as evidence in his Supreme Court hearings before the
399− U.S. Senate. The resulting Video Privacy Protection Act was
400− delightfully naïve. Besides relying on "video rental" narrowly
401− construed, users have effectively no leverage against
402− unilaterally-imposed terms of service and end-user license
403− agreements. (See, e.g., [Electronic Privacy Information Center,
404− "Video Privacy Protection
405− Act"](https://archive.epic.org/privacy/vppa/).)
406−
407−[^8]: E.g. Tumblr and OnlyFans and adult content; Twitter and right-wing
408− content; Youtube and Facebook and unsanctioned medical content, etc.
409− Note that this is regardless of the viability of a given view or the
410− necessity of vigorous debate within a field, but focuses on the
411− palatibility of politics to the megacorp entity providing the
412− platform, even if the content drives platform usage.
413−
414−[^9]: Hughes, Eric. (1993) [*A Cypherpunk's
415− Manifesto*](https://nakamotoinstitute.org/cypherpunk-manifesto/).
416−
417−[^10]: The mass shift to remote work from March 2020 onwards due to the
418− COVID-19 pandemic has accelerated the trend of corporate
419− colonization of private spaces. At first, this was occasionally
420− humorous, as when a child ran into the background of a Zoom call, or
421− underwear or private materials were inadvertently left in view of
422− the remote audience. In the end, it demanded that individuals
423− reconfigure their homes to accommodate mass corporate preferences,
424− thus another invasion of private space by the megacorp panopticon.\
425− I note as well an invasive doctrine demanding "truth in
426− communication" under names like ["radical
427− transparency"](https://www.bridgewater.com/principles-and-culture)
428− and ["radical
429− candor"](https://third-bit.com/2018/11/24/afraid-of-change/) put
430− forward by partisans of power over against vulnerable employees,
431− clients, and customers, who may be disproportionately affected by a
432− megacorp demand for one-sided transparency.
433−
434−[^11]: Several have pointed to the failure of Craig S. Wright to
435− demonstrate cryptographically that he is Satoshi Nakamoto, the
436− pseudonymous inventor of Bitcoin. (C.f. Khaosan, Venzen. (2016)
437− ["Craig Wright is Not Satoshi Nakamoto---The Technical
438− Proof"](https://www.ccn.com/technical-proof-craig-wright-not-satoshi-nakamoto/).)
439−
440−[^12]: Davidson, Dale, and Rees-Mogg, William. (1999) *The Sovereign
441− Individual: Mastering the Transition to the Information Age*.
442−
443−[^13]: Raymond, Eric. (1999) [*The Cathedral and the
444− Bazaar*](http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html).
445−
446−[^14]: The [Coalition for Content Provenance and
447− Authenticity](https://c2pa.org/) "addresses the prevalence of
448− misleading information online through the development of technical
449− standards for certifying the source and history (or provenance) of
450− media content."
451−
452−[^15]: Cf. Walker, Shawn, et al. (2019) ["The disinformation landscape
453− and the lockdown of social
454− platforms."](https://www.tandfonline.com/doi/full/10.1080/1369118X.2019.1648536)
455− *Information, Communication & Society 22*, pp. 1531--43. Walker et
456− al. lament that "highly ephemeral mis/disinformation campaigns" are
457− not susceptible of study due to closed platform APIs. "Social media
458− platforms \[attempt\] to rekindle trust by appearing to reinforce
459− individual privacy within a newly secured user community, a set of
460− measures that also locked academic and non-profit researchers out
461− from studying social platforms while preserving corporate and
462− business access to social media users' data." They fail to address
463− the tension between community self-determination and academic
464− exploitation.
465−
466−[^16]: "If in fact you can't crack \[the encryption\] at all, government
467− can't get in, then everybody is walking around with a Swiss bank
468− account in their pocket -- right? So there has to be some concession
469− to the need to be able to get into that information somehow."
470− ([Barack Obama in March 2016 at
471− SXSW](https://www.businessinsider.com/obama-comments-on-encryption-at-sxsw-2016-3))
472−
473−[^17]: Heninger, Nadia. (2016) ["The Legacy of Export-Grade Cryptography
474− in the 21^st^
475− Century"](https://publish.illinois.edu/science-of-security-lablet/files/2016/08/10062016-Heninger-Slides.pdf).
476−
477−[^18]: Chohan, Usman. (2017) ["The Decentralized Autonomous Organization
478− and Governance
479− Issues"](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3082055).
480− Discussion Paper Series: *Notes on the 21^st^ Century*.
481−
482−[^19]: Lessig, Lawrence. (1999) *Code and Other Laws of Cyberspace*.
483−
484−[^20]: Hobart, Byrne \~lableg-tadrex. (Nov 17, 2021) ["The Promise and
485− Paradox of
486− Decentralization"](https://urbit.org/blog/2021-11-18-the-promise-and-paradox-of-decentralization).
487− *The Diff*.
488−
489−[^21]: See, e.g., the Governor Alpha smart contract protocols. Solari,
490− R. (2021) ["The case for Governor
491− Alpha".](https://medium.com/tally-blog/the-case-for-governor-alpha-15c1362d49eb)
492−
493−[^22]: Robinson, D. (2020) ["Ethereum is a dark
494− forest"](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest).
495− Paradigm blog.
496−
497−[^23]: [Uqbar Network](https://uqbar.network/); ["Introducing Uqbar
498− Network"](https://uqbarnetwork.substack.com/p/introducing-uqbar-network);
499− \~hocwyn-tipwex/uqbar-event-horizon (Urbit group)
500−
501−[^24]: This is not to deny the benefits of system-legibility, in
502− particular legal protections. As common law develops around DAOs, I
503− hope for similar affordances where they must interact with the
504− legacy legal system.
505−
506−[^25]: Originally this list included Discord, as there has been
507− substantial growth in stable goal-oriented communities thereon.
508− However, more recently the company [adopted a user
509− policy](https://discord.com/blog/addressing-harmful-off-platform-behavior)
510− which subjects use of their product to judgment calls about
511− "off-platform behavior"---a clear violation of a cypherpunk ethos
512− which Discord likely never espoused anyway.
513−
514−[^26]: E.g., Auerbach, David. (Mar 3, 2022) ["The metaverse will steal
515− your
516− identity"](https://unherd.com/2022/03/the-metaverse-will-steal-your-identity/).
517− *UnHerd*. Auerbach correctly recognizes and decries the looming
518− "monetisation of identity" which will allow any platform controller
519− to incentivize prosocial or antisocial behaviors at will.
520
90
521_The header image is [Volvox sp. microscopic algae](https://www.flickr.com/photos/picksfromoutthere/35891780782/in/photolist-WFCKYA-XPdGLq-2k9Cew6-ViCgrB-23QUBQR-21rF362-CCSE2n-23AwZ7m-CbKedu-gznqa-2dHUv3k-EE8eoq-gznq9-i5zqqk-WYSwcf-XWVgQk-WabAAG-gLjRj-gDcLp-4VvECm-259cDCS-i5zqRk-25cV246-i5yNvM-gupiMJ-PXLbhr-LUACZ7-ihvxSH-ihvvVg-ihwjbF-ihvxDX-i5yQDd-ihzQwK-fWwpxb-rarKrm-8LWTQf-qVar5j-ihzAPA-JNrgyK-ihzBrC-ca6Ex9-2kCTSrj-ihz67k-qfJsYd-248ePDL-ihztbm-ihzuyS-LQYZQq-2kCTRxL-ihvWPA) by Picturepest on Flickr._
91_The header image is [Volvox sp. microscopic algae](https://www.flickr.com/photos/picksfromoutthere/35891780782/in/photolist-WFCKYA-XPdGLq-2k9Cew6-ViCgrB-23QUBQR-21rF362-CCSE2n-23AwZ7m-CbKedu-gznqa-2dHUv3k-EE8eoq-gznq9-i5zqqk-WYSwcf-XWVgQk-WabAAG-gLjRj-gDcLp-4VvECm-259cDCS-i5zqRk-25cV246-i5yNvM-gupiMJ-PXLbhr-LUACZ7-ihvxSH-ihvvVg-ihwjbF-ihvxDX-i5yQDd-ihzQwK-fWwpxb-rarKrm-8LWTQf-qVar5j-ihzAPA-JNrgyK-ihzBrC-ca6Ex9-2kCTSrj-ihz67k-qfJsYd-248ePDL-ihztbm-ihzuyS-LQYZQq-2kCTRxL-ihvWPA) by Picturepest on Flickr._
92+
93+[^1]: Kaufman, Jim. (2010) ["Evolution and immunity"](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2913256/). _Immunology 130_, iss. 4, pp. 459--462.
94+[^2]: President Eisenhower's original coinage was likely "the military-industrial-academic complex."
95+[^3]: E.g., Richard Bellman of the RAND Corporation on the origin of "dynamic programming," a mathematical discipline: in dealing with a recalcitrant secretary of defense who hated the word "research," Bellman instead chose the word "dynamic" arbitrarily because "it's impossible to use the word 'dynamic' in a pejorative sense. ...It was something not even a Congressman could object to. So I used it as an umbrella for my activities." (Bellman, Richard. (1984) [_Eye of the Hurricane_](https://books.google.ch/books?id=4FwGCwAAQBAJ&lpg=PA159&dq=#v=onepage&q=).)
96+[^4]: The nuclear triad doctrine, joining the Air Force's Strategic Air Command bombers, the Navy's nuclear submarines, and the Army's ICBMs and other assorted nuclear warheads, was based less on strategic considerations than on appeasing constituent departments of the military. Strategists developed a formal justification decades later in a magnificent demonstration of motivated reasoning. (Woolf, Amy. (2016) "U.S. Strategic Nuclear Forces: Background, Developments, and Issues". [CRS 7-5700](https://digital.library.unt.edu/ark:/67531/metadc847627/m2/1/high_res_d/RL33640_2016Mar10.pdf).)
97+[^5]: The Air Force early commissioned the RAND Corporation on contract with Douglas Aircraft Company as the first "think tank"; RAND soon upended the traditional role of passive reception of studies by making its own recommendations and showing their analytical chops. Other service branches followed suit, such as the U.S. Navy's Center for Naval Analyses and the Battelle Memorial Institute for various federal contracting agencies; compare also the role of the national laboratory system, e.g. Los Alamos, Sandia, Livermore, etc. for the Department of Energy and Department of Defense. (Rich, Michael. (2003) "RAND: How Think Tanks Interact with the Military". [RP-1050](https://www.rand.org/pubs/reprints/RP1050.html).)
98+[^6]: "On January 18, 1994, the first large-scale deliberate USENET spam occurred. A message with the subject "Global Alert for All: Jesus is Coming Soon" was cross-posted to every available newsgroup." ([Wikipedia, "History of email spam"](https://en.wikipedia.org/wiki/History_of_email_spam))
99+[^7]: The first instance which seems to have brough this to general public awareness was the submission of Judge Robert Bork's video rental history as evidence in his Supreme Court hearings before the U.S. Senate. The resulting Video Privacy Protection Act was delightfully naïve. Besides relying on "video rental" narrowly construed, users have effectively no leverage against unilaterally-imposed terms of service and end-user license agreements. (See, e.g., [Electronic Privacy Information Center, "Video Privacy Protection Act"](https://archive.epic.org/privacy/vppa/).)
100+[^8]: E.g. Tumblr and OnlyFans and adult content; Twitter and right-wing content; Youtube and Facebook and unsanctioned medical content, etc. Note that this is regardless of the viability of a given view or the necessity of vigorous debate within a field, but focuses on the palatibility of politics to the megacorp entity providing the platform, even if the content drives platform usage.
101+[^9]: Hughes, Eric. (1993) [_A Cypherpunk's Manifesto_](https://nakamotoinstitute.org/cypherpunk-manifesto/).
102+[^10]: The mass shift to remote work from March 2020 onwards due to the COVID-19 pandemic has accelerated the trend of corporate colonization of private spaces. At first, this was occasionally humorous, as when a child ran into the background of a Zoom call, or underwear or private materials were inadvertently left in view of the remote audience. In the end, it demanded that individuals reconfigure their homes to accommodate mass corporate preferences, thus another invasion of private space by the megacorp panopticon. I note as well an invasive doctrine demanding "truth in communication" under names like ["radical transparency"](https://www.bridgewater.com/principles-and-culture) and ["radical candor"](https://third-bit.com/2018/11/24/afraid-of-change/) put forward by partisans of power over against vulnerable employees, clients, and customers, who may be disproportionately affected by a megacorp demand for one-sided transparency.
103+[^11]: Several have pointed to the failure of Craig S. Wright to demonstrate cryptographically that he is Satoshi Nakamoto, the pseudonymous inventor of Bitcoin. (C.f. Khaosan, Venzen. (2016) ["Craig Wright is Not Satoshi Nakamoto---The Technical Proof"](https://www.ccn.com/technical-proof-craig-wright-not-satoshi-nakamoto/).)
104+[^12]: Davidson, Dale, and Rees-Mogg, William. (1999) _The Sovereign Individual: Mastering the Transition to the Information Age_.
105+[^13]: Raymond, Eric. (1999) [_The Cathedral and the Bazaar_](http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html).
106+[^14]: The [Coalition for Content Provenance and Authenticity](https://c2pa.org/) "addresses the prevalence of misleading information online through the development of technical standards for certifying the source and history (or provenance) of media content."
107+[^15]: Cf. Walker, Shawn, et al. (2019) ["The disinformation landscape and the lockdown of social platforms."](https://www.tandfonline.com/doi/full/10.1080/1369118X.2019.1648536) _Information, Communication & Society 22_, pp. 1531--43. Walker et al. lament that "highly ephemeral mis/disinformation campaigns" are not susceptible of study due to closed platform APIs. "Social media platforms \[attempt\] to rekindle trust by appearing to reinforce individual privacy within a newly secured user community, a set of measures that also locked academic and non-profit researchers out from studying social platforms while preserving corporate and business access to social media users' data." They fail to address the tension between community self-determination and academic exploitation.
108+[^16]: "If in fact you can't crack \[the encryption\] at all, government can't get in, then everybody is walking around with a Swiss bank account in their pocket -- right? So there has to be some concession to the need to be able to get into that information somehow." ([Barack Obama in March 2016 at SXSW](https://www.businessinsider.com/obama-comments-on-encryption-at-sxsw-2016-3))
109+[^17]: Heninger, Nadia. (2016) ["The Legacy of Export-Grade Cryptography in the 21^st^ Century"](https://publish.illinois.edu/science-of-security-lablet/files/2016/08/10062016-Heninger-Slides.pdf).
110+[^18]: Chohan, Usman. (2017) ["The Decentralized Autonomous Organization and Governance Issues"](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3082055). Discussion Paper Series: _Notes on the 21^st^ Century_.
111+[^19]: Lessig, Lawrence. (1999) _Code and Other Laws of Cyberspace_.
112+[^20]: Hobart, Byrne `~lableg-tadrex`. (Nov 17, 2021) ["The Promise and Paradox of Decentralization"](https://urbit.org/blog/2021-11-18-the-promise-and-paradox-of-decentralization). _The Diff_.
113+[^21]: See, e.g., the Governor Alpha smart contract protocols. Solari, R. (2021) ["The case for Governor Alpha".](https://medium.com/tally-blog/the-case-for-governor-alpha-15c1362d49eb)
114+[^22]: Robinson, D. (2020) ["Ethereum is a dark forest"](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest). Paradigm blog.
115+[^23]: [Uqbar Network](https://uqbar.network/); ["Introducing Uqbar Network"](https://uqbarnetwork.substack.com/p/introducing-uqbar-network); \~hocwyn-tipwex/uqbar-event-horizon (Urbit group)
116+[^24]: This is not to deny the benefits of system-legibility, in particular legal protections. As common law develops around DAOs, I hope for similar affordances where they must interact with the legacy legal system.
117+[^25]: Originally this list included Discord, as there has been substantial growth in stable goal-oriented communities thereon. However, more recently the company [adopted a user policy](https://discord.com/blog/addressing-harmful-off-platform-behavior) which subjects use of their product to judgment calls about "off-platform behavior"---a clear violation of a cypherpunk ethos which Discord likely never espoused anyway.
118+[^26]: E.g., Auerbach, David. (Mar 3, 2022) ["The metaverse will steal your identity"](https://unherd.com/2022/03/the-metaverse-will-steal-your-identity/). _UnHerd_. Auerbach correctly recognizes and decries the looming "monetisation of identity" which will allow any platform controller to incentivize prosocial or antisocial behaviors at will.
content/blog/infrastructural.md+2−8
@@ -9,9 +9,7 @@ ship = "~fabled-faster"
9image = "https://media.urbit.org/site/posts/essays/infrastructural-2.jpg"
9image = "https://media.urbit.org/site/posts/essays/infrastructural-2.jpg"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/infrastructural-1.jpg">
12+![](https://media.urbit.org/site/posts/essays/infrastructural-1.jpg)
15
13
16## Seasons
14## Seasons
17
15
@@ -53,11 +51,7 @@ We deeply hope that Urbit can form a support structure for you and your communit
53
51
54These self-evident statements underlie the core problems we sought to address in designing a userspace for OS 1: How do we design an _actually_ personal digital infrastructure? What does infrastructure look like when shared with immediate friends? With a cooperative organization? How can we impress upon Urbit's earliest adopters that once they've obtained an Urbit ID, their computer is at that moment _literally_ entirely theirs?
52These self-evident statements underlie the core problems we sought to address in designing a userspace for OS 1: How do we design an _actually_ personal digital infrastructure? What does infrastructure look like when shared with immediate friends? With a cooperative organization? How can we impress upon Urbit's earliest adopters that once they've obtained an Urbit ID, their computer is at that moment _literally_ entirely theirs?
55
53
56−<br>
57−
58−<br>
59−
60−<img class="ba" src="https://media.urbit.org/site/posts/essays/infrastructural-2.jpg">
54+![](https://media.urbit.org/site/posts/essays/infrastructural-2.jpg)
61
55
62## Expressing Infrastructure
56## Expressing Infrastructure
63
57
content/blog/interplanetary_commerce.md+2−6
@@ -9,12 +9,8 @@ ship = "~pindet-timmut"
9image = "https://media.urbit.org/site/posts/essays/ocean.jpeg"
9image = "https://media.urbit.org/site/posts/essays/ocean.jpeg"
10+++
10+++
11
11
12−<br>
13−
14![ocean](https://media.urbit.org/site/posts/essays/ocean.jpeg)
12![ocean](https://media.urbit.org/site/posts/essays/ocean.jpeg)
15
13
16−<br>
17−
18## Paying
14## Paying
19
15
20A year ago, we started [integrating](https://urbit.org/blog/urbit-and-bitcoin/) Bitcoin into Urbit to be an OS-level primitive for money. Our initial objective: build a payments wallet, equally sovereign and ergonomic. The first public version, releasing this month, will have a broad set of capabilities including ship-to-ship payments, hardware wallet support, and full node integration. We’ll be unveiling this wallet on [April 27th](https://www.meetup.com/urbit-sf/events/276741426/). Do join us.
16A year ago, we started [integrating](https://urbit.org/blog/urbit-and-bitcoin/) Bitcoin into Urbit to be an OS-level primitive for money. Our initial objective: build a payments wallet, equally sovereign and ergonomic. The first public version, releasing this month, will have a broad set of capabilities including ship-to-ship payments, hardware wallet support, and full node integration. We’ll be unveiling this wallet on [April 27th](https://www.meetup.com/urbit-sf/events/276741426/). Do join us.
@@ -25,7 +21,7 @@ Things only accelerate from here. Our next objective, to integrate Lightning Net
25
21
26> And there is all the difference in the world between paying and being paid. The act of paying is perhaps the most uncomfortable infliction that the two orchard thieves entailed upon us. But being paid,—what will compare with it?
22> And there is all the difference in the world between paying and being paid. The act of paying is perhaps the most uncomfortable infliction that the two orchard thieves entailed upon us. But being paid,—what will compare with it?
27>
23>
28−> <cite>Herman Melville</cite>
24+> **Herman Melville**
29
25
30However, a good wallet is only half the equation for a holistic P2P commercial experience. Interfaces for selling goods and services is the other half. While we don’t part with our Bitcoin [easily](https://nakamotoinstitute.org/mempool/everyones-a-scammer/), two initial markets appear logical and attractive: content and Urbit-native services.
26However, a good wallet is only half the equation for a holistic P2P commercial experience. Interfaces for selling goods and services is the other half. While we don’t part with our Bitcoin [easily](https://nakamotoinstitute.org/mempool/everyones-a-scammer/), two initial markets appear logical and attractive: content and Urbit-native services.
31
27
@@ -37,4 +33,4 @@ The Urbit Foundation is soliciting contributors to this project through Urbit Gr
37
33
38## An Ocean
34## An Ocean
39
35
40−After honing our commercial tools on these use-cases, we’ll sail into a blue ocean. On the horizon: beautiful products, deployable at scale, built with the robust primitives of Urbit OS. Extensibility is Urbit’s promise to middle-men: every Web2.0 service they use to scalp us will find its P2P analog on Urbit. We invite developers and entrepreneurs of all stripes to join in the feeding frenzy. Ideas are constantly nucleating in <a href="web+urbitgraph://group/~pindet-timmut/urbitcoin-cash">Urbitcoiners</a> and <a href="web+urbitgraph://group/~bitbet-bolbel/urbit-community/graph/~darrux-landes/business-building-on-urbit">Urbit Community</a>.
36+After honing our commercial tools on these use-cases, we’ll sail into a blue ocean. On the horizon: beautiful products, deployable at scale, built with the robust primitives of Urbit OS. Extensibility is Urbit’s promise to middle-men: every Web2.0 service they use to scalp us will find its P2P analog on Urbit. We invite developers and entrepreneurs of all stripes to join in the feeding frenzy. Ideas are constantly nucleating in [Urbitcoiners](web+urbitgraph://group/~pindet-timmut/urbitcoin-cash) and [Urbit Community](web+urbitgraph://group/~bitbet-bolbel/urbit-community/graph/~darrux-landes/business-building-on-urbit).
content/blog/introducing-os1.md+7−9
@@ -9,8 +9,6 @@ ship = "~ravmel-ropdyl"
9image = "https://media.urbit.org/site/posts/essays/intro-os1-landscape.png"
9image = "https://media.urbit.org/site/posts/essays/intro-os1-landscape.png"
10+++
10+++
11
11
12−<br>
13−
14<video class="ba w-100" autoplay loop src="https://media.urbit.org/site/posts/essays/intro-os1.mov"></video>
12<video class="ba w-100" autoplay loop src="https://media.urbit.org/site/posts/essays/intro-os1.mov"></video>
15
13
16## Introducing OS 1
14## Introducing OS 1
@@ -39,7 +37,7 @@ Let’s walk through the features of OS 1 one by one to see what it’s like.
39
37
40### Groups
38### Groups
41
39
42−<img class="ba" src="https://media.urbit.org/site/posts/essays/intro-os1-groups.png">
40+![](https://media.urbit.org/site/posts/essays/intro-os1-groups.png)
43
41
44The group is the main building block in OS 1. A group is simply a list of people that share a set of chat, links, and publish channels. A group is sort of like a super powerful group chat.
42The group is the main building block in OS 1. A group is simply a list of people that share a set of chat, links, and publish channels. A group is sort of like a super powerful group chat.
45
43
@@ -51,7 +49,7 @@ Let’s walk through each module and talk about what they can do.
51
49
52### Chat
50### Chat
53
51
54−<img class="ba" src="https://media.urbit.org/site/posts/essays/intro-os1-chat.png">
52+![](https://media.urbit.org/site/posts/essays/intro-os1-chat.png)
55
53
56Chat is chat: a sequential list of messages meant for synchronous communication. There are already a million ways to chat — but Urbit chat differs in a few important ways.
54Chat is chat: a sequential list of messages meant for synchronous communication. There are already a million ways to chat — but Urbit chat differs in a few important ways.
57
55
@@ -69,7 +67,7 @@ Anyway, not everything can happen in a chat. Let’s keep moving.
69
67
70### Links
68### Links
71
69
72−<img class="ba" src="https://media.urbit.org/site/posts/essays/intro-os1-links.png">
70+![](https://media.urbit.org/site/posts/essays/intro-os1-links.png)
73
71
74Links is a bit like Hacker News or Reddit. It’s just a collection of links with comments. There’s no upvoting or sorting. We decided that with a small group it’s more about collecting references than deciding what’s most exciting — but permutations of Links could be a great area for contributors to experiment with.
72Links is a bit like Hacker News or Reddit. It’s just a collection of links with comments. There’s no upvoting or sorting. We decided that with a small group it’s more about collecting references than deciding what’s most exciting — but permutations of Links could be a great area for contributors to experiment with.
75
73
@@ -79,7 +77,7 @@ We originally imagined links as evolving into more of a general-purpose ‘colle
79
77
80### Publishing
78### Publishing
81
79
82−<img class="ba" src="https://media.urbit.org/site/posts/essays/intro-os1-publish1.png">
80+![](https://media.urbit.org/site/posts/essays/intro-os1-publish1.png)
83
81
84Publishing is somewhere between a blog and a note-taking system. A Publish notebook is a list of markdown files with optional comments. A private Publish notebook is like a journal, a group notebook can be like a forum (with comments on) or a collaborative blog.
82Publishing is somewhere between a blog and a note-taking system. A Publish notebook is a list of markdown files with optional comments. A private Publish notebook is like a journal, a group notebook can be like a forum (with comments on) or a collaborative blog.
85
83
@@ -89,7 +87,7 @@ Publish, like all our other modules, is an interface to a generalized protocol f
89
87
90### Modules
88### Modules
91
89
92−<img class="ba" src="https://media.urbit.org/site/posts/essays/intro-os1-home.png">
90+![](https://media.urbit.org/site/posts/essays/intro-os1-home.png)
93
91
94You’ll find a few other things on the home screen: a clock, the weather, and a simple command-line that we call the Dojo. These are system-wide utilities that aren’t group-specific.
92You’ll find a few other things on the home screen: a clock, the weather, and a simple command-line that we call the Dojo. These are system-wide utilities that aren’t group-specific.
95
93
@@ -97,7 +95,7 @@ The clock and weather tiles are simple indications of the state of the outside w
97
95
98### Dojo
96### Dojo
99
97
100−<img class="ba" src="https://media.urbit.org/site/posts/essays/intro-os1-dojo.png">
98+![](https://media.urbit.org/site/posts/essays/intro-os1-dojo.png)
101
99
102The Dojo gives you a quick way to see that, under the hood, Urbit OS is a powerful general-purpose system. The system hasn’t evolved to the point that our libraries, frameworks, and modules are polished to our standards. Since it’s still early, we can’t claim that it’s easy to develop on top of this platform. But we want it to become much easier.
100The Dojo gives you a quick way to see that, under the hood, Urbit OS is a powerful general-purpose system. The system hasn’t evolved to the point that our libraries, frameworks, and modules are polished to our standards. Since it’s still early, we can’t claim that it’s easy to develop on top of this platform. But we want it to become much easier.
103
101
@@ -133,7 +131,7 @@ As we expand the affordances of the system and add modules over the course of OS
133
131
134### Becoming a homesteader
132### Becoming a homesteader
135
133
136−<img class="ba" src="https://media.urbit.org/site/posts/essays/intro-os1-landscape.png">
134+![](https://media.urbit.org/site/posts/essays/intro-os1-landscape.png)
137
135
138As a distributed team trying to stay connected, we like using OS 1 from day to day. We’d really like to hand-onboard a small group of like-minded groups of people who want to experiment with living on the fringe of the digital world. Toward this end, we started the community grants program.
136As a distributed team trying to stay connected, we like using OS 1 from day to day. We’d really like to hand-onboard a small group of like-minded groups of people who want to experiment with living on the fringe of the digital world. Toward this end, we started the community grants program.
139
137
content/blog/io-in-hoon.md+12−4
@@ -9,12 +9,8 @@ ship = "~wicdev-wisryt"
9image = "https://media.urbit.org/site/posts/essays/zion-canyon-1.jpg"
9image = "https://media.urbit.org/site/posts/essays/zion-canyon-1.jpg"
10+++
10+++
11
11
12−<br>
13−
14![canyon](https://media.urbit.org/site/posts/essays/zion-canyon-1.jpg)
12![canyon](https://media.urbit.org/site/posts/essays/zion-canyon-1.jpg)
15
13
16−<br>
17−
18Let's talk about IO in Urbit. I won't say much about how events and effects are processed by the runtime; it suffices to note that the runtime is a normal Unix program which (1) listens for various events, (2) passes them to Arvo (Urbit OS), and (3) processes the effects produced by Arvo. Instead, I’ll focus on how IO works from the perspective of Hoon programs, like Arvo or apps running on Arvo. But first, let's review IO paradigms in other languages.
14Let's talk about IO in Urbit. I won't say much about how events and effects are processed by the runtime; it suffices to note that the runtime is a normal Unix program which (1) listens for various events, (2) passes them to Arvo (Urbit OS), and (3) processes the effects produced by Arvo. Instead, I’ll focus on how IO works from the perspective of Hoon programs, like Arvo or apps running on Arvo. But first, let's review IO paradigms in other languages.
19
15
20All examples are in a made-up language, since it's useful to understand this information even before you're comfortable in Hoon. If you're learning Hoon and want a challenge, try translating them!
16All examples are in a made-up language, since it's useful to understand this information even before you're comfortable in Hoon. If you're learning Hoon and want a challenge, try translating them!
@@ -158,6 +154,7 @@ However, Arvo is a single-level store — all of its state is permanent. This is
158
154
159Further, Arvo and the vanes rarely perform long sequences of IO. Generally, they do one thing and emit some effects, similar to the HTTP server example above. Sometimes they "pass through" a request. For example, the Eyre vane passes HTTP requests to userspace agents or threads. In this case, there is a sequence of IO, which in monadic code would be:
155Further, Arvo and the vanes rarely perform long sequences of IO. Generally, they do one thing and emit some effects, similar to the HTTP server example above. Sometimes they "pass through" a request. For example, the Eyre vane passes HTTP requests to userspace agents or threads. In this case, there is a sequence of IO, which in monadic code would be:
160
156
157+```
161 loop()
158 loop()
162
159
163 where:
160 where:
@@ -168,6 +165,7 @@ Further, Arvo and the vanes rarely perform long sequences of IO. Generally, they
168 response <- callAgent(agent, request)
165 response <- callAgent(agent, request)
169 _ <- sendResponse(request, response)
166 _ <- sendResponse(request, response)
170 loop()
167 loop()
168+```
171
169
172This is clear code to read, but it leaves open the question of how to respond during the callAgent() function. If another request comes in, can we handle it in parallel? If we need to upgrade ourselves before the agent responds, can we make sure to properly handle the response?
170This is clear code to read, but it leaves open the question of how to respond during the callAgent() function. If another request comes in, can we handle it in parallel? If we need to upgrade ourselves before the agent responds, can we make sure to properly handle the response?
173
171
@@ -175,6 +173,7 @@ The naive solution in monadic code is to say that you can only handle one reques
175
173
176In a state machine, the naive solution is:
174In a state machine, the naive solution is:
177
175
176+```
178 state :: (map request agent)
177 state :: (map request agent)
179 main(state, event) {
178 main(state, event) {
180 switch event {
179 switch event {
@@ -185,6 +184,7 @@ In a state machine, the naive solution is:
185 [del(state, request), HTTPRespond request response]
184 [del(state, request), HTTPRespond request response]
186 }
185 }
187 }
186 }
187+```
188
188
189Upgrading this is trivial, since the state (map of requests to outstanding calls to agents) is explicit. It also trivially handles concurrent requests.
189Upgrading this is trivial, since the state (map of requests to outstanding calls to agents) is explicit. It also trivially handles concurrent requests.
190
190
@@ -200,6 +200,7 @@ However, userspace sometimes needs to perform long sequences of IO. Let's look a
200
200
201Monadic:
201Monadic:
202
202
203+```
203 topStories <- fetch(topStoriesUrl)
204 topStories <- fetch(topStoriesUrl)
204 loop(topStories)
205 loop(topStories)
205
206
@@ -219,9 +220,11 @@ Monadic:
219 bail
220 bail
220 else:
221 else:
221 retryLoop(n-1, story)
222 retryLoop(n-1, story)
223+```
222
224
223State machine:
225State machine:
224
226
227+```
225 state :: Initial
228 state :: Initial
226 | FetchingTop
229 | FetchingTop
227 | FetchingStory comments stories retries
230 | FetchingStory comments stories retries
@@ -253,6 +256,7 @@ State machine:
253 }
256 }
254 }
257 }
255 }
258 }
259+```
256
260
257With practice, the state machine version of this can be written correctly. However, (1) it's verbose, (2) the control flow jumps all over the place, and (3) in practice it's challenging to get exactly right. This is still a small example, and it gets much worse as the length and complexity of the IO sequence grows.
261With practice, the state machine version of this can be written correctly. However, (1) it's verbose, (2) the control flow jumps all over the place, and (3) in practice it's challenging to get exactly right. This is still a small example, and it gets much worse as the length and complexity of the IO sequence grows.
258
262
@@ -280,12 +284,15 @@ We're in a bit of a bind, though: Jael has to be a state machine. The solution i
280
284
281This thread has a definite purpose: given the most recent block number we already know about, fetch all the PKI transactions since then. The function signature is:
285This thread has a definite purpose: given the most recent block number we already know about, fetch all the PKI transactions since then. The function signature is:
282
286
287+```
283 syncEthereum oldBlockNumber -> IO [newBlockNumber, newTxs]
288 syncEthereum oldBlockNumber -> IO [newBlockNumber, newTxs]
289+```
284
290
285Jael runs this thread every five minutes and, if it succeeds, then we update our block number and PKI state. If the thread fails, gets stuck, or we need to upgrade it, we just kill the old thread and start a new one. Again, a few extra HTTP requests don’t matter.
291Jael runs this thread every five minutes and, if it succeeds, then we update our block number and PKI state. If the thread fails, gets stuck, or we need to upgrade it, we just kill the old thread and start a new one. Again, a few extra HTTP requests don’t matter.
286
292
287From Jael's perspective, it looks something like:
293From Jael's perspective, it looks something like:
288
294
295+```
289 state :: State block txs outstandingThread
296 state :: State block txs outstandingThread
290 main(state,event) {
297 main(state,event) {
291 switch event {
298 switch event {
@@ -304,6 +311,7 @@ From Jael's perspective, it looks something like:
304 [State newBlockNumber append(txs,newTxs) Null, Null]
311 [State newBlockNumber append(txs,newTxs) Null, Null]
305 }
312 }
306 }
313 }
314+```
307
315
308In other words, from Jael's perspective, it's just a single IO event that encapsulates arbitrarily complex IO in the thread. A single IO event is easy enough, and we can maintain all our permanency and robustness guarantees, because we know the thread will have one of three results: success, failure, or it hangs. If we set a timeout, hang becomes failure, so there's only two possible results: success or failure. If we handle both of those correctly, we've handled all the possible IO errors that could have occurred.
316In other words, from Jael's perspective, it's just a single IO event that encapsulates arbitrarily complex IO in the thread. A single IO event is easy enough, and we can maintain all our permanency and robustness guarantees, because we know the thread will have one of three results: success, failure, or it hangs. If we set a timeout, hang becomes failure, so there's only two possible results: success or failure. If we handle both of those correctly, we've handled all the possible IO errors that could have occurred.
309
317
content/blog/iot.md+1−5
@@ -9,12 +9,8 @@ ship = "~datnut-pollen"
9image = "https://media.urbit.org/site/posts/essays/phobos.jpeg"
9image = "https://media.urbit.org/site/posts/essays/phobos.jpeg"
10+++
10+++
11
11
12−<br>
13−
14![phobos](https://media.urbit.org/site/posts/essays/phobos.jpeg)
12![phobos](https://media.urbit.org/site/posts/essays/phobos.jpeg)
15
13
16−<br>
17−
18Each of the ~4B 32-or-fewer-bit or [Azimuth](/docs/glossary/azimuth)
14Each of the ~4B 32-or-fewer-bit or [Azimuth](/docs/glossary/azimuth)
19identities, namely [planets](/docs/glossary/planet),
15identities, namely [planets](/docs/glossary/planet),
20[stars](/docs/glossary/star), and [galaxies](/docs/glossary/galaxy), may
16[stars](/docs/glossary/star), and [galaxies](/docs/glossary/galaxy), may
@@ -302,7 +298,7 @@ So let us focus on the additional meritorious aspects of Urbit (or more
302generally, solid state interpreter networks) that make it not merely a band-aid
298generally, solid state interpreter networks) that make it not merely a band-aid
303to the broken IoT system but a permanent and sound replacement.
299to the broken IoT system but a permanent and sound replacement.
304
300
305−#### Solid state interpreter networks {#ssi}
301+#### Solid state interpreter networks {% #ssi %}
306
302
307![cubesats](https://media.urbit.org/site/posts/essays/cubesats.jpg)
303![cubesats](https://media.urbit.org/site/posts/essays/cubesats.jpg)
308
304
content/blog/layer-2-faq.md+3−3
@@ -45,7 +45,7 @@ you **do not** need ETH to boot Urbit. That Urbit ID is now yours, forever.
45Unsure whether you have been invited to claim a L2 or L1 planet? The quickest
45Unsure whether you have been invited to claim a L2 or L1 planet? The quickest
46way to identify a L2 planet is if you used the below flow to claim.
46way to identify a L2 planet is if you used the below flow to claim.
47
47
48−<img src="/images/planet-l2-claim.gif" style="max-height: 400px; width: auto; margin: 0 auto;"/>
48+![](/images/planet-l2-claim.gif)
49
49
50For those with L1 planets, you can avoid future transaction fees by migrating
50For those with L1 planets, you can avoid future transaction fees by migrating
51your L1 planet to L2. Read the migration instructions
51your L1 planet to L2. Read the migration instructions
@@ -92,12 +92,12 @@ Bridge.
92
92
93There are a number of ways to host a planet in the cloud. Your options:
93There are a number of ways to host a planet in the cloud. Your options:
94
94
95−- DIY:<br>
95+- DIY:
96 The most cost-effective method is [setting it up
96 The most cost-effective method is [setting it up
97 yourself](https://urbit.org/using/running/hosting), though this route requires
97 yourself](https://urbit.org/using/running/hosting), though this route requires
98 some system administration, and troubleshooting if any issues arise.
98 some system administration, and troubleshooting if any issues arise.
99
99
100−- Via a Hosting Provider:<br>
100+- Via a Hosting Provider:
101 The more “headache-free” option is paying for a
101 The more “headache-free” option is paying for a
102 hosting provider to take care of all these processes for you, plus support. The
102 hosting provider to take care of all these processes for you, plus support. The
103 following service providers offer hosting (some include a free planet):
103 following service providers offer hosting (some include a free planet):
content/blog/metaphase.md−4
@@ -9,12 +9,8 @@ ship = "~haddef-sigwen"
9image = "https://media.urbit.org/site/posts/essays/metaphase.jpg"
9image = "https://media.urbit.org/site/posts/essays/metaphase.jpg"
10+++
10+++
11
11
12−<br>
13−
14![mitosis](https://media.urbit.org/site/posts/essays/metaphase.jpg)
12![mitosis](https://media.urbit.org/site/posts/essays/metaphase.jpg)
15
13
16−<br>
17−
18_Previous versions of this essay specified the stream deploy date as December 11, 2020; then December 18, 2020. This has been amended to the actual date of release, with our sincere apologies. For new readers, you can opt into the dev stream by running:_
14_Previous versions of this essay specified the stream deploy date as December 11, 2020; then December 18, 2020. This has been amended to the actual date of release, with our sincere apologies. For new readers, you can opt into the dev stream by running:_
19
15
20```
16```
content/blog/pki-maze.md+10−10
@@ -27,7 +27,7 @@ This is our first stop in the idea maze. We call this sort of name a "comet". A
27
27
28However, Urbit is yours and it's forever. You shouldn't have to change your name every time you change your keys. So, we go back and take the other choice: you must be able to change your keys.
28However, Urbit is yours and it's forever. You shouldn't have to change your name every time you change your keys. So, we go back and take the other choice: you must be able to change your keys.
29
29
30−To change keys, you must sign a message with the old keys revoking them and supplying the new ones[^0]. The question is what happens if the old keys also sign a second set of new keys. This could happen if an attacker obtained your old keys after the fact. This is important because one of the reasons to be able to change your keys is to invalidate the old ones so that they have no power.
30+To change keys, you must sign a message with the old keys revoking them and supplying the new ones[^1]. The question is what happens if the old keys also sign a second set of new keys. This could happen if an attacker obtained your old keys after the fact. This is important because one of the reasons to be able to change your keys is to invalidate the old ones so that they have no power.
31
31
32We have two options again: the PKI may be globally consistent or not. To be globally consistent means that if you believe a name is bound to a set of keys, then nobody on the network will disagree.
32We have two options again: the PKI may be globally consistent or not. To be globally consistent means that if you believe a name is bound to a set of keys, then nobody on the network will disagree.
33
33
@@ -37,13 +37,13 @@ For a globally consistent PKI that allows you to revoke keys, you need to be abl
37
37
38However, the problem of proving one message was sent before any later ones inverts the problem. You can solve this with newspapers by placing the message in the text of the newspaper. However, while reading a newspaper requires no central party, writing one does. For a long time, this sort of message was always handled by a central party. SSL revocations are managed by a few central parties. When you buy property, it's not sufficient to have the previous owner sign the title — this must be entered into a central land registry. Otherwise, the owner may sell their property to multiple people and there would be no way to determine who is the new owner. With the land registry, all you need to do is ask the registry which sale happened first, and that's the one that counts.
38However, the problem of proving one message was sent before any later ones inverts the problem. You can solve this with newspapers by placing the message in the text of the newspaper. However, while reading a newspaper requires no central party, writing one does. For a long time, this sort of message was always handled by a central party. SSL revocations are managed by a few central parties. When you buy property, it's not sufficient to have the previous owner sign the title — this must be entered into a central land registry. Otherwise, the owner may sell their property to multiple people and there would be no way to determine who is the new owner. With the land registry, all you need to do is ask the registry which sale happened first, and that's the one that counts.
39
39
40−However, Urbit is yours and it's forever. Trusting central registries jeopardizes both. The keen reader will notice that the problem of determining which key rotation happened first is exactly the double-spend problem that Satoshi solved with his proof of work algorithm for Bitcoin. His first block famously includes a newspaper headline to prove he didn't mine the block before that date. In a beautiful duality, his own algorithm proves that he didn't mine it after that date.[^1]
40+However, Urbit is yours and it's forever. Trusting central registries jeopardizes both. The keen reader will notice that the problem of determining which key rotation happened first is exactly the double-spend problem that Satoshi solved with his proof of work algorithm for Bitcoin. His first block famously includes a newspaper headline to prove he didn't mine the block before that date. In a beautiful duality, his own algorithm proves that he didn't mine it after that date.[^2]
41
41
42Some argue that blockchain is only good for money. This is myopic and is generally based on the experience that its most valuable application so far has been money. However, blockchain is a cryptographic primitive to do what was previously impossible: prove that one message was signed before another without a central party. Blockchain was discovered by someone trying to create digital money, and he needed that primitive, but that doesn't mean that's all it's good for.
42Some argue that blockchain is only good for money. This is myopic and is generally based on the experience that its most valuable application so far has been money. However, blockchain is a cryptographic primitive to do what was previously impossible: prove that one message was signed before another without a central party. Blockchain was discovered by someone trying to create digital money, and he needed that primitive, but that doesn't mean that's all it's good for.
43
43
44−Thus, we store our PKI data on a blockchain for our second kind of name: planets. A planet is a 32-bit address which has key information stored on the blockchain.[^2] The owner of a planet may broadcast new PKI data by adding it to the blockchain. Any later messages by the old keys will be rejected, and everyone on the network will listen to the blockchain for key data. Thus, we have global consistency, permanence, and self sovereignty. We know of no other solution that can provide these properties.
44+Thus, we store our PKI data on a blockchain for our second kind of name: planets. A planet is a 32-bit address which has key information stored on the blockchain.[^3] The owner of a planet may broadcast new PKI data by adding it to the blockchain. Any later messages by the old keys will be rejected, and everyone on the network will listen to the blockchain for key data. Thus, we have global consistency, permanence, and self sovereignty. We know of no other solution that can provide these properties.
45
45
46−However, while small individually, the aggregate PKI data for all nodes on the network may become very large. This is not an issue for comets because nobody needs to store comet keys except for those which they're talking with, and even those can be garbage-collected and re-requested and verified. For planets, there is a canonical set of keys, and somebody must store that. There are about 2<sup>32</sup>, or 4 billion planets. If the PKI data is about 100 bytes for each planet, this is about 400 GB of data. This may be more than most users wish to store, but it's small enough that it would be very cheap for someone to host this data for many users[^3].
46+However, while small individually, the aggregate PKI data for all nodes on the network may become very large. This is not an issue for comets because nobody needs to store comet keys except for those which they're talking with, and even those can be garbage-collected and re-requested and verified. For planets, there is a canonical set of keys, and somebody must store that. There are about 2^32^, or 4 billion planets. If the PKI data is about 100 bytes for each planet, this is about 400 GB of data. This may be more than most users wish to store, but it's small enough that it would be very cheap for someone to host this data for many users[^4].
47
47
48This information is currently stored directly on the Ethereum 1.0 blockchain, but as is well understood in blockchain circles this approach will not scale beyond a certain point. Many chains are pursing designs that allow the users of the smart contracts to store locally the data associated with the contracts they care about and only commit hashes to the chain. We expect there to be several viable options for this by the time our scaling needs exceed what's provided by Ethereum 1.0. This will free us from the cost of hosting the PKI data on all Ethereum nodes, but the data must still be stored somewhere. Any service that could handle such a large amount of data would inherently centralize the network.
48This information is currently stored directly on the Ethereum 1.0 blockchain, but as is well understood in blockchain circles this approach will not scale beyond a certain point. Many chains are pursing designs that allow the users of the smart contracts to store locally the data associated with the contracts they care about and only commit hashes to the chain. We expect there to be several viable options for this by the time our scaling needs exceed what's provided by Ethereum 1.0. This will free us from the cost of hosting the PKI data on all Ethereum nodes, but the data must still be stored somewhere. Any service that could handle such a large amount of data would inherently centralize the network.
49
49
@@ -61,10 +61,10 @@ To create a sane network, we require global consistency for all our names. There
61
61
62- Moons are permanent, not self sovereign, and plentiful.
62- Moons are permanent, not self sovereign, and plentiful.
63
63
64−Fancifully, comets are wayward celestial bodies that are great for testing and miscellaneous low-value things that won't last for long. Planets are where you can build a home and shape it into anything you want it to be. People can always find your planet; it's not going anywhere. Moons are useful for special purposes, like storage, heavy industry, and anything else you might want to do off-planet.[^4]
64+Fancifully, comets are wayward celestial bodies that are great for testing and miscellaneous low-value things that won't last for long. Planets are where you can build a home and shape it into anything you want it to be. People can always find your planet; it's not going anywhere. Moons are useful for special purposes, like storage, heavy industry, and anything else you might want to do off-planet.[^5]
65
65
66−[^0]: Or the equivalent with a hierarchical key structure. In practice, you want to have a master key which signs a junior key for everyday use. You use the master key to rotate the junior key.
66+[^1]: Or the equivalent with a hierarchical key structure. In practice, you want to have a master key which signs a junior key for everyday use. You use the master key to rotate the junior key.
67−[^1]: More strictly: it proves that he didn't mine it after the other blocks currently on the Bitcoin blockchain. It only gives an ordering within the chain, not a literal timestamp.
67+[^2]: More strictly: it proves that he didn't mine it after the other blocks currently on the Bitcoin blockchain. It only gives an ordering within the chain, not a literal timestamp.
68−[^2]: In addition to planets, there are stars and galaxies. From a PKI perspective they're treated exactly like planets, but on the network they provide infrastructure services like routing.
68+[^3]: In addition to planets, there are stars and galaxies. From a PKI perspective they're treated exactly like planets, but on the network they provide infrastructure services like routing.
69−[^3]: In practice, this will likely be an included service by your sponsoring star. It could be a separate service, but it will be very cheap because it's a commodity and the "cost of production" is very cheap. At any rate, it should never rise above the capital cost of a 400GB hard drive.
69+[^4]: In practice, this will likely be an included service by your sponsoring star. It could be a separate service, but it will be very cheap because it's a commodity and the "cost of production" is very cheap. At any rate, it should never rise above the capital cost of a 400GB hard drive.
70−[^4]: To extend the metaphor, stars are a neighborhood to live in -- they're easier for other planets to see, so when they want to send you a message they look for your star first. If they don't even know where your star is, they can certainly find your star's galaxy, and that will be enough to locate the star. Of course, if your star is not providing satisfactory service, you can take your planet and move to another star.
70+[^5]: To extend the metaphor, stars are a neighborhood to live in -- they're easier for other planets to see, so when they want to send you a message they look for your star first. If they don't even know where your star is, they can certainly find your star's galaxy, and that will be enough to locate the star. Of course, if your star is not providing satisfactory service, you can take your planet and move to another star.
content/blog/platform-decay.md+1−3
@@ -9,9 +9,7 @@ ship = "~simfur-ritwed"
9image = "https://media.urbit.org/site/posts/essays/platform-decay-preview.png"
9image = "https://media.urbit.org/site/posts/essays/platform-decay-preview.png"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/platform-decay.png">
12+![](https://media.urbit.org/site/posts/essays/platform-decay.png)
15
13
16## Platform decay, decentralized marketplaces, and Urbit
14## Platform decay, decentralized marketplaces, and Urbit
17
15
content/blog/precepts-discussion.md+7−21
@@ -9,9 +9,7 @@ ship = "~wicdev-wisryt"
9image = "https://media.urbit.org/site/posts/essays/discuss-01.jpg"
9image = "https://media.urbit.org/site/posts/essays/discuss-01.jpg"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/discuss-01.jpg">
12+![](https://media.urbit.org/site/posts/essays/discuss-01.jpg)
15
13
16The precepts aren’t arguments. We will discuss and justify them here. We don't expect to convince you this is exactly the right set of precepts, but we hope to convince you that this is a coherent set of precepts that might lead to something very interesting.
14The precepts aren’t arguments. We will discuss and justify them here. We don't expect to convince you this is exactly the right set of precepts, but we hope to convince you that this is a coherent set of precepts that might lead to something very interesting.
17
15
@@ -36,9 +34,7 @@ We will address these in the same categories presented above:
36- F: Real Software. Not all software matters. Any software which
34- F: Real Software. Not all software matters. Any software which
37 wouldn't exist on Mars isn't real.
35 wouldn't exist on Mars isn't real.
38
36
39−<br>
40−
41−<img class="ba" src="https://media.urbit.org/site/posts/essays/discuss-02.jpg">
37+![](https://media.urbit.org/site/posts/essays/discuss-02.jpg)
42
38
43### A: General Design
39### A: General Design
44
40
@@ -355,9 +351,7 @@ An example of the second is "security through obscurity is ineffective". Securit
355
351
356However, it's important for whoever's coming up with the cliches to understand the specifics of how they're untruthful. Some of these very precepts may fall under the category of "literally untrue but more useful than the truth".
352However, it's important for whoever's coming up with the cliches to understand the specifics of how they're untruthful. Some of these very precepts may fall under the category of "literally untrue but more useful than the truth".
357
353
358−<br>
359−
360−<img class="ba" src="https://media.urbit.org/site/posts/essays/discuss-03.jpg">
354+![](https://media.urbit.org/site/posts/essays/discuss-03.jpg)
361
355
362## B: Specific Design
356## B: Specific Design
363
357
@@ -415,9 +409,7 @@ Memory access restrictions are blunt tools. Blunt tools are nice in simple syste
415
409
416Better to define rules in a more powerful language. This allows you to follow A6 and A8. It also lets you use all the correctness tools, like type systems, that you've developed for the rest of your code.
410Better to define rules in a more powerful language. This allows you to follow A6 and A8. It also lets you use all the correctness tools, like type systems, that you've developed for the rest of your code.
417
411
418−<br>
419−
420−<img class="ba" src="https://media.urbit.org/site/posts/essays/discuss-04.jpg">
412+![](https://media.urbit.org/site/posts/essays/discuss-04.jpg)
421
413
422### C: Attitude
414### C: Attitude
423
415
@@ -468,9 +460,7 @@ of your own mind.
468This is also one of the best ways to build stuff correctly. Very often, you will be tempted to cut a corner, and someone will point out that it should be done correctly. You should consider why you immediately rejected it. Was it because you were afraid of the relevant piece of code? If so, you should learn more about that code to determine if it's actually a good idea. Did you reject it because you felt it would distract you from working on what you thought was more important?
460This is also one of the best ways to build stuff correctly. Very often, you will be tempted to cut a corner, and someone will point out that it should be done correctly. You should consider why you immediately rejected it. Was it because you were afraid of the relevant piece of code? If so, you should learn more about that code to determine if it's actually a good idea. Did you reject it because you felt it would distract you from working on what you thought was more important?
469Consider carefully whether this particular piece of technical debt is worth taking on. It's worth 60 seconds of thinking about how you could solve it correctly right now — often it would be quite easy to do correctly and you'd be paying interest on the incorrectness for a long time.
461Consider carefully whether this particular piece of technical debt is worth taking on. It's worth 60 seconds of thinking about how you could solve it correctly right now — often it would be quite easy to do correctly and you'd be paying interest on the incorrectness for a long time.
470
462
471−<br>
472−
473−<img class="ba" src="https://media.urbit.org/site/posts/essays/discuss-05.jpg">
463+![](https://media.urbit.org/site/posts/essays/discuss-05.jpg)
474
464
475### D: Theory
465### D: Theory
476
466
@@ -511,9 +501,7 @@ objective properties and your subjective judgment of the quality of the system.
511
501
512However, that explanatory power is indeed powerful, and the exploratory suggestions are often able to break you out of a rut (attractor basin). Respect the tension.
502However, that explanatory power is indeed powerful, and the exploratory suggestions are often able to break you out of a rut (attractor basin). Respect the tension.
513
503
514−<img class="ba" src="https://media.urbit.org/site/posts/essays/discuss-06.jpg">
504+![](https://media.urbit.org/site/posts/essays/discuss-06.jpg)
515−
516−<br>
517
505
518### E: Text Style
506### E: Text Style
519
507
@@ -615,9 +603,7 @@ We're really good at memorizing sets of things, like runes. We're also good at i
615
603
616So don't be afraid to use new names for new concepts. If concepts are siblings, they needn't necessarily have a direct connection in their name, but if they're hierarchical, then something should suggest that. This can be syntactic or semantic.
604So don't be afraid to use new names for new concepts. If concepts are siblings, they needn't necessarily have a direct connection in their name, but if they're hierarchical, then something should suggest that. This can be syntactic or semantic.
617
605
618−<br>
619−
620−<img class="ba" src="https://media.urbit.org/site/posts/essays/discuss-07.jpg">
606+![](https://media.urbit.org/site/posts/essays/discuss-07.jpg)
621
607
622### F: Real Software
608### F: Real Software
623
609
content/blog/precepts.md+7−21
@@ -9,9 +9,7 @@ ship = "~wicdev-wisryt"
9image = "https://media.urbit.org/site/posts/essays/pre-01.jpg"
9image = "https://media.urbit.org/site/posts/essays/pre-01.jpg"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-01.jpg">
12+![](https://media.urbit.org/site/posts/essays/pre-01.jpg)
15
13
16Urbit is a principled approach to system design and programming, but it's often not obvious what those principles are. We have many specific terms for the different parts of the project: Arvo is the OS, Hoon is the language, Tlon is the company, Azimuth is the identity system, Ames is the network. But the word most associated with the project is "Urbit", and it's not clear what technically it refers to. It's only a small stretch to say that "Urbit" _is_ this set of principles, and that if anybody follows these principles strictly they will create a system that is isomorphic to the Urbit.
14Urbit is a principled approach to system design and programming, but it's often not obvious what those principles are. We have many specific terms for the different parts of the project: Arvo is the OS, Hoon is the language, Tlon is the company, Azimuth is the identity system, Ames is the network. But the word most associated with the project is "Urbit", and it's not clear what technically it refers to. It's only a small stretch to say that "Urbit" _is_ this set of principles, and that if anybody follows these principles strictly they will create a system that is isomorphic to the Urbit.
17
15
@@ -19,9 +17,7 @@ Some of these are commonly held among many software projects, and some are not.
19
17
20We’ll start with a brief description of many principles, then we’ll go into a long-form justification.
18We’ll start with a brief description of many principles, then we’ll go into a long-form justification.
21
19
22−<br>
23−
24−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-02.jpg">
20+![](https://media.urbit.org/site/posts/essays/pre-02.jpg)
25
21
26### A: General Design
22### A: General Design
27
23
@@ -138,9 +134,7 @@ We’ll start with a brief description of many principles, then we’ll go into
13823. Some cliches are repeated because they are true; others must be
13423. Some cliches are repeated because they are true; others must be
139 repeated because they are not.
135 repeated because they are not.
140
136
141−<br>
142−
143−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-03.jpg">
137+![](https://media.urbit.org/site/posts/essays/pre-03.jpg)
144
138
145### B: Specific Design
139### B: Specific Design
146
140
@@ -170,9 +164,7 @@ We’ll start with a brief description of many principles, then we’ll go into
170 A compiler can use type safety as an effective tool to enforce
164 A compiler can use type safety as an effective tool to enforce
171 some classes of security guarantees.
165 some classes of security guarantees.
172
166
173−<br>
174−
175−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-04.jpg">
167+![](https://media.urbit.org/site/posts/essays/pre-04.jpg)
176
168
177### C: Attitude
169### C: Attitude
178
170
@@ -203,9 +195,7 @@ We’ll start with a brief description of many principles, then we’ll go into
203 responding take a full 60 seconds to envision how you would implement
195 responding take a full 60 seconds to envision how you would implement
204 it and what the effects would be.
196 it and what the effects would be.
205
197
206−<br>
207−
208−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-05.jpg">
198+![](https://media.urbit.org/site/posts/essays/pre-05.jpg)
209
199
210### D: Theory
200### D: Theory
211
201
@@ -250,9 +240,7 @@ We’ll start with a brief description of many principles, then we’ll go into
250 use theory to fix the bad, add the missing, and remove the
240 use theory to fix the bad, add the missing, and remove the
251 unnecessary. Repeat.
241 unnecessary. Repeat.
252
242
253−<br>
254−
255−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-06.jpg">
243+![](https://media.urbit.org/site/posts/essays/pre-06.jpg)
256
244
257### E: Text Style
245### E: Text Style
258
246
@@ -285,9 +273,7 @@ We’ll start with a brief description of many principles, then we’ll go into
285
273
2868. Abbreviations aren't worth it.
2748. Abbreviations aren't worth it.
287
275
288−<br>
289−
290−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-07.jpg">
276+![](https://media.urbit.org/site/posts/essays/pre-07.jpg)
291
277
292### F: Real Software
278### F: Real Software
293
279
content/blog/providers.md+1−5
@@ -9,11 +9,7 @@ ship = "~ravmel-ropdyl"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/providers.png"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/providers.png"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://storage.googleapis.com/media.urbit.org/site/posts/essays/providers.png">
12+![](https://storage.googleapis.com/media.urbit.org/site/posts/essays/providers.png)
15−
16−<br>
17
13
18We look forward to a future where your Urbit is an always-on, always-available service. You should be able to pick up any device and conjure up your whole digital life immediately.
14We look forward to a future where your Urbit is an always-on, always-available service. You should be able to pick up any device and conjure up your whole digital life immediately.
19
15
content/blog/rollups.md+4−4
@@ -121,7 +121,7 @@ And that's it! If you'd like to know how things will be changing for
121[stars](#stars), what goes into [setting up a roller](#rollers), and additional
121[stars](#stars), what goes into [setting up a roller](#rollers), and additional
122[technical details](#technical), read on.
122[technical details](#technical), read on.
123
123
124−### Changes to stars {#stars}
124+### Changes to stars {% #stars %}
125
125
126Both planets and stars will be able to move to layer 2.
126Both planets and stars will be able to move to layer 2.
127[Galaxies](/docs/glossary/galaxy) must remain on layer 1 for technical
127[Galaxies](/docs/glossary/galaxy) must remain on layer 1 for technical
@@ -148,7 +148,7 @@ moving ownership to layer 2, this will be a one-way journey for now. Planets
148spawned before moving the spawn proxy to layer 2 will remain on layer 1, but
148spawned before moving the spawn proxy to layer 2 will remain on layer 1, but
149from then on, all planets spawned by that star will live on layer 2. Finally, stars in this second mode may transition to the first mode, but not vice versa.
149from then on, all planets spawned by that star will live on layer 2. Finally, stars in this second mode may transition to the first mode, but not vice versa.
150
150
151−### Creating a roller {#rollers}
151+### Creating a roller {% #rollers %}
152
152
153![gasprices](https://media.urbit.org/site/posts/essays/gasprices.jpeg)
153![gasprices](https://media.urbit.org/site/posts/essays/gasprices.jpeg)
154
154
@@ -182,7 +182,7 @@ making a couple minor alterations:
182- Galaxies and their proxies cannot be deposited to layer 2.
182- Galaxies and their proxies cannot be deposited to layer 2.
183 Some other minor details are yet to be worked out, but again, nothing will change for those who wish to remain on layer 1.
183 Some other minor details are yet to be worked out, but again, nothing will change for those who wish to remain on layer 1.
184
184
185−### Technical details {#technical}
185+### Technical details {% #technical %}
186
186
187What's really going on behind the scenes here? Briefly, only the data of the Urbit ID transactions will be posted on-chain, while computation and state storage will now happen on your ship.
187What's really going on behind the scenes here? Briefly, only the data of the Urbit ID transactions will be posted on-chain, while computation and state storage will now happen on your ship.
188
188
@@ -203,7 +203,7 @@ blockchain, rather than the EVM.
203Since [Urbit OS](/docs/glossary/arvo) is deterministic, and Hoon has some nice formal
203Since [Urbit OS](/docs/glossary/arvo) is deterministic, and Hoon has some nice formal
204properties, it turns out to be a great language for writing smart contracts. Thus we are effectively swapping the Ethereum smart contract with a “Hoon smart contract” run locally on your ship.
204properties, it turns out to be a great language for writing smart contracts. Thus we are effectively swapping the Ethereum smart contract with a “Hoon smart contract” run locally on your ship.
205
205
206−#### Further Resources {#resources}
206+#### Further Resources {% #resources %}
207
207
208We want to keep this post brief and non-technical, so that's all we'll say about
208We want to keep this post brief and non-technical, so that's all we'll say about
209it for now. To find out more, you have a few directions to go on. We held a
209it for now. To find out more, you have a few directions to go on. We held a
content/blog/security-audit.md−4
@@ -9,12 +9,8 @@ ship = "~rovnys-ricfer + ~poldec-tonteg"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/20201218-audit.png"
9image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/20201218-audit.png"
10+++
10+++
11
11
12−<br>
13−
14![audit](https://storage.googleapis.com/media.urbit.org/site/posts/essays/20201218-audit.png)
12![audit](https://storage.googleapis.com/media.urbit.org/site/posts/essays/20201218-audit.png)
15
13
16−<br>
17−
18The security firm Leviathan has now finished their initial audit of the security of Urbit's Ames network protocol. In addition to their review of Ames, we also asked them to identify any other issues in order to help guide further development.
14The security firm Leviathan has now finished their initial audit of the security of Urbit's Ames network protocol. In addition to their review of Ames, we also asked them to identify any other issues in order to help guide further development.
19
15
20I'm pleased to report they confirmed the cryptographic soundness of the protocol, namely that "a ship must have possession of their own valid Urbit key in order to authenticate as that ship and to send valid Ames messages. Additionally, no other ship except the two communicating may be able to decrypt or modify messages during transport."
16I'm pleased to report they confirmed the cryptographic soundness of the protocol, namely that "a ship must have possession of their own valid Urbit key in order to authenticate as that ship and to send valid Ames messages. Additionally, no other ship except the two communicating may be able to decrypt or modify messages during transport."
content/blog/simple-durable-yours.md+3−3
@@ -9,13 +9,13 @@ We live in a world dense with digital services. We see the world through them, w
9
9
10But computers are a mess.
10But computers are a mess.
11
11
12−<img class="ba mv5 w-100" src="https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-notifications.svg">
12+![](https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-notifications.svg)
13
13
14We spend all our time switching between services, juggling logins and different interfaces. And once we’re logged in, the services we use harvest our data, spy on us, and often shut down with little warning.
14We spend all our time switching between services, juggling logins and different interfaces. And once we’re logged in, the services we use harvest our data, spy on us, and often shut down with little warning.
15
15
16If computers are going to be a part of our lives for generations to come, we need a sound foundation for them. We need a _system_, not a grab bag of apps and services. Urbit is that system.
16If computers are going to be a part of our lives for generations to come, we need a sound foundation for them. We need a _system_, not a grab bag of apps and services. Urbit is that system.
17
17
18−<img class="ba mv5 w-100" src="https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-rock%402x.png">
18+![](https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-rock%402x.png)
19
19
20We built Urbit from scratch to be a system that’s simple, durable, and yours. Everything that computing today is not — but should be.
20We built Urbit from scratch to be a system that’s simple, durable, and yours. Everything that computing today is not — but should be.
21
21
@@ -39,7 +39,7 @@ Your Urbit is designed to be durable: both to store your data across generations
39
39
40Finally, your Urbit belongs to you in every possible way. You own it with a private key, control it completely, and can inspect its source code. We want your Urbit to be your digital home. A home you don’t own is just a hotel room.
40Finally, your Urbit belongs to you in every possible way. You own it with a private key, control it completely, and can inspect its source code. We want your Urbit to be your digital home. A home you don’t own is just a hotel room.
41
41
42−<img class="ba mv5 w-100" src="https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-evolution.svg">
42+![](https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-evolution.svg)
43
43
44Urbit began as a sketch, driven from a basic intuition that a better platform could be built. Today, Urbit is two components: Urbit ID, an identity system that’s already live on Ethereum; and Urbit OS, a decentralized network and OS stack that’s young but working well.
44Urbit began as a sketch, driven from a basic intuition that a better platform could be built. Today, Urbit is two components: Urbit ID, an identity system that’s already live on Ethereum; and Urbit OS, a decentralized network and OS stack that’s young but working well.
45
45
content/blog/the-missing-middle.md+1−5
@@ -9,11 +9,7 @@ ship = "~simfur-ritwed"
9image = "https://media.urbit.org/site/posts/essays/missing-middle.png"
9image = "https://media.urbit.org/site/posts/essays/missing-middle.png"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/missing-middle.png">
12+![](https://media.urbit.org/site/posts/essays/missing-middle.png)
15−
16−<br>
17
13
18The promise of social technology is that we can discover more friends; _specifically, people more similar to us_ than we previously had access to. The means by which we do so, the methods of collaboration, the quality of connected experiences; these factors matter, but they are marginal considerations compared to the basic offering of an expanded choice of connections.
14The promise of social technology is that we can discover more friends; _specifically, people more similar to us_ than we previously had access to. The means by which we do so, the methods of collaboration, the quality of connected experiences; these factors matter, but they are marginal considerations compared to the basic offering of an expanded choice of connections.
19
15
content/blog/the-understanding-urbit-podcast.md+1−3
@@ -9,9 +9,7 @@ ship = "~satsyt-sogleb"
9image = "https://media.urbit.org/site/posts/essays/uu-podcast.png"
9image = "https://media.urbit.org/site/posts/essays/uu-podcast.png"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/uu-podcast.png">
12+![](https://media.urbit.org/site/posts/essays/uu-podcast.png)
15
13
16At the end of January, the team at Tlon invited me to spend some time at their San Francisco office and to create a podcast series about Urbit. The idea was to produce an interview-based series about the project told in the words of those working on it. In this modest goal, I think we were very successful. Beyond a transactional description, however, we captured a range of perspectives of the flaws in our current computing landscape and visions for how Urbit will alter it.
14At the end of January, the team at Tlon invited me to spend some time at their San Francisco office and to create a podcast series about Urbit. The idea was to produce an interview-based series about the project told in the words of those working on it. In this modest goal, I think we were very successful. Beyond a transactional description, however, we captured a range of perspectives of the flaws in our current computing landscape and visions for how Urbit will alter it.
17
15
content/blog/tools-of-our-own.md+6−14
@@ -9,15 +9,11 @@ ship = "~haddef-sigwen"
9image = "https://media.urbit.org/site/posts/essays/tools-of-our-own-1.png"
9image = "https://media.urbit.org/site/posts/essays/tools-of-our-own-1.png"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/tools-of-our-own-1.png">
12+![](https://media.urbit.org/site/posts/essays/tools-of-our-own-1.png)
15−
16−<br>
17
13
18> People need only not to obtain things, they need above all the freedom to make things among which they can live, or give shape to them according to their own tastes, and to put them to use in caring for and about others.
14> People need only not to obtain things, they need above all the freedom to make things among which they can live, or give shape to them according to their own tastes, and to put them to use in caring for and about others.
19>
15>
20−> <cite>Ivan Illich, <em>Tools for Conviviality</em></cite>
16+> **Ivan Illich, *Tools for Conviviality***
21
17
22One of the recent ways we've come to describe the mission of the Urbit project is to give communities [the power to shape, or evolve, their digital environments](https://urbit.org/blog/urbit-is-for-communities/). Of course, like many of our definitions, it requires some background to really contextualize the claim. When I describe this particular statement to people, they often ask, "What does that _mean_, though? What is a digital environment, and why would I need Urbit to do it?"
18One of the recent ways we've come to describe the mission of the Urbit project is to give communities [the power to shape, or evolve, their digital environments](https://urbit.org/blog/urbit-is-for-communities/). Of course, like many of our definitions, it requires some background to really contextualize the claim. When I describe this particular statement to people, they often ask, "What does that _mean_, though? What is a digital environment, and why would I need Urbit to do it?"
23
19
@@ -27,15 +23,13 @@ The [Rube Goldberg machine](https://en.wikipedia.org/wiki/Rube_Goldberg_machine)
27
23
28And it's nobody's distinct fault that the experience of aligning all these disparate services into a workflow is a skill in itself. It's a collective restriction that comes from the systems beneath.
24And it's nobody's distinct fault that the experience of aligning all these disparate services into a workflow is a skill in itself. It's a collective restriction that comes from the systems beneath.
29
25
30−<br>
31−
32−<img class="ba" src="https://media.urbit.org/site/posts/essays/tools-of-our-own-2.png">
26+![](https://media.urbit.org/site/posts/essays/tools-of-our-own-2.png)
33
27
34### Systems as masters
28### Systems as masters
35
29
36> If you don't understand a system you're using, you don't control it. If nobody understands the system, the system is in control.
30> If you don't understand a system you're using, you don't control it. If nobody understands the system, the system is in control.
37>
31>
38−> <cite>Philip Monk, <a href="https://urbit.org/blog/precepts/">Precepts</a></cite>
32+> **Philip Monk, [Precepts](https://urbit.org/blog/precepts/)**
39
33
40If you asked any of the creators of the social tools we use today what their mission was, it would seem neutral, a public good. To "bring the world closer," to "make a more open and connected world," to "easily see what's happening in the world." Ignore the fact that the net effects of their products are far more mixed than their mission suggests: for many users, the tools themselves come second to the power the tools have in capturing their social graph.
34If you asked any of the creators of the social tools we use today what their mission was, it would seem neutral, a public good. To "bring the world closer," to "make a more open and connected world," to "easily see what's happening in the world." Ignore the fact that the net effects of their products are far more mixed than their mission suggests: for many users, the tools themselves come second to the power the tools have in capturing their social graph.
41
35
@@ -53,15 +47,13 @@ And for productivity tools—for the personal activities we do every day—the s
53
47
54This is why hybrid products are born _and_ why massive enterprises are shifting toward subscription models for office software. With the [clearnet](<https://en.wikipedia.org/wiki/Clearnet_(networking)>), using our own computers for everyday tasks that extend outside themselves is not easy. It's way easier to sign into an enterprise's server farm for your persistent data storage and manipulation. In 2020, the prefab parts for the exoskeleton only come in "left arm, right leg" pairs, or you can just give up and plug straight into SkyNet.
48This is why hybrid products are born _and_ why massive enterprises are shifting toward subscription models for office software. With the [clearnet](<https://en.wikipedia.org/wiki/Clearnet_(networking)>), using our own computers for everyday tasks that extend outside themselves is not easy. It's way easier to sign into an enterprise's server farm for your persistent data storage and manipulation. In 2020, the prefab parts for the exoskeleton only come in "left arm, right leg" pairs, or you can just give up and plug straight into SkyNet.
55
49
56−<br>
57−
58−<img class="ba" src="https://media.urbit.org/site/posts/essays/tools-of-our-own-3.png">
50+![](https://media.urbit.org/site/posts/essays/tools-of-our-own-3.png)
59
51
60### The collective body
52### The collective body
61
53
62> “Autonomy” means that we make the **worlds that we are** grow.
54> “Autonomy” means that we make the **worlds that we are** grow.
63>
55>
64−> <cite>Tiqqun, <em>The Cybernetic Hypothesis</em>
56+> **Tiqqun, *The Cybernetic Hypothesis*
65
57
66So why does this matter for us? Me and you and everyone we know? We put up with the cost all the time. But the limitations of our tools—on the vulnerable side of a power dynamic that, unbeknownst to everyone involved, functions as a catalyzed and increasingly accelerated system bringing out the worst in all of us—range from the everyday annoyances to a pervasive alienation, an information malaise.
58So why does this matter for us? Me and you and everyone we know? We put up with the cost all the time. But the limitations of our tools—on the vulnerable side of a power dynamic that, unbeknownst to everyone involved, functions as a catalyzed and increasingly accelerated system bringing out the worst in all of us—range from the everyday annoyances to a pervasive alienation, an information malaise.
67
59
content/blog/urbit-for-normies.md+3−4
@@ -51,7 +51,7 @@ By “intermediary” I’m talking about all those centralized servers that we
51
51
52Urbit will fundamentally change that — more about the privacy implications later.
52Urbit will fundamentally change that — more about the privacy implications later.
53
53
54−<img class="ba" src="https://media.urbit.org/site/posts/essays/normies-1.png">
54+![](https://media.urbit.org/site/posts/essays/normies-1.png)
55
55
56## What it looks like
56## What it looks like
57
57
@@ -95,7 +95,7 @@ I’ll try to explain the most important of these without straying too deep into
95
95
964. **An incentive for good behavior**
964. **An incentive for good behavior**
97
97
98− On the Urbit network, identities are finite, and they accrue reputation. Compare that to the current internet where identity is infinite (anyone can create as many email addresses or social media profiles as they want, essentially for free) and so spam, scams, and DoS attacks (“denial-of-service”: when many disposable identities ‘attack’ a server at the same time) are rampant. On the Urbit network, there are just over 4 billion total IDs (2<sup>32</sup> to be exact). Scarcity creates value. That scarcity, combined with reputation accrual, means there's an incentive for good behavior.
98+ On the Urbit network, identities are finite, and they accrue reputation. Compare that to the current internet where identity is infinite (anyone can create as many email addresses or social media profiles as they want, essentially for free) and so spam, scams, and DoS attacks (“denial-of-service”: when many disposable identities ‘attack’ a server at the same time) are rampant. On the Urbit network, there are just over 4 billion total IDs (2^32^ to be exact). Scarcity creates value. That scarcity, combined with reputation accrual, means there's an incentive for good behavior.
99
99
100 You might think 4 billion IDs sounds like too few given how many humans we have on the planet. I won’t go into the technical details here, but if we ever get to the point where that’s a problem (which would be a great problem to have), we’ve outlined several solutions that allow everyone alive to get on the network. We don’t intend to lock anyone out.
100 You might think 4 billion IDs sounds like too few given how many humans we have on the planet. I won’t go into the technical details here, but if we ever get to the point where that’s a problem (which would be a great problem to have), we’ve outlined several solutions that allow everyone alive to get on the network. We don’t intend to lock anyone out.
101
101
@@ -121,9 +121,8 @@ I’ll try to explain the most important of these without straying too deep into
121
121
122 What all this adds up to is that the Urbit network is immensely more resource efficient, secure, easier to customize, and smaller in size than any other computing system in the world. If you care about data security, privacy, durability, or even just elegance, Urbit has the best design going.
122 What all this adds up to is that the Urbit network is immensely more resource efficient, secure, easier to customize, and smaller in size than any other computing system in the world. If you care about data security, privacy, durability, or even just elegance, Urbit has the best design going.
123
123
124− <br></br>
125
124
126−<img class="ba" src="https://media.urbit.org/site/posts/essays/normies-2.png">
125+![](https://media.urbit.org/site/posts/essays/normies-2.png)
127
126
128## How it compares
127## How it compares
129
128
content/blog/urbit-is-for-communities.md+1−3
@@ -9,9 +9,7 @@ ship = "~ravmel-ropdyl"
9image = "https://media.urbit.org/site/posts/essays/urbit-is-for-communities.jpg"
9image = "https://media.urbit.org/site/posts/essays/urbit-is-for-communities.jpg"
10+++
10+++
11
11
12−<br>
13−
14−<img class="ba" src="https://media.urbit.org/site/posts/essays/urbit-is-for-communities.jpg">
12+![](https://media.urbit.org/site/posts/essays/urbit-is-for-communities.jpg)
15
13
16## Generated, not fabricated
14## Generated, not fabricated
17
15
content/blog/value-of-address-space-pt1.md+4−4
@@ -47,15 +47,15 @@ We’ve often said that Urbit IDs have value because they’re useful and scarce
47
47
48The network of IDs is structured as a sponsorship tree consisting of 256 galaxies, ~65,000 stars, ~4B planets.
48The network of IDs is structured as a sponsorship tree consisting of 256 galaxies, ~65,000 stars, ~4B planets.
49
49
50−Galaxies are the root nodes on the network. They each have a vote on upgrades to the rules that govern the network, they provide packet-routing and peer-discovery services, and they spawn stars. Each galaxy has 256 (2<sup>8</sup>) stars to spawn.
50+Galaxies are the root nodes on the network. They each have a vote on upgrades to the rules that govern the network, they provide packet-routing and peer-discovery services, and they spawn stars. Each galaxy has 256 (2^8^) stars to spawn.
51
51
52−Stars similarly provide packet-routing and peer-discovery services, and spawn planets. Each unbooted star contains ~65,000 planets (2<sup>16</sup>).
52+Stars similarly provide packet-routing and peer-discovery services, and spawn planets. Each unbooted star contains ~65,000 planets (2^16^).
53
53
54−Planets are the individual IDs that most people use on the network. There are a total of ~4B (2<sup>32</sup>) planets all combined. Planets can also each spawn ~4B ‘moons,’ which are Urbit IDs intended to be used for IoT and other devices. Moons are permanently locked to their planets for security and to protect the network from sybil attacks.
54+Planets are the individual IDs that most people use on the network. There are a total of ~4B (2^32^) planets all combined. Planets can also each spawn ~4B ‘moons,’ which are Urbit IDs intended to be used for IoT and other devices. Moons are permanently locked to their planets for security and to protect the network from sybil attacks.
55
55
56Stars and planets can leave their sponsors (i.e. the star or galaxy currently providing peer discovery and packet routing) if they wish, and sponsors can choose to stop servicing any given star or planet. This is intended to prevent lock-in and to encourage good behavior from both parties. This mutual accountability is important in a network of finite identities that accrue reputation.
56Stars and planets can leave their sponsors (i.e. the star or galaxy currently providing peer discovery and packet routing) if they wish, and sponsors can choose to stop servicing any given star or planet. This is intended to prevent lock-in and to encourage good behavior from both parties. This mutual accountability is important in a network of finite identities that accrue reputation.
57
57
58−Essentially Urbit ID is 2<sup>32</sup> individual names that are bundled into blocks that are larger and larger in size. You might think of a planet like an individual house, a star like a town or a city, and a galaxy like a county or a state.
58+Essentially Urbit ID is 2^32^ individual names that are bundled into blocks that are larger and larger in size. You might think of a planet like an individual house, a star like a town or a city, and a galaxy like a county or a state.
59
59
60The Urbit ID registry and its rules are built on a set of smart contracts called [Azimuth](https://github.com/urbit/azimuth). These contracts are registered on the Ethereum blockchain. Galaxies can upgrade the mechanics of Azimuth by majority vote.
60The Urbit ID registry and its rules are built on a set of smart contracts called [Azimuth](https://github.com/urbit/azimuth). These contracts are registered on the Ethereum blockchain. Galaxies can upgrade the mechanics of Azimuth by majority vote.
61
61
content/blog/value-of-address-space-pt2.md+1−1
@@ -31,7 +31,7 @@ There are 65,280 total stars on the network. In turn, each star is initialized w
31
31
32One would expect that in an efficient market the relative pricing of stars on one hand, and planets on the other hand would eventually align (so to speak). This may come to pass as the Urbit community increases education about Urbit, and as additional planet sellers and hosting providers enter the space.
32One would expect that in an efficient market the relative pricing of stars on one hand, and planets on the other hand would eventually align (so to speak). This may come to pass as the Urbit community increases education about Urbit, and as additional planet sellers and hosting providers enter the space.
33
33
34−Finally, there are 4,294,901,760 (or ~2<sup>32</sup>) planets on the network. Planets currently trade largely in a range of $10 to $15. We expect planet prices to fluctuate from provider to provider as described in the previous post, based on the quality of services various providers offer. That said, it's worth noting that the cost to configure addresses for distribution is fairly static and this may act as something of a lower bound.
34+Finally, there are 4,294,901,760 (or ~2^32^) planets on the network. Planets currently trade largely in a range of $10 to $15. We expect planet prices to fluctuate from provider to provider as described in the previous post, based on the quality of services various providers offer. That said, it's worth noting that the cost to configure addresses for distribution is fairly static and this may act as something of a lower bound.
35
35
36That said, we also anticipate that planet prices will be abstracted away from most purchasers, and will be included in bundled annual packages of hosting and data routing services. For this reason, infrastructure service providers (i.e. hosting providers) will likely be the best positioned parties to capture value from planet distribution.
36That said, we also anticipate that planet prices will be abstracted away from most purchasers, and will be included in bundled annual packages of hosting and data routing services. For this reason, infrastructure service providers (i.e. hosting providers) will likely be the best positioned parties to capture value from planet distribution.
37
37
content/blog/value-of-address-space-pt3.md+1−3
@@ -9,8 +9,6 @@ ship = "~patnes-rigtyn + ~ravmel-ropdyl"
9image = "https://media.urbit.org/site/posts/essays/value-of-address-space-pt3.jpg"
9image = "https://media.urbit.org/site/posts/essays/value-of-address-space-pt3.jpg"
10+++
10+++
11
11
12−<br>
13−
14![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt3.jpg)
12![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt3.jpg)
15
13
16_This is the third in a series of three posts on Urbit address space. See also [part 1](https://urbit.org/blog/value-of-address-space-pt1/) and [part 2](https://urbit.org/blog/value-of-address-space-pt2/)._
14_This is the third in a series of three posts on Urbit address space. See also [part 1](https://urbit.org/blog/value-of-address-space-pt1/) and [part 2](https://urbit.org/blog/value-of-address-space-pt2/)._
@@ -33,7 +31,7 @@ In this post, we don’t expand that framework, but rather explore two elements
33
31
34## Lockups and spawning limits
32## Lockups and spawning limits
35
33
36−One way to think about galaxies, stars, and planets is that they’re different-sized buckets of Urbit IDs. A star contains 2<sup>16</sup> (~65K) planets, a galaxy contains 2<sup>8</sup> (256) stars and, in turn, 2<sup>24</sup> planets (16,777,216). Beyond this nesting pattern, there are three further considerations to note: booted versus unbooted addresses, locked versus unlocked addresses, and planet spawning limits.
34+One way to think about galaxies, stars, and planets is that they’re different-sized buckets of Urbit IDs. A star contains 2^16^ (~65K) planets, a galaxy contains 2^8^ (256) stars and, in turn, 2^24^ planets (16,777,216). Beyond this nesting pattern, there are three further considerations to note: booted versus unbooted addresses, locked versus unlocked addresses, and planet spawning limits.
37
35
38Booted and Unbooted Addresses –
36Booted and Unbooted Addresses –
39
37
content/blog/why-hoon.md+3−3
@@ -125,7 +125,7 @@ Hoon and Nock have several unusual properties:
125 converted to each other. Lisp dialects are also homoiconic, but Hoon
125 converted to each other. Lisp dialects are also homoiconic, but Hoon
126 and Nock are arguably even more so, since things like closures and the
126 and Nock are arguably even more so, since things like closures and the
127 environment are just Nock trees. We even have a statically typed
127 environment are just Nock trees. We even have a statically typed
128− metacircular interpreter called <code>+mule</code>. We run userspace code
128+ metacircular interpreter called `+mule`. We run userspace code
129 metacircularly with negligible performance overhead because of Urbit's
129 metacircularly with negligible performance overhead because of Urbit's
130 jet system. In Lisp, "eval is evil" is a common saying, but in Urbit,
130 jet system. In Lisp, "eval is evil" is a common saying, but in Urbit,
131 eval is a first-class feature.
131 eval is a first-class feature.
@@ -145,7 +145,7 @@ Hoon and Nock have several unusual properties:
145 the runtime has a matching jet, it will use that instead of the Nock
145 the runtime has a matching jet, it will use that instead of the Nock
146 implementation. Nock isn't as slow as you might think, especially
146 implementation. Nock isn't as slow as you might think, especially
147 considering it's a minimal, dynamic, axiomatic language.
147 considering it's a minimal, dynamic, axiomatic language.
148− <br/><br/>
148+
149 This arrangement has the deeper implication that all code written in
149 This arrangement has the deeper implication that all code written in
150 Nock is best considered as a specification for a program, which can be
150 Nock is best considered as a specification for a program, which can be
151 executed directly but might never run at all due to being jetted.
151 executed directly but might never run at all due to being jetted.
@@ -199,7 +199,7 @@ Hoon and Nock have several unusual properties:
199 lot of the system manipulates types. In particular, the `!>` rune, when
199 lot of the system manipulates types. In particular, the `!>` rune, when
200 applied to a piece of data, uses compile-time type reflection to
200 applied to a piece of data, uses compile-time type reflection to
201 produce something called a "vase": a pair of type and data, similar to
201 produce something called a "vase": a pair of type and data, similar to
202− a <code>Data.Dynamic</code> in Haskell, or a limited form of a dependent pair.
202+ a `Data.Dynamic` in Haskell, or a limited form of a dependent pair.
203 Since the Arvo kernel does a lot of dynamic compilation, it uses vases
203 Since the Arvo kernel does a lot of dynamic compilation, it uses vases
204 to implement something akin to a dynamically typed language using
204 to implement something akin to a dynamically typed language using
205 Hoon. This allows for type-safe dynamic program loading, program
205 Hoon. This allows for type-safe dynamic program loading, program
content/blog/your-last-computer.md+3−3
@@ -11,13 +11,13 @@ This whole ‘simple, durable, yours’ thing may sound good, but what does it a
11
11
12First, let’s talk about what it should feel like in the future.
12First, let’s talk about what it should feel like in the future.
13
13
14−<img class="mv5 w-100" src="https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-waves%402x.png">
14+![](https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-waves%402x.png)
15
15
16Imagine that you can log in from anywhere with one simple, memorable name and password. And when you do, an entire OS appears for you. Inside is your whole digital life. Every conversation you’ve ever had, all your biometric data — every step and heartbeat. Your personal mesh of devices: your doors, your car, your irrigation. All of your communities, every message you’ve shared with friends and family. Every connection you’ve made and every archival piece of data, in one place. Secure and private, forever.
16Imagine that you can log in from anywhere with one simple, memorable name and password. And when you do, an entire OS appears for you. Inside is your whole digital life. Every conversation you’ve ever had, all your biometric data — every step and heartbeat. Your personal mesh of devices: your doors, your car, your irrigation. All of your communities, every message you’ve shared with friends and family. Every connection you’ve made and every archival piece of data, in one place. Secure and private, forever.
17
17
18You own and control this OS completely. Your system doesn’t live on someone else’s server, so there’s no risk of leaking it in a mass data breach or losing it when a service shuts down. Your Urbit is a sealed, secure, and durable system.
18You own and control this OS completely. Your system doesn’t live on someone else’s server, so there’s no risk of leaking it in a mass data breach or losing it when a service shuts down. Your Urbit is a sealed, secure, and durable system.
19
19
20−<img class="ba mv5 w-100" src="https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-is-rock%402x.png">
20+![](https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-is-rock%402x.png)
21
21
22We’re on our way to this future, building it step by step, but we’re not there yet. The Urbit of today is much more stripped down.
22We’re on our way to this future, building it step by step, but we’re not there yet. The Urbit of today is much more stripped down.
23
23
@@ -31,6 +31,6 @@ It’s a simple system for intentional digital communities. A first step away fr
31
31
32We think that a new system like this, even in a simple form, will be a relief from the chaos of the current web. Think of it as a “back to the land” computing movement. If we’re ever going to build new digital cities, they’ll have to start as a few colonies on the frontier.
32We think that a new system like this, even in a simple form, will be a relief from the chaos of the current web. Think of it as a “back to the land” computing movement. If we’re ever going to build new digital cities, they’ll have to start as a few colonies on the frontier.
33
33
34−<img class="mv5 w-100" src="https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-ocean%402x.png">
34+![](https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-ocean%402x.png)
35
35
36Your Urbit is a simpler computer, a quieter computer, a more private computer. We want it to feel predictable, safe, and reliable — things only a complete, sealed system can do. This, we hope, can get us a world where technology keeps us connected, but doesn’t dominate our lives.
36Your Urbit is a simpler computer, a quieter computer, a more private computer. We want it to feel predictable, safe, and reliable — things only a complete, sealed system can do. This, we hope, can get us a world where technology keeps us connected, but doesn’t dominate our lives.
content/community/meetups.md+20−24
@@ -9,10 +9,7 @@ hideprevious = "true"
9hide_next_title = "true"
9hide_next_title = "true"
10+++
10+++
11
11
12−<picture>
13−<source src="https://media.urbit.org/site/meetup1.jpg">
14−<img class="mt4" src="https://media.urbit.org/site/meetup1.jpg"/>
12+![](https://media.urbit.org/site/meetup1.jpg)
15−</picture>
16
13
17Turns out that getting Urbit fans together in one room is pretty fun. Here's an incomplete list of community-led Urbit IRL groups. These events are generally informal and very approachable – feel free to dive in.
14Turns out that getting Urbit fans together in one room is pretty fun. Here's an incomplete list of community-led Urbit IRL groups. These events are generally informal and very approachable – feel free to dive in.
18
15
@@ -20,32 +17,31 @@ Interested in hosting an Urbit event of your own? Follow our [guide to meetup be
20
17
21### Asia
18### Asia
22
19
23−Location | Contact information
20+| Location | Contact information |
24−:------------ | :-------------
21+| :--------- | :------------------------------------------------ |
25−Moscow, RU | [Timepad](https://urbitmoscow.timepad.ru/events/)
22+| Moscow, RU | [Timepad](https://urbitmoscow.timepad.ru/events/) |
26
23
27### Europe
24### Europe
28
25
29−Location | Contact information
26+| Location | Contact information |
30−:------------ | :-------------
27+| :------------- | :---------------------------------------------------------------------------------------------- |
31−Copenhagen, DK | [Twitter](https://twitter.com/UrbitCPH), [Meetup.com](https://www.meetup.com/Urbit-Copenhagen/)
28+| Copenhagen, DK | [Twitter](https://twitter.com/UrbitCPH), [Meetup.com](https://www.meetup.com/Urbit-Copenhagen/) |
32
29
33### North America
30### North America
34
31
35−Location | Contact information
32+| Location | Contact information |
36−:------------ | :-------------
33+| :---------------- | :----------------------------------------------------------------------------------------------- |
37−Phoenix, AZ | [Twitter](https://twitter.com/UrbitPHX), [Meetup.com](https://www.meetup.com/urbit-phx/)
34+| Phoenix, AZ | [Twitter](https://twitter.com/UrbitPHX), [Meetup.com](https://www.meetup.com/urbit-phx/) |
38−San Francisco, CA | [Meetup.com](https://www.meetup.com/urbit-sf/)
35+| San Francisco, CA | [Meetup.com](https://www.meetup.com/urbit-sf/) |
39−New York, NY | [Meetup.com](https://www.meetup.com/Urbit-New-York/)
36+| New York, NY | [Meetup.com](https://www.meetup.com/Urbit-New-York/) |
40−Toronto, ON | [Twitter](https://twitter.com/UrbitToronto), [Meetup.com](https://www.meetup.com/Urbit-Toronto/)
37+| Toronto, ON | [Twitter](https://twitter.com/UrbitToronto), [Meetup.com](https://www.meetup.com/Urbit-Toronto/) |
41−Eugene, OR | [Twitter](https://twitter.com/EugeneUrbit)
38+| Eugene, OR | [Twitter](https://twitter.com/EugeneUrbit) |
42−Austin, TX | [Meetup.com](https://www.meetup.com/Urbit-Austin/)
39+| Austin, TX | [Meetup.com](https://www.meetup.com/Urbit-Austin/) |
43−Denton, TX | [Twitter](https://twitter.com/UrbitDFW)
40+| Denton, TX | [Twitter](https://twitter.com/UrbitDFW) |
44−Seattle, WA | [Meetup.com](https://www.meetup.com/urbit-seattle/)
41+| Seattle, WA | [Meetup.com](https://www.meetup.com/urbit-seattle/) |
45−
46
42
47### Oceania
43### Oceania
48
44
49−Location | Contact information
45+| Location | Contact information |
50−:------------ | :-------------
46+| :--------- | :------------------------------------------------ |
51−Sydney, AU | [Meetup.com](https://www.meetup.com/Urbit-Sydney)
47+| Sydney, AU | [Meetup.com](https://www.meetup.com/Urbit-Sydney) |
content/docs/arvo/ames/ames.md+3−7
@@ -221,7 +221,7 @@ Thus a message-level ack must be received before the next message on the flow
221can begin. The full story is more complicated than this; see the section on
221can begin. The full story is more complicated than this; see the section on
222[flows](#flows).
222[flows](#flows).
223
223
224−#### Nacks {#nacks}
224+#### Nacks {% #nacks %}
225
225
226A nack indicates a negative acknowledgement to a `%plea`, meaning that the
226A nack indicates a negative acknowledgement to a `%plea`, meaning that the
227requested action was not performed.
227requested action was not performed.
@@ -363,9 +363,7 @@ discovery, analagous to the role that galaxies currently play for stars and plan
363
363
364The following diagram summarizes the packet creation and forwarding process.
364The following diagram summarizes the packet creation and forwarding process.
365
365
366−<div style="text-align:center">
367−<img src="https://media.urbit.org/docs/arvo/datagram-updated-2021-06-09.png">
366+![](https://media.urbit.org/docs/arvo/datagram-updated-2021-06-09.png)
368−</div>
369
367
370We elaborate on the above diagram.
368We elaborate on the above diagram.
371
369
@@ -448,9 +446,7 @@ This division is summarized in the following diagram, describing how
448`~bacbel-tagfeb` requests a subscription to the `recipes` notebook of
446`~bacbel-tagfeb` requests a subscription to the `recipes` notebook of
449`~worwel-sipnum` in the Publish app.
447`~worwel-sipnum` in the Publish app.
450
448
451−<div style="text-align:center">
452−<img src="https://media.urbit.org/docs/arvo/packet.png">
449+![](https://media.urbit.org/docs/arvo/packet.png)
453−</div>
454
450
455Ames, as a part of Arvo, handles `+jam`ming, packetizing, encryption, and
451Ames, as a part of Arvo, handles `+jam`ming, packetizing, encryption, and
456forming Ames packets. Once it is ready to send an Ames packet, it `%give`s to
452forming Ames packets. Once it is ready to send an Ames packet, it `%give`s to
content/docs/arvo/ames/cryptography.md+4−4
@@ -23,7 +23,7 @@ core into which one of the cryptosuites in `zuse` may be implemented. Some, but
23not all, of the calls to cryptography-related tasks (encryption, signing,
23not all, of the calls to cryptography-related tasks (encryption, signing,
24decrypting, and authenticating) are peformed utilizing the `+acru` core.
24decrypting, and authenticating) are peformed utilizing the `+acru` core.
25
25
26−## Packet encryption and authentication {#packets}
26+## Packet encryption and authentication {% #packets %}
27
27
28Each Urbit ship possesses two networking keypairs: one for encryption, and one
28Each Urbit ship possesses two networking keypairs: one for encryption, and one
29for authentication. We often refer to these two keypairs as though they were a
29for authentication. We often refer to these two keypairs as though they were a
@@ -40,7 +40,7 @@ message fragment is signed using the authentication key. It is encrypted using
40[`+en:crub:crypto`](/docs/arvo/reference/cryptography#en) found in
40[`+en:crub:crypto`](/docs/arvo/reference/cryptography#en) found in
41`sys/zuse.hoon`, which utilizes the 256-bit AES-SIV algorithm.
41`sys/zuse.hoon`, which utilizes the 256-bit AES-SIV algorithm.
42
42
43−## Diffie-Hellman key exchange {#key-exchange}
43+## Diffie-Hellman key exchange {% #key-exchange %}
44
44
45For each foreign ship a given ship has communicated with, `$ames-state` contains a
45For each foreign ship a given ship has communicated with, `$ames-state` contains a
46[$peer-state](/docs/arvo/ames/data-types#peer-state), inside which the [$symmetric-key](/docs/arvo/ames/data-types#symmetric-key) (an atom which nests under
46[$peer-state](/docs/arvo/ames/data-types#peer-state), inside which the [$symmetric-key](/docs/arvo/ames/data-types#symmetric-key) (an atom which nests under
@@ -54,7 +54,7 @@ in a two-way conversation computes the shared symmetric key for that
54conversation by computing the product of their own private key and the public
54conversation by computing the product of their own private key and the public
55key of the other party.
55key of the other party.
56
56
57−## Comet self-attestation {#comets}
57+## Comet self-attestation {% #comets %}
58
58
59Recall that the `@p` of a comet is the hash of their 128-bit public key cast as
59Recall that the `@p` of a comet is the hash of their 128-bit public key cast as
60a `@p`. Since the public key of a comet is not stored on Azimuth, a comet proves
60a `@p`. Since the public key of a comet is not stored on Azimuth, a comet proves
@@ -74,7 +74,7 @@ be an attestation packet is why comets are unable to initiate communication with
74one another, and also why comets must be the first to initiate communication
74one another, and also why comets must be the first to initiate communication
75with a non-comet. This is a technical limitation with a planned workaround.
75with a non-comet. This is a technical limitation with a planned workaround.
76
76
77−## `+acru:ames` {#crypto-core}
77+## `+acru:ames` {% #crypto-core %}
78
78
79The `+crypto-core` in `$ames-state` is an `+acru:ames` core, a
79The `+crypto-core` in `$ames-state` is an `+acru:ames` core, a
80[lead](/docs/hoon/reference/advanced#dry-polymorphism-and-core-nesting-rules)
80[lead](/docs/hoon/reference/advanced#dry-polymorphism-and-core-nesting-rules)
content/docs/arvo/clay/examples.md+4−3
@@ -517,10 +517,11 @@ First, using the `send-task-take-gift.hoon` thread, let's try creating a new `de
517
517
518Now if we scry for our `desk`s we'll see `%foo` is there:
518Now if we scry for our `desk`s we'll see `%foo` is there:
519
519
520−```
520+{% customFence %}
521+
521> .^((set desk) %cd /===)
522> .^((set desk) %cd /===)
522−{%bitcoin %base %landscape %webterm %garden %foo}
523+> &#x7B;&#x25;bitcoin %base %landscape %webterm %garden %foo}
523−```
524+> {% /customFence %}
524
525
525Next, we'll create a merge conflict and try a couple of things. Mount `%foo` with `|mount /=foo=`, then add a `foo.txt` to both `desk`s but with different text in each and `|commit` them.
526Next, we'll create a merge conflict and try a couple of things. Mount `%foo` with `|mount /=foo=`, then add a `foo.txt` to both `desk`s but with different text in each and `|commit` them.
526
527
content/docs/arvo/clay/scry.md+5−4
@@ -49,10 +49,11 @@ A scry with a `care` of `%d` will return a `(set desk)` of the `desk`s that exis
49
49
50Example:
50Example:
51
51
52−```
52+{% customFence %}
53+
53−> .^((set desk) %cd /===)
54+\> .^((set desk) %cd /===)
54−{%bitcoin %base %landscape %webterm %garden}
55+&#x7B;&#x25;bitcoin %base %landscape %webterm %garden}
55−```
56+{% /customFence %}
56
57
57## %e - Static mark core.
58## %e - Static mark core.
58
59
content/docs/arvo/eyre/guide.md+5−5
@@ -204,7 +204,7 @@ Server: urbit/vere-1.5
204set-cookie: urbauth-~zod=0v1.1pseu.tq7hs.hps2t.ltaf1.tmqjm; Path=/; Max-Age=604800
204set-cookie: urbauth-~zod=0v1.1pseu.tq7hs.hps2t.ltaf1.tmqjm; Path=/; Max-Age=604800
205content-type: text/html
205content-type: text/html
206
206
207−&lt;html>&lt;head>&lt;title>404 Not Found&lt;/title>&lt;/head>&lt;body>&lt;h1>Not Found&lt;/h1>&lt;p>There was an error while handling the request for /foo/bar/baz.json.&lt;/p>&lt;code>no scry result&lt;/code>&lt;/body>&lt;/html>
207+<html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>There was an error while handling the request for /foo/bar/baz.json.</p><code>no scry result</code></body></html>
208```
208```
209
209
210## Advanced
210## Advanced
@@ -254,7 +254,7 @@ Note that this example does a lot of things manually for demonstrative purposes.
254 ~& [mark req]
254 ~& [mark req]
255 ?+ method.request.q.req
255 ?+ method.request.q.req
256 =/ data=octs
256 =/ data=octs
257− (as-octs:mimes:html '&lt;h1>405 Method Not Allowed&lt;/h1>')
257+ (as-octs:mimes:html '<h1>405 Method Not Allowed</h1>')
258 =/ content-length=@t
258 =/ content-length=@t
259 (crip ((d-co:co 1) p.data))
259 (crip ((d-co:co 1) p.data))
260 =/ =response-header:http
260 =/ =response-header:http
@@ -272,7 +272,7 @@ Note that this example does a lot of things manually for demonstrative purposes.
272 ::
272 ::
273 %'GET'
273 %'GET'
274 =/ data=octs
274 =/ data=octs
275− (as-octs:mimes:html '&lt;h1>Hello, World!&lt;/h1>')
275+ (as-octs:mimes:html '<h1>Hello, World!</h1>')
276 =/ content-length=@t
276 =/ content-length=@t
277 (crip ((d-co:co 1) p.data))
277 (crip ((d-co:co 1) p.data))
278 =/ =response-header:http
278 =/ =response-header:http
@@ -374,7 +374,7 @@ Content-Type: text/html
374Content-Length: 22
374Content-Length: 22
375transfer-encoding: chunked
375transfer-encoding: chunked
376
376
377−&lt;h1>Hello, World!&lt;/h1>%
377+<h1>Hello, World!</h1>%
378```
378```
379
379
380...which has succeed! This is because the `+on-poke` arm tests for http GET requests and responds with `Hello, World!` when it sees one:
380...which has succeed! This is because the `+on-poke` arm tests for http GET requests and responds with `Hello, World!` when it sees one:
@@ -382,7 +382,7 @@ transfer-encoding: chunked
382```hoon
382```hoon
383 %'GET'
383 %'GET'
384=/ data=octs
384=/ data=octs
385− (as-octs:mimes:html '&lt;h1>Hello, World!&lt;/h1>')
385+ (as-octs:mimes:html '<h1>Hello, World!</h1>')
386=/ content-length=@t
386=/ content-length=@t
387 (crip ((d-co:co 1) p.data))
387 (crip ((d-co:co 1) p.data))
388=/ =response-header:http
388=/ =response-header:http
content/docs/arvo/eyre/scry.md+12−12
@@ -14,7 +14,7 @@ All examples are run from the dojo.
14
14
15An `x` scry with a `path` of `/cors` will return Eyre's CORS origin registry. The type returned is a [cors-registry](/docs/arvo/eyre/data-types#cors-registry) which contains the `set`s of approved, rejected and requested origins.
15An `x` scry with a `path` of `/cors` will return Eyre's CORS origin registry. The type returned is a [cors-registry](/docs/arvo/eyre/data-types#cors-registry) which contains the `set`s of approved, rejected and requested origins.
16
16
17−### Example
17+### Example {% #example-1 %}
18
18
19```
19```
20> .^(cors-registry:eyre %ex /=//=/cors)
20> .^(cors-registry:eyre %ex /=//=/cors)
@@ -28,7 +28,7 @@ An `x` scry with a `path` of `/cors` will return Eyre's CORS origin registry. Th
28
28
29An `x` scry with a `path` of `/cors/requests` will return the `set` of pending origin requests. These are origins that were in an `Origin: ...` HTTP header but weren't in the existing approved or rejected sets. The type returned is a `(set origin:eyre)`.
29An `x` scry with a `path` of `/cors/requests` will return the `set` of pending origin requests. These are origins that were in an `Origin: ...` HTTP header but weren't in the existing approved or rejected sets. The type returned is a `(set origin:eyre)`.
30
30
31−### Example
31+### Example {% #example-2 %}
32
32
33```
33```
34> .^(requests=(set origin:eyre) %ex /=//=/cors/requests)
34> .^(requests=(set origin:eyre) %ex /=//=/cors/requests)
@@ -39,7 +39,7 @@ requests={~~http~3a.~2f.~2f.baz~.example}
39
39
40An `x` scry with a `path` of `/cors/approved` will return the `set` of approved CORS origins. The type returned is a `(set origin:eyre)`.
40An `x` scry with a `path` of `/cors/approved` will return the `set` of approved CORS origins. The type returned is a `(set origin:eyre)`.
41
41
42−### Example
42+### Example {% #example-3 %}
43
43
44```
44```
45> .^(approved=(set origin:eyre) %ex /=//=/cors/approved)
45> .^(approved=(set origin:eyre) %ex /=//=/cors/approved)
@@ -52,7 +52,7 @@ An `x` scry whose `path` is `/cors/approved/{ORIGIN}` tests whether the given or
52
52
53The origin URL is a `@t`, but since `@t` may not be valid in a path, it must be encoded in a `@ta` using `+scot` like `(scot %t 'foo')` rather than just `'foo'`.
53The origin URL is a `@t`, but since `@t` may not be valid in a path, it must be encoded in a `@ta` using `+scot` like `(scot %t 'foo')` rather than just `'foo'`.
54
54
55−### Examples
55+### Examples {% #examples-1 %}
56
56
57```
57```
58> .^(? %ex /=//=/cors/approved/(scot %t 'http://foo.example'))
58> .^(? %ex /=//=/cors/approved/(scot %t 'http://foo.example'))
@@ -68,7 +68,7 @@ The origin URL is a `@t`, but since `@t` may not be valid in a path, it must be
68
68
69An `x` scry with a `path` of `/cors/rejected` will return the `set` of rejected CORS origins. The type returned is a `(set origin:eyre)`.
69An `x` scry with a `path` of `/cors/rejected` will return the `set` of rejected CORS origins. The type returned is a `(set origin:eyre)`.
70
70
71−### Example
71+### Example {% #example-4 %}
72
72
73```
73```
74> .^(rejected=(set origin:eyre) %ex /=//=/cors/rejected)
74> .^(rejected=(set origin:eyre) %ex /=//=/cors/rejected)
@@ -81,7 +81,7 @@ An `x` scry whose `path` is `/cors/rejected/{ORIGIN}` tests whether the given or
81
81
82The origin URL must be a cord-encoded `@t` rather than just the plain `@t`, so you'll have to do something like `(scot %t 'foo')` rather than just `'foo'`.
82The origin URL must be a cord-encoded `@t` rather than just the plain `@t`, so you'll have to do something like `(scot %t 'foo')` rather than just `'foo'`.
83
83
84−### Examples
84+### Examples {% #examples-2 %}
85
85
86```
86```
87> .^(? %ex /=//=/cors/rejected/(scot %t 'http://bar.example'))
87> .^(? %ex /=//=/cors/rejected/(scot %t 'http://bar.example'))
@@ -99,7 +99,7 @@ An `x` scry whose `path` is `/authenticated/cookie/{COOKIE}` tests whether the g
99
99
100The cookie must be the full cookie including the `urbauth-{SHIP}=` part. The cookie must be a cord-encoded `@t` rather than just a plain `@t`, so you'll have to do something like `(scot %t 'foo')` rather than just `'foo'`.
100The cookie must be the full cookie including the `urbauth-{SHIP}=` part. The cookie must be a cord-encoded `@t` rather than just a plain `@t`, so you'll have to do something like `(scot %t 'foo')` rather than just `'foo'`.
101
101
102−### Examples
102+### Examples {% #examples-3 %}
103
103
104```
104```
105> .^(? %ex /=//=/authenticated/cookie/(scot %t 'urbauth-~zod=0vvndn8.bfsjj.j3614.k40ha.8fomi'))
105> .^(? %ex /=//=/authenticated/cookie/(scot %t 'urbauth-~zod=0vvndn8.bfsjj.j3614.k40ha.8fomi'))
@@ -115,7 +115,7 @@ The cookie must be the full cookie including the `urbauth-{SHIP}=` part. The coo
115
115
116A scry with `bindings` in place of the `desk` in the `beak` will return Eyre's URL path bindings. The type returned is a `(list [binding:eyre duct action:eyre])` (see the [$binding](/docs/arvo/eyre/data-types#binding) & [$action](/docs/arvo/eyre/data-types#action) sections of the Data Types document for details).
116A scry with `bindings` in place of the `desk` in the `beak` will return Eyre's URL path bindings. The type returned is a `(list [binding:eyre duct action:eyre])` (see the [$binding](/docs/arvo/eyre/data-types#binding) & [$action](/docs/arvo/eyre/data-types#action) sections of the Data Types document for details).
117
117
118−### Example
118+### Example {% #example-5 %}
119
119
120```
120```
121> .^((list [binding:eyre duct action:eyre]) %e /=bindings=)
121> .^((list [binding:eyre duct action:eyre]) %e /=bindings=)
@@ -136,7 +136,7 @@ A scry with `bindings` in place of the `desk` in the `beak` will return Eyre's U
136
136
137A scry with `bindings` in place of the `desk` in the `beak` will return all open HTTP connections that aren't fully complete. The type returned is a `(map duct outstanding-connection:eyre)` (see the [$outstanding-connection](/docs/arvo/eyre/data-types#outstanding-connection) section of the Data Types document for details).
137A scry with `bindings` in place of the `desk` in the `beak` will return all open HTTP connections that aren't fully complete. The type returned is a `(map duct outstanding-connection:eyre)` (see the [$outstanding-connection](/docs/arvo/eyre/data-types#outstanding-connection) section of the Data Types document for details).
138
138
139−### Example
139+### Example {% #example-6 %}
140
140
141```
141```
142> .^((map duct outstanding-connection:eyre) %e /=connections=)
142> .^((map duct outstanding-connection:eyre) %e /=connections=)
@@ -147,7 +147,7 @@ A scry with `bindings` in place of the `desk` in the `beak` will return all open
147
147
148A scry with `authentication-state` in place of the `desk` in the `beak` will return authentication details of all current sessions. The type returned is a [$authentication-state](/docs/arvo/eyre/data-types#authentication-state). The `p` field is the cookie sans the `urbauth-{SHIP}=` part.
148A scry with `authentication-state` in place of the `desk` in the `beak` will return authentication details of all current sessions. The type returned is a [$authentication-state](/docs/arvo/eyre/data-types#authentication-state). The `p` field is the cookie sans the `urbauth-{SHIP}=` part.
149
149
150−### Example
150+### Example {% #example-7 %}
151
151
152```
152```
153> .^(authentication-state:eyre %e /=authentication-state=)
153> .^(authentication-state:eyre %e /=authentication-state=)
@@ -162,7 +162,7 @@ A scry with `authentication-state` in place of the `desk` in the `beak` will ret
162
162
163A scry with `channel-state` in place of the `desk` in the `beak` will return details of the state of each channel. The type returned is a [channel-state](/docs/arvo/eyre/data-types#channel-state).
163A scry with `channel-state` in place of the `desk` in the `beak` will return details of the state of each channel. The type returned is a [channel-state](/docs/arvo/eyre/data-types#channel-state).
164
164
165−### Example
165+### Example {% #example-8 %}
166
166
167```
167```
168> .^(channel-state:eyre %e /=channel-state=)
168> .^(channel-state:eyre %e /=channel-state=)
@@ -187,7 +187,7 @@ A scry with `channel-state` in place of the `desk` in the `beak` will return det
187
187
188A scry with `host` in place of the `desk` in the `beak` will return host details of the ship. The type returned is a `hart:eyre`.
188A scry with `host` in place of the `desk` in the `beak` will return host details of the ship. The type returned is a `hart:eyre`.
189
189
190−### Example
190+### Example {% #example-9 %}
191
191
192```
192```
193> .^(hart:eyre %e /=host=)
193> .^(hart:eyre %e /=host=)
content/docs/arvo/overview.md+2−4
@@ -45,7 +45,7 @@ Arvo is designed to avoid the usual state of complex event networks: event spagh
45
45
46Unlike any other popular operating system, it is possible for a single human to understand every aspect of Arvo due to its compact size. The entire Urbit stack is around 30,000 lines of code, while the Arvo kernel is only about 1,000 lines of code. We strive for a small codebase because the difficulty in administering a system is roughly proportional to the size of its code base.
46Unlike any other popular operating system, it is possible for a single human to understand every aspect of Arvo due to its compact size. The entire Urbit stack is around 30,000 lines of code, while the Arvo kernel is only about 1,000 lines of code. We strive for a small codebase because the difficulty in administering a system is roughly proportional to the size of its code base.
47
47
48−## An operating function {#operating-function}
48+## An operating function {% #operating-function %}
49
49
50Arvo is the world's first _purely functional_ operating system, and as such it may reasonably be called an _operating function_. The importance of understanding this design choice and its relevance to the overarching goal cannot be understated. If you knew only a single thing about Arvo, let it be this.
50Arvo is the world's first _purely functional_ operating system, and as such it may reasonably be called an _operating function_. The importance of understanding this design choice and its relevance to the overarching goal cannot be understated. If you knew only a single thing about Arvo, let it be this.
51
51
@@ -383,9 +383,7 @@ activates the vane it will have this context as its subject.
383This cycle of `%pass`ing a `note` to `%pass`ing a `task` to `%give`ing a `gift`
383This cycle of `%pass`ing a `note` to `%pass`ing a `task` to `%give`ing a `gift`
384to `%give`ing a `%sign` is summarized in the following diagram:
384to `%give`ing a `%sign` is summarized in the following diagram:
385
385
386−<div style="text-align:center">
387−<img class="mv5 w-150" src="https://media.urbit.org/docs/arvo/cycle.png">
386+![](https://media.urbit.org/docs/arvo/cycle.png)
388−</div>
389
387
390Note that `%pass`ing a `note` doesn't _always_ result in a return - this diagram
388Note that `%pass`ing a `note` doesn't _always_ result in a return - this diagram
391just
389just
content/docs/arvo/reference/cryptography.md+6−6
@@ -20,7 +20,7 @@ library reference.
20[`+ed:crypto`](#ed), [`+aes:crypto`](#aes), and [`+crub:crypto`](#crub), with
20[`+ed:crypto`](#ed), [`+aes:crypto`](#aes), and [`+crub:crypto`](#crub), with
21the latter being the only one which is implemented as an [`+acru:ames`](/docs/arvo/ames/cryptography#crypto-core)-shaped core.
21the latter being the only one which is implemented as an [`+acru:ames`](/docs/arvo/ames/cryptography#crypto-core)-shaped core.
22
22
23−## `+crub:crypto` {#crub}
23+## `+crub:crypto` {% #crub %}
24
24
25`+crub:crypto` implements an
25`+crub:crypto` implements an
26[`+acru:ames`](/docs/arvo/ames/cryptography#crypto-core) core that implements
26[`+acru:ames`](/docs/arvo/ames/cryptography#crypto-core) core that implements
@@ -59,7 +59,7 @@ signed message using `+en:siva:aes` with the symmetric key, and then `+jam`s it.
59
59
60Crashes if `sek` is null.
60Crashes if `sek` is null.
61
61
62−### `+sign:as` {#sign-as}
62+### `+sign:as` {% #sign-as %}
63
63
64```hoon
64```hoon
65 ++ sign ::
65 ++ sign ::
@@ -122,7 +122,7 @@ Returns null in case of failure.
122
122
123Same as `+dy`, but crashes in case of failure.
123Same as `+dy`, but crashes in case of failure.
124
124
125−### `+en` {#en}
125+### `+en` {% #en %}
126
126
127```hoon
127```hoon
128 ++ en :: encrypt
128 ++ en :: encrypt
@@ -148,7 +148,7 @@ Returns the concatenation of `sgn.pub` and `cry.pub`.
148
148
149Returns the concatenation of `sgn.u.sek` and `cry.u.sek`.
149Returns the concatenation of `sgn.u.sek` and `cry.u.sek`.
150
150
151−### `+pit:nu` {#nu}
151+### `+pit:nu` {% #nu %}
152
152
153```hoon
153```hoon
154 ++ pit :: create keypair
154 ++ pit :: create keypair
@@ -187,7 +187,7 @@ if `+sec:ex` is not a `+crub` secret key.
187Takes in a `pass` from a `+pub:ex:crub` and generates a new `+crub` core with
187Takes in a `pass` from a `+pub:ex:crub` and generates a new `+crub` core with
188`pub` taken from `+pub:ex` and null `sek`.
188`pub` taken from `+pub:ex` and null `sek`.
189
189
190−## `+ed:crypto` {#ed}
190+## `+ed:crypto` {% #ed %}
191
191
192This core contains cryptographic primitives and helper functions for elliptic
192This core contains cryptographic primitives and helper functions for elliptic
193curve cryptography with [Curve25519](https://en.wikipedia.org/wiki/Curve25519).
193curve cryptography with [Curve25519](https://en.wikipedia.org/wiki/Curve25519).
@@ -206,7 +206,7 @@ rather than running in Nock natively. See the [Vere
206documentation](/docs/vere/cryptography#ed) for more information about the
206documentation](/docs/vere/cryptography#ed) for more information about the
207library utilized by jets.
207library utilized by jets.
208
208
209−## `+aes:crypto` {#aes}
209+## `+aes:crypto` {% #aes %}
210
210
211This core contains cryptographic primitives and helper functions for
211This core contains cryptographic primitives and helper functions for
212[AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) symmetric key
212[AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) symmetric key
content/docs/arvo/reference/filesystem.md+1−1
@@ -41,7 +41,7 @@ is not perfectly adhered to - sometimes you may find structure definitions in
41 run a particular test `+test-bar` in `/tests/foo.hoon` in dojo, enter `-test %/tests/foo/test-bar ~`. If a file is specified, every test in that file will
41 run a particular test `+test-bar` in `/tests/foo.hoon` in dojo, enter `-test %/tests/foo/test-bar ~`. If a file is specified, every test in that file will
42 run. If a folder is specified, every test in that folder will run.
42 run. If a folder is specified, every test in that folder will run.
43
43
44−## `/sys` {#sys}
44+## `/sys` {% #sys %}
45
45
46`/sys` contains four files: `hoon.hoon`, `arvo.hoon`, `lull.hoon`, and
46`/sys` contains four files: `hoon.hoon`, `arvo.hoon`, `lull.hoon`, and
47`zuse.hoon`. These are the files used to construct kernelspace. Only the `%base`
47`zuse.hoon`. These are the files used to construct kernelspace. Only the `%base`
content/docs/arvo/tutorials/move-trace.md+13−11
@@ -44,7 +44,9 @@ followed by Enter. Your terminal should pretty print a series of `move`s that lo
44["|||||||||||" %give %b %doze [i=//behn/0v1p.sn2s7 t=~]]
44["|||||||||||" %give %b %doze [i=//behn/0v1p.sn2s7 t=~]]
45> -time ~s1
45> -time ~s1
46```
46```
47+
47followed by a pause of one second, then
48followed by a pause of one second, then
49+
48```
50```
49["" %unix p=%wake //behn ~2020.1.14..19.01.26..755d]
51["" %unix p=%wake //behn ~2020.1.14..19.01.26..755d]
50["|" %give %b %doze [i=//behn/0v1p.sn2s7 t=~]]
52["|" %give %b %doze [i=//behn/0v1p.sn2s7 t=~]]
@@ -56,6 +58,7 @@ followed by a pause of one second, then
56["||" %give %g [%unto %kick] [i=/g/use/dojo/~zod/out/~zod/spider/drum/wool t=~[/d //term/1]]]
58["||" %give %g [%unto %kick] [i=/g/use/dojo/~zod/out/~zod/spider/drum/wool t=~[/d //term/1]]]
57~s1..0007
59~s1..0007
58```
60```
61+
59This gives us a move trace that is a list of `move`s and some
62This gives us a move trace that is a list of `move`s and some
60associated metadata. Some of the `move`s are a bit of a distraction from what's
63associated metadata. Some of the `move`s are a bit of a distraction from what's
61going on overall such as acknowledgements that a `poke` was received
64going on overall such as acknowledgements that a `poke` was received
@@ -71,7 +74,6 @@ terminal. Any `move`s besides `%pass` in the first segment of the move trace is
71secondary process utilized for book-keeping, spawning processes, interpreting
74secondary process utilized for book-keeping, spawning processes, interpreting
72commands, etc. All of this will be explained in detail below.
75commands, etc. All of this will be explained in detail below.
73
76
74−
75It is important to note that this move trace should be thought of
77It is important to note that this move trace should be thought of
76as being from the "point of view" of the kernel - each line represents the
78as being from the "point of view" of the kernel - each line represents the
77kernel taking in a message from one source and passing it along to its
79kernel taking in a message from one source and passing it along to its
@@ -89,15 +91,12 @@ the move trace), and a particular focus on what code is being activated in the
89first few lines that should equip you well enough to unravel the rest of the
91first few lines that should equip you well enough to unravel the rest of the
90move trace in as much detail as you desire.
92move trace in as much detail as you desire.
91
93
92−
93### The call
94### The call
94
95
95Let's put the first part of the move trace into a diagram to make following
96Let's put the first part of the move trace into a diagram to make following
96along a little easier.
97along a little easier.
97
98
98−<div style="text-align:center">
99−<img src="https://media.urbit.org/docs/arvo/move-trace-with-key.png">
99+![](https://media.urbit.org/docs/arvo/move-trace-with-key.png)
100−</div>
101
100
102Here, each arrow represents the passing of some information, with most of it
101Here, each arrow represents the passing of some information, with most of it
103being from vane to vane. Here, when Vane A has an arrow to a card and then an
102being from vane to vane. Here, when Vane A has an arrow to a card and then an
@@ -111,9 +110,11 @@ This simple action ends up involving four vanes - Dill, Gall, Behn, and Ford -
111as well as four applications - hood, spider, dojo, and time.
110as well as four applications - hood, spider, dojo, and time.
112
111
113Now let's go through each line one by one.
112Now let's go through each line one by one.
113+
114```
114```
115["" %unix p=%belt //term/1 ~2020.1.14..19.01.25..7556]
115["" %unix p=%belt //term/1 ~2020.1.14..19.01.25..7556]
116```
116```
117+
117This tells us that Unix has sent a `%belt` `card`, which corresponds to
118This tells us that Unix has sent a `%belt` `card`, which corresponds to
118terminal input (the Enter keystroke) at time `~2020.1.14..19.01.25..7556`
119terminal input (the Enter keystroke) at time `~2020.1.14..19.01.25..7556`
119
120
@@ -123,6 +124,7 @@ Here is the line of code in `arvo.hoon`, found in the [section
123```hoon
124```hoon
124 ~? !lac ["" %unix -.q.ovo p.ovo now]
125 ~? !lac ["" %unix -.q.ovo p.ovo now]
125```
126```
127+
126First we note that this line is executed only if the laconic bit is set to true,
128First we note that this line is executed only if the laconic bit is set to true,
127as we did when we input `|verb`. Here, `ovo` is the input `ovum`. Knowing that an `ovum` is a `[p=wire q=curd]`,
129as we did when we input `|verb`. Here, `ovo` is the input `ovum`. Knowing that an `ovum` is a `[p=wire q=curd]`,
128we can then say that this is a `%unix` `move` tagged with `%belt` whose cause is a `wire` given by `//term/1`,
130we can then say that this is a `%unix` `move` tagged with `%belt` whose cause is a `wire` given by `//term/1`,
@@ -155,7 +157,6 @@ instructions to `%poke` hood, which is a Gall app
155primarily used for interfacing with Dill. Here, `+deal` is an arm for
157primarily used for interfacing with Dill. Here, `+deal` is an arm for
156`%pass`ing a `card` to Gall to ask it to create a `%deal` `task`:
158`%pass`ing a `card` to Gall to ask it to create a `%deal` `task`:
157
159
158−
159```hoon
160```hoon
160 ++ deal :: pass to %gall
161 ++ deal :: pass to %gall
161 |= [=wire =deal:gall]
162 |= [=wire =deal:gall]
@@ -163,9 +164,11 @@ primarily used for interfacing with Dill. Here, `+deal` is an arm for
163```
164```
164
165
165Next in our move trace we have this:
166Next in our move trace we have this:
167+
166```
168```
167["|" %pass [%d %g] [[%deal [~zod ~zod] %hood %poke] /] [i=//term/1 t=~]]
169["|" %pass [%d %g] [[%deal [~zod ~zod] %hood %poke] /] [i=//term/1 t=~]]
168```
170```
171+
169Here, Dill `%pass`es a `task` `card` saying to `%poke` Gall's hood app (with the
172Here, Dill `%pass`es a `task` `card` saying to `%poke` Gall's hood app (with the
170Enter keystroke).
173Enter keystroke).
171
174
@@ -204,7 +207,7 @@ concerning the laconic bit (following `!lac`) we can mostly determine what is be
204From the initial input event, Arvo has generated a `card` that it is now
207From the initial input event, Arvo has generated a `card` that it is now
205`%pass`ing from Dill (represented by `%d`) to Gall (represented by `%g`). The
208`%pass`ing from Dill (represented by `%d`) to Gall (represented by `%g`). The
206`card` is a `%deal` `task`, asking Gall to `%poke` hood using data that has
209`card` is a `%deal` `task`, asking Gall to `%poke` hood using data that has
207−originated from the terminal `//term/1`, namely that the Enter key was pressed. The line `:- (runt [s.gum '|'] "")`
210+originated from the terminal `//term/1`, namely that the Enter key was pressed. The line `:- (runt [s.gum '|'] "")`
208displays the causal chain length metadatum mentioned above. Lastly, `[~zod ~zod]` tells us that
211displays the causal chain length metadatum mentioned above. Lastly, `[~zod ~zod]` tells us that
209`~zod` is both the sending and receiving ship.
212`~zod` is both the sending and receiving ship.
210
213
@@ -215,8 +218,7 @@ that cannot be directly read from the move trace in [brackets]. Onto the next li
215["||" %pass [%g %g] [[%deal [~zod ~zod] %dojo %poke] /use/hood/~zod/out/~zod/dojo/drum/phat/~zod/dojo] [i=/d t=~[//term/1]]]
218["||" %pass [%g %g] [[%deal [~zod ~zod] %dojo %poke] /use/hood/~zod/out/~zod/dojo/drum/phat/~zod/dojo] [i=/d t=~[//term/1]]]
216```
219```
217
220
218−Here is another `%pass` `move`, this time from Gall to iself as denoted by `[%g
219−%g]`. Gall's hood has received the `%deal` `card` from Dill, and in response it is
221+Here is another `%pass` `move`, this time from Gall to iself as denoted by `[%g %g]`. Gall's hood has received the `%deal` `card` from Dill, and in response it is
220`%poke`ing dojo with the information [that Enter was pressed].
222`%poke`ing dojo with the information [that Enter was pressed].
221
223
222```
224```
@@ -229,6 +231,7 @@ the terminal prompt].
229```
231```
230["||||" %give %g [%unto %fact] [i=/d t=~[//term/1]]]
232["||||" %give %g [%unto %fact] [i=/d t=~[//term/1]]]
231```
233```
234+
232Gall's hood `%give`s a `gift` with a `%fact` to Dill [saying to replace the current terminal line with `~zod:dojo>`]
235Gall's hood `%give`s a `gift` with a `%fact` to Dill [saying to replace the current terminal line with `~zod:dojo>`]
233
236
234Next is the `move` that is not actually printed in the move trace mentioned
237Next is the `move` that is not actually printed in the move trace mentioned
@@ -316,7 +319,7 @@ passed, leading to a chain of `%give` `move`s that ultimately prints
316Let's throw the move trace into a table:
319Let's throw the move trace into a table:
317
320
318| length | move | vane(s) | card | duct |
321| length | move | vane(s) | card | duct |
319−|--------|---------|---------|-----------------|------------------------------------------------------------------------------------------------------------------|
322+| ------ | ------- | ------- | --------------- | ---------------------------------------------------------------------------------------------------------------- |
320| 0 | `%unix` | | `%wake` | `//behn` |
323| 0 | `%unix` | | `%wake` | `//behn` |
321| 1 | `%give` | `%b` | `%doze` | `//behn/0v1p.sn2s7` |
324| 1 | `%give` | `%b` | `%doze` | `//behn/0v1p.sn2s7` |
322| 1 | `%give` | `%b` | `%wake` | `/g/use/spider/~zod/thread/~.dojo_0v6.210tt.1sme1.ev3qm.qgv2e.a754u/wait/~2020.1.14..19.01.26..7556 /d //term/1` |
325| 1 | `%give` | `%b` | `%wake` | `/g/use/spider/~zod/thread/~.dojo_0v6.210tt.1sme1.ev3qm.qgv2e.a754u/wait/~2020.1.14..19.01.26..7556 /d //term/1` |
@@ -375,4 +378,3 @@ Dill `%give`s a `%blit` (terminal output) event to Unix [saying to print a new l
375```
378```
376
379
377Gall's spider also closes the subscription from dojo [since the thread has completed].
380Gall's spider also closes the subscription from dojo [since the thread has completed].
378−
content/docs/azimuth/azimuth-eth.md+4−5
@@ -12,7 +12,7 @@ for the contract containing the business logic for this ledger. `Azimuth.eth`
12cannot be modified directly by [galaxy vote](/docs/glossary/upgrade) - they are
12cannot be modified directly by [galaxy vote](/docs/glossary/upgrade) - they are
13only eligible to modify the Ecliptic.
13only eligible to modify the Ecliptic.
14
14
15−## Global state {#global}
15+## Global state {% #global %}
16
16
17The global state of `Azimuth.eth` is given by the following.
17The global state of `Azimuth.eth` is given by the following.
18
18
@@ -42,7 +42,7 @@ tokens](https://eips.ethereum.org/EIPS/eip-721) and are indexed by a number
42between `0` and `2^32-1`, e.g. a `uint32`. There are two data structures
42between `0` and `2^32-1`, e.g. a `uint32`. There are two data structures
43associated to a given `uint32`: a `Point` and a `Deed`.
43associated to a given `uint32`: a `Point` and a `Deed`.
44
44
45−## `Point`s {#points}
45+## `Point`s {% #points %}
46
46
47A `Point` contains data about networking keys and sponsorship status, arranged
47A `Point` contains data about networking keys and sponsorship status, arranged
48in the following `struct`:
48in the following `struct`:
@@ -101,7 +101,7 @@ in the following `struct`:
101 }
101 }
102```
102```
103
103
104−## `Deed`s {#deeds}
104+## `Deed`s {% #deeds %}
105
105
106A `Deed` says which Ethereum address owns a given `Point` as well as several
106A `Deed` says which Ethereum address owns a given `Point` as well as several
107[proxies](/docs/using/id/proxies) for that `Point`.
107[proxies](/docs/using/id/proxies) for that `Point`.
@@ -134,7 +134,7 @@ struct Deed
134 }
134 }
135```
135```
136
136
137−## Other state {#other}
137+## Other state {% #other %}
138
138
139Finally, each Ethereum address may set for itself a number of `operators`, as
139Finally, each Ethereum address may set for itself a number of `operators`, as
140defined and required by the [ERC-721
140defined and required by the [ERC-721
@@ -155,4 +155,3 @@ All data in this ledger is stored and processed locally on your ship by the
1552](/docs/azimuth/l2/layer2) data. Because state transitions resulting from layer 2
1552](/docs/azimuth/l2/layer2) data. Because state transitions resulting from layer 2
156transactions are not included in this ledger, in general the local store will
156transactions are not included in this ledger, in general the local store will
157differ from what is kept in `Azimuth.eth`.
157differ from what is kept in `Azimuth.eth`.
158−
content/docs/azimuth/azimuth.md+32−33
@@ -50,37 +50,37 @@ that stores the deed to your house.
50
50
51Azimuth consists of the following smart contracts:
51Azimuth consists of the following smart contracts:
52
52
53− - [Azimuth.eth](https://etherscan.io/address/azimuth.eth)
53+- [Azimuth.eth](https://etherscan.io/address/azimuth.eth)
54− `0x223c067f8cf28ae173ee5cafea60ca44c335fecb`: contains all on-chain state for
54+ `0x223c067f8cf28ae173ee5cafea60ca44c335fecb`: contains all on-chain state for
55− Azimuth. Most notably, ownership and public keys. Can't be modified directly,
55+ Azimuth. Most notably, ownership and public keys. Can't be modified directly,
56− you must use the Ecliptic.
56+ you must use the Ecliptic.
57− - [Ecliptic.eth](https://etherscan.io/address/ecliptic.eth):
57+- [Ecliptic.eth](https://etherscan.io/address/ecliptic.eth):
58− `0x9ef27de616154FF8B38893C59522b69c7Ba8A81c ` is used as an interface for
58+ `0x9ef27de616154FF8B38893C59522b69c7Ba8A81c ` is used as an interface for
59− interacting with your points on-chain. Allows you to configure keys, transfer
59+ interacting with your points on-chain. Allows you to configure keys, transfer
60− ownership, etc.
60+ ownership, etc.
61− - [Polls](https://etherscan.io/address/0x7fecab617c868bb5996d99d95200d2fa708218e4):
61+- [Polls](https://etherscan.io/address/0x7fecab617c868bb5996d99d95200d2fa708218e4):
62− `0x7fecab617c868bb5996d99d95200d2fa708218e4` registers votes by the Galactic
62+ `0x7fecab617c868bb5996d99d95200d2fa708218e4` registers votes by the Galactic
63− Senate on proposals. These can be either static documents or Ecliptic
63+ Senate on proposals. These can be either static documents or Ecliptic
64− upgrades.
64+ upgrades.
65− - [Linear Star
65+- [Linear Star
66− Release](https://etherscan.io/address/0x86cd9cd0992f04231751e3761de45cecea5d1801):
66+ Release](https://etherscan.io/address/0x86cd9cd0992f04231751e3761de45cecea5d1801):
67− facilitates the release of blocks of stars to their owners over a period of
67+ facilitates the release of blocks of stars to their owners over a period of
68− time.
68+ time.
69− - [Conditional Star
69+- [Conditional Star
70− Release](https://etherscan.io/address/0x8c241098c3d3498fe1261421633fd57986d74aea):
70+ Release](https://etherscan.io/address/0x8c241098c3d3498fe1261421633fd57986d74aea):
71− `0x8c241098c3d3498fe1261421633fd57986d74aea` facilitates the release of
71+ `0x8c241098c3d3498fe1261421633fd57986d74aea` facilitates the release of
72− blocks of stars to their owners based on milestones.
72+ blocks of stars to their owners based on milestones.
73− - [Claims](https://etherscan.io/address/0xe7e7f69b34d7d9bd8d61fb22c33b22708947971a):
73+- [Claims](https://etherscan.io/address/0xe7e7f69b34d7d9bd8d61fb22c33b22708947971a):
74− `0xe7e7f69b34d7d9bd8d61fb22c33b22708947971a` allows point owners to make
74+ `0xe7e7f69b34d7d9bd8d61fb22c33b22708947971a` allows point owners to make
75− claims about (for example) their identity, and associate that with their
75+ claims about (for example) their identity, and associate that with their
76− point.
76+ point.
77− - [Censures](https://etherscan.io/address/0x325f68d32bdee6ed86e7235ff2480e2a433d6189):
77+- [Censures](https://etherscan.io/address/0x325f68d32bdee6ed86e7235ff2480e2a433d6189):
78− `0x325f68d32bdee6ed86e7235ff2480e2a433d6189` simple reputation management,
78+ `0x325f68d32bdee6ed86e7235ff2480e2a433d6189` simple reputation management,
79− allowing galaxies and stars to flag points for negative reputation.
79+ allowing galaxies and stars to flag points for negative reputation.
80− - [Delegated
80+- [Delegated
81− Sending](https://etherscan.io/address/0xf6b461fe1ad4bd2ce25b23fe0aff2ac19b3dfa76):
81+ Sending](https://etherscan.io/address/0xf6b461fe1ad4bd2ce25b23fe0aff2ac19b3dfa76):
82− enables network-effect like distributing of planets.
82+ enables network-effect like distributing of planets.
83−
83+
84Walkthroughs of some of the smart contracts are linked to [below](#other).
84Walkthroughs of some of the smart contracts are linked to [below](#other).
85
85
86## Naive rollups
86## Naive rollups
@@ -103,7 +103,7 @@ A casual overview of the naive rollups system can be found on the
103[blog](/blog/rollups). Developers are encouraged to read our Layer 2
103[blog](/blog/rollups). Developers are encouraged to read our Layer 2
104documentation, starting with the [Layer 2 Overview](/docs/azimuth/l2/layer2).
104documentation, starting with the [Layer 2 Overview](/docs/azimuth/l2/layer2).
105
105
106−## Other resources {#other}
106+## Other resources {% #other %}
107
107
108### [Urbit HD Wallet](/docs/azimuth/hd-wallet)
108### [Urbit HD Wallet](/docs/azimuth/hd-wallet)
109
109
@@ -135,4 +135,3 @@ transactions from within Urbit itself.
135An explanation of how Azimuth indexes networking keys revisions and breaches to
135An explanation of how Azimuth indexes networking keys revisions and breaches to
136keep track of the most recent set of networking keys necessary to communicate
136keep track of the most recent set of networking keys necessary to communicate
137with a ship.
137with a ship.
138−
content/docs/azimuth/ecliptic.md+3−3
@@ -40,7 +40,7 @@ have a corresponding [layer 2 action](/docs/azimuth/l2/l2-actions), and/or can b
40performed using [Bridge](/using/id/using-bridge). We note these facts where
40performed using [Bridge](/using/id/using-bridge). We note these facts where
41applicable.
41applicable.
42
42
43−## Write functions {#write}
43+## Write functions {% #write %}
44
44
45Here we briefly describe each function in `Ecliptic.eth` which allows one to write
45Here we briefly describe each function in `Ecliptic.eth` which allows one to write
46data to Ethereum. These can be called using
46data to Ethereum. These can be called using
@@ -194,7 +194,7 @@ section for more detail. The detach action available in Bridge is a layer 2
194action, so a layer 1 detach must be done
194action, so a layer 1 detach must be done
195[manually](https://etherscan.io/address/ecliptic.eth#writeContract).
195[manually](https://etherscan.io/address/ecliptic.eth#writeContract).
196
196
197−### Proxy management {#proxies}
197+### Proxy management {% #proxies %}
198
198
199These functions are used to manage the various
199These functions are used to manage the various
200[proxies](/docs/using/id/proxies). All of these actions may be performed from Bridge.
200[proxies](/docs/using/id/proxies). All of these actions may be performed from Bridge.
@@ -383,7 +383,7 @@ this function has no valid arguments.
383Sets 3 DNS domains by which galaxy IP addresses may be looked up as part of the
383Sets 3 DNS domains by which galaxy IP addresses may be looked up as part of the
384bootstrap process to get on the network. Currently, all three domains are `urbit.org`.
384bootstrap process to get on the network. Currently, all three domains are `urbit.org`.
385
385
386−## Read functions {#read}
386+## Read functions {% #read %}
387
387
388Here we briefly describe each function in the Ecliptic which allows one to read
388Here we briefly describe each function in the Ecliptic which allows one to read
389data from the contract. These can be called using
389data from the contract. These can be called using
content/docs/azimuth/flow.md+14−14
@@ -27,17 +27,18 @@ following sections outline what each component is responsible for and how it
27communicates with the others.
27communicates with the others.
28
28
29The Gall agents involved with Azimuth are summarized as follows:
29The Gall agents involved with Azimuth are summarized as follows:
30+
30− - [`%azimuth`](#azimuth) - obtains and holds PKI state.
31+- [`%azimuth`](#azimuth) - obtains and holds PKI state.
31− - [`%azimuth-rpc`](#azimuth-rpc) - JSON RPC-API for `%azimuth`.
32+- [`%azimuth-rpc`](#azimuth-rpc) - JSON RPC-API for `%azimuth`.
32− - [`%eth-watcher`](#eth-watcher) - Ethereum event log collector.
33+- [`%eth-watcher`](#eth-watcher) - Ethereum event log collector.
33− - [`%roller`](#roller) - submits batches of L2 transactions to Ethereum.
34+- [`%roller`](#roller) - submits batches of L2 transactions to Ethereum.
34− - [`%roller-rpc`](#roller-rpc) - JSON RPC-API for `%roller`.
35+- [`%roller-rpc`](#roller-rpc) - JSON RPC-API for `%roller`.
35−
36+
36The transaction processing library is [`/lib/naive.hoon`](#naive).
37The transaction processing library is [`/lib/naive.hoon`](#naive).
37−
38+
38### Gall agents
39### Gall agents
39
40
40−#### `%azimuth` {#azimuth}
41+#### `%azimuth` {% #azimuth %}
41
42
42`%azimuth`, located at `/app/azimuth.hoon`, is a Gall agent and thread handler
43`%azimuth`, located at `/app/azimuth.hoon`, is a Gall agent and thread handler
43responsible for finding Azimuth transactions gathered by `%eth-watcher`,
44responsible for finding Azimuth transactions gathered by `%eth-watcher`,
@@ -79,12 +80,12 @@ Scries can be inferred from the `+on-peek` arm:
79 ==
80 ==
80```
81```
81
82
82−#### `%azimuth-rpc` {#azimuth-rpc}
83+#### `%azimuth-rpc` {% #azimuth-rpc %}
83
84
84`%azimuth-rpc`, located at `app/azimuth-rpc.hoon`, is a JSON RPC-API for getting
85`%azimuth-rpc`, located at `app/azimuth-rpc.hoon`, is a JSON RPC-API for getting
85`point` and `dns` data from the Azimuth PKI state kept by `%azimuth`.
86`point` and `dns` data from the Azimuth PKI state kept by `%azimuth`.
86
87
87−#### `%eth-watcher` {#eth-watcher}
88+#### `%eth-watcher` {% #eth-watcher %}
88
89
89`%eth-watcher`, located at `/app/eth-watcher.hoon`, is responsible for listening
90`%eth-watcher`, located at `/app/eth-watcher.hoon`, is responsible for listening
90to an Ethereum node and collecting event logs from it. It is general-purpose and
91to an Ethereum node and collecting event logs from it. It is general-purpose and
@@ -94,11 +95,11 @@ not particular to Azimuth. It sends collected transactions to `+on-agent` in
94
95
95[![Eth-watcher](https://media.urbit.org/docs/layer2/roller-agents.png)](https://media.urbit.org/docs/layer2/roller-agents.png)
96[![Eth-watcher](https://media.urbit.org/docs/layer2/roller-agents.png)](https://media.urbit.org/docs/layer2/roller-agents.png)
96
97
97−#### `%roller` {#roller}
98+#### `%roller` {% #roller %}
98
99
99`%roller`, stored at `/app/roller.hoon`, is a Gall agent responsible for
100`%roller`, stored at `/app/roller.hoon`, is a Gall agent responsible for
100collecting and submitting batches of layer 2 transactions to the Ethereum
101collecting and submitting batches of layer 2 transactions to the Ethereum
101−blockchain. Among other things, it keeps
102+blockchain. Among other things, it keeps
102track of a list of pending transactions to be sent, transactions it has sent
103track of a list of pending transactions to be sent, transactions it has sent
103that are awaiting confirmation, history of transactions sent organized by
104that are awaiting confirmation, history of transactions sent organized by
104Ethereum address, and when the next batch of transactions will be sent. See also
105Ethereum address, and when the next batch of transactions will be sent. See also
@@ -152,7 +153,7 @@ does not keep any state - its only purpose is to act as an intermediary between
152Bridge and `%roller`. See [here](/docs/azimuth/l2/layer2-api) for more
153Bridge and `%roller`. See [here](/docs/azimuth/l2/layer2-api) for more
153information on the JSON RPC-API.
154information on the JSON RPC-API.
154
155
155−### `naive.hoon` {#naive}
156+### `naive.hoon` {% #naive %}
156
157
157`/lib/naive.hoon` consists of a gate whose sample is a `verifier`, `chain-id=@ud`,
158`/lib/naive.hoon` consists of a gate whose sample is a `verifier`, `chain-id=@ud`,
158`state`, and `input`, which outputs a cell of `[effects state]`. This is the
159`state`, and `input`, which outputs a cell of `[effects state]`. This is the
@@ -229,4 +230,3 @@ standard](https://eips.ethereum.org/EIPS/eip-721).
229
230
230`dns` is a list of DNS entries by which galaxy IP addresses may be looked up. At
231`dns` is a list of DNS entries by which galaxy IP addresses may be looked up. At
231present, this is always `~['urbit.org' 'urbit.org' 'urbit.org']`.
232present, this is always `~['urbit.org' 'urbit.org' 'urbit.org']`.
232−
content/docs/azimuth/l2/bytestring.md+8−8
@@ -24,12 +24,11 @@ We describe the byte format of a `batch` and its components in the following.
24All atoms described here are read by the parser as little-endian - i.e. it reads
24All atoms described here are read by the parser as little-endian - i.e. it reads
25the last digit first and proceeds backwards.
25the last digit first and proceeds backwards.
26
26
27−For the purposes of concatenation, all atoms are encoded using `octs=(pair @ud
27+For the purposes of concatenation, all atoms are encoded using `octs=(pair @ud @)`, which is a way to represent atoms with a fixed width in order to account
28−@)`, which is a way to represent atoms with a fixed width in order to account
29for leading zeroes. Here `@ud` will be the length of the atom in bytes, while
28for leading zeroes. Here `@ud` will be the length of the atom in bytes, while
30the `@` is actual atom.
29the `@` is actual atom.
31
30
32−### Batches {#batch}
31+### Batches {% #batch %}
33
32
34A `batch` is an atom that is the concatenation of several raw transactions,
33A `batch` is an atom that is the concatenation of several raw transactions,
35which are themselves atoms. `naive.hoon` starts reading the `batch` from the end
34which are themselves atoms. `naive.hoon` starts reading the `batch` from the end
@@ -57,7 +56,7 @@ nonce, chain ID, and header to a given action and uses that to verify the
57corresponding signature, rather than just the action itself. This reduces the
56corresponding signature, rather than just the action itself. This reduces the
58number of bytes in the batch, making transactions cheaper.
57number of bytes in the batch, making transactions cheaper.
59
58
60−### Actions {#actions}
59+### Actions {% #actions %}
61
60
62The byte format of an action as they appear in a `batch` is as
61The byte format of an action as they appear in a `batch` is as
63follows. They are parsed by the `+parse-tx` arm in `naive.hoon`.
62follows. They are parsed by the `+parse-tx` arm in `naive.hoon`.
@@ -71,6 +70,7 @@ remainder: arguments
71```
70```
72
71
73The `proxy` is an atom between `0` and `4`, which corresponds as follows:
72The `proxy` is an atom between `0` and `4`, which corresponds as follows:
73+
74```
74```
75%0 %own
75%0 %own
76%1 %spawn
76%1 %spawn
@@ -78,6 +78,7 @@ The `proxy` is an atom between `0` and `4`, which corresponds as follows:
78%3 %vote
78%3 %vote
79%4 %transfer
79%4 %transfer
80```
80```
81+
81Note that `%vote` proxies are not supported by layer 2.
82Note that `%vote` proxies are not supported by layer 2.
82
83
83The ship is its `@p` encoded as an `@`. As we are working with fixed width
84The ship is its `@p` encoded as an `@`. As we are working with fixed width
@@ -131,7 +132,7 @@ As before, the length of the ship argument is always 4 bytes.
131#### `%escape`, `%cancel-escape`, `%adopt`, `%reject`, `%detach`
132#### `%escape`, `%cancel-escape`, `%adopt`, `%reject`, `%detach`
132
133
133Each of these actions have the same argument - a single ship. Again, the length
134Each of these actions have the same argument - a single ship. Again, the length
134−of the ship argument is always 4 bytes.
135+of the ship argument is always 4 bytes.
135
136
136```
137```
1374 bytes: ship
1384 bytes: ship
@@ -147,7 +148,7 @@ Each of these actions have the same argument - an Ethereum address:
1471 bit: padding
1481 bit: padding
148```
149```
149
150
150−### Unsigned transactions {#unsigned}
151+### Unsigned transactions {% #unsigned %}
151
152
152An unsigned transaction is an atom consisting of the concatentation of an Ethereum signed
153An unsigned transaction is an atom consisting of the concatentation of an Ethereum signed
153message header, an Urbit ID header, a chain ID, a nonce, and an action. This has the following format:
154message header, an Urbit ID header, a chain ID, a nonce, and an action. This has the following format:
@@ -186,7 +187,7 @@ additional data listed above. When a ship determines whether or not a given
186layer 2 action is valid, it adds the additional data to the action to form an
187layer 2 action is valid, it adds the additional data to the action to form an
187unsigned transaction and verifies the signature against that.
188unsigned transaction and verifies the signature against that.
188
189
189−### Signatures {#signatures}
190+### Signatures {% #signatures %}
190
191
191The signature is a 65-byte ECDSA signature as described in
192The signature is a 65-byte ECDSA signature as described in
192[EIP-191](https://eips.ethereum.org/EIPS/eip-191) and is compatible with
193[EIP-191](https://eips.ethereum.org/EIPS/eip-191) and is compatible with
@@ -198,4 +199,3 @@ an [unsigned transaction](#unsigned).
198Because of the format of signatures, it may have leading zeroes resulting in a
199Because of the format of signatures, it may have leading zeroes resulting in a
19964-byte signature, and so it is important to use `octs` to ensure that it is
20064-byte signature, and so it is important to use `octs` to ensure that it is
200interpreted as being 65 bytes.
201interpreted as being 65 bytes.
201−
content/docs/azimuth/l2/layer2.md+44−45
@@ -42,37 +42,37 @@ We briefly review how "Layer 1", i.e. the [Azimuth](/docs/glossary/azimuth) smar
42contract suite, functions. An update to the Azimuth PKI data stored on your urbit
42contract suite, functions. An update to the Azimuth PKI data stored on your urbit
43occurs with four steps:
43occurs with four steps:
44
44
45− 1. A transaction is posted to the Ethereum blockchain.
45+1. A transaction is posted to the Ethereum blockchain.
46− 2. The [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/)
46+2. The [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/)
47 calculates the resulting state transition and checks its validity, then
47 calculates the resulting state transition and checks its validity, then
48 updates the state if it is a valid transition.
48 updates the state if it is a valid transition.
49− 3. Your urbit downloads the new state from an Ethereum node.
49+3. Your urbit downloads the new state from an Ethereum node.
50− 4. Your urbit makes the final decision on whether the new state is valid.
50+4. Your urbit makes the final decision on whether the new state is valid.
51
51
52By default, step four always succeeds. It has always been possible in theory for
52By default, step four always succeeds. It has always been possible in theory for
53your urbit to dispute what it read on Ethereum, but there has never been any
53your urbit to dispute what it read on Ethereum, but there has never been any
54reason to do so.
54reason to do so.
55
55
56−### Layer 2 {#layer-2}
56+### Layer 2 {% #layer-2 %}
57
57
58Layer 1 still functions identically today as it did before naive rollups. Naive
58Layer 1 still functions identically today as it did before naive rollups. Naive
59rollups work via the following process.
59rollups work via the following process.
60
60
61− 1. A batch of one or more transactions is posted to the Ethereum blockchain by
61+1. A batch of one or more transactions is posted to the Ethereum blockchain by
62 an urbit node called a roller or aggregator.
62 an urbit node called a roller or aggregator.
63− 2. Your urbit downloads the transactions from an Ethereum node.
63+2. Your urbit downloads the transactions from an Ethereum node.
64− 3. Your urbit computes the resulting state transitions from the transactions
64+3. Your urbit computes the resulting state transitions from the transactions
65 and checks them for validity.
65 and checks them for validity.
66− 4. Your urbit updates its locally stored Azimuth state using state transitions
66+4. Your urbit updates its locally stored Azimuth state using state transitions
67 from the batch that have been deemed valid.
67 from the batch that have been deemed valid.
68−
68+
69− In comparison with Layer 1, the EVM no longer checks the validity or computes
69+In comparison with Layer 1, the EVM no longer checks the validity or computes
70− the state transitions for any given transaction. It is now being used solely as
70+the state transitions for any given transaction. It is now being used solely as
71− a database of submitted transactions, and the business logic of computing what
71+a database of submitted transactions, and the business logic of computing what
72− these transactions mean has been offloaded to your urbit. Thus we think of
72+these transactions mean has been offloaded to your urbit. Thus we think of
73− `naive.hoon` as being the first "Hoon smart contract". You could also consider
73+`naive.hoon` as being the first "Hoon smart contract". You could also consider
74steps 3 and 4 of the Layer 2 process as being a fattening of the trivial step 4
74steps 3 and 4 of the Layer 2 process as being a fattening of the trivial step 4
75− of the layer 1 process.
75+of the layer 1 process.
76
76
77Here we briefly elaborate on the layer 2 steps, but see below for more technical
77Here we briefly elaborate on the layer 2 steps, but see below for more technical
78detail.
78detail.
@@ -96,17 +96,17 @@ the Gall agent `/app/azimuth.hoon` accordingly.
96There are several dimensions by which naive rollups saves on gas over layer 1.
96There are several dimensions by which naive rollups saves on gas over layer 1.
97They are:
97They are:
98
98
99− 1. Gas is not spent on instructing the EVM to compute state transitions and
99+1. Gas is not spent on instructing the EVM to compute state transitions and
100 confirm validity.
100 confirm validity.
101− 2. Layer 2 Azimuth state is not stored on Ethereum, so the only data storage
101+2. Layer 2 Azimuth state is not stored on Ethereum, so the only data storage
102 gas costs is for the transactions themselves.
102 gas costs is for the transactions themselves.
103− 3. Layer 2 transactions are written in a highly compressed form. E.g., instead
103+3. Layer 2 transactions are written in a highly compressed form. E.g., instead
104 of calling the spawn action by name, it is simply referred to as action `%1`.
104 of calling the spawn action by name, it is simply referred to as action `%1`.
105− 4. By collecting multiple layer 2 transactions and submitting them as a single
105+4. By collecting multiple layer 2 transactions and submitting them as a single
106 "batch transaction", additional gas savings are achieved by not needing to
106 "batch transaction", additional gas savings are achieved by not needing to
107 duplicate information such as which smart contract the transactions are
107 duplicate information such as which smart contract the transactions are
108 intended for.
108 intended for.
109−
109+
110Put together, these create a reduction in gas costs of at least 65x when adding
110Put together, these create a reduction in gas costs of at least 65x when adding
111a transaction to a sufficiently large batch (approximately 30 or more
111a transaction to a sufficiently large batch (approximately 30 or more
112transactions). A single transaction submitted as a batch is approximately 5x
112transactions). A single transaction submitted as a batch is approximately 5x
@@ -132,7 +132,7 @@ For a complete list of what layer 2 actions each ship rank, layer, and proxy can
132perform, see [Layer 2 Actions](/docs/azimuth/l2/l2-actions). For an explicit
132perform, see [Layer 2 Actions](/docs/azimuth/l2/l2-actions). For an explicit
133description of the byte format of Layer 2 Ethereum transaction, see [Bytestring format](/docs/azimuth/l2/bytestring).
133description of the byte format of Layer 2 Ethereum transaction, see [Bytestring format](/docs/azimuth/l2/bytestring).
134
134
135−### Sponsorship {#sponsorship}
135+### Sponsorship {% #sponsorship %}
136
136
137Due to the possibility of sponsors and sponsees existing on different layers,
137Due to the possibility of sponsors and sponsees existing on different layers,
138the precise logic of how sponsorship works is complex. However, under common
138the precise logic of how sponsorship works is complex. However, under common
@@ -160,37 +160,37 @@ transitions](#sponsorship-state-transitions) section below, we give a table that
160shows how the sponsor and escape status of a ship changes according to which
160shows how the sponsor and escape status of a ship changes according to which
161actions are taken.
161actions are taken.
162
162
163−### Smart contracts {#smart-contracts}
163+### Smart contracts {% #smart-contracts %}
164
164
165Smart contracts are unable to own layer 2 ships, and thus cannot sign layer 2
165Smart contracts are unable to own layer 2 ships, and thus cannot sign layer 2
166transactions. This creates a hard requirement that layer 1 ships be allowed to
166transactions. This creates a hard requirement that layer 1 ships be allowed to
167perform a layer 1 detach operation on a layer 2 ships.
167perform a layer 1 detach operation on a layer 2 ships.
168
168
169−## Azimuth state {#state}
169+## Azimuth state {% #state %}
170
170
171The introduction of layer 2 presents additional complication in understanding
171The introduction of layer 2 presents additional complication in understanding
172Azimuth state. In order to be precise we define the following terminology:
172Azimuth state. In order to be precise we define the following terminology:
173
173
174− - _Layer 1 Azimuth state_ refers to the state of Azimuth as reflected on the
174+- _Layer 1 Azimuth state_ refers to the state of Azimuth as reflected on the
175− Ethereum blockchain. This excludes all layer 2 transactions. Depositing to
175+ Ethereum blockchain. This excludes all layer 2 transactions. Depositing to
176− layer 2 is considered a layer 1 action, so the layer 1 Azimuth state is aware
176+ layer 2 is considered a layer 1 action, so the layer 1 Azimuth state is aware
177− of which ships are on layer 2, but is blind to everything that happens to
177+ of which ships are on layer 2, but is blind to everything that happens to
178− them afterward.
178+ them afterward.
179− - _Layer 2 Azimuth state_ refers to the state of Azimuth as stored in
179+- _Layer 2 Azimuth state_ refers to the state of Azimuth as stored in
180− `/app/azimuth.hoon` on your ship. The state here takes into account
180+ `/app/azimuth.hoon` on your ship. The state here takes into account
181− transactions that occur on both layers. No distinction between the
181+ transactions that occur on both layers. No distinction between the
182− layers is made in the state here - e.g. a ship only has one sponsor in Layer 2
182+ layers is made in the state here - e.g. a ship only has one sponsor in Layer 2
183− Azimuth state, not a layer 1 sponsor and a layer 2 sponsor. This is the state
183+ Azimuth state, not a layer 1 sponsor and a layer 2 sponsor. This is the state
184− actually in use by Urbit. Layer 1 Azimuth state is now only an input for
184+ actually in use by Urbit. Layer 1 Azimuth state is now only an input for
185− generating Layer 2 Azimuth state, so any time a ship needs to check e.g. the
185+ generating Layer 2 Azimuth state, so any time a ship needs to check e.g. the
186− public key of a ship (regardless of which layer it is on), it will check the
186+ public key of a ship (regardless of which layer it is on), it will check the
187− Layer 2 Azimuth state, not the Layer 1 Azimuth state.
187+ Layer 2 Azimuth state, not the Layer 1 Azimuth state.
188− - _Layer-2-Only Azimuth state_ refers to the state of Azimuth as reflected
188+- _Layer-2-Only Azimuth state_ refers to the state of Azimuth as reflected
189− solely by layer 2 transactions. This state is not explicitly stored anywhere,
189+ solely by layer 2 transactions. This state is not explicitly stored anywhere,
190− but is computed as part of the process to create the Layer 2 Azimuth state.
190+ but is computed as part of the process to create the Layer 2 Azimuth state.
191− We do not make any further references to this state, but it is important to
191+ We do not make any further references to this state, but it is important to
192− keep in mind conceptually.
192+ keep in mind conceptually.
193−
193+
194Layer 1 Azimuth state is computed by the Ethereum Virtual Machine. Layer 2
194Layer 1 Azimuth state is computed by the Ethereum Virtual Machine. Layer 2
195Azimuth state is computed by taking in the Layer 1 Azimuth state and modifying
195Azimuth state is computed by taking in the Layer 1 Azimuth state and modifying
196it according to layer 2 transactions using `/lib/naive.hoon`. When we are being
196it according to layer 2 transactions using `/lib/naive.hoon`. When we are being
@@ -401,4 +401,3 @@ submitted to is taking too long for your liking, and you want to try again with
401another. If both rollers end up submitting the transaction, only the first one
401another. If both rollers end up submitting the transaction, only the first one
402will succeed, as the second one will be ignored by `naive.hoon` for having the
402will succeed, as the second one will be ignored by `naive.hoon` for having the
403wrong nonce.
403wrong nonce.
404−
content/docs/azimuth/l2/roller-tutorial.md+21−61
@@ -28,11 +28,13 @@ the roller that performs these actions, and "front-end" refers to the optional
28web GUI most users will use to interact with your roller (probably Bridge).
28web GUI most users will use to interact with your roller (probably Bridge).
29
29
30There are three main steps involved with setting up a roller:
30There are three main steps involved with setting up a roller:
31+
31− - ensuring that the data in `%azimuth` is up to date,
32+- ensuring that the data in `%azimuth` is up to date,
32− - starting and configuring `%roller`,
33+- starting and configuring `%roller`,
33− - aiming your front-end at the roller
34+- aiming your front-end at the roller
34
35
35### 1. Make sure `%azimuth` state is up to date
36### 1. Make sure `%azimuth` state is up to date
37+
36If you are using an ordinary live ship on the network as the roller, you should
38If you are using an ordinary live ship on the network as the roller, you should
37already have the latest `%azimuth` state and this step should not be necessary
39already have the latest `%azimuth` state and this step should not be necessary
38and you may move to step 2.
40and you may move to step 2.
@@ -51,7 +53,8 @@ found under the Setting page for the node on infura.io listed under `ENDPOINTS`.
51If you do not perform this step, you'll later see an error "roller not ready"
53If you do not perform this step, you'll later see an error "roller not ready"
52when the first roller batch is about to be submitted.
54when the first roller batch is about to be submitted.
53
55
54−### 2. Starting and configuring `%roller` {#step2}
56+### 2. Starting and configuring `%roller` {% #step2 %}
57+
55This step must be performed whether you're using a fakezod or a live ship.
58This step must be performed whether you're using a fakezod or a live ship.
56
59
57First we need to start `%roller` and `%roller-rpc` (the agent used to send
60First we need to start `%roller` and `%roller-rpc` (the agent used to send
@@ -60,8 +63,7 @@ instead will be accepting transactions to batch entirely from within Urbit,
60`%roller-rpc` is not necessary. We assume you will be using Bridge as a
63`%roller-rpc` is not necessary. We assume you will be using Bridge as a
61front-end.
64front-end.
62
65
63−To start the agents, enter the following command in dojo: `|rein %base [&
66+To start the agents, enter the following command in dojo: `|rein %base [& %roller] [& %roller-rpc]`. You should see the following response:
64−%roller] [& %roller-rpc]`. You should see the following response:
65
67
66```
68```
67gall: installing %roller-rpc
69gall: installing %roller-rpc
@@ -90,8 +92,8 @@ available but do not participate in propagating transactions). Enter
90`:roller|endpoint 'https://MAINNET_INFURA_URL' %mainnet` into dojo.
92`:roller|endpoint 'https://MAINNET_INFURA_URL' %mainnet` into dojo.
91
93
92Next we set the private key for the Ethereum wallet from which batches built by
94Next we set the private key for the Ethereum wallet from which batches built by
93−`%roller` will be submitted. We *strongly emphasize* that this step has serious
95+`%roller` will be submitted. We _strongly emphasize_ that this step has serious
94−security implications. *`%roller` will be able to spend ETH in this wallet.*
96+security implications. _`%roller` will be able to spend ETH in this wallet._
95This is mandatory, of course, as the primary function of `%roller` is to submit
97This is mandatory, of course, as the primary function of `%roller` is to submit
96batches of transactions to Ethereum, which requires ETH. If you downloaded
98batches of transactions to Ethereum, which requires ETH. If you downloaded
97`%roller` from someone other than Tlon and have not personally audited their
99`%roller` from someone other than Tlon and have not personally audited their
@@ -157,56 +159,14 @@ set up at `https://myroller.sampel-pal.net`.
157rate at which transactions are submitted and manually submitting batches. These
159rate at which transactions are submitted and manually submitting batches. These
158can be modified using the following generators:
160can be modified using the following generators:
159
161
160−<table>
161− <thead><tr><th>Dojo Command</th><th>Description</th><th>Argument</th></tr></thead>
162+| Dojo Command | Description | Argument |
162−<tbody>
163+| -------------------- | --------------------------------------------------------------------- | ---------------------------------- |
163− <tr>
164− <td><code>:roller|commit</code></td>
165− <td>Submits a new L2 batch with all pending transactions.</td>
164+| `:roller\|commit` | Submits a new L2 batch with all pending transactions. | None. |
166− <td>None.</td>
167− </tr>
168− <tr>
169− <td><code>:roller|config</code></td>
170− <td>General configuration command.</td>
165+| `:roller\|config` | General configuration command. | `$config` (see `/sur/dice.hoon`) |
171− <td><code>$config</code> (see <code>/sur/dice.hoon</code>)</td>
172− </tr>
173− <tr>
174− <td><code>:roller|endpoint</code></td>
175− <td>Set the Infura endpoint.</td>
166+| `:roller\|endpoint` | Set the Infura endpoint. | `[@t ?(%mainnet %ropsten %local)]` |
176− <td><code>[@t ?(%mainnet %ropsten %local)]</code></td>
177− </tr>
178− <tr>
179− <td><code>:roller|frequency</code></td>
180− <td>Sets the frequency at which batches are submitted.</td>
167+| `:roller\|frequency` | Sets the frequency at which batches are submitted. | `@dr` |
181− <td><code>@dr</code></td>
182− </tr>
183− <tr>
184− <td><code>:roller|local</code></td>
185− <td>Configures <code>%roller</code> to listen to a local Ethereum node at port 8545.</td>
168+| `:roller\|local` | Configures `%roller` to listen to a local Ethereum node at port 8545. | None. |
186− <td>None.</td>
187− </tr>
188− <tr>
189− <td><code>:roller|quota</code></td>
190− <td>Modified the number of txs a ship is allowed to send per unit time.</td>
169+| `:roller\|quota` | Modified the number of txs a ship is allowed to send per unit time. | `@ud` |
191− <td><code>@ud</code></td>
192− </tr>
193− <tr>
194− <td><code>:roller|ropsten</code></td>
195− <td>Configure %roller to listen to a preset Ropsten Infura node.</td>
170+| `:roller\|ropsten` | Configure `%roller` to listen to a preset Ropsten Infura node. | None. |
196− <td>None.</td>
197− </tr>
198− <tr>
199− <td><code>:roller|setkey</code></td>
200− <td>Load a private key into the roller and retrieves its L1 nonce.</td>
171+| `:roller\|setkey` | Load a private key into the roller and retrieves its L1 nonce. | `@t` |
201− <td><code>@t</code></td>
202− </tr>
203− <tr>
204− <td><code>:roller|slice</code></td>
205− <td>Modified the unit of time for each ship's quota.</td>
172+| `:roller\|slice` | Modified the unit of time for each ship's quota. | `@dr` |
206− <td><code>@dr</code></td>
207− </tr>
208−</tbody>
209−</table>
210−
211−
212−
content/docs/development/develop.md+3−3
@@ -25,7 +25,7 @@ Below 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
25point you towards a number of additional helpful resources that can be found
26throughout the docs.
26throughout the docs.
27
27
28−### Build Clients {#clients}
28+### Build Clients {% #clients %}
29
29
30Urbit ships with [Landscape](/docs/glossary/landscape), which can be thought
30Urbit ships with [Landscape](/docs/glossary/landscape), which can be thought
31of as its flagship client. Landscape can be broken into two different technical
31of as its flagship client. Landscape can be broken into two different technical
@@ -55,7 +55,7 @@ Alternatively, command-line interface (CLI) applications can be built using a
55library called `shoe`, which you can learn more about
55library called `shoe`, which you can learn more about
56[here](/docs/hoon/guides/cli-tutorial). This does require Hoon knowledge.
56[here](/docs/hoon/guides/cli-tutorial). This does require Hoon knowledge.
57
57
58−### Develop Agents {#agents}
58+### Develop Agents {% #agents %}
59
59
60Gall agents can be best thought of as individual services with a
60Gall agents can be best thought of as individual services with a
61statically-typed interface and built-in database. They're written in
61statically-typed interface and built-in database. They're written in
@@ -70,7 +70,7 @@ If you want to learn how to build gall agents, your best bet is to first [learn
70the Hoon programming language](/docs/hoon/hoon-school/), and then follow that
70the Hoon programming language](/docs/hoon/hoon-school/), and then follow that
71up with the [Gall guide](/docs/userspace/gall-guide/intro).
71up with the [Gall guide](/docs/userspace/gall-guide/intro).
72
72
73−### Contribute to Urbit Core {#core}
73+### Contribute to Urbit Core {% #core %}
74
74
75Working on the core means improving the Urbit project itself, working with the
75Working on the core means improving the Urbit project itself, working with the
76existing community of Urbit developers. The kernel is much more stable, but
76existing community of Urbit developers. The kernel is much more stable, but
content/docs/development/grants.md+4−4
@@ -16,7 +16,7 @@ If you're curious about grants, join the conversation in Landscape at
16`~wolref-podlex/foundation` or book some time to [talk with
16`~wolref-podlex/foundation` or book some time to [talk with
17us](https://calendly.com/wolref/30min).
17us](https://calendly.com/wolref/30min).
18
18
19−### Bounties {#bounties}
19+### Bounties {% #bounties %}
20
20
21[Bounties](https://grants.urbit.org/bounties) are specific, tightly-scoped
21[Bounties](https://grants.urbit.org/bounties) are specific, tightly-scoped
22pieces of work that we at the Urbit Foundation think are of high value to the
22pieces of work that we at the Urbit Foundation think are of high value to the
@@ -26,7 +26,7 @@ relate to marketing, community-building or technical writing.
26Bounties are usually competitive&mdash;worker requests should provide plenty of
26Bounties are usually competitive&mdash;worker requests should provide plenty of
27information about why the requester is right candidate for the job.
27information about why the requester is right candidate for the job.
28
28
29−### Proposals {#proposals}
29+### Proposals {% #proposals %}
30
30
31Where Bounties are put forward by the Foundation,
31Where Bounties are put forward by the Foundation,
32[Proposals](https://grants.urbit.org/proposals) come from the community. These
32[Proposals](https://grants.urbit.org/proposals) come from the community. These
@@ -54,7 +54,7 @@ obvious that a lot of thought has gone into the idea.
54If you've got an idea and want some help turning it into a proposal, book some
54If you've got an idea and want some help turning it into a proposal, book some
55time with us [here](https://calendly.com/wolref/30min).
55time with us [here](https://calendly.com/wolref/30min).
56
56
57−### Scholarships {#scholarships}
57+### Scholarships {% #scholarships %}
58
58
59Scholarships are the newest addition to the grants program that pairs
59Scholarships are the newest addition to the grants program that pairs
60contributors with core Urbit developers to tackle infrastructure projects. These
60contributors with core Urbit developers to tackle infrastructure projects. These
@@ -71,7 +71,7 @@ New scholarships are posted within the Foundation group in Landscape
71(`~wolref-podlex/foundation`), and you can sign up for the waitlist using [this
71(`~wolref-podlex/foundation`), and you can sign up for the waitlist using [this
72form](https://airtable.com/shr6Xmo55h8dZ0O46).
72form](https://airtable.com/shr6Xmo55h8dZ0O46).
73
73
74−### Gifts {#gifts}
74+### Gifts {% #gifts %}
75
75
76Not every contribution is made with a plan or according to a specification.
76Not every contribution is made with a plan or according to a specification.
77Sometimes people just fix issues, help newcomers, or promote the project because
77Sometimes people just fix issues, help newcomers, or promote the project because
content/docs/development/precepts.md+186−196
@@ -4,333 +4,323 @@ weight = 40
4template = "doc.html"
4template = "doc.html"
5+++
5+++
6
6
7−<br>
7+![](https://media.urbit.org/site/posts/essays/pre-01.jpg)
8
8
9−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-01.jpg">
10−
11−Urbit is a principled approach to system design and programming, but it's often not obvious what those principles are. We have many specific terms for the different parts of the project: Arvo is the OS, Hoon is the language, Tlon is the company, Azimuth is the identity system, Ames is the network. But the word most associated with the project is "Urbit", and it's not clear what technically it refers to. It's only a small stretch to say that "Urbit" *is* this set of principles, and that if anybody follows these principles strictly they will create a system that is isomorphic to the Urbit.
9+Urbit is a principled approach to system design and programming, but it's often not obvious what those principles are. We have many specific terms for the different parts of the project: Arvo is the OS, Hoon is the language, Tlon is the company, Azimuth is the identity system, Ames is the network. But the word most associated with the project is "Urbit", and it's not clear what technically it refers to. It's only a small stretch to say that "Urbit" _is_ this set of principles, and that if anybody follows these principles strictly they will create a system that is isomorphic to the Urbit.
12
10
13Some of these are commonly held among many software projects, and some are not. Some are only debatably better than the alternatives, but Urbit exclusively chooses them.
11Some of these are commonly held among many software projects, and some are not. Some are only debatably better than the alternatives, but Urbit exclusively chooses them.
14
12
15We’ll start with a brief description of many principles, then we’ll go into a long-form justification.
13We’ll start with a brief description of many principles, then we’ll go into a long-form justification.
16
14
17−
18−
19### A: General Design
15### A: General Design
20
16
21−1) Data is better than code.
17+1. Data is better than code.
22
18
23− Store data in your state, send data over the wire, dispatch based
19+ Store data in your state, send data over the wire, dispatch based
24− on data.
20+ on data.
25
21
26−2) Everything should be CQRS.
22+2. Everything should be CQRS.
27
23
28−3) (Almost) Everything should be pubsub.
24+3. (Almost) Everything should be pubsub.
29
25
30−4) A subscriber shouldn't affect a publisher.
26+4. A subscriber shouldn't affect a publisher.
31
27
32−5) Communication between nodes should be communication between
28+5. Communication between nodes should be communication between
33 independent actors.
29 independent actors.
34
30
35− Each message should do one complete thing, and there shouldn't
31+ Each message should do one complete thing, and there shouldn't
36− need to be a sequence of coupled messages.
32+ need to be a sequence of coupled messages.
37
33
38−6) Represent your data as closely as possible to the essential structure
34+6. Represent your data as closely as possible to the essential structure
39 of the problem.
35 of the problem.
40
36
41−7) A client's representation of data should be as close as possible to
37+7. A client's representation of data should be as close as possible to
42 that of the server.
38 that of the server.
43
39
44− This blurs the distinction between client and server. It allows
40+ This blurs the distinction between client and server. It allows
45− offline-mode, reduces communication to syncing, and decentralizes.
41+ offline-mode, reduces communication to syncing, and decentralizes.
46
42
47−8) When mating different paradigms, build one cleanly on top of the
43+8. When mating different paradigms, build one cleanly on top of the
48 other.
44 other.
49
45
50− Never try to make them work on some of the same primitives. Never
46+ Never try to make them work on some of the same primitives. Never
51− abuse one to make the other work. For example, ducts in
47+ abuse one to make the other work. For example, ducts in
52− themselves are very general - if you want to do pubsub, that can
48+ themselves are very general - if you want to do pubsub, that can
53− easily be built on top of ducts, but don't pretend that pubsub is
49+ easily be built on top of ducts, but don't pretend that pubsub is
54− a *part* of the duct system.
50+ a _part_ of the duct system.
55
51
56−9) Never misuse an abstraction.
52+9. Never misuse an abstraction.
57
53
58− An abstraction provides a certain set of tools; use them and only
54+ An abstraction provides a certain set of tools; use them and only
59− them.
55+ them.
60
56
61−10) Correctness is more important than performance.
57+10. Correctness is more important than performance.
62
58
63−11) Be simple and uncompromising in defining what's correct; go crazy
59+11. Be simple and uncompromising in defining what's correct; go crazy
64 with optimizations.
60 with optimizations.
65
61
66− Nock is a great example of this. It contains the character of the
62+ Nock is a great example of this. It contains the character of the
67− virtual machine, but its asymptotics are bad. Add jets to fix the
63+ virtual machine, but its asymptotics are bad. Add jets to fix the
68− asymptotics.
64+ asymptotics.
69−
65+
70− Another example is the ACID nature of Arvo. Arvo is a pure
66+ Another example is the ACID nature of Arvo. Arvo is a pure
71− function f(logs) of its event log, so formally Arvo is just a
67+ function f(logs) of its event log, so formally Arvo is just a
72− function run against an event log. A naive implementation has
68+ function run against an event log. A naive implementation has
73− very bad asymptotics; processing each new event is O(n) in the
69+ very bad asymptotics; processing each new event is O(n) in the
74− number of historical events. Choose the function g(state,log)
70+ number of historical events. Choose the function g(state,log)
75− such that f(logs ++ log) = g(f(logs),log). Then, as long as you
71+ such that f(logs ++ log) = g(f(logs),log). Then, as long as you
76− keep the state in memory, processing each new event is constant in
72+ keep the state in memory, processing each new event is constant in
77− the number of previous events. This still requires O(n) restart
73+ the number of previous events. This still requires O(n) restart
78− from disk, but you can also periodically (and non-blockingly)
74+ from disk, but you can also periodically (and non-blockingly)
79− write a checkpoint of the state to disk, so that restart from disk
75+ write a checkpoint of the state to disk, so that restart from disk
80− is only linear in the number of events since the last checkpoint.
76+ is only linear in the number of events since the last checkpoint.
81−
77+
82−12) Correctness is more important than optimality.
78+12. Correctness is more important than optimality.
83−
79+
84−13) If you don't completely understand your code and the semantics of
80+13. If you don't completely understand your code and the semantics of
85 all the code it depends on, your code is wrong.
81 all the code it depends on, your code is wrong.
86
82
87−14) Deterministic beats heuristic.
83+14. Deterministic beats heuristic.
88
84
89− Heuristics are evil and should only be used where determinism is
85+ Heuristics are evil and should only be used where determinism is
90− infeasible, such as in cache reclamation.
86+ infeasible, such as in cache reclamation.
91
87
92−15) Stateless is better than stateful.
88+15. Stateless is better than stateful.
93
89
94−16) Explicit state is better than implicit state.
90+16. Explicit state is better than implicit state.
95
91
96−17) Referential transparency is honesty and stability.
92+17. Referential transparency is honesty and stability.
97
93
98− Lack of referential transparency and other forms of
94+ Lack of referential transparency and other forms of
99− disingenuousness are some of the world's big problems. Only
95+ disingenuousness are some of the world's big problems. Only
100− deviate from referential transparency if absolutely necessary.
96+ deviate from referential transparency if absolutely necessary.
101
97
102−18) Responsibilities should be clearly separated.
98+18. Responsibilities should be clearly separated.
103
99
104− This applies from kernel modules through network citizens.
100+ This applies from kernel modules through network citizens.
105
101
106−19) Dualities must be faced head-on and analyzed differently at
102+19. Dualities must be faced head-on and analyzed differently at
107 different layers.
103 different layers.
108
104
109− Statically typed vs. dynamically typed, imperative vs. functional,
105+ Statically typed vs. dynamically typed, imperative vs. functional,
110− code vs. data, and effectful vs. pure can all be a matter of
106+ code vs. data, and effectful vs. pure can all be a matter of
111− perspective, and all relevant perspectives must have coherent
107+ perspective, and all relevant perspectives must have coherent
112− answers.
108+ answers.
113
109
114−20) One hundred lines of simplicity is better than twenty lines of
110+20. One hundred lines of simplicity is better than twenty lines of
115 complexity.
111 complexity.
116
112
117− It's not enough for an abstraction to reduce code duplication; it
113+ It's not enough for an abstraction to reduce code duplication; it
118− must actually make the code simpler.
114+ must actually make the code simpler.
119
115
120−21) Prefer mechanical simplicity to mathematical simplicity.
116+21. Prefer mechanical simplicity to mathematical simplicity.
121
117
122− Often mechanical simplicity and mathematical simplicity go
118+ Often mechanical simplicity and mathematical simplicity go
123− together.
119+ together.
124
120
125−22) The Law of Leaky Abstractions is a lie; abstract airtightly.
121+22. The Law of Leaky Abstractions is a lie; abstract airtightly.
126
122
127− If your abstractions are leaking, it's not due to some law of the
123+ If your abstractions are leaking, it's not due to some law of the
128− universe; you just suck at abstracting. Usually, you didn't
124+ universe; you just suck at abstracting. Usually, you didn't
129− specify the abstraction narrowly enough.
125+ specify the abstraction narrowly enough.
130
126
131−23) Some cliches are repeated because they are true; others must be
127+23. Some cliches are repeated because they are true; others must be
132 repeated because they are not.
128 repeated because they are not.
133
129
134−<br>
130+![](https://media.urbit.org/site/posts/essays/pre-03.jpg)
135
131
136−<img class="ba" src="https://media.urbit.org/site/posts/essays/pre-03.jpg">
132+### B: Specific Design {% #specific %}
137
133
138−### B: Specific Design {#specific}
134+1. Always ack a dupe; never ack an ack.
139
135
140−1) Always ack a dupe; never ack an ack.
136+ It's okay to ack a nack as long as you never nack a nack.
141
137
142− It's okay to ack a nack as long as you never nack a nack.
138+2. Never construct or deconstruct a duct.
143
139
144−2) Never construct or deconstruct a duct.
140+3. Route on wire before sign, never sign before wire.
145
141
146−3) Route on wire before sign, never sign before wire.
142+4. Only go from statically typed to dynamically typed if you must.
147
143
148−4) Only go from statically typed to dynamically typed if you must.
144+ Once you go into a dynamically typed world, it's hard to go back.
145+ Statically typed is better than dynamically typed, so if something
146+ can be made static, it should be.
149
147
150− Once you go into a dynamically typed world, it's hard to go back.
151− Statically typed is better than dynamically typed, so if something
152− can be made static, it should be.
153−
154− Each timeless data structure is a brick in the foundation of
148+ Each timeless data structure is a brick in the foundation of
155− digital civilization.
149+ digital civilization.
156
150
157−5) Anything with business logic speaks one paradigm; anything that
151+5. Anything with business logic speaks one paradigm; anything that
158 translates paradigms has no business logic.
152 translates paradigms has no business logic.
159
153
160−6) Functionally enforced semantic rules are better security primitives
154+6. Functionally enforced semantic rules are better security primitives
161 than memory access restrictions.
155 than memory access restrictions.
162
156
163− A compiler can use type safety as an effective tool to enforce
157+ A compiler can use type safety as an effective tool to enforce
164− some classes of security guarantees.
158+ some classes of security guarantees.
165−
166
159
167### C: Attitude
160### C: Attitude
168
161
169−1) Code courageously.
162+1. Code courageously.
170
163
171− If you avoid changing a section of code for fear of awakening the
164+ If you avoid changing a section of code for fear of awakening the
172− demons therein, you are living in fear. If you stay in the
165+ demons therein, you are living in fear. If you stay in the
173− comfortable confines of the small section of the code you wrote or
166+ comfortable confines of the small section of the code you wrote or
174− know well, you will never write legendary code. All code was
167+ know well, you will never write legendary code. All code was
175− written by humans and can be mastered by humans.
168+ written by humans and can be mastered by humans.
176
169
177− It's natural to feel fear of code; however, you must act as though
170+ It's natural to feel fear of code; however, you must act as though
178− you are able to master and change any part of it. To code
171+ you are able to master and change any part of it. To code
179− courageously is to walk into any abyss, bring light, and make it
172+ courageously is to walk into any abyss, bring light, and make it
180− right.
173+ right.
181
174
182−2) No time for lazy people.
175+2. No time for lazy people.
183
176
184− If there's clearly a right way to do something and a wrong way, do
177+ If there's clearly a right way to do something and a wrong way, do
185− it the right way. Coding requires incredible discipline. Always
178+ it the right way. Coding requires incredible discipline. Always
186− follow conventions, and fire anyone who won't. Anything that can
179+ follow conventions, and fire anyone who won't. Anything that can
187− be solved by discipline is not a real problem.
180+ be solved by discipline is not a real problem.
188
181
189− > "To him who knows to do good and does not do it, to him it is
182+ > "To him who knows to do good and does not do it, to him it is
190− sin."
183+ > sin."
191
184
192−3) When a smart person makes an obviously stupid suggestion, before
185+3. When a smart person makes an obviously stupid suggestion, before
193 responding take a full 60 seconds to envision how you would implement
186 responding take a full 60 seconds to envision how you would implement
194 it and what the effects would be.
187 it and what the effects would be.
195
188
196−
197### D: Theory
189### D: Theory
198
190
199−1) Academia is a succubus.
191+1. Academia is a succubus.
200−
201− Academia has a really high ratio of smart people to useful
202− products. Academia has many genuinely smart and interesting
203− ideas, but always remember that pursuing them whole-heartedly will
204− never result in a useful product.
205
192
206−2) Never fear math.
193+ Academia has a really high ratio of smart people to useful
194+ products. Academia has many genuinely smart and interesting
195+ ideas, but always remember that pursuing them whole-heartedly will
196+ never result in a useful product.
207
197
208− Academia is inefficient, but it's also correct. Those people
198+2. Never fear math.
209− wasted a lot of time finding the right answer, but now that
210− they've done it, you must exploit it. If you don't know the
211− theory, learn it. No excuse for being "bad at math". Most who
212− are "bad at math" are simply lazy or fearful. Be strong and of
213− good courage. If you're truly so bad at math that you cannot
214− learn it, you should not design systems.
215
199
216−3) Not being qualified to solve a problem is no reason not to solve it.
200+ Academia is inefficient, but it's also correct. Those people
201+ wasted a lot of time finding the right answer, but now that
202+ they've done it, you must exploit it. If you don't know the
203+ theory, learn it. No excuse for being "bad at math". Most who
204+ are "bad at math" are simply lazy or fearful. Be strong and of
205+ good courage. If you're truly so bad at math that you cannot
206+ learn it, you should not design systems.
217
207
218− If you don't know how to do it, do it anyway. "We are too young
208+3. Not being qualified to solve a problem is no reason not to solve it.
219− to realize that certain things are impossible. So, we will do
220− them anyway."
221
209
222−4) The best way to get the right answer is to try it the wrong way.
210+ If you don't know how to do it, do it anyway. "We are too young
211+ to realize that certain things are impossible. So, we will do
212+ them anyway."
223
213
224− You cannot design a good system without spending most of your time
214+4. The best way to get the right answer is to try it the wrong way.
225− in contact with the problem. The bad parts about systems are
226− rarely obvious in theory, but often in practice.
227
215
228−5) Practice tells you that things are good or bad; theory tells you why.
216+ You cannot design a good system without spending most of your time
217+ in contact with the problem. The bad parts about systems are
218+ rarely obvious in theory, but often in practice.
229
219
230− Never use theory to design a good system from scratch; only
220+5. Practice tells you that things are good or bad; theory tells you why.
231− practice can tell whether the system is good.
232
221
233−6) Everyone must regularly alternate between theory and practice.
222+ Never use theory to design a good system from scratch; only
223+ practice can tell whether the system is good.
234
224
235− There is an eternal wheel of system design. Given a system, use
225+6. Everyone must regularly alternate between theory and practice.
236− practice to discover what is bad, missing, or unnecessary. Then,
237− use theory to fix the bad, add the missing, and remove the
238− unnecessary. Repeat.
239
226
227+ There is an eternal wheel of system design. Given a system, use
228+ practice to discover what is bad, missing, or unnecessary. Then,
229+ use theory to fix the bad, add the missing, and remove the
230+ unnecessary. Repeat.
240
231
241### E: Text Style
232### E: Text Style
242
233
243−1) No code should extend beyond 80 characters, most within 55.
234+1. No code should extend beyond 80 characters, most within 55.
244
235
245−2) Tabs aren't real.
236+2. Tabs aren't real.
246
237
247−3) A text file is a series of lines, each ending with a newline
238+3. A text file is a series of lines, each ending with a newline
248 character.
239 character.
249
240
250− Corollary: all non-empty text files end with a newline (often
241+ Corollary: all non-empty text files end with a newline (often
251− hidden by editors). An empty text file does not end with a
242+ hidden by editors). An empty text file does not end with a
252− newline.
243+ newline.
253−
254−4) One block comment is better than interleaved comments on every line.
255
244
256−5) Don't name anything you don't have to.
245+4. One block comment is better than interleaved comments on every line.
257
246
258− This includes conventional names for variables of particular
247+5. Don't name anything you don't have to.
259− types. For example, the conventional name for a variable of type
260− `path` is `pax`. You should have a good reason for using any
261− other name for a `path`.
262
248
263− A more recent convention that follows the same principle is to
249+ This includes conventional names for variables of particular
264− give the variable the same name as its type.
250+ types. For example, the conventional name for a variable of type
251+ `path` is `pax`. You should have a good reason for using any
252+ other name for a `path`.
265
253
254+ A more recent convention that follows the same principle is to
266−6) If it's the same thing, give it the same name.
255+ give the variable the same name as its type.
267
256
268−7) Humans are good at memorizing.
257+6. If it's the same thing, give it the same name.
269
258
270−8) Abbreviations aren't worth it.
259+7. Humans are good at memorizing.
271
260
261+8. Abbreviations aren't worth it.
272
262
273### F: Real Software
263### F: Real Software
274
264
275−1) If it's not deterministic, it isn't real.
265+1. If it's not deterministic, it isn't real.
276
266
277−2) If it's centralized, it isn't real.
267+2. If it's centralized, it isn't real.
278
268
279−3) If it's owned by someone else, it isn't yours.
269+3. If it's owned by someone else, it isn't yours.
280
270
281−4) If it's managed by someone else and you can't change who that is, it
271+4. If it's managed by someone else and you can't change who that is, it
282 isn't yours.
272 isn't yours.
283
273
284−5) If it's not yours, it isn't permanent.
274+5. If it's not yours, it isn't permanent.
285
275
286−6) If it's not permanent, it isn't real.
276+6. If it's not permanent, it isn't real.
287
277
288−7) The way it is isn't always the way it ought to be.
278+7. The way it is isn't always the way it ought to be.
289
279
290− If you can make it the way it ought to be, do so.
280+ If you can make it the way it ought to be, do so.
291
281
292−8) The way it ought to be isn't always the way it is.
282+8. The way it ought to be isn't always the way it is.
293
283
294− Some things can't be made more elegant.
284+ Some things can't be made more elegant.
295
285
296− For every ailment under the sun
286+ For every ailment under the sun
297− There is a remedy, or there is none;
287+ There is a remedy, or there is none;
298− If there be one, try to find it;
288+ If there be one, try to find it;
299− If there be none, never mind it.
289+ If there be none, never mind it.
300
290
301−9) Timeless software is good software.
291+9. Timeless software is good software.
302
292
303−10) System modules should be designed to be frozen permanently;
293+10. System modules should be designed to be frozen permanently;
304 conversely, Urbit consists of that system software which admits of a
294 conversely, Urbit consists of that system software which admits of a
305 Kelvin version.
295 Kelvin version.
306
296
307−11) The two procedures for achieving timelessness are distillation and
297+11. The two procedures for achieving timelessness are distillation and
308 generalization.
298 generalization.
309
299
310− Every temporary or contingent feature in a system module should
300+ Every temporary or contingent feature in a system module should
311− eventually either be removed (distillation) or relaxed into
301+ eventually either be removed (distillation) or relaxed into
312− timelessness (generalization). For an example of the result of
302+ timelessness (generalization). For an example of the result of
313− both procedures, consider the abstraction of the core in Nock and
303+ both procedures, consider the abstraction of the core in Nock and
314− Hoon.
304+ Hoon.
315
305
316−12) Standardization is better than perfection.
306+12. Standardization is better than perfection.
317
307
318− Kelvin versioning stops when we run out of versions, not when
308+ Kelvin versioning stops when we run out of versions, not when
319− every defect has been rectified.
309+ every defect has been rectified.
320
310
321−13) That which cannot be Kelvin-versioned should update fluidly and
311+13. That which cannot be Kelvin-versioned should update fluidly and
322 automatically.
312 automatically.
323
313
324− All incompatible upgrades should provide permanent and automatic
314+ All incompatible upgrades should provide permanent and automatic
325− upgrade paths. This is principled permanent backward
315+ upgrade paths. This is principled permanent backward
326− compatibility.
316+ compatibility.
327
317
328−14) Humans are interactive and temporal; technology is permanent and
318+14. Humans are interactive and temporal; technology is permanent and
329 exhaustive.
319 exhaustive.
330
320
331−15) Communities are autonomous.
321+15. Communities are autonomous.
332
322
333−16) Sovereignty necessitates understanding.
323+16. Sovereignty necessitates understanding.
334
324
335− If you don't understand a system you're using, you don't control
325+ If you don't understand a system you're using, you don't control
336− it. If nobody understands the system, the system is in control.
326+ it. If nobody understands the system, the system is in control.
content/docs/glossary/moon.md−1
@@ -18,7 +18,6 @@ Moons may be utilized for many purposes, including but not limited to:
18 - testing software
18 - testing software
19 - bots
19 - bots
20
20
21−
22Looking towards the future, we expect moons to also be utilized as identities
21Looking towards the future, we expect moons to also be utilized as identities
23for devices, such as such as phones, desktops, smart TVs, and digital thermostats
22for devices, such as such as phones, desktops, smart TVs, and digital thermostats
24
23
content/docs/hoon/guides/cli-tutorial.md+4−4
@@ -27,7 +27,7 @@ lesson](/docs/hoon/hoon-school/generators#ask) on `sole` and `%ask`
27generators, which only covers the bare minimum necessary to write generators
27generators, which only covers the bare minimum necessary to write generators
28that take user input.
28that take user input.
29
29
30−## The `shoe` library {#the-shoe-library}
30+## The `shoe` library {% #the-shoe-library %}
31
31
32Here we describe how sessions are identified, the specialized `card`s that Gall agents
32Here we describe how sessions are identified, the specialized `card`s that Gall agents
33with the `shoe` library are able to utilize, and the different cores of `/lib/shoe.hoon` and their purpose.
33with the `shoe` library are able to utilize, and the different cores of `/lib/shoe.hoon` and their purpose.
@@ -146,7 +146,7 @@ This is a function for wrapping a `shoe` core, which has too many
146arms to be a valid Gall agent core. This turns it into a standard Gall agent core by
146arms to be a valid Gall agent core. This turns it into a standard Gall agent core by
147integrating the additional arms into the standard ones.
147integrating the additional arms into the standard ones.
148
148
149−## The `sole` library {#the-sole-library}
149+## The `sole` library {% #the-sole-library %}
150
150
151`shoe` apps may create specialized `card`s of the `[%shoe (list @ta) shoe-effect]` shape, where `shoe-effect` currently just wrap `sole-effect`s, i.e. instructions for displaying text and producing other effects in the console.
151`shoe` apps may create specialized `card`s of the `[%shoe (list @ta) shoe-effect]` shape, where `shoe-effect` currently just wrap `sole-effect`s, i.e. instructions for displaying text and producing other effects in the console.
152
152
@@ -165,7 +165,7 @@ be structured as
165[%mor [%txt "This is some text."] [%bel ~] ~]
165[%mor [%txt "This is some text."] [%bel ~] ~]
166```
166```
167
167
168−## `%shoe` app walkthrough {#shoe-app-walkthrough}
168+## `%shoe` app walkthrough {% #shoe-app-walkthrough %}
169
169
170Here we explore the capabilities of the `%shoe` example app and then go through
170Here we explore the capabilities of the `%shoe` example app and then go through
171the code, explaining what each line does.
171the code, explaining what each line does.
@@ -273,7 +273,7 @@ a type or list of types that contain data needed to execute the command. See
273the shape `[%shoe sole-ids=(list @ta) effect=shoe-effect]`. A `%shoe` `card` is
273the shape `[%shoe sole-ids=(list @ta) effect=shoe-effect]`. A `%shoe` `card` is
274sent to all `sole`s listed in `sole-ids`, imaking them run the `sole-effect`
274sent to all `sole`s listed in `sole-ids`, imaking them run the `sole-effect`
275specified by `effect` (i.e. printing some text). Here we can
275specified by `effect` (i.e. printing some text). Here we can
276−reference `card:shoe` because of `/+ shoe` at the beginning of the app.
276+reference `card:shoe` because of `/+ shoe` at the beginning of the app.
277
277
278```hoon
278```hoon
279=| state-0
279=| state-0
content/docs/hoon/guides/parsing.md+4−4
@@ -11,7 +11,7 @@ how it is implemented in Hoon.
11
11
12**Note:** For JSON printing/parsing and encoding/decoding, see the [JSON Guide](/docs/hoon/guides/json-guide).
12**Note:** For JSON printing/parsing and encoding/decoding, see the [JSON Guide](/docs/hoon/guides/json-guide).
13
13
14−## What is parsing? {#what-is-parsing}
14+## What is parsing? {% #what-is-parsing %}
15
15
16A program which takes a raw sequence of characters as an input and produces a data
16A program which takes a raw sequence of characters as an input and produces a data
17structure as an output is known as a _parser_. The data structure produced
17structure as an output is known as a _parser_. The data structure produced
@@ -352,7 +352,7 @@ surrounded on both sides by text that matches a pair of `rule`s, which is discar
352ASCII glyphs have counterparts of this sort, documented
352ASCII glyphs have counterparts of this sort, documented
353[here](/docs/hoon/reference/stdlib/4h).
353[here](/docs/hoon/reference/stdlib/4h).
354
354
355−### [`+star`](/docs/hoon/reference/stdlib/4f/#star) {#star}
355+### [`+star`](/docs/hoon/reference/stdlib/4f/#star) {% #star %}
356
356
357`+star` is used to apply a `rule` repeatedly. Recall that `+just` only parses
357`+star` is used to apply a `rule` repeatedly. Recall that `+just` only parses
358the first character in the input `tape.`
358the first character in the input `tape.`
@@ -396,7 +396,6 @@ it returns the following letter `b` as the result.
396[p=[p=1 q=2] q=[~ u=[p='b' q=[p=[p=1 q=2] q="bc"]]]]
396[p=[p=1 q=2] q=[~ u=[p='b' q=[p=[p=1 q=2] q="bc"]]]]
397```
397```
398
398
399−
400## Parser combinators
399## Parser combinators
401
400
402Building complex parsers from simpler parsers is accomplished in Hoon with the
401Building complex parsers from simpler parsers is accomplished in Hoon with the
@@ -453,7 +452,7 @@ syntax error
453['a' 'b' 'a']
452['a' 'b' 'a']
454```
453```
455
454
456−### [`;~`](/docs/hoon/reference/rune/mic/#-micsig) {#micsig}
455+### [`;~`](/docs/hoon/reference/rune/mic/#-micsig) {% #micsig %}
457
456
458Understanding the rune `;~` is essential to building parsers with Hoon. Let's
457Understanding the rune `;~` is essential to building parsers with Hoon. Let's
459take this opportunity to think about it carefully.
458take this opportunity to think about it carefully.
@@ -524,6 +523,7 @@ Naively attempting to write a recursive `rule`, i.e. like
524```
523```
525
524
526results in an error:
525results in an error:
526+
527```
527```
528-find.,.+6
528-find.,.+6
529-find.,.+6
529-find.,.+6
content/docs/hoon/guides/sail.md+253−164
@@ -18,40 +18,48 @@ This document will walk through the basics of Sail and its syntax.
18
18
19It’s easy to see how Sail can directly translate to HTML:
19It’s easy to see how Sail can directly translate to HTML:
20
20
21−<table><thead><tr><th>Sail</th><th>HTML</th></tr></thead>
21+{% table %}
22−<tbody><tr><td><pre class="language-hoon">
22+
23+- Sail
24+- HTML
25+
26+---
27+
28+- ```
23−;html
29+ ;html
24− ;head
30+ ;head
25− ;title: My page
31+ ;title: My page
26− ;meta(charset "utf-8");
32+ ;meta(charset "utf-8");
27− ==
33+ ==
28− ;body
34+ ;body
29− ;h1: Welcome!
35+ ;h1: Welcome!
30− ;p
36+ ;p
31− ; Hello, world!
37+ ; Hello, world!
32− ; Welcome to my page.
38+ ; Welcome to my page.
33− ; Here is an image:
39+ ; Here is an image:
34− ;br;
40+ ;br;
35− ;img@"/foo.png";
41+ ;img@"/foo.png";
42+ ==
36 ==
43 ==
37 ==
44 ==
38−==
45+ ```
39−</pre></td><td><pre>
46+- ```
40−&#x26;&#x6C;&#x74;&#x3B;html>
47+ <html>
41− &#x26;&#x6C;&#x74;&#x3B;head>
48+ <head>
42− &#x26;&#x6C;&#x74;&#x3B;title>My page&#x26;&#x6C;&#x74;&#x3B;/title>
49+ <title>My page</title>
43− &#x26;&#x6C;&#x74;&#x3B;meta charset="utf-8" />
50+ <meta charset="utf-8" />
44− &#x26;&#x6C;&#x74;&#x3B;/head>
51+ </head>
45− &#x26;&#x6C;&#x74;&#x3B;body>
52+ <body>
46− &#x26;&#x6C;&#x74;&#x3B;h1>Welcome!&#x26;&#x6C;&#x74;&#x3B;/h1>
53+ <h1>Welcome!</h1>
47− &#x26;&#x6C;&#x74;&#x3B;p>Hello, world! Welcome to my
54+ <p>Hello, world! Welcome to my
48− page. Here is an image:
55+ page. Here is an image:
49− &#x26;&#x6C;&#x74;&#x3B;br />
56+ <br />
50− &#x26;&#x6C;&#x74;&#x3B;img src="/foo.png" />
57+ <img src="/foo.png" />
51− &#x26;&#x6C;&#x74;&#x3B;/p>
58+ </p>
52− &#x26;&#x6C;&#x74;&#x3B;/body>
59+ </body>
53−&#x26;&#x6C;&#x74;&#x3B;/html>
60+ </html>
61+ ```
54−</pre></td></tr></tbody></table>
62+{% /table %}
55
63
56## Tags and Closing
64## Tags and Closing
57
65
@@ -63,17 +71,17 @@ close expressions; Sail inherits this convenience.
63### Empty
71### Empty
64
72
65Empty tags are closed with a `;` following the tag. For example, `;div;` will be
73Empty tags are closed with a `;` following the tag. For example, `;div;` will be
66−rendered as `&lt;div>&lt;/div>`. Non-container tags `;br;` and `;img@"some-url";` in
74+rendered as `<div></div>`. Non-container tags `;br;` and `;img@"some-url";` in
67−particular will be rendered as a single tag like `&lt;br />` and `&lt;img src="some-url" />`.
75+particular will be rendered as a single tag like `<br />` and `<img src="some-url" />`.
68
76
69### Filled
77### Filled
70
78
71Filled tags are closed via line-break. To fill text inside, add `:` after the
79Filled tags are closed via line-break. To fill text inside, add `:` after the
72tag name, then insert your plain text following a space. Example:
80tag name, then insert your plain text following a space. Example:
73
81
74−| Sail | HTML |
82+| Sail | HTML |
75−| ---------------- | -------------------------- |
83+| ---------------- | -------------------- |
76−| `;h1: The title` | `&lt;h1>The title&lt;/h1>` |
84+| `;h1: The title` | `<h1>The title</h1>` |
77
85
78### Nested
86### Nested
79
87
@@ -81,41 +89,57 @@ To nest tags, simply create a new line. Nested tags need to be closed with `==`,
81because they expect a list of sub-tags.
89because they expect a list of sub-tags.
82
90
83If we nest lines of plain text with no tag, the text will be wrapped in a
91If we nest lines of plain text with no tag, the text will be wrapped in a
84−`&lt;p>` tag. Additionally, any text with atom auras or `++arm:syntax` in such
92+`<p>` tag. Additionally, any text with atom auras or `++arm:syntax` in such
85−plain text lines will be wrapped in `&lt;code>` tags.
93+plain text lines will be wrapped in `<code>` tags.
86
94
87Example:
95Example:
88
96
89−<table><thead><tr><th>Sail</th><th>HTML</th></tr></thead><tbody><tr><td>
97+{% table %}
90−<pre class="language-hoon">
98+
99+- Sail
100+- HTML
101+
102+---
103+
104+- ```
91−;body
105+ ;body
92− ;h1: Blog title
106+ ;h1: Blog title
93− This is some good content.
107+ This is some good content.
94−==
108+ ==
95−</pre></td><td><pre>
109+ ```
110+- ```
96−&#x26;&#x6C;&#x74;&#x3B;body>
111+ <body>
97− &#x26;&#x6C;&#x74;&#x3B;h1>Blog title&#x26;&#x6C;&#x74;&#x3B;/h1>
112+ <h1>Blog title</h1>
98− &#x26;&#x6C;&#x74;&#x3B;p>This is some good content.&#x26;&#x6C;&#x74;&#x3B;/p>
113+ <p>This is some good content.</p>
99−&#x26;&#x6C;&#x74;&#x3B;/body>
114+ </body>
115+ ```
100−</pre></td></tr></tbody></table>
116+{% /table %}
101
117
102If we want to write a string with no tag at all, then we can prepend
118If we want to write a string with no tag at all, then we can prepend
103those untagged lines with `;` and then a space:
119those untagged lines with `;` and then a space:
104
120
105−<table><thead><tr><th>Sail</th><th>HTML</th></tr></thead><tbody><tr><td>
121+{% table %}
106−<pre class="language-hoon">
122+
123+- Sail
124+- HTML
125+
126+---
127+
128+- ```
107−;body
129+ ;body
108− ;h1: Welcome!
130+ ;h1: Welcome!
109− ; Hello, world!
131+ ; Hello, world!
110− ; We’re on the web.
132+ ; We’re on the web.
111−==
133+ ==
112−</pre></td><td><pre>
134+ ```
135+- ```
113−&#x26;&#x6C;&#x74;&#x3B;body>
136+ <body>
114− &#x26;&#x6C;&#x74;&#x3B;h1>Welcome!&#x26;&#x6C;&#x74;&#x3B;/h1>
137+ <h1>Welcome!</h1>
115− Hello, world!
138+ Hello, world!
116− We’re on the web.
139+ We’re on the web.
117−&#x26;&#x6C;&#x74;&#x3B;/body>
140+ </body>
141+ ```
118−</pre></td></tr></tbody></table>
142+{% /table %}
119
143
120## Attributes
144## Attributes
121
145
@@ -129,78 +153,103 @@ shown below.
129
153
130### Generic
154### Generic
131
155
132−<table><thead><tr><th>Form</th><th>Example</th></tr></thead><tbody>
156+{% table %}
133−<tr><td>Wide</td><td><pre class="language-hoon">
157+
158+- Form
159+- Example
160+
161+---
162+
163+- Wide
164+- ```
134−;div(title "a tooltip", style "color:red")
165+ ;div(title "a tooltip", style "color:red")
135− ;h1: Foo
166+ ;h1: Foo
136− foo bar baz
167+ foo bar baz
137−==
168+ ==
138−</pre></td></tr>
169+ ```
139−<tr><td>Tall</td><td><pre class="language-hoon">
170+
171+---
172+
173+- Tall
174+- ```
140−;div
175+ ;div
141− =title "a tooltip"
176+ =title "a tooltip"
142− =style "color:red"
177+ =style "color:red"
143− ;h1: Foo
178+ ;h1: Foo
144− foo bar baz
179+ foo bar baz
145−==
180+ ==
146−</pre></td></tr>
181+ ```
182+
183+---
184+
147−<tr><td>HTML</td><td><pre>
185+- HTML
186+- ```
148−&#x26;&#x6C;&#x74;&#x3B;div title="a tooltip" style="color:red">
187+ <div title="a tooltip" style="color:red">
149− &#x26;&#x6C;&#x74;&#x3B;h1>Foo&#x26;&#x6C;&#x74;&#x3B;/h1>
188+ <h1>Foo</h1>
150− &#x26;&#x6C;&#x74;&#x3B;p>foo bar baz &#x26;&#x6C;&#x74;&#x3B;/p>
189+ <p>foo bar baz </p>
151−&#x26;&#x6C;&#x74;&#x3B;/div>
190+ </div>
191+ ```
152−</pre></td></tr></tbody></table>
192+{% /table %}
153
193
154### IDs
194### IDs
155
195
156Add `#` after tag name to add an ID:
196Add `#` after tag name to add an ID:
157
197
158−| Sail | HTML |
198+| Sail | HTML |
159−| ------------------- | ----------------------------------- |
199+| ------------------- | ----------------------------- |
160−| `;nav#header: Menu` | `&lt;nav id="header">Menu&lt;/nav>` |
200+| `;nav#header: Menu` | `<nav id="header">Menu</nav>` |
161
201
162### Classes
202### Classes
163
203
164Add `.` after tag name to add a class:
204Add `.` after tag name to add a class:
165
205
166−| Sail | HTML |
206+| Sail | HTML |
167−| ---------------------- | ---------------------------------------- |
207+| ---------------------- | ---------------------------------- |
168−| `;h1.text-blue: Title` | `&lt;h1 class="text-blue">Title&lt;/h1>` |
208+| `;h1.text-blue: Title` | `<h1 class="text-blue">Title</h1>` |
169
209
170For class values containing spaces, you can add additional `.`s like so:
210For class values containing spaces, you can add additional `.`s like so:
171
211
172−| Sail | HTML |
212+| Sail | HTML |
173−| ------------------- | --------------------------------------- |
213+| ------------------- | --------------------------------- |
174−| `;div.foo.bar.baz;` | `&lt;div class="foo bar baz">&lt;/div>` |
214+| `;div.foo.bar.baz;` | `<div class="foo bar baz"></div>` |
175
215
176Otherwise, if your class value does not conform to the allowed `@tas`
216Otherwise, if your class value does not conform to the allowed `@tas`
177characters, you must use the generic attribute syntax:
217characters, you must use the generic attribute syntax:
178
218
179−| Sail | HTML |
219+| Sail | HTML |
180−| ------------------------ | ----------------------------------- |
220+| ------------------------ | ----------------------------- |
181−| `;div(class "!!! !!!");` | `&lt;div class="!!! !!!">&lt;/div>` |
221+| `;div(class "!!! !!!");` | `<div class="!!! !!!"></div>` |
182
222
183### Images
223### Images
184
224
185Add `@` after the tag name to link your source:
225Add `@` after the tag name to link your source:
186
226
187−| Sail | HTML |
227+| Sail | HTML |
188−| --------------------- | ----------------------------- |
228+| --------------------- | -------------------------- |
189−| `;img@"example.png";` | `&lt;img src="example.png"/>` |
229+| `;img@"example.png";` | `<img src="example.png"/>` |
190
230
191To add attributes to the image, like size specifications, add the desired
231To add attributes to the image, like size specifications, add the desired
192attribute after the `"` of the image name and before the final `;` of the `img`
232attribute after the `"` of the image name and before the final `;` of the `img`
193−tag like ;img@"example.png"(width "100%");`.
233+tag like `;img@"example.png"(width "100%");`.
194
234
195### Links
235### Links
196
236
197Add `/` after tag name to start an `href`.
237Add `/` after tag name to start an `href`.
198
238
199−<table><tr><th>Sail</th></tr><tr><td><pre class="language-hoon">
239+{% table %}
200−;a/"urbit.org": A link to Urbit.org
240+
201−</pre></td></tr><tr><th>HTML</th></tr><tr><td><pre>
241+- Sail
242+- HTML
243+
244+---
245+
246+- ```
247+ ;a/"urbit.org": A link to Urbit.org
248+ ```
249+- ```
202−&#x26;&#x6C;&#x74;&#x3B;a href="urbit.org">A link to Urbit.org&#x26;&#x6C;&#x74;&#x3B;/a>
250+ <a href="urbit.org">A link to Urbit.org</a>
251+ ```
203−</pre></td></tr></table>
252+{% /table %}
204
253
205## Interpolation
254## Interpolation
206
255
@@ -208,29 +257,53 @@ The textual content of tags, despite not being enclosed in double-quotes, are
208actually tapes. This means they support interpolated Hoon expressions in the
257actually tapes. This means they support interpolated Hoon expressions in the
209usual manner. For example:
258usual manner. For example:
210
259
211−<table><thead><tr><th>Sail</th><th>HTML</th></tr></thead><tbody><tr><td>
260+{% table %}
212−<pre class="language-hoon">
261+
262+- Sail
263+- HTML
264+
265+---
266+
267+- ```
213−=| =time
268+ =| =time
214−;p: foo {&#x26;&#x6C;&#x74;&#x3B;time>} bar
269+ ;p: foo {<time>} bar
215−</pre></td><td><pre>
270+ ```
271+- ```
216−&#x26;&#x6C;&#x74;&#x3B;p>foo ~2000.1.1 baz&#x26;&#x6C;&#x74;&#x3B;/p>
272+ <p>foo ~2000.1.1 baz</p>
273+ ```
217−</pre></td></tr></tbody></table>
274+{% /table %}
218
275
219Likewise:
276Likewise:
220
277
221−<table><tr><th>Sail</th></tr><tr><td><pre class="language-hoon">
278+{% table .w-full %}
279+
280+- Sail
281+
282+---
283+
284+- ```
222−=/ txt=tape " bananas"
285+ =/ txt=tape " bananas"
223−;article
286+ ;article
224− ;b: {(a-co:co (mul 42 789))}
287+ ;b: {(a-co:co (mul 42 789))}
225− ; {txt}
288+ ; {txt}
226− {&#x26;&#x6C;&#x74;&#x3B;our>} {&#x26;&#x6C;&#x74;&#x3B;now>} {&#x26;&#x6C;&#x74;&#x3B;`@ux`(end 6 eny)>}
289+ {<our>} {<now>} {<`@ux`(end 6 eny)>}
227−==
290+ ==
228−</pre></td></tr><tr><th>HTML</th></tr><tr><td><pre>
291+ ```
292+{% /table %}
293+
294+{% table .w-full %}
295+
296+- HTML
297+
298+---
299+
300+- ```
229−&#x26;&#x6C;&#x74;&#x3B;article>
301+ <article>
230− &#x26;&#x6C;&#x74;&#x3B;b>33138&#x26;&#x6C;&#x74;&#x3B;/b> bananas
302+ <b>33138</b> bananas
231− &#x26;&#x6C;&#x74;&#x3B;p>~zod ~2022.2.21..09.54.21..5b63 0x9827.99c7.06f4.8ef9&#x26;&#x6C;&#x74;&#x3B;/p>
303+ <p>~zod ~2022.2.21..09.54.21..5b63 0x9827.99c7.06f4.8ef9</p>
232−&#x26;&#x6C;&#x74;&#x3B;/article>
304+ </article>
305+ ```
233−</pre></td></tr></table>
306+{% /table %}
234
307
235## A note on CSS
308## A note on CSS
236
309
@@ -316,7 +389,7 @@ elements, converting characters such as `>` to HTML entities. For example:
316> =z ;p(class "\"><script src=\"example.com/xxx.js"): <h1>FOO</h1>
389> =z ;p(class "\"><script src=\"example.com/xxx.js"): <h1>FOO</h1>
317
390
318> (crip (en-xml:html z))
391> (crip (en-xml:html z))
319−'<p class="&quot;&gt;&lt;script src=&quot;example.com/xxx.js">&lt;h1&gt;FOO&lt;/h1&gt;</p>'
392+'<p class="&quot;&gt;<script src=&quot;example.com/xxx.js"><h1&gt;FOO</h1&gt;</p>'
320```
393```
321
394
322### Marks
395### Marks
@@ -338,7 +411,7 @@ the resulting `tape` through `++crip`.
338- Type: `$manx`
411- Type: `$manx`
339
412
340The `%hymn` mark is intended to be used for complete HTML documents - having an
413The `%hymn` mark is intended to be used for complete HTML documents - having an
341−`&lt;html>` root element, `&lt;head>`, `&lt;body>`, etc. This isn't enforced on
414+`<html>` root element, `<head>`, `<body>`, etc. This isn't enforced on
342the type level but it is assumed in certain mark conversion pathways. Eyre can
415the type level but it is assumed in certain mark conversion pathways. Eyre can
343automatically convert a `%hymn` to printed `%html` if it was requested through
416automatically convert a `%hymn` to printed `%html` if it was requested through
344Eyre's scry interface.
417Eyre's scry interface.
@@ -399,25 +472,33 @@ The [mictar rune](/docs/hoon/reference/rune/mic#-mictar) makes a `$marl` (a list
399of XML nodes) from a complex hoon expression. This rune lets you add many
472of XML nodes) from a complex hoon expression. This rune lets you add many
400elements inside another Sail element. For example:
473elements inside another Sail element. For example:
401
474
402−<table><thead><tr><th>Sail</th><th>HTML</th></tr></thead><tbody><tr><td>
475+{% table %}
403−<pre class="language-hoon">
476+
477+- Sail
478+- HTML
479+
480+---
481+
482+- ```
404−=/ nums=(list @ud) (gulf 1 9)
483+ =/ nums=(list @ud) (gulf 1 9)
405−;p
484+ ;p
406− ;* %+ turn nums
485+ ;* %+ turn nums
407− |= n=@ud
486+ |= n=@ud
408− ?: =(0 (mod n 2))
487+ ?: =(0 (mod n 2))
409− ;sup: {(a-co:co n)}
488+ ;sup: {(a-co:co n)}
410− ;sub: {(a-co:co n)}
489+ ;sub: {(a-co:co n)}
411−==
490+ ==
412−</pre></td><td><pre>
491+ ```
413−&#x26;&#x6C;&#x74;&#x3B;p>
492+- ```
414− &#x26;&#x6C;&#x74;&#x3B;sub>1&#x26;&#x6C;&#x74;&#x3B;/sub>&#x26;&#x6C;&#x74;&#x3B;sup>2&#x26;&#x6C;&#x74;&#x3B;/sup>
493+ <p>
415− &#x26;&#x6C;&#x74;&#x3B;sub>3&#x26;&#x6C;&#x74;&#x3B;/sub>&#x26;&#x6C;&#x74;&#x3B;sup>4&#x26;&#x6C;&#x74;&#x3B;/sup>
494+ <sub>1</sub><sup>2</sup>
416− &#x26;&#x6C;&#x74;&#x3B;sub>5&#x26;&#x6C;&#x74;&#x3B;/sub>&#x26;&#x6C;&#x74;&#x3B;sup>6&#x26;&#x6C;&#x74;&#x3B;/sup>
495+ <sub>3</sub><sup>4</sup>
417− &#x26;&#x6C;&#x74;&#x3B;sub>7&#x26;&#x6C;&#x74;&#x3B;/sub>&#x26;&#x6C;&#x74;&#x3B;sup>8&#x26;&#x6C;&#x74;&#x3B;/sup>
496+ <sub>5</sub><sup>6</sup>
418− &#x26;&#x6C;&#x74;&#x3B;sub>9&#x26;&#x6C;&#x74;&#x3B;/sub>
497+ <sub>7</sub><sup>8</sup>
419−&#x26;&#x6C;&#x74;&#x3B;/p>
498+ <sub>9</sub>
499+ </p>
500+ ```
420−</pre></td></tr></tbody></table>
501+{% /table %}
421
502
422### `;=` Mictis
503### `;=` Mictis
423
504
@@ -426,23 +507,31 @@ of XML nodes) from a series of `$manx`es. This is mostly useful if you want to
426make the list outside of an element and then be able to insert it afterwards.
507make the list outside of an element and then be able to insert it afterwards.
427For example:
508For example:
428
509
429−<table><thead><tr><th>Sail</th><th>HTML</th></tr></thead><tbody><tr><td>
510+{% table %}
430−<pre class="language-hoon">
511+
512+- Sail
513+- HTML
514+
515+---
516+
517+- ```
431−=/ paras=marl
518+ =/ paras=marl
432− ;= ;p: First node.
519+ ;= ;p: First node.
433− ;p: Second node.
520+ ;p: Second node.
434− ;p: Third node.
521+ ;p: Third node.
522+ ==
523+ ;main
524+ ;* paras
435 ==
525 ==
436−;main
526+ ```
437− ;* paras
527+- ```
438−==
439−</pre></td><td><pre>
440−&#x26;&#x6C;&#x74;&#x3B;main>
528+ <main>
441− &#x26;&#x6C;&#x74;&#x3B;p>First node.&#x26;&#x6C;&#x74;&#x3B;/p>
529+ <p>First node.</p>
442− &#x26;&#x6C;&#x74;&#x3B;p>Second node.&#x26;&#x6C;&#x74;&#x3B;/p>
530+ <p>Second node.</p>
443− &#x26;&#x6C;&#x74;&#x3B;p>Third node.&#x26;&#x6C;&#x74;&#x3B;/p>
531+ <p>Third node.</p>
444−&#x26;&#x6C;&#x74;&#x3B;/main>
532+ </main>
533+ ```
445−</pre></td></tr></tbody></table>
534+{% /table %}
446
535
447### `;/` Micfas
536### `;/` Micfas
448
537
content/docs/hoon/guides/strings.md+5−5
@@ -175,11 +175,11 @@ This is something to be wary of. For example, if you wanted to form a `(set @tas
175However, this will actually form a set of the union `?(%foo %bar %baz)` due to
175However, this will actually form a set of the union `?(%foo %bar %baz)` due to
176the specificity of type inference:
176the specificity of type inference:
177
177
178−```
178+{% customFence %}
179−> ? (silt (limo ~[%foo %bar %baz]))
179+\> ? (silt (limo ~[%foo %bar %baz]))
180− ?(%~ [?(n=%bar n=%baz n=%foo) l=nlr(?(%bar %baz %foo)) r=nlr(?(%bar %baz %foo))])
180+?(%~ [?(n=%bar n=%baz n=%foo) l=nlr(?(%bar %baz %foo)) r=nlr(?(%bar %baz %foo))])
181−[n=%baz l={%bar} r={%foo}]
181+[n=%baz l&#x7B;&#x25;bar} r=&#x7B;&#x25;foo}]
182−```
182+{% /customFence %}
183
183
184One further note about the type-as-itself form: Ocassionally you may wish to
184One further note about the type-as-itself form: Ocassionally you may wish to
185form a union of strings which contain characters disallowed in `term`s. To get
185form a union of strings which contain characters disallowed in `term`s. To get
content/docs/hoon/hoon-school/doors.md+44−42
@@ -5,13 +5,13 @@ template = "doc.html"
5aliases = ["/docs/learn/hoon/hoon-tutorial/doors/"]
5aliases = ["/docs/learn/hoon/hoon-tutorial/doors/"]
6+++
6+++
7
7
8−It's useful to have [cores](/docs/glossary/core/) whose [arms](/docs/glossary/arm/) evaluate to make [gates](/docs/glossary/gate/). The use of such cores is common in Hoon; that's how the functions of the Hoon standard library are stored in the subject. Learning about such cores will also deepen the reader's understanding of Hoon semantics, and for that reason alone is worthwhile.
8+It's useful to have [cores](/docs/glossary/core/) whose [arms](/docs/glossary/arm/) evaluate to make [gates](/docs/glossary/gate/). The use of such cores is common in Hoon; that's how the functions of the Hoon standard library are stored in the subject. Learning about such cores will also deepen the reader's understanding of Hoon semantics, and for that reason alone is worthwhile.
9
9
10In this lesson you'll also learn about a new kind of core, called a 'door'.
10In this lesson you'll also learn about a new kind of core, called a 'door'.
11
11
12## Two Kinds of Function Calls
12## Two Kinds of Function Calls
13
13
14−There are two ways of making a function call in Hoon. First, you can call a gate in the subject by name. This is what you did with `inc` in the last lesson; you bound `inc` to a gate that adds `1` to an input:
14+There are two ways of making a function call in Hoon. First, you can call a gate in the subject by name. This is what you did with `inc` in the last lesson; you bound `inc` to a gate that adds `1` to an input:
15
15
16```
16```
17> =inc |=(a=@ (add 1 a))
17> =inc |=(a=@ (add 1 a))
@@ -32,7 +32,7 @@ The second way of making a function call involves an expression that _produces_
32246
32246
33```
33```
34
34
35−The difference is that `inc` is an already-created gate in the subject when we called it. The latter calls involve producing a gate that doesn't exist anywhere in the subject, and then calling it.
35+The difference is that `inc` is an already-created gate in the subject when we called it. The latter calls involve producing a gate that doesn't exist anywhere in the subject, and then calling it.
36
36
37Are calls to `add` and `mul` of the Hoon standard library of the first kind, or the second?
37Are calls to `add` and `mul` of the Hoon standard library of the first kind, or the second?
38
38
@@ -44,15 +44,15 @@ Are calls to `add` and `mul` of the Hoon standard library of the first kind, or
44276
44276
45```
45```
46
46
47−They're of the second kind. Neither `add` nor `mul` resolves to a gate directly; they're each arms that _produce_ gates.
47+They're of the second kind. Neither `add` nor `mul` resolves to a gate directly; they're each arms that _produce_ gates.
48
48
49−Often the difference doesn't matter much. Either way you can do a function call using the `(gate arg)` syntax.
49+Often the difference doesn't matter much. Either way you can do a function call using the `(gate arg)` syntax.
50
50
51It's important to learn the difference, however, because for certain use cases you'll want the extra flexibility that comes with having an already produced core in the subject.
51It's important to learn the difference, however, because for certain use cases you'll want the extra flexibility that comes with having an already produced core in the subject.
52
52
53## A Gate-Building Core
53## A Gate-Building Core
54
54
55−Let's make a core with arms that build gates of various kinds. As we did in a previous lesson, we'll use the `|%` rune. Feel free to cut and paste the following into the dojo:
55+Let's make a core with arms that build gates of various kinds. As we did in a previous lesson, we'll use the `|%` rune. Feel free to cut and paste the following into the dojo:
56
56
57```hoon
57```hoon
58> =c |%
58> =c |%
@@ -79,20 +79,20 @@ Let's try out these arms, using them for function calls:
7930
7930
80```
80```
81
81
82−Notice that each arm in core `c` is able to call the other arms of `c` -- `add-two` uses the `inc` arm to increment a number twice. As a reminder, each arm is evaluated with its parent core as the subject. In the case of `add-two` the parent core is `c`, which has `inc` in it.
82+Notice that each arm in core `c` is able to call the other arms of `c` -- `add-two` uses the `inc` arm to increment a number twice. As a reminder, each arm is evaluated with its parent core as the subject. In the case of `add-two` the parent core is `c`, which has `inc` in it.
83
83
84### Mutating a Gate
84### Mutating a Gate
85
85
86−Let's say you want to modify the default sample of the gate for `double`. We can infer the default sample by calling `double` with no argument:
86+Let's say you want to modify the default sample of the gate for `double`. We can infer the default sample by calling `double` with no argument:
87
87
88```
88```
89> (double:c)
89> (double:c)
900
900
91```
91```
92
92
93−Given that `a x 2 = 0`, `a` must be `0`. (Remember that `a` is the face for the `double` sample, as defined in the core we bound to `c` above.)
93+Given that `a x 2 = 0`, `a` must be `0`. (Remember that `a` is the face for the `double` sample, as defined in the core we bound to `c` above.)
94
94
95−Let's say we want to mutate the `double` gate so that the default sample is `25`. There is only one problem: `double` isn't a gate!
95+Let's say we want to mutate the `double` gate so that the default sample is `25`. There is only one problem: `double` isn't a gate!
96
96
97```
97```
98> double.c(a 25)
98> double.c(a 25)
@@ -100,7 +100,7 @@ Let's say we want to mutate the `double` gate so that the default sample is `25`
100-find.a
100-find.a
101```
101```
102
102
103−It's an arm that produces a gate, and `a` cannot be found in `double` until the gate is created. Furthermore, every time the gate is created, it has the default sample, `0`. If you want to mutate the gate produced by `double`, you'll first have to put a copy of that gate into the subject:
103+It's an arm that produces a gate, and `a` cannot be found in `double` until the gate is created. Furthermore, every time the gate is created, it has the default sample, `0`. If you want to mutate the gate produced by `double`, you'll first have to put a copy of that gate into the subject:
104
104
105```
105```
106> =double-copy double:c
106> =double-copy double:c
@@ -116,14 +116,14 @@ Now let's mutate the sample to `25`, and check that it worked with `+6`:
116a=25
116a=25
117```
117```
118
118
119−Good. Let's call it with no argument and see if it returns double the value of the modified sample.
119+Good. Let's call it with no argument and see if it returns double the value of the modified sample.
120
120
121```
121```
122> (double-copy(a 25))
122> (double-copy(a 25))
12350
12350
124```
124```
125
125
126−It does indeed. Unbind `c` and `double-copy`:
126+It does indeed. Unbind `c` and `double-copy`:
127
127
128```
128```
129> =c
129> =c
@@ -131,7 +131,7 @@ It does indeed. Unbind `c` and `double-copy`:
131> =double-copy
131> =double-copy
132```
132```
133
133
134−Contrast this with the behavior of `add`. We can look at the sample of the gate for `add` with `+6:add`:
134+Contrast this with the behavior of `add`. We can look at the sample of the gate for `add` with `+6:add`:
135
135
136```
136```
137> +6:add
137> +6:add
@@ -157,9 +157,9 @@ Let's look once more at the parent core of the `add` arm in the Hoon standard li
157<74.dbd 1.qct $141>
157<74.dbd 1.qct $141>
158```
158```
159
159
160−The battery of this core contains 74 arms, each of which evaluates to a gate in the standard library. This 'library' is nothing more than a core containing useful basic functions that Hoon often makes available as part of the subject. You can see the Hoon code defining these arms near the beginning of [hoon.hoon](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon), starting with [`++ add`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon#L21). (Yes, the Hoon standard library is written in Hoon.)
160+The battery of this core contains 74 arms, each of which evaluates to a gate in the standard library. This 'library' is nothing more than a core containing useful basic functions that Hoon often makes available as part of the subject. You can see the Hoon code defining these arms near the beginning of [hoon.hoon](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon), starting with [`++ add`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon#L21). (Yes, the Hoon standard library is written in Hoon.)
161
161
162−Here are some of the other gates that can be generated from this core in the Hoon standard library. It should be fairly obvious what they do:
162+Here are some of the other gates that can be generated from this core in the Hoon standard library. It should be fairly obvious what they do:
163
163
164```
164```
165> (dec 18)
165> (dec 18)
@@ -210,9 +210,9 @@ Here are some of the other gates that can be generated from this core in the Hoo
210
210
211## Doors
211## Doors
212
212
213−A brief review: A core is a cell of battery and [payload](/docs/glossary/payload/): `[battery payload]`. The battery is code and the payload is data. The battery contains a series of arms, and the payload contains all the data necessary to run those arms correctly.
213+A brief review: A core is a cell of battery and [payload](/docs/glossary/payload/): `[battery payload]`. The battery is code and the payload is data. The battery contains a series of arms, and the payload contains all the data necessary to run those arms correctly.
214
214
215−New material: A **door** is a core with a sample. That is, a [door](/docs/glossary/door/) is a core whose payload is a cell of sample and context: `[sample context]`.
215+New material: A **door** is a core with a sample. That is, a [door](/docs/glossary/door/) is a core whose payload is a cell of sample and context: `[sample context]`.
216
216
217```
217```
218 Door
218 Door
@@ -222,13 +222,13 @@ Battery .
222 Sample Context
222 Sample Context
223```
223```
224
224
225−It follows from this definition that a gate is a special case of a door. A gate is a door with exactly one arm, named `$`.
225+It follows from this definition that a gate is a special case of a door. A gate is a door with exactly one arm, named `$`.
226
226
227−Gates are useful for defining functions. But there are many-armed doors as well. How are they used? Doors are quite useful data structures. In Chapter 2 of the Hoon tutorial series you'll learn how to use doors to implement state machines, where the sample stores the relevant state data. For now let's talk about how to use doors for simpler purposes.
227+Gates are useful for defining functions. But there are many-armed doors as well. How are they used? Doors are quite useful data structures. In Chapter 2 of the Hoon tutorial series you'll learn how to use doors to implement state machines, where the sample stores the relevant state data. For now let's talk about how to use doors for simpler purposes.
228
228
229−### An Example Door {#example}
229+### An Example Door {% #example %}
230
230
231−Let's write an example door in order to illustrate its features. Each of the arms in the door will define a simple gate. Let's bind the door to `c` as we did with the last core. To make a door we use the `|_` rune:
231+Let's write an example door in order to illustrate its features. Each of the arms in the door will define a simple gate. Let's bind the door to `c` as we did with the last core. To make a door we use the `|_` rune:
232
232
233```
233```
234> =c |_ b=@
234> =c |_ b=@
@@ -238,7 +238,7 @@ Let's write an example door in order to illustrate its features. Each of the ar
238 --
238 --
239```
239```
240
240
241−If you type this into the dojo manually, make sure you attend carefully to the spacing. Feel free to cut and paste the code, if desired.
241+If you type this into the dojo manually, make sure you attend carefully to the spacing. Feel free to cut and paste the code, if desired.
242
242
243Before getting into what these arms do, let's cover how the `|_` rune works in general.
243Before getting into what these arms do, let's cover how the `|_` rune works in general.
244
244
@@ -246,7 +246,7 @@ Before getting into what these arms do, let's cover how the `|_` rune works in g
246
246
247The `|_` rune for making a door works exactly like the `|%` rune for making a core, except it takes one additional subexpression.
247The `|_` rune for making a door works exactly like the `|%` rune for making a core, except it takes one additional subexpression.
248
248
249−The first subexpression after the `|_` rune defines the door's sample. (This is the subexpression the `|%` rune lacks.) Following that are a series of `++` runes, each of which defines an arm of the door. Finally, the expression is terminated with a `--` rune.
249+The first subexpression after the `|_` rune defines the door's sample. (This is the subexpression the `|%` rune lacks.) Following that are a series of `++` runes, each of which defines an arm of the door. Finally, the expression is terminated with a `--` rune.
250
250
251We emphasize that a door really is, at bedrock level, the same thing as a core
251We emphasize that a door really is, at bedrock level, the same thing as a core
252with a sample. Let's ask dojo to pretty print a simple door.
252with a sample. Let's ask dojo to pretty print a simple door.
@@ -289,7 +289,7 @@ Thus we have witnessed that doors really are just cores with samples.
289
289
290#### Back to the Example
290#### Back to the Example
291
291
292−For the door defined [above](#example), `c`, the sample is defined as an [atom](/docs/glossary/atom/), `@`, and given the face `b`. The `plus` arm defines a gate that takes a single [atom](/docs/glossary/atom/) as its argument, `a`, and which returns the sum of `a` and `b`. The `times` arm defines a gate that takes a single [atom](/docs/glossary/atom/), `a`, and returns `a` times `b`. The `greater` arm defines a gate that takes a single [atom](/docs/glossary/atom/), `a`, and if `a` is greater than `b` returns `%.y`; otherwise `%.n`.
292+For the door defined [above](#example), `c`, the sample is defined as an [atom](/docs/glossary/atom/), `@`, and given the face `b`. The `plus` arm defines a gate that takes a single [atom](/docs/glossary/atom/) as its argument, `a`, and which returns the sum of `a` and `b`. The `times` arm defines a gate that takes a single [atom](/docs/glossary/atom/), `a`, and returns `a` times `b`. The `greater` arm defines a gate that takes a single [atom](/docs/glossary/atom/), `a`, and if `a` is greater than `b` returns `%.y`; otherwise `%.n`.
293
293
294Let's try out the arms of `c` with ordinary function calls:
294Let's try out the arms of `c` with ordinary function calls:
295
295
@@ -304,7 +304,7 @@ Let's try out the arms of `c` with ordinary function calls:
304%.y
304%.y
305```
305```
306
306
307−This works, but the results are not exciting. Passing `10` to the `plus` gate returns `10`, so it must be that the value of `b` is `0` (the bunt value of `@`). The products of the other function calls reinforce that assessment. Let's look directly at `+6` of `c`:
307+This works, but the results are not exciting. Passing `10` to the `plus` gate returns `10`, so it must be that the value of `b` is `0` (the bunt value of `@`). The products of the other function calls reinforce that assessment. Let's look directly at `+6` of `c`:
308
308
309```
309```
310> +6:c
310> +6:c
@@ -342,7 +342,7 @@ Doing the same mutation repeatedly can be tedious, so let's bind `c` to the modi
342%.y
342%.y
343```
343```
344
344
345−There's a more direct way of passing arguments for both the door sample and the gate sample simultaneously. We may use the `~(arm door arg)` syntax. This generates the `arm` product after modifying the `door`'s sample to be `arg`.
345+There's a more direct way of passing arguments for both the door sample and the gate sample simultaneously. We may use the `~(arm door arg)` syntax. This generates the `arm` product after modifying the `door`'s sample to be `arg`.
346
346
347```
347```
348> (~(plus c 7) 10)
348> (~(plus c 7) 10)
@@ -358,7 +358,7 @@ There's a more direct way of passing arguments for both the door sample and the
358%.n
358%.n
359```
359```
360
360
361−Readers with some mathematical background may notice that `~( )` expressions allow us to [curry](https://en.wikipedia.org/wiki/Currying). For each of the arms above, the `~( )` expression is used to create different versions of the same gate:
361+Readers with some mathematical background may notice that `~( )` expressions allow us to [curry](https://en.wikipedia.org/wiki/Currying). For each of the arms above, the `~( )` expression is used to create different versions of the same gate:
362
362
363```
363```
364> ~(plus c 7)
364> ~(plus c 7)
@@ -392,7 +392,7 @@ Readers with some mathematical background may notice that `~( )` expressions all
39217
39217
393```
393```
394
394
395−Thus, you may think of the `c` door as a function for making functions. Use the `~(arm c arg)` syntax -- `arm` defines which kind of gate is produced (i.e., which arm of the door is used to create the gate), and `arg` defines the value of `b` in that gate, which in turn affects the product value of the gate produced.
395+Thus, you may think of the `c` door as a function for making functions. Use the `~(arm c arg)` syntax -- `arm` defines which kind of gate is produced (i.e., which arm of the door is used to create the gate), and `arg` defines the value of `b` in that gate, which in turn affects the product value of the gate produced.
396
396
397The standard library provides [currying
397The standard library provides [currying
398functionality](/docs/hoon/reference/stdlib/2n#curry) outside of the context of
398functionality](/docs/hoon/reference/stdlib/2n#curry) outside of the context of
@@ -401,6 +401,7 @@ doors - see `+curr` and `+cury`.
401#### Creating Doors with a Modified Sample
401#### Creating Doors with a Modified Sample
402
402
403In the above example we created a door `c` with sample `b=@` and found that the initial value of `b` was `0`, the bunt value of `@`. We then created new door from `c` by modifying the value of `b`. But what if we wish to define a door with a chosen sample value directly? We make use of the `$_` rune, whose irregular form is simply `_`. To create the door `c` with the sample `b=@` set to have the value `7` in the dojo, we would write
403In the above example we created a door `c` with sample `b=@` and found that the initial value of `b` was `0`, the bunt value of `@`. We then created new door from `c` by modifying the value of `b`. But what if we wish to define a door with a chosen sample value directly? We make use of the `$_` rune, whose irregular form is simply `_`. To create the door `c` with the sample `b=@` set to have the value `7` in the dojo, we would write
404+
404```
405```
405> =c |_ b=_7
406> =c |_ b=_7
406 ++ plus |=(a=@ (add a b))
407 ++ plus |=(a=@ (add a b))
@@ -408,13 +409,14 @@ In the above example we created a door `c` with sample `b=@` and found that the
408 ++ greater |=(a=@ (gth a b))
409 ++ greater |=(a=@ (gth a b))
409 --
410 --
410```
411```
412+
411Here the type of `b` is inferred to be `@` based on the example value `7`, similar to how we've seen casting done by example. You will learn more about how types are inferred in [Lesson 2.2](@docs/hoon/hoon-school/type-checking-and-type-inference).
413Here the type of `b` is inferred to be `@` based on the example value `7`, similar to how we've seen casting done by example. You will learn more about how types are inferred in [Lesson 2.2](@docs/hoon/hoon-school/type-checking-and-type-inference).
412
414
413### Doors in the Hoon Standard Library
415### Doors in the Hoon Standard Library
414
416
415−Back in lesson 1.2 you were introduced to atom auras, which are metadata used by Hoon that defines how that atom is interpreted and pretty-printed. Atoms are unsigned integers, but sometimes programmers want to work with fractions and decimal points. Accordingly, there are auras for [floating point numbers](https://en.wikipedia.org/wiki/Floating-point_arithmetic). Let's work with the aura for doing [single-precision](https://en.wikipedia.org/wiki/Single-precision_floating-point_format) floating point arithmetic: `@rs`.
417+Back in lesson 1.2 you were introduced to atom auras, which are metadata used by Hoon that defines how that atom is interpreted and pretty-printed. Atoms are unsigned integers, but sometimes programmers want to work with fractions and decimal points. Accordingly, there are auras for [floating point numbers](https://en.wikipedia.org/wiki/Floating-point_arithmetic). Let's work with the aura for doing [single-precision](https://en.wikipedia.org/wiki/Single-precision_floating-point_format) floating point arithmetic: `@rs`.
416
418
417−The `@rs` has its own literal syntax. These atoms are represented as a `.` followed by digits, and possibly another `.` (for the decimal point) and more digits. For example, the float 3.14159 can be represented as a single-precision (32 bit) float with the literal expression `.3.14159`.
419+The `@rs` has its own literal syntax. These atoms are represented as a `.` followed by digits, and possibly another `.` (for the decimal point) and more digits. For example, the float 3.14159 can be represented as a single-precision (32 bit) float with the literal expression `.3.14159`.
418
420
419You can't use the ordinary `add` function to get the correct sum of two `@rs` atoms:
421You can't use the ordinary `add` function to get the correct sum of two `@rs` atoms:
420
422
@@ -423,21 +425,21 @@ You can't use the ordinary `add` function to get the correct sum of two `@rs` at
4232.153.203.882
4252.153.203.882
424```
426```
425
427
426−That's because the `add` gate is designed for use with raw atoms, not floating point values. You can add two `@rs` atoms as follows:
428+That's because the `add` gate is designed for use with raw atoms, not floating point values. You can add two `@rs` atoms as follows:
427
429
428```
430```
429> (add:rs .3.14159 .2.22222)
431> (add:rs .3.14159 .2.22222)
430.5.36381
432.5.36381
431```
433```
432
434
433−It turns out that the `rs` in `add:rs` is a Hoon standard library arm that produces a door. Let's take a closer look:
435+It turns out that the `rs` in `add:rs` is a Hoon standard library arm that produces a door. Let's take a closer look:
434
436
435```
437```
436> rs
438> rs
437<21|fan {r/?($n $u $d $z) <51.zox 93.pqh 74.dbd 1.qct $141>}>
439<21|fan {r/?($n $u $d $z) <51.zox 93.pqh 74.dbd 1.qct $141>}>
438```
440```
439
441
440−The battery of this core, pretty-printed as `21|fan`, has 21 arms that define functions specifically for `@rs` atoms. One of these arms is named `add`; it's a different `add` from the standard one we've been using for vanilla atoms. So when you invoke `add:rs` instead of just `add` in a function call, (1) the `rs` door is produced, and then (2) the name search for `add` resolves to the special `add` arm in `rs`. This produces the gate for adding `@rs` atoms:
442+The battery of this core, pretty-printed as `21|fan`, has 21 arms that define functions specifically for `@rs` atoms. One of these arms is named `add`; it's a different `add` from the standard one we've been using for vanilla atoms. So when you invoke `add:rs` instead of just `add` in a function call, (1) the `rs` door is produced, and then (2) the name search for `add` resolves to the special `add` arm in `rs`. This produces the gate for adding `@rs` atoms:
441
443
442```
444```
443> add:rs
445> add:rs
@@ -446,7 +448,7 @@ The battery of this core, pretty-printed as `21|fan`, has 21 arms that define fu
446>
448>
447```
449```
448
450
449−What about the sample of the `rs` door? The pretty-printer shows `r/?($n $u $d $z)`. What does this mean? Without yet explaining this notation fully, we'll simply say that the `rs` sample can take one of four values: `%n`, `%u`, `%d`, and `%z`. These argument values represent four options for how to round `@rs` numbers:
451+What about the sample of the `rs` door? The pretty-printer shows `r/?($n $u $d $z)`. What does this mean? Without yet explaining this notation fully, we'll simply say that the `rs` sample can take one of four values: `%n`, `%u`, `%d`, and `%z`. These argument values represent four options for how to round `@rs` numbers:
450
452
451```
453```
452%n -- round to the nearest value
454%n -- round to the nearest value
@@ -455,7 +457,7 @@ What about the sample of the `rs` door? The pretty-printer shows `r/?($n $u $d
455%z -- round to zero
457%z -- round to zero
456```
458```
457
459
458−The default value is `%z` -- round to zero. When we invoke `add:rs` to call the addition function, there is no way to modify the `rs` door sample, so the default rounding option is used. How do we change it? We use the `~( )` notation: `~(arm door arg)`.
460+The default value is `%z` -- round to zero. When we invoke `add:rs` to call the addition function, there is no way to modify the `rs` door sample, so the default rounding option is used. How do we change it? We use the `~( )` notation: `~(arm door arg)`.
459
461
460Let's evaluate the `add` arm of `rs`, also modifying the door sample to `%u` for 'round up':
462Let's evaluate the `add` arm of `rs`, also modifying the door sample to `%u` for 'round up':
461
463
@@ -466,14 +468,14 @@ Let's evaluate the `add` arm of `rs`, also modifying the door sample to `%u` for
466>
468>
467```
469```
468
470
469−This is the gate produced by `add`, and you can see that its sample is a pair of `@rs` atoms. But if you look in the context you'll see the `rs` door. Let's look in the sample of that core to make sure that it changed to `%u`. We'll use the wing `+6.+7` to look at the sample of the gate's context:
471+This is the gate produced by `add`, and you can see that its sample is a pair of `@rs` atoms. But if you look in the context you'll see the `rs` door. Let's look in the sample of that core to make sure that it changed to `%u`. We'll use the wing `+6.+7` to look at the sample of the gate's context:
470
472
471```
473```
472> +6.+7:~(add rs %u)
474> +6.+7:~(add rs %u)
473r=%u
475r=%u
474```
476```
475
477
476−It did indeed change. We also see that the door sample uses the face `r`, so let's use that instead of the unwieldy `+6.+7`:
478+It did indeed change. We also see that the door sample uses the face `r`, so let's use that instead of the unwieldy `+6.+7`:
477
479
478```
480```
479> r:~(add rs %u)
481> r:~(add rs %u)
@@ -487,7 +489,7 @@ We can do the same thing for rounding down, `%d`:
487%d
489%d
488```
490```
489
491
490−Let's see the rounding differences in action. Because `~(add rs %u)` produces a gate, we can call it like we would any other gate:
492+Let's see the rounding differences in action. Because `~(add rs %u)` produces a gate, we can call it like we would any other gate:
491
493
492```
494```
493> (~(add rs %u) .3.14159265 .1.11111111)
495> (~(add rs %u) .3.14159265 .1.11111111)
@@ -497,13 +499,13 @@ Let's see the rounding differences in action. Because `~(add rs %u)` produces a
497.4.2527037
499.4.2527037
498```
500```
499
501
500−This difference between rounding up and rounding down might seem strange at first. There is a difference of 0.0000003 between the two answers. Why does this gap exist? Single-precision floats are 32-bit and there's only so many distinctions that can be made in floats before you run out of bits.
502+This difference between rounding up and rounding down might seem strange at first. There is a difference of 0.0000003 between the two answers. Why does this gap exist? Single-precision floats are 32-bit and there's only so many distinctions that can be made in floats before you run out of bits.
501
503
502Just as there is a door for `@rs` functions, there is a Hoon standard library door for `@rd` functions (double-precision 64 bit floats), another for `@rq` functions (quad-precision 128 bit floats), and more.
504Just as there is a door for `@rs` functions, there is a Hoon standard library door for `@rd` functions (double-precision 64 bit floats), another for `@rq` functions (quad-precision 128 bit floats), and more.
503
505
504### Mutating the `rs` Door
506### Mutating the `rs` Door
505
507
506−Can we mutate the `rs` door so that its sample is `%u`? Let's try it:
508+Can we mutate the `rs` door so that its sample is `%u`? Let's try it:
507
509
508```
510```
509> rs(r %u)
511> rs(r %u)
@@ -511,6 +513,6 @@ Can we mutate the `rs` door so that its sample is `%u`? Let's try it:
511-find.r
513-find.r
512```
514```
513
515
514−Oops! Why didn't this work? Remember, `rs` isn't itself a door; it's an arm that produces a door. The `rs` in `rs(r %u)` resolves to the nameless parent core of `rs`, and the search for `r` commences there. But that face can't be found in that parent core -- it's not where we want to look.
516+Oops! Why didn't this work? Remember, `rs` isn't itself a door; it's an arm that produces a door. The `rs` in `rs(r %u)` resolves to the nameless parent core of `rs`, and the search for `r` commences there. But that face can't be found in that parent core -- it's not where we want to look.
515
517
516It's better simply to use the `~(arm rs arg)` syntax to replace the value of the `rs` door sample with `arg`.
518It's better simply to use the `~(arm rs arg)` syntax to replace the value of the `rs` door sample with `arg`.
content/docs/hoon/hoon-school/generators.md+1−1
@@ -285,7 +285,7 @@ arguments that aren't in the cells.
28542
28542
286```
286```
287
287
288−### `%ask` generators {#ask}
288+### `%ask` generators {% #ask %}
289
289
290We use the `%ask` generator when we want to create an interactive program
290We use the `%ask` generator when we want to create an interactive program
291that prompts for inputs as it runs, rather than expecting arguments to be passed
291that prompts for inputs as it runs, rather than expecting arguments to be passed
content/docs/hoon/overview.md+4−6
@@ -20,6 +20,7 @@ sense.
20
20
21In particular, the problems Hoon solves that aren't solved by other
21In particular, the problems Hoon solves that aren't solved by other
22functional languages are:
22functional languages are:
23+
23- Compile and run other code in a typesafe manner at full speed,
24- Compile and run other code in a typesafe manner at full speed,
24- Typesafe metaprogramming, and
25- Typesafe metaprogramming, and
25- Hot code reload and online data migration.
26- Hot code reload and online data migration.
@@ -124,7 +125,7 @@ Hoon and Nock have several unusual properties:
124 converted to each other. Lisp dialects are also homoiconic, but Hoon
125 converted to each other. Lisp dialects are also homoiconic, but Hoon
125 and Nock are arguably even more so, since things like closures and the
126 and Nock are arguably even more so, since things like closures and the
126 environment are just Nock trees. We even have a statically typed
127 environment are just Nock trees. We even have a statically typed
127− metacircular interpreter called <code>+mule</code>. We run userspace code
128+ metacircular interpreter called `+mule`. We run userspace code
128 metacircularly with negligible performance overhead because of Urbit's
129 metacircularly with negligible performance overhead because of Urbit's
129 jet system. In Lisp "eval is evil" is a common saying but, in Urbit,
130 jet system. In Lisp "eval is evil" is a common saying but, in Urbit,
130 eval is a first-class feature.
131 eval is a first-class feature.
@@ -144,7 +145,7 @@ Hoon and Nock have several unusual properties:
144 the runtime has a matching jet, it will use that instead of the Nock
145 the runtime has a matching jet, it will use that instead of the Nock
145 implementation. Nock isn't as slow as you might think, especially
146 implementation. Nock isn't as slow as you might think, especially
146 considering it's a minimal, dynamic, axiomatic language.
147 considering it's a minimal, dynamic, axiomatic language.
147−<br/><br/>
148+
148 This arrangement has the deeper implication that all code written in
149 This arrangement has the deeper implication that all code written in
149 Nock is best considered as a specification for a program, which can be
150 Nock is best considered as a specification for a program, which can be
150 executed directly but might never run at all due to being jetted.
151 executed directly but might never run at all due to being jetted.
@@ -198,7 +199,7 @@ Hoon and Nock have several unusual properties:
198 lot of the system manipulates types. In particular, the `!>` rune, when
199 lot of the system manipulates types. In particular, the `!>` rune, when
199 applied to a piece of data, uses compile-time type reflection to
200 applied to a piece of data, uses compile-time type reflection to
200 produce something called a "vase": a pair of type and data, similar to
201 produce something called a "vase": a pair of type and data, similar to
201− a <code>Data.Dynamic</code> in Haskell, or a limited form of a dependent pair.
202+ a `Data.Dynamic` in Haskell, or a limited form of a dependent pair.
202 Since the Arvo kernel does a lot of dynamic compilation, it uses vases
203 Since the Arvo kernel does a lot of dynamic compilation, it uses vases
203 to implement something akin to a dynamically typed language using
204 to implement something akin to a dynamically typed language using
204 Hoon. This allows for type-safe dynamic program loading, program
205 Hoon. This allows for type-safe dynamic program loading, program
@@ -271,6 +272,3 @@ turn, we get an OS that provides far stronger guarantees than Unix with
271a thousand times less code. Given the complexity of modern software,
272a thousand times less code. Given the complexity of modern software,
272this is what's required to put personal computing back into the hands of
273this is what's required to put personal computing back into the hands of
273people.
274people.
274−
275−
276−
content/docs/hoon/reference/rune/bar.md+303−257
@@ -21,30 +21,31 @@ Declares a mold builder wet gate with one or more molds as its sample.
21
21
22Two arguments, fixed.
22Two arguments, fixed.
23
23
24−<table>
24+{% table %}
25+
26+- Form
25−<tr><th>Form</th><th>Syntax</th></tr>
27+- Syntax
26−<tr>
28+
29+---
30+
27−<td>Tall</td>
31+- Tall
28−<td>
32+- ```hoon
29−<pre>
30−|$ sample
33+ |$ sample
31−body
34+ body
32−</pre>
35+ ```
33−</td>
36+
34−</tr>
37+---
35−<tr>
38+
36−<td>Wide</td>
39+- Wide
37−<td>
40+- ```hoon
38−<pre>
39−|$(sample body)
41+ |$(sample body)
40−</pre>
42+ ```
41−</td>
43+
42−</tr>
44+---
43−<tr>
45+
44−<td>Irregular</td>
46+- Irregular
45−<td>None.</td>
47+- None.
46−</tr>
47−</table>
48+{% /table %}
48
49
49#### AST
50#### AST
50
51
@@ -118,24 +119,33 @@ Produce a **door** (a core with a sample).
118
119
119One fixed argument, then a variable number of `+`-family expressions.
120One fixed argument, then a variable number of `+`-family expressions.
120
121
121−<table>
122+{% table %}
123+
124+- Form
122−<tr><th>Form</th><th>Syntax</th></tr>
125+- Syntax
123−<tr>
126+
127+---
128+
124−<td>Tall</td>
129+- Tall
125−<td>
130+- ```hoon
126−<pre>
127−|_ a=spec
131+ |_ a=spec
128−++ b=term c=hoon
132+ ++ b=term c=hoon
129−++ d=term e=hoon
133+ ++ d=term e=hoon
130 ...
134 ...
131−++ f=term g=hoon
135+ ++ f=term g=hoon
132−--
136+ --
133−</pre>
137+ ```
134−</td>
138+
135−</tr>
139+---
136−<tr><td>Wide</td><td>None.</td></tr>
140+
141+- Wide
142+- None.
143+
144+---
145+
137−<tr><td>Irregular</td><td>None.</td></tr>
146+- Irregular
147+- None.
138−</table>
148+{% /table %}
139
149
140Note: The `++` rune may be replaced with any other rune in the `+` family.
150Note: The `++` rune may be replaced with any other rune in the `+` family.
141
151
@@ -232,30 +242,31 @@ Produce a gate with a custom sample.
232
242
233Two arguments, fixed.
243Two arguments, fixed.
234
244
235−<table>
245+{% table %}
246+
247+- Form
236−<tr><th>Form</th><th>Syntax</th></tr>
248+- Syntax
237−<tr>
249+
250+---
251+
238−<td>Tall</td>
252+- Tall
239−<td>
253+- ```hoon
240−<pre>
241−|: a
254+ |: a
242−b
255+ b
243−</pre>
256+ ```
244−</td>
257+
245−</tr>
258+---
246−<tr>
259+
247−<td>Wide</td>
260+- Wide
248−<td>
261+- ```hoon
249−<pre>
250−|:(a b)
262+ |:(a b)
251−</pre>
263+ ```
252−</td>
264+
253−</tr>
265+---
254−<tr>
266+
255−<td>Irregular</td>
267+- Irregular
256−<td>None.</td>
268+- None.
257−</tr>
258−</table>
269+{% /table %}
259
270
260#### AST
271#### AST
261
272
@@ -303,24 +314,33 @@ Produce a core, `[battery payload]`.
303
314
304Argument: a variable number of `+`-family expressions.
315Argument: a variable number of `+`-family expressions.
305
316
306−<table>
317+{% table %}
318+
319+- Form
307−<tr><th>Form</th><th>Syntax</th></tr>
320+- Syntax
308−<tr>
321+
322+---
323+
309−<td>Tall</td>
324+- Tall
310−<td>
325+- ```hoon
311−<pre>
312−|%
326+ |%
313−++ a=term b=hoon
327+ ++ a=term b=hoon
314−++ c=term d=hoon
328+ ++ c=term d=hoon
315 ...
329 ...
316−++ e=term f=hoon
330+ ++ e=term f=hoon
317−--
331+ --
318−</pre>
332+ ```
319−</td>
333+
320−</tr>
334+---
321−<tr><td>Wide</td><td>None.</td></tr>
335+
336+- Wide
337+- None.
338+
339+---
340+
322−<tr><td>Irregular</td><td>None.</td></tr>
341+- Irregular
342+- None.
323−</table>
343+{% /table %}
324
344
325Note: The `++` rune may be replaced with any other rune in the `+` family.
345Note: The `++` rune may be replaced with any other rune in the `+` family.
326
346
@@ -387,29 +407,30 @@ Produce a trap (a core with one arm `$`).
387
407
388One argument, fixed.
408One argument, fixed.
389
409
390−<table>
410+{% table %}
411+
412+- Form
391−<tr><th>Form</th><th>Syntax</th></tr>
413+- Syntax
392−<tr>
414+
415+---
416+
393−<td>Tall</td>
417+- Tall
394−<td>
418+- ```hoon
395−<pre>
396−|. a
419+ |. a
397−</pre>
420+ ```
398−</td>
421+
399−</tr>
422+---
400−<tr>
423+
401−<td>Wide</td>
424+- Wide
402−<td>
425+- ```hoon
403−<pre>
404−|.(a)
426+ |.(a)
405−</pre>
427+ ```
406−</td>
428+
407−</tr>
429+---
408−<tr>
430+
409−<td>Irregular</td>
431+- Irregular
410−<td>None.</td>
432+- None.
411−</tr>
412−</table>
433+{% /table %}
413
434
414#### AST
435#### AST
415
436
@@ -480,25 +501,36 @@ Produce a core whose battery includes a `$` arm and compute the latter.
480
501
481One fixed argument, then a variable number of `+`-family expressions.
502One fixed argument, then a variable number of `+`-family expressions.
482
503
483−<table>
504+{% table %}
505+
506+- Form
484−<tr><th>Form</th><th>Syntax</th></tr>
507+- Syntax
485−<tr>
508+
509+---
510+
486−<td>Tall</td>
511+- Tall
487−<td>
512+- ```hoon
488−<pre>
489−|^ a=hoon
513+ |^ a=hoon
490−++ b=term c=hoon
514+ ++ b=term c=hoon
491−++ d=term e=hoon
515+ ++ d=term e=hoon
492 ...
516 ...
493−++ f=term g=hoon
517+ ++ f=term g=hoon
494−--
518+ --
495−</pre>
519+ ```
496−</td>
520+
497−</tr>
521+---
498−<tr>
522+
499−<td>Wide</td><td>None.</td></tr>
523+- Wide
524+- None.
525+
526+---
527+
500−<tr><td>Irregular</td><td>None.</td></tr>
528+- Irregular
529+- None.
530+
531+---
532+
501−</table>
533+{% /table %}
502
534
503#### AST
535#### AST
504
536
@@ -555,29 +587,30 @@ Produce a trap (a core with one arm `$`) and evaluate it.
555
587
556One argument, fixed.
588One argument, fixed.
557
589
558−<table>
590+{% table %}
591+
592+- Form
559−<tr><th>Form</th><th>Syntax</th></tr>
593+- Syntax
560−<tr>
594+
595+---
596+
561−<td>Tall</td>
597+- Tall
562−<td>
598+- ```hoon
563−<pre>
564−|- a
599+ |- a
565−</pre>
600+ ```
566−</td>
601+
567−</tr>
602+---
568−<tr>
603+
569−<td>Wide</td>
604+- Wide
570−<td>
605+- ```hoon
571−<pre>
572−|-(a)
606+ |-(a)
573−</pre>
607+ ```
574−</td>
608+
575−</tr>
609+---
576−<tr>
610+
577−<td>Irregular</td>
611+- Irregular
578−<td>None.</td>
612+- None.
579−</tr>
580−</table>
613+{% /table %}
581
614
582#### AST
615#### AST
583
616
@@ -637,30 +670,31 @@ Produce an iron gate.
637
670
638Two arguments, fixed.
671Two arguments, fixed.
639
672
640−<table>
673+{% table %}
674+
675+- Form
641−<tr><th>Form</th><th>Syntax</th></tr>
676+- Syntax
642−<tr>
677+
678+---
679+
643−<td>Tall</td>
680+- Tall
644−<td>
681+- ```hoon
645−<pre>
646−|~ a
682+ |~ a
647−b
683+ b
648−</pre>
684+ ```
649−</td>
685+
650−</tr>
686+---
651−<tr>
687+
652−<td>Wide</td>
688+- Wide
653−<td>
689+- ```hoon
654−<pre>
655−|~(a b)
690+ |~(a b)
656−</pre>
691+ ```
657−</td>
692+
658−</tr>
693+---
659−<tr>
694+
660−<td>Irregular</td>
695+- Irregular
661−<td>None.</td>
696+- None.
662−</tr>
663−</table>
697+{% /table %}
664
698
665#### AST
699#### AST
666
700
@@ -700,29 +734,30 @@ Produce a wet gate (one-armed core with sample).
700
734
701Two arguments, fixed.
735Two arguments, fixed.
702
736
703−<table>
737+{% table %}
738+
739+- Form
704−<tr><th>Form</th><th>Syntax</th></tr>
740+- Syntax
705−<tr>
741+
742+---
743+
706−<td>Tall</td>
744+- Tall
707−<td>
745+- ```hoon
708−<pre>
709−|* a b
746+ |* a b
710−</pre>
747+ ```
711−</td>
748+
712−</tr>
749+---
713−<tr>
750+
714−<td>Wide</td>
751+- Wide
715−<td>
752+- ```hoon
716−<pre>
717−|*(a b)
753+ |*(a b)
718−</pre>
754+ ```
719−</td>
755+
720−</tr>
756+---
721−<tr>
757+
722−<td>Irregular</td>
758+- Irregular
723−<td>None.</td>
759+- None.
724−</tr>
725−</table>
760+{% /table %}
726
761
727#### AST
762#### AST
728
763
@@ -792,30 +827,31 @@ Produce a gate (a one-armed core with a sample).
792
827
793Two arguments, fixed.
828Two arguments, fixed.
794
829
795−<table>
830+{% table %}
831+
832+- Form
796−<tr><th>Form</th><th>Syntax</th></tr>
833+- Syntax
797−<tr>
834+
835+---
836+
798−<td>Tall</td>
837+- Tall
799−<td>
838+- ```hoon
800−<pre>
801−|= a
839+ |= a
802−b
840+ b
803−</pre>
841+ ```
804−</td>
842+
805−</tr>
843+---
806−<tr>
844+
807−<td>Wide</td>
845+- Wide
808−<td>
846+- ```hoon
809−<pre>
810−|=(a b)
847+ |=(a b)
811−</pre>
848+ ```
812−</td>
849+
813−</tr>
850+---
814−<tr>
851+
815−<td>Irregular</td>
852+- Irregular
816−<td>None.</td>
853+- None.
817−</tr>
818−</table>
854+{% /table %}
819
855
820#### AST
856#### AST
821
857
@@ -878,24 +914,33 @@ Produce a 'wet' core `[battery payload]`.
878
914
879Arguments: a variable number of `+`-family expressions.
915Arguments: a variable number of `+`-family expressions.
880
916
881−<table>
917+{% table %}
918+
919+- Form
882−<tr><th>Form</th><th>Syntax</th></tr>
920+- Syntax
883−<tr>
921+
922+---
923+
884−<td>Tall</td>
924+- Tall
885−<td>
925+- ```hoon
886−<pre>
887−|@
926+ |@
888−++ a=term b=hoon
927+ ++ a=term b=hoon
889−++ c=term d=hoon
928+ ++ c=term d=hoon
890 ...
929 ...
891−++ e=term f=hoon
930+ ++ e=term f=hoon
892−--
931+ --
893−</pre>
932+ ```
894−</td>
933+
895−</tr>
934+---
896−<tr><td>Wide</td><td>None.</td></tr>
935+
936+- Wide
937+- None.
938+
939+---
940+
897−<tr><td>Irregular</td><td>None.</td></tr>
941+- Irregular
942+- None.
898−</table>
943+{% /table %}
899
944
900Note: The `++` rune may be replaced with any other rune in the `+` family.
945Note: The `++` rune may be replaced with any other rune in the `+` family.
901
946
@@ -928,29 +973,30 @@ Produce a lead trap.
928
973
929One argument, fixed.
974One argument, fixed.
930
975
931−<table>
976+{% table %}
977+
978+- Form
932−<tr><th>Form</th><th>Syntax</th></tr>
979+- Syntax
933−<tr>
980+
981+---
982+
934−<td>Tall</td>
983+- Tall
935−<td>
984+- ```hoon
936−<pre>
937−|? a
985+ |? a
938−</pre>
986+ ```
939−</td>
987+
940−</tr>
988+---
941−<tr>
989+
942−<td>Wide</td>
990+- Wide
943−<td>
991+- ```hoon
944−<pre>
945−|?(a)
992+ |?(a)
946−</pre>
993+ ```
947−</td>
994+
948−</tr>
995+---
949−<tr>
996+
950−<td>Irregular</td>
997+- Irregular
951−<td>None.</td>
998+- None.
952−</tr>
953−</table>
999+{% /table %}
954
1000
955#### AST
1001#### AST
956
1002
content/docs/hoon/reference/rune/buc.md+348−317
@@ -56,27 +56,31 @@ Structure that satisfies a validator.
56
56
57Two arguments, fixed.
57Two arguments, fixed.
58
58
59−<table>
59+{% table %}
60+
61+- Form
60−<tr><th>Form</th><th>Syntax</th></tr>
62+- Syntax
61−<tr>
63+
64+---
65+
62−<td>Tall</td>
66+- Tall
63−<td>
67+- ```hoon
64−<pre>
65−$| p
68+ $| p
66−q
69+ q
67−</pre>
70+ ```
68−</td>
71+
69−</tr>
72+---
70−<tr>
73+
71−<td>Wide</td>
74+- Wide
72−<td>
75+- ```hoon
73−<pre>
74−$|(p q)
76+ $|(p q)
75−</pre>
77+ ```
76−</td>
78+
77−</tr>
79+---
80+
78−<tr><td>Irregular</td><td>None.</td></tr>
81+- Irregular
82+- None.
79−</table>
83+{% /table %}
80
84
81#### AST
85#### AST
82
86
@@ -160,33 +164,32 @@ Structure that normalizes to an example.
160
164
161One argument, fixed.
165One argument, fixed.
162
166
163−<table>
167+{% table %}
168+
169+- Form
164−<tr><th>Form</th><th>Syntax</th></tr>
170+- Syntax
165−<tr>
171+
172+---
173+
166−<td>Tall</td>
174+- Tall
167−<td>
175+- ```hoon
168−<pre>
169−$_ p
176+ $_ p
170−</pre>
177+ ```
171−</td>
178+
172−</tr>
179+---
173−<tr>
180+
174−<td>Wide</td>
181+- Wide
175−<td>
182+- ```hoon
176−<pre>
177−$_(p)
183+ $_(p)
178−</pre>
184+ ```
179−</td>
185+
180−</tr>
186+---
181−<tr>
187+
182−<td>Irregular</td>
188+- Irregular
183−<td>
189+- ```
184−<pre>
185−_p
190+ _p
186−</pre>
191+ ```
187−</td>
188−</tr>
189−</table>
192+{% /table %}
190
193
191#### AST
194#### AST
192
195
@@ -230,30 +233,34 @@ Structure which recognizes a union tagged by head atom.
230
233
231A variable number of arguments.
234A variable number of arguments.
232
235
233−<table>
236+{% table %}
237+
238+- Form
234−<tr><th>Form</th><th>Syntax</th></tr>
239+- Syntax
235−<tr>
240+
241+---
242+
236−<td>Tall</td>
243+- Tall
237−<td>
244+- ```hoon
238−<pre>
239−$% [%p1 ...]
245+ $% [%p1 ...]
240− [%p2 ...]
246+ [%p2 ...]
241− [%p3 ...]
247+ [%p3 ...]
242− [%pn ...]
248+ [%pn ...]
243−==
249+ ==
244−</pre>
250+ ```
245−</td>
251+
246−</tr>
252+---
247−<tr>
253+
248−<td>Wide</td>
254+- Wide
249−<td>
255+- ```hoon
250−<pre>
251−$%([%p1 ...] [%p2 ...] [%p3 ...] [%pn ...])
256+ $%([%p1 ...] [%p2 ...] [%p3 ...] [%pn ...])
252−</pre>
257+ ```
253−</td>
258+
254−</tr>
259+---
260+
255−<tr><td>Irregular</td><td>None.</td></tr>
261+- Irregular
262+- None.
256−</table>
263+{% /table %}
257
264
258Each item may be an atom or (more commonly) a cell. The atom or head of the cell
265Each item may be an atom or (more commonly) a cell. The atom or head of the cell
259_must_ be a constant (`%foo`, `%1`, `%.y`, etc).
266_must_ be a constant (`%foo`, `%1`, `%.y`, etc).
@@ -301,45 +308,43 @@ Form a cell type.
301
308
302A variable number of arguments.
309A variable number of arguments.
303
310
304−<table>
311+{% table %}
312+
313+- Form
305−<tr><th>Form</th><th>Syntax</th></tr>
314+- Syntax
306−<tr>
315+
316+---
317+
307−<td>Tall</td>
318+- Tall
308−<td>
319+- ```hoon
309−<pre>
310−$: p1
320+ $: p1
311− p2
321+ p2
312− p3
322+ p3
313− pn
323+ pn
314−==
324+ ==
315−</pre>
325+ ```
316−</td>
326+
317−</tr>
327+---
318−<tr>
328+
319−<td>Wide</td>
329+- Wide
320−<td>
330+- ```hoon
321−<pre>
322−$:(p1 p2 p3 pn)
331+ $:(p1 p2 p3 pn)
323−</pre>
332+ ```
324−</td>
333+
325−</tr>
334+---
326−<tr>
335+
327−<td>Irregular (noun mode)</td>
336+- Irregular (noun mode)
328−<td>
337+- ```hoon
329−<pre>
330−,[p1 p2 p3 pn]
338+ ,[p1 p2 p3 pn]
331−</pre>
339+ ```
332−</td>
340+
333−</tr>
341+---
334−<tr>
342+
335−<td>Irregular (structure mode)</td>
343+- Irregular (structure mode)
336−<td>
344+- ```hoon
337−<pre>
338−[p1 p2 p3 pn]
345+ [p1 p2 p3 pn]
339−</pre>
346+ ```
340−</td>
341−</tr>
342−</table>
347+{% /table %}
343
348
344#### AST
349#### AST
345
350
@@ -381,27 +386,31 @@ structure.
381
386
382Two arguments, fixed.
387Two arguments, fixed.
383
388
384−<table>
389+{% table %}
390+
391+- Form
385−<tr><th>Form</th><th>Syntax</th></tr>
392+- Syntax
386−<tr>
393+
394+---
395+
387−<td>Tall</td>
396+- Tall
388−<td>
397+- ```hoon
389−<pre>
390−$< p
398+ $< p
391−q
399+ q
392−</pre>
400+ ```
393−</td>
401+
394−</tr>
402+---
395−<tr>
403+
396−<td>Wide</td>
404+- Wide
397−<td>
405+- ```hoon
398−<pre>
399−$<(p q)
406+ $<(p q)
400−</pre>
407+ ```
401−</td>
408+
402−</tr>
409+---
410+
403−<tr><td>Irregular</td><td>None.</td></tr>
411+- Irregular
412+- None.
404−</table>
413+{% /table %}
405
414
406#### AST
415#### AST
407
416
@@ -444,27 +453,31 @@ Filters a mold to obtain a new mold matching a particular structure.
444
453
445Two arguments, fixed.
454Two arguments, fixed.
446
455
447−<table>
456+{% table %}
457+
458+- Form
448−<tr><th>Form</th><th>Syntax</th></tr>
459+- Syntax
449−<tr>
460+
461+---
462+
450−<td>Tall</td>
463+- Tall
451−<td>
464+- ```hoon
452−<pre>
453−$> p
465+ $> p
454−q
466+ q
455−</pre>
467+ ```
456−</td>
468+
457−</tr>
469+---
458−<tr>
470+
459−<td>Wide</td>
471+- Wide
460−<td>
472+- ```hoon
461−<pre>
462−$>(p q)
473+ $>(p q)
463−</pre>
474+ ```
464−</td>
475+
465−</tr>
476+---
477+
466−<tr><td>Irregular</td><td>None.</td></tr>
478+- Irregular
479+- None.
467−</table>
480+{% /table %}
468
481
469#### AST
482#### AST
470
483
@@ -532,27 +545,31 @@ $_ ^|
532
545
533Two arguments, fixed.
546Two arguments, fixed.
534
547
535−<table>
548+{% table %}
549+
550+- Form
536−<tr><th>Form</th><th>Syntax</th></tr>
551+- Syntax
537−<tr>
552+
553+---
554+
538−<td>Tall</td>
555+- Tall
539−<td>
556+- ```hoon
540−<pre>
541−$- p
557+ $- p
542−q
558+ q
543−</pre>
559+ ```
544−</td>
560+
545−</tr>
561+---
546−<tr>
562+
547−<td>Wide</td>
563+- Wide
548−<td>
564+- ```hoon
549−<pre>
550−$-(p q)
565+ $-(p q)
551−</pre>
566+ ```
552−</td>
567+
553−</tr>
568+---
569+
554−<tr><td>Irregular</td><td>None.</td></tr>
570+- Irregular
571+- None.
555−</table>
572+{% /table %}
556
573
557`p` is the type the gate takes and `q` is the type the gate produces.
574`p` is the type the gate takes and `q` is the type the gate produces.
558
575
@@ -579,27 +596,31 @@ Structure which normalizes a union tagged by head depth (cell).
579
596
580Two arguments, fixed.
597Two arguments, fixed.
581
598
582−<table>
599+{% table %}
600+
601+- Form
583−<tr><th>Form</th><th>Syntax</th></tr>
602+- Syntax
584−<tr>
603+
604+---
605+
585−<td>Tall</td>
606+- Tall
586−<td>
607+- ```hoon
587−<pre>
588−$^ p
608+ $^ p
589−q
609+ q
590−</pre>
610+ ```
591−</td>
611+
592−</tr>
612+---
593−<tr>
613+
594−<td>Wide</td>
614+- Wide
595−<td>
615+- ```hoon
596−<pre>
597−$^(p q)
616+ $^(p q)
598−</pre>
617+ ```
599−</td>
618+
600−</tr>
619+---
620+
601−<tr><td>Irregular</td><td>None.</td></tr>
621+- Irregular
622+- None.
602−</table>
623+{% /table %}
603
624
604#### AST
625#### AST
605
626
@@ -643,27 +664,31 @@ Repair a value of a tagged union type.
643
664
644Two arguments, fixed.
665Two arguments, fixed.
645
666
646−<table>
667+{% table %}
668+
669+- Form
647−<tr><th>Form</th><th>Syntax</th></tr>
670+- Syntax
648−<tr>
671+
672+---
673+
649−<td>Tall</td>
674+- Tall
650−<td>
675+- ```hoon
651−<pre>
652−$& p
676+ $& p
653−q
677+ q
654−</pre>
678+ ```
655−</td>
679+
656−</tr>
680+---
657−<tr>
681+
658−<td>Wide</td>
682+- Wide
659−<td>
683+- ```hoon
660−<pre>
661−$&(p q)
684+ $&(p q)
662−</pre>
685+ ```
663−</td>
686+
664−</tr>
687+---
688+
665−<tr><td>Irregular</td><td>None.</td></tr>
689+- Irregular
690+- None.
666−</table>
691+{% /table %}
667
692
668```hoon
693```hoon
669$&(combined-mold=spec normalizing-gate=hoon)
694$&(combined-mold=spec normalizing-gate=hoon)
@@ -715,27 +740,31 @@ Define a custom type default value.
715
740
716Two arguments, fixed.
741Two arguments, fixed.
717
742
718−<table>
743+{% table %}
744+
745+- Form
719−<tr><th>Form</th><th>Syntax</th></tr>
746+- Syntax
720−<tr>
747+
748+---
749+
721−<td>Tall</td>
750+- Tall
722−<td>
751+- ```hoon
723−<pre>
724−$~ p
752+ $~ p
725−q
753+ q
726−</pre>
754+ ```
727−</td>
755+
728−</tr>
756+---
729−<tr>
757+
730−<td>Wide</td>
758+- Wide
731−<td>
759+- ```hoon
732−<pre>
733−$~(p q)
760+ $~(p q)
734−</pre>
761+ ```
735−</td>
762+
736−</tr>
763+---
764+
737−<tr><td>Irregular</td><td>None.</td></tr>
765+- Irregular
766+- None.
738−</table>
767+{% /table %}
739
768
740`p` defines the default value, and `q` defines everything else about the
769`p` defines the default value, and `q` defines everything else about the
741structure.
770structure.
@@ -809,27 +838,31 @@ Structure which normalizes a union tagged by head depth (atom).
809
838
810Two arguments, fixed.
839Two arguments, fixed.
811
840
812−<table>
841+{% table %}
842+
843+- Form
813−<tr><th>Form</th><th>Syntax</th></tr>
844+- Syntax
814−<tr>
845+
846+---
847+
815−<td>Tall</td>
848+- Tall
816−<td>
849+- ```hoon
817−<pre>
818−$@ p
850+ $@ p
819−q
851+ q
820−</pre>
852+ ```
821−</td>
853+
822−</tr>
854+---
823−<tr>
855+
824−<td>Wide</td>
856+- Wide
825−<td>
857+- ```hoon
826−<pre>
827−$@(p q)
858+ $@(p q)
828−</pre>
859+ ```
829−</td>
860+
830−</tr>
861+---
862+
831−<tr><td>Irregular</td><td>None.</td></tr>
863+- Irregular
864+- None.
832−</table>
865+{% /table %}
833
866
834#### AST
867#### AST
835
868
@@ -875,34 +908,33 @@ Structure which wraps a face around another structure.
875
908
876Two arguments, fixed.
909Two arguments, fixed.
877
910
878−<table>
911+{% table %}
912+
913+- Form
879−<tr><th>Form</th><th>Syntax</th></tr>
914+- Syntax
880−<tr>
915+
916+---
917+
881−<td>Tall</td>
918+- Tall
882−<td>
919+- ```hoon
883−<pre>
884−$= p
920+ $= p
885−q
921+ q
886−</pre>
922+ ```
887−</td>
923+
888−</tr>
924+---
889−<tr>
925+
890−<td>Wide</td>
926+- Wide
891−<td>
927+- ```hoon
892−<pre>
893−$=(p q)
928+ $=(p q)
894−</pre>
929+ ```
895−</td>
930+
896−</tr>
931+---
897−<tr>
932+
898−<td>Irregular</td>
933+- Irregular
899−<td>
934+- ```
900−<pre>
901−p=q
935+ p=q
902−</pre>
936+ ```
903−</td>
904−</tr>
905−</table>
937+{% /table %}
906
938
907#### AST
939#### AST
908
940
@@ -945,37 +977,36 @@ Form a type from a union of other types.
945
977
946Variable number of arguments.
978Variable number of arguments.
947
979
948−<table>
980+{% table %}
981+
982+- Form
949−<tr><th>Form</th><th>Syntax</th></tr>
983+- Syntax
950−<tr>
984+
985+---
986+
951−<td>Tall</td>
987+- Tall
952−<td>
988+- ```hoon
953−<pre>
954−$? p1
989+ $? p1
955− p2
990+ p2
956− p3
991+ p3
957− pn
992+ pn
958−==
993+ ==
959−</pre>
994+ ```
960−</td>
995+
961−</tr>
996+---
962−<tr>
997+
963−<td>Wide</td>
998+- Wide
964−<td>
999+- ```hoon
965−<pre>
966−$?(p1 p2 p3 pn)
1000+ $?(p1 p2 p3 pn)
967−</pre>
1001+ ```
968−</td>
1002+
969−</tr>
1003+---
970−<tr>
1004+
971−<td>Irregular</td>
1005+- Irregular
972−<td>
1006+- ```hoon
973−<pre>
974−?(p1 p2 p3 pn)
1007+ ?(p1 p2 p3 pn)
975−</pre>
1008+ ```
976−</td>
977−</tr>
978−</table>
1009+{% /table %}
979
1010
980#### AST
1011#### AST
981
1012
content/docs/hoon/reference/rune/cen.md+303−306
@@ -20,50 +20,50 @@ Resolve a wing with changes, preserving type.
20
20
21One fixed argument, then a variable number of pairs.
21One fixed argument, then a variable number of pairs.
22
22
23−<table>
23+{% table %}
24+
25+- Form
24−<tr><th>Form</th><th>Syntax</th></tr>
26+- Syntax
25−<tr>
27+
28+---
29+
26−<td>Tall style #1</td>
30+- Tall style #1
27−<td>
31+- ```hoon
28−<pre>
29−%_ a=wing
32+ %_ a=wing
30− b=wing c=hoon
33+ b=wing c=hoon
31− d=wing e=hoon
34+ d=wing e=hoon
32− f=wing g=hoon
35+ f=wing g=hoon
33−==
36+ ==
34−</pre>
37+ ```
35−</td>
38+
36−</tr>
39+---
37−<tr>
40+
38−<td>Tall style #2</td>
41+- Tall style #2
39−<td>
42+- ```hoon
40−<pre>
41−%_ a=wing
43+ %_ a=wing
42− b=wing
44+ b=wing
43− c=hoon
45+ c=hoon
44−::
46+ ::
45− d=wing
47+ d=wing
46− e=hoon
48+ e=hoon
47−::
49+ ::
48− f=wing
50+ f=wing
49− g=hoon
51+ g=hoon
50−==
52+ ==
51−</pre>
53+ ```
52−</td>
54+
53−</tr>
55+---
54−<tr>
56+
55−<td>Wide</td>
57+- Wide
56−<td>
58+- ```hoon
57−<pre>
58−%_(a=wing b=wing c=hoon, d=wing e=hoon, ...)
59+ %_(a=wing b=wing c=hoon, d=wing e=hoon, ...)
59−</pre>
60+ ```
60−</td>
61+
61−</tr>
62+---
62−<tr>
63+
63−<td>Irregular</td>
64+- Irregular
64−<td>None.</td>
65+- None.
65−</tr>
66−</table>
66+{% /table %}
67
67
68#### AST
68#### AST
69
69
@@ -119,38 +119,37 @@ Call a gate with many arguments.
119
119
120One fixed argument, then a variable number of arguments.
120One fixed argument, then a variable number of arguments.
121
121
122−<table>
122+{% table %}
123+
124+- Form
123−<tr><th>Form</th><th>Syntax</th></tr>
125+- Syntax
124−<tr>
126+
127+---
128+
125−<td>Tall</td>
129+- Tall
126−<td>
130+- ```hoon
127−<pre>
128−%: a=hoon
131+ %: a=hoon
129− b=hoon
132+ b=hoon
130− c=hoon
133+ c=hoon
131− ...
134+ ...
132− d=hoon
135+ d=hoon
133−==
136+ ==
134−</pre>
137+ ```
135−</td>
138+
136−</tr>
139+---
137−<tr>
140+
138−<td>Wide</td>
141+- Wide
139−<td>
142+- ```hoon
140−<pre>
141−%:(a b c d)
143+ %:(a b c d)
142−</pre>
144+ ```
143−</td>
145+
144−</tr>
146+---
145−<tr>
147+
146−<td>Irregular</td>
148+- Irregular
147−<td>
149+- ```hoon
148−<pre>
149−(a b c d)
150+ (a b c d)
150−</pre>
151+ ```
151−</td>
152−</tr>
153−</table>
152+{% /table %}
154
153
155#### AST
154#### AST
156
155
@@ -206,29 +205,30 @@ Call a gate (function), inverted.
206
205
207Two arguments, fixed.
206Two arguments, fixed.
208
207
209−<table>
208+{% table %}
209+
210+- Form
210−<tr><th>Form</th><th>Syntax</th></tr>
211+- Syntax
211−<tr>
212+
213+---
214+
212−<td>Tall</td>
215+- Tall
213−<td>
216+- ```hoon
214−<pre>
215−%. a b
217+ %. a b
216−</pre>
218+ ```
217−</td>
219+
218−</tr>
220+---
219−<tr>
221+
220−<td>Wide</td>
222+- Wide
221−<td>
223+- ```hoon
222−<pre>
223−%.(a b)
224+ %.(a b)
224−</pre>
225+ ```
225−</td>
226+
226−</tr>
227+---
227−<tr>
228+
228−<td>Irregular</td>
229+- Irregular
229−<td>None.</td>
230+- None.
230−</tr>
231−</table>
231+{% /table %}
232
232
233#### AST
233#### AST
234
234
@@ -263,40 +263,39 @@ first, and then the gate.
263
263
264---
264---
265
265
266−## `%-` "cenhep" {#cenhep}
266+## `%-` "cenhep" {% #cenhep %}
267
267
268Call a gate (function).
268Call a gate (function).
269
269
270#### Syntax
270#### Syntax
271
271
272−<table>
272+{% table %}
273+
274+- Form
273−<tr><th>Form</th><th>Syntax</th></tr>
275+- Syntax
274−<tr>
276+
277+---
278+
275−<td>Tall</td>
279+- Tall
276−<td>
280+- ```hoon
277−<pre>
278−%- a
281+ %- a
279−b
282+ b
280−</pre>
283+ ```
281−</td>
284+
282−</tr>
285+---
283−<tr>
286+
284−<td>Wide</td>
287+- Wide
285−<td>
288+- ```hoon
286−<pre>
287−%-(a b)
289+ %-(a b)
288−</pre>
290+ ```
289−</td>
291+
290−</tr>
292+---
291−<tr>
293+
292−<td>Irregular</td>
294+- Irregular
293−<td>
295+- ```hoon
294−<pre>
295−(a b)
296+ (a b)
296−</pre>
297+ ```
297−</td>
298−</tr>
299−</table>
298+{% /table %}
300
299
301#### AST
300#### AST
302
301
@@ -345,36 +344,35 @@ Call gate with triple sample.
345
344
346Four arguments, fixed.
345Four arguments, fixed.
347
346
348−<table>
347+{% table %}
348+
349+- Form
349−<tr><th>Form</th><th>Syntax</th></tr>
350+- Syntax
350−<tr>
351+
352+---
353+
351−<td>Tall</td>
354+- Tall
352−<td>
355+- ```hoon
353−<pre>
354−%^ a
356+ %^ a
355− b
357+ b
356− c
358+ c
357−d
359+ d
358−</pre>
360+ ```
359−</td>
361+
360−</tr>
362+---
361−<tr>
363+
362−<td>Wide</td>
364+- Wide
363−<td>
365+- ```hoon
364−<pre>
365−%^(a b c d)
366+ %^(a b c d)
366−</pre>
367+ ```
367−</td>
368+
368−</tr>
369+---
369−<tr>
370+
370−<td>Irregular</td>
371+- Irregular
371−<td>
372+- ```hoon
372−<pre>
373−(a b c d)
373+ (a b c d)
374−</pre>
374+ ```
375−</td>
376−</tr>
377−</table>
375+{% /table %}
378
376
379#### AST
377#### AST
380
378
@@ -407,35 +405,34 @@ Call gate with a cell sample.
407
405
408Three arguments, fixed.
406Three arguments, fixed.
409
407
410−<table>
408+{% table %}
409+
410+- Form
411−<tr><th>Form</th><th>Syntax</th></tr>
411+- Syntax
412−<tr>
412+
413+---
414+
413−<td>Tall</td>
415+- Tall
414−<td>
416+- ```hoon
415−<pre>
416−%+ a
417+ %+ a
417− b
418+ b
418−c
419+ c
419−</pre>
420+ ```
420−</td>
421+
421−</tr>
422+---
422−<tr>
423+
423−<td>Wide</td>
424+- Wide
424−<td>
425+- ```hoon
425−<pre>
426−%+(a b c)
426+ %+(a b c)
427−</pre>
427+ ```
428−</td>
428+
429−</tr>
429+---
430−<tr>
430+
431−<td>Irregular</td>
431+- Irregular
432−<td>
432+- ```hoon
433−<pre>
434−(a b c)
433+ (a b c)
435−</pre>
434+ ```
436−</td>
437−</tr>
438−</table>
435+{% /table %}
439
436
440#### AST
437#### AST
441
438
@@ -473,34 +470,33 @@ Evaluate an arm in a door.
473
470
474Three arguments, fixed.
471Three arguments, fixed.
475
472
476−<table>
473+{% table %}
474+
475+- Form
477−<tr><th>Form</th><th>Syntax</th></tr>
476+- Syntax
478−<tr>
477+
478+---
479+
479−<td>Tall</td>
480+- Tall
480−<td>
481+- ```hoon
481−<pre>
482−%~ p q
482+ %~ p q
483−r
483+ r
484−</pre>
484+ ```
485−</td>
485+
486−</tr>
486+---
487−<tr>
487+
488−<td>Wide</td>
488+- Wide
489−<td>
489+- ```hoon
490−<pre>
491−%~(p q r)
490+ %~(p q r)
492−</pre>
491+ ```
493−</td>
492+
494−</tr>
493+---
495−<tr>
494+
496−<td>Irregular</td>
495+- Irregular
497−<td>
496+- ```
498−<pre>
499−~(p q r1 r2 rn)
497+ ~(p q r1 r2 rn)
500−</pre>
498+ ```
501−</td>
502−</tr>
503−</table>
499+{% /table %}
504
500
505In the irregular form, `r` may be split into multiple parts. Multiple parts of
501In the irregular form, `r` may be split into multiple parts. Multiple parts of
506`r` will be formed into a cell.
502`r` will be formed into a cell.
@@ -542,48 +538,51 @@ Evaluate an expression, then resolve a wing with changes.
542
538
543Two fixed arguments, then a variable number of pairs.
539Two fixed arguments, then a variable number of pairs.
544
540
545−<table>
541+{% table %}
542+
543+- Form
546−<tr><th>Form</th><th>Syntax</th></tr>
544+- Syntax
547−<tr>
545+
546+---
547+
548−<td>Tall style #1</td>
548+- Tall style #1
549−<td>
549+- ```hoon
550−<pre>
551−%* a=wing b=hoon
550+ %* a=wing b=hoon
552− c=wing d=hoon
551+ c=wing d=hoon
553− e=wing f=hoon
552+ e=wing f=hoon
554− ...
553+ ...
555− g=wing h=hoon
554+ g=wing h=hoon
556−==
555+ ==
557−</pre>
556+ ```
558−</td>
557+
559−</tr>
558+---
560−<tr>
559+
561−<td>Tall style #2</td>
560+- Tall style #2
562−<td>
561+- ```hoon
563−<pre>
564−%* a=wing b=hoon
562+ %* a=wing b=hoon
565− c=wing
563+ c=wing
566− d=hoon
564+ d=hoon
567−::
565+ ::
568− e=wing
566+ e=wing
569− f=hoon
567+ f=hoon
570−::
568+ ::
571− g=wing
569+ g=wing
572− h=hoon
570+ h=hoon
573−==
571+ ==
574−</pre>
572+ ```
575−</td>
573+
576−</tr>
574+---
577−<tr>
575+
578−<td>Wide</td>
576+- Wide
579−<td>
577+- ```hoon
580−<pre>
581−%*(a b c d, e f, g h)
578+ %*(a b c d, e f, g h)
582−</pre>
579+ ```
583−</td>
580+
584−</tr>
581+---
582+
585−<tr><td>Irregular</td><td>None.</td></tr>
583+- Irregular
584+- None.
586−</table>
585+{% /table %}
587
586
588#### AST
587#### AST
589
588
@@ -643,55 +642,53 @@ Resolve a wing with changes.
643
642
644One fixed argument, then a variable number of pairs.
643One fixed argument, then a variable number of pairs.
645
644
646−<table>
645+{% table %}
646+
647+- Form
647−<tr><th>Form</th><th>Syntax</th></tr>
648+- Syntax
648−<tr>
649+
650+---
651+
649−<td>Tall style #1</td>
652+- Tall style #1
650−<td>
653+- ```hoon
651−<pre>
652−%= a=wing
654+ %= a=wing
653− b=wing c=hoon
655+ b=wing c=hoon
654− d=wing e=hoon
656+ d=wing e=hoon
655− ...
657+ ...
656− f=wing g=hoon
658+ f=wing g=hoon
657−==
659+ ==
658−</pre>
660+ ```
659−</td>
661+
660−</tr>
662+---
661−<tr>
663+
662−<td>Tall style #2</td>
664+- Tall style #2
663−<td>
665+- ```hoon
664−<pre>
665−%= a=wing
666+ %= a=wing
666− b=wing
667+ b=wing
667− c=hoon
668+ c=hoon
668−::
669+ ::
669− d=wing
670+ d=wing
670− e=hoon
671+ e=hoon
671−::
672+ ::
672− f=wing
673+ f=wing
673− g=hoon
674+ g=hoon
674−==
675+ ==
675−</pre>
676+ ```
676−</td>
677+
677−</tr>
678+---
678−<tr>
679+
679−<td>Wide</td>
680+- Wide
680−<td>
681+- ```hoon
681−<pre>
682−%=(a b c, d e, f g)
682+ %=(a b c, d e, f g)
683−</pre>
683+ ```
684−</td>
684+
685−</tr>
685+---
686−<tr>
686+
687−<td>Irregular</td>
687+- Irregular
688−<td>
688+- ```
689−<pre>
690−a(b c, d e, f g)
689+ a(b c, d e, f g)
691−</pre>
690+ ```
692−</td>
693−</tr>
694−</table>
691+{% /table %}
695
692
696#### AST
693#### AST
697
694
content/docs/hoon/reference/rune/col.md+176−181
@@ -16,42 +16,40 @@ Construct a cell (2-tuple).
16
16
17Two arguments, fixed.
17Two arguments, fixed.
18
18
19−<table>
19+{% table %}
20+
21+- Form
20−<tr><th>Form</th><th>Syntax</th></tr>
22+- Syntax
21−<tr>
23+
24+---
25+
22−<td>Tall</td>
26+- Tall
23−<td>
27+- ```hoon
24−<pre>
25−:- p
28+ :- p
26−q
29+ q
27−</pre>
30+ ```
28−</td>
31+
29−</tr>
32+---
30−<tr>
33+
31−<td>Wide</td>
34+- Wide
32−<td>
35+- ```hoon
33−<pre>
34−:-(p q)
36+ :-(p q)
35−</pre>
37+ ```
36−</td>
38+
37−</tr>
39+---
38−<tr>
40+
39−<td>Irregular #1</td>
41+- Irregular #1
40−<td>
42+- ```hoon
41−<pre>
42−[p q]
43+ [p q]
43−</pre>
44+ ```
44−</td>
45+
45−</tr>
46+---
46−<tr>
47+
47−<td>Irregular #2</td>
48+- Irregular #2
48−<td>
49+- ```
49−<pre>
50−p^q
50+ p^q
51−</pre>
51+ ```
52−</td>
53−</tr>
54−</table>
52+{% /table %}
55
53
56#### AST
54#### AST
57
55
@@ -89,30 +87,31 @@ Construct a cell, inverted.
89
87
90Two arguments, fixed.
88Two arguments, fixed.
91
89
92−<table>
90+{% table %}
91+
92+- Form
93−<tr><th>Form</th><th>Syntax</th></tr>
93+- Syntax
94−<tr>
94+
95+---
96+
95−<td>Tall</td>
97+- Tall
96−<td>
98+- ```hoon
97−<pre>
98−:_ p
99+ :_ p
99−q
100+ q
100−</pre>
101+ ```
101−</td>
102+
102−</tr>
103+---
103−<tr>
104+
104−<td>Wide</td>
105+- Wide
105−<td>
106+- ```hoon
106−<pre>
107−:_(p q)
107+ :_(p q)
108−</pre>
108+ ```
109−</td>
109+
110−</tr>
110+---
111−<tr>
111+
112−<td>Irregular</td>
112+- Irregular
113−<td>None.</td>
113+- None.
114−</tr>
115−</table>
114+{% /table %}
116
115
117#### AST
116#### AST
118
117
@@ -143,35 +142,34 @@ Construct a triple (3-tuple).
143
142
144Three arguments, fixed.
143Three arguments, fixed.
145
144
146−<table>
145+{% table %}
146+
147+- Form
147−<tr><th>Form</th><th>Syntax</th></tr>
148+- Syntax
148−<tr>
149+
150+---
151+
149−<td>Tall</td>
152+- Tall
150−<td>
153+- ```hoon
151−<pre>
152−:+ p
154+ :+ p
153− q
155+ q
154−r
156+ r
155−</pre>
157+ ```
156−</td>
158+
157−</tr>
159+---
158−<tr>
160+
159−<td>Wide</td>
161+- Wide
160−<td>
162+- ```hoon
161−<pre>
162−:+(p q r)
163+ :+(p q r)
163−</pre>
164+ ```
164−</td>
165+
165−</tr>
166+---
166−<tr>
167+
167−<td>Irregular</td>
168+- Irregular
168−<td>
169+- ```hoon
169−<pre>
170−[p q r]
170+ [p q r]
171−</pre>
171+ ```
172−</td>
173−</tr>
174−</table>
172+{% /table %}
175
173
176#### AST
174#### AST
177
175
@@ -207,36 +205,35 @@ Construct a quadruple (4-tuple).
207
205
208Four arguments, fixed.
206Four arguments, fixed.
209
207
210−<table>
208+{% table %}
209+
210+- Form
211−<tr><th>Form</th><th>Syntax</th></tr>
211+- Syntax
212−<tr>
212+
213+---
214+
213−<td>Tall</td>
215+- Tall
214−<td>
216+- ```hoon
215−<pre>
216−:^ p
217+ :^ p
217− q
218+ q
218− r
219+ r
219−s
220+ s
220−</pre>
221+ ```
221−</td>
222+
222−</tr>
223+---
223−<tr>
224+
224−<td>Wide</td>
225+- Wide
225−<td>
226+- ```hoon
226−<pre>
227−:^(p q r s)
227+ :^(p q r s)
228−</pre>
228+ ```
229−</td>
229+
230−</tr>
230+---
231−<tr>
231+
232−<td>Irregular</td>
232+- Irregular
233−<td>
233+- ```hoon
234−<pre>
235−[p q r s]
234+ [p q r s]
236−</pre>
235+ ```
237−</td>
238−</tr>
239−</table>
236+{% /table %}
240
237
241#### AST
238#### AST
242
239
@@ -273,37 +270,36 @@ Construct an n-tuple.
273
270
274Variable number of arguments.
271Variable number of arguments.
275
272
276−<table>
273+{% table %}
274+
275+- Form
277−<tr><th>Form</th><th>Syntax</th></tr>
276+- Syntax
278−<tr>
277+
278+---
279+
279−<td>Tall</td>
280+- Tall
280−<td>
281+- ```hoon
281−<pre>
282−:* p1
282+ :* p1
283− p2
283+ p2
284− p3
284+ p3
285− pn
285+ pn
286−==
286+ ==
287−</pre>
287+ ```
288−</td>
288+
289−</tr>
289+---
290−<tr>
290+
291−<td>Wide</td>
291+- Wide
292−<td>
292+- ```hoon
293−<pre>
294−:*(p1 p2 p3 pn)
293+ :*(p1 p2 p3 pn)
295−</pre>
294+ ```
296−</td>
295+
297−</tr>
296+---
298−<tr>
297+
299−<td>Irregular</td>
298+- Irregular
300−<td>
299+- ```
301−<pre>
302−[p1 p2 p3 pn]
300+ [p1 p2 p3 pn]
303−</pre>
301+ ```
304−</td>
305−</tr>
306−</table>
302+{% /table %}
307
303
308#### AST
304#### AST
309
305
@@ -363,37 +359,36 @@ Construct a null-terminated list.
363
359
364Variable number of arguments.
360Variable number of arguments.
365
361
366−<table>
362+{% table %}
363+
364+- Form
367−<tr><th>Form</th><th>Syntax</th></tr>
365+- Syntax
368−<tr>
366+
367+---
368+
369−<td>Tall</td>
369+- Tall
370−<td>
370+- ```hoon
371−<pre>
372−:~ p1
371+ :~ p1
373− p2
372+ p2
374− p3
373+ p3
375− pn
374+ pn
376−==
375+ ==
377−</pre>
376+ ```
378−</td>
377+
379−</tr>
378+---
380−<tr>
379+
381−<td>Wide</td>
380+- Wide
382−<td>
381+- ```hoon
383−<pre>
384−:~(p1 p2 p3 pn)
382+ :~(p1 p2 p3 pn)
385−</pre>
383+ ```
386−</td>
384+
387−</tr>
385+---
388−<tr>
386+
389−<td>Irregular</td>
387+- Irregular
390−<td>
388+- ```
391−<pre>
392−~[p1 p2 p3 pn]
389+ ~[p1 p2 p3 pn]
393−</pre>
390+ ```
394−</td>
395−</tr>
396−</table>
391+{% /table %}
397
392
398#### AST
393#### AST
399
394
content/docs/hoon/reference/rune/constants.md+1−1
@@ -134,7 +134,7 @@ String with interpolated prettyprinting:
134
134
135---
135---
136
136
137−## "Warm Atoms" {#warm}
137+## "Warm Atoms" {% #warm %}
138
138
139A constant, warm atom.
139A constant, warm atom.
140
140
content/docs/hoon/reference/rune/dot.md+132−131
@@ -22,34 +22,35 @@ with a `==`. Note also that the `==` does not make the arguments into a list as
22you might expect, so `q` must be explicitly null-terminated if its elements are
22you might expect, so `q` must be explicitly null-terminated if its elements are
23specified separately.
23specified separately.
24
24
25−<table>
25+{% table %}
26+
27+- Form
26−<tr><th>Form</th><th>Syntax</th></tr>
28+- Syntax
27−<tr>
29+
30+---
31+
28−<td>Tall</td>
32+- Tall
29−<td>
33+- ```hoon
30−<pre>
31−.^ p
34+ .^ p
32− q1
35+ q1
33− q2
36+ q2
34− q3
37+ q3
35− qn
38+ qn
36−==
39+ ==
37−</pre>
40+ ```
38−</td>
41+
39−</tr>
42+---
40−<tr>
43+
41−<td>Wide</td>
44+- Wide
42−<td>
45+- ```hoon
43−<pre>
44−.^(p q1 q2)
46+ .^(p q1 q2)
45−</pre>
47+ ```
46−</td>
48+
47−</tr>
49+---
48−<tr>
50+
49−<td>Irregular</td>
51+- Irregular
50−<td>None.</td>
52+- None.
51−</tr>
52−</table>
53+{% /table %}
53
54
54#### AST
55#### AST
55
56
@@ -132,33 +133,32 @@ Increment an atom with Nock `4`.
132
133
133One argument, fixed.
134One argument, fixed.
134
135
135−<table>
136+{% table %}
137+
138+- Form
136−<tr><th>Form</th><th>Syntax</th></tr>
139+- Syntax
137−<tr>
140+
141+---
142+
138−<td>Tall</td>
143+- Tall
139−<td>
144+- ```hoon
140−<pre>
141−.+ p
145+ .+ p
142−</pre>
146+ ```
143−</td>
147+
144−</tr>
148+---
145−<tr>
149+
146−<td>Wide</td>
150+- Wide
147−<td>
151+- ```hoon
148−<pre>
149−.+(p)
152+ .+(p)
150−</pre>
153+ ```
151−</td>
154+
152−</tr>
155+---
153−<tr>
156+
154−<td>Irregular</td>
157+- Irregular
155−<td>
158+- ```hoon
156−<pre>
157−+(p)
159+ +(p)
158−</pre>
160+ ```
159−</td>
160−</tr>
161−</table>
161+{% /table %}
162
162
163#### AST
163#### AST
164
164
@@ -200,30 +200,31 @@ Nock of formula `q` and subject `p`, with type `%noun`.
200
200
201Two arguments, fixed.
201Two arguments, fixed.
202
202
203−<table>
203+{% table %}
204+
205+- Form
204−<tr><th>Form</th><th>Syntax</th></tr>
206+- Syntax
205−<tr>
207+
208+---
209+
206−<td>Tall</td>
210+- Tall
207−<td>
211+- ```hoon
208−<pre>
209−.* p
212+ .* p
210−q
213+ q
211−</pre>
214+ ```
212−</td>
215+
213−</tr>
216+---
214−<tr>
217+
215−<td>Wide</td>
218+- Wide
216−<td>
219+- ```hoon
217−<pre>
218−.*(p q)
220+ .*(p q)
219−</pre>
221+ ```
220−</td>
222+
221−</tr>
223+---
222−<tr>
224+
223−<td>Irregular</td>
225+- Irregular
224−<td>None.</td>
226+- None.
225−</tr>
226−</table>
227+{% /table %}
227
228
228#### AST
229#### AST
229
230
@@ -264,7 +265,7 @@ therefore possible to use Hoon as a typeless language.
264
265
265---
266---
266
267
267−## `.=` "dottis" {#dottis}
268+## `.=` "dottis" {% #dottis %}
268
269
269Test for equality with Nock `5`.
270Test for equality with Nock `5`.
270
271
@@ -272,34 +273,33 @@ Test for equality with Nock `5`.
272
273
273Two arguments, fixed.
274Two arguments, fixed.
274
275
275−<table>
276+{% table %}
277+
278+- Form
276−<tr><th>Form</th><th>Syntax</th></tr>
279+- Syntax
277−<tr>
280+
281+---
282+
278−<td>Tall</td>
283+- Tall
279−<td>
284+- ```hoon
280−<pre>
281−.= p
285+ .= p
282−q
286+ q
283−</pre>
287+ ```
284−</td>
288+
285−</tr>
289+---
286−<tr>
290+
287−<td>Wide</td>
291+- Wide
288−<td>
292+- ```hoon
289−<pre>
290−.=(p q)
293+ .=(p q)
291−</pre>
294+ ```
292−</td>
295+
293−</tr>
296+---
294−<tr>
297+
295−<td>Irregular</td>
298+- Irregular
296−<td>
299+- ```hoon
297−<pre>
298−=(p q)
300+ =(p q)
299−</pre>
301+ ```
300−</td>
301−</tr>
302−</table>
302+{% /table %}
303
303
304#### AST
304#### AST
305
305
@@ -348,29 +348,30 @@ Test for cell or atom with Nock `3`.
348
348
349One argument, fixed.
349One argument, fixed.
350
350
351−<table>
351+{% table %}
352+
353+- Form
352−<tr><th>Form</th><th>Syntax</th></tr>
354+- Syntax
353−<tr>
355+
356+---
357+
354−<td>Tall</td>
358+- Tall
355−<td>
359+- ```hoon
356−<pre>
357−.? p
360+ .? p
358−</pre>
361+ ```
359−</td>
362+
360−</tr>
363+---
361−<tr>
364+
362−<td>Wide</td>
365+- Wide
363−<td>
366+- ```hoon
364−<pre>
365−.?(p)
367+ .?(p)
366−</pre>
368+ ```
367−</td>
369+
368−</tr>
370+---
369−<tr>
371+
370−<td>Irregular</td>
372+- Irregular
371−<td>None.</td>
373+- None.
372−</tr>
373−</table>
374+{% /table %}
374
375
375#### AST
376#### AST
376
377
content/docs/hoon/reference/rune/ket.md+250−234
@@ -19,29 +19,30 @@ Convert a gold core to an iron core (contravariant).
19
19
20One argument, fixed.
20One argument, fixed.
21
21
22−<table>
22+{% table %}
23+
24+- Form
23−<tr><th>Form</th><th>Syntax</th></tr>
25+- Syntax
24−<tr>
26+
27+---
28+
25−<td>Tall</td>
29+- Tall
26−<td>
30+- ```hoon
27−<pre>
28−^| p
31+ ^| p
29−</pre>
32+ ```
30−</td>
33+
31−</tr>
34+---
32−<tr>
35+
33−<td>Wide</td>
36+- Wide
34−<td>
37+- ```hoon
35−<pre>
36−^|(p)
38+ ^|(p)
37−</pre>
39+ ```
38−</td>
40+
39−</tr>
41+---
40−<tr>
42+
41−<td>Irregular</td>
43+- Irregular
42−<td>None.</td>
44+- None.
43−</tr>
44−</table>
45+{% /table %}
45
46
46#### AST
47#### AST
47
48
@@ -89,29 +90,30 @@ Mold gate for type `p`.
89
90
90One argument, fixed.
91One argument, fixed.
91
92
92−<table>
93+{% table %}
94+
95+- Form
93−<tr><th>Form</th><th>Syntax</th></tr>
96+- Syntax
94−<tr>
97+
98+---
99+
95−<td>Tall</td>
100+- Tall
96−<td>
101+- ```hoon
97−<pre>
98−^: p
102+ ^: p
99−</pre>
103+ ```
100−</td>
104+
101−</tr>
105+---
102−<tr>
106+
103−<td>Wide</td>
107+- Wide
104−<td>
108+- ```hoon
105−<pre>
106−^:(p)
109+ ^:(p)
107−</pre>
110+ ```
108−</td>
111+
109−</tr>
112+---
110−<tr>
113+
111−<td>Irregular</td>
114+- Irregular
112−<td>None.</td>
115+- None.
113−</tr>
114−</table>
116+{% /table %}
115
117
116#### AST
118#### AST
117
119
@@ -166,30 +168,31 @@ Typecast on value produced by passing `q` to `p`.
166
168
167Two arguments, fixed.
169Two arguments, fixed.
168
170
169−<table>
171+{% table %}
172+
173+- Form
170−<tr><th>Form</th><th>Syntax</th></tr>
174+- Syntax
171−<tr>
175+
176+---
177+
172−<td>Tall</td>
178+- Tall
173−<td>
179+- ```hoon
174−<pre>
175−^. p
180+ ^. p
176−q
181+ q
177−</pre>
182+ ```
178−</td>
183+
179−</tr>
184+---
180−<tr>
185+
181−<td>Wide</td>
186+- Wide
182−<td>
187+- ```hoon
183−<pre>
184−^.(p q)
188+ ^.(p q)
185−</pre>
189+ ```
186−</td>
190+
187−</tr>
191+---
188−<tr>
192+
189−<td>Irregular</td>
193+- Irregular
190−<td>None.</td>
194+- None.
191−</tr>
192−</table>
195+{% /table %}
193
196
194#### AST
197#### AST
195
198
@@ -236,34 +239,33 @@ Typecast by explicit type label.
236
239
237Two arguments, fixed.
240Two arguments, fixed.
238
241
239−<table>
242+{% table %}
243+
244+- Form
240−<tr><th>Form</th><th>Syntax</th></tr>
245+- Syntax
241−<tr>
246+
247+---
248+
242−<td>Tall</td>
249+- Tall
243−<td>
250+- ```hoon
244−<pre>
245−^- p
251+ ^- p
246−q
252+ q
247−</pre>
253+ ```
248−</td>
254+
249−</tr>
255+---
250−<tr>
256+
251−<td>Wide</td>
257+- Wide
252−<td>
258+- ```hoon
253−<pre>
254−^-(p q)
259+ ^-(p q)
255−</pre>
260+ ```
256−</td>
261+
257−</tr>
262+---
258−<tr>
263+
259−<td>Irregular</td>
264+- Irregular
260−<td>
265+- ```
261−<pre>
262−`p`q
266+ `p`q
263−</pre>
267+ ```
264−</td>
265−</tr>
266−</table>
268+{% /table %}
267
269
268#### AST
270#### AST
269
271
@@ -313,27 +315,31 @@ Typecast by inferred type.
313
315
314Two arguments, fixed.
316Two arguments, fixed.
315
317
316−<table>
318+{% table %}
319+
320+- Form
317−<tr><th>Form</th><th>Syntax</th></tr>
321+- Syntax
318−<tr>
322+
323+---
324+
319−<td>Tall</td>
325+- Tall
320−<td>
326+- ```hoon
321−<pre>
322−^+ p
327+ ^+ p
323−q
328+ q
324−</pre>
329+ ```
325−</td>
330+
326−</tr>
331+---
327−<tr>
332+
328−<td>Wide</td>
333+- Wide
329−<td>
334+- ```hoon
330−<pre>
331−^+(p q)
335+ ^+(p q)
332−</pre>
336+ ```
333−</td>
337+
334−</tr>
338+---
339+
335−<tr><td>Irregular</td><td>None.</td></tr>
340+- Irregular
341+- None.
336−</table>
342+{% /table %}
337
343
338#### AST
344#### AST
339
345
@@ -363,26 +369,30 @@ Convert a core to a zinc core (covariant).
363
369
364One argument, fixed.
370One argument, fixed.
365
371
366−<table>
372+{% table %}
373+
374+- Form
367−<tr><th>Form</th><th>Syntax</th></tr>
375+- Syntax
368−<tr>
376+
377+---
378+
369−<td>Tall</td>
379+- Tall
370−<td>
380+- ```hoon
371−<pre>
372−^& p
381+ ^& p
373−</pre>
382+ ```
374−</td>
383+
375−</tr>
384+---
376−<tr>
385+
377−<td>Wide</td>
386+- Wide
378−<td>
387+- ```hoon
379−<pre>
380−^&(p)
388+ ^&(p)
381−</pre>
389+ ```
382−</td>
390+
383−</tr>
391+---
392+
384−<tr><td>Irregular</td><td>None.</td></tr>
393+- Irregular
394+- None.
385−</table>
395+{% /table %}
386
396
387#### AST
397#### AST
388
398
@@ -446,26 +456,30 @@ Fold constant at compile time.
446
456
447One argument, fixed.
457One argument, fixed.
448
458
449−<table>
459+{% table %}
460+
461+- Form
450−<tr><th>Form</th><th>Syntax</th></tr>
462+- Syntax
451−<tr>
463+
464+---
465+
452−<td>Tall</td>
466+- Tall
453−<td>
467+- ```hoon
454−<pre>
455−^~ p
468+ ^~ p
456−</pre>
469+ ```
457−</td>
470+
458−</tr>
471+---
459−<tr>
472+
460−<td>Wide</td>
473+- Wide
461−<td>
474+- ```hoon
462−<pre>
463−^~(p)
475+ ^~(p)
464−</pre>
476+ ```
465−</td>
477+
466−</tr>
478+---
479+
467−<tr><td>Irregular</td><td>None.</td></tr>
480+- Irregular
481+- None.
468−</table>
482+{% /table %}
469
483
470#### AST
484#### AST
471
485
@@ -497,33 +511,32 @@ Produce example type value.
497
511
498One argument, fixed.
512One argument, fixed.
499
513
500−<table>
514+{% table %}
515+
516+- Form
501−<tr><th>Form</th><th>Syntax</th></tr>
517+- Syntax
502−<tr>
518+
519+---
520+
503−<td>Tall</td>
521+- Tall
504−<td>
522+- ```hoon
505−<pre>
506−^* p
523+ ^* p
507−</pre>
524+ ```
508−</td>
525+
509−</tr>
526+---
510−<tr>
527+
511−<td>Wide</td>
528+- Wide
512−<td>
529+- ```hoon
513−<pre>
514−^*(p)
530+ ^*(p)
515−</pre>
531+ ```
516−</td>
532+
517−</tr>
533+---
518−<tr>
534+
519−<td>Irregular</td>
535+- Irregular
520−<td>
536+- ```hoon
521−<pre>
522−*p
537+ *p
523−</pre>
538+ ```
524−</td>
525−</tr>
526−</table>
539+{% /table %}
527
540
528`p` is any structure expression.
541`p` is any structure expression.
529
542
@@ -578,34 +591,33 @@ Bind name to a value.
578
591
579Two arguments, fixed.
592Two arguments, fixed.
580
593
581−<table>
594+{% table %}
595+
596+- Form
582−<tr><th>Form</th><th>Syntax</th></tr>
597+- Syntax
583−<tr>
598+
599+---
600+
584−<td>Tall</td>
601+- Tall
585−<td>
602+- ```hoon
586−<pre>
587−^= p
603+ ^= p
588−q
604+ q
589−</pre>
605+ ```
590−</td>
606+
591−</tr>
607+---
592−<tr>
608+
593−<td>Wide</td>
609+- Wide
594−<td>
610+- ```hoon
595−<pre>
596−^=(p q)
611+ ^=(p q)
597−</pre>
612+ ```
598−</td>
613+
599−</tr>
614+---
600−<tr>
615+
601−<td>Irregular</td>
616+- Irregular
602−<td>
617+- ```
603−<pre>
604−p=q
618+ p=q
605−</pre>
619+ ```
606−</td>
607−</tr>
608−</table>
620+{% /table %}
609
621
610#### AST
622#### AST
611
623
@@ -649,26 +661,30 @@ Convert any core to a lead core (bivariant).
649
661
650One argument, fixed.
662One argument, fixed.
651
663
652−<table>
664+{% table %}
665+
666+- Form
653−<tr><th>Form</th><th>Syntax</th></tr>
667+- Syntax
654−<tr>
668+
669+---
670+
655−<td>Tall</td>
671+- Tall
656−<td>
672+- ```hoon
657−<pre>
658−^? p
673+ ^? p
659−</pre>
674+ ```
660−</td>
675+
661−</tr>
676+---
662−<tr>
677+
663−<td>Wide</td>
678+- Wide
664−<td>
679+- ```hoon
665−<pre>
666−^?(p)
680+ ^?(p)
667−</pre>
681+ ```
668−</td>
682+
669−</tr>
683+---
684+
670−<tr><td>Irregular</td><td>None.</td></tr>
685+- Irregular
686+- None.
671−</table>
687+{% /table %}
672
688
673#### AST
689#### AST
674
690
content/docs/hoon/reference/rune/lus.md+91−55
@@ -24,19 +24,28 @@ Chapter label (not useful)
24
24
25One argument, fixed.
25One argument, fixed.
26
26
27−<table>
27+{% table %}
28+
29+- Form
28−<tr><th>Form</th><th>Syntax</th></tr>
30+- Syntax
29−<tr>
31+
32+---
33+
30−<td>Tall</td>
34+- Tall
31−<td>
35+- ```hoon
32−<pre>
33−+| %label
36+ +| %label
34−</pre>
37+ ```
35−</td>
38+
36−</tr>
39+---
37−<tr><td>Wide</td><td>None.</td></tr>
40+
41+- Wide
42+- None.
43+
44+---
45+
38−<tr><td>Irregular</td><td>None.</td></tr>
46+- Irregular
47+- None.
39−</table>
48+{% /table %}
40
49
41#### Discussion
50#### Discussion
42
51
@@ -90,19 +99,28 @@ Produce a structure arm (type definition).
90
99
91Two arguments, fixed.
100Two arguments, fixed.
92
101
93−<table>
102+{% table %}
103+
104+- Form
94−<tr><th>Form</th><th>Syntax</th></tr>
105+- Syntax
95−<tr>
106+
107+---
108+
96−<td>Tall</td>
109+- Tall
97−<td>
110+- ```hoon
98−<pre>
99−+$ p=term q=spec
111+ +$ p=term q=spec
100−</pre>
112+ ```
101−</td>
113+
102−</tr>
114+---
103−<tr><td>Wide</td><td>None.</td></tr>
115+
116+- Wide
117+- None.
118+
119+---
120+
104−<tr><td>Irregular</td><td>None.</td></tr>
121+- Irregular
122+- None.
105−</table>
123+{% /table %}
106
124
107`p` is an arm name, and `q` is any structure expression.
125`p` is an arm name, and `q` is any structure expression.
108
126
@@ -143,19 +161,28 @@ Produce a normal arm.
143
161
144Two arguments, fixed.
162Two arguments, fixed.
145
163
146−<table>
164+{% table %}
165+
166+- Form
147−<tr><th>Form</th><th>Syntax</th></tr>
167+- Syntax
148−<tr>
168+
169+---
170+
149−<td>Tall</td>
171+- Tall
150−<td>
172+- ```hoon
151−<pre>
152−++ p=term q=hoon
173+ ++ p=term q=hoon
153−</pre>
174+ ```
154−</td>
175+
155−</tr>
176+---
156−<tr><td>Wide</td><td>None.</td></tr>
177+
178+- Wide
179+- None.
180+
181+---
182+
157−<tr><td>Irregular</td><td>None.</td></tr>
183+- Irregular
184+- None.
158−</table>
185+{% /table %}
159
186
160`p` is the arm name, and `q` is any Hoon expression.
187`p` is the arm name, and `q` is any Hoon expression.
161
188
@@ -192,22 +219,31 @@ Defines deferred expressions within doors.
192
219
193Arguments: A variable number of pairs.
220Arguments: A variable number of pairs.
194
221
195−<table>
222+{% table %}
223+
224+- Form
196−<tr><th>Form</th><th>Syntax</th></tr>
225+- Syntax
197−<tr>
226+
227+---
228+
198−<td>Tall</td>
229+- Tall
199−<td>
230+- ```hoon
200−<pre>
201−+* a=term b=hoon
231+ +* a=term b=hoon
202− c=term d=hoon
232+ c=term d=hoon
203− ...
233+ ...
204− e=term f=hoon
234+ e=term f=hoon
205−</pre>
235+ ```
206−</td>
236+
207−</tr>
237+---
208−<tr><td>Wide</td><td>None.</td></tr>
238+
239+- Wide
240+- None.
241+
242+---
243+
209−<tr><td>Irregular</td><td>None.</td></tr>
244+- Irregular
245+- None.
210−</table>
246+{% /table %}
211
247
212`a`, `c`, `e` are arm names and `b`, `d`, `f` are any Hoon expression. Note that
248`a`, `c`, `e` are arm names and `b`, `d`, `f` are any Hoon expression. Note that
213unlike all other runes with a variable number of arguments, the list of
249unlike all other runes with a variable number of arguments, the list of
content/docs/hoon/reference/rune/mic.md+208−181
@@ -15,37 +15,36 @@ Call a binary function as an n-ary function.
15
15
16One fixed argument, then a variable number of arguments.
16One fixed argument, then a variable number of arguments.
17
17
18−<table>
18+{% table %}
19+
20+- Form
19−<tr><th>Form</th><th>Syntax</th></tr>
21+- Syntax
20−<tr>
22+
23+---
24+
21−<td>Tall</td>
25+- Tall
22−<td>
26+- ```hoon
23−<pre>
24−;: p
27+ ;: p
25− q1
28+ q1
26− q2
29+ q2
27− qn
30+ qn
28−==
31+ ==
29−</pre>
32+ ```
30−</td>
33+
31−</tr>
34+---
32−<tr>
35+
33−<td>Wide</td>
36+- Wide
34−<td>
37+- ```hoon
35−<pre>
36−;:(p q1 q2 qn)
38+ ;:(p q1 q2 qn)
37−</pre>
39+ ```
38−</td>
40+
39−</tr>
41+---
40−<tr>
42+
41−<td>Irregular</td>
43+- Irregular
42−<td>
44+- ```
43−<pre>
44−:(p q1 q2 qn)
45+ :(p q1 q2 qn)
45−</pre>
46+ ```
46−</td>
47−</tr>
48−</table>
47+{% /table %}
49
48
50#### AST
49#### AST
51
50
@@ -106,26 +105,30 @@ Monadic do notation.
106
105
107Four arguments, fixed.
106Four arguments, fixed.
108
107
109−<table>
108+{% table %}
109+
110+- Form
110−<tr><th>Form</th><th>Syntax</th></tr>
111+- Syntax
111−<tr>
112+
113+---
114+
112−<td>Tall</td>
115+- Tall
113−<td>
116+- ```hoon
114−<pre>
115−;< mold bind expr1 expr2
117+ ;< mold bind expr1 expr2
116−</pre>
118+ ```
117−</td>
119+
118−</tr>
120+---
119−<tr>
121+
120−<td>Wide</td>
122+- Wide
121−<td>
123+- ```hoon
122−<pre>
123−;<(mold bind expr1 expr2)
124+ ;<(mold bind expr1 expr2)
124−</pre>
125+ ```
125−</td>
126+
126−</tr>
127+---
128+
127−<tr><td>Irregular</td><td>None.</td></tr>
129+- Irregular
130+- None.
128−</table>
131+{% /table %}
129
132
130#### AST
133#### AST
131
134
@@ -208,26 +211,30 @@ make a single XML node (Sail)
208
211
209One argument, fixed.
212One argument, fixed.
210
213
211−<table>
214+{% table %}
215+
216+- Form
212−<tr><th>Form</th><th>Syntax</th></tr>
217+- Syntax
213−<tr>
218+
219+---
220+
214−<td>Tall</td>
221+- Tall
215−<td>
222+- ```hoon
216−<pre>
217−;+ p
223+ ;+ p
218−</pre>
224+ ```
219−</td>
225+
220−</tr>
226+---
221−<tr>
227+
222−<td>Wide</td>
228+- Wide
223−<td>
229+- ```hoon
224−<pre>
225−;+(p)
230+ ;+(p)
226−</pre>
231+ ```
227−</td>
232+
228−</tr>
233+---
234+
229−<tr><td>Irregular</td><td>None.</td></tr>
235+- Irregular
236+- None.
230−</table>
237+{% /table %}
231
238
232`p` is a Hoon expression that produces a `manx`.
239`p` is a Hoon expression that produces a `manx`.
233
240
@@ -246,7 +253,7 @@ nouns that represent XML nodes. With the appropriate rendering pipeline, a Sail
246document can be used to generate a static website.
253document can be used to generate a static website.
247
254
248In Sail a single XML node is represented by a `manx`. A single
255In Sail a single XML node is represented by a `manx`. A single
249−<code>&lt;p&gt;</code> node `manx` can be produced in the following way:
256+<code><p&gt;</code> node `manx` can be produced in the following way:
250
257
251```
258```
252> ;p: This will be rendered as an XML node.
259> ;p: This will be rendered as an XML node.
@@ -294,27 +301,31 @@ Normalize with a mold, asserting fixpoint.
294
301
295Two arguments, fixed.
302Two arguments, fixed.
296
303
297−<table>
304+{% table %}
305+
306+- Form
298−<tr><th>Form</th><th>Syntax</th></tr>
307+- Syntax
299−<tr>
308+
309+---
310+
300−<td>Tall</td>
311+- Tall
301−<td>
312+- ```hoon
302−<pre>
303−;; p
313+ ;; p
304−q
314+ q
305−</pre>
315+ ```
306−</td>
316+
307−</tr>
317+---
308−<tr>
318+
309−<td>Wide</td>
319+- Wide
310−<td>
320+- ```hoon
311−<pre>
312−;;(p q)
321+ ;;(p q)
313−</pre>
322+ ```
314−</td>
323+
315−</tr>
324+---
325+
316−<tr><td>Irregular</td><td>None.</td></tr>
326+- Irregular
327+- None.
317−</table>
328+{% /table %}
318
329
319#### AST
330#### AST
320
331
@@ -369,26 +380,30 @@ Tape as XML element.
369
380
370One argument, fixed.
381One argument, fixed.
371
382
372−<table>
383+{% table %}
384+
385+- Form
373−<tr><th>Form</th><th>Syntax</th></tr>
386+- Syntax
374−<tr>
387+
388+---
389+
375−<td>Tall</td>
390+- Tall
376−<td>
391+- ```hoon
377−<pre>
378−;/ p
392+ ;/ p
379−</pre>
393+ ```
380−</td>
394+
381−</tr>
395+---
382−<tr>
396+
383−<td>Wide</td>
397+- Wide
384−<td>
398+- ```hoon
385−<pre>
386−;/(p)
399+ ;/(p)
387−</pre>
400+ ```
388−</td>
401+
389−</tr>
402+---
403+
390−<tr><td>Irregular</td><td>None.</td></tr>
404+- Irregular
405+- None.
391−</table>
406+{% /table %}
392
407
393#### AST
408#### AST
394
409
@@ -419,30 +434,34 @@ Glue a pipeline together with a product-sample adapter.
419
434
420One fixed argument, then a variable number of arguments.
435One fixed argument, then a variable number of arguments.
421
436
422−<table>
437+{% table %}
438+
439+- Form
423−<tr><th>Form</th><th>Syntax</th></tr>
440+- Syntax
424−<tr>
441+
442+---
443+
425−<td>Tall</td>
444+- Tall
426−<td>
445+- ```hoon
427−<pre>
428−;~ p
446+ ;~ p
429− q1
447+ q1
430− q2
448+ q2
431− qn
449+ qn
432−==
450+ ==
433−</pre>
451+ ```
434−</td>
452+
435−</tr>
453+---
436−<tr>
454+
437−<td>Wide</td>
455+- Wide
438−<td>
456+- ```hoon
439−<pre>
440−;~(p q1 q2 qn)
457+ ;~(p q1 q2 qn)
441−</pre>
458+ ```
442−</td>
459+
443−</tr>
460+---
461+
444−<tr><td>Irregular</td><td>None.</td></tr>
462+- Irregular
463+- None.
445−</table>
464+{% /table %}
446
465
447#### AST
466#### AST
448
467
@@ -559,26 +578,30 @@ make a list of XML nodes from complex Hoon expression (Sail)
559
578
560One argument, fixed.
579One argument, fixed.
561
580
562−<table>
581+{% table %}
582+
583+- Form
563−<tr><th>Form</th><th>Syntax</th></tr>
584+- Syntax
564−<tr>
585+
586+---
587+
565−<td>Tall</td>
588+- Tall
566−<td>
589+- ```hoon
567−<pre>
568−;* p
590+ ;* p
569−</pre>
591+ ```
570−</td>
592+
571−</tr>
593+---
572−<tr>
594+
573−<td>Wide</td>
595+- Wide
574−<td>
596+- ```hoon
575−<pre>
576−;*(p)
597+ ;*(p)
577−</pre>
598+ ```
578−</td>
599+
579−</tr>
600+---
601+
580−<tr><td>Irregular</td><td>None.</td></tr>
602+- Irregular
603+- None.
581−</table>
604+{% /table %}
582
605
583`p` is a Hoon expression that produces a `marl`.
606`p` is a Hoon expression that produces a `marl`.
584
607
@@ -636,30 +659,34 @@ make a list of XML nodes (Sail)
636
659
637A variable number of arguments.
660A variable number of arguments.
638
661
639−<table>
662+{% table %}
663+
664+- Form
640−<tr><th>Form</th><th>Syntax</th></tr>
665+- Syntax
641−<tr>
666+
667+---
668+
642−<td>Tall</td>
669+- Tall
643−<td>
670+- ```hoon
644−<pre>
645−;= p1
671+ ;= p1
646− p2
672+ p2
647− p3
673+ p3
648− pn
674+ pn
649−==
675+ ==
650−</pre>
676+ ```
651−</td>
677+
652−</tr>
678+---
653−<tr>
679+
654−<td>Wide</td>
680+- Wide
655−<td>
681+- ```hoon
656−<pre>
657−;=(p1 p2 p3 pn)
682+ ;=(p1 p2 p3 pn)
658−</pre>
683+ ```
659−</td>
684+
660−</tr>
685+---
686+
661−<tr><td>Irregular</td><td>None.</td></tr>
687+- Irregular
688+- None.
662−</table>
689+{% /table %}
663
690
664`p1`-`pn` are Hoon expressions, each of which poduces a `manx`.
691`p1`-`pn` are Hoon expressions, each of which poduces a `manx`.
665
692
content/docs/hoon/reference/rune/sig.md+303−283
@@ -16,30 +16,31 @@ Raw hint, applied to computation.
16
16
17Two arguments, fixed.
17Two arguments, fixed.
18
18
19−<table>
19+{% table %}
20+
21+- Form
20−<tr><th>Form</th><th>Syntax</th></tr>
22+- Syntax
21−<tr>
23+
24+---
25+
22−<td>Tall</td>
26+- Tall
23−<td>
27+- ```hoon
24−<pre>
25−~> p
28+ ~> p
26−q
29+ q
27−</pre>
30+ ```
28−</td>
31+
29−</tr>
32+---
30−<tr>
33+
31−<td>Wide</td>
34+- Wide
32−<td>
35+- ```hoon
33−<pre>
34−~>(p q)
36+ ~>(p q)
35−</pre>
37+ ```
36−</td>
38+
37−</tr>
39+---
38−<tr>
40+
39−<td>Irregular</td>
41+- Irregular
40−<td>None.</td>
42+- None.
41−</tr>
42−</table>
43+{% /table %}
43
44
44#### AST
45#### AST
45
46
@@ -89,30 +90,31 @@ Tracing printf.
89
90
90Two arguments, fixed.
91Two arguments, fixed.
91
92
92−<table>
93+{% table %}
94+
95+- Form
93−<tr><th>Form</th><th>Syntax</th></tr>
96+- Syntax
94−<tr>
97+
98+---
99+
95−<td>Tall</td>
100+- Tall
96−<td>
101+- ```hoon
97−<pre>
98−~| p
102+ ~| p
99−q
103+ q
100−</pre>
104+ ```
101−</td>
105+
102−</tr>
106+---
103−<tr>
107+
104−<td>Wide</td>
108+- Wide
105−<td>
109+- ```hoon
106−<pre>
107−~|(p q)
110+ ~|(p q)
108−</pre>
111+ ```
109−</td>
112+
110−</tr>
113+---
111−<tr>
114+
112−<td>Irregular</td>
115+- Irregular
113−<td>None.</td>
116+- None.
114−</tr>
115−</table>
117+{% /table %}
116
118
117#### AST
119#### AST
118
120
@@ -151,30 +153,31 @@ Profiling hit counter.
151
153
152Two arguments, fixed.
154Two arguments, fixed.
153
155
154−<table>
156+{% table %}
157+
158+- Form
155−<tr><th>Form</th><th>Syntax</th></tr>
159+- Syntax
156−<tr>
160+
161+---
162+
157−<td>Tall</td>
163+- Tall
158−<td>
164+- ```hoon
159−<pre>
160−~& p
165+ ~& p
161−q
166+ q
162−</pre>
167+ ```
163−</td>
168+
164−</tr>
169+---
165−<tr>
170+
166−<td>Wide</td>
171+- Wide
167−<td>
172+- ```hoon
168−<pre>
169−~&(p q)
173+ ~&(p q)
170−</pre>
174+ ```
171−</td>
175+
172−</tr>
176+---
173−<tr>
177+
174−<td>Irregular</td>
178+- Irregular
175−<td>None.</td>
179+- None.
176−</tr>
177−</table>
180+{% /table %}
178
181
179#### AST
182#### AST
180
183
@@ -229,30 +232,31 @@ User-formatted tracing printf.
229
232
230Two arguments, fixed.
233Two arguments, fixed.
231
234
232−<table>
235+{% table %}
236+
237+- Form
233−<tr><th>Form</th><th>Syntax</th></tr>
238+- Syntax
234−<tr>
239+
240+---
241+
235−<td>Tall</td>
242+- Tall
236−<td>
243+- ```hoon
237−<pre>
238−~_ p
244+ ~_ p
239−q
245+ q
240−</pre>
246+ ```
241−</td>
247+
242−</tr>
248+---
243−<tr>
249+
244−<td>Wide</td>
250+- Wide
245−<td>
251+- ```hoon
246−<pre>
247−~_(p q)
252+ ~_(p q)
248−</pre>
253+ ```
249−</td>
254+
250−</tr>
255+---
251−<tr>
256+
252−<td>Irregular</td>
257+- Irregular
253−<td>None.</td>
258+- None.
254−</tr>
255−</table>
259+{% /table %}
256
260
257#### AST
261#### AST
258
262
@@ -297,25 +301,34 @@ Four arguments. Two fixed arguments, then a third which may be `~` if empty or
297else a variable number of pairs sandwiched between two `==`s, then a fourth
301else a variable number of pairs sandwiched between two `==`s, then a fourth
298fixed argument.
302fixed argument.
299
303
300−<table>
304+{% table %}
305+
306+- Form
301−<tr><th>Form</th><th>Syntax</th></tr>
307+- Syntax
302−<tr>
308+
309+---
310+
303−<td>Tall</td>
311+- Tall
304−<td>
312+- ```hoon
305−<pre>
306−~% p q
313+ ~% p q
307− ==
314+ ==
308− r1a r1b
315+ r1a r1b
309− r2a r2b
316+ r2a r2b
310− rna rnb
317+ rna rnb
311− ==
318+ ==
312−s
319+ s
313−</pre>
320+ ```
314−</td>
321+
315−</tr>
322+---
316−<tr><td>Wide</td><td>None.</td></tr>
323+
324+- Wide
325+- None.
326+
327+---
328+
317−<tr><td>Irregular</td><td>None.</td></tr>
329+- Irregular
330+- None.
318−</table>
331+{% /table %}
319
332
320#### AST
333#### AST
321
334
@@ -406,30 +419,31 @@ Raw hint, applied to product.
406
419
407Two arguments, fixed.
420Two arguments, fixed.
408
421
409−<table>
422+{% table %}
423+
424+- Form
410−<tr><th>Form</th><th>Syntax</th></tr>
425+- Syntax
411−<tr>
426+
427+---
428+
412−<td>Tall</td>
429+- Tall
413−<td>
430+- ```hoon
414−<pre>
415−~< p
431+ ~< p
416−q
432+ q
417−</pre>
433+ ```
418−</td>
434+
419−</tr>
435+---
420−<tr>
436+
421−<td>Wide</td>
437+- Wide
422−<td>
438+- ```hoon
423−<pre>
424−~<(p q)
439+ ~<(p q)
425−</pre>
440+ ```
426−</td>
441+
427−</tr>
442+---
428−<tr>
443+
429−<td>Irregular</td>
444+- Irregular
430−<td>None.</td>
445+- None.
431−</tr>
432−</table>
446+{% /table %}
433
447
434`p` may either be a a `term` or a pair of `[term hoon]`. If it's the latter, `p`
448`p` may either be a a `term` or a pair of `[term hoon]`. If it's the latter, `p`
435may optionally be written as `%foo.some-hoon`.
449may optionally be written as `%foo.some-hoon`.
@@ -469,29 +483,30 @@ Cache a computation.
469
483
470One argument, fixed.
484One argument, fixed.
471
485
472−<table>
486+{% table %}
487+
488+- Form
473−<tr><th>Form</th><th>Syntax</th></tr>
489+- Syntax
474−<tr>
490+
491+---
492+
475−<td>Tall</td>
493+- Tall
476−<td>
494+- ```hoon
477−<pre>
478−~+ p
495+ ~+ p
479−</pre>
496+ ```
480−</td>
497+
481−</tr>
498+---
482−<tr>
499+
483−<td>Wide</td>
500+- Wide
484−<td>
501+- ```hoon
485−<pre>
486−~+(p)
502+ ~+(p)
487−</pre>
503+ ```
488−</td>
504+
489−</tr>
505+---
490−<tr>
506+
491−<td>Irregular</td>
507+- Irregular
492−<td>None.</td>
508+- None.
493−</tr>
494−</table>
509+{% /table %}
495
510
496#### AST
511#### AST
497
512
@@ -541,30 +556,31 @@ Jet registration for gate with registered context.
541
556
542Two arguments, fixed.
557Two arguments, fixed.
543
558
544−<table>
559+{% table %}
560+
561+- Form
545−<tr><th>Form</th><th>Syntax</th></tr>
562+- Syntax
546−<tr>
563+
564+---
565+
547−<td>Tall</td>
566+- Tall
548−<td>
567+- ```hoon
549−<pre>
550−~/ p
568+ ~/ p
551−q
569+ q
552−</pre>
570+ ```
553−</td>
571+
554−</tr>
572+---
555−<tr>
573+
556−<td>Wide</td>
574+- Wide
557−<td>
575+- ```hoon
558−<pre>
559−~/(p q)
576+ ~/(p q)
560−</pre>
577+ ```
561−</td>
578+
562−</tr>
579+---
563−<tr>
580+
564−<td>Irregular</td>
581+- Irregular
565−<td>None.</td>
582+- None.
566−</tr>
567−</table>
583+{% /table %}
568
584
569#### AST
585#### AST
570
586
@@ -601,30 +617,31 @@ Debugging printf.
601
617
602Two arguments, fixed.
618Two arguments, fixed.
603
619
604−<table>
620+{% table %}
621+
622+- Form
605−<tr><th>Form</th><th>Syntax</th></tr>
623+- Syntax
606−<tr>
624+
625+---
626+
607−<td>Tall</td>
627+- Tall
608−<td>
628+- ```hoon
609−<pre>
610−~& p
629+ ~& p
611−q
630+ q
612−</pre>
631+ ```
613−</td>
632+
614−</tr>
633+---
615−<tr>
634+
616−<td>Wide</td>
635+- Wide
617−<td>
636+- ```hoon
618−<pre>
619−~&(p q)
637+ ~&(p q)
620−</pre>
638+ ```
621−</td>
639+
622−</tr>
640+---
623−<tr>
641+
624−<td>Irregular</td>
642+- Irregular
625−<td>None.</td>
643+- None.
626−</tr>
627−</table>
644+{% /table %}
628
645
629#### AST
646#### AST
630
647
@@ -670,30 +687,31 @@ Detect duplicate.
670
687
671Two arguments, fixed.
688Two arguments, fixed.
672
689
673−<table>
690+{% table %}
691+
692+- Form
674−<tr><th>Form</th><th>Syntax</th></tr>
693+- Syntax
675−<tr>
694+
695+---
696+
676−<td>Tall</td>
697+- Tall
677−<td>
698+- ```hoon
678−<pre>
679−~= p
699+ ~= p
680−q
700+ q
681−</pre>
701+ ```
682−</td>
702+
683−</tr>
703+---
684−<tr>
704+
685−<td>Wide</td>
705+- Wide
686−<td>
706+- ```hoon
687−<pre>
688−~=(p q)
707+ ~=(p q)
689−</pre>
708+ ```
690−</td>
709+
691−</tr>
710+---
692−<tr>
711+
693−<td>Irregular</td>
712+- Irregular
694−<td>None.</td>
713+- None.
695−</tr>
696−</table>
714+{% /table %}
697
715
698#### AST
716#### AST
699
717
@@ -739,31 +757,32 @@ Conditional debug printf.
739
757
740Three arguments, fixed.
758Three arguments, fixed.
741
759
742−<table>
760+{% table %}
761+
762+- Form
743−<tr><th>Form</th><th>Syntax</th></tr>
763+- Syntax
744−<tr>
764+
765+---
766+
745−<td>Tall</td>
767+- Tall
746−<td>
768+- ```hoon
747−<pre>
748−~? p
769+ ~? p
749− q
770+ q
750−r
771+ r
751−</pre>
772+ ```
752−</td>
773+
753−</tr>
774+---
754−<tr>
775+
755−<td>Wide</td>
776+- Wide
756−<td>
777+- ```hoon
757−<pre>
758−~?(p q r)
778+ ~?(p q r)
759−</pre>
779+ ```
760−</td>
780+
761−</tr>
781+---
762−<tr>
782+
763−<td>Irregular</td>
783+- Irregular
764−<td>None.</td>
784+- None.
765−</tr>
766−</table>
785+{% /table %}
767
786
768#### AST
787#### AST
769
788
@@ -811,30 +830,31 @@ Print type on compilation fail.
811
830
812Two arguments, fixed.
831Two arguments, fixed.
813
832
814−<table>
833+{% table %}
834+
835+- Form
815−<tr><th>Form</th><th>Syntax</th></tr>
836+- Syntax
816−<tr>
837+
838+---
839+
817−<td>Tall</td>
840+- Tall
818−<td>
841+- ```hoon
819−<pre>
820−~! p
842+ ~! p
821−q
843+ q
822−</pre>
844+ ```
823−</td>
845+
824−</tr>
846+---
825−<tr>
847+
826−<td>Wide</td>
848+- Wide
827−<td>
849+- ```hoon
828−<pre>
829−~!(p q)
850+ ~!(p q)
830−</pre>
851+ ```
831−</td>
852+
832−</tr>
853+---
833−<tr>
854+
834−<td>Irregular</td>
855+- Irregular
835−<td>None.</td>
856+- None.
836−</tr>
837−</table>
857+{% /table %}
838
858
839#### AST
859#### AST
840
860
content/docs/hoon/reference/rune/tis.md+364−352
@@ -32,30 +32,31 @@ Compose two expressions.
32
32
33Two arguments, fixed.
33Two arguments, fixed.
34
34
35−<table>
35+{% table %}
36+
37+- Form
36−<tr><th>Form</th><th>Syntax</th></tr>
38+- Syntax
37−<tr>
39+
40+---
41+
38−<td>Tall</td>
42+- Tall
39−<td>
43+- ```hoon
40−<pre>
41−=> p
44+ => p
42−q
45+ q
43−</pre>
46+ ```
44−</td>
47+
45−</tr>
48+---
46−<tr>
49+
47−<td>Wide</td>
50+- Wide
48−<td>
51+- ```hoon
49−<pre>
50−=>(p q)
52+ =>(p q)
51−</pre>
53+ ```
52−</td>
54+
53−</tr>
55+---
54−<tr>
56+
55−<td>Irregular</td>
57+- Irregular
56−<td>None.</td>
58+- None.
57−</tr>
58−</table>
59+{% /table %}
59
60
60#### AST
61#### AST
61
62
@@ -100,30 +101,31 @@ of a given mold.
100
101
101Two arguments, fixed.
102Two arguments, fixed.
102
103
103−<table>
104+{% table %}
105+
106+- Form
104−<tr><th>Form</th><th>Syntax</th></tr>
107+- Syntax
105−<tr>
108+
109+---
110+
106−<td>Tall</td>
111+- Tall
107−<td>
112+- ```hoon
108−<pre>
109−=| p
113+ =| p
110−q
114+ q
111−</pre>
115+ ```
112−</td>
116+
113−</tr>
117+---
114−<tr>
118+
115−<td>Wide</td>
119+- Wide
116−<td>
120+- ```hoon
117−<pre>
118−=|(p q)
121+ =|(p q)
119−</pre>
122+ ```
120−</td>
123+
121−</tr>
124+---
122−<tr>
125+
123−<td>Irregular</td>
126+- Irregular
124−<td>None.</td>
127+- None.
125−</tr>
126−</table>
128+{% /table %}
127
129
128#### AST
130#### AST
129
131
@@ -165,33 +167,34 @@ Change multiple legs in the subject.
165
167
166Two arguments: the first a variable number of pairs, the second is fixed.
168Two arguments: the first a variable number of pairs, the second is fixed.
167
169
168−<table>
170+{% table %}
171+
172+- Form
169−<tr><th>Form</th><th>Syntax</th></tr>
173+- Syntax
170−<tr>
174+
175+---
176+
171−<td>Tall</td>
177+- Tall
172−<td>
178+- ```hoon
173−<pre>
174−=: p1a p1b
179+ =: p1a p1b
175− p2a p2b
180+ p2a p2b
176− p3a p3b
181+ p3a p3b
177− ==
182+ ==
178−q
183+ q
179−</pre>
184+ ```
180−</td>
185+
181−</tr>
186+---
182−<tr>
187+
183−<td>Wide</td>
188+- Wide
184−<td>
189+- ```hoon
185−<pre>
186−=:(p1a p1b, p2a p2b, p3a p3b q)
190+ =:(p1a p1b, p2a p2b, p3a p3b q)
187−</pre>
191+ ```
188−</td>
192+
189−</tr>
193+---
190−<tr>
194+
191−<td>Irregular</td>
195+- Irregular
192−<td>None.</td>
196+- None.
193−</tr>
194−</table>
197+{% /table %}
195
198
196#### AST
199#### AST
197
200
@@ -230,30 +233,31 @@ Expose namespace.
230
233
231Two arguments, fixed.
234Two arguments, fixed.
232
235
233−<table>
236+{% table %}
237+
238+- Form
234−<tr><th>Form</th><th>Syntax</th></tr>
239+- Syntax
235−<tr>
240+
241+---
242+
236−<td>Tall</td>
243+- Tall
237−<td>
244+- ```hoon
238−<pre>
239−=, p
245+ =, p
240−q
246+ q
241−</pre>
247+ ```
242−</td>
248+
243−</tr>
249+---
244−<tr>
250+
245−<td>Wide</td>
251+- Wide
246−<td>
252+- ```hoon
247−<pre>
248−=,(p q)
253+ =,(p q)
249−</pre>
254+ ```
250−</td>
255+
251−</tr>
256+---
252−<tr>
257+
253−<td>Irregular</td>
258+- Irregular
254−<td>None.</td>
259+- None.
255−</tr>
256−</table>
260+{% /table %}
257
261
258#### AST
262#### AST
259
263
@@ -312,30 +316,31 @@ Change one leg in the subject.
312
316
313Three arguments, fixed.
317Three arguments, fixed.
314
318
315−<table>
319+{% table %}
320+
321+- Form
316−<tr><th>Form</th><th>Syntax</th></tr>
322+- Syntax
317−<tr>
323+
324+---
325+
318−<td>Tall</td>
326+- Tall
319−<td>
327+- ```hoon
320−<pre>
321−=. p q
328+ =. p q
322−r
329+ r
323−</pre>
330+ ```
324−</td>
331+
325−</tr>
332+---
326−<tr>
333+
327−<td>Wide</td>
334+- Wide
328−<td>
335+- ```hoon
329−<pre>
330−=.(p q r)
336+ =.(p q r)
331−</pre>
337+ ```
332−</td>
338+
333−</tr>
339+---
334−<tr>
340+
335−<td>Irregular</td>
341+- Irregular
336−<td>None.</td>
342+- None.
337−</tr>
338−</table>
343+{% /table %}
339
344
340#### AST
345#### AST
341
346
@@ -383,30 +388,31 @@ Combine a new noun with the subject, inverted.
383
388
384Two arguments, fixed.
389Two arguments, fixed.
385
390
386−<table>
391+{% table %}
392+
393+- Form
387−<tr><th>Form</th><th>Syntax</th></tr>
394+- Syntax
388−<tr>
395+
396+---
397+
389−<td>Tall</td>
398+- Tall
390−<td>
399+- ```hoon
391−<pre>
392−=- p
400+ =- p
393−q
401+ q
394−</pre>
402+ ```
395−</td>
403+
396−</tr>
404+---
397−<tr>
405+
398−<td>Wide</td>
406+- Wide
399−<td>
407+- ```hoon
400−<pre>
401−=-(p q)
408+ =-(p q)
402−</pre>
409+ ```
403−</td>
410+
404−</tr>
411+---
405−<tr>
412+
406−<td>Irregular</td>
413+- Irregular
407−<td>None.</td>
414+- None.
408−</tr>
409−</table>
415+{% /table %}
410
416
411#### AST
417#### AST
412
418
@@ -447,31 +453,32 @@ Pin the head of a pair; change a leg with the tail.
447
453
448Four arguments, fixed.
454Four arguments, fixed.
449
455
450−<table>
456+{% table %}
457+
458+- Form
451−<tr><th>Form</th><th>Syntax</th></tr>
459+- Syntax
452−<tr>
460+
461+---
462+
453−<td>Tall</td>
463+- Tall
454−<td>
464+- ```hoon
455−<pre>
456−=^ p q
465+ =^ p q
457− r
466+ r
458−s
467+ s
459−</pre>
468+ ```
460−</td>
469+
461−</tr>
470+---
462−<tr>
471+
463−<td>Wide</td>
472+- Wide
464−<td>
473+- ```hoon
465−<pre>
466−=^(p q r s)
474+ =^(p q r s)
467−</pre>
475+ ```
468−</td>
476+
469−</tr>
477+---
470−<tr>
478+
471−<td>Irregular</td>
479+- Irregular
472−<td>None.</td>
480+- None.
473−</tr>
474−</table>
481+{% /table %}
475
482
476#### AST
483#### AST
477
484
@@ -528,34 +535,33 @@ Compose two expressions, inverted.
528
535
529Two arguments, fixed
536Two arguments, fixed
530
537
531−<table>
538+{% table %}
539+
540+- Form
532−<tr><th>Form</th><th>Syntax</th></tr>
541+- Syntax
533−<tr>
542+
543+---
544+
534−<td>Tall</td>
545+- Tall
535−<td>
546+- ```hoon
536−<pre>
537−=< p
547+ =< p
538−q
548+ q
539−</pre>
549+ ```
540−</td>
550+
541−</tr>
551+---
542−<tr>
552+
543−<td>Wide</td>
553+- Wide
544−<td>
554+- ```hoon
545−<pre>
546−=<(p q)
555+ =<(p q)
547−</pre>
556+ ```
548−</td>
557+
549−</tr>
558+---
550−<tr>
559+
551−<td>Irregular</td>
560+- Irregular
552−<td>
561+- ```
553−<pre>
554−p:q
562+ p:q
555−</pre>
563+ ```
556−</td>
557−</tr>
558−</table>
564+{% /table %}
559
565
560#### AST
566#### AST
561
567
@@ -600,30 +606,31 @@ Combine a new noun with the subject.
600
606
601Two arguments, fixed.
607Two arguments, fixed.
602
608
603−<table>
609+{% table %}
610+
611+- Form
604−<tr><th>Form</th><th>Syntax</th></tr>
612+- Syntax
605−<tr>
613+
614+---
615+
606−<td>Tall</td>
616+- Tall
607−<td>
617+- ```hoon
608−<pre>
609−=+ p
618+ =+ p
610−q
619+ q
611−</pre>
620+ ```
612−</td>
621+
613−</tr>
622+---
614−<tr>
623+
615−<td>Wide</td>
624+- Wide
616−<td>
625+- ```hoon
617−<pre>
618−=+(p q)
626+ =+(p q)
619−</pre>
627+ ```
620−</td>
628+
621−</tr>
629+---
622−<tr>
630+
623−<td>Irregular</td>
631+- Irregular
624−<td>None.</td>
632+- None.
625−</tr>
626−</table>
633+{% /table %}
627
634
628#### AST
635#### AST
629
636
@@ -669,31 +676,32 @@ order.
669
676
670Three arguments, fixed.
677Three arguments, fixed.
671
678
672−<table>
679+{% table %}
680+
681+- Form
673−<tr><th>Form</th><th>Syntax</th></tr>
682+- Syntax
674−<tr>
683+
684+---
685+
675−<td>Tall</td>
686+- Tall
676−<td>
687+- ```hoon
677−<pre>
678−=; p
688+ =; p
679− q
689+ q
680−r
690+ r
681−</pre>
691+ ```
682−</td>
692+
683−</tr>
693+---
684−<tr>
694+
685−<td>Wide</td>
695+- Wide
686−<td>
696+- ```hoon
687−<pre>
688−=;(p q r)
697+ =;(p q r)
689−</pre>
698+ ```
690−</td>
699+
691−</tr>
700+---
692−<tr>
701+
693−<td>Irregular</td>
702+- Irregular
694−<td>None.</td>
703+- None.
695−</tr>
696−</table>
704+{% /table %}
697
705
698#### AST
706#### AST
699
707
@@ -734,31 +742,32 @@ Combine a named noun with the subject, possibly with type annotation.
734
742
735Three arguments, fixed.
743Three arguments, fixed.
736
744
737−<table>
745+{% table %}
746+
747+- Form
738−<tr><th>Form</th><th>Syntax</th></tr>
748+- Syntax
739−<tr>
749+
750+---
751+
740−<td>Tall</td>
752+- Tall
741−<td>
753+- ```hoon
742−<pre>
743−=/ p
754+ =/ p
744− q
755+ q
745−r
756+ r
746−</pre>
757+ ```
747−</td>
758+
748−</tr>
759+---
749−<tr>
760+
750−<td>Wide</td>
761+- Wide
751−<td>
762+- ```hoon
752−<pre>
753−=/(p q r)
763+ =/(p q r)
754−</pre>
764+ ```
755−</td>
765+
756−</tr>
766+---
757−<tr>
767+
758−<td>Irregular</td>
768+- Irregular
759−<td>None.</td>
769+- None.
760−</tr>
761−</table>
770+{% /table %}
762
771
763#### AST
772#### AST
764
773
@@ -823,33 +832,34 @@ Compose many expressions.
823
832
824Variable number of arguments.
833Variable number of arguments.
825
834
826−<table>
835+{% table %}
836+
837+- Form
827−<tr><th>Form</th><th>Syntax</th></tr>
838+- Syntax
828−<tr>
839+
840+---
841+
829−<td>Tall</td>
842+- Tall
830−<td>
843+- ```hoon
831−<pre>
832−=~ p1
844+ =~ p1
833− p2
845+ p2
834− p3
846+ p3
835− pn
847+ pn
836−==
848+ ==
837−</pre>
849+ ```
838−</td>
850+
839−</tr>
851+---
840−<tr>
852+
841−<td>Wide</td>
853+- Wide
842−<td>
854+- ```hoon
843−<pre>
844−=~(p1 p2 p3 pn)
855+ =~(p1 p2 p3 pn)
845−</pre>
856+ ```
846−</td>
857+
847−</tr>
858+---
848−<tr>
859+
849−<td>Irregular</td>
860+- Irregular
850−<td>None.</td>
861+- None.
851−</tr>
852−</table>
862+{% /table %}
853
863
854#### AST
864#### AST
855
865
@@ -894,7 +904,7 @@ The product of the chain composition.
894
904
895---
905---
896
906
897−## `=*` "tistar" {#tistar}
907+## `=*` "tistar" {% #tistar %}
898
908
899Define a deferred expression.
909Define a deferred expression.
900
910
@@ -902,31 +912,32 @@ Define a deferred expression.
902
912
903Three arguments, fixed.
913Three arguments, fixed.
904
914
905−<table>
915+{% table %}
916+
917+- Form
906−<tr><th>Form</th><th>Syntax</th></tr>
918+- Syntax
907−<tr>
919+
920+---
921+
908−<td>Tall</td>
922+- Tall
909−<td>
923+- ```hoon
910−<pre>
911−=* p
924+ =* p
912− q
925+ q
913−r
926+ r
914−</pre>
927+ ```
915−</td>
928+
916−</tr>
929+---
917−<tr>
930+
918−<td>Wide</td>
931+- Wide
919−<td>
932+- ```hoon
920−<pre>
921−=*(p q r)
933+ =*(p q r)
922−</pre>
934+ ```
923−</td>
935+
924−</tr>
936+---
925−<tr>
937+
926−<td>Irregular</td>
938+- Irregular
927−<td>None.</td>
939+- None.
928−</tr>
929−</table>
940+{% /table %}
930
941
931#### AST
942#### AST
932
943
@@ -983,31 +994,32 @@ Conditionally change one leg in the subject.
983
994
984Four arguments, fixed.
995Four arguments, fixed.
985
996
986−<table>
997+{% table %}
998+
999+- Form
987−<tr><th>Form</th><th>Syntax</th></tr>
1000+- Syntax
988−<tr>
1001+
1002+---
1003+
989−<td>Tall</td>
1004+- Tall
990−<td>
1005+- ```hoon
991−<pre>
992−=? p q
1006+ =? p q
993− r
1007+ r
994−s
1008+ s
995−</pre>
1009+ ```
996−</td>
1010+
997−</tr>
1011+---
998−<tr>
1012+
999−<td>Wide</td>
1013+- Wide
1000−<td>
1014+- ```hoon
1001−<pre>
1002−=?(p q r s)
1015+ =?(p q r s)
1003−</pre>
1016+ ```
1004−</td>
1017+
1005−</tr>
1018+---
1006−<tr>
1019+
1007−<td>Irregular</td>
1020+- Irregular
1008−<td>None.</td>
1021+- None.
1009−</tr>
1010−</table>
1022+{% /table %}
1011
1023
1012#### AST
1024#### AST
1013
1025
content/docs/hoon/reference/rune/wut.md+379−374
@@ -39,37 +39,36 @@ Logical OR.
39
39
40Variable number of arguments.
40Variable number of arguments.
41
41
42−<table>
42+{% table %}
43+
44+- Form
43−<tr><th>Form</th><th>Syntax</th></tr>
45+- Syntax
44−<tr>
46+
47+---
48+
45−<td>Tall</td>
49+- Tall
46−<td>
50+- ```hoon
47−<pre>
48−?| p1
51+ ?| p1
49− p2
52+ p2
50− p3
53+ p3
51− pn
54+ pn
52−==
55+ ==
53−</pre>
56+ ```
54−</td>
57+
55−</tr>
58+---
56−<tr>
59+
57−<td>Wide</td>
60+- Wide
58−<td>
61+- ```hoon
59−<pre>
60−?|(p1 p2 p3 pn)
62+ ?|(p1 p2 p3 pn)
61−</pre>
63+ ```
62−</td>
64+
63−</tr>
65+---
64−<tr>
66+
65−<td>Irregular</td>
67+- Irregular
66−<td>
68+- ```hoon
67−<pre>
68−|(p1 p2 p3 pn)
69+ |(p1 p2 p3 pn)
69−</pre>
70+ ```
70−</td>
71−</tr>
72−</table>
71+{% /table %}
73
72
74#### AST
73#### AST
75
74
@@ -121,50 +120,50 @@ Switch against a union, with no default.
121
120
122One fixed argument, then a variable number of pairs.
121One fixed argument, then a variable number of pairs.
123
122
124−<table>
123+{% table %}
124+
125+- Form
125−<tr><th>Form</th><th>Syntax</th></tr>
126+- Syntax
126−<tr>
127+
128+---
129+
127−<td>Tall style #1</td>
130+- Tall style #1
128−<td>
131+- ```hoon
129−<pre>
130−?- p
132+ ?- p
131− q1a q1b
133+ q1a q1b
132− q2a q2b
134+ q2a q2b
133− qna qnb
135+ qna qnb
134−==
136+ ==
135−</pre>
137+ ```
136−</td>
138+
137−</tr>
139+---
138−<tr>
140+
139−<td>Tall style #2</td>
141+- Tall style #2
140−<td>
142+- ```hoon
141−<pre>
142−?- p
143+ ?- p
143− q1a
144+ q1a
144− q1b
145+ q1b
145−::
146+ ::
146− q2a
147+ q2a
147− q2b
148+ q2b
148−::
149+ ::
149− qna
150+ qna
150− qnb
151+ qnb
151−==
152+ ==
152−</pre>
153+ ```
153−</td>
154+
154−</tr>
155+---
155−<tr>
156+
156−<td>Wide</td>
157+- Wide
157−<td>
158+- ```hoon
158−<pre>
159−?-(p q1a q1b, q2a q2b, qna qnb)
159+ ?-(p q1a q1b, q2a q2b, qna qnb)
160−</pre>
160+ ```
161−</td>
161+
162−</tr>
162+---
163−<tr>
163+
164−<td>Irregular</td>
164+- Irregular
165−<td>None.</td>
165+- None.
166−</tr>
167−</table>
166+{% /table %}
168
167
169#### AST
168#### AST
170
169
@@ -229,7 +228,7 @@ A missing case will throw the `mint-lost` error. An extra case will throw
229
228
230---
229---
231
230
232−## `?:` "wutcol" {#wutcol}
231+## `?:` "wutcol" {% #wutcol %}
233
232
234Branch on a boolean test.
233Branch on a boolean test.
235
234
@@ -237,31 +236,32 @@ Branch on a boolean test.
237
236
238Three arguments, fixed.
237Three arguments, fixed.
239
238
240−<table>
239+{% table %}
240+
241+- Form
241−<tr><th>Form</th><th>Syntax</th></tr>
242+- Syntax
242−<tr>
243+
244+---
245+
243−<td>Tall</td>
246+- Tall
244−<td>
247+- ```hoon
245−<pre>
246−?: p
248+ ?: p
247− q
249+ q
248−r
250+ r
249−</pre>
251+ ```
250−</td>
252+
251−</tr>
253+---
252−<tr>
254+
253−<td>Wide</td>
255+- Wide
254−<td>
256+- ```hoon
255−<pre>
256−?:(p q r)
257+ ?:(p q r)
257−</pre>
258+ ```
258−</td>
259+
259−</tr>
260+---
260−<tr>
261+
261−<td>Irregular</td>
262+- Irregular
262−<td>None.</td>
263+- None.
263−</tr>
264−</table>
264+{% /table %}
265
265
266#### AST
266#### AST
267
267
@@ -311,31 +311,32 @@ Branch on a boolean test, inverted.
311
311
312Three arguments, fixed.
312Three arguments, fixed.
313
313
314−<table>
314+{% table %}
315+
316+- Form
315−<tr><th>Form</th><th>Syntax</th></tr>
317+- Syntax
316−<tr>
318+
319+---
320+
317−<td>Tall</td>
321+- Tall
318−<td>
322+- ```hoon
319−<pre>
320−?. p
323+ ?. p
321− q
324+ q
322−r
325+ r
323−</pre>
326+ ```
324−</td>
327+
325−</tr>
328+---
326−<tr>
329+
327−<td>Wide</td>
330+- Wide
328−<td>
331+- ```hoon
329−<pre>
330−?.(p q r)
332+ ?.(p q r)
331−</pre>
333+ ```
332−</td>
334+
333−</tr>
335+---
334−<tr>
336+
335−<td>Irregular</td>
337+- Irregular
336−<td>None.</td>
338+- None.
337−</tr>
338−</table>
339+{% /table %}
339
340
340#### AST
341#### AST
341
342
@@ -383,31 +384,32 @@ Branch on whether a wing of the subject is a cell.
383
384
384Three arguments, fixed.
385Three arguments, fixed.
385
386
386−<table>
387+{% table %}
388+
389+- Form
387−<tr><th>Form</th><th>Syntax</th></tr>
390+- Syntax
388−<tr>
391+
392+---
393+
389−<td>Tall</td>
394+- Tall
390−<td>
395+- ```hoon
391−<pre>
392−?^ p
396+ ?^ p
393− q
397+ q
394−r
398+ r
395−</pre>
399+ ```
396−</td>
400+
397−</tr>
401+---
398−<tr>
402+
399−<td>Wide</td>
403+- Wide
400−<td>
404+- ```hoon
401−<pre>
402−?^(p q r)
405+ ?^(p q r)
403−</pre>
406+ ```
404−</td>
407+
405−</tr>
408+---
406−<tr>
409+
407−<td>Irregular</td>
410+- Irregular
408−<td>None.</td>
411+- None.
409−</tr>
410−</table>
412+{% /table %}
411
413
412#### AST
414#### AST
413
415
@@ -451,30 +453,31 @@ Negative assertion.
451
453
452Two arguments, fixed.
454Two arguments, fixed.
453
455
454−<table>
456+{% table %}
457+
458+- Form
455−<tr><th>Form</th><th>Syntax</th></tr>
459+- Syntax
456−<tr>
460+
461+---
462+
457−<td>Tall</td>
463+- Tall
458−<td>
464+- ```hoon
459−<pre>
460−?< p
465+ ?< p
461−q
466+ q
462−</pre>
467+ ```
463−</td>
468+
464−</tr>
469+---
465−<tr>
470+
466−<td>Wide</td>
471+- Wide
467−<td>
472+- ```hoon
468−<pre>
469−?<(p q)
473+ ?<(p q)
470−</pre>
474+ ```
471−</td>
475+
472−</tr>
476+---
473−<tr>
477+
474−<td>Irregular</td>
478+- Irregular
475−<td>None.</td>
479+- None.
476−</tr>
477−</table>
480+{% /table %}
478
481
479#### AST
482#### AST
480
483
@@ -522,30 +525,31 @@ Positive assertion.
522
525
523Two arguments, fixed.
526Two arguments, fixed.
524
527
525−<table>
528+{% table %}
529+
530+- Form
526−<tr><th>Form</th><th>Syntax</th></tr>
531+- Syntax
527−<tr>
532+
533+---
534+
528−<td>Tall</td>
535+- Tall
529−<td>
536+- ```hoon
530−<pre>
531−?> p
537+ ?> p
532−q
538+ q
533−</pre>
539+ ```
534−</td>
540+
535−</tr>
541+---
536−<tr>
542+
537−<td>Wide</td>
543+- Wide
538−<td>
544+- ```hoon
539−<pre>
540−?>(p q)
545+ ?>(p q)
541−</pre>
546+ ```
542−</td>
547+
543−</tr>
548+---
544−<tr>
549+
545−<td>Irregular</td>
550+- Irregular
546−<td>None.</td>
551+- None.
547−</tr>
548−</table>
552+{% /table %}
549
553
550#### AST
554#### AST
551
555
@@ -593,50 +597,50 @@ Switch against a union, with a default.
593
597
594Two fixed arguments, then a variable number of pairs.
598Two fixed arguments, then a variable number of pairs.
595
599
596−<table>
600+{% table %}
601+
602+- Form
597−<tr><th>Form</th><th>Syntax</th></tr>
603+- Syntax
598−<tr>
604+
605+---
606+
599−<td>Tall style #1</td>
607+- Tall style #1
600−<td>
608+- ```hoon
601−<pre>
602−?+ p q
609+ ?+ p q
603− r1a r1b
610+ r1a r1b
604− r2a r2b
611+ r2a r2b
605− rna rnb
612+ rna rnb
606−==
613+ ==
607−</pre>
614+ ```
608−</td>
615+
609−</tr>
616+---
610−<tr>
617+
611−<td>Tall style #2</td>
618+- Tall style #2
612−<td>
619+- ```hoon
613−<pre>
614−?+ p q
620+ ?+ p q
615− r1a
621+ r1a
616− r1b
622+ r1b
617−::
623+ ::
618− r2a
624+ r2a
619− r2b
625+ r2b
620−::
626+ ::
621− rna
627+ rna
622− rnb
628+ rnb
623−==
629+ ==
624−</pre>
630+ ```
625−</td>
631+
626−</tr>
632+---
627−<tr>
633+
628−<td>Wide</td>
634+- Wide
629−<td>
635+- ```hoon
630−<pre>
631−?+(p q r1a r1b, r2a r2b, rna rnb)
636+ ?+(p q r1a r1b, r2a r2b, rna rnb)
632−</pre>
637+ ```
633−</td>
638+
634−</tr>
639+---
635−<tr>
640+
636−<td>Irregular</td>
641+- Irregular
637−<td>None.</td>
642+- None.
638−</tr>
639−</table>
643+{% /table %}
640
644
641#### AST
645#### AST
642
646
@@ -705,36 +709,35 @@ Logical AND.
705
709
706Variable arguments.
710Variable arguments.
707
711
708−<table>
712+{% table %}
713+
714+- Form
709−<tr><th>Form</th><th>Syntax</th></tr>
715+- Syntax
710−<tr>
716+
717+---
718+
711−<td>Tall</td>
719+- Tall
712−<td>
720+- ```hoon
713−<pre>
714−?& p1
721+ ?& p1
715− p2
722+ p2
716− pn
723+ pn
717−==
724+ ==
718−</pre>
725+ ```
719−</td>
726+
720−</tr>
727+---
721−<tr>
728+
722−<td>Wide</td>
729+- Wide
723−<td>
730+- ```hoon
724−<pre>
725−?&(p1 p2 pn)
731+ ?&(p1 p2 pn)
726−</pre>
732+ ```
727−</td>
733+
728−</tr>
734+---
729−<tr>
735+
730−<td>Irregular</td>
736+- Irregular
731−<td>
737+- ```
732−<pre>
733−&(p1 p2 pn)
738+ &(p1 p2 pn)
734−</pre>
739+ ```
735−</td>
736−</tr>
737−</table>
740+{% /table %}
738
741
739#### AST
742#### AST
740
743
@@ -786,31 +789,32 @@ Branch on whether a wing of the subject is an atom.
786
789
787Three arguments, fixed.
790Three arguments, fixed.
788
791
789−<table>
792+{% table %}
793+
794+- Form
790−<tr><th>Form</th><th>Syntax</th></tr>
795+- Syntax
791−<tr>
796+
797+---
798+
792−<td>Tall</td>
799+- Tall
793−<td>
800+- ```hoon
794−<pre>
795−?@ p
801+ ?@ p
796− q
802+ q
797−r
803+ r
798−</pre>
804+ ```
799−</td>
805+
800−</tr>
806+---
801−<tr>
807+
802−<td>Wide</td>
808+- Wide
803−<td>
809+- ```hoon
804−<pre>
805−?@(p q r)
810+ ?@(p q r)
806−</pre>
811+ ```
807−</td>
812+
808−</tr>
813+---
809−<tr>
814+
810−<td>Irregular</td>
815+- Irregular
811−<td>None.</td>
816+- None.
812−</tr>
813−</table>
817+{% /table %}
814
818
815#### AST
819#### AST
816
820
@@ -858,31 +862,32 @@ Branch on whether a wing of the subject is null.
858
862
859Three arguments, fixed.
863Three arguments, fixed.
860
864
861−<table>
865+{% table %}
866+
867+- Form
862−<tr><th>Form</th><th>Syntax</th></tr>
868+- Syntax
863−<tr>
869+
870+---
871+
864−<td>Tall</td>
872+- Tall
865−<td>
873+- ```hoon
866−<pre>
867−?~ p
874+ ?~ p
868− q
875+ q
869−r
876+ r
870−</pre>
877+ ```
871−</td>
878+
872−</tr>
879+---
873−<tr>
880+
874−<td>Wide</td>
881+- Wide
875−<td>
882+- ```hoon
876−<pre>
877−?~(p q r)
883+ ?~(p q r)
878−</pre>
884+ ```
879−</td>
885+
880−</tr>
886+---
881−<tr>
887+
882−<td>Irregular</td>
888+- Irregular
883−<td>None.</td>
889+- None.
884−</tr>
885−</table>
890+{% /table %}
886
891
887#### AST
892#### AST
888
893
@@ -924,30 +929,31 @@ Test pattern match.
924
929
925Two arguments, fixed.
930Two arguments, fixed.
926
931
927−<table>
932+{% table %}
933+
934+- Form
928−<tr><th>Form</th><th>Syntax</th></tr>
935+- Syntax
929−<tr>
936+
937+---
938+
930−<td>Tall</td>
939+- Tall
931−<td>
940+- ```hoon
932−<pre>
933−?= p
941+ ?= p
934−q
942+ q
935−</pre>
943+ ```
936−</td>
944+
937−</tr>
945+---
938−<tr>
946+
939−<td>Wide</td>
947+- Wide
940−<td>
948+- ```hoon
941−<pre>
942−?=(p q)
949+ ?=(p q)
943−</pre>
950+ ```
944−</td>
951+
945−</tr>
952+---
946−<tr>
953+
947−<td>Irregular</td>
954+- Irregular
948−<td>None.</td>
955+- None.
949−</tr>
950−</table>
956+{% /table %}
951
957
952#### AST
958#### AST
953
959
@@ -992,33 +998,32 @@ Logical NOT.
992
998
993One argument, fixed.
999One argument, fixed.
994
1000
995−<table>
1001+{% table %}
1002+
1003+- Form
996−<tr><th>Form</th><th>Syntax</th></tr>
1004+- Syntax
997−<tr>
1005+
1006+---
1007+
998−<td>Tall</td>
1008+- Tall
999−<td>
1009+- ```hoon
1000−<pre>
1001−?! p
1010+ ?! p
1002−</pre>
1011+ ```
1003−</td>
1012+
1004−</tr>
1013+---
1005−<tr>
1014+
1006−<td>Wide</td>
1015+- Wide
1007−<td>
1016+- ```hoon
1008−<pre>
1009−?!(p)
1017+ ?!(p)
1010−</pre>
1018+ ```
1011−</td>
1019+
1012−</tr>
1020+---
1013−<tr>
1021+
1014−<td>Irregular</td>
1022+- Irregular
1015−<td>
1023+- ```hoon
1016−<pre>
1017−!p
1024+ !p
1018−</pre>
1025+ ```
1019−</td>
1020−</tr>
1021−</table>
1026+{% /table %}
1022
1027
1023#### AST
1028#### AST
1024
1029
content/docs/hoon/reference/rune/zap.md+246−236
@@ -13,30 +13,31 @@ Produce the Hoon AST of an expression.
13
13
14Two arguments, fixed.
14Two arguments, fixed.
15
15
16−<table>
16+{% table %}
17+
18+- Form
17−<tr><th>Form</th><th>Syntax</th></tr>
19+- Syntax
18−<tr>
20+
21+---
22+
19−<td>Tall</td>
23+- Tall
20−<td>
24+- ```hoon
21−<pre>
22−!, p
25+ !, p
23−q
26+ q
24−</pre>
27+ ```
25−</td>
28+
26−</tr>
29+---
27−<tr>
30+
28−<td>Wide</td>
31+- Wide
29−<td>
32+- ```hoon
30−<pre>
31−!,(p q)
33+ !,(p q)
32−</pre>
34+ ```
33−</td>
35+
34−</tr>
36+---
35−<tr>
37+
36−<td>Irregular</td>
38+- Irregular
37−<td>None.</td>
39+- None.
38−</tr>
39−</table>
40+{% /table %}
40
41
41#### AST
42#### AST
42
43
@@ -71,29 +72,30 @@ Wrap a noun in its type (form a [`vase`](/docs/hoon/reference/stdlib/4o#vase)).
71
72
72One argument, fixed.
73One argument, fixed.
73
74
74−<table>
75+{% table %}
76+
77+- Form
75−<tr><th>Form</th><th>Syntax</th></tr>
78+- Syntax
76−<tr>
79+
80+---
81+
77−<td>Tall</td>
82+- Tall
78−<td>
83+- ```hoon
79−<pre>
80−!> p
84+ !> p
81−</pre>
85+ ```
82−</td>
86+
83−</tr>
87+---
84−<tr>
88+
85−<td>Wide</td>
89+- Wide
86−<td>
90+- ```hoon
87−<pre>
88−!>(p)
91+ !>(p)
89−</pre>
92+ ```
90−</td>
93+
91−</tr>
94+---
92−<tr>
95+
93−<td>Irregular</td>
96+- Irregular
94−<td>None.</td>
97+- None.
95−</tr>
96−</table>
98+{% /table %}
97
99
98#### AST
100#### AST
99
101
@@ -136,30 +138,31 @@ its type nests.
136
138
137Two arguments, fixed.
139Two arguments, fixed.
138
140
139−<table>
141+{% table %}
142+
143+- Form
140−<tr><th>Form</th><th>Syntax</th></tr>
144+- Syntax
141−<tr>
145+
146+---
147+
142−<td>Tall</td>
148+- Tall
143−<td>
149+- ```hoon
144−<pre>
145−!< p
150+ !< p
146−q
151+ q
147−</pre>
152+ ```
148−</td>
153+
149−</tr>
154+---
150−<tr>
155+
151−<td>Wide</td>
156+- Wide
152−<td>
157+- ```hoon
153−<pre>
154−!<(p q)
158+ !<(p q)
155−</pre>
159+ ```
156−</td>
160+
157−</tr>
161+---
158−<tr>
162+
159−<td>Irregular</td>
163+- Irregular
160−<td>None.</td>
164+- None.
161−</tr>
162−</table>
165+{% /table %}
163
166
164#### AST
167#### AST
165
168
@@ -200,30 +203,31 @@ Wrap a noun in its type (raw).
200
203
201Two arguments, fixed.
204Two arguments, fixed.
202
205
203−<table>
206+{% table %}
207+
208+- Form
204−<tr><th>Form</th><th>Syntax</th></tr>
209+- Syntax
205−<tr>
210+
211+---
212+
206−<td>Tall</td>
213+- Tall
207−<td>
214+- ```hoon
208−<pre>
209−!; p
215+ !; p
210−q
216+ q
211−</pre>
217+ ```
212−</td>
218+
213−</tr>
219+---
214−<tr>
220+
215−<td>Wide</td>
221+- Wide
216−<td>
222+- ```hoon
217−<pre>
218−!;(p q)
223+ !;(p q)
219−</pre>
224+ ```
220−</td>
225+
221−</tr>
226+---
222−<tr>
227+
223−<td>Irregular</td>
228+- Irregular
224−<td>None.</td>
229+- None.
225−</tr>
226−</table>
230+{% /table %}
227
231
228#### AST
232#### AST
229
233
@@ -265,29 +269,30 @@ Make the Nock formula for a Hoon expression.
265
269
266One argument, fixed.
270One argument, fixed.
267
271
268−<table>
272+{% table %}
273+
274+- Form
269−<tr><th>Form</th><th>Syntax</th></tr>
275+- Syntax
270−<tr>
276+
277+---
278+
271−<td>Tall</td>
279+- Tall
272−<td>
280+- ```hoon
273−<pre>
274−!= p
281+ != p
275−</pre>
282+ ```
276−</td>
283+
277−</tr>
284+---
278−<tr>
285+
279−<td>Wide</td>
286+- Wide
280−<td>
287+- ```hoon
281−<pre>
282−!=(p)
288+ !=(p)
283−</pre>
289+ ```
284−</td>
290+
285−</tr>
291+---
286−<tr>
292+
287−<td>Irregular</td>
293+- Irregular
288−<td>None.</td>
294+- None.
289−</tr>
290−</table>
295+{% /table %}
291
296
292#### AST
297#### AST
293
298
@@ -339,30 +344,31 @@ Restrict Hoon version.
339
344
340Two arguments, fixed.
345Two arguments, fixed.
341
346
342−<table>
347+{% table %}
348+
349+- Form
343−<tr><th>Form</th><th>Syntax</th></tr>
350+- Syntax
344−<tr>
351+
352+---
353+
345−<td>Tall</td>
354+- Tall
346−<td>
355+- ```hoon
347−<pre>
348−!? p
356+ !? p
349−q
357+ q
350−</pre>
358+ ```
351−</td>
359+
352−</tr>
360+---
353−<tr>
361+
354−<td>Wide</td>
362+- Wide
355−<td>
363+- ```hoon
356−<pre>
357−!?(p q)
364+ !?(p q)
358−</pre>
365+ ```
359−</td>
366+
360−</tr>
367+---
361−<tr>
368+
362−<td>Irregular</td>
369+- Irregular
363−<td>None.</td>
370+- None.
364−</tr>
365−</table>
371+{% /table %}
366
372
367#### AST
373#### AST
368
374
@@ -405,31 +411,32 @@ Branch on whether a wing exists.
405
411
406Three arguments, fixed.
412Three arguments, fixed.
407
413
408−<table>
414+{% table %}
415+
416+- Form
409−<tr><th>Form</th><th>Syntax</th></tr>
417+- Syntax
410−<tr>
418+
419+---
420+
411−<td>Tall</td>
421+- Tall
412−<td>
422+- ```hoon
413−<pre>
414−!@ p
423+ !@ p
415− q
424+ q
416−r
425+ r
417−</pre>
426+ ```
418−</td>
427+
419−</tr>
428+---
420−<tr>
429+
421−<td>Wide</td>
430+- Wide
422−<td>
431+- ```hoon
423−<pre>
424−!@(p q r)
432+ !@(p q r)
425−</pre>
433+ ```
426−</td>
434+
427−</tr>
435+---
428−<tr>
436+
429−<td>Irregular</td>
437+- Irregular
430−<td>None.</td>
438+- None.
431−</tr>
432−</table>
439+{% /table %}
433
440
434#### AST
441#### AST
435
442
@@ -464,29 +471,30 @@ Crash.
464
471
465No arguments.
472No arguments.
466
473
467−<table>
474+{% table %}
475+
476+- Form
468−<tr><th>Form</th><th>Syntax</th></tr>
477+- Syntax
469−<tr>
478+
479+---
480+
470−<td>Tall</td>
481+- Tall
471−<td>
482+- ```hoon
472−<pre>
473−!!
483+ !!
474−</pre>
484+ ```
475−</td>
485+
476−</tr>
486+---
477−<tr>
487+
478−<td>Wide</td>
488+- Wide
479−<td>
489+- ```
480−<pre>
481−!!
490+ !!
482−</pre>
491+ ```
483−</td>
492+
484−</tr>
493+---
485−<tr>
494+
486−<td>Irregular</td>
495+- Irregular
487−<td>None.</td>
496+- None.
488−</tr>
489−</table>
497+{% /table %}
490
498
491#### AST
499#### AST
492
500
@@ -519,29 +527,30 @@ Turn on stack trace.
519
527
520One argument, fixed
528One argument, fixed
521
529
522−<table>
530+{% table %}
531+
532+- Form
523−<tr><th>Form</th><th>Syntax</th></tr>
533+- Syntax
524−<tr>
534+
535+---
536+
525−<td>Tall</td>
537+- Tall
526−<td>
538+- ```hoon
527−<pre>
528−!: p
539+ !: p
529−</pre>
540+ ```
530−</td>
541+
531−</tr>
542+---
532−<tr>
543+
533−<td>Wide</td>
544+- Wide
534−<td>
545+- ```hoon
535−<pre>
536−!:(p)
546+ !:(p)
537−</pre>
547+ ```
538−</td>
548+
539−</tr>
549+---
540−<tr>
550+
541−<td>Irregular</td>
551+- Irregular
542−<td>None.</td>
552+- None.
543−</tr>
544−</table>
553+{% /table %}
545
554
546#### Produces
555#### Produces
547
556
@@ -574,29 +583,30 @@ Turn off stack trace for a subexpression `p`
574
583
575One argument, fixed.
584One argument, fixed.
576
585
577−<table>
586+{% table %}
587+
588+- Form
578−<tr><th>Form</th><th>Syntax</th></tr>
589+- Syntax
579−<tr>
590+
591+---
592+
580−<td>Tall</td>
593+- Tall
581−<td>
594+- ```hoon
582−<pre>
583−!. p
595+ !. p
584−</pre>
596+ ```
585−</td>
597+
586−</tr>
598+---
587−<tr>
599+
588−<td>Wide</td>
600+- Wide
589−<td>
601+- ```hoon
590−<pre>
591−!.(p)
602+ !.(p)
592−</pre>
603+ ```
593−</td>
604+
594−</tr>
605+---
595−<tr>
606+
596−<td>Irregular</td>
607+- Irregular
597−<td>None.</td>
608+- None.
598−</tr>
599−</table>
609+{% /table %}
600
610
601#### Produces
611#### Produces
602
612
content/docs/hoon/reference/stdlib/2b.md+7−3
@@ -789,6 +789,7 @@ If you check the definition of `+mul`, you'll see that it also utilizes this
789pattern.
789pattern.
790
790
791We can check explicitly what sequence of operations `+reel` performs like this:
791We can check explicitly what sequence of operations `+reel` performs like this:
792+
792```
793```
793> =f |: [l='e_l' r='e_r']
794> =f |: [l='e_l' r='e_r']
794 ^- @t
795 ^- @t
@@ -797,7 +798,6 @@ We can check explicitly what sequence of operations `+reel` performs like this:
797'(a*(b*(c*(d*(e*e_r)))))'
798'(a*(b*(c*(d*(e*e_r)))))'
798```
799```
799
800
800−
801---
801---
802
802
803## `++roll`
803## `++roll`
@@ -876,10 +876,12 @@ We can fix this with `|:`:
876> (roll `(list @)`~[1 2 3 4] |:([a=1 b=1] (mul a b)))
876> (roll `(list @)`~[1 2 3 4] |:([a=1 b=1] (mul a b)))
87724
87724
878```
878```
879+
879If you check the definition of `+mul`, you'll see that it also utilizes this
880If you check the definition of `+mul`, you'll see that it also utilizes this
880pattern.
881pattern.
881
882
882We can check explicitly what sequence of operations `+roll` performs like this:
883We can check explicitly what sequence of operations `+roll` performs like this:
884+
883```
885```
884> =f |: [l='e_l' r='e_r']
886> =f |: [l='e_l' r='e_r']
885 ^- @t
887 ^- @t
@@ -887,7 +889,9 @@ We can check explicitly what sequence of operations `+roll` performs like this:
887> (roll "abcde" f)
889> (roll "abcde" f)
888'(e*(d*(c*(b*(a*e_r)))))
890'(e*(d*(c*(b*(a*e_r)))))
889```
891```
892+
890This is in contrast to what one might expect:
893This is in contrast to what one might expect:
894+
891```
895```
892> =foldl
896> =foldl
893 |* [l=(list) f=$-([* *] *)]
897 |* [l=(list) f=$-([* *] *)]
@@ -1307,7 +1311,7 @@ A list
1307
1311
1308---
1312---
1309
1313
1310−## `++spin` {#spin}
1314+## `++spin` {% #spin %}
1311
1315
1312Gate to list, with state
1316Gate to list, with state
1313
1317
@@ -1375,7 +1379,7 @@ is the continuation of the RNG.
1375
1379
1376---
1380---
1377
1381
1378−## `++spun` {#spun}
1382+## `++spun` {% #spun %}
1379
1383
1380Gate to list, with state
1384Gate to list, with state
1381
1385
content/docs/hoon/reference/stdlib/2e.md+1−1
@@ -4,7 +4,7 @@ weight = 8
4template = "doc.html"
4template = "doc.html"
5+++
5+++
6
6
7−## `++mug` {#mug}
7+## `++mug` {% #mug %}
8
8
9murmur3 scrambler
9murmur3 scrambler
10
10
content/docs/hoon/reference/stdlib/2i.md+6−5
@@ -825,12 +825,13 @@ A set.
825
825
826#### Examples
826#### Examples
827
827
828−```
828+{% customFence %}
829−> =a `(map @tas @)`(malt (limo ~[a+1 b+2 c+3 d+4]))
830
829
830+\> =a `(map @tas @)`(malt (limo ~[a+1 b+2 c+3 d+4]))
831+
831−> ~(key by a)
832+\> ~(key by a)
832−{%b %d %a %c}
833+{&#x7B;&#x25;b %d %a %c}
833−```
834+{% /customFence %}
834
835
835---
836---
836
837
content/docs/hoon/reference/stdlib/2n.md+1−1
@@ -109,7 +109,7 @@ This is the inverse of [`++cork`](#cork).
109
109
110---
110---
111
111
112−## `++curr` {#curry}
112+## `++curr` {% #curry %}
113
113
114Right curry
114Right curry
115
115
content/docs/hoon/reference/stdlib/2p.md+2−2
@@ -4,7 +4,7 @@ weight = 19
4template = "doc.html"
4template = "doc.html"
5+++
5+++
6
6
7−## `++cue` {#cue}
7+## `++cue` {% #cue %}
8
8
9Unpack atom to noun
9Unpack atom to noun
10
10
@@ -54,7 +54,7 @@ A noun.
54
54
55---
55---
56
56
57−## `++jam` {#jam}
57+## `++jam` {% #jam %}
58
58
59Pack noun to atom
59Pack noun to atom
60
60
content/docs/hoon/reference/stdlib/4g.md+8−8
@@ -202,14 +202,14 @@ Either a `tape` or a crash.
202
202
203#### Source
203#### Source
204
204
205−```hoon
205+{% customFence %}
206−++ scan |* [los=tape sab=rule]
206+++ scan |\* [los=tape sab=rule]
207− =+ vex=((full sab) [[1 1] los])
207+=+ vex=((full sab) [[1 1] los])
208− ?~ q.vex
208+?~ q.vex
209− ~_ (show [%m '{%d %d}'] p.p.vex q.p.vex ~)
209+~_ (show [%m '&#x7B;&#x25;d %d}'] p.p.vex q.p.vex ~)
210− ~_(leaf+"syntax error" !!)
210+~_(leaf+"syntax error" !!)
211− p.u.q.vex
211+p.u.q.vex
212−```
212+{% /customFence %}
213
213
214#### Examples
214#### Examples
215
215
content/docs/hoon/reference/stdlib/table-of-contents.md+1793−1793
@@ -13,1297 +13,1297 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
13
13
14### a
14### a
15
15
16−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#ab' title="Primitive parser engine"><code>++ab</code></a>
16+[`++ab`](/docs/hoon/reference/stdlib/4j/#ab)
17−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#absfl' title="Absolute value"><code>++abs:fl</code></a>
17+[`++abs:fl`](/docs/hoon/reference/stdlib/3b/#absfl)
18−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#abssi' title="Absolute value (signed integer)"><code>++abs:si</code></a>
18+[`++abs:si`](/docs/hoon/reference/stdlib/3a/#abssi)
19−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#abel' title="Original sin: type"><code>+$abel</code></a>
19+[`+$abel`](/docs/hoon/reference/stdlib/4o/#abel)
20−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#ace' title="Parse space"><code>++ace</code></a>
20+[`++ace`](/docs/hoon/reference/stdlib/4h/#ace)
21−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#a-coco' title="Render decimal"><code>++a-co:co</code></a>
21+[`++a-co:co`](/docs/hoon/reference/stdlib/4k/#a-coco)
22−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#add' title="Add"><code>++add</code></a>
22+[`++add`](/docs/hoon/reference/stdlib/1a/#add)
23−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addff' title="Add (floating point)"><code>++add:ff</code></a>
23+[`++add:ff`](/docs/hoon/reference/stdlib/3b/#addff)
24−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addfl' title="Add (with exact/rounded flag)"><code>++add:fl</code></a>
24+[`++add:fl`](/docs/hoon/reference/stdlib/3b/#addfl)
25−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#addja' title="Prepend to list"><code>++add:ja</code></a>
25+[`++add:ja`](/docs/hoon/reference/stdlib/2j/#addja)
26−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addrd' title="Add (doubleprecision float)"><code>++add:rd</code></a>
26+[`++add:rd`](/docs/hoon/reference/stdlib/3b/#addrd)
27−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addrh' title="Add (halfprecision float)"><code>++add:rh</code></a>
27+[`++add:rh`](/docs/hoon/reference/stdlib/3b/#addrh)
28−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addrs' title="Add (singleprecision float)"><code>++add:rs</code></a>
28+[`++add:rs`](/docs/hoon/reference/stdlib/3b/#addrs)
29−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addrq' title="Add (quadprecision float)"><code>++add:rq</code></a>
29+[`++add:rq`](/docs/hoon/reference/stdlib/3b/#addrq)
30−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#aftr' title="Pair after"><code>++aftr</code></a>
30+[`++aftr`](/docs/hoon/reference/stdlib/2n/#aftr)
31−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#ag' title="Toplevel atom parser engine"><code>++ag</code></a>
31+[`++ag`](/docs/hoon/reference/stdlib/4j/#ag)
32−<a class="tooltip" href='/docs/hoon/reference/stdlib/5b/#ah' title="Tiki engine"><code>++ah</code></a>
32+[`++ah`](/docs/hoon/reference/stdlib/5b/#ah)
33−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#alas' title="Alias list"><code>+$alas</code></a>
33+[`+$alas`](/docs/hoon/reference/stdlib/4o/#alas)
34−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#alf' title="Parse alphabetic characters"><code>++alf</code></a>
34+[`++alf`](/docs/hoon/reference/stdlib/4i/#alf)
35−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#allby' title="Logical AND (map and wet gate)"><code>++all:by</code></a>
35+[`++all:by`](/docs/hoon/reference/stdlib/2i/#allby)
36−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#allin' title="Logical AND (set and wet gate)"><code>++all:in</code></a>
36+[`++all:in`](/docs/hoon/reference/stdlib/2h/#allin)
37−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#aln' title="Parse alphanumeric characters"><code>++aln</code></a>
37+[`++aln`](/docs/hoon/reference/stdlib/4i/#aln)
38−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#alp' title="Parse alphanumeric characters and "><code>++alp</code></a>
38+[`++alp`](/docs/hoon/reference/stdlib/4i/#alp)
39−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#anyby' title="Logical OR (map and wet gate)"><code>++any:by</code></a>
39+[`++any:by`](/docs/hoon/reference/stdlib/2i/#anyby)
40−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#anyin' title="Logical OR (set and gate)"><code>++any:in</code></a>
40+[`++any:in`](/docs/hoon/reference/stdlib/2h/#anyin)
41−<a class="tooltip" href='/docs/hoon/reference/stdlib/2f/#aor' title="Alphabetical order"><code>++aor</code></a>
41+[`++aor`](/docs/hoon/reference/stdlib/2f/#aor)
42−<a class="tooltip" href='/docs/hoon/reference/stdlib/5b/#ap' title="Hoon engine"><code>++ap</code></a>
42+[`++ap`](/docs/hoon/reference/stdlib/5b/#ap)
43−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#apeag' title="Parse 0 or rule"><code>++ape:ag</code></a>
43+[`++ape:ag`](/docs/hoon/reference/stdlib/4j/#apeag)
44−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#aptby' title="Check correctness (map)"><code>++apt:by</code></a>
44+[`++apt:by`](/docs/hoon/reference/stdlib/2i/#aptby)
45−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#aptin' title="Check correctness (set)"><code>++apt:in</code></a>
45+[`++apt:in`](/docs/hoon/reference/stdlib/2h/#aptin)
46−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#aptto' title="Check correctness of queue"><code>++apt:to</code></a>
46+[`++apt:to`](/docs/hoon/reference/stdlib/2k/#aptto)
47−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#at' title="Basic printing"><code>++at</code></a>
47+[`++at`](/docs/hoon/reference/stdlib/4b/#at)
48−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#atom' title="Just an atom"><code>+$atom</code></a>
48+[`+$atom`](/docs/hoon/reference/stdlib/4o/#atom)
49−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#aura' title="'Type' of atom"><code>+$aura</code></a>
49+[`+$aura`](/docs/hoon/reference/stdlib/4o/#aura)
50−<a class="tooltip" href='/docs/hoon/reference/stdlib/5b/#ax' title="Spec engine"><code>++ax</code></a>
50+[`++ax`](/docs/hoon/reference/stdlib/5b/#ax)
51−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#axis' title="Tree address"><code>+$axis</code></a>
51+[`+$axis`](/docs/hoon/reference/stdlib/2q/#axis)
52
52
53### b
53### b
54
54
55−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#bake' title="Convert wet gate to dry gate"><code>++bake</code></a>
55+[`++bake`](/docs/hoon/reference/stdlib/2b/#bake)
56−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#balto' title="Balance queue"><code>++bal:to</code></a>
56+[`++bal:to`](/docs/hoon/reference/stdlib/2k/#balto)
57−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#bar' title="Parse | (bar)"><code>++bar</code></a>
57+[`++bar`](/docs/hoon/reference/stdlib/4h/#bar)
58−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#bas' title="Parse \ (bas)"><code>++bas</code></a>
58+[`++bas`](/docs/hoon/reference/stdlib/4h/#bas)
59−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#base' title="Base type"><code>+$base</code></a>
59+[`+$base`](/docs/hoon/reference/stdlib/4o/#base)
60−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#bass' title="Parser modifier (LSBordered ++list as atom of ++base)"><code>++bass</code></a>
60+[`++bass`](/docs/hoon/reference/stdlib/4f/#bass)
61−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#bayag' title="Parses binary number"><code>++bay:ag</code></a>
62−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#bean' title="Boolean"><code>+$bean</code></a>
61+[`++bay:ag`](/docs/hoon/reference/stdlib/4j/#bayag)
63−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#beerhoot' title="Simple embed"><code>+$beer:hoot</code></a>
62+[`+$bean`](/docs/hoon/reference/stdlib/2q/#bean)
63+[`+$beer:hoot`](/docs/hoon/reference/stdlib/4o/#beerhoot)
64−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#bend' title="Conditional composer"><code>++bend</code></a>
64+[`++bend`](/docs/hoon/reference/stdlib/4e/#bend)
65−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#bet' title="Parse hep and lus axis syntax"><code>++bet</code></a>
65+[`++bet`](/docs/hoon/reference/stdlib/4i/#bet)
66−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#bex' title="Binary exponent"><code>++bex</code></a>
66+[`++bex`](/docs/hoon/reference/stdlib/2c/#bex)
67−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bifff' title="Converts from fn to @r"><code>++bif:ff</code></a>
67+[`++bif:ff`](/docs/hoon/reference/stdlib/3b/#bifff)
68−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#bifby' title="Bifurcate map"><code>++bif:by</code></a>
68+[`++bif:by`](/docs/hoon/reference/stdlib/2i/#bifby)
69−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#bifin' title="Bifurcate set"><code>++bif:in</code></a>
69+[`++bif:in`](/docs/hoon/reference/stdlib/2h/#bifin)
70−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#biff' title="Unit as argument"><code>++biff</code></a>
70+[`++biff`](/docs/hoon/reference/stdlib/2a/#biff)
71−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#bin' title="Binary to atom"><code>++bin</code></a>
71+[`++bin`](/docs/hoon/reference/stdlib/4i/#bin)
72−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#bind' title="Nonunit function to unit, producing unit"><code>++bind</code></a>
72+[`++bind`](/docs/hoon/reference/stdlib/2a/#bind)
73−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#bipag' title="Parse IPv6"><code>++bip:ag</code></a>
73+[`++bip:ag`](/docs/hoon/reference/stdlib/4j/#bipag)
74−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitff' title="fn to @r with rounding"><code>++bit:ff</code></a>
74+[`++bit:ff`](/docs/hoon/reference/stdlib/3b/#bitff)
75−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitrd' title="fn to doubleprecision binary float"><code>++bit:rd</code></a>
76−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitrh' title="fn to halfprecision float"><code>++bit:rh</code></a>
75+[`++bit:rd`](/docs/hoon/reference/stdlib/3b/#bitrd)
76+[`++bit:rh`](/docs/hoon/reference/stdlib/3b/#bitrh)
77−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitrs' title="fn to singleprecision float"><code>++bit:rs</code></a>
77+[`++bit:rs`](/docs/hoon/reference/stdlib/3b/#bitrs)
78−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitrq' title="fn to quadprecision float"><code>++bit:rq</code></a>
78+[`++bit:rq`](/docs/hoon/reference/stdlib/3b/#bitrq)
79−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#bite' title="Atom slice specificier"><code>$bite</code></a>
80−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#bixab' title="Parse hex pair"><code>++bix:ab</code></a>
79+[`$bite`](/docs/hoon/reference/stdlib/1c/#bite)
81−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#biskso' title="Parse auraatom pair"><code>++bisk:so</code></a>
80+[`++bix:ab`](/docs/hoon/reference/stdlib/4j/#bixab)
81+[`++bisk:so`](/docs/hoon/reference/stdlib/4l/#biskso)
82−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#block' title="Abstract identity of resource awaited"><code>+$block</code></a>
82+[`+$block`](/docs/hoon/reference/stdlib/4o/#block)
83−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#bloq' title="Blocksize"><code>$bloq</code></a>
83+[`$bloq`](/docs/hoon/reference/stdlib/1c/#bloq)
84−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#bond' title="Replace null"><code>++bond</code></a>
84+[`++bond`](/docs/hoon/reference/stdlib/2a/#bond)
85−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#bool' title="Make loobean (compiler utility)"><code>++bool</code></a>
85+[`++bool`](/docs/hoon/reference/stdlib/5a/#bool)
86−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#boss' title="Parser modifier: LSB"><code>++boss</code></a>
86+[`++boss`](/docs/hoon/reference/stdlib/4f/#boss)
87−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#both' title="Group unit values into pair"><code>++both</code></a>
87+[`++both`](/docs/hoon/reference/stdlib/2a/#both)
88−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#buc' title="Parse $ (buc)"><code>++buc</code></a>
88+[`++buc`](/docs/hoon/reference/stdlib/4h/#buc)
89−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#but' title="Parse binary digit"><code>++but</code></a>
89+[`++but`](/docs/hoon/reference/stdlib/4i/#but)
90−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#byts' title="bytes, LSB first"><code>+$byts</code></a>
90+[`+$byts`](/docs/hoon/reference/stdlib/2q/#byts)
91
91
92### c
92### c
93
93
94−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#cne' title="Render base58check"><code>++c:ne</code></a>
94+[`++c:ne`](/docs/hoon/reference/stdlib/4j/#cne)
95−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#cab' title="Parse _ (cab)"><code>++cab</code></a>
95+[`++cab`](/docs/hoon/reference/stdlib/4h/#cab)
96−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#cain' title="Tank pretty-print"><code>++cain</code></a>
96+[`++cain`](/docs/hoon/reference/stdlib/5c/#cain)
97−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#can' title="Assemble"><code>++can</code></a>
97+[`++can`](/docs/hoon/reference/stdlib/2c/#can)
98−<a class="tooltip" href='/docs/hoon/reference/stdlib/1b/#cap' title="Tree head"><code>++cap</code></a>
98+[`++cap`](/docs/hoon/reference/stdlib/1b/#cap)
99−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#cass' title="To lowercase"><code>++cass</code></a>
99+[`++cass`](/docs/hoon/reference/stdlib/4b/#cass)
100−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#cat' title="Concatenate"><code>++cat</code></a>
100+[`++cat`](/docs/hoon/reference/stdlib/2c/#cat)
101−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#c-coco' title="Render base58check"><code>++c-co:co</code></a>
101+[`++c-co:co`](/docs/hoon/reference/stdlib/4k/#c-coco)
102−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#cell' title="Make %cell type (compiler utility)"><code>++cell</code></a>
102+[`++cell`](/docs/hoon/reference/stdlib/5a/#cell)
103−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#cen' title="Parse % (cen)"><code>++cen</code></a>
103+[`++cen`](/docs/hoon/reference/stdlib/4h/#cen)
104−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#cetyo' title="Days in a century"><code>++cet:yo</code></a>
104+[`++cet:yo`](/docs/hoon/reference/stdlib/3c/#cetyo)
105−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#chafa' title="Decode base58check character"><code>++cha:fa</code></a>
105+[`++cha:fa`](/docs/hoon/reference/stdlib/4a/#chafa)
106−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#char' title="Character"><code>+$char</code></a>
106+[`+$char`](/docs/hoon/reference/stdlib/2q/#char)
107−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#chum' title="Jet hint information"><code>+$chum</code></a>
107+[`+$chum`](/docs/hoon/reference/stdlib/4o/#chum)
108−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#cit' title="Octal digit"><code>++cit</code></a>
108+[`++cit`](/docs/hoon/reference/stdlib/4i/#cit)
109−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#clap' title="Combine two units with function"><code>++clap</code></a>
109+[`++clap`](/docs/hoon/reference/stdlib/2a/#clap)
110−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#clef' title="Compose two units with function"><code>++clef</code></a>
110+[`++clef`](/docs/hoon/reference/stdlib/2a/#clef)
111−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#cmpsi' title="Compare (signed integer)"><code>++cmp:si</code></a>
111+[`++cmp:si`](/docs/hoon/reference/stdlib/3a/#cmpsi)
112−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#co' title="Literal rendering engine"><code>++co</code></a>
112+[`++co`](/docs/hoon/reference/stdlib/4k/#co)
113−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#coil' title="Tuple of core information"><code>+$coil</code></a>
113+[`+$coil`](/docs/hoon/reference/stdlib/4o/#coil)
114−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#coin' title="Nounliteral syntax cases"><code>+$coin</code></a>
114+[`+$coin`](/docs/hoon/reference/stdlib/3g/#coin)
115−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#col' title="Parse : (col)"><code>++col</code></a>
115+[`++col`](/docs/hoon/reference/stdlib/4h/#col)
116−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#cold' title="Replace with constant"><code>++cold</code></a>
116+[`++cold`](/docs/hoon/reference/stdlib/4f/#cold)
117−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#com' title="Parse , (com)"><code>++com</code></a>
117+[`++com`](/docs/hoon/reference/stdlib/4h/#com)
118−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#comb' title="Combine two formulas (compiler utility)"><code>++comb</code></a>
118+[`++comb`](/docs/hoon/reference/stdlib/5a/#comb)
119−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#comp' title="Arbitrary compose"><code>++comp</code></a>
119+[`++comp`](/docs/hoon/reference/stdlib/4e/#comp)
120−<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#con' title="Binary OR"><code>++con</code></a>
120+[`++con`](/docs/hoon/reference/stdlib/2d/#con)
121−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#cond' title="?: compile (compiler utility)"><code>++cond</code></a>
121+[`++cond`](/docs/hoon/reference/stdlib/5a/#cond)
122−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#cons' title="Make formula cell (compiler utility)"><code>++cons</code></a>
122+[`++cons`](/docs/hoon/reference/stdlib/5a/#cons)
123−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#cook' title="Apply gate"><code>++cook</code></a>
123+[`++cook`](/docs/hoon/reference/stdlib/4f/#cook)
124−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#cord' title="UTF8 text"><code>+$cord</code></a>
124+[`+$cord`](/docs/hoon/reference/stdlib/2q/#cord)
125−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#core' title="Make %core type (compiler utility)"><code>++core</code></a>
125+[`++core`](/docs/hoon/reference/stdlib/5a/#core)
126−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#cork' title="Compose forward"><code>++cork</code></a>
126+[`++cork`](/docs/hoon/reference/stdlib/2n/#cork)
127−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#corl' title="Compose backward"><code>++corl</code></a>
127+[`++corl`](/docs/hoon/reference/stdlib/2n/#corl)
128−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#cove' title="Extract [0 *] axis (compiler utility)"><code>++cove</code></a>
128+[`++cove`](/docs/hoon/reference/stdlib/5a/#cove)
129−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#crib' title="Summary and details"><code>+$crib</code></a>
129+[`+$crib`](/docs/hoon/reference/stdlib/4o/#crib)
130−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#crip' title="Tape to cord"><code>++crip</code></a>
130+[`++crip`](/docs/hoon/reference/stdlib/4b/#crip)
131−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#crubso' title="Parse @da, @dr, @p, @t"><code>++crub:so</code></a>
131+[`++crub:so`](/docs/hoon/reference/stdlib/4l/#crubso)
132−<a class="tooltip" href='/docs/hoon/reference/stdlib/2p/#cue' title="Unpack atom to noun"><code>++cue</code></a>
132+[`++cue`](/docs/hoon/reference/stdlib/2p/#cue)
133−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#curr' title="Rightcurry a gate"><code>++curr</code></a>
133+[`++curr`](/docs/hoon/reference/stdlib/2n/#curr)
134−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#cury' title="Curry left a gate"><code>++cury</code></a>
134+[`++cury`](/docs/hoon/reference/stdlib/2n/#cury)
135−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#cuss' title="To uppercase"><code>++cuss</code></a>
135+[`++cuss`](/docs/hoon/reference/stdlib/4b/#cuss)
136−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#cut' title="Slice"><code>++cut</code></a>
136+[`++cut`](/docs/hoon/reference/stdlib/2c/#cut)
137
137
138### d
138### d
139
139
140−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#dne' title="Render decimal"><code>++d:ne</code></a>
140+[`++d:ne`](/docs/hoon/reference/stdlib/4j/#dne)
141−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#date' title="Parsed date"><code>+$date</code></a>
141+[`+$date`](/docs/hoon/reference/stdlib/2q/#date)
142−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#dayyo' title="Seconds in day"><code>++day:yo</code></a>
142+[`++day:yo`](/docs/hoon/reference/stdlib/3c/#dayyo)
143−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#d-coco' title="Render decimal with min length"><code>++d-co:co</code></a>
143+[`++d-co:co`](/docs/hoon/reference/stdlib/4k/#d-coco)
144−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#dec' title="Decrement"><code>++dec</code></a>
144+[`++dec`](/docs/hoon/reference/stdlib/1a/#dec)
145−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#delby' title="Delete (map)"><code>++del:by</code></a>
145+[`++del:by`](/docs/hoon/reference/stdlib/2i/#delby)
146−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#delin' title="Delete (set)"><code>++del:in</code></a>
146+[`++del:in`](/docs/hoon/reference/stdlib/2h/#delin)
147−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#delju' title="Delete (jug)"><code>++del:ju</code></a>
147+[`++del:ju`](/docs/hoon/reference/stdlib/2j/#delju)
148−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dem' title="Decimal to atom"><code>++dem</code></a>
148+[`++dem`](/docs/hoon/reference/stdlib/4i/#dem)
149−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#demag' title="Parse decmal with dots"><code>++dem:ag</code></a>
149+[`++dem:ag`](/docs/hoon/reference/stdlib/4j/#demag)
150−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#denfa' title="Decode base58check"><code>++den:fa</code></a>
150+[`++den:fa`](/docs/hoon/reference/stdlib/4a/#denfa)
151−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#denfl' title="Denormalizes (floating point)"><code>++den:fl</code></a>
151+[`++den:fl`](/docs/hoon/reference/stdlib/3b/#denfl)
152−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#depto' title="Maximum depth (queue)"><code>++dep:to</code></a>
152+[`++dep:to`](/docs/hoon/reference/stdlib/2k/#depto)
153−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#difby' title="Difference between maps"><code>++dif:by</code></a>
153+[`++dif:by`](/docs/hoon/reference/stdlib/2i/#difby)
154−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#diffe' title="Difference between atoms (modular basis)"><code>++dif:fe</code></a>
154+[`++dif:fe`](/docs/hoon/reference/stdlib/2c/#diffe)
155<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#diffo' title='Subtraction (modular base)'><code>++dif:fo</code></a>
155<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#diffo' title='Subtraction (modular base)'><code>++dif:fo</code></a>
156<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#difin' title='Difference (set)'><code>++dif:in</code></a>
156<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#difin' title='Difference (set)'><code>++dif:in</code></a>
157−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#difsi' title="Subtraction (signed integer)"><code>++dif:si</code></a>
157+[`++dif:si`](/docs/hoon/reference/stdlib/3a/#difsi)
158−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#digby' title="Address of key (map)"><code>++dig:by</code></a>
158+[`++dig:by`](/docs/hoon/reference/stdlib/2i/#digby)
159−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#digin' title="Address of a in set"><code>++dig:in</code></a>
159+[`++dig:in`](/docs/hoon/reference/stdlib/2h/#digin)
160−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#dimag' title="Parse decimal number"><code>++dim:ag</code></a>
160+[`++dim:ag`](/docs/hoon/reference/stdlib/4j/#dimag)
161−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#dime' title="Auraatom pair"><code>+$dime</code></a>
161+[`+$dime`](/docs/hoon/reference/stdlib/3g/#dime)
162−<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#dis' title="Binary AND (atoms)"><code>++dis</code></a>
162+[`++dis`](/docs/hoon/reference/stdlib/2d/#dis)
163−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dit' title="Decimal digit"><code>++dit</code></a>
163+[`++dit`](/docs/hoon/reference/stdlib/4i/#dit)
164−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#div' title="Divide"><code>++div</code></a>
164+[`++div`](/docs/hoon/reference/stdlib/1a/#div)
165−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divff' title="Divide (IEEE float)"><code>++div:ff</code></a>
165+[`++div:ff`](/docs/hoon/reference/stdlib/3b/#divff)
166−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divfl' title="Divide (signed and unsigned integer cell)"><code>++div:fl</code></a>
166+[`++div:fl`](/docs/hoon/reference/stdlib/3b/#divfl)
167−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divrd' title="Double precision float"><code>++div:rd</code></a>
167+[`++div:rd`](/docs/hoon/reference/stdlib/3b/#divrd)
168−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divrh' title="Divide (halfprecision float)"><code>++div:rh</code></a>
168+[`++div:rh`](/docs/hoon/reference/stdlib/3b/#divrh)
169−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divrs' title="Divide (singleprecision float)"><code>++div:rs</code></a>
169+[`++div:rs`](/docs/hoon/reference/stdlib/3b/#divrs)
170−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divrq' title="Divide (quadprecision float)"><code>++div:rq</code></a>
170+[`++div:rq`](/docs/hoon/reference/stdlib/3b/#divrq)
171−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dof' title="Hep & optional gap"><code>++dof</code></a>
171+[`++dof`](/docs/hoon/reference/stdlib/4i/#dof)
172−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dog' title="Optional gap"><code>++dog</code></a>
172+[`++dog`](/docs/hoon/reference/stdlib/4i/#dog)
173−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#doh' title="@p separator"><code>++doh</code></a>
173+[`++doh`](/docs/hoon/reference/stdlib/4i/#doh)
174−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#doq' title="Parse double quote"><code>++doq</code></a>
174+[`++doq`](/docs/hoon/reference/stdlib/4h/#doq)
175−<a class="tooltip" href='/docs/hoon/reference/stdlib/2f/#dor' title="Depth order"><code>++dor</code></a>
175+[`++dor`](/docs/hoon/reference/stdlib/2f/#dor)
176−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#doss' title="Profiling"><code>+$doss</code></a>
176+[`+$doss`](/docs/hoon/reference/stdlib/4o/#doss)
177−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#dot' title="Parse period"><code>++dot</code></a>
177+[`++dot`](/docs/hoon/reference/stdlib/4h/#dot)
178−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgff' title="@r to decimal float"><code>++drg:ff</code></a>
178+[`++drg:ff`](/docs/hoon/reference/stdlib/3b/#drgff)
179−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgfl' title="Get printable decimal (signed and unsigned integer cell)"><code>++drg:fl</code></a>
179+[`++drg:fl`](/docs/hoon/reference/stdlib/3b/#drgfl)
180−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgrd' title="@rd to decimal float"><code>++drg:rd</code></a>
180+[`++drg:rd`](/docs/hoon/reference/stdlib/3b/#drgrd)
181−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgrh' title="@rh to decimal float"><code>++drg:rh</code></a>
181+[`++drg:rh`](/docs/hoon/reference/stdlib/3b/#drgrh)
182−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgrs' title="@rs to decimal float"><code>++drg:rs</code></a>
182+[`++drg:rs`](/docs/hoon/reference/stdlib/3b/#drgrs)
183−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgrq' title="@rq to decimal float"><code>++drg:rq</code></a>
183+[`++drg:rq`](/docs/hoon/reference/stdlib/3b/#drgrq)
184−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#drop' title="Unit to list"><code>++drop</code></a>
184+[`++drop`](/docs/hoon/reference/stdlib/2a/#drop)
185−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#dulsi' title="Modulus (signed integer)"><code>++dul:si</code></a>
185+[`++dul:si`](/docs/hoon/reference/stdlib/3a/#dulsi)
186−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#dumag' title="Parse decimal with leading zero"><code>++dum:ag</code></a>
186+[`++dum:ag`](/docs/hoon/reference/stdlib/4j/#dumag)
187−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dun' title=" to ~"><code>++dun</code></a>
187+[`++dun`](/docs/hoon/reference/stdlib/4i/#dun)
188−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#duz' title="== to ~"><code>++duz</code></a>
188+[`++duz`](/docs/hoon/reference/stdlib/4i/#duz)
189−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#dvr' title="Divide (with remainder)"><code>++dvr</code></a>
189+[`++dvr`](/docs/hoon/reference/stdlib/1a/#dvr)
190
190
191### e
191### e
192
192
193−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#eadfl' title="Exact add"><code>++ead:fl</code></a>
193+[`++ead:fl`](/docs/hoon/reference/stdlib/3b/#eadfl)
194−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#each' title="Mold of fork between two types"><code>++each</code></a>
194+[`++each`](/docs/hoon/reference/stdlib/1c/#each)
195−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#easy' title="Always parse"><code>++easy</code></a>
195+[`++easy`](/docs/hoon/reference/stdlib/4f/#easy)
196−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#ed-coco' title="Format with decimal place"><code>++ed-co:co</code></a>
196+[`++ed-co:co`](/docs/hoon/reference/stdlib/4k/#ed-coco)
197−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#edge' title="Parsing location metadata"><code>+$edge</code></a>
197+[`+$edge`](/docs/hoon/reference/stdlib/3g/#edge)
198−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#effob' title="murmur3-based pseudorandom function"><code>++eff:ob</code></a>
198+[`++eff:ob`](/docs/hoon/reference/stdlib/3f/#effob)
199−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#egcd' title="Extended Euclidean algorithm"><code>++egcd</code></a>
199+[`++egcd`](/docs/hoon/reference/stdlib/3a/#egcd)
200−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#em-coco' title="Render in numeric base"><code>++em-co:co</code></a>
200+[`++em-co:co`](/docs/hoon/reference/stdlib/4k/#em-coco)
201−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#emnfl' title="Minimum exponent"><code>++emn:fl</code></a>
202−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#emufl' title="Exact multiply"><code>++emu:fl</code></a>
201+[`++emn:fl`](/docs/hoon/reference/stdlib/3b/#emnfl)
203−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#emxfl' title="Maximum exponent"><code>++emx:fl</code></a>
202+[`++emu:fl`](/docs/hoon/reference/stdlib/3b/#emufl)
203+[`++emx:fl`](/docs/hoon/reference/stdlib/3b/#emxfl)
204−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#encfa' title="Encode base58check"><code>++enc:fa</code></a>
204+[`++enc:fa`](/docs/hoon/reference/stdlib/4a/#encfa)
205−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#end' title="Tail"><code>++end</code></a>
205+[`++end`](/docs/hoon/reference/stdlib/2c/#end)
206−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equff' title="Equals (IEEE float)"><code>++equ:ff</code></a>
206+[`++equ:ff`](/docs/hoon/reference/stdlib/3b/#equff)
207−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equfl' title="Equals (signed and unsigned integer cell)"><code>++equ:fl</code></a>
207+[`++equ:fl`](/docs/hoon/reference/stdlib/3b/#equfl)
208−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equrd' title="Equals (doubleprecision float)"><code>++equ:rd</code></a>
208+[`++equ:rd`](/docs/hoon/reference/stdlib/3b/#equrd)
209−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equrh' title="Equals (halfprecision float)"><code>++equ:rh</code></a>
209+[`++equ:rh`](/docs/hoon/reference/stdlib/3b/#equrh)
210−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equrs' title="Equals (singleprecision float)"><code>++equ:rs</code></a>
210+[`++equ:rs`](/docs/hoon/reference/stdlib/3b/#equrs)
211−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equrq' title="Equals (quadprecision float)"><code>++equ:rq</code></a>
211+[`++equ:rq`](/docs/hoon/reference/stdlib/3b/#equrq)
212−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#erayo' title="Leapyear period"><code>++era:yo</code></a>
212+[`++era:yo`](/docs/hoon/reference/stdlib/3c/#erayo)
213−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#expff' title="Get exponent (IEEE float)"><code>++exp:ff</code></a>
213+[`++exp:ff`](/docs/hoon/reference/stdlib/3b/#expff)
214−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#expfo' title="Exponent (modular base)"><code>++exp:fo</code></a>
214+[`++exp:fo`](/docs/hoon/reference/stdlib/3a/#expfo)
215−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#exprd' title="Exponent (@rd)"><code>++exp:rd</code></a>
215+[`++exp:rd`](/docs/hoon/reference/stdlib/3b/#exprd)
216−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#exprh' title="Exponent (halfprecision float)"><code>++exp:rh</code></a>
216+[`++exp:rh`](/docs/hoon/reference/stdlib/3b/#exprh)
217−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#exprs' title="Exponent (@rs)"><code>++exp:rs</code></a>
217+[`++exp:rs`](/docs/hoon/reference/stdlib/3b/#exprs)
218−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#exprq' title="Exponent (quadprecision float)"><code>++exp:rq</code></a>
218+[`++exp:rq`](/docs/hoon/reference/stdlib/3b/#exprq)
219
219
220### f
220### f
221
221
222−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#fa' title="base58check"><code>++fa</code></a>
222+[`++fa`](/docs/hoon/reference/stdlib/4a/#fa)
223−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#face' title="Make %face type (compiler utility)"><code>++face</code></a>
223+[`++face`](/docs/hoon/reference/stdlib/5a/#face)
224−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#fail' title="Never parse"><code>++fail</code></a>
224+[`++fail`](/docs/hoon/reference/stdlib/4e/#fail)
225−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#fall' title="Give unit a default value"><code>++fall</code></a>
225+[`++fall`](/docs/hoon/reference/stdlib/2a/#fall)
226−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#fand' title="All indices in list"><code>++fand</code></a>
226+[`++fand`](/docs/hoon/reference/stdlib/2b/#fand)
227−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#fas' title="Parse / (fas)"><code>++fas</code></a>
227+[`++fas`](/docs/hoon/reference/stdlib/4h/#fas)
228−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#fe' title="Modulo bloq"><code>++fe</code></a>
228+[`++fe`](/docs/hoon/reference/stdlib/2c/#fe)
229−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#fedag' title="Parse @p"><code>++fed:ag</code></a>
229+[`++fed:ag`](/docs/hoon/reference/stdlib/4j/#fedag)
230−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feob' title="Internal function to +fee"><code>++fe:ob</code></a>
230+[`++fe:ob`](/docs/hoon/reference/stdlib/3f/#feob)
231−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feeob' title="Feistel cipher Fe in B&R (2002)"><code>++fee:ob</code></a>
231+[`++fee:ob`](/docs/hoon/reference/stdlib/3f/#feeob)
232−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feenob' title="Reverse +fee"><code>++feen:ob</code></a>
232+[`++feen:ob`](/docs/hoon/reference/stdlib/3f/#feenob)
233−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feinob' title="Conceal structure v3"><code>++fein:ob</code></a>
233+[`++fein:ob`](/docs/hoon/reference/stdlib/3f/#feinob)
234−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feisob' title="Four-round generalised Feistel cipher over the domain [0, 2^32 - 2^16 - 1]"><code>++feis:ob</code></a>
234+[`++feis:ob`](/docs/hoon/reference/stdlib/3f/#feisob)
235−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#femab' title="Parse base58check char"><code>++fem:ab</code></a>
235+[`++fem:ab`](/docs/hoon/reference/stdlib/4j/#femab)
236−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#fenob' title="Reverse +fe"><code>++fen:ob</code></a>
236+[`++fen:ob`](/docs/hoon/reference/stdlib/3f/#fenob)
237−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#feqag' title="Parse @q phonetic base"><code>++feq:ag</code></a>
237+[`++feq:ag`](/docs/hoon/reference/stdlib/4j/#feqag)
238−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#fil' title="Fill bloqstream"><code>++fil</code></a>
238+[`++fil`](/docs/hoon/reference/stdlib/2c/#fil)
239−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#fimag' title="Parse base58check"><code>++fim:ag</code></a>
239+[`++fim:ag`](/docs/hoon/reference/stdlib/4j/#fimag)
240−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#find' title="First index in list"><code>++find</code></a>
240+[`++find`](/docs/hoon/reference/stdlib/2b/#find)
241−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#fitz' title="Odor compatibility (compiler utility)"><code>++fitz</code></a>
241+[`++fitz`](/docs/hoon/reference/stdlib/5a/#fitz)
242−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#flag' title="Boolean (flag)"><code>+$flag</code></a>
242+[`+$flag`](/docs/hoon/reference/stdlib/2q/#flag)
243−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#flan' title="Loobean & (compiler utility)"><code>++flan</code></a>
243+[`++flan`](/docs/hoon/reference/stdlib/5a/#flan)
244−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#flifl' title="Flip sign"><code>++fli:fl</code></a>
244+[`++fli:fl`](/docs/hoon/reference/stdlib/3b/#flifl)
245−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#flip' title="Loobean negation (compiler utility)"><code>++flip</code></a>
246−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#flit' title="Make filter"><code>++flit</code></a>
245+[`++flip`](/docs/hoon/reference/stdlib/5a/#flip)
247−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#flop' title="Reverse list"><code>++flop</code></a>
246+[`++flit`](/docs/hoon/reference/stdlib/2a/#flit)
248−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#flor' title="Loobean | (compiler utility)"><code>++flor</code></a>
247+[`++flop`](/docs/hoon/reference/stdlib/2b/#flop)
249−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmaff' title="Fused multiplyadd (IEEE float)"><code>++fma:ff</code></a>
248+[`++flor`](/docs/hoon/reference/stdlib/5a/#flor)
249+[`++fma:ff`](/docs/hoon/reference/stdlib/3b/#fmaff)
250−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmafl' title="Fused multiplyadd"><code>++fma:fl</code></a>
250+[`++fma:fl`](/docs/hoon/reference/stdlib/3b/#fmafl)
251−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmard' title="Fused multiplyadd (@rd)"><code>++fma:rd</code></a>
251+[`++fma:rd`](/docs/hoon/reference/stdlib/3b/#fmard)
252−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmarh' title="Fused multiplyadd (halfprecision float)"><code>++fma:rh</code></a>
252+[`++fma:rh`](/docs/hoon/reference/stdlib/3b/#fmarh)
253−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmars' title="Fused multiplyadd (singleprecision float)"><code>++fma:rs</code></a>
253+[`++fma:rs`](/docs/hoon/reference/stdlib/3b/#fmars)
254−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmarq' title="Fused multiplyadd (quadprecision float)"><code>++fma:rq</code></a>
254+[`++fma:rq`](/docs/hoon/reference/stdlib/3b/#fmarq)
255−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#fo' title="Modulo prime"><code>++fo</code></a>
255+[`++fo`](/docs/hoon/reference/stdlib/3a/#fo)
256−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#foot' title="Cases of arms by variance model"><code>+$foot</code></a>
256+[`+$foot`](/docs/hoon/reference/stdlib/4o/#foot)
257−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#fore' title="Pair before"><code>++fore</code></a>
257+[`++fore`](/docs/hoon/reference/stdlib/2n/#fore)
258−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#fork' title="Make %fork type (compiler utility)"><code>++fork</code></a>
258+[`++fork`](/docs/hoon/reference/stdlib/5a/#fork)
259−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fosrh' title="@rs to @rh"><code>++fos:rh</code></a>
259+[`++fos:rh`](/docs/hoon/reference/stdlib/3b/#fosrh)
260−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#frafo' title="Divide (modular base)"><code>++fra:fo</code></a>
260+[`++fra:fo`](/docs/hoon/reference/stdlib/3a/#frafo)
261−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#frasi' title="Divide (signed integer)"><code>++fra:si</code></a>
261+[`++fra:si`](/docs/hoon/reference/stdlib/3a/#frasi)
262−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#full' title="Parse to end"><code>++full</code></a>
262+[`++full`](/docs/hoon/reference/stdlib/4f/#full)
263−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#funk' title="Add to tape"><code>++funk</code></a>
263+[`++funk`](/docs/hoon/reference/stdlib/4f/#funk)
264−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#fuss' title="Has A or B?"><code>++fuss</code></a>
264+[`++fuss`](/docs/hoon/reference/stdlib/4f/#fuss)
265−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#fyndob' title="Restore structure v3"><code>++fynd:ob</code></a>
265+[`++fynd:ob`](/docs/hoon/reference/stdlib/3f/#fyndob)
266
266
267### g
267### g
268
268
269−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gah' title="New line or ''"><code>++gah</code></a>
269+[`++gah`](/docs/hoon/reference/stdlib/4i/#gah)
270−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#gal' title="Parse < (gal)"><code>++gal</code></a>
270+[`++gal`](/docs/hoon/reference/stdlib/4h/#gal)
271−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gap' title="Plural whitespace"><code>++gap</code></a>
271+[`++gap`](/docs/hoon/reference/stdlib/4i/#gap)
272−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gaq' title="End of line"><code>++gaq</code></a>
272+[`++gaq`](/docs/hoon/reference/stdlib/4i/#gaq)
273−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#gar' title="Parse > (gar)"><code>++gar</code></a>
273+[`++gar`](/docs/hoon/reference/stdlib/4h/#gar)
274−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#garb' title="Core metadata"><code>+$garb</code></a>
274+[`+$garb`](/docs/hoon/reference/stdlib/4o/#garb)
275−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#gasby' title="Concatenate (map)"><code>++gas:by</code></a>
275+[`++gas:by`](/docs/hoon/reference/stdlib/2i/#gasby)
276−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#gasin' title="Concatenate (set)"><code>++gas:in</code></a>
276+[`++gas:in`](/docs/hoon/reference/stdlib/2h/#gasin)
277−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#gasju' title="Concatenate (jug)"><code>++gas:ju</code></a>
277+[`++gas:ju`](/docs/hoon/reference/stdlib/2j/#gasju)
278−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#gasto' title="Push list into queue"><code>++gas:to</code></a>
278+[`++gas:to`](/docs/hoon/reference/stdlib/2k/#gasto)
279−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#gate' title="Function"><code>++gate</code></a>
279+[`++gate`](/docs/hoon/reference/stdlib/1c/#gate)
280−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gaw' title="Classic whitespace"><code>++gaw</code></a>
280+[`++gaw`](/docs/hoon/reference/stdlib/4i/#gaw)
281−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gay' title="Optional gap"><code>++gay</code></a>
281+[`++gay`](/docs/hoon/reference/stdlib/4i/#gay)
282−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#getby' title="Grab unit value"><code>++get:by</code></a>
282+[`++get:by`](/docs/hoon/reference/stdlib/2i/#getby)
283−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#getja' title="Grab value by key"><code>++get:ja</code></a>
283+[`++get:ja`](/docs/hoon/reference/stdlib/2j/#getja)
284−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#getju' title="Retrieve set"><code>++get:ju</code></a>
284+[`++get:ju`](/docs/hoon/reference/stdlib/2j/#getju)
285−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#getto' title="Headtail pair"><code>++get:to</code></a>
285+[`++get:to`](/docs/hoon/reference/stdlib/2k/#getto)
286−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#glue' title="Skip delimiter"><code>++glue</code></a>
286+[`++glue`](/docs/hoon/reference/stdlib/4e/#glue)
287−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gon' title="Parse long numbers"><code>++gon</code></a>
287+[`++gon`](/docs/hoon/reference/stdlib/4i/#gon)
288−<a class="tooltip" href='/docs/hoon/reference/stdlib/2f/#gor' title="Mug order"><code>++gor</code></a>
288+[`++gor`](/docs/hoon/reference/stdlib/2f/#gor)
289−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#gotby' title="Assert for value (map)"><code>++got:by</code></a>
289+[`++got:by`](/docs/hoon/reference/stdlib/2i/#gotby)
290−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdff' title="Decimal float to @r"><code>++grd:ff</code></a>
290+[`++grd:ff`](/docs/hoon/reference/stdlib/3b/#grdff)
291−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdfl' title="Decimal to float"><code>++grd:fl</code></a>
291+[`++grd:fl`](/docs/hoon/reference/stdlib/3b/#grdfl)
292−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdrd' title="Decimal float to @rd"><code>++grd:rd</code></a>
292+[`++grd:rd`](/docs/hoon/reference/stdlib/3b/#grdrd)
293−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdrh' title="Decimal float to @rh"><code>++grd:rh</code></a>
293+[`++grd:rh`](/docs/hoon/reference/stdlib/3b/#grdrh)
294−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdrs' title="Decimal float to @rs"><code>++grd:rs</code></a>
294+[`++grd:rs`](/docs/hoon/reference/stdlib/3b/#grdrs)
295−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdrq' title="Decimal float to @rq"><code>++grd:rq</code></a>
295+[`++grd:rq`](/docs/hoon/reference/stdlib/3b/#grdrq)
296−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#gte' title="Greater than / equal"><code>++gte</code></a>
296+[`++gte`](/docs/hoon/reference/stdlib/1a/#gte)
297−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gteff' title="Greater than / equal (IEEE float)"><code>++gte:ff</code></a>
297+[`++gte:ff`](/docs/hoon/reference/stdlib/3b/#gteff)
298−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gtefl' title="Greater than / equal (producing flag)"><code>++gte:fl</code></a>
298+[`++gte:fl`](/docs/hoon/reference/stdlib/3b/#gtefl)
299−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gterd' title="Greater than / equal (doubleprecision float)"><code>++gte:rd</code></a>
299+[`++gte:rd`](/docs/hoon/reference/stdlib/3b/#gterd)
300−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gterh' title="Greater than / equal (halfprecision float)"><code>++gte:rh</code></a>
300+[`++gte:rh`](/docs/hoon/reference/stdlib/3b/#gterh)
301−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gters' title="Greater than / equal (singleprecision float)"><code>++gte:rs</code></a>
301+[`++gte:rs`](/docs/hoon/reference/stdlib/3b/#gters)
302−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gterq' title="Greater than / equal (quadprecision float)"><code>++gte:rq</code></a>
302+[`++gte:rq`](/docs/hoon/reference/stdlib/3b/#gterq)
303−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#gth' title="Greater than"><code>++gth</code></a>
303+[`++gth`](/docs/hoon/reference/stdlib/1a/#gth)
304−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthff' title="Greater than (IEEE float)"><code>++gth:ff</code></a>
304+[`++gth:ff`](/docs/hoon/reference/stdlib/3b/#gthff)
305−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthfl' title="Greater than (producing flag)"><code>++gth:fl</code></a>
305+[`++gth:fl`](/docs/hoon/reference/stdlib/3b/#gthfl)
306−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthrd' title="Greater than (doubleprecision float)"><code>++gth:rd</code></a>
306+[`++gth:rd`](/docs/hoon/reference/stdlib/3b/#gthrd)
307−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthrh' title="Greater than (halfprecision float)"><code>++gth:rh</code></a>
307+[`++gth:rh`](/docs/hoon/reference/stdlib/3b/#gthrh)
308−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthrs' title="Greater than (singleprecision float)"><code>++gth:rs</code></a>
308+[`++gth:rs`](/docs/hoon/reference/stdlib/3b/#gthrs)
309−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthrq' title="Greater than (quadprecision float)"><code>++gth:rq</code></a>
309+[`++gth:rq`](/docs/hoon/reference/stdlib/3b/#gthrq)
310−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gul' title="Axis syntax < or >"><code>++gul</code></a>
310+[`++gul`](/docs/hoon/reference/stdlib/4i/#gul)
311−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#gulf' title="List from range"><code>++gulf</code></a>
311+[`++gulf`](/docs/hoon/reference/stdlib/2b/#gulf)
312
312
313### h
313### h
314
314
315−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hafab' title="Parse non-doz phonetic pair"><code>++haf:ab</code></a>
315+[`++haf:ab`](/docs/hoon/reference/stdlib/4j/#hafab)
316−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#hair' title="Parsing line and column"><code>+$hair</code></a>
316+[`+$hair`](/docs/hoon/reference/stdlib/3g/#hair)
317−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#hasby' title="Key existence check (map)"><code>++has:by</code></a>
317+[`++has:by`](/docs/hoon/reference/stdlib/2i/#hasby)
318−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#hasin' title="Key existence check (set)"><code>++has:in</code></a>
318+[`++has:in`](/docs/hoon/reference/stdlib/2h/#hasin)
319−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#hasju' title="Check contents (jug)"><code>++has:ju</code></a>
319+[`++has:ju`](/docs/hoon/reference/stdlib/2j/#hasju)
320−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#hax' title="Parse # (hax)"><code>++hax</code></a>
320+[`++hax`](/docs/hoon/reference/stdlib/4h/#hax)
321−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#head' title="Get head of cell"><code>++head</code></a>
321+[`++head`](/docs/hoon/reference/stdlib/2n/#head)
322−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#help' title="Documentation"><code>+$help</code></a>
322+[`+$help`](/docs/hoon/reference/stdlib/4o/#help)
323−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hefab' title="Parse non-dozzod phonetic pair"><code>++hef:ab</code></a>
323+[`++hef:ab`](/docs/hoon/reference/stdlib/4j/#hefab)
324−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#here' title="Placebased apply"><code>++here</code></a>
324+[`++here`](/docs/hoon/reference/stdlib/4f/#here)
325−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#hep' title="Parse (hep)"><code>++hep</code></a>
325+[`++hep`](/docs/hoon/reference/stdlib/4h/#hep)
326−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#hex' title="Hexadecimal to atom"><code>++hex</code></a>
326+[`++hex`](/docs/hoon/reference/stdlib/4i/#hex)
327−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hexag' title="Parse hexadecimal number"><code>++hex:ag</code></a>
327+[`++hex:ag`](/docs/hoon/reference/stdlib/4j/#hexag)
328−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hifab' title="Parse phonetic pair"><code>++hif:ab</code></a>
328+[`++hif:ab`](/docs/hoon/reference/stdlib/4j/#hifab)
329−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#hig' title="Parse single uppercase letter"><code>++hig</code></a>
330−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#hike' title="Compiler utility"><code>++hike</code></a>
329+[`++hig`](/docs/hoon/reference/stdlib/4i/#hig)
331−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#hint' title="Make %hint type (compiler utility)"><code>++hint</code></a>
330+[`++hike`](/docs/hoon/reference/stdlib/5a/#hike)
332−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#hit' title="Parse single hexadecimal digit"><code>++hit</code></a>
331+[`++hint`](/docs/hoon/reference/stdlib/5a/#hint)
333−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hofab' title="Parse 2-4 @q phonetic pair"><code>++hof:ab</code></a>
332+[`++hit`](/docs/hoon/reference/stdlib/4i/#hit)
333+[`++hof:ab`](/docs/hoon/reference/stdlib/4j/#hofab)
334−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#homo' title="Homogenize list"><code>++homo</code></a>
334+[`++homo`](/docs/hoon/reference/stdlib/2b/#homo)
335−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#hoon' title="Hoon AST"><code>+$hoon</code></a>
335+[`+$hoon`](/docs/hoon/reference/stdlib/4o/#hoon)
336−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#hoot' title="Hoon tools"><code>++hoot</code></a>
336+[`++hoot`](/docs/hoon/reference/stdlib/4o/#hoot)
337−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#horyo' title="Seconds in hour"><code>++hor:yo</code></a>
337+[`++hor:yo`](/docs/hoon/reference/stdlib/3c/#horyo)
338−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hufab' title="Parse 1-4 @q phonetic pairs"><code>++huf:ab</code></a>
338+[`++huf:ab`](/docs/hoon/reference/stdlib/4j/#hufab)
339−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#hump' title="Profiling"><code>+$hump</code></a>
339+[`+$hump`](/docs/hoon/reference/stdlib/4o/#hump)
340−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#hunt' title="Select between two units by a rule"><code>++hunt</code></a>
340+[`++hunt`](/docs/hoon/reference/stdlib/2a/#hunt)
341−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hyfab' title="Parse four @q phonetic pairs"><code>++hyf:ab</code></a>
341+[`++hyf:ab`](/docs/hoon/reference/stdlib/4j/#hyfab)
342
342
343### i
343### i
344
344
345−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#iblfl' title="Integer binary logarithm"><code>++ibl:fl</code></a>
345+[`++ibl:fl`](/docs/hoon/reference/stdlib/3b/#iblfl)
346−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#ifix' title="Infix"><code>++ifix</code></a>
346+[`++ifix`](/docs/hoon/reference/stdlib/4f/#ifix)
347−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#inde' title="Indentation block"><code>++inde</code></a>
347+[`++inde`](/docs/hoon/reference/stdlib/4f/#inde)
348−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#indpo' title="Parse suffix"><code>++ind:po</code></a>
348+[`++ind:po`](/docs/hoon/reference/stdlib/4a/#indpo)
349−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#inspo' title="Parse prefix"><code>++ins:po</code></a>
349+[`++ins:po`](/docs/hoon/reference/stdlib/4a/#inspo)
350−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#intby' title="Intersection (map)"><code>++int:by</code></a>
350+[`++int:by`](/docs/hoon/reference/stdlib/2i/#intby)
351−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#intin' title="Intersection (set)"><code>++int:in</code></a>
351+[`++int:in`](/docs/hoon/reference/stdlib/2h/#intin)
352−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#invfe' title="Inverse order of modular field"><code>++inv:fe</code></a>
352+[`++inv:fe`](/docs/hoon/reference/stdlib/2c/#invfe)
353−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#invfl' title="Inverse"><code>++inv:fl</code></a>
353+[`++inv:fl`](/docs/hoon/reference/stdlib/3b/#invfl)
354−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#invfo' title="Inverse (signed modulus)"><code>++inv:fo</code></a>
354+[`++inv:fo`](/docs/hoon/reference/stdlib/3a/#invfo)
355−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#iny' title="Indentation block"><code>++iny</code></a>
355+[`++iny`](/docs/hoon/reference/stdlib/4i/#iny)
356
356
357### j
357### j
358
358
359−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#ja' title="Jar engine"><code>++ja</code></a>
359+[`++ja`](/docs/hoon/reference/stdlib/2j/#ja)
360−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#jabby' title="Transform value (map)"><code>++jab:by</code></a>
360+[`++jab:by`](/docs/hoon/reference/stdlib/2i/#jabby)
361−<a class="tooltip" href='/docs/hoon/reference/stdlib/2p/#jam' title="Pack noun to atom"><code>++jam</code></a>
361+[`++jam`](/docs/hoon/reference/stdlib/2p/#jam)
362−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#jar' title="Mold generator (jar)"><code>++jar</code></a>
362+[`++jar`](/docs/hoon/reference/stdlib/2o/#jar)
363−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#jesyo' title="Maximum 64bit timestamp"><code>++jes:yo</code></a>
363+[`++jes:yo`](/docs/hoon/reference/stdlib/3c/#jesyo)
364−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#jest' title="Match a cord"><code>++jest</code></a>
364+[`++jest`](/docs/hoon/reference/stdlib/4f/#jest)
365−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#jock' title="Compiler utility"><code>++jock</code></a>
365+[`++jock`](/docs/hoon/reference/stdlib/5a/#jock)
366−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#join' title="Add separator between list elements"><code>++join</code></a>
366+[`++join`](/docs/hoon/reference/stdlib/2b/#join)
367−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#ju' title="Jug operations"><code>++ju</code></a>
367+[`++ju`](/docs/hoon/reference/stdlib/2j/#ju)
368−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#jug' title="Mold generator (jug)"><code>++jug</code></a>
368+[`++jug`](/docs/hoon/reference/stdlib/2o/#jug)
369−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#just' title="Match a single character"><code>++just</code></a>
369+[`++just`](/docs/hoon/reference/stdlib/4f/#just)
370
370
371### k
371### k
372
372
373−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#kel' title="Parse { (kel)"><code>++kel</code></a>
373+[`++kel`](/docs/hoon/reference/stdlib/4h/#kel)
374−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#ker' title="Parse } (ker)"><code>++ker</code></a>
374+[`++ker`](/docs/hoon/reference/stdlib/4h/#ker)
375−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#ket' title="Parse ^ (ket)"><code>++ket</code></a>
375+[`++ket`](/docs/hoon/reference/stdlib/4h/#ket)
376−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#keyby' title="Set of keys"><code>++key:by</code></a>
376+[`++key:by`](/docs/hoon/reference/stdlib/2i/#keyby)
377−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#knee' title="Recursive parsers"><code>++knee</code></a>
377+[`++knee`](/docs/hoon/reference/stdlib/4f/#knee)
378−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#knot' title="Atom type of ASCII characters"><code>+$knot</code></a>
378+[`+$knot`](/docs/hoon/reference/stdlib/2q/#knot)
379
379
380### l
380### l
381
381
382−<a class="tooltip" href='/docs/hoon/reference/stdlib/4d/#last' title="Further trace"><code>++last</code></a>
382+[`++last`](/docs/hoon/reference/stdlib/4d/#last)
383−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#late' title="Put tail"><code>++late</code></a>
383+[`++late`](/docs/hoon/reference/stdlib/2n/#late)
384−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#lead' title="Put head"><code>++lead</code></a>
384+[`++lead`](/docs/hoon/reference/stdlib/2n/#lead)
385−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#lenl' title="Construct list from nullterminated noun"><code>++le:nl</code></a>
385+[`++le:nl`](/docs/hoon/reference/stdlib/2m/#lenl)
386−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#lent' title="List length"><code>++lent</code></a>
386+[`++lent`](/docs/hoon/reference/stdlib/2b/#lent)
387−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#levi' title="Type nests or crash"><code>++levi</code></a>
387+[`++levi`](/docs/hoon/reference/stdlib/5c/#levi)
388−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#levy' title="Logical AND on list"><code>++levy</code></a>
388+[`++levy`](/docs/hoon/reference/stdlib/2b/#levy)
389−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lfefl' title="Maximum"><code>++lfe:fl</code></a>
389+[`++lfe:fl`](/docs/hoon/reference/stdlib/3b/#lfefl)
390−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lfnfl' title="Largest normal float"><code>++lfn:fl</code></a>
390+[`++lfn:fl`](/docs/hoon/reference/stdlib/3b/#lfnfl)
391−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#lien' title="Logical OR on list"><code>++lien</code></a>
391+[`++lien`](/docs/hoon/reference/stdlib/2b/#lien)
392−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#lift' title="Curried bind"><code>++lift</code></a>
392+[`++lift`](/docs/hoon/reference/stdlib/2a/#lift)
393−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#like' title="Generic edge"><code>++like</code></a>
393+[`++like`](/docs/hoon/reference/stdlib/3g/#like)
394−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#limb' title="Reference into subject by name/axis"><code>+$limb</code></a>
394+[`+$limb`](/docs/hoon/reference/stdlib/4o/#limb)
395−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#limo' title="Construct list from nullterminated tuple"><code>++limo</code></a>
395+[`++limo`](/docs/hoon/reference/stdlib/2b/#limo)
396−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#link' title="Lexical segment"><code>+$link</code></a>
396+[`+$link`](/docs/hoon/reference/stdlib/4o/#link)
397−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#lipag' title="Parse IPv4 address"><code>++lip:ag</code></a>
397+[`++lip:ag`](/docs/hoon/reference/stdlib/4j/#lipag)
398−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#list' title="Mold constructor (list)"><code>++list</code></a>
398+[`++list`](/docs/hoon/reference/stdlib/1c/#list)
399−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#lone' title="Mold generator (face on mold)"><code>++lone</code></a>
399+[`++lone`](/docs/hoon/reference/stdlib/1c/#lone)
400−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#look' title="Compiler utility"><code>++look</code></a>
400+[`++look`](/docs/hoon/reference/stdlib/5a/#look)
401−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#loot' title="Compiler utility"><code>++loot</code></a>
401+[`++loot`](/docs/hoon/reference/stdlib/5a/#loot)
402−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#low' title="Parse lowercase letter"><code>++low</code></a>
402+[`++low`](/docs/hoon/reference/stdlib/4i/#low)
403−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#lsh' title="Leftshift"><code>++lsh</code></a>
403+[`++lsh`](/docs/hoon/reference/stdlib/2c/#lsh)
404−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#lte' title="Less than / equal (atom)"><code>++lte</code></a>
404+[`++lte`](/docs/hoon/reference/stdlib/1a/#lte)
405−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lteff' title="Less than / equal (IEEE float)"><code>++lte:ff</code></a>
405+[`++lte:ff`](/docs/hoon/reference/stdlib/3b/#lteff)
406−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#ltefl' title="Less than / equal (producing flag)"><code>++lte:fl</code></a>
406+[`++lte:fl`](/docs/hoon/reference/stdlib/3b/#ltefl)
407−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lterd' title="Less than / equal (doubleprecision float)"><code>++lte:rd</code></a>
407+[`++lte:rd`](/docs/hoon/reference/stdlib/3b/#lterd)
408−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lterh' title="Less than / equal (halfprecision float)"><code>++lte:rh</code></a>
408+[`++lte:rh`](/docs/hoon/reference/stdlib/3b/#lterh)
409−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lters' title="Less than / equal (singleprecision float)"><code>++lte:rs</code></a>
409+[`++lte:rs`](/docs/hoon/reference/stdlib/3b/#lters)
410−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lterq' title="Less than / equal (quadprecision float)"><code>++lte:rq</code></a>
410+[`++lte:rq`](/docs/hoon/reference/stdlib/3b/#lterq)
411−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#lth' title="Less than (atom)"><code>++lth</code></a>
411+[`++lth`](/docs/hoon/reference/stdlib/1a/#lth)
412−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthff' title="Less than (IEEE float)"><code>++lth:ff</code></a>
412+[`++lth:ff`](/docs/hoon/reference/stdlib/3b/#lthff)
413−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthfl' title="Less than (signed and unsigned integer cell)"><code>++lth:fl</code></a>
413+[`++lth:fl`](/docs/hoon/reference/stdlib/3b/#lthfl)
414−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthrd' title="Less than (doubleprecision float)"><code>++lth:rd</code></a>
414+[`++lth:rd`](/docs/hoon/reference/stdlib/3b/#lthrd)
415−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthrh' title="Less than (halfprecision float)"><code>++lth:rh</code></a>
415+[`++lth:rh`](/docs/hoon/reference/stdlib/3b/#lthrh)
416−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthrs' title="Less than (singleprecision float)"><code>++lth:rs</code></a>
416+[`++lth:rs`](/docs/hoon/reference/stdlib/3b/#lthrs)
417−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthrq' title="Less than (quadprecision float)"><code>++lth:rq</code></a>
417+[`++lth:rq`](/docs/hoon/reference/stdlib/3b/#lthrq)
418−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lugfl' title="Central rounding mechanism"><code>++lug:fl</code></a>
418+[`++lug:fl`](/docs/hoon/reference/stdlib/3b/#lugfl)
419−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#lus' title="Parse + (lus)"><code>++lus</code></a>
419+[`++lus`](/docs/hoon/reference/stdlib/4h/#lus)
420−<a class="tooltip" href='/docs/hoon/reference/stdlib/4d/#lust' title="Detect new line"><code>++lust</code></a>
420+[`++lust`](/docs/hoon/reference/stdlib/4d/#lust)
421−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#less' title="Parse unless"><code>++less</code></a>
421+[`++less`](/docs/hoon/reference/stdlib/4e/#less)
422−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#ly' title="List from raw noun"><code>++ly</code></a>
422+[`++ly`](/docs/hoon/reference/stdlib/2m/#ly)
423
423
424### m
424### m
425
425
426−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#mane' title="XML name+space"><code>++mane</code></a>
426+[`++mane`](/docs/hoon/reference/stdlib/5e/#mane)
427−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#manx' title="Dynamic XML node"><code>++manx</code></a>
427+[`++manx`](/docs/hoon/reference/stdlib/5e/#manx)
428−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#manxhoot' title="Dynamic XML node"><code>+$manx:hoot</code></a>
428+[`+$manx:hoot`](/docs/hoon/reference/stdlib/4o/#manxhoot)
429−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mard' title="Initialize ff (rd core)"><code>++ma:rd</code></a>
429+[`++ma:rd`](/docs/hoon/reference/stdlib/3b/#mard)
430−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#marh' title="Initialize ff (rh core)"><code>++ma:rh</code></a>
430+[`++ma:rh`](/docs/hoon/reference/stdlib/3b/#marh)
431−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mars' title="Initialize ff (rs core)"><code>++ma:rs</code></a>
431+[`++ma:rs`](/docs/hoon/reference/stdlib/3b/#mars)
432−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#marq' title="Initialize ff (rq core)"><code>++ma:rq</code></a>
432+[`++ma:rq`](/docs/hoon/reference/stdlib/3b/#marq)
433−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mack' title="Nock subject to unit"><code>++mack</code></a>
433+[`++mack`](/docs/hoon/reference/stdlib/4n/#mack)
434−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#make' title="Compile cord to nock"><code>++make</code></a>
434+[`++make`](/docs/hoon/reference/stdlib/5d/#make)
435−<a class="tooltip" href='/docs/hoon/reference/stdlib/2l/#malt' title="Map from list"><code>++malt</code></a>
435+[`++malt`](/docs/hoon/reference/stdlib/2l/#malt)
436−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#manehoot' title="XML name+space"><code>+$mane:hoot</code></a>
436+[`+$mane:hoot`](/docs/hoon/reference/stdlib/4o/#manehoot)
437−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#map' title="Mold generator (map)"><code>++map</code></a>
437+[`++map`](/docs/hoon/reference/stdlib/2o/#map)
438−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#marby' title="Add with validation (map)"><code>++mar:by</code></a>
438+[`++mar:by`](/docs/hoon/reference/stdlib/2i/#marby)
439−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#marehoot' title="Node or nodes"><code>+$mare:hoot</code></a>
439+[`+$mare:hoot`](/docs/hoon/reference/stdlib/4o/#marehoot)
440−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#marl' title="XML node list"><code>++marl</code></a>
440+[`++marl`](/docs/hoon/reference/stdlib/5e/#marl)
441−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#marlhoot' title="Dynamic XML nodes"><code>+$marl:hoot</code></a>
441+[`+$marl:hoot`](/docs/hoon/reference/stdlib/4o/#marlhoot)
442−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#marthoot' title="Dynamic XML attributes"><code>+$mart:hoot</code></a>
442+[`+$mart:hoot`](/docs/hoon/reference/stdlib/4o/#marthoot)
443−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#mars' title="XML cdata"><code>++mars</code></a>
443+[`++mars`](/docs/hoon/reference/stdlib/5e/#mars)
444−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#mart' title="XML attributes"><code>++mart</code></a>
444+[`++mart`](/docs/hoon/reference/stdlib/5e/#mart)
445−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#maruhoot' title="Interpolation or nodes"><code>+$maru:hoot</code></a>
445+[`+$maru:hoot`](/docs/hoon/reference/stdlib/4o/#maruhoot)
446−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#marx' title="Dynamic XML tag"><code>++marx</code></a>
446+[`++marx`](/docs/hoon/reference/stdlib/5e/#marx)
447−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#marxhoot' title="Dynamic XML tag"><code>+$marx:hoot</code></a>
447+[`+$marx:hoot`](/docs/hoon/reference/stdlib/4o/#marxhoot)
448−<a class="tooltip" href='/docs/hoon/reference/stdlib/1b/#mas' title="Address within head/tail"><code>++mas</code></a>
448+[`++mas`](/docs/hoon/reference/stdlib/1b/#mas)
449−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#mask' title="Match character"><code>++mask</code></a>
449+[`++mask`](/docs/hoon/reference/stdlib/4f/#mask)
450−<a class="tooltip" href='/docs/hoon/reference/stdlib/2p/#mat' title="Lengthencode"><code>++mat</code></a>
450+[`++mat`](/docs/hoon/reference/stdlib/2p/#mat)
451−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#mate' title="Choose"><code>++mate</code></a>
451+[`++mate`](/docs/hoon/reference/stdlib/2a/#mate)
452−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#max' title="Maximum"><code>++max</code></a>
452+[`++max`](/docs/hoon/reference/stdlib/1a/#max)
453−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#meff' title="Minimum exponent of ff"><code>++me:ff</code></a>
453+[`++me:ff`](/docs/hoon/reference/stdlib/3b/#meff)
454−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#mean' title="Crash and printf"><code>++mean</code></a>
454+[`++mean`](/docs/hoon/reference/stdlib/5c/#mean)
455−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#mes' title="Parse hexabyte"><code>++mes</code></a>
455+[`++mes`](/docs/hoon/reference/stdlib/4i/#mes)
456−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#mesc' title="Escape special characters"><code>++mesc</code></a>
456+[`++mesc`](/docs/hoon/reference/stdlib/4b/#mesc)
457−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#met' title="Measure"><code>++met</code></a>
457+[`++met`](/docs/hoon/reference/stdlib/2c/#met)
458−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#min' title="Minimum (atom)"><code>++min</code></a>
458+[`++min`](/docs/hoon/reference/stdlib/1a/#min)
459−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mink' title="Mock (virtual Nock) interpreter"><code>++mink</code></a>
459+[`++mink`](/docs/hoon/reference/stdlib/4n/#mink)
460−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#mite' title="MIME type"><code>++mite</code></a>
460+[`++mite`](/docs/hoon/reference/stdlib/5e/#mite)
461−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#mityo' title="Seconds in minute"><code>++mit:yo</code></a>
461+[`++mit:yo`](/docs/hoon/reference/stdlib/3c/#mityo)
462−<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#mix' title="Binary XOR (atom)"><code>++mix</code></a>
462+[`++mix`](/docs/hoon/reference/stdlib/2d/#mix)
463−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#mixed-case-symbol' title="Mixed-case term"><code>++mixed-case-symbol</code></a>
463+[`++mixed-case-symbol`](/docs/hoon/reference/stdlib/4i/#mixed-case-symbol)
464−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#moan' title="Profiling: sample metric"><code>+$moan</code></a>
464+[`+$moan`](/docs/hoon/reference/stdlib/4o/#moan)
465−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mock' title="Compute formula on subject with hint"><code>++mock</code></a>
465+[`++mock`](/docs/hoon/reference/stdlib/4n/#mock)
466−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#mod' title="Modulus (atom)"><code>++mod</code></a>
466+[`++mod`](/docs/hoon/reference/stdlib/1a/#mod)
467−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#mohyo' title="Days in month"><code>++moh:yo</code></a>
467+[`++moh:yo`](/docs/hoon/reference/stdlib/3c/#mohyo)
468−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mole' title="Typed unitary virtual"><code>++mole</code></a>
468+[`++mole`](/docs/hoon/reference/stdlib/4n/#mole)
469−<a class="tooltip" href='/docs/hoon/reference/stdlib/2l/#molt' title="Map from pair list"><code>++molt</code></a>
469+[`++molt`](/docs/hoon/reference/stdlib/2l/#molt)
470−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mong' title="Slam gate with sample"><code>++mong</code></a>
470+[`++mong`](/docs/hoon/reference/stdlib/4n/#mong)
471−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mook' title="Intelligently render crash annotation"><code>++mook</code></a>
471+[`++mook`](/docs/hoon/reference/stdlib/4n/#mook)
472−<a class="tooltip" href='/docs/hoon/reference/stdlib/2f/#mor' title="(more) mug order"><code>++mor</code></a>
472+[`++mor`](/docs/hoon/reference/stdlib/2f/#mor)
473−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#more' title="Parse list with delimiter"><code>++more</code></a>
473+[`++more`](/docs/hoon/reference/stdlib/4f/#more)
474−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#most' title="Parse list of at least one match"><code>++most</code></a>
474+[`++most`](/docs/hoon/reference/stdlib/4f/#most)
475−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#motag' title="Parse numerical month"><code>++mot:ag</code></a>
475+[`++mot:ag`](/docs/hoon/reference/stdlib/4j/#motag)
476−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#moyyo' title="Days in months of leapyear"><code>++moy:yo</code></a>
476+[`++moy:yo`](/docs/hoon/reference/stdlib/3c/#moyyo)
477−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#mu' title="Core used to scramble 16bit atoms"><code>++mu</code></a>
477+[`++mu`](/docs/hoon/reference/stdlib/4j/#mu)
478−<a class="tooltip" href='/docs/hoon/reference/stdlib/2e/#mug' title="FNV1a scrambler"><code>++mug</code></a>
478+[`++mug`](/docs/hoon/reference/stdlib/2e/#mug)
479−<a class="tooltip" href='/docs/hoon/reference/stdlib/2e/#muk' title="Standard MurmurHash3"><code>++muk</code></a>
479+[`++muk`](/docs/hoon/reference/stdlib/2e/#muk)
480−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#mul' title="Multiply (atom)"><code>++mul</code></a>
480+[`++mul`](/docs/hoon/reference/stdlib/1a/#mul)
481−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulff' title="Multiply (IEEE float)"><code>++mul:ff</code></a>
481+[`++mul:ff`](/docs/hoon/reference/stdlib/3b/#mulff)
482−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulfl' title="Multiply (signed and unsigned integer cell)"><code>++mul:fl</code></a>
482+[`++mul:fl`](/docs/hoon/reference/stdlib/3b/#mulfl)
483−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulrd' title="Multiply (doubleprecision float)"><code>++mul:rd</code></a>
483+[`++mul:rd`](/docs/hoon/reference/stdlib/3b/#mulrd)
484−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulrh' title="Multiply (quadprecision float)"><code>++mul:rh</code></a>
484+[`++mul:rh`](/docs/hoon/reference/stdlib/3b/#mulrh)
485−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulrs' title="Multiply (singleprecision float)"><code>++mul:rs</code></a>
485+[`++mul:rs`](/docs/hoon/reference/stdlib/3b/#mulrs)
486−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulrq' title="Multiply (quadprecision float)"><code>++mul:rq</code></a>
486+[`++mul:rq`](/docs/hoon/reference/stdlib/3b/#mulrq)
487−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mule' title="Typed virtual"><code>++mule</code></a>
487+[`++mule`](/docs/hoon/reference/stdlib/4n/#mule)
488−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mure' title="Untyped unitary virtual"><code>++mure</code></a>
488+[`++mure`](/docs/hoon/reference/stdlib/4n/#mure)
489−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#musk' title="Nock with block set (compiler utility)"><code>++musk</code></a>
489+[`++musk`](/docs/hoon/reference/stdlib/5a/#musk)
490−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mute' title="Untyped virtual"><code>++mute</code></a>
490+[`++mute`](/docs/hoon/reference/stdlib/4n/#mute)
491−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#murn' title="Maybe transform"><code>++murn</code></a>
491+[`++murn`](/docs/hoon/reference/stdlib/2b/#murn)
492−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#my' title="Map from raw noun"><code>++my</code></a>
492+[`++my`](/docs/hoon/reference/stdlib/2m/#my)
493−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#mynl' title="Construct map from nullterminated noun"><code>++my:nl</code></a>
493+[`++my:nl`](/docs/hoon/reference/stdlib/2m/#mynl)
494
494
495### n
495### n
496
496
497−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#nail' title="Location, remainder of parsed text"><code>+$nail</code></a>
497+[`+$nail`](/docs/hoon/reference/stdlib/3g/#nail)
498−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#napto' title="Remove head of queue"><code>++nap:to</code></a>
498+[`++nap:to`](/docs/hoon/reference/stdlib/2k/#napto)
499−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#ne' title="Digit rendering engine"><code>++ne</code></a>
499+[`++ne`](/docs/hoon/reference/stdlib/4j/#ne)
500−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#nedfl' title="Require float"><code>++ned:fl</code></a>
500+[`++ned:fl`](/docs/hoon/reference/stdlib/3b/#nedfl)
501−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#need' title="Unwrap unit"><code>++need</code></a>
501+[`++need`](/docs/hoon/reference/stdlib/2a/#need)
502−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#netfe' title="Flip endianness"><code>++net:fe</code></a>
502+[`++net:fe`](/docs/hoon/reference/stdlib/2c/#netfe)
503−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#newsi' title="Atom to @s"><code>++new:si</code></a>
503+[`++new:si`](/docs/hoon/reference/stdlib/3a/#newsi)
504−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#next' title="Consume character"><code>++next</code></a>
504+[`++next`](/docs/hoon/reference/stdlib/4f/#next)
505−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#nipto' title="Remove root of queue"><code>++nip:to</code></a>
505+[`++nip:to`](/docs/hoon/reference/stdlib/2k/#nipto)
506−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#nix' title="Parse letters and underscore"><code>++nix</code></a>
506+[`++nix`](/docs/hoon/reference/stdlib/4i/#nix)
507−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#nl' title="Noun to container operations"><code>++nl</code></a>
507+[`++nl`](/docs/hoon/reference/stdlib/2m/#nl)
508−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#noah' title="Tape pretty-print"><code>++noah</code></a>
508+[`++noah`](/docs/hoon/reference/stdlib/5c/#noah)
509−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#nock' title="Virtual nock"><code>+$nock</code></a>
509+[`+$nock`](/docs/hoon/reference/stdlib/4o/#nock)
510−<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#not' title="Binary NOT (atom)"><code>++not</code></a>
510+[`++not`](/docs/hoon/reference/stdlib/2d/#not)
511−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#note' title="Type annotation"><code>+$note</code></a>
511+[`+$note`](/docs/hoon/reference/stdlib/4o/#note)
512−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#noun' title="Any noun"><code>+$noun</code></a>
512+[`+$noun`](/docs/hoon/reference/stdlib/2q/#noun)
513−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#nuckso' title="Toplevel coin parser"><code>++nuck:so</code></a>
513+[`++nuck:so`](/docs/hoon/reference/stdlib/4l/#nuckso)
514−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#nud' title="Parse numeric character"><code>++nud</code></a>
514+[`++nud`](/docs/hoon/reference/stdlib/4i/#nud)
515−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#null' title="Null, nil, etc"><code>+$null</code></a>
515+[`+$null`](/docs/hoon/reference/stdlib/4o/#null)
516−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#nuskso' title="Parse coin literal with escapes"><code>++nusk:so</code></a>
516+[`++nusk:so`](/docs/hoon/reference/stdlib/4l/#nuskso)
517
517
518### o
518### o
519
519
520−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#ob' title="Reversible scrambling v2"><code>++ob</code></a>
520+[`++ob`](/docs/hoon/reference/stdlib/3f/#ob)
521−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#og' title="Container arm for SHA256 powered RNG"><code>++og</code></a>
521+[`++og`](/docs/hoon/reference/stdlib/3d/#og)
522−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#oldsi' title="Sign and absolute value"><code>++old:si</code></a>
522+[`++old:si`](/docs/hoon/reference/stdlib/3a/#oldsi)
523−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#onan' title="Vise to vase"><code>++onan</code></a>
523+[`++onan`](/docs/hoon/reference/stdlib/5c/#onan)
524−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#onyx' title="Arm activation"><code>+$onyx</code></a>
524+[`+$onyx`](/docs/hoon/reference/stdlib/4o/#onyx)
525−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#opal' title="Wing match"><code>+$opal</code></a>
525+[`+$opal`](/docs/hoon/reference/stdlib/4o/#opal)
526−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#oust' title="Remove from list"><code>++oust</code></a>
526+[`++oust`](/docs/hoon/reference/stdlib/2b/#oust)
527−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#outfe' title="Maximum integer value"><code>++out:fe</code></a>
527+[`++out:fe`](/docs/hoon/reference/stdlib/2c/#outfe)
528−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#ox-coco' title="Format dot-separated digits in numeric base"><code>++ox-co:co</code></a>
528+[`++ox-co:co`](/docs/hoon/reference/stdlib/4k/#ox-coco)
529
529
530### p
530### p
531
531
532−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#paff' title="Initialize fl from ff core"><code>++pa:ff</code></a>
532+[`++pa:ff`](/docs/hoon/reference/stdlib/3b/#paff)
533−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#padfa' title="base58check padding bytes"><code>++pad:fa</code></a>
533+[`++pad:fa`](/docs/hoon/reference/stdlib/4a/#padfa)
534−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#pair' title="Mold of pair of types"><code>++pair</code></a>
534+[`++pair`](/docs/hoon/reference/stdlib/1c/#pair)
535−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#pam' title="Parse & (pam)"><code>++pam</code></a>
535+[`++pam`](/docs/hoon/reference/stdlib/4h/#pam)
536−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#pat' title="Parse @ (pat)"><code>++pat</code></a>
536+[`++pat`](/docs/hoon/reference/stdlib/4h/#pat)
537−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#path' title="Like unix path"><code>+$path</code></a>
537+[`+$path`](/docs/hoon/reference/stdlib/2q/#path)
538−<a class="tooltip" href='/docs/hoon/reference/stdlib/1b/#peg' title="Address within address"><code>++peg</code></a>
538+[`++peg`](/docs/hoon/reference/stdlib/1b/#peg)
539−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#pal' title="Parse ( (pal)"><code>++pal</code></a>
539+[`++pal`](/docs/hoon/reference/stdlib/4h/#pal)
540−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#palo' title="Wing trace, match"><code>+$palo</code></a>
540+[`+$palo`](/docs/hoon/reference/stdlib/4o/#palo)
541−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#par' title="Parse ) (par)"><code>++par</code></a>
541+[`++par`](/docs/hoon/reference/stdlib/4h/#par)
542−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#pass' title="Public key"><code>++pass</code></a>
542+[`++pass`](/docs/hoon/reference/stdlib/5e/#pass)
543−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#perdso' title="Parsing coin literal without prefixes"><code>++perd:so</code></a>
543+[`++perd:so`](/docs/hoon/reference/stdlib/4l/#perdso)
544−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#perk' title="Parse cube fork"><code>++perk</code></a>
544+[`++perk`](/docs/hoon/reference/stdlib/4f/#perk)
545−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pevab' title="Parse 1-5 @uv base-32 chars"><code>++pev:ab</code></a>
545+[`++pev:ab`](/docs/hoon/reference/stdlib/4j/#pevab)
546−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pewab' title="Parse <= 5 in base 64"><code>++pew:ab</code></a>
546+[`++pew:ab`](/docs/hoon/reference/stdlib/4j/#pewab)
547−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#pfix' title="Discard first rule"><code>++pfix</code></a>
547+[`++pfix`](/docs/hoon/reference/stdlib/4e/#pfix)
548−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-heck' title="Profiling utility"><code>++pi-heck</code></a>
548+[`++pi-heck`](/docs/hoon/reference/stdlib/5f/#pi-heck)
549−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-noon' title="Sample trace"><code>++pi-noon</code></a>
549+[`++pi-noon`](/docs/hoon/reference/stdlib/5f/#pi-noon)
550−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-mope' title="Add sample"><code>++pi-mope</code></a>
550+[`++pi-mope`](/docs/hoon/reference/stdlib/5f/#pi-mope)
551−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-moth' title="Count sample"><code>++pi-moth</code></a>
551+[`++pi-moth`](/docs/hoon/reference/stdlib/5f/#pi-moth)
552−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-mumm' title="Print sample"><code>++pi-mumm</code></a>
552+[`++pi-mumm`](/docs/hoon/reference/stdlib/5f/#pi-mumm)
553−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-tell' title="Produce dump"><code>++pi-tell</code></a>
553+[`++pi-tell`](/docs/hoon/reference/stdlib/5f/#pi-tell)
554−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#pica' title="Prose or code"><code>+$pica</code></a>
554+[`+$pica`](/docs/hoon/reference/stdlib/4o/#pica)
555−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#pint' title="Parsing range"><code>+$pint</code></a>
555+[`+$pint`](/docs/hoon/reference/stdlib/3g/#pint)
556−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pivab' title="Parse 5 @uv base-32 chars"><code>++piv:ab</code></a>
556+[`++piv:ab`](/docs/hoon/reference/stdlib/4j/#pivab)
557−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#piwab' title="Parse 5 @uw base-64 chars"><code>++piw:ab</code></a>
557+[`++piw:ab`](/docs/hoon/reference/stdlib/4j/#piwab)
558−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#plat' title="%hoon, %type, %nock or %tank"><code>+$plat</code></a>
558+[`+$plat`](/docs/hoon/reference/stdlib/4o/#plat)
559−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#plug' title="Parse to tuple"><code>++plug</code></a>
559+[`++plug`](/docs/hoon/reference/stdlib/4e/#plug)
560−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#plus' title="List of at least one match"><code>++plus</code></a>
560+[`++plus`](/docs/hoon/reference/stdlib/4f/#plus)
561−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#po' title="Phonetic base"><code>++po</code></a>
561+[`++po`](/docs/hoon/reference/stdlib/4a/#po)
562−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#pock' title="Changes"><code>+$pock</code></a>
562+[`+$pock`](/docs/hoon/reference/stdlib/4o/#pock)
563−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#pole' title="Mold generator of faceless list"><code>++pole</code></a>
563+[`++pole`](/docs/hoon/reference/stdlib/1c/#pole)
564−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#poly' title="Polarity"><code>+$poly</code></a>
564+[`+$poly`](/docs/hoon/reference/stdlib/4o/#poly)
565−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#port' title="Successful wing match"><code>+$port</code></a>
565+[`+$port`](/docs/hoon/reference/stdlib/4o/#port)
566−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#pose' title="Parse options"><code>++pose</code></a>
566+[`++pose`](/docs/hoon/reference/stdlib/4e/#pose)
567−<a class="tooltip" href='/docs/hoon/reference/stdlib/2g/#pow' title="Computes a to the power of b"><code>++pow</code></a>
567+[`++pow`](/docs/hoon/reference/stdlib/2g/#pow)
568−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#prcfl' title="Force precision of 2 or greater (floating point)"><code>++prc:fl</code></a>
568+[`++prc:fl`](/docs/hoon/reference/stdlib/3b/#prcfl)
569−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#prn' title="Parse any printable character"><code>++prn</code></a>
569+[`++prn`](/docs/hoon/reference/stdlib/4i/#prn)
570−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#profo' title="Multiplies b and c modulo a"><code>++pro:fo</code></a>
570+[`++pro:fo`](/docs/hoon/reference/stdlib/3a/#profo)
571−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#prosi' title="Multiply to signed integer"><code>++pro:si</code></a>
571+[`++pro:si`](/docs/hoon/reference/stdlib/3a/#prosi)
572−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#punt' title="Unitized parse"><code>++punt</code></a>
572+[`++punt`](/docs/hoon/reference/stdlib/4f/#punt)
573−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#putby' title="Add keyvalue pair (map)"><code>++put:by</code></a>
573+[`++put:by`](/docs/hoon/reference/stdlib/2i/#putby)
574−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#putin' title="Put b in a (set)"><code>++put:in</code></a>
574+[`++put:in`](/docs/hoon/reference/stdlib/2h/#putin)
575−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#putju' title="Add keyset pair (jar)"><code>++put:ju</code></a>
575+[`++put:ju`](/docs/hoon/reference/stdlib/2j/#putju)
576−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#putto' title="Insert into queue"><code>++put:to</code></a>
576+[`++put:to`](/docs/hoon/reference/stdlib/2k/#putto)
577
577
578### q
578### q
579
579
580−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#qadyo' title="Seconds in 4 years"><code>++qad:yo</code></a>
580+[`++qad:yo`](/docs/hoon/reference/stdlib/3c/#qadyo)
581−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#qat' title="Parse chars in blockcord"><code>++qat</code></a>
581+[`++qat`](/docs/hoon/reference/stdlib/4i/#qat)
582−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#qebab' title="Parse 1-4 binary digits"><code>++qeb:ab</code></a>
582+[`++qeb:ab`](/docs/hoon/reference/stdlib/4j/#qebab)
583−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#qeu' title="Mold generator (queue)"><code>++qeu</code></a>
583+[`++qeu`](/docs/hoon/reference/stdlib/2o/#qeu)
584−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#qexab' title="Parse 1-4 hex digits"><code>++qex:ab</code></a>
584+[`++qex:ab`](/docs/hoon/reference/stdlib/4j/#qexab)
585−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#qibab' title="Parse 4 binary digits"><code>++qib:ab</code></a>
585+[`++qib:ab`](/docs/hoon/reference/stdlib/4j/#qibab)
586−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#qit' title="Parse character to cord atom"><code>++qit</code></a>
586+[`++qit`](/docs/hoon/reference/stdlib/4i/#qit)
587−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#qixab' title="Parse 4 hexadecimal digits"><code>++qix:ab</code></a>
587+[`++qix:ab`](/docs/hoon/reference/stdlib/4j/#qixab)
588−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#quip' title="Mold generator (tuple of list and type)"><code>++quip</code></a>
588+[`++quip`](/docs/hoon/reference/stdlib/1c/#quip)
589−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#qut' title="Parse cord"><code>++qut</code></a>
589+[`++qut`](/docs/hoon/reference/stdlib/4i/#qut)
590
590
591### r
591### r
592
592
593−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rat' title="Print term, number or hex"><code>++r:at</code></a>
593+[`++r:at`](/docs/hoon/reference/stdlib/4b/#rat)
594−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#radog' title="Random in range"><code>++rad:og</code></a>
594+[`++rad:og`](/docs/hoon/reference/stdlib/3d/#radog)
595−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#radsog' title="Random continuation"><code>++rads:og</code></a>
595+[`++rads:og`](/docs/hoon/reference/stdlib/3d/#radsog)
596−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#rain' title="Parse with % path"><code>++rain</code></a>
596+[`++rain`](/docs/hoon/reference/stdlib/5d/#rain)
597−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#rakuob' title="Key list"><code>++raku:ob</code></a>
597+[`++raku:ob`](/docs/hoon/reference/stdlib/3f/#rakuob)
598−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#ramre' title="Flatten tank to tape"><code>++ram:re</code></a>
598+[`++ram:re`](/docs/hoon/reference/stdlib/4c/#ramre)
599−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rap' title="Assemble nonzero"><code>++rap</code></a>
599+[`++rap`](/docs/hoon/reference/stdlib/2c/#rap)
600−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#rash' title="Parse or crash"><code>++rash</code></a>
600+[`++rash`](/docs/hoon/reference/stdlib/4g/#rash)
601−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#raufl' title="Various roundings (floating point)"><code>++rau:fl</code></a>
601+[`++rau:fl`](/docs/hoon/reference/stdlib/3b/#raufl)
602−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#rawog' title="Random bits"><code>++raw:og</code></a>
602+[`++raw:og`](/docs/hoon/reference/stdlib/3d/#rawog)
603−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#rawsog' title="Random bits continuation"><code>++raws:og</code></a>
603+[`++raws:og`](/docs/hoon/reference/stdlib/3d/#rawsog)
604−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#r-coco' title="Render floating point"><code>++r-co:co</code></a>
604+[`++r-co:co`](/docs/hoon/reference/stdlib/4k/#r-coco)
605−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#re' title="Prettyprinting engine (tank)"><code>++re</code></a>
605+[`++re`](/docs/hoon/reference/stdlib/4c/#re)
606−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#ream' title="Parse cord to hoon"><code>++ream</code></a>
606+[`++ream`](/docs/hoon/reference/stdlib/5d/#ream)
607−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#rear' title="Last item in list"><code>++rear</code></a>
607+[`++rear`](/docs/hoon/reference/stdlib/2b/#rear)
608−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#rearco' title="Prepend and render atom as tape"><code>++rear:co</code></a>
608+[`++rear:co`](/docs/hoon/reference/stdlib/4k/#rearco)
609−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#reap' title="Replicate (list)"><code>++reap</code></a>
609+[`++reap`](/docs/hoon/reference/stdlib/2b/#reap)
610−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#reck' title="Parse hoon file"><code>++reck</code></a>
610+[`++reck`](/docs/hoon/reference/stdlib/5d/#reck)
611−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#reel' title="Right fold (list)"><code>++reel</code></a>
611+[`++reel`](/docs/hoon/reference/stdlib/2b/#reel)
612−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#remsi' title="Remainder (signed integer)"><code>++rem:si</code></a>
612+[`++rem:si`](/docs/hoon/reference/stdlib/3a/#remsi)
613−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#rendco' title="Render coin lot as tape"><code>++rend:co</code></a>
613+[`++rend:co`](/docs/hoon/reference/stdlib/4k/#rendco)
614−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#rentco' title="Render coin as knot"><code>++rent:co</code></a>
614+[`++rent:co`](/docs/hoon/reference/stdlib/4k/#rentco)
615−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rep' title="Assemble single"><code>++rep</code></a>
615+[`++rep`](/docs/hoon/reference/stdlib/2c/#rep)
616−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#repby' title="Reduce to product (map)"><code>++rep:by</code></a>
616+[`++rep:by`](/docs/hoon/reference/stdlib/2i/#repby)
617−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#repin' title="Accumulate elements (set)"><code>++rep:in</code></a>
617+[`++rep:in`](/docs/hoon/reference/stdlib/2h/#repin)
618−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#result' title="Internal interpreter result"><code>+$result</code></a>
618+[`+$result`](/docs/hoon/reference/stdlib/4o/#result)
619−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rev' title="Reverse"><code>++rev</code></a>
619+[`++rev`](/docs/hoon/reference/stdlib/2c/#rev)
620−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rfat' title="Print loobean"><code>++rf:at</code></a>
620+[`++rf:at`](/docs/hoon/reference/stdlib/4b/#rfat)
621−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#ribby' title="Transform + product (map)"><code>++rib:by</code></a>
621+[`++rib:by`](/docs/hoon/reference/stdlib/2i/#ribby)
622−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#ride' title="End-to-end compiler"><code>++ride</code></a>
622+[`++ride`](/docs/hoon/reference/stdlib/5d/#ride)
623−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#ring' title="Private key"><code>++ring</code></a>
623+[`++ring`](/docs/hoon/reference/stdlib/5e/#ring)
624−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rip' title="Disassemble"><code>++rip</code></a>
624+[`++rip`](/docs/hoon/reference/stdlib/2c/#rip)
625−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rnat' title="Print null"><code>++rn:at</code></a>
625+[`++rn:at`](/docs/hoon/reference/stdlib/4b/#rnat)
626−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#ro-coco' title="Format dot-prefixed bloqs in numeric base"><code>++ro-co:co</code></a>
626+[`++ro-co:co`](/docs/hoon/reference/stdlib/4k/#ro-coco)
627−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#road' title="Evaluate trap"><code>++road</code></a>
627+[`++road`](/docs/hoon/reference/stdlib/5c/#road)
628−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rolfe' title="Roll left"><code>++rol:fe</code></a>
628+[`++rol:fe`](/docs/hoon/reference/stdlib/2c/#rolfe)
629−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#roll' title="Left fold (list)"><code>++roll</code></a>
629+[`++roll`](/docs/hoon/reference/stdlib/2b/#roll)
630<code>++rood</code>
630<code>++rood</code>
631−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rorfe' title="Roll right"><code>++ror:fe</code></a>
631+[`++ror:fe`](/docs/hoon/reference/stdlib/2c/#rorfe)
632−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#rose' title="Parse to each"><code>++rose</code></a>
632+[`++rose`](/docs/hoon/reference/stdlib/4g/#rose)
633−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#roufl' title="Round to nearest float with 113bit significand"><code>++rou:fl</code></a>
633+[`++rou:fl`](/docs/hoon/reference/stdlib/3b/#roufl)
634−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#roylso' title="Parse dime float"><code>++royl:so</code></a>
634+[`++royl:so`](/docs/hoon/reference/stdlib/4l/#roylso)
635−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-cellso' title="Convert rn to dn"><code>++royl-cell:so</code></a>
635+[`++royl-cell:so`](/docs/hoon/reference/stdlib/4l/#royl-cellso)
636−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rhso' title="Parse half-precision float"><code>++royl-rh:so</code></a>
636+[`++royl-rh:so`](/docs/hoon/reference/stdlib/4l/#royl-rhso)
637−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rqso' title="Parse quad-precision float"><code>++royl-rq:so</code></a>
637+[`++royl-rq:so`](/docs/hoon/reference/stdlib/4l/#royl-rqso)
638−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rdso' title="Parse double-precision float"><code>++royl-rd:so</code></a>
638+[`++royl-rd:so`](/docs/hoon/reference/stdlib/4l/#royl-rdso)
639−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rsso' title="Parse single-precision float"><code>++royl-rs:so</code></a>
639+[`++royl-rs:so`](/docs/hoon/reference/stdlib/4l/#royl-rsso)
640−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rnso' title="Parse real number"><code>++royl-rn:so</code></a>
640+[`++royl-rn:so`](/docs/hoon/reference/stdlib/4l/#royl-rnso)
641−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rsh' title="Rightshift"><code>++rsh</code></a>
641+[`++rsh`](/docs/hoon/reference/stdlib/2c/#rsh)
642−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rtat' title="Print cord, including escape characters"><code>++rt:at</code></a>
642+[`++rt:at`](/docs/hoon/reference/stdlib/4b/#rtat)
643−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rtaat' title="Print cord, including escape characters"><code>++rta:at</code></a>
643+[`++rta:at`](/docs/hoon/reference/stdlib/4b/#rtaat)
644−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rtamat' title="Print cord with @tas syntax"><code>++rtam:at</code></a>
644+[`++rtam:at`](/docs/hoon/reference/stdlib/4b/#rtamat)
645−<a class="tooltip" href='/docs/hoon/reference/stdlib/2p/#rub' title="Lengthdecode"><code>++rub</code></a>
645+[`++rub`](/docs/hoon/reference/stdlib/2p/#rub)
646−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rubat' title="Print binary"><code>++rub:at</code></a>
646+[`++rub:at`](/docs/hoon/reference/stdlib/4b/#rubat)
647−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rudat' title="Print atom as integer"><code>++rud:at</code></a>
647+[`++rud:at`](/docs/hoon/reference/stdlib/4b/#rudat)
648−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#rule' title="Parsing rule (match this with _)"><code>+$rule</code></a>
648+[`+$rule`](/docs/hoon/reference/stdlib/3g/#rule)
649−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rumat' title="Print base-n"><code>++rum:at</code></a>
649+[`++rum:at`](/docs/hoon/reference/stdlib/4b/#rumat)
650−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#runby' title="Transform values (map)"><code>++run:by</code></a>
650+[`++run:by`](/docs/hoon/reference/stdlib/2i/#runby)
651−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#runin' title="Apply gate to set"><code>++run:in</code></a>
651+[`++run:in`](/docs/hoon/reference/stdlib/2h/#runin)
652−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#runt' title="Prepend n times"><code>++runt</code></a>
652+[`++runt`](/docs/hoon/reference/stdlib/4b/#runt)
653−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rupat' title="Print @p (outdated)"><code>++rup:at</code></a>
653+[`++rup:at`](/docs/hoon/reference/stdlib/4b/#rupat)
654−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#rush' title="Parse or null"><code>++rush</code></a>
654+[`++rush`](/docs/hoon/reference/stdlib/4g/#rush)
655−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#rust' title="Parse tape or null"><code>++rust</code></a>
655+[`++rust`](/docs/hoon/reference/stdlib/4g/#rust)
656−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#rutby' title="Transform nodes (map)"><code>++rut:by</code></a>
656+[`++rut:by`](/docs/hoon/reference/stdlib/2i/#rutby)
657−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#ruvat' title="Print base-64"><code>++ruv:at</code></a>
657+[`++ruv:at`](/docs/hoon/reference/stdlib/4b/#ruvat)
658−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#ruxat' title="Print hexadecimal"><code>++rux:at</code></a>
658+[`++rux:at`](/docs/hoon/reference/stdlib/4b/#ruxat)
659
659
660### s
660### s
661
661
662−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#same' title="Identity (produces same value)"><code>++same</code></a>
662+[`++same`](/docs/hoon/reference/stdlib/2n/#same)
663−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanff' title="Signed integer to @r"><code>++san:ff</code></a>
663+[`++san:ff`](/docs/hoon/reference/stdlib/3b/#sanff)
664−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanfl' title="Signed integer to float"><code>++san:fl</code></a>
664+[`++san:fl`](/docs/hoon/reference/stdlib/3b/#sanfl)
665−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanrd' title="Unsigned integer to @rd"><code>++san:rd</code></a>
665+[`++san:rd`](/docs/hoon/reference/stdlib/3b/#sanrd)
666−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanrh' title="Signed integer to @rh"><code>++san:rh</code></a>
666+[`++san:rh`](/docs/hoon/reference/stdlib/3b/#sanrh)
667−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanrs' title="Signed integer to @rs"><code>++san:rs</code></a>
667+[`++san:rs`](/docs/hoon/reference/stdlib/3b/#sanrs)
668−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanrq' title="Signed integer to @rq"><code>++san:rq</code></a>
668+[`++san:rq`](/docs/hoon/reference/stdlib/3b/#sanrq)
669−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#sand' title="Softcast by aura"><code>++sand</code></a>
669+[`++sand`](/docs/hoon/reference/stdlib/4b/#sand)
670−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#sane' title="Check aura validity"><code>++sane</code></a>
670+[`++sane`](/docs/hoon/reference/stdlib/4b/#sane)
671−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sbff' title="Sign bit"><code>++sb:ff</code></a>
671+[`++sb:ff`](/docs/hoon/reference/stdlib/3b/#sbff)
672−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#scag' title="Prefix (produce front of list)"><code>++scag</code></a>
672+[`++scag`](/docs/hoon/reference/stdlib/2b/#scag)
673−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#scan' title="Parse tape or crash"><code>++scan</code></a>
673+[`++scan`](/docs/hoon/reference/stdlib/4g/#scan)
674−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#s-coco' title="Render hex list"><code>++s-co:co</code></a>
674+[`++s-co:co`](/docs/hoon/reference/stdlib/4k/#s-coco)
675−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#scot' title="Render dime as cord"><code>++scot</code></a>
675+[`++scot`](/docs/hoon/reference/stdlib/4m/#scot)
676−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#scow' title="Render dime as tape"><code>++scow</code></a>
676+[`++scow`](/docs/hoon/reference/stdlib/4m/#scow)
677−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#seaff' title="Convert from IEEE float to fn"><code>++sea:ff</code></a>
677+[`++sea:ff`](/docs/hoon/reference/stdlib/3b/#seaff)
678−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#seard' title="Convert from doubleprecision binary float to fn"><code>++sea:rd</code></a>
678+[`++sea:rd`](/docs/hoon/reference/stdlib/3b/#seard)
679−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#searh' title="Convert from halfprecision float to fn"><code>++sea:rh</code></a>
679+[`++sea:rh`](/docs/hoon/reference/stdlib/3b/#searh)
680−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sears' title="Convert from singleprecision float to fn"><code>++sea:rs</code></a>
680+[`++sea:rs`](/docs/hoon/reference/stdlib/3b/#sears)
681−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#searq' title="Convert from quadprecision float to fn"><code>++sea:rq</code></a>
681+[`++sea:rq`](/docs/hoon/reference/stdlib/3b/#searq)
682−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#sear' title="Conditional ++cook"><code>++sear</code></a>
682+[`++sear`](/docs/hoon/reference/stdlib/4f/#sear)
683−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sebab' title="Parse 1"><code>++seb:ab</code></a>
683+[`++seb:ab`](/docs/hoon/reference/stdlib/4j/#sebab)
684−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#sect' title="Paragraph"><code>+$sect</code></a>
684+[`+$sect`](/docs/hoon/reference/stdlib/4o/#sect)
685−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sedab' title="Parse nonzero decimal digit"><code>++sed:ab</code></a>
685+[`++sed:ab`](/docs/hoon/reference/stdlib/4j/#sedab)
686−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#seem' title="Promote typo"><code>++seem</code></a>
686+[`++seem`](/docs/hoon/reference/stdlib/5c/#seem)
687−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#seer' title="Promote vise"><code>++seer</code></a>
687+[`++seer`](/docs/hoon/reference/stdlib/5c/#seer)
688−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#sel' title="Parse [ (sel)"><code>++sel</code></a>
688+[`++sel`](/docs/hoon/reference/stdlib/4h/#sel)
689−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#sell' title="Pretty-print vase to a tank"><code>++sell</code></a>
689+[`++sell`](/docs/hoon/reference/stdlib/5c/#sell)
690−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#mic' title="Parse ; (mic)"><code>++mic</code></a>
690+[`++mic`](/docs/hoon/reference/stdlib/4h/#mic)
691−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#ser' title="Parse ] (ser)"><code>++ser</code></a>
691+[`++ser`](/docs/hoon/reference/stdlib/4h/#ser)
692−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#set' title="Mold generator (set)"><code>++set</code></a>
692+[`++set`](/docs/hoon/reference/stdlib/2o/#set)
693−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sevab' title="Parse nonzero base 32 digit"><code>++sev:ab</code></a>
693+[`++sev:ab`](/docs/hoon/reference/stdlib/4j/#sevab)
694−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#sew' title="Stitch one atom into another"><code>++sew</code></a>
694+[`++sew`](/docs/hoon/reference/stdlib/2c/#sew)
695−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sewab' title="Parse nonzero base 64 digit"><code>++sew:ab</code></a>
695+[`++sew:ab`](/docs/hoon/reference/stdlib/4j/#sewab)
696−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sexab' title="Parse nonzero hexadecimal digit"><code>++sex:ab</code></a>
696+[`++sex:ab`](/docs/hoon/reference/stdlib/4j/#sexab)
697−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#sfix' title="Discard second rule"><code>++sfix</code></a>
697+[`++sfix`](/docs/hoon/reference/stdlib/4e/#sfix)
698−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shad' title="Double SHA256"><code>++shad</code></a>
698+[`++shad`](/docs/hoon/reference/stdlib/3d/#shad)
699−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shaf' title="Half SHA256"><code>++shaf</code></a>
699+[`++shaf`](/docs/hoon/reference/stdlib/3d/#shaf)
700−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shal' title="SHA512 with length"><code>++shal</code></a>
700+[`++shal`](/docs/hoon/reference/stdlib/3d/#shal)
701−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#sham' title="128bit noun hash"><code>++sham</code></a>
701+[`++sham`](/docs/hoon/reference/stdlib/3d/#sham)
702−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shan' title="SHA1"><code>++shan</code></a>
702+[`++shan`](/docs/hoon/reference/stdlib/3d/#shan)
703−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shas' title="Salted hash"><code>++shas</code></a>
703+[`++shas`](/docs/hoon/reference/stdlib/3d/#shas)
704−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shaw' title="Hash to nbits"><code>++shaw</code></a>
704+[`++shaw`](/docs/hoon/reference/stdlib/3d/#shaw)
705−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shax' title="SHA256"><code>++shax</code></a>
705+[`++shax`](/docs/hoon/reference/stdlib/3d/#shax)
706−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shay' title="SHA256 with length"><code>++shay</code></a>
706+[`++shay`](/docs/hoon/reference/stdlib/3d/#shay)
707−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shaz' title="SHA512"><code>++shaz</code></a>
707+[`++shaz`](/docs/hoon/reference/stdlib/3d/#shaz)
708−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#shffl' title="Shift power"><code>++shf:fl</code></a>
708+[`++shf:fl`](/docs/hoon/reference/stdlib/3b/#shffl)
709−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#shim' title="Match character within range"><code>++shim</code></a>
709+[`++shim`](/docs/hoon/reference/stdlib/4f/#shim)
710−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#ship' title="Network identity"><code>++ship</code></a>
710+[`++ship`](/docs/hoon/reference/stdlib/5e/#ship)
711−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#shop' title="Urbit/DNS identity"><code>++shop</code></a>
711+[`++shop`](/docs/hoon/reference/stdlib/5e/#shop)
712−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#show' title="Pretty-printer (deprecated)"><code>++show</code></a>
712+[`++show`](/docs/hoon/reference/stdlib/4c/#show)
713−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#si' title="Signed integer"><code>++si</code></a>
713+[`++si`](/docs/hoon/reference/stdlib/3a/#si)
714−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#sinl' title="Construct set from nullterminated noun"><code>++si:nl</code></a>
714+[`++si:nl`](/docs/hoon/reference/stdlib/2m/#sinl)
715−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sibab' title="Parse binary digit"><code>++sib:ab</code></a>
715+[`++sib:ab`](/docs/hoon/reference/stdlib/4j/#sibab)
716−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sidab' title="Parse decimal digit"><code>++sid:ab</code></a>
716+[`++sid:ab`](/docs/hoon/reference/stdlib/4j/#sidab)
717−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#sig' title="Parse ~ (sig)"><code>++sig</code></a>
717+[`++sig`](/docs/hoon/reference/stdlib/4h/#sig)
718−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigff' title="Produce sign of IEEE float"><code>++sig:ff</code></a>
718+[`++sig:ff`](/docs/hoon/reference/stdlib/3b/#sigff)
719−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigrd' title="Produce sign of @rd"><code>++sig:rd</code></a>
719+[`++sig:rd`](/docs/hoon/reference/stdlib/3b/#sigrd)
720−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigrh' title="Produce sign of halfprecision float"><code>++sig:rh</code></a>
720+[`++sig:rh`](/docs/hoon/reference/stdlib/3b/#sigrh)
721−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigrs' title="Produce sign of @rs"><code>++sig:rs</code></a>
721+[`++sig:rs`](/docs/hoon/reference/stdlib/3b/#sigrs)
722−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigrq' title="Produce sign of quadprecision float"><code>++sig:rq</code></a>
722+[`++sig:rq`](/docs/hoon/reference/stdlib/3b/#sigrq)
723−<a class="tooltip" href='/docs/hoon/reference/stdlib/2l/#silt' title="Produce set from list"><code>++silt</code></a>
723+[`++silt`](/docs/hoon/reference/stdlib/2l/#silt)
724−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#simu' title="First and second"><code>++simu</code></a>
724+[`++simu`](/docs/hoon/reference/stdlib/4e/#simu)
725−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#sitfe' title="Enforce modulo"><code>++sit:fe</code></a>
725+[`++sit:fe`](/docs/hoon/reference/stdlib/2c/#sitfe)
726−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#sitfo' title="Produce remainder of b modulo a"><code>++sit:fo</code></a>
726+[`++sit:fo`](/docs/hoon/reference/stdlib/3a/#sitfo)
727−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sivab' title="Parse a base 32 digit"><code>++siv:ab</code></a>
727+[`++siv:ab`](/docs/hoon/reference/stdlib/4j/#sivab)
728−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#siwab' title="Parse a base 64 digit"><code>++siw:ab</code></a>
728+[`++siw:ab`](/docs/hoon/reference/stdlib/4j/#siwab)
729−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sixab' title="Parse a hexadecimal digit"><code>++six:ab</code></a>
729+[`++six:ab`](/docs/hoon/reference/stdlib/4j/#sixab)
730−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#skid' title="Separate list into two lists from slammed elments"><code>++skid</code></a>
730+[`++skid`](/docs/hoon/reference/stdlib/2b/#skid)
731−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#skim' title="Produce list of elements from boolean gate"><code>++skim</code></a>
731+[`++skim`](/docs/hoon/reference/stdlib/2b/#skim)
732−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#skin' title="Texture"><code>+$skin</code></a>
732+[`+$skin`](/docs/hoon/reference/stdlib/4o/#skin)
733−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#skip' title="Produce list of elements failing boolean gate"><code>++skip</code></a>
733+[`++skip`](/docs/hoon/reference/stdlib/2b/#skip)
734−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#skol' title="Pretty-print type to tank"><code>++skol</code></a>
734+[`++skol`](/docs/hoon/reference/stdlib/5c/#skol)
735−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slab' title="Test if contains"><code>++slab</code></a>
735+[`++slab`](/docs/hoon/reference/stdlib/5c/#slab)
736−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#slag' title="Produce all elements from index in list"><code>++slag</code></a>
736+[`++slag`](/docs/hoon/reference/stdlib/2b/#slag)
737−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slam' title="Slam a gate"><code>++slam</code></a>
737+[`++slam`](/docs/hoon/reference/stdlib/5c/#slam)
738−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slap' title="Untyped vase .*"><code>++slap</code></a>
738+[`++slap`](/docs/hoon/reference/stdlib/5c/#slap)
739−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#slat' title="Curried slaw"><code>++slat</code></a>
739+[`++slat`](/docs/hoon/reference/stdlib/4m/#slat)
740−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#slav' title="Demand: parse cord with input aura"><code>++slav</code></a>
740+[`++slav`](/docs/hoon/reference/stdlib/4m/#slav)
741−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#slaw' title="Parse cord to input aura"><code>++slaw</code></a>
741+[`++slaw`](/docs/hoon/reference/stdlib/4m/#slaw)
742−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#slay' title="Parse cord to coin"><code>++slay</code></a>
742+[`++slay`](/docs/hoon/reference/stdlib/4m/#slay)
743−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slew' title="Get axis in vase"><code>++slew</code></a>
743+[`++slew`](/docs/hoon/reference/stdlib/5c/#slew)
744−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slim' title="Identical to ++seer"><code>++slim</code></a>
744+[`++slim`](/docs/hoon/reference/stdlib/5c/#slim)
745−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slit' title="Type of slam"><code>++slit</code></a>
745+[`++slit`](/docs/hoon/reference/stdlib/5c/#slit)
746−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slob' title="Superficial arm"><code>++slob</code></a>
746+[`++slob`](/docs/hoon/reference/stdlib/5c/#slob)
747−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#sloe' title="Get arms in core"><code>++sloe</code></a>
747+[`++sloe`](/docs/hoon/reference/stdlib/5c/#sloe)
748−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slog' title="Deify printf"><code>++slog</code></a>
748+[`++slog`](/docs/hoon/reference/stdlib/5c/#slog)
749−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slop' title="Cons two vases"><code>++slop</code></a>
749+[`++slop`](/docs/hoon/reference/stdlib/5c/#slop)
750−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slot' title="Got axis in vase"><code>++slot</code></a>
750+[`++slot`](/docs/hoon/reference/stdlib/5c/#slot)
751−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#slug' title="Use gate to parse delimited list"><code>++slug</code></a>
751+[`++slug`](/docs/hoon/reference/stdlib/4f/#slug)
752−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#slum' title="Slam a gate on a sample using raw nock, untyped"><code>++slum</code></a>
752+[`++slum`](/docs/hoon/reference/stdlib/4n/#slum)
753−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slym' title="Slam without sample-type"><code>++slym</code></a>
753+[`++slym`](/docs/hoon/reference/stdlib/5c/#slym)
754−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#smyt' title="Render path as tank"><code>++smyt</code></a>
754+[`++smyt`](/docs/hoon/reference/stdlib/4m/#smyt)
755−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#snag' title="Produce element at specific index (list)"><code>++snag</code></a>
755+[`++snag`](/docs/hoon/reference/stdlib/2b/#snag)
756−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#snagnl' title="Produce element from list at specific nullterminated noun"><code>++snag:nl</code></a>
756+[`++snag:nl`](/docs/hoon/reference/stdlib/2m/#snagnl)
757−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#snip' title="Drop tail off list"><code>++snip</code></a>
757+[`++snip`](/docs/hoon/reference/stdlib/2b/#snip)
758−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#snoc' title="Append noun to list"><code>++snoc</code></a>
758+[`++snoc`](/docs/hoon/reference/stdlib/2b/#snoc)
759−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#so' title="Coin parser engine"><code>++so</code></a>
759+[`++so`](/docs/hoon/reference/stdlib/4l/#so)
760−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#soft' title="Virtual clam"><code>++soft</code></a>
760+[`++soft`](/docs/hoon/reference/stdlib/4n/#soft)
761−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#some' title="Wrap value in unit"><code>++some</code></a>
761+[`++some`](/docs/hoon/reference/stdlib/2a/#some)
762−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#soq' title="Parse ' (soq)"><code>++soq</code></a>
762+[`++soq`](/docs/hoon/reference/stdlib/4h/#soq)
763−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#sort' title="Quicksort (list)"><code>++sort</code></a>
763+[`++sort`](/docs/hoon/reference/stdlib/2b/#sort)
764−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sovab' title="Parse @uv base-32 letter"><code>++sov:ab</code></a>
764+[`++sov:ab`](/docs/hoon/reference/stdlib/4j/#sovab)
765−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sowab' title="Parse @uw base-64 letter/symbol"><code>++sow:ab</code></a>
765+[`++sow:ab`](/docs/hoon/reference/stdlib/4j/#sowab)
766−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#soxab' title="Parse hexadecimal letter"><code>++sox:ab</code></a>
766+[`++sox:ab`](/docs/hoon/reference/stdlib/4j/#soxab)
767−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#soz' title="Parse triple singlequote"><code>++soz</code></a>
767+[`++soz`](/docs/hoon/reference/stdlib/4i/#soz)
768−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#spat' title="Render path as cord"><code>++spat</code></a>
768+[`++spat`](/docs/hoon/reference/stdlib/4m/#spat)
769−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#spdfl' title="Produce smallest denormalized float"><code>++spd:fl</code></a>
769+[`++spd:fl`](/docs/hoon/reference/stdlib/3b/#spdfl)
770−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#spec' title="Structure definition AST"><code>+$spec</code></a>
770+[`+$spec`](/docs/hoon/reference/stdlib/4o/#spec)
771−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#sped' title="Reconstruct type"><code>++sped</code></a>
771+[`++sped`](/docs/hoon/reference/stdlib/5c/#sped)
772−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#spin' title="Gate to list (with state)"><code>++spin</code></a>
772+[`++spin`](/docs/hoon/reference/stdlib/2b/#spin)
773−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#spnfl' title="Produce smallest normal float"><code>++spn:fl</code></a>
773+[`++spn:fl`](/docs/hoon/reference/stdlib/3b/#spnfl)
774−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#spot' title="Stack trace line"><code>+$spot</code></a>
774+[`+$spot`](/docs/hoon/reference/stdlib/3g/#spot)
775−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#spud' title="Render path as tape"><code>++spud</code></a>
775+[`++spud`](/docs/hoon/reference/stdlib/4m/#spud)
776−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#spun' title="Gate to list (with state)"><code>++spun</code></a>
776+[`++spun`](/docs/hoon/reference/stdlib/2b/#spun)
777−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#spur' title="ship desk case spur"><code>++spur</code></a>
777+[`++spur`](/docs/hoon/reference/stdlib/5e/#spur)
778−<a class="tooltip" href='/docs/hoon/reference/stdlib/2g/#sqt' title="Compute square root with remainder"><code>++sqt</code></a>
778+[`++sqt`](/docs/hoon/reference/stdlib/2g/#sqt)
779−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtff' title="Produce square root of IEEE float"><code>++sqt:ff</code></a>
779+[`++sqt:ff`](/docs/hoon/reference/stdlib/3b/#sqtff)
780−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtfl' title="Produce square root from signed and unsigned integer cell"><code>++sqt:fl</code></a>
780+[`++sqt:fl`](/docs/hoon/reference/stdlib/3b/#sqtfl)
781−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtrd' title="Produce square root of doubleprecision float"><code>++sqt:rd</code></a>
781+[`++sqt:rd`](/docs/hoon/reference/stdlib/3b/#sqtrd)
782−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtrh' title="Produce square root of halfprecision float"><code>++sqt:rh</code></a>
782+[`++sqt:rh`](/docs/hoon/reference/stdlib/3b/#sqtrh)
783−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtrs' title="Produce square root of singleprecision float"><code>++sqt:rs</code></a>
783+[`++sqt:rs`](/docs/hoon/reference/stdlib/3b/#sqtrs)
784−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtrq' title="Produce square root of quadprecision float"><code>++sqt:rq</code></a>
784+[`++sqt:rq`](/docs/hoon/reference/stdlib/3b/#sqtrq)
785−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#stab' title="Parse cord to path"><code>++stab</code></a>
785+[`++stab`](/docs/hoon/reference/stdlib/4m/#stab)
786−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stag' title="Add label"><code>++stag</code></a>
786+[`++stag`](/docs/hoon/reference/stdlib/4f/#stag)
787−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#stap' title="Path parser"><code>++stap</code></a>
787+[`++stap`](/docs/hoon/reference/stdlib/4m/#stap)
788−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#star' title="Produce list of matches"><code>++star</code></a>
788+[`++star`](/docs/hoon/reference/stdlib/4f/#star)
789−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#step' title="Atom size or offset, in bloqs"><code>++step</code></a>
789+[`++step`](/docs/hoon/reference/stdlib/1c/#step)
790−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stet' title="Add faces to rangeparser pairs in list"><code>++stet</code></a>
790+[`++stet`](/docs/hoon/reference/stdlib/4f/#stet)
791−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stew' title="Switch by first"><code>++stew</code></a>
791+[`++stew`](/docs/hoon/reference/stdlib/4f/#stew)
792−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stir' title="Parse repeatedly"><code>++stir</code></a>
792+[`++stir`](/docs/hoon/reference/stdlib/4f/#stir)
793−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#stud' title="Standard name"><code>+$stud</code></a>
793+[`+$stud`](/docs/hoon/reference/stdlib/2q/#stud)
794−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stun' title="Parse several times"><code>++stun</code></a>
794+[`++stun`](/docs/hoon/reference/stdlib/4f/#stun)
795−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#sub' title="Subtract"><code>++sub</code></a>
795+[`++sub`](/docs/hoon/reference/stdlib/1a/#sub)
796−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subff' title="Subtract from IEEE float"><code>++sub:ff</code></a>
796+[`++sub:ff`](/docs/hoon/reference/stdlib/3b/#subff)
797−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subfl' title="Subtract from signed and unsigned integer cells"><code>++sub:fl</code></a>
797+[`++sub:fl`](/docs/hoon/reference/stdlib/3b/#subfl)
798−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subrd' title="Subtract from doubleprecision float"><code>++sub:rd</code></a>
798+[`++sub:rd`](/docs/hoon/reference/stdlib/3b/#subrd)
799−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subrh' title="Subtract from halfprecision float"><code>++sub:rh</code></a>
799+[`++sub:rh`](/docs/hoon/reference/stdlib/3b/#subrh)
800−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subrs' title="Subtract from singleprecision float"><code>++sub:rs</code></a>
800+[`++sub:rs`](/docs/hoon/reference/stdlib/3b/#subrs)
801−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subrq' title="Subtract from quadprecision float"><code>++sub:rq</code></a>
801+[`++sub:rq`](/docs/hoon/reference/stdlib/3b/#subrq)
802−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#succ' title="Successor"><code>++succ</code></a>
802+[`++succ`](/docs/hoon/reference/stdlib/2n/#succ)
803−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#sumfe' title="Sum two numbers in modular field"><code>++sum:fe</code></a>
803+[`++sum:fe`](/docs/hoon/reference/stdlib/2c/#sumfe)
804−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#sumfo' title="Modular sum"><code>++sum:fo</code></a>
804+[`++sum:fo`](/docs/hoon/reference/stdlib/3a/#sumfo)
805−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#sumsi' title="Addition (signed integer)"><code>++sum:si</code></a>
805+[`++sum:si`](/docs/hoon/reference/stdlib/3a/#sumsi)
806−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunff' title="Unsigned integer to IEEE float"><code>++sun:ff</code></a>
806+[`++sun:ff`](/docs/hoon/reference/stdlib/3b/#sunff)
807−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunfl' title="Unsigned integer to float"><code>++sun:fl</code></a>
807+[`++sun:fl`](/docs/hoon/reference/stdlib/3b/#sunfl)
808−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunrd' title="Unsigned integer to doubleprecision float"><code>++sun:rd</code></a>
808+[`++sun:rd`](/docs/hoon/reference/stdlib/3b/#sunrd)
809−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunrh' title="Unsigned integer to halfprecision float"><code>++sun:rh</code></a>
809+[`++sun:rh`](/docs/hoon/reference/stdlib/3b/#sunrh)
810−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunrs' title="Unsigned integer to singleprecision float"><code>++sun:rs</code></a>
810+[`++sun:rs`](/docs/hoon/reference/stdlib/3b/#sunrs)
811−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunrq' title="Unsigned integer to quadprecision float"><code>++sun:rq</code></a>
811+[`++sun:rq`](/docs/hoon/reference/stdlib/3b/#sunrq)
812−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#sunsi' title="@u to @s"><code>++sun:si</code></a>
812+[`++sun:si`](/docs/hoon/reference/stdlib/3a/#sunsi)
813−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#swag' title="Infix (list)"><code>++swag</code></a>
813+[`++swag`](/docs/hoon/reference/stdlib/2b/#swag)
814−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#swat' title="Deferred ++slap"><code>++swat</code></a>
814+[`++swat`](/docs/hoon/reference/stdlib/5c/#swat)
815−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#swp' title="Reverse block order"><code>++swp</code></a>
815+[`++swp`](/docs/hoon/reference/stdlib/2c/#swp)
816−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#swrfl' title="Switch rounding mode of floating point"><code>++swr:fl</code></a>
816+[`++swr:fl`](/docs/hoon/reference/stdlib/3b/#swrfl)
817−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#sy' title="Produce set from nullterminated noun"><code>++sy</code></a>
817+[`++sy`](/docs/hoon/reference/stdlib/2m/#sy)
818−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#sym' title="Term"><code>++sym</code></a>
818+[`++sym`](/docs/hoon/reference/stdlib/4i/#sym)
819−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#synfl' title="Get sign"><code>++syn:fl</code></a>
819+[`++syn:fl`](/docs/hoon/reference/stdlib/3b/#synfl)
820−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#synsi' title="Sign test"><code>++syn:si</code></a>
820+[`++syn:si`](/docs/hoon/reference/stdlib/3a/#synsi)
821
821
822### t
822### t
823
823
824−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#taft' title="UTF8 to UTF32 cord"><code>++taft</code></a>
824+[`++taft`](/docs/hoon/reference/stdlib/4b/#taft)
825−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#tail' title="Get tail of cell"><code>++tail</code></a>
825+[`++tail`](/docs/hoon/reference/stdlib/2n/#tail)
826−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#tapto' title="Queue to list"><code>++tap:to</code></a>
826+[`++tap:to`](/docs/hoon/reference/stdlib/2k/#tapto)
827−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#tar' title="Parse * (tar)"><code>++tar</code></a>
827+[`++tar`](/docs/hoon/reference/stdlib/4h/#tar)
828−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tang' title="Bottom-first error"><code>+$tang</code></a>
828+[`+$tang`](/docs/hoon/reference/stdlib/2q/#tang)
829−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tank' title="Formatted print tree"><code>+$tank</code></a>
829+[`+$tank`](/docs/hoon/reference/stdlib/2q/#tank)
830−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#tapby' title="Listify pairs"><code>++tap:by</code></a>
830+[`++tap:by`](/docs/hoon/reference/stdlib/2i/#tapby)
831−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#tapin' title="Flatten set into list"><code>++tap:in</code></a>
831+[`++tap:in`](/docs/hoon/reference/stdlib/2h/#tapin)
832−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tape' title="List of characters"><code>+$tape</code></a>
832+[`+$tape`](/docs/hoon/reference/stdlib/2q/#tape)
833−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tarp' title="Parsed time"><code>+$tarp</code></a>
833+[`+$tarp`](/docs/hoon/reference/stdlib/2q/#tarp)
834−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#tashso' title="Parse signed dime"><code>++tash:so</code></a>
834+[`++tash:so`](/docs/hoon/reference/stdlib/4l/#tashso)
835−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#tic' title="Parse ` (tic)"><code>++tic</code></a>
835+[`++tic`](/docs/hoon/reference/stdlib/4h/#tic)
836−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tedab' title="Parse 1-999 decimal"><code>++ted:ab</code></a>
836+[`++ted:ab`](/docs/hoon/reference/stdlib/4j/#tedab)
837−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#teff' title="UTF8 length"><code>++teff</code></a>
837+[`++teff`](/docs/hoon/reference/stdlib/4b/#teff)
838−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#tailob' title="Reverse +feis"><code>++tail:ob</code></a>
838+[`++tail:ob`](/docs/hoon/reference/stdlib/3f/#tailob)
839−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tent' title="Model builder"><code>+$tent</code></a>
839+[`+$tent`](/docs/hoon/reference/stdlib/4o/#tent)
840−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tepab' title="Parse non-doz leading phonetic byte"><code>++tep:ab</code></a>
840+[`++tep:ab`](/docs/hoon/reference/stdlib/4j/#tepab)
841−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#term' title="Hoon constant"><code>+$term</code></a>
841+[`+$term`](/docs/hoon/reference/stdlib/2q/#term)
842−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#test' title="Test for equality"><code>++test</code></a>
842+[`++test`](/docs/hoon/reference/stdlib/2n/#test)
843−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#text' title="Tape pretty-print"><code>++text</code></a>
843+[`++text`](/docs/hoon/reference/stdlib/5c/#text)
844−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#thunk' title="Fragment constructor"><code>+$thunk</code></a>
844+[`+$thunk`](/docs/hoon/reference/stdlib/4o/#thunk)
845−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tidab' title="Parse 3 decimal digits"><code>++tid:ab</code></a>
845+[`++tid:ab`](/docs/hoon/reference/stdlib/4j/#tidab)
846−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tiki' title="Test case"><code>+$tiki</code></a>
846+[`+$tiki`](/docs/hoon/reference/stdlib/4o/#tiki)
847−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tilab' title="Parse 3 lowercase letters"><code>++til:ab</code></a>
847+[`++til:ab`](/docs/hoon/reference/stdlib/4j/#tilab)
848−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#time' title="Galactic time"><code>++time</code></a>
848+[`++time`](/docs/hoon/reference/stdlib/5e/#time)
849−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tine' title="Partial noun"><code>+$tine</code></a>
849+[`+$tine`](/docs/hoon/reference/stdlib/4o/#tine)
850−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tipab' title="Leading phonetic byte"><code>++tip:ab</code></a>
850+[`++tip:ab`](/docs/hoon/reference/stdlib/4j/#tipab)
851−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tiqab' title="Trailing phonetic syllable"><code>++tiq:ab</code></a>
851+[`++tiq:ab`](/docs/hoon/reference/stdlib/4j/#tiqab)
852−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#tis' title="Parse = (tis)"><code>++tis</code></a>
852+[`++tis`](/docs/hoon/reference/stdlib/4h/#tis)
853−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#to' title="Queue operations"><code>++to</code></a>
853+[`++to`](/docs/hoon/reference/stdlib/2k/#to)
854−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#todpo' title="Fetch suffix"><code>++tod:po</code></a>
854+[`++tod:po`](/docs/hoon/reference/stdlib/4a/#todpo)
855−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toiff' title="Round IEEE float to nearest signed integer"><code>++toi:ff</code></a>
855+[`++toi:ff`](/docs/hoon/reference/stdlib/3b/#toiff)
856−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toifl' title="Round float to nearest signed integer"><code>++toi:fl</code></a>
856+[`++toi:fl`](/docs/hoon/reference/stdlib/3b/#toifl)
857−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toird' title="Round doubleprecision float to nearest signed integer"><code>++toi:rd</code></a>
857+[`++toi:rd`](/docs/hoon/reference/stdlib/3b/#toird)
858−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toirh' title="Round halfprecision float to nearest signed integer"><code>++toi:rh</code></a>
858+[`++toi:rh`](/docs/hoon/reference/stdlib/3b/#toirh)
859−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toirs' title="Round singleprecision float to nearest signed integer"><code>++toi:rs</code></a>
859+[`++toi:rs`](/docs/hoon/reference/stdlib/3b/#toirs)
860−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toirq' title="Round quadprecision float to nearest signed integer"><code>++toi:rq</code></a>
860+[`++toi:rq`](/docs/hoon/reference/stdlib/3b/#toirq)
861−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#tojfl' title="Round unsigned and signed integer to float"><code>++toj:fl</code></a>
861+[`++toj:fl`](/docs/hoon/reference/stdlib/3b/#tojfl)
862−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#tokfa' title="Compute base58check checksum"><code>++tok:fa</code></a>
862+[`++tok:fa`](/docs/hoon/reference/stdlib/4a/#tokfa)
863−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tome' title="Core chapter"><code>+$tome</code></a>
863+[`+$tome`](/docs/hoon/reference/stdlib/4o/#tome)
864−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#tone' title="Nock result (error report)"><code>+$tone</code></a>
864+[`+$tone`](/docs/hoon/reference/stdlib/3g/#tone)
865−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tony' title="$tone done right"><code>+$tony</code></a>
865+[`+$tony`](/docs/hoon/reference/stdlib/4o/#tony)
866−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tool' title="Type decoration"><code>+$tool</code></a>
866+[`+$tool`](/docs/hoon/reference/stdlib/4o/#tool)
867−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#toon' title="Nock result (stack trace)"><code>+$toon</code></a>
867+[`+$toon`](/docs/hoon/reference/stdlib/3g/#toon)
868−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tope' title="Topographic type"><code>+$tope</code></a>
868+[`+$tope`](/docs/hoon/reference/stdlib/4o/#tope)
869−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#topto' title="Produce head of queue"><code>++top:to</code></a>
869+[`++top:to`](/docs/hoon/reference/stdlib/2k/#topto)
870−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#tospo' title="Fetch prefix"><code>++tos:po</code></a>
870+[`++tos:po`](/docs/hoon/reference/stdlib/4a/#tospo)
871−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#tosrh' title="Convert halfprecision float to singleprecision float"><code>++tos:rh</code></a>
871+[`++tos:rh`](/docs/hoon/reference/stdlib/3b/#tosrh)
872−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tour' title="UTF-32 clusters"><code>+$tour</code></a>
872+[`+$tour`](/docs/hoon/reference/stdlib/2q/#tour)
873−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#type' title="Hoon type type"><code>+$type</code></a>
873+[`+$type`](/docs/hoon/reference/stdlib/4o/#type)
874−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#trap' title="Core with one arm $"><code>++trap</code></a>
874+[`++trap`](/docs/hoon/reference/stdlib/1c/#trap)
875−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#tree' title="Mold generator (tree)"><code>++tree</code></a>
875+[`++tree`](/docs/hoon/reference/stdlib/1c/#tree)
876−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#trel' title="Mold generator (tuple of three types)"><code>++trel</code></a>
876+[`++trel`](/docs/hoon/reference/stdlib/1c/#trel)
877−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#trim' title="Tape split"><code>++trim</code></a>
877+[`++trim`](/docs/hoon/reference/stdlib/4b/#trim)
878−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#trip' title="Cord to tape"><code>++trip</code></a>
878+[`++trip`](/docs/hoon/reference/stdlib/4b/#trip)
879−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#tuba' title="UTF8 to UTF32 tape"><code>++tuba</code></a>
879+[`++tuba`](/docs/hoon/reference/stdlib/4b/#tuba)
880−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#tufa' title="UTF32 to UTF8 tape"><code>++tufa</code></a>
880+[`++tufa`](/docs/hoon/reference/stdlib/4b/#tufa)
881−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#tuft' title="UTF32 to UTF8 text"><code>++tuft</code></a>
881+[`++tuft`](/docs/hoon/reference/stdlib/4b/#tuft)
882−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tunahoot' title="Maybe interpolation"><code>+$tuna:hoot</code></a>
882+[`+$tuna:hoot`](/docs/hoon/reference/stdlib/4o/#tunahoot)
883−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tune' title="Complex"><code>+$tune</code></a>
883+[`+$tune`](/docs/hoon/reference/stdlib/4o/#tune)
884−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#turn' title="Gate to list"><code>++turn</code></a>
884+[`++turn`](/docs/hoon/reference/stdlib/2b/#turn)
885−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#twidso' title="Parse coins without ~ prefix"><code>++twid:so</code></a>
885+[`++twid:so`](/docs/hoon/reference/stdlib/4l/#twidso)
886−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tyke' title="List of 'maybe' hoons"><code>+$tyke</code></a>
886+[`+$tyke`](/docs/hoon/reference/stdlib/4o/#tyke)
887−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#typo' title="Old type"><code>+$typo</code></a>
887+[`+$typo`](/docs/hoon/reference/stdlib/4o/#typo)
888−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tyre' title="List, term hoon"><code>+$tyre</code></a>
888+[`+$tyre`](/docs/hoon/reference/stdlib/4o/#tyre)
889
889
890### u
890### u
891
891
892−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#un' title="Reversible scrambling"><code>++un</code></a>
892+[`++un`](/docs/hoon/reference/stdlib/3f/#un)
893−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#uniby' title="Union, merge (map)"><code>++uni:by</code></a>
893+[`++uni:by`](/docs/hoon/reference/stdlib/2i/#uniby)
894−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#unifl' title="Change representation to odd"><code>++uni:fl</code></a>
894+[`++uni:fl`](/docs/hoon/reference/stdlib/3b/#unifl)
895−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#uniin' title="Union (sets)"><code>++uni:in</code></a>
895+[`++uni:in`](/docs/hoon/reference/stdlib/2h/#uniin)
896−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#unit' title="Mold generator (maybe)"><code>++unit</code></a>
896+[`++unit`](/docs/hoon/reference/stdlib/1c/#unit)
897−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#unoby' title="General union (map)"><code>++uno:by</code></a>
897+[`++uno:by`](/docs/hoon/reference/stdlib/2i/#unoby)
898−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#urnby' title="Turn (with key) (map)"><code>++urn:by</code></a>
898+[`++urn:by`](/docs/hoon/reference/stdlib/2i/#urnby)
899−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#ursab' title="Parse knot characters"><code>++urs:ab</code></a>
899+[`++urs:ab`](/docs/hoon/reference/stdlib/4j/#ursab)
900−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#urtab' title="Parse knot without underscores"><code>++urt:ab</code></a>
900+[`++urt:ab`](/docs/hoon/reference/stdlib/4j/#urtab)
901−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#us' title="Pretty-printer backend"><code>++us</code></a>
901+[`++us`](/docs/hoon/reference/stdlib/5c/#us)
902−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#ut' title="Hoon compiler backend"><code>++ut</code></a>
902+[`++ut`](/docs/hoon/reference/stdlib/5c/#ut)
903
903
904### v
904### v
905
905
906−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#vne' title="Render base 32"><code>++v:ne</code></a>
906+[`++v:ne`](/docs/hoon/reference/stdlib/4j/#vne)
907−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vair' title="Core variance"><code>+$vair</code></a>
907+[`+$vair`](/docs/hoon/reference/stdlib/4o/#vair)
908−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#vang' title="Set ++vast parameters"><code>++vang</code></a>
908+[`++vang`](/docs/hoon/reference/stdlib/5d/#vang)
909−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vase' title="Type-value pair"><code>+$vase</code></a>
909+[`+$vase`](/docs/hoon/reference/stdlib/4o/#vase)
910−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#vast' title="Main parsing core"><code>++vast</code></a>
910+[`++vast`](/docs/hoon/reference/stdlib/5d/#vast)
911−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#v-coco' title="Render base-32 with minimum length"><code>++v-co:co</code></a>
911+[`++v-co:co`](/docs/hoon/reference/stdlib/4k/#v-coco)
912−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vein' title="Search trace"><code>+$vein</code></a>
912+[`+$vein`](/docs/hoon/reference/stdlib/4o/#vein)
913−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#ven' title="Axis syntax parser"><code>++ven</code></a>
913+[`++ven`](/docs/hoon/reference/stdlib/4i/#ven)
914−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#vest' title="Parse hoon"><code>++vest</code></a>
914+[`++vest`](/docs/hoon/reference/stdlib/5d/#vest)
915−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vial' title="co/contra/in/bi"><code>+$vial</code></a>
915+[`+$vial`](/docs/hoon/reference/stdlib/4o/#vial)
916−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#vice' title="Parse wide-form hoon"><code>++vice</code></a>
916+[`++vice`](/docs/hoon/reference/stdlib/5d/#vice)
917−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vise' title="Old vase"><code>+$vise</code></a>
917+[`+$vise`](/docs/hoon/reference/stdlib/4o/#vise)
918−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#vit' title="Parse base 64 digit"><code>++vit</code></a>
918+[`++vit`](/docs/hoon/reference/stdlib/4i/#vit)
919−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#vizag' title="Parse base 32 digit with dot separators"><code>++viz:ag</code></a>
919+[`++viz:ag`](/docs/hoon/reference/stdlib/4j/#vizag)
920−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#voyab' title="Parse bas, soq, or bix"><code>++voy:ab</code></a>
920+[`++voy:ab`](/docs/hoon/reference/stdlib/4j/#voyab)
921−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#vul' title="Comments to null"><code>++vul</code></a>
921+[`++vul`](/docs/hoon/reference/stdlib/4i/#vul)
922−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#vumag' title="Parse base 32 string"><code>++vum:ag</code></a>
922+[`++vum:ag`](/docs/hoon/reference/stdlib/4j/#vumag)
923
923
924### w
924### w
925
925
926−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#wne' title="Render base 64 digit"><code>++w:ne</code></a>
926+[`++w:ne`](/docs/hoon/reference/stdlib/4j/#wne)
927−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wack' title="Knot escape"><code>++wack</code></a>
927+[`++wack`](/docs/hoon/reference/stdlib/4b/#wack)
928−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#wain' title="List of cords"><code>+$wain</code></a>
928+[`+$wain`](/docs/hoon/reference/stdlib/2q/#wain)
929−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#wall' title="List of list of characters"><code>+$wall</code></a>
929+[`+$wall`](/docs/hoon/reference/stdlib/2q/#wall)
930−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#wash' title="Render tank at width"><code>++wash</code></a>
930+[`++wash`](/docs/hoon/reference/stdlib/4c/#wash)
931−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#w-coco' title="Render base-64 with minimum length"><code>++w-co:co</code></a>
931+[`++w-co:co`](/docs/hoon/reference/stdlib/4k/#w-coco)
932−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#weld' title="Concatenate two lists"><code>++weld</code></a>
932+[`++weld`](/docs/hoon/reference/stdlib/2b/#weld)
933−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#weldnl' title="Concatenate nullterminated nouns"><code>++weld:nl</code></a>
933+[`++weld:nl`](/docs/hoon/reference/stdlib/2m/#weldnl)
934−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#welp' title="Perfect concatenate (lists)"><code>++welp</code></a>
934+[`++welp`](/docs/hoon/reference/stdlib/2b/#welp)
935−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#what' title="Help slogan/section"><code>+$what</code></a>
935+[`+$what`](/docs/hoon/reference/stdlib/4o/#what)
936−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#whenso' title="Parse date"><code>++when:so</code></a>
936+[`++when:so`](/docs/hoon/reference/stdlib/4l/#whenso)
937−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#whit' title="Documentation"><code>+$whit</code></a>
937+[`+$whit`](/docs/hoon/reference/stdlib/4o/#whit)
938−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wick' title="Knot unescape"><code>++wick</code></a>
938+[`++wick`](/docs/hoon/reference/stdlib/4b/#wick)
939−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#winre' title="Render at indent"><code>++win:re</code></a>
939+[`++win:re`](/docs/hoon/reference/stdlib/4c/#winre)
940−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#wing' title="Search path"><code>+$wing</code></a>
940+[`+$wing`](/docs/hoon/reference/stdlib/4o/#wing)
941−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#wizag' title="Parse base 64 number"><code>++wiz:ag</code></a>
941+[`++wiz:ag`](/docs/hoon/reference/stdlib/4j/#wizag)
942−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#woad' title="Unescape cord"><code>++woad</code></a>
942+[`++woad`](/docs/hoon/reference/stdlib/4b/#woad)
943−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wood' title="Escape cord"><code>++wood</code></a>
943+[`++wood`](/docs/hoon/reference/stdlib/4b/#wood)
944−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#woof' title="Simple embed"><code>+$woof</code></a>
944+[`+$woof`](/docs/hoon/reference/stdlib/4o/#woof)
945−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#wonk' title="Product from edge"><code>++wonk</code></a>
945+[`++wonk`](/docs/hoon/reference/stdlib/3g/#wonk)
946−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#wredun' title="Restore structure"><code>++wred:un</code></a>
946+[`++wred:un`](/docs/hoon/reference/stdlib/3f/#wredun)
947−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#wrenun' title="Conceal structure"><code>++wren:un</code></a>
947+[`++wren:un`](/docs/hoon/reference/stdlib/3f/#wrenun)
948−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#wut' title="Parse ? (wut)"><code>++wut</code></a>
948+[`++wut`](/docs/hoon/reference/stdlib/4h/#wut)
949−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#wytby' title="Produce depth of tree map"><code>++wyt:by</code></a>
949+[`++wyt:by`](/docs/hoon/reference/stdlib/2i/#wytby)
950−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#wytin' title="Produce number of elements in set"><code>++wyt:in</code></a>
950+[`++wyt:in`](/docs/hoon/reference/stdlib/2h/#wytin)
951
951
952### x
952### x
953
953
954−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#x-coco' title="Render hex with minimum length"><code>++x-co:co</code></a>
954+[`++x-co:co`](/docs/hoon/reference/stdlib/4k/#x-coco)
955−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#xne' title="Render hexadecimal digit as atom of ASCII byte value"><code>++x:ne</code></a>
955+[`++x:ne`](/docs/hoon/reference/stdlib/4j/#xne)
956−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#xeb' title="Binary logarithm"><code>++xeb</code></a>
956+[`++xeb`](/docs/hoon/reference/stdlib/2c/#xeb)
957−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#xpdfl' title="Expand signed and unsigned integer cell"><code>++xpd:fl</code></a>
957+[`++xpd:fl`](/docs/hoon/reference/stdlib/3b/#xpdfl)
958
958
959### y
959### y
960
960
961−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yall' title="Time since beginning of time"><code>++yall</code></a>
961+[`++yall`](/docs/hoon/reference/stdlib/3c/#yall)
962−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yawn' title="Days since beginning of time"><code>++yawn</code></a>
962+[`++yawn`](/docs/hoon/reference/stdlib/3c/#yawn)
963−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#y-coco' title="Render decimal with at least two digits"><code>++y-co:co</code></a>
963+[`++y-co:co`](/docs/hoon/reference/stdlib/4k/#y-coco)
964−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#year' title="Date to @d"><code>++year</code></a>
964+[`++year`](/docs/hoon/reference/stdlib/3c/#year)
965−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yell' title="Tarp from atomic date"><code>++yell</code></a>
965+[`++yell`](/docs/hoon/reference/stdlib/3c/#yell)
966−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yelp' title="Determine if leapweek"><code>++yelp</code></a>
966+[`++yelp`](/docs/hoon/reference/stdlib/3c/#yelp)
967−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yeryo' title="Seconds in year"><code>++yer:yo</code></a>
967+[`++yer:yo`](/docs/hoon/reference/stdlib/3c/#yeryo)
968−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yo' title="Time constants core"><code>++yo</code></a>
968+[`++yo`](/docs/hoon/reference/stdlib/3c/#yo)
969−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yore' title="Date from atomic date"><code>++yore</code></a>
969+[`++yore`](/docs/hoon/reference/stdlib/3c/#yore)
970−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yule' title="Daily time to time atom"><code>++yule</code></a>
970+[`++yule`](/docs/hoon/reference/stdlib/3c/#yule)
971
971
972### z
972### z
973
973
974−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#zaftun' title="Look up in 255 sub box"><code>++zaft:un</code></a>
974+[`++zaft:un`](/docs/hoon/reference/stdlib/3f/#zaftun)
975−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#zagmu' title="Add bottom into top"><code>++zag:mu</code></a>
975+[`++zag:mu`](/docs/hoon/reference/stdlib/4j/#zagmu)
976−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#zap' title="Parse ! (zap)"><code>++zap</code></a>
976+[`++zap`](/docs/hoon/reference/stdlib/4h/#zap)
977−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#zartun' title="Reverse look up in 255 sub box"><code>++zart:un</code></a>
977+[`++zart:un`](/docs/hoon/reference/stdlib/3f/#zartun)
978−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#z-coco' title="Render '0x'-prefixed hex"><code>++z-co:co</code></a>
978+[`++z-co:co`](/docs/hoon/reference/stdlib/4k/#z-coco)
979−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#zerfl' title="Produce zero as float"><code>++zer:fl</code></a>
979+[`++zer:fl`](/docs/hoon/reference/stdlib/3b/#zerfl)
980−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#zigmu' title="Subtract bottom from top"><code>++zig:mu</code></a>
980+[`++zig:mu`](/docs/hoon/reference/stdlib/4j/#zigmu)
981−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#zing' title="Turn lists into single list by promoting elements from sublists"><code>++zing</code></a>
981+[`++zing`](/docs/hoon/reference/stdlib/2b/#zing)
982−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#zugmu' title="Concatenate into atom"><code>++zug:mu</code></a>
982+[`++zug:mu`](/docs/hoon/reference/stdlib/4j/#zugmu)
983−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#zustso' title="Parse dimes from @i, @f, @r or @q"><code>++zust:so</code></a>
983+[`++zust:so`](/docs/hoon/reference/stdlib/4l/#zustso)
984−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#zyftun' title="Lookup byte in 256 sub box"><code>++zyft:un</code></a>
984+[`++zyft:un`](/docs/hoon/reference/stdlib/3f/#zyftun)
985−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#zyrtun' title="Reverse lookup byte in 256 sub box"><code>++zyrt:un</code></a>
985+[`++zyrt:un`](/docs/hoon/reference/stdlib/3f/#zyrtun)
986
986
987## By Section
987## By Section
988
988
989### 1a: basic arithmetic
989### 1a: basic arithmetic
990
990
991−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#add' title="Add"><code>++add</code></a>
991+[`++add`](/docs/hoon/reference/stdlib/1a/#add)
992−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#dec' title="Decrement"><code>++dec</code></a>
992+[`++dec`](/docs/hoon/reference/stdlib/1a/#dec)
993−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#div' title="Divide"><code>++div</code></a>
993+[`++div`](/docs/hoon/reference/stdlib/1a/#div)
994−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#dvr' title="Divide (with remainder)"><code>++dvr</code></a>
994+[`++dvr`](/docs/hoon/reference/stdlib/1a/#dvr)
995−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#gte' title="Greater than / equal"><code>++gte</code></a>
995+[`++gte`](/docs/hoon/reference/stdlib/1a/#gte)
996−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#gth' title="Greater than"><code>++gth</code></a>
996+[`++gth`](/docs/hoon/reference/stdlib/1a/#gth)
997−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#lte' title="Less than / equal (atom)"><code>++lte</code></a>
997+[`++lte`](/docs/hoon/reference/stdlib/1a/#lte)
998−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#lth' title="Less than (atom)"><code>++lth</code></a>
998+[`++lth`](/docs/hoon/reference/stdlib/1a/#lth)
999−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#max' title="Maximum"><code>++max</code></a>
999+[`++max`](/docs/hoon/reference/stdlib/1a/#max)
1000−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#min' title="Minimum (atom)"><code>++min</code></a>
1000+[`++min`](/docs/hoon/reference/stdlib/1a/#min)
1001−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#mod' title="Modulus (atom)"><code>++mod</code></a>
1001+[`++mod`](/docs/hoon/reference/stdlib/1a/#mod)
1002−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#mul' title="Multiply (atom)"><code>++mul</code></a>
1002+[`++mul`](/docs/hoon/reference/stdlib/1a/#mul)
1003−<a class="tooltip" href='/docs/hoon/reference/stdlib/1a/#sub' title="Subtract"><code>++sub</code></a>
1003+[`++sub`](/docs/hoon/reference/stdlib/1a/#sub)
1004
1004
1005### 1b: tree addressing
1005### 1b: tree addressing
1006
1006
1007−<a class="tooltip" href='/docs/hoon/reference/stdlib/1b/#cap' title="Tree head"><code>++cap</code></a>
1007+[`++cap`](/docs/hoon/reference/stdlib/1b/#cap)
1008−<a class="tooltip" href='/docs/hoon/reference/stdlib/1b/#mas' title="Address within head/tail"><code>++mas</code></a>
1008+[`++mas`](/docs/hoon/reference/stdlib/1b/#mas)
1009−<a class="tooltip" href='/docs/hoon/reference/stdlib/1b/#peg' title="Address within address"><code>++peg</code></a>
1009+[`++peg`](/docs/hoon/reference/stdlib/1b/#peg)
1010
1010
1011### 1c: molds and mold builders
1011### 1c: molds and mold builders
1012
1012
1013−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#bite' title="Atom slice specificier"><code>$bite</code></a>
1013+[`$bite`](/docs/hoon/reference/stdlib/1c/#bite)
1014−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#bloq' title="Blocksize"><code>$bloq</code></a>
1014+[`$bloq`](/docs/hoon/reference/stdlib/1c/#bloq)
1015−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#each' title="Mold of fork between two types"><code>++each</code></a>
1015+[`++each`](/docs/hoon/reference/stdlib/1c/#each)
1016−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#gate' title="Function"><code>++gate</code></a>
1016+[`++gate`](/docs/hoon/reference/stdlib/1c/#gate)
1017−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#list' title="Mold constructor (list)"><code>++list</code></a>
1017+[`++list`](/docs/hoon/reference/stdlib/1c/#list)
1018−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#lone' title="Mold generator (face on mold)"><code>++lone</code></a>
1018+[`++lone`](/docs/hoon/reference/stdlib/1c/#lone)
1019−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#pair' title="Mold of pair of types"><code>++pair</code></a>
1019+[`++pair`](/docs/hoon/reference/stdlib/1c/#pair)
1020−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#pole' title="Mold generator of faceless list"><code>++pole</code></a>
1020+[`++pole`](/docs/hoon/reference/stdlib/1c/#pole)
1021−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#quip' title="Mold generator (tuple of list and type)"><code>++quip</code></a>
1021+[`++quip`](/docs/hoon/reference/stdlib/1c/#quip)
1022−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#step' title="Atom size or offset, in bloqs"><code>++step</code></a>
1022+[`++step`](/docs/hoon/reference/stdlib/1c/#step)
1023−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#trap' title="Core with one arm $"><code>++trap</code></a>
1023+[`++trap`](/docs/hoon/reference/stdlib/1c/#trap)
1024−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#tree' title="Mold generator (tree)"><code>++tree</code></a>
1024+[`++tree`](/docs/hoon/reference/stdlib/1c/#tree)
1025−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#trel' title="Mold generator (tuple of three types)"><code>++trel</code></a>
1025+[`++trel`](/docs/hoon/reference/stdlib/1c/#trel)
1026−<a class="tooltip" href='/docs/hoon/reference/stdlib/1c/#unit' title="Mold generator (maybe)"><code>++unit</code></a>
1026+[`++unit`](/docs/hoon/reference/stdlib/1c/#unit)
1027
1027
1028### 2a: unit logic
1028### 2a: unit logic
1029
1029
1030−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#biff' title="Unit as argument"><code>++biff</code></a>
1030+[`++biff`](/docs/hoon/reference/stdlib/2a/#biff)
1031−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#bind' title="Nonunit function to unit, producing unit"><code>++bind</code></a>
1031+[`++bind`](/docs/hoon/reference/stdlib/2a/#bind)
1032−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#bond' title="Replace null"><code>++bond</code></a>
1032+[`++bond`](/docs/hoon/reference/stdlib/2a/#bond)
1033−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#both' title="Group unit values into pair"><code>++both</code></a>
1033+[`++both`](/docs/hoon/reference/stdlib/2a/#both)
1034−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#clap' title="Combine two units with function"><code>++clap</code></a>
1034+[`++clap`](/docs/hoon/reference/stdlib/2a/#clap)
1035−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#clef' title="Compose two units with function"><code>++clef</code></a>
1035+[`++clef`](/docs/hoon/reference/stdlib/2a/#clef)
1036−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#drop' title="Unit to list"><code>++drop</code></a>
1036+[`++drop`](/docs/hoon/reference/stdlib/2a/#drop)
1037−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#fall' title="Give unit a default value"><code>++fall</code></a>
1037+[`++fall`](/docs/hoon/reference/stdlib/2a/#fall)
1038−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#flit' title="Make filter"><code>++flit</code></a>
1038+[`++flit`](/docs/hoon/reference/stdlib/2a/#flit)
1039−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#hunt' title="Select between two units by a rule"><code>++hunt</code></a>
1039+[`++hunt`](/docs/hoon/reference/stdlib/2a/#hunt)
1040−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#lift' title="Curried bind"><code>++lift</code></a>
1040+[`++lift`](/docs/hoon/reference/stdlib/2a/#lift)
1041−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#mate' title="Choose"><code>++mate</code></a>
1041+[`++mate`](/docs/hoon/reference/stdlib/2a/#mate)
1042−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#need' title="Unwrap unit"><code>++need</code></a>
1042+[`++need`](/docs/hoon/reference/stdlib/2a/#need)
1043−<a class="tooltip" href='/docs/hoon/reference/stdlib/2a/#some' title="Wrap value in unit"><code>++some</code></a>
1043+[`++some`](/docs/hoon/reference/stdlib/2a/#some)
1044
1044
1045### 2b: list logic
1045### 2b: list logic
1046
1046
1047−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#bake' title="Convert wet gate to dry gate"><code>++bake</code></a>
1047+[`++bake`](/docs/hoon/reference/stdlib/2b/#bake)
1048−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#fand' title="All indices in list"><code>++fand</code></a>
1048+[`++fand`](/docs/hoon/reference/stdlib/2b/#fand)
1049−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#find' title="First index in list"><code>++find</code></a>
1049+[`++find`](/docs/hoon/reference/stdlib/2b/#find)
1050−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#flop' title="Reverse list"><code>++flop</code></a>
1050+[`++flop`](/docs/hoon/reference/stdlib/2b/#flop)
1051−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#gulf' title="List from range"><code>++gulf</code></a>
1051+[`++gulf`](/docs/hoon/reference/stdlib/2b/#gulf)
1052−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#homo' title="Homogenize list"><code>++homo</code></a>
1052+[`++homo`](/docs/hoon/reference/stdlib/2b/#homo)
1053−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#join' title="Add separator between list elements"><code>++join</code></a>
1053+[`++join`](/docs/hoon/reference/stdlib/2b/#join)
1054−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#lent' title="List length"><code>++lent</code></a>
1054+[`++lent`](/docs/hoon/reference/stdlib/2b/#lent)
1055−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#levy' title="Logical AND on list"><code>++levy</code></a>
1055+[`++levy`](/docs/hoon/reference/stdlib/2b/#levy)
1056−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#lien' title="Logical OR on list"><code>++lien</code></a>
1056+[`++lien`](/docs/hoon/reference/stdlib/2b/#lien)
1057−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#limo' title="Construct list from nullterminated tuple"><code>++limo</code></a>
1057+[`++limo`](/docs/hoon/reference/stdlib/2b/#limo)
1058−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#murn' title="Maybe transform"><code>++murn</code></a>
1058+[`++murn`](/docs/hoon/reference/stdlib/2b/#murn)
1059−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#oust' title="Remove from list"><code>++oust</code></a>
1059+[`++oust`](/docs/hoon/reference/stdlib/2b/#oust)
1060−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#reap' title="Replicate (list)"><code>++reap</code></a>
1060+[`++reap`](/docs/hoon/reference/stdlib/2b/#reap)
1061−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#reel' title="Right fold (list)"><code>++reel</code></a>
1061+[`++reel`](/docs/hoon/reference/stdlib/2b/#reel)
1062−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#roll' title="Left fold (list)"><code>++roll</code></a>
1062+[`++roll`](/docs/hoon/reference/stdlib/2b/#roll)
1063−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#scag' title="Prefix (produce front of list)"><code>++scag</code></a>
1063+[`++scag`](/docs/hoon/reference/stdlib/2b/#scag)
1064−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#skid' title="Separate list into two lists from slammed elments"><code>++skid</code></a>
1064+[`++skid`](/docs/hoon/reference/stdlib/2b/#skid)
1065−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#skim' title="Produce list of elements from boolean gate"><code>++skim</code></a>
1065+[`++skim`](/docs/hoon/reference/stdlib/2b/#skim)
1066−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#skip' title="Produce list of elements failing boolean gate"><code>++skip</code></a>
1066+[`++skip`](/docs/hoon/reference/stdlib/2b/#skip)
1067−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#slag' title="Produce all elements from index in list"><code>++slag</code></a>
1067+[`++slag`](/docs/hoon/reference/stdlib/2b/#slag)
1068−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#snag' title="Produce element at specific index (list)"><code>++snag</code></a>
1068+[`++snag`](/docs/hoon/reference/stdlib/2b/#snag)
1069−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#snip' title="Drop tail off list"><code>++snip</code></a>
1069+[`++snip`](/docs/hoon/reference/stdlib/2b/#snip)
1070−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#snoc' title="Append noun to list"><code>++snoc</code></a>
1070+[`++snoc`](/docs/hoon/reference/stdlib/2b/#snoc)
1071−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#sort' title="Quicksort (list)"><code>++sort</code></a>
1071+[`++sort`](/docs/hoon/reference/stdlib/2b/#sort)
1072−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#spin' title="Gate to list (with state)"><code>++spin</code></a>
1072+[`++spin`](/docs/hoon/reference/stdlib/2b/#spin)
1073−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#spun' title="Gate to list (with state)"><code>++spun</code></a>
1073+[`++spun`](/docs/hoon/reference/stdlib/2b/#spun)
1074−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#swag' title="Infix (list)"><code>++swag</code></a>
1074+[`++swag`](/docs/hoon/reference/stdlib/2b/#swag)
1075−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#turn' title="Gate to list"><code>++turn</code></a>
1075+[`++turn`](/docs/hoon/reference/stdlib/2b/#turn)
1076−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#weld' title="Concatenate two lists"><code>++weld</code></a>
1076+[`++weld`](/docs/hoon/reference/stdlib/2b/#weld)
1077−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#welp' title="Perfect concatenate (lists)"><code>++welp</code></a>
1077+[`++welp`](/docs/hoon/reference/stdlib/2b/#welp)
1078−<a class="tooltip" href='/docs/hoon/reference/stdlib/2b/#zing' title="Turn lists into single list by promoting elements from sublists"><code>++zing</code></a>
1078+[`++zing`](/docs/hoon/reference/stdlib/2b/#zing)
1079
1079
1080### 2c: bit arithmetic
1080### 2c: bit arithmetic
1081
1081
1082−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#fe' title="Modulo bloq"><code>++fe</code></a>
1082+[`++fe`](/docs/hoon/reference/stdlib/2c/#fe)
1083−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#diffe' title="Difference between atoms (modular basis)"><code>++dif:fe</code></a>
1083+[`++dif:fe`](/docs/hoon/reference/stdlib/2c/#diffe)
1084−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#invfe' title="Inverse order of modular field"><code>++inv:fe</code></a>
1084+[`++inv:fe`](/docs/hoon/reference/stdlib/2c/#invfe)
1085−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#netfe' title="Flip endianness"><code>++net:fe</code></a>
1085+[`++net:fe`](/docs/hoon/reference/stdlib/2c/#netfe)
1086−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#outfe' title="Maximum integer value"><code>++out:fe</code></a>
1086+[`++out:fe`](/docs/hoon/reference/stdlib/2c/#outfe)
1087−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rolfe' title="Roll left"><code>++rol:fe</code></a>
1087+[`++rol:fe`](/docs/hoon/reference/stdlib/2c/#rolfe)
1088−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rorfe' title="Roll right"><code>++ror:fe</code></a>
1088+[`++ror:fe`](/docs/hoon/reference/stdlib/2c/#rorfe)
1089−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#sitfe' title="Enforce modulo"><code>++sit:fe</code></a>
1089+[`++sit:fe`](/docs/hoon/reference/stdlib/2c/#sitfe)
1090−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#sumfe' title="Sum two numbers in modular field"><code>++sum:fe</code></a>
1090+[`++sum:fe`](/docs/hoon/reference/stdlib/2c/#sumfe)
1091−
1091+
1092−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#bex' title="Binary exponent"><code>++bex</code></a>
1092+[`++bex`](/docs/hoon/reference/stdlib/2c/#bex)
1093−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#can' title="Assemble"><code>++can</code></a>
1093+[`++can`](/docs/hoon/reference/stdlib/2c/#can)
1094−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#cat' title="Concatenate"><code>++cat</code></a>
1094+[`++cat`](/docs/hoon/reference/stdlib/2c/#cat)
1095−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#cut' title="Slice"><code>++cut</code></a>
1095+[`++cut`](/docs/hoon/reference/stdlib/2c/#cut)
1096−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#end' title="Tail"><code>++end</code></a>
1096+[`++end`](/docs/hoon/reference/stdlib/2c/#end)
1097−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#fil' title="Fill bloqstream"><code>++fil</code></a>
1097+[`++fil`](/docs/hoon/reference/stdlib/2c/#fil)
1098−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#lsh' title="Leftshift"><code>++lsh</code></a>
1098+[`++lsh`](/docs/hoon/reference/stdlib/2c/#lsh)
1099−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#met' title="Measure"><code>++met</code></a>
1099+[`++met`](/docs/hoon/reference/stdlib/2c/#met)
1100−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rap' title="Assemble nonzero"><code>++rap</code></a>
1100+[`++rap`](/docs/hoon/reference/stdlib/2c/#rap)
1101−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rep' title="Assemble single"><code>++rep</code></a>
1101+[`++rep`](/docs/hoon/reference/stdlib/2c/#rep)
1102−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rip' title="Disassemble"><code>++rip</code></a>
1102+[`++rip`](/docs/hoon/reference/stdlib/2c/#rip)
1103−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rev' title="Reverse"><code>++rev</code></a>
1103+[`++rev`](/docs/hoon/reference/stdlib/2c/#rev)
1104−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#rsh' title="Rightshift"><code>++rsh</code></a>
1104+[`++rsh`](/docs/hoon/reference/stdlib/2c/#rsh)
1105−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#sew' title="Stitch one atom into another"><code>++sew</code></a>
1105+[`++sew`](/docs/hoon/reference/stdlib/2c/#sew)
1106−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#swp' title="Reverse block order"><code>++swp</code></a>
1106+[`++swp`](/docs/hoon/reference/stdlib/2c/#swp)
1107−<a class="tooltip" href='/docs/hoon/reference/stdlib/2c/#xeb' title="Binary logarithm"><code>++xeb</code></a>
1107+[`++xeb`](/docs/hoon/reference/stdlib/2c/#xeb)
1108
1108
1109### 2d: bit logic
1109### 2d: bit logic
1110
1110
1111−<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#con' title="Binary OR"><code>++con</code></a>
1111+[`++con`](/docs/hoon/reference/stdlib/2d/#con)
1112−<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#dis' title="Binary AND (atoms)"><code>++dis</code></a>
1112+[`++dis`](/docs/hoon/reference/stdlib/2d/#dis)
1113−<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#mix' title="Binary XOR (atom)"><code>++mix</code></a>
1113+[`++mix`](/docs/hoon/reference/stdlib/2d/#mix)
1114−<a class="tooltip" href='/docs/hoon/reference/stdlib/2d/#not' title="Binary NOT (atom)"><code>++not</code></a>
1114+[`++not`](/docs/hoon/reference/stdlib/2d/#not)
1115
1115
1116### 2e: insecure hashing
1116### 2e: insecure hashing
1117
1117
1118−<a class="tooltip" href='/docs/hoon/reference/stdlib/2e/#mug' title="FNV1a scrambler"><code>++mug</code></a>
1118+[`++mug`](/docs/hoon/reference/stdlib/2e/#mug)
1119−<a class="tooltip" href='/docs/hoon/reference/stdlib/2e/#muk' title="Standard MurmurHash3"><code>++muk</code></a>
1119+[`++muk`](/docs/hoon/reference/stdlib/2e/#muk)
1120
1120
1121### 2f: noun ordering
1121### 2f: noun ordering
1122
1122
1123−<a class="tooltip" href='/docs/hoon/reference/stdlib/2f/#aor' title="Alphabetical order"><code>++aor</code></a>
1123+[`++aor`](/docs/hoon/reference/stdlib/2f/#aor)
1124−<a class="tooltip" href='/docs/hoon/reference/stdlib/2f/#dor' title="Depth order"><code>++dor</code></a>
1124+[`++dor`](/docs/hoon/reference/stdlib/2f/#dor)
1125−<a class="tooltip" href='/docs/hoon/reference/stdlib/2f/#gor' title="Mug order"><code>++gor</code></a>
1125+[`++gor`](/docs/hoon/reference/stdlib/2f/#gor)
1126−<a class="tooltip" href='/docs/hoon/reference/stdlib/2f/#mor' title="(more) mug order"><code>++mor</code></a>
1126+[`++mor`](/docs/hoon/reference/stdlib/2f/#mor)
1127
1127
1128### 2g: unsigned powers
1128### 2g: unsigned powers
1129
1129
1130−<a class="tooltip" href='/docs/hoon/reference/stdlib/2g/#pow' title="Computes a to the power of b"><code>++pow</code></a>
1130+[`++pow`](/docs/hoon/reference/stdlib/2g/#pow)
1131−<a class="tooltip" href='/docs/hoon/reference/stdlib/2g/#sqt' title="Compute square root with remainder"><code>++sqt</code></a>
1131+[`++sqt`](/docs/hoon/reference/stdlib/2g/#sqt)
1132
1132
1133### 2h: set logic
1133### 2h: set logic
1134
1134
1135<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#in'><code>++in</code></a>
1135<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#in'><code>++in</code></a>
1136−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#allin' title="Logical AND (set and wet gate)"><code>++all:in</code></a>
1136+[`++all:in`](/docs/hoon/reference/stdlib/2h/#allin)
1137−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#anyin' title="Logical OR (set and gate)"><code>++any:in</code></a>
1137+[`++any:in`](/docs/hoon/reference/stdlib/2h/#anyin)
1138−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#aptin' title="Check correctness (set)"><code>++apt:in</code></a>
1138+[`++apt:in`](/docs/hoon/reference/stdlib/2h/#aptin)
1139−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#bifin' title="Bifurcate set"><code>++bif:in</code></a>
1139+[`++bif:in`](/docs/hoon/reference/stdlib/2h/#bifin)
1140−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#delin' title="Delete (set)"><code>++del:in</code></a>
1140+[`++del:in`](/docs/hoon/reference/stdlib/2h/#delin)
1141<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#difin' title='Difference (set)'><code>++dif:in</code></a>
1141<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#difin' title='Difference (set)'><code>++dif:in</code></a>
1142−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#digin' title="Address of a in set"><code>++dig:in</code></a>
1142+[`++dig:in`](/docs/hoon/reference/stdlib/2h/#digin)
1143−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#gasin' title="Concatenate (set)"><code>++gas:in</code></a>
1143+[`++gas:in`](/docs/hoon/reference/stdlib/2h/#gasin)
1144−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#hasin' title="Key existence check (set)"><code>++has:in</code></a>
1144+[`++has:in`](/docs/hoon/reference/stdlib/2h/#hasin)
1145−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#intin' title="Intersection (set)"><code>++int:in</code></a>
1145+[`++int:in`](/docs/hoon/reference/stdlib/2h/#intin)
1146−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#putin' title="Put b in a (set)"><code>++put:in</code></a>
1146+[`++put:in`](/docs/hoon/reference/stdlib/2h/#putin)
1147−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#repin' title="Accumulate elements (set)"><code>++rep:in</code></a>
1147+[`++rep:in`](/docs/hoon/reference/stdlib/2h/#repin)
1148−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#runin' title="Apply gate to set"><code>++run:in</code></a>
1148+[`++run:in`](/docs/hoon/reference/stdlib/2h/#runin)
1149−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#tapin' title="Flatten set into list"><code>++tap:in</code></a>
1149+[`++tap:in`](/docs/hoon/reference/stdlib/2h/#tapin)
1150−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#uniin' title="Union (sets)"><code>++uni:in</code></a>
1150+[`++uni:in`](/docs/hoon/reference/stdlib/2h/#uniin)
1151−<a class="tooltip" href='/docs/hoon/reference/stdlib/2h/#wytin' title="Produce number of elements in set"><code>++wyt:in</code></a>
1151+[`++wyt:in`](/docs/hoon/reference/stdlib/2h/#wytin)
1152
1152
1153### 2i: map logic
1153### 2i: map logic
1154
1154
1155−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#by' title="Map operations"><code>++by</code></a>
1155+[`++by`](/docs/hoon/reference/stdlib/2i/#by)
1156−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#allby' title="Logical AND (map and wet gate)"><code>++all:by</code></a>
1156+[`++all:by`](/docs/hoon/reference/stdlib/2i/#allby)
1157−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#anyby' title="Logical OR (map and wet gate)"><code>++any:by</code></a>
1157+[`++any:by`](/docs/hoon/reference/stdlib/2i/#anyby)
1158−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#aptby' title="Check correctness (map)"><code>++apt:by</code></a>
1158+[`++apt:by`](/docs/hoon/reference/stdlib/2i/#aptby)
1159−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#bifby' title="Bifurcate map"><code>++bif:by</code></a>
1159+[`++bif:by`](/docs/hoon/reference/stdlib/2i/#bifby)
1160−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#delby' title="Delete (map)"><code>++del:by</code></a>
1160+[`++del:by`](/docs/hoon/reference/stdlib/2i/#delby)
1161−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#difby' title="Difference between maps"><code>++dif:by</code></a>
1161+[`++dif:by`](/docs/hoon/reference/stdlib/2i/#difby)
1162−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#digby' title="Address of key (map)"><code>++dig:by</code></a>
1162+[`++dig:by`](/docs/hoon/reference/stdlib/2i/#digby)
1163−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#gasby' title="Concatenate (map)"><code>++gas:by</code></a>
1163+[`++gas:by`](/docs/hoon/reference/stdlib/2i/#gasby)
1164−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#getby' title="Grab unit value"><code>++get:by</code></a>
1164+[`++get:by`](/docs/hoon/reference/stdlib/2i/#getby)
1165−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#gotby' title="Assert for value (map)"><code>++got:by</code></a>
1165+[`++got:by`](/docs/hoon/reference/stdlib/2i/#gotby)
1166−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#hasby' title="Key existence check (map)"><code>++has:by</code></a>
1166+[`++has:by`](/docs/hoon/reference/stdlib/2i/#hasby)
1167−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#intby' title="Intersection (map)"><code>++int:by</code></a>
1167+[`++int:by`](/docs/hoon/reference/stdlib/2i/#intby)
1168−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#jabby' title="Transform value (map)"><code>++jab:by</code></a>
1168+[`++jab:by`](/docs/hoon/reference/stdlib/2i/#jabby)
1169−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#keyby' title="Set of keys"><code>++key:by</code></a>
1169+[`++key:by`](/docs/hoon/reference/stdlib/2i/#keyby)
1170−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#marby' title="Add with validation (map)"><code>++mar:by</code></a>
1170+[`++mar:by`](/docs/hoon/reference/stdlib/2i/#marby)
1171−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#putby' title="Add keyvalue pair (map)"><code>++put:by</code></a>
1171+[`++put:by`](/docs/hoon/reference/stdlib/2i/#putby)
1172−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#repby' title="Reduce to product (map)"><code>++rep:by</code></a>
1172+[`++rep:by`](/docs/hoon/reference/stdlib/2i/#repby)
1173−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#ribby' title="Transform + product (map)"><code>++rib:by</code></a>
1173+[`++rib:by`](/docs/hoon/reference/stdlib/2i/#ribby)
1174−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#runby' title="Transform values (map)"><code>++run:by</code></a>
1174+[`++run:by`](/docs/hoon/reference/stdlib/2i/#runby)
1175−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#rutby' title="Transform nodes (map)"><code>++rut:by</code></a>
1175+[`++rut:by`](/docs/hoon/reference/stdlib/2i/#rutby)
1176−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#tapby' title="Listify pairs"><code>++tap:by</code></a>
1176+[`++tap:by`](/docs/hoon/reference/stdlib/2i/#tapby)
1177−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#uniby' title="Union, merge (map)"><code>++uni:by</code></a>
1177+[`++uni:by`](/docs/hoon/reference/stdlib/2i/#uniby)
1178−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#unoby' title="General union (map)"><code>++uno:by</code></a>
1178+[`++uno:by`](/docs/hoon/reference/stdlib/2i/#unoby)
1179−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#urnby' title="Turn (with key) (map)"><code>++urn:by</code></a>
1179+[`++urn:by`](/docs/hoon/reference/stdlib/2i/#urnby)
1180−<a class="tooltip" href='/docs/hoon/reference/stdlib/2i/#wytby' title="Produce depth of tree map"><code>++wyt:by</code></a>
1180+[`++wyt:by`](/docs/hoon/reference/stdlib/2i/#wytby)
1181
1181
1182### 2j: jar and jug logic
1182### 2j: jar and jug logic
1183
1183
1184−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#ja' title="Jar engine"><code>++ja</code></a>
1184+[`++ja`](/docs/hoon/reference/stdlib/2j/#ja)
1185−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#addja' title="Prepend to list"><code>++add:ja</code></a>
1185+[`++add:ja`](/docs/hoon/reference/stdlib/2j/#addja)
1186−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#getja' title="Grab value by key"><code>++get:ja</code></a>
1186+[`++get:ja`](/docs/hoon/reference/stdlib/2j/#getja)
1187
1187
1188−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#ju' title="Jug operations"><code>++ju</code></a>
1188+[`++ju`](/docs/hoon/reference/stdlib/2j/#ju)
1189−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#delju' title="Delete (jug)"><code>++del:ju</code></a>
1189+[`++del:ju`](/docs/hoon/reference/stdlib/2j/#delju)
1190−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#gasju' title="Concatenate (jug)"><code>++gas:ju</code></a>
1190+[`++gas:ju`](/docs/hoon/reference/stdlib/2j/#gasju)
1191−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#getju' title="Retrieve set"><code>++get:ju</code></a>
1191+[`++get:ju`](/docs/hoon/reference/stdlib/2j/#getju)
1192−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#hasju' title="Check contents (jug)"><code>++has:ju</code></a>
1192+[`++has:ju`](/docs/hoon/reference/stdlib/2j/#hasju)
1193−<a class="tooltip" href='/docs/hoon/reference/stdlib/2j/#putju' title="Add keyset pair (jar)"><code>++put:ju</code></a>
1193+[`++put:ju`](/docs/hoon/reference/stdlib/2j/#putju)
1194
1194
1195### 2k: queue logic
1195### 2k: queue logic
1196
1196
1197−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#to' title="Queue operations"><code>++to</code></a>
1197+[`++to`](/docs/hoon/reference/stdlib/2k/#to)
1198−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#aptto' title="Check correctness of queue"><code>++apt:to</code></a>
1198+[`++apt:to`](/docs/hoon/reference/stdlib/2k/#aptto)
1199−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#balto' title="Balance queue"><code>++bal:to</code></a>
1199+[`++bal:to`](/docs/hoon/reference/stdlib/2k/#balto)
1200−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#depto' title="Maximum depth (queue)"><code>++dep:to</code></a>
1200+[`++dep:to`](/docs/hoon/reference/stdlib/2k/#depto)
1201−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#gasto' title="Push list into queue"><code>++gas:to</code></a>
1201+[`++gas:to`](/docs/hoon/reference/stdlib/2k/#gasto)
1202−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#getto' title="Headtail pair"><code>++get:to</code></a>
1202+[`++get:to`](/docs/hoon/reference/stdlib/2k/#getto)
1203−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#napto' title="Remove head of queue"><code>++nap:to</code></a>
1203+[`++nap:to`](/docs/hoon/reference/stdlib/2k/#napto)
1204−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#nipto' title="Remove root of queue"><code>++nip:to</code></a>
1204+[`++nip:to`](/docs/hoon/reference/stdlib/2k/#nipto)
1205−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#putto' title="Insert into queue"><code>++put:to</code></a>
1205+[`++put:to`](/docs/hoon/reference/stdlib/2k/#putto)
1206−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#tapto' title="Queue to list"><code>++tap:to</code></a>
1206+[`++tap:to`](/docs/hoon/reference/stdlib/2k/#tapto)
1207−<a class="tooltip" href='/docs/hoon/reference/stdlib/2k/#topto' title="Produce head of queue"><code>++top:to</code></a>
1207+[`++top:to`](/docs/hoon/reference/stdlib/2k/#topto)
1208
1208
1209### 2l: container from container
1209### 2l: container from container
1210
1210
1211−<a class="tooltip" href='/docs/hoon/reference/stdlib/2l/#malt' title="Map from list"><code>++malt</code></a>
1211+[`++malt`](/docs/hoon/reference/stdlib/2l/#malt)
1212−<a class="tooltip" href='/docs/hoon/reference/stdlib/2l/#molt' title="Map from pair list"><code>++molt</code></a>
1212+[`++molt`](/docs/hoon/reference/stdlib/2l/#molt)
1213−<a class="tooltip" href='/docs/hoon/reference/stdlib/2l/#silt' title="Produce set from list"><code>++silt</code></a>
1213+[`++silt`](/docs/hoon/reference/stdlib/2l/#silt)
1214
1214
1215### 2m: container from noun
1215### 2m: container from noun
1216
1216
1217−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#nl' title="Noun to container operations"><code>++nl</code></a>
1217+[`++nl`](/docs/hoon/reference/stdlib/2m/#nl)
1218−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#lenl' title="Construct list from nullterminated noun"><code>++le:nl</code></a>
1218+[`++le:nl`](/docs/hoon/reference/stdlib/2m/#lenl)
1219−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#mynl' title="Construct map from nullterminated noun"><code>++my:nl</code></a>
1219+[`++my:nl`](/docs/hoon/reference/stdlib/2m/#mynl)
1220−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#sinl' title="Construct set from nullterminated noun"><code>++si:nl</code></a>
1220+[`++si:nl`](/docs/hoon/reference/stdlib/2m/#sinl)
1221−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#snagnl' title="Produce element from list at specific nullterminated noun"><code>++snag:nl</code></a>
1221+[`++snag:nl`](/docs/hoon/reference/stdlib/2m/#snagnl)
1222−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#weldnl' title="Concatenate nullterminated nouns"><code>++weld:nl</code></a>
1222+[`++weld:nl`](/docs/hoon/reference/stdlib/2m/#weldnl)
1223
1223
1224−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#ly' title="List from raw noun"><code>++ly</code></a>
1224+[`++ly`](/docs/hoon/reference/stdlib/2m/#ly)
1225−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#my' title="Map from raw noun"><code>++my</code></a>
1225+[`++my`](/docs/hoon/reference/stdlib/2m/#my)
1226−<a class="tooltip" href='/docs/hoon/reference/stdlib/2m/#sy' title="Produce set from nullterminated noun"><code>++sy</code></a>
1226+[`++sy`](/docs/hoon/reference/stdlib/2m/#sy)
1227
1227
1228### 2n: functional hacks
1228### 2n: functional hacks
1229
1229
1230−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#aftr' title="Pair after"><code>++aftr</code></a>
1230+[`++aftr`](/docs/hoon/reference/stdlib/2n/#aftr)
1231−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#cork' title="Compose forward"><code>++cork</code></a>
1231+[`++cork`](/docs/hoon/reference/stdlib/2n/#cork)
1232−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#corl' title="Compose backward"><code>++corl</code></a>
1232+[`++corl`](/docs/hoon/reference/stdlib/2n/#corl)
1233−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#curr' title="Rightcurry a gate"><code>++curr</code></a>
1233+[`++curr`](/docs/hoon/reference/stdlib/2n/#curr)
1234−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#cury' title="Curry left a gate"><code>++cury</code></a>
1234+[`++cury`](/docs/hoon/reference/stdlib/2n/#cury)
1235−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#fore' title="Pair before"><code>++fore</code></a>
1235+[`++fore`](/docs/hoon/reference/stdlib/2n/#fore)
1236−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#head' title="Get head of cell"><code>++head</code></a>
1236+[`++head`](/docs/hoon/reference/stdlib/2n/#head)
1237−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#same' title="Identity (produces same value)"><code>++same</code></a>
1237+[`++same`](/docs/hoon/reference/stdlib/2n/#same)
1238−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#succ' title="Successor"><code>++succ</code></a>
1238+[`++succ`](/docs/hoon/reference/stdlib/2n/#succ)
1239−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#tail' title="Get tail of cell"><code>++tail</code></a>
1239+[`++tail`](/docs/hoon/reference/stdlib/2n/#tail)
1240−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#test' title="Test for equality"><code>++test</code></a>
1240+[`++test`](/docs/hoon/reference/stdlib/2n/#test)
1241−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#lead' title="Put head"><code>++lead</code></a>
1241+[`++lead`](/docs/hoon/reference/stdlib/2n/#lead)
1242−<a class="tooltip" href='/docs/hoon/reference/stdlib/2n/#late' title="Put tail"><code>++late</code></a>
1242+[`++late`](/docs/hoon/reference/stdlib/2n/#late)
1243
1243
1244### 2o: normalizing containers
1244### 2o: normalizing containers
1245
1245
1246−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#jar' title="Mold generator (jar)"><code>++jar</code></a>
1246+[`++jar`](/docs/hoon/reference/stdlib/2o/#jar)
1247−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#jug' title="Mold generator (jug)"><code>++jug</code></a>
1247+[`++jug`](/docs/hoon/reference/stdlib/2o/#jug)
1248−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#map' title="Mold generator (map)"><code>++map</code></a>
1248+[`++map`](/docs/hoon/reference/stdlib/2o/#map)
1249−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#qeu' title="Mold generator (queue)"><code>++qeu</code></a>
1249+[`++qeu`](/docs/hoon/reference/stdlib/2o/#qeu)
1250−<a class="tooltip" href='/docs/hoon/reference/stdlib/2o/#set' title="Mold generator (set)"><code>++set</code></a>
1250+[`++set`](/docs/hoon/reference/stdlib/2o/#set)
1251
1251
1252### 2p: serialization
1252### 2p: serialization
1253
1253
1254−<a class="tooltip" href='/docs/hoon/reference/stdlib/2p/#cue' title="Unpack atom to noun"><code>++cue</code></a>
1254+[`++cue`](/docs/hoon/reference/stdlib/2p/#cue)
1255−<a class="tooltip" href='/docs/hoon/reference/stdlib/2p/#jam' title="Pack noun to atom"><code>++jam</code></a>
1255+[`++jam`](/docs/hoon/reference/stdlib/2p/#jam)
1256−<a class="tooltip" href='/docs/hoon/reference/stdlib/2p/#mat' title="Lengthencode"><code>++mat</code></a>
1256+[`++mat`](/docs/hoon/reference/stdlib/2p/#mat)
1257−<a class="tooltip" href='/docs/hoon/reference/stdlib/2p/#rub' title="Lengthdecode"><code>++rub</code></a>
1257+[`++rub`](/docs/hoon/reference/stdlib/2p/#rub)
1258
1258
1259### 2q: molds and mold builders
1259### 2q: molds and mold builders
1260
1260
1261−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#axis' title="Tree address"><code>+$axis</code></a>
1261+[`+$axis`](/docs/hoon/reference/stdlib/2q/#axis)
1262−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#bean' title="Boolean"><code>+$bean</code></a>
1262+[`+$bean`](/docs/hoon/reference/stdlib/2q/#bean)
1263−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#char' title="Character"><code>+$char</code></a>
1263+[`+$char`](/docs/hoon/reference/stdlib/2q/#char)
1264−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#cord' title="UTF8 text"><code>+$cord</code></a>
1264+[`+$cord`](/docs/hoon/reference/stdlib/2q/#cord)
1265−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#byts' title="bytes, LSB first"><code>+$byts</code></a>
1265+[`+$byts`](/docs/hoon/reference/stdlib/2q/#byts)
1266−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#date' title="Parsed date"><code>+$date</code></a>
1266+[`+$date`](/docs/hoon/reference/stdlib/2q/#date)
1267−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#flag' title="Boolean (flag)"><code>+$flag</code></a>
1267+[`+$flag`](/docs/hoon/reference/stdlib/2q/#flag)
1268−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#knot' title="Atom type of ASCII characters"><code>+$knot</code></a>
1268+[`+$knot`](/docs/hoon/reference/stdlib/2q/#knot)
1269−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#noun' title="Any noun"><code>+$noun</code></a>
1269+[`+$noun`](/docs/hoon/reference/stdlib/2q/#noun)
1270−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#path' title="Like unix path"><code>+$path</code></a>
1270+[`+$path`](/docs/hoon/reference/stdlib/2q/#path)
1271−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#stud' title="Standard name"><code>+$stud</code></a>
1271+[`+$stud`](/docs/hoon/reference/stdlib/2q/#stud)
1272−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tang' title="Bottom-first error"><code>+$tang</code></a>
1272+[`+$tang`](/docs/hoon/reference/stdlib/2q/#tang)
1273−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tank' title="Formatted print tree"><code>+$tank</code></a>
1273+[`+$tank`](/docs/hoon/reference/stdlib/2q/#tank)
1274−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tape' title="List of characters"><code>+$tape</code></a>
1274+[`+$tape`](/docs/hoon/reference/stdlib/2q/#tape)
1275−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tour' title="UTF-32 clusters"><code>+$tour</code></a>
1275+[`+$tour`](/docs/hoon/reference/stdlib/2q/#tour)
1276−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#tarp' title="Parsed time"><code>+$tarp</code></a>
1276+[`+$tarp`](/docs/hoon/reference/stdlib/2q/#tarp)
1277−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#term' title="Hoon constant"><code>+$term</code></a>
1277+[`+$term`](/docs/hoon/reference/stdlib/2q/#term)
1278−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#wain' title="List of cords"><code>+$wain</code></a>
1278+[`+$wain`](/docs/hoon/reference/stdlib/2q/#wain)
1279−<a class="tooltip" href='/docs/hoon/reference/stdlib/2q/#wall' title="List of list of characters"><code>+$wall</code></a>
1279+[`+$wall`](/docs/hoon/reference/stdlib/2q/#wall)
1280
1280
1281### 3a: modular and signed ints
1281### 3a: modular and signed ints
1282
1282
1283−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#fo' title="Modulo prime"><code>++fo</code></a>
1283+[`++fo`](/docs/hoon/reference/stdlib/3a/#fo)
1284<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#diffo' title='Subtraction (modular base)'><code>++dif:fo</code></a>
1284<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#diffo' title='Subtraction (modular base)'><code>++dif:fo</code></a>
1285−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#expfo' title="Exponent (modular base)"><code>++exp:fo</code></a>
1285+[`++exp:fo`](/docs/hoon/reference/stdlib/3a/#expfo)
1286−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#frafo' title="Divide (modular base)"><code>++fra:fo</code></a>
1286+[`++fra:fo`](/docs/hoon/reference/stdlib/3a/#frafo)
1287−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#invfo' title="Inverse (signed modulus)"><code>++inv:fo</code></a>
1287+[`++inv:fo`](/docs/hoon/reference/stdlib/3a/#invfo)
1288−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#profo' title="Multiplies b and c modulo a"><code>++pro:fo</code></a>
1288+[`++pro:fo`](/docs/hoon/reference/stdlib/3a/#profo)
1289−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#sitfo' title="Produce remainder of b modulo a"><code>++sit:fo</code></a>
1289+[`++sit:fo`](/docs/hoon/reference/stdlib/3a/#sitfo)
1290−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#sumfo' title="Modular sum"><code>++sum:fo</code></a>
1290+[`++sum:fo`](/docs/hoon/reference/stdlib/3a/#sumfo)
1291−
1291+
1292−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#si' title="Signed integer"><code>++si</code></a>
1292+[`++si`](/docs/hoon/reference/stdlib/3a/#si)
1293−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#abssi' title="Absolute value (signed integer)"><code>++abs:si</code></a>
1293+[`++abs:si`](/docs/hoon/reference/stdlib/3a/#abssi)
1294−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#cmpsi' title="Compare (signed integer)"><code>++cmp:si</code></a>
1294+[`++cmp:si`](/docs/hoon/reference/stdlib/3a/#cmpsi)
1295−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#difsi' title="Subtraction (signed integer)"><code>++dif:si</code></a>
1295+[`++dif:si`](/docs/hoon/reference/stdlib/3a/#difsi)
1296−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#dulsi' title="Modulus (signed integer)"><code>++dul:si</code></a>
1296+[`++dul:si`](/docs/hoon/reference/stdlib/3a/#dulsi)
1297−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#frasi' title="Divide (signed integer)"><code>++fra:si</code></a>
1297+[`++fra:si`](/docs/hoon/reference/stdlib/3a/#frasi)
1298−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#newsi' title="Atom to @s"><code>++new:si</code></a>
1298+[`++new:si`](/docs/hoon/reference/stdlib/3a/#newsi)
1299−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#oldsi' title="Sign and absolute value"><code>++old:si</code></a>
1299+[`++old:si`](/docs/hoon/reference/stdlib/3a/#oldsi)
1300−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#prosi' title="Multiply to signed integer"><code>++pro:si</code></a>
1300+[`++pro:si`](/docs/hoon/reference/stdlib/3a/#prosi)
1301−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#remsi' title="Remainder (signed integer)"><code>++rem:si</code></a>
1301+[`++rem:si`](/docs/hoon/reference/stdlib/3a/#remsi)
1302−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#sumsi' title="Addition (signed integer)"><code>++sum:si</code></a>
1302+[`++sum:si`](/docs/hoon/reference/stdlib/3a/#sumsi)
1303−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#sunsi' title="@u to @s"><code>++sun:si</code></a>
1303+[`++sun:si`](/docs/hoon/reference/stdlib/3a/#sunsi)
1304−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#synsi' title="Sign test"><code>++syn:si</code></a>
1304+[`++syn:si`](/docs/hoon/reference/stdlib/3a/#synsi)
1305−
1305+
1306−<a class="tooltip" href='/docs/hoon/reference/stdlib/3a/#egcd' title="Extended Euclidean algorithm"><code>++egcd</code></a>
1306+[`++egcd`](/docs/hoon/reference/stdlib/3a/#egcd)
1307
1307
1308### 3b: floating point
1308### 3b: floating point
1309
1309
@@ -1312,167 +1312,167 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
1312<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rn'><code>++rn</code></a>
1312<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rn'><code>++rn</code></a>
1313
1313
1314<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#ff'><code>++ff</code></a>
1314<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#ff'><code>++ff</code></a>
1315−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addff' title="Add (floating point)"><code>++add:ff</code></a>
1315+[`++add:ff`](/docs/hoon/reference/stdlib/3b/#addff)
1316−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bifff' title="Converts from fn to @r"><code>++bif:ff</code></a>
1316+[`++bif:ff`](/docs/hoon/reference/stdlib/3b/#bifff)
1317−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitff' title="fn to @r with rounding"><code>++bit:ff</code></a>
1317+[`++bit:ff`](/docs/hoon/reference/stdlib/3b/#bitff)
1318−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divff' title="Divide (IEEE float)"><code>++div:ff</code></a>
1318+[`++div:ff`](/docs/hoon/reference/stdlib/3b/#divff)
1319−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgff' title="@r to decimal float"><code>++drg:ff</code></a>
1319+[`++drg:ff`](/docs/hoon/reference/stdlib/3b/#drgff)
1320−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equff' title="Equals (IEEE float)"><code>++equ:ff</code></a>
1320+[`++equ:ff`](/docs/hoon/reference/stdlib/3b/#equff)
1321−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#expff' title="Get exponent (IEEE float)"><code>++exp:ff</code></a>
1321+[`++exp:ff`](/docs/hoon/reference/stdlib/3b/#expff)
1322−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmaff' title="Fused multiplyadd (IEEE float)"><code>++fma:ff</code></a>
1322+[`++fma:ff`](/docs/hoon/reference/stdlib/3b/#fmaff)
1323−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdff' title="Decimal float to @r"><code>++grd:ff</code></a>
1323+[`++grd:ff`](/docs/hoon/reference/stdlib/3b/#grdff)
1324−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gteff' title="Greater than / equal (IEEE float)"><code>++gte:ff</code></a>
1324+[`++gte:ff`](/docs/hoon/reference/stdlib/3b/#gteff)
1325−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthff' title="Greater than (IEEE float)"><code>++gth:ff</code></a>
1325+[`++gth:ff`](/docs/hoon/reference/stdlib/3b/#gthff)
1326−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lteff' title="Less than / equal (IEEE float)"><code>++lte:ff</code></a>
1326+[`++lte:ff`](/docs/hoon/reference/stdlib/3b/#lteff)
1327−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthff' title="Less than (IEEE float)"><code>++lth:ff</code></a>
1327+[`++lth:ff`](/docs/hoon/reference/stdlib/3b/#lthff)
1328−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#meff' title="Minimum exponent of ff"><code>++me:ff</code></a>
1328+[`++me:ff`](/docs/hoon/reference/stdlib/3b/#meff)
1329−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulff' title="Multiply (IEEE float)"><code>++mul:ff</code></a>
1329+[`++mul:ff`](/docs/hoon/reference/stdlib/3b/#mulff)
1330−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#paff' title="Initialize fl from ff core"><code>++pa:ff</code></a>
1330+[`++pa:ff`](/docs/hoon/reference/stdlib/3b/#paff)
1331−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanff' title="Signed integer to @r"><code>++san:ff</code></a>
1331+[`++san:ff`](/docs/hoon/reference/stdlib/3b/#sanff)
1332−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sbff' title="Sign bit"><code>++sb:ff</code></a>
1332+[`++sb:ff`](/docs/hoon/reference/stdlib/3b/#sbff)
1333−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#seaff' title="Convert from IEEE float to fn"><code>++sea:ff</code></a>
1333+[`++sea:ff`](/docs/hoon/reference/stdlib/3b/#seaff)
1334−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigff' title="Produce sign of IEEE float"><code>++sig:ff</code></a>
1334+[`++sig:ff`](/docs/hoon/reference/stdlib/3b/#sigff)
1335−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtff' title="Produce square root from IEEE float"><code>++sqt:ff</code></a>
1335+[`++sqt:ff`](/docs/hoon/reference/stdlib/3b/#sqtff)
1336−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subff' title="Subtract from IEEE float"><code>++sub:ff</code></a>
1336+[`++sub:ff`](/docs/hoon/reference/stdlib/3b/#subff)
1337−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunff' title="Unsigned integer to IEEE float"><code>++sun:ff</code></a>
1337+[`++sun:ff`](/docs/hoon/reference/stdlib/3b/#sunff)
1338−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toiff' title="Round IEEE float to nearest signed integer"><code>++toi:ff</code></a>
1338+[`++toi:ff`](/docs/hoon/reference/stdlib/3b/#toiff)
1339
1339
1340<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fl'><code>++fl</code></a>
1340<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fl'><code>++fl</code></a>
1341−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#absfl' title="Absolute value"><code>++abs:fl</code></a>
1341+[`++abs:fl`](/docs/hoon/reference/stdlib/3b/#absfl)
1342−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addfl' title="Add (with exact/rounded flag)"><code>++add:fl</code></a>
1342+[`++add:fl`](/docs/hoon/reference/stdlib/3b/#addfl)
1343−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#denfl' title="Denormalizes (floating point)"><code>++den:fl</code></a>
1343+[`++den:fl`](/docs/hoon/reference/stdlib/3b/#denfl)
1344−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divfl' title="Divide (signed and unsigned integer cell)"><code>++div:fl</code></a>
1344+[`++div:fl`](/docs/hoon/reference/stdlib/3b/#divfl)
1345−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgfl' title="Get printable decimal (signed and unsigned integer cell)"><code>++drg:fl</code></a>
1345+[`++drg:fl`](/docs/hoon/reference/stdlib/3b/#drgfl)
1346−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#eadfl' title="Exact add"><code>++ead:fl</code></a>
1346+[`++ead:fl`](/docs/hoon/reference/stdlib/3b/#eadfl)
1347−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#emnfl' title="Minimum exponent"><code>++emn:fl</code></a>
1347+[`++emn:fl`](/docs/hoon/reference/stdlib/3b/#emnfl)
1348−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#emufl' title="Exact multiply"><code>++emu:fl</code></a>
1348+[`++emu:fl`](/docs/hoon/reference/stdlib/3b/#emufl)
1349−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#emxfl' title="Maximum exponent"><code>++emx:fl</code></a>
1349+[`++emx:fl`](/docs/hoon/reference/stdlib/3b/#emxfl)
1350−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equfl' title="Equals (signed and unsigned integer cell)"><code>++equ:fl</code></a>
1350+[`++equ:fl`](/docs/hoon/reference/stdlib/3b/#equfl)
1351−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#flifl' title="Flip sign"><code>++fli:fl</code></a>
1351+[`++fli:fl`](/docs/hoon/reference/stdlib/3b/#flifl)
1352−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmafl' title="Fused multiplyadd"><code>++fma:fl</code></a>
1352+[`++fma:fl`](/docs/hoon/reference/stdlib/3b/#fmafl)
1353−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdfl' title="Decimal to float"><code>++grd:fl</code></a>
1353+[`++grd:fl`](/docs/hoon/reference/stdlib/3b/#grdfl)
1354−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gtefl' title="Greater than / equal (producing flag)"><code>++gte:fl</code></a>
1354+[`++gte:fl`](/docs/hoon/reference/stdlib/3b/#gtefl)
1355−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthfl' title="Greater than (producing flag)"><code>++gth:fl</code></a>
1355+[`++gth:fl`](/docs/hoon/reference/stdlib/3b/#gthfl)
1356−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#iblfl' title="Integer binary logarithm"><code>++ibl:fl</code></a>
1356+[`++ibl:fl`](/docs/hoon/reference/stdlib/3b/#iblfl)
1357−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#invfl' title="Inverse"><code>++inv:fl</code></a>
1357+[`++inv:fl`](/docs/hoon/reference/stdlib/3b/#invfl)
1358−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lfefl' title="Maximum"><code>++lfe:fl</code></a>
1358+[`++lfe:fl`](/docs/hoon/reference/stdlib/3b/#lfefl)
1359−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lfnfl' title="Largest normal float"><code>++lfn:fl</code></a>
1359+[`++lfn:fl`](/docs/hoon/reference/stdlib/3b/#lfnfl)
1360−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#ltefl' title="Less than / equal (producing flag)"><code>++lte:fl</code></a>
1360+[`++lte:fl`](/docs/hoon/reference/stdlib/3b/#ltefl)
1361−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthfl' title="Less than (signed and unsigned integer cell)"><code>++lth:fl</code></a>
1361+[`++lth:fl`](/docs/hoon/reference/stdlib/3b/#lthfl)
1362−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lugfl' title="Central rounding mechanism"><code>++lug:fl</code></a>
1362+[`++lug:fl`](/docs/hoon/reference/stdlib/3b/#lugfl)
1363−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulfl' title="Multiply (signed and unsigned integer cell)"><code>++mul:fl</code></a>
1363+[`++mul:fl`](/docs/hoon/reference/stdlib/3b/#mulfl)
1364−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#nedfl' title="Require float"><code>++ned:fl</code></a>
1364+[`++ned:fl`](/docs/hoon/reference/stdlib/3b/#nedfl)
1365−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#prcfl' title="Force precision of 2 or greater (floating point)"><code>++prc:fl</code></a>
1365+[`++prc:fl`](/docs/hoon/reference/stdlib/3b/#prcfl)
1366−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#raufl' title="Various roundings (floating point)"><code>++rau:fl</code></a>
1366+[`++rau:fl`](/docs/hoon/reference/stdlib/3b/#raufl)
1367−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#roufl' title="Round to nearest float with 113bit significand"><code>++rou:fl</code></a>
1367+[`++rou:fl`](/docs/hoon/reference/stdlib/3b/#roufl)
1368−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanfl' title="Signed integer to float"><code>++san:fl</code></a>
1368+[`++san:fl`](/docs/hoon/reference/stdlib/3b/#sanfl)
1369−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#shffl' title="Shift power"><code>++shf:fl</code></a>
1369+[`++shf:fl`](/docs/hoon/reference/stdlib/3b/#shffl)
1370−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#spdfl' title="Produce smallest denormalized float"><code>++spd:fl</code></a>
1370+[`++spd:fl`](/docs/hoon/reference/stdlib/3b/#spdfl)
1371−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#spnfl' title="Produce smallest normal float"><code>++spn:fl</code></a>
1371+[`++spn:fl`](/docs/hoon/reference/stdlib/3b/#spnfl)
1372−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtfl' title="Produce square root from signed and unsigned integer cell"><code>++sqt:fl</code></a>
1372+[`++sqt:fl`](/docs/hoon/reference/stdlib/3b/#sqtfl)
1373−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subfl' title="Subtract from signed and unsigned integer cells"><code>++sub:fl</code></a>
1373+[`++sub:fl`](/docs/hoon/reference/stdlib/3b/#subfl)
1374−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunfl' title="Unsigned integer to float"><code>++sun:fl</code></a>
1374+[`++sun:fl`](/docs/hoon/reference/stdlib/3b/#sunfl)
1375−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#swrfl' title="Switch rounding mode of floating point"><code>++swr:fl</code></a>
1375+[`++swr:fl`](/docs/hoon/reference/stdlib/3b/#swrfl)
1376−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#synfl' title="Get sign"><code>++syn:fl</code></a>
1376+[`++syn:fl`](/docs/hoon/reference/stdlib/3b/#synfl)
1377−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toifl' title="Round float to nearest signed integer"><code>++toi:fl</code></a>
1377+[`++toi:fl`](/docs/hoon/reference/stdlib/3b/#toifl)
1378−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#tojfl' title="Round unsigned and signed integer to float"><code>++toj:fl</code></a>
1378+[`++toj:fl`](/docs/hoon/reference/stdlib/3b/#tojfl)
1379−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#unifl' title="Change representation to odd"><code>++uni:fl</code></a>
1379+[`++uni:fl`](/docs/hoon/reference/stdlib/3b/#unifl)
1380−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#xpdfl' title="Expand signed and unsigned integer cell"><code>++xpd:fl</code></a>
1380+[`++xpd:fl`](/docs/hoon/reference/stdlib/3b/#xpdfl)
1381−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#zerfl' title="Produce zero as float"><code>++zer:fl</code></a>
1381+[`++zer:fl`](/docs/hoon/reference/stdlib/3b/#zerfl)
1382
1382
1383<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rd'><code>++rd</code></a>
1383<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rd'><code>++rd</code></a>
1384−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addrd' title="Add (doubleprecision float)"><code>++add:rd</code></a>
1384+[`++add:rd`](/docs/hoon/reference/stdlib/3b/#addrd)
1385−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitrd' title="fn to doubleprecision binary float"><code>++bit:rd</code></a>
1385+[`++bit:rd`](/docs/hoon/reference/stdlib/3b/#bitrd)
1386−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divrd' title="Double precision float"><code>++div:rd</code></a>
1386+[`++div:rd`](/docs/hoon/reference/stdlib/3b/#divrd)
1387−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgrd' title="@rd to decimal float"><code>++drg:rd</code></a>
1387+[`++drg:rd`](/docs/hoon/reference/stdlib/3b/#drgrd)
1388−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equrd' title="Equals (doubleprecision float)"><code>++equ:rd</code></a>
1388+[`++equ:rd`](/docs/hoon/reference/stdlib/3b/#equrd)
1389−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#exprd' title="Exponent (@rd)"><code>++exp:rd</code></a>
1389+[`++exp:rd`](/docs/hoon/reference/stdlib/3b/#exprd)
1390−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmard' title="Fused multiplyadd (@rd)"><code>++fma:rd</code></a>
1390+[`++fma:rd`](/docs/hoon/reference/stdlib/3b/#fmard)
1391−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdrd' title="Decimal float to @rd"><code>++grd:rd</code></a>
1391+[`++grd:rd`](/docs/hoon/reference/stdlib/3b/#grdrd)
1392−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gterd' title="Greater than / equal (doubleprecision float)"><code>++gte:rd</code></a>
1392+[`++gte:rd`](/docs/hoon/reference/stdlib/3b/#gterd)
1393−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthrd' title="Greater than (doubleprecision float)"><code>++gth:rd</code></a>
1393+[`++gth:rd`](/docs/hoon/reference/stdlib/3b/#gthrd)
1394−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lterd' title="Less than / equal (doubleprecision float)"><code>++lte:rd</code></a>
1394+[`++lte:rd`](/docs/hoon/reference/stdlib/3b/#lterd)
1395−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthrd' title="Less than (doubleprecision float)"><code>++lth:rd</code></a>
1395+[`++lth:rd`](/docs/hoon/reference/stdlib/3b/#lthrd)
1396−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mard' title="Initialize ff (rd core)"><code>++ma:rd</code></a>
1396+[`++ma:rd`](/docs/hoon/reference/stdlib/3b/#mard)
1397−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulrd' title="Multiply (doubleprecision float)"><code>++mul:rd</code></a>
1397+[`++mul:rd`](/docs/hoon/reference/stdlib/3b/#mulrd)
1398−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanrd' title="Unsigned integer to @rd"><code>++san:rd</code></a>
1398+[`++san:rd`](/docs/hoon/reference/stdlib/3b/#sanrd)
1399−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#seard' title="Convert from doubleprecision binary float to fn"><code>++sea:rd</code></a>
1399+[`++sea:rd`](/docs/hoon/reference/stdlib/3b/#seard)
1400−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigrd' title="Produce sign of @rd"><code>++sig:rd</code></a>
1400+[`++sig:rd`](/docs/hoon/reference/stdlib/3b/#sigrd)
1401−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtrd' title="Produce square root of doubleprecision float"><code>++sqt:rd</code></a>
1401+[`++sqt:rd`](/docs/hoon/reference/stdlib/3b/#sqtrd)
1402−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subrd' title="Subtract from doubleprecision float"><code>++sub:rd</code></a>
1402+[`++sub:rd`](/docs/hoon/reference/stdlib/3b/#subrd)
1403−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunrd' title="Unsigned integer to doubleprecision float"><code>++sun:rd</code></a>
1403+[`++sun:rd`](/docs/hoon/reference/stdlib/3b/#sunrd)
1404−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toird' title="Round doubleprecision float to nearest signed integer"><code>++toi:rd</code></a>
1404+[`++toi:rd`](/docs/hoon/reference/stdlib/3b/#toird)
1405
1405
1406<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rh'><code>++rh</code></a>
1406<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rh'><code>++rh</code></a>
1407−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addrh' title="Add (halfprecision float)"><code>++add:rh</code></a>
1407+[`++add:rh`](/docs/hoon/reference/stdlib/3b/#addrh)
1408−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitrh' title="fn to halfprecision float"><code>++bit:rh</code></a>
1408+[`++bit:rh`](/docs/hoon/reference/stdlib/3b/#bitrh)
1409−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divrh' title="Divide (halfprecision float)"><code>++div:rh</code></a>
1409+[`++div:rh`](/docs/hoon/reference/stdlib/3b/#divrh)
1410−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgrh' title="@rh to decimal float"><code>++drg:rh</code></a>
1410+[`++drg:rh`](/docs/hoon/reference/stdlib/3b/#drgrh)
1411−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equrh' title="Equals (halfprecision float)"><code>++equ:rh</code></a>
1411+[`++equ:rh`](/docs/hoon/reference/stdlib/3b/#equrh)
1412−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#exprh' title="Exponent (halfprecision float)"><code>++exp:rh</code></a>
1412+[`++exp:rh`](/docs/hoon/reference/stdlib/3b/#exprh)
1413−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmarh' title="Fused multiplyadd (halfprecision float)"><code>++fma:rh</code></a>
1413+[`++fma:rh`](/docs/hoon/reference/stdlib/3b/#fmarh)
1414−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fosrh' title="@rs to @rh"><code>++fos:rh</code></a>
1414+[`++fos:rh`](/docs/hoon/reference/stdlib/3b/#fosrh)
1415−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdrh' title="Decimal float to @rh"><code>++grd:rh</code></a>
1415+[`++grd:rh`](/docs/hoon/reference/stdlib/3b/#grdrh)
1416−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gterh' title="Greater than / equal (halfprecision float)"><code>++gte:rh</code></a>
1416+[`++gte:rh`](/docs/hoon/reference/stdlib/3b/#gterh)
1417−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthrh' title="Greater than (halfprecision float)"><code>++gth:rh</code></a>
1417+[`++gth:rh`](/docs/hoon/reference/stdlib/3b/#gthrh)
1418−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lterh' title="Less than / equal (halfprecision float)"><code>++lte:rh</code></a>
1418+[`++lte:rh`](/docs/hoon/reference/stdlib/3b/#lterh)
1419−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthrh' title="Less than (halfprecision float)"><code>++lth:rh</code></a>
1419+[`++lth:rh`](/docs/hoon/reference/stdlib/3b/#lthrh)
1420−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#marh' title="Initialize ff (rh core)"><code>++ma:rh</code></a>
1420+[`++ma:rh`](/docs/hoon/reference/stdlib/3b/#marh)
1421−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulrh' title="Multiply (quadprecision float)"><code>++mul:rh</code></a>
1421+[`++mul:rh`](/docs/hoon/reference/stdlib/3b/#mulrh)
1422−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanrh' title="Signed integer to @rh"><code>++san:rh</code></a>
1422+[`++san:rh`](/docs/hoon/reference/stdlib/3b/#sanrh)
1423−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#searh' title="Convert from halfprecision float to fn"><code>++sea:rh</code></a>
1423+[`++sea:rh`](/docs/hoon/reference/stdlib/3b/#searh)
1424−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigrh' title="Produce sign of halfprecision float"><code>++sig:rh</code></a>
1424+[`++sig:rh`](/docs/hoon/reference/stdlib/3b/#sigrh)
1425−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtrh' title="Produce square root of halfprecision float"><code>++sqt:rh</code></a>
1425+[`++sqt:rh`](/docs/hoon/reference/stdlib/3b/#sqtrh)
1426−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subrh' title="Subtract from halfprecision float"><code>++sub:rh</code></a>
1426+[`++sub:rh`](/docs/hoon/reference/stdlib/3b/#subrh)
1427−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunrh' title="Unsigned integer to halfprecision float"><code>++sun:rh</code></a>
1427+[`++sun:rh`](/docs/hoon/reference/stdlib/3b/#sunrh)
1428−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toirh' title="Round halfprecision float to nearest signed integer"><code>++toi:rh</code></a>
1428+[`++toi:rh`](/docs/hoon/reference/stdlib/3b/#toirh)
1429−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#tosrh' title="Convert halfprecision float to singleprecision float"><code>++tos:rh</code></a>
1429+[`++tos:rh`](/docs/hoon/reference/stdlib/3b/#tosrh)
1430
1430
1431<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rs'><code>++rs</code></a>
1431<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rs'><code>++rs</code></a>
1432−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addrs' title="Add (singleprecision float)"><code>++add:rs</code></a>
1432+[`++add:rs`](/docs/hoon/reference/stdlib/3b/#addrs)
1433−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitrs' title="fn to singleprecision float"><code>++bit:rs</code></a>
1433+[`++bit:rs`](/docs/hoon/reference/stdlib/3b/#bitrs)
1434−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divrs' title="Divide (singleprecision float)"><code>++div:rs</code></a>
1434+[`++div:rs`](/docs/hoon/reference/stdlib/3b/#divrs)
1435−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgrs' title="@rs to decimal float"><code>++drg:rs</code></a>
1435+[`++drg:rs`](/docs/hoon/reference/stdlib/3b/#drgrs)
1436−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equrs' title="Equals (singleprecision float)"><code>++equ:rs</code></a>
1436+[`++equ:rs`](/docs/hoon/reference/stdlib/3b/#equrs)
1437−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#exprs' title="Exponent (@rs)"><code>++exp:rs</code></a>
1437+[`++exp:rs`](/docs/hoon/reference/stdlib/3b/#exprs)
1438−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmars' title="Fused multiplyadd (singleprecision float)"><code>++fma:rs</code></a>
1438+[`++fma:rs`](/docs/hoon/reference/stdlib/3b/#fmars)
1439−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdrs' title="Decimal float to @rs"><code>++grd:rs</code></a>
1439+[`++grd:rs`](/docs/hoon/reference/stdlib/3b/#grdrs)
1440−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gters' title="Greater than / equal (singleprecision float)"><code>++gte:rs</code></a>
1440+[`++gte:rs`](/docs/hoon/reference/stdlib/3b/#gters)
1441−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthrs' title="Greater than (singleprecision float)"><code>++gth:rs</code></a>
1441+[`++gth:rs`](/docs/hoon/reference/stdlib/3b/#gthrs)
1442−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lters' title="Less than / equal (singleprecision float)"><code>++lte:rs</code></a>
1442+[`++lte:rs`](/docs/hoon/reference/stdlib/3b/#lters)
1443−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthrs' title="Less than (singleprecision float)"><code>++lth:rs</code></a>
1443+[`++lth:rs`](/docs/hoon/reference/stdlib/3b/#lthrs)
1444−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mars' title="Initialize ff (rs core)"><code>++ma:rs</code></a>
1444+[`++ma:rs`](/docs/hoon/reference/stdlib/3b/#mars)
1445−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulrs' title="Multiply (singleprecision float)"><code>++mul:rs</code></a>
1445+[`++mul:rs`](/docs/hoon/reference/stdlib/3b/#mulrs)
1446−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanrs' title="Signed integer to @rs"><code>++san:rs</code></a>
1446+[`++san:rs`](/docs/hoon/reference/stdlib/3b/#sanrs)
1447−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sears' title="Convert from singleprecision float to fn"><code>++sea:rs</code></a>
1447+[`++sea:rs`](/docs/hoon/reference/stdlib/3b/#sears)
1448−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigrs' title="Produce sign of @rs"><code>++sig:rs</code></a>
1448+[`++sig:rs`](/docs/hoon/reference/stdlib/3b/#sigrs)
1449−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtrs' title="Produce square root of singleprecision float"><code>++sqt:rs</code></a>
1449+[`++sqt:rs`](/docs/hoon/reference/stdlib/3b/#sqtrs)
1450−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subrs' title="Subtract from singleprecision float"><code>++sub:rs</code></a>
1450+[`++sub:rs`](/docs/hoon/reference/stdlib/3b/#subrs)
1451−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunrs' title="Unsigned integer to singleprecision float"><code>++sun:rs</code></a>
1451+[`++sun:rs`](/docs/hoon/reference/stdlib/3b/#sunrs)
1452−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toirs' title="Round singleprecision float to nearest signed integer"><code>++toi:rs</code></a>
1452+[`++toi:rs`](/docs/hoon/reference/stdlib/3b/#toirs)
1453
1453
1454<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rq'><code>++rq</code></a>
1454<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rq'><code>++rq</code></a>
1455−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#addrq' title="Add (quadprecision float)"><code>++add:rq</code></a>
1455+[`++add:rq`](/docs/hoon/reference/stdlib/3b/#addrq)
1456−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#bitrq' title="fn to quadprecision float"><code>++bit:rq</code></a>
1456+[`++bit:rq`](/docs/hoon/reference/stdlib/3b/#bitrq)
1457−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#divrq' title="Divide (quadprecision float)"><code>++div:rq</code></a>
1457+[`++div:rq`](/docs/hoon/reference/stdlib/3b/#divrq)
1458−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#drgrq' title="@rq to decimal float"><code>++drg:rq</code></a>
1458+[`++drg:rq`](/docs/hoon/reference/stdlib/3b/#drgrq)
1459−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#equrq' title="Equals (quadprecision float)"><code>++equ:rq</code></a>
1459+[`++equ:rq`](/docs/hoon/reference/stdlib/3b/#equrq)
1460−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#exprq' title="Exponent (quadprecision float)"><code>++exp:rq</code></a>
1460+[`++exp:rq`](/docs/hoon/reference/stdlib/3b/#exprq)
1461−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#fmarq' title="Fused multiplyadd (quadprecision float)"><code>++fma:rq</code></a>
1461+[`++fma:rq`](/docs/hoon/reference/stdlib/3b/#fmarq)
1462−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#grdrq' title="Decimal float to @rq"><code>++grd:rq</code></a>
1462+[`++grd:rq`](/docs/hoon/reference/stdlib/3b/#grdrq)
1463−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gterq' title="Greater than / equal (quadprecision float)"><code>++gte:rq</code></a>
1463+[`++gte:rq`](/docs/hoon/reference/stdlib/3b/#gterq)
1464−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#gthrq' title="Greater than (quadprecision float)"><code>++gth:rq</code></a>
1464+[`++gth:rq`](/docs/hoon/reference/stdlib/3b/#gthrq)
1465−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lterq' title="Less than / equal (quadprecision float)"><code>++lte:rq</code></a>
1465+[`++lte:rq`](/docs/hoon/reference/stdlib/3b/#lterq)
1466−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#lthrq' title="Less than (quadprecision float)"><code>++lth:rq</code></a>
1466+[`++lth:rq`](/docs/hoon/reference/stdlib/3b/#lthrq)
1467−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#marq' title="Initialize ff (rq core)"><code>++ma:rq</code></a>
1467+[`++ma:rq`](/docs/hoon/reference/stdlib/3b/#marq)
1468−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#mulrq' title="Multiply (quadprecision float)"><code>++mul:rq</code></a>
1468+[`++mul:rq`](/docs/hoon/reference/stdlib/3b/#mulrq)
1469−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sanrq' title="Signed integer to @rq"><code>++san:rq</code></a>
1469+[`++san:rq`](/docs/hoon/reference/stdlib/3b/#sanrq)
1470−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#searq' title="Convert from quadprecision float to fn"><code>++sea:rq</code></a>
1470+[`++sea:rq`](/docs/hoon/reference/stdlib/3b/#searq)
1471−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sigrq' title="Produce sign of quadprecision float"><code>++sig:rq</code></a>
1471+[`++sig:rq`](/docs/hoon/reference/stdlib/3b/#sigrq)
1472−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sqtrq' title="Produce square root of quadprecision float"><code>++sqt:rq</code></a>
1472+[`++sqt:rq`](/docs/hoon/reference/stdlib/3b/#sqtrq)
1473−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#subrq' title="Subtract from quadprecision float"><code>++sub:rq</code></a>
1473+[`++sub:rq`](/docs/hoon/reference/stdlib/3b/#subrq)
1474−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#sunrq' title="Unsigned integer to quadprecision float"><code>++sun:rq</code></a>
1474+[`++sun:rq`](/docs/hoon/reference/stdlib/3b/#sunrq)
1475−<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#toirq' title="Round quadprecision float to nearest signed integer"><code>++toi:rq</code></a>
1475+[`++toi:rq`](/docs/hoon/reference/stdlib/3b/#toirq)
1476
1476
1477<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rlyd'><code>++rlyd</code></a>
1477<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rlyd'><code>++rlyd</code></a>
1478<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rlyh'><code>++rlyh</code></a>
1478<a class="tooltip" href='/docs/hoon/reference/stdlib/3b/#rlyh'><code>++rlyh</code></a>
@@ -1485,44 +1485,44 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
1485
1485
1486### 3c: urbit time
1486### 3c: urbit time
1487
1487
1488−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yo' title="Time constants core"><code>++yo</code></a>
1488+[`++yo`](/docs/hoon/reference/stdlib/3c/#yo)
1489−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#cetyo' title="Days in a century"><code>++cet:yo</code></a>
1489+[`++cet:yo`](/docs/hoon/reference/stdlib/3c/#cetyo)
1490−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#dayyo' title="Seconds in day"><code>++day:yo</code></a>
1490+[`++day:yo`](/docs/hoon/reference/stdlib/3c/#dayyo)
1491−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#erayo' title="Leapyear period"><code>++era:yo</code></a>
1491+[`++era:yo`](/docs/hoon/reference/stdlib/3c/#erayo)
1492−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#horyo' title="Seconds in hour"><code>++hor:yo</code></a>
1492+[`++hor:yo`](/docs/hoon/reference/stdlib/3c/#horyo)
1493−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#jesyo' title="Maximum 64bit timestamp"><code>++jes:yo</code></a>
1493+[`++jes:yo`](/docs/hoon/reference/stdlib/3c/#jesyo)
1494−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#mityo' title="Seconds in minute"><code>++mit:yo</code></a>
1494+[`++mit:yo`](/docs/hoon/reference/stdlib/3c/#mityo)
1495−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#mohyo' title="Days in month"><code>++moh:yo</code></a>
1495+[`++moh:yo`](/docs/hoon/reference/stdlib/3c/#mohyo)
1496−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#moyyo' title="Days in months of leapyear"><code>++moy:yo</code></a>
1496+[`++moy:yo`](/docs/hoon/reference/stdlib/3c/#moyyo)
1497−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#qadyo' title="Seconds in 4 years"><code>++qad:yo</code></a>
1497+[`++qad:yo`](/docs/hoon/reference/stdlib/3c/#qadyo)
1498−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yeryo' title="Seconds in year"><code>++yer:yo</code></a>
1498+[`++yer:yo`](/docs/hoon/reference/stdlib/3c/#yeryo)
1499−
1499+
1500−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yall' title="Time since beginning of time"><code>++yall</code></a>
1500+[`++yall`](/docs/hoon/reference/stdlib/3c/#yall)
1501−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yawn' title="Days since beginning of time"><code>++yawn</code></a>
1501+[`++yawn`](/docs/hoon/reference/stdlib/3c/#yawn)
1502−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#year' title="Date to @d"><code>++year</code></a>
1502+[`++year`](/docs/hoon/reference/stdlib/3c/#year)
1503−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yell' title="Tarp from atomic date"><code>++yell</code></a>
1503+[`++yell`](/docs/hoon/reference/stdlib/3c/#yell)
1504−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yelp' title="Determine if leapweek"><code>++yelp</code></a>
1504+[`++yelp`](/docs/hoon/reference/stdlib/3c/#yelp)
1505−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yore' title="Date from atomic date"><code>++yore</code></a>
1505+[`++yore`](/docs/hoon/reference/stdlib/3c/#yore)
1506−<a class="tooltip" href='/docs/hoon/reference/stdlib/3c/#yule' title="Daily time to time atom"><code>++yule</code></a>
1506+[`++yule`](/docs/hoon/reference/stdlib/3c/#yule)
1507
1507
1508### 3d: SHA hash family
1508### 3d: SHA hash family
1509
1509
1510−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#og' title="Container arm for SHA256 powered RNG"><code>++og</code></a>
1510+[`++og`](/docs/hoon/reference/stdlib/3d/#og)
1511−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#radog' title="Random in range"><code>++rad:og</code></a>
1511+[`++rad:og`](/docs/hoon/reference/stdlib/3d/#radog)
1512−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#radsog' title="Random continuation"><code>++rads:og</code></a>
1512+[`++rads:og`](/docs/hoon/reference/stdlib/3d/#radsog)
1513−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#rawog' title="Random bits"><code>++raw:og</code></a>
1513+[`++raw:og`](/docs/hoon/reference/stdlib/3d/#rawog)
1514−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#rawsog' title="Random bits continuation"><code>++raws:og</code></a>
1514+[`++raws:og`](/docs/hoon/reference/stdlib/3d/#rawsog)
1515−
1515+
1516−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shad' title="Double SHA256"><code>++shad</code></a>
1516+[`++shad`](/docs/hoon/reference/stdlib/3d/#shad)
1517−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shaf' title="Half SHA256"><code>++shaf</code></a>
1517+[`++shaf`](/docs/hoon/reference/stdlib/3d/#shaf)
1518−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shal' title="SHA512 with length"><code>++shal</code></a>
1518+[`++shal`](/docs/hoon/reference/stdlib/3d/#shal)
1519−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#sham' title="128bit noun hash"><code>++sham</code></a>
1519+[`++sham`](/docs/hoon/reference/stdlib/3d/#sham)
1520−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shan' title="SHA1"><code>++shan</code></a>
1520+[`++shan`](/docs/hoon/reference/stdlib/3d/#shan)
1521−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shas' title="Salted hash"><code>++shas</code></a>
1521+[`++shas`](/docs/hoon/reference/stdlib/3d/#shas)
1522−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shaw' title="Hash to nbits"><code>++shaw</code></a>
1522+[`++shaw`](/docs/hoon/reference/stdlib/3d/#shaw)
1523−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shax' title="SHA256"><code>++shax</code></a>
1523+[`++shax`](/docs/hoon/reference/stdlib/3d/#shax)
1524−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shay' title="SHA256 with length"><code>++shay</code></a>
1524+[`++shay`](/docs/hoon/reference/stdlib/3d/#shay)
1525−<a class="tooltip" href='/docs/hoon/reference/stdlib/3d/#shaz' title="SHA512"><code>++shaz</code></a>
1525+[`++shaz`](/docs/hoon/reference/stdlib/3d/#shaz)
1526
1526
1527### 3e: AES encryption
1527### 3e: AES encryption
1528
1528
@@ -1530,535 +1530,535 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
1530
1530
1531### 3f: scrambling
1531### 3f: scrambling
1532
1532
1533−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#ob' title="Reversible scrambling v2"><code>++ob</code></a>
1533+[`++ob`](/docs/hoon/reference/stdlib/3f/#ob)
1534−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feinob' title="Conceal structure v3"><code>++fein:ob</code></a>
1534+[`++fein:ob`](/docs/hoon/reference/stdlib/3f/#feinob)
1535−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#fyndob' title="Restore structure v3"><code>++fynd:ob</code></a>
1535+[`++fynd:ob`](/docs/hoon/reference/stdlib/3f/#fyndob)
1536−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feisob' title="Four-round generalised Feistel cipher over the domain [0, 2^32 - 2^16 - 1]"><code>++feis:ob</code></a>
1536+[`++feis:ob`](/docs/hoon/reference/stdlib/3f/#feisob)
1537−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#rakuob' title="Key list"><code>++raku:ob</code></a>
1537+[`++raku:ob`](/docs/hoon/reference/stdlib/3f/#rakuob)
1538−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#tailob' title="Reverse +feis"><code>++tail:ob</code></a>
1538+[`++tail:ob`](/docs/hoon/reference/stdlib/3f/#tailob)
1539−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feeob' title="Feistel cipher Fe in B&R (2002)"><code>++fee:ob</code></a>
1539+[`++fee:ob`](/docs/hoon/reference/stdlib/3f/#feeob)
1540−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feenob' title="Reverse +fee"><code>++feen:ob</code></a>
1540+[`++feen:ob`](/docs/hoon/reference/stdlib/3f/#feenob)
1541−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#feob' title="Internal function to +fee"><code>++fe:ob</code></a>
1541+[`++fe:ob`](/docs/hoon/reference/stdlib/3f/#feob)
1542−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#fenob' title="Reverse +fe"><code>++fen:ob</code></a>
1542+[`++fen:ob`](/docs/hoon/reference/stdlib/3f/#fenob)
1543−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#effob' title="murmur3-based pseudorandom function"><code>++eff:ob</code></a>
1543+[`++eff:ob`](/docs/hoon/reference/stdlib/3f/#effob)
1544−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#un' title="Reversible scrambling"><code>++un</code></a>
1544+[`++un`](/docs/hoon/reference/stdlib/3f/#un)
1545−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#wredun' title="Restore structure"><code>++wred:un</code></a>
1545+[`++wred:un`](/docs/hoon/reference/stdlib/3f/#wredun)
1546−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#wrenun' title="Conceal structure"><code>++wren:un</code></a>
1546+[`++wren:un`](/docs/hoon/reference/stdlib/3f/#wrenun)
1547<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#xafoun'><code>++xafo:un</code></a>
1547<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#xafoun'><code>++xafo:un</code></a>
1548<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#xaroun'><code>++xaro:un</code></a>
1548<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#xaroun'><code>++xaro:un</code></a>
1549−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#zaftun' title="Look up in 255 sub box"><code>++zaft:un</code></a>
1549+[`++zaft:un`](/docs/hoon/reference/stdlib/3f/#zaftun)
1550−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#zartun' title="Reverse look up in 255 sub box"><code>++zart:un</code></a>
1550+[`++zart:un`](/docs/hoon/reference/stdlib/3f/#zartun)
1551−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#zyftun' title="Lookup byte in 256 sub box"><code>++zyft:un</code></a>
1551+[`++zyft:un`](/docs/hoon/reference/stdlib/3f/#zyftun)
1552−<a class="tooltip" href='/docs/hoon/reference/stdlib/3f/#zyrtun' title="Reverse lookup byte in 256 sub box"><code>++zyrt:un</code></a>
1552+[`++zyrt:un`](/docs/hoon/reference/stdlib/3f/#zyrtun)
1553
1553
1554### 3g: molds and mold builders
1554### 3g: molds and mold builders
1555
1555
1556−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#coin' title="Nounliteral syntax cases"><code>+$coin</code></a>
1556+[`+$coin`](/docs/hoon/reference/stdlib/3g/#coin)
1557−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#dime' title="Auraatom pair"><code>+$dime</code></a>
1557+[`+$dime`](/docs/hoon/reference/stdlib/3g/#dime)
1558−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#edge' title="Parsing location metadata"><code>+$edge</code></a>
1558+[`+$edge`](/docs/hoon/reference/stdlib/3g/#edge)
1559−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#hair' title="Parsing line and column"><code>+$hair</code></a>
1559+[`+$hair`](/docs/hoon/reference/stdlib/3g/#hair)
1560−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#like' title="Generic edge"><code>++like</code></a>
1560+[`++like`](/docs/hoon/reference/stdlib/3g/#like)
1561−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#nail' title="Location, remainder of parsed text"><code>+$nail</code></a>
1561+[`+$nail`](/docs/hoon/reference/stdlib/3g/#nail)
1562−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#pint' title="Parsing range"><code>+$pint</code></a>
1562+[`+$pint`](/docs/hoon/reference/stdlib/3g/#pint)
1563−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#rule' title="Parsing rule (match this with _)"><code>+$rule</code></a>
1563+[`+$rule`](/docs/hoon/reference/stdlib/3g/#rule)
1564−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#spot' title="Stack trace line"><code>+$spot</code></a>
1564+[`+$spot`](/docs/hoon/reference/stdlib/3g/#spot)
1565−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#tone' title="Nock result (error report)"><code>+$tone</code></a>
1565+[`+$tone`](/docs/hoon/reference/stdlib/3g/#tone)
1566−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#toon' title="Nock result (stack trace)"><code>+$toon</code></a>
1566+[`+$toon`](/docs/hoon/reference/stdlib/3g/#toon)
1567−<a class="tooltip" href='/docs/hoon/reference/stdlib/3g/#wonk' title="Product from edge"><code>++wonk</code></a>
1567+[`++wonk`](/docs/hoon/reference/stdlib/3g/#wonk)
1568
1568
1569### 4a: exotic bases
1569### 4a: exotic bases
1570
1570
1571−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#po' title="Phonetic base"><code>++po</code></a>
1571+[`++po`](/docs/hoon/reference/stdlib/4a/#po)
1572−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#indpo' title="Parse suffix"><code>++ind:po</code></a>
1572+[`++ind:po`](/docs/hoon/reference/stdlib/4a/#indpo)
1573−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#inspo' title="Parse prefix"><code>++ins:po</code></a>
1573+[`++ins:po`](/docs/hoon/reference/stdlib/4a/#inspo)
1574−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#todpo' title="Fetch suffix"><code>++tod:po</code></a>
1574+[`++tod:po`](/docs/hoon/reference/stdlib/4a/#todpo)
1575−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#tospo' title="Fetch prefix"><code>++tos:po</code></a>
1575+[`++tos:po`](/docs/hoon/reference/stdlib/4a/#tospo)
1576−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#fa' title="base58check"><code>++fa</code></a>
1576+[`++fa`](/docs/hoon/reference/stdlib/4a/#fa)
1577−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#chafa' title="Decode base58check character"><code>++cha:fa</code></a>
1577+[`++cha:fa`](/docs/hoon/reference/stdlib/4a/#chafa)
1578−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#tokfa' title="Compute base58check checksum"><code>++tok:fa</code></a>
1578+[`++tok:fa`](/docs/hoon/reference/stdlib/4a/#tokfa)
1579−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#padfa' title="base58check padding bytes"><code>++pad:fa</code></a>
1579+[`++pad:fa`](/docs/hoon/reference/stdlib/4a/#padfa)
1580−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#encfa' title="Encode base58check"><code>++enc:fa</code></a>
1580+[`++enc:fa`](/docs/hoon/reference/stdlib/4a/#encfa)
1581−<a class="tooltip" href='/docs/hoon/reference/stdlib/4a/#denfa' title="Decode base58check"><code>++den:fa</code></a>
1581+[`++den:fa`](/docs/hoon/reference/stdlib/4a/#denfa)
1582
1582
1583### 4b: text processing
1583### 4b: text processing
1584
1584
1585−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#at' title="Basic printing"><code>++at</code></a>
1585+[`++at`](/docs/hoon/reference/stdlib/4b/#at)
1586−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rat' title="Print term, number or hex"><code>++r:at</code></a>
1586+[`++r:at`](/docs/hoon/reference/stdlib/4b/#rat)
1587−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rfat' title="Print loobean"><code>++rf:at</code></a>
1587+[`++rf:at`](/docs/hoon/reference/stdlib/4b/#rfat)
1588−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rnat' title="Print null"><code>++rn:at</code></a>
1588+[`++rn:at`](/docs/hoon/reference/stdlib/4b/#rnat)
1589−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rtat' title="Print cord, including escape characters"><code>++rt:at</code></a>
1589+[`++rt:at`](/docs/hoon/reference/stdlib/4b/#rtat)
1590−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rtaat' title="Print cord, including escape characters"><code>++rta:at</code></a>
1590+[`++rta:at`](/docs/hoon/reference/stdlib/4b/#rtaat)
1591−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rtamat' title="Print cord with @tas syntax"><code>++rtam:at</code></a>
1591+[`++rtam:at`](/docs/hoon/reference/stdlib/4b/#rtamat)
1592−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rubat' title="Print binary"><code>++rub:at</code></a>
1592+[`++rub:at`](/docs/hoon/reference/stdlib/4b/#rubat)
1593−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rudat' title="Print atom as integer"><code>++rud:at</code></a>
1593+[`++rud:at`](/docs/hoon/reference/stdlib/4b/#rudat)
1594−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rumat' title="Print base-n"><code>++rum:at</code></a>
1594+[`++rum:at`](/docs/hoon/reference/stdlib/4b/#rumat)
1595−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#rupat' title="Print @p (outdated)"><code>++rup:at</code></a>
1595+[`++rup:at`](/docs/hoon/reference/stdlib/4b/#rupat)
1596−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#ruvat' title="Print base-64"><code>++ruv:at</code></a>
1596+[`++ruv:at`](/docs/hoon/reference/stdlib/4b/#ruvat)
1597−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#ruxat' title="Print hexadecimal"><code>++rux:at</code></a>
1597+[`++rux:at`](/docs/hoon/reference/stdlib/4b/#ruxat)
1598−
1598+
1599−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#cass' title="To lowercase"><code>++cass</code></a>
1599+[`++cass`](/docs/hoon/reference/stdlib/4b/#cass)
1600−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#crip' title="Tape to cord"><code>++crip</code></a>
1600+[`++crip`](/docs/hoon/reference/stdlib/4b/#crip)
1601−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#cuss' title="To uppercase"><code>++cuss</code></a>
1601+[`++cuss`](/docs/hoon/reference/stdlib/4b/#cuss)
1602−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#mesc' title="Escape special characters"><code>++mesc</code></a>
1602+[`++mesc`](/docs/hoon/reference/stdlib/4b/#mesc)
1603−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#runt' title="Prepend n times"><code>++runt</code></a>
1603+[`++runt`](/docs/hoon/reference/stdlib/4b/#runt)
1604−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#sand' title="Softcast by aura"><code>++sand</code></a>
1604+[`++sand`](/docs/hoon/reference/stdlib/4b/#sand)
1605−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#sane' title="Check aura validity"><code>++sane</code></a>
1605+[`++sane`](/docs/hoon/reference/stdlib/4b/#sane)
1606−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#teff' title="UTF8 length"><code>++teff</code></a>
1606+[`++teff`](/docs/hoon/reference/stdlib/4b/#teff)
1607−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#trim' title="Tape split"><code>++trim</code></a>
1607+[`++trim`](/docs/hoon/reference/stdlib/4b/#trim)
1608−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#trip' title="Cord to tape"><code>++trip</code></a>
1608+[`++trip`](/docs/hoon/reference/stdlib/4b/#trip)
1609−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#tuba' title="UTF8 to UTF32 tape"><code>++tuba</code></a>
1609+[`++tuba`](/docs/hoon/reference/stdlib/4b/#tuba)
1610−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#tufa' title="UTF32 to UTF8 tape"><code>++tufa</code></a>
1610+[`++tufa`](/docs/hoon/reference/stdlib/4b/#tufa)
1611−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#tuft' title="UTF32 to UTF8 text"><code>++tuft</code></a>
1611+[`++tuft`](/docs/hoon/reference/stdlib/4b/#tuft)
1612−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#taft' title="UTF8 to UTF32 cord"><code>++taft</code></a>
1612+[`++taft`](/docs/hoon/reference/stdlib/4b/#taft)
1613−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wack' title="Knot escape"><code>++wack</code></a>
1613+[`++wack`](/docs/hoon/reference/stdlib/4b/#wack)
1614−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wick' title="Knot unescape"><code>++wick</code></a>
1614+[`++wick`](/docs/hoon/reference/stdlib/4b/#wick)
1615−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#woad' title="Unescape cord"><code>++woad</code></a>
1615+[`++woad`](/docs/hoon/reference/stdlib/4b/#woad)
1616−<a class="tooltip" href='/docs/hoon/reference/stdlib/4b/#wood' title="Escape cord"><code>++wood</code></a>
1616+[`++wood`](/docs/hoon/reference/stdlib/4b/#wood)
1617
1617
1618### 4c: tank printer
1618### 4c: tank printer
1619
1619
1620−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#wash' title="Render tank at width"><code>++wash</code></a>
1620+[`++wash`](/docs/hoon/reference/stdlib/4c/#wash)
1621−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#re' title="Prettyprinting engine (tank)"><code>++re</code></a>
1621+[`++re`](/docs/hoon/reference/stdlib/4c/#re)
1622−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#ramre' title="Flatten tank to tape"><code>++ram:re</code></a>
1622+[`++ram:re`](/docs/hoon/reference/stdlib/4c/#ramre)
1623−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#winre' title="Render at indent"><code>++win:re</code></a>
1623+[`++win:re`](/docs/hoon/reference/stdlib/4c/#winre)
1624−<a class="tooltip" href='/docs/hoon/reference/stdlib/4c/#show' title="Pretty-printer (deprecated)"><code>++show</code></a>
1624+[`++show`](/docs/hoon/reference/stdlib/4c/#show)
1625
1625
1626### 4d: parsing (tracing)
1626### 4d: parsing (tracing)
1627
1627
1628−<a class="tooltip" href='/docs/hoon/reference/stdlib/4d/#last' title="Further trace"><code>++last</code></a>
1628+[`++last`](/docs/hoon/reference/stdlib/4d/#last)
1629−<a class="tooltip" href='/docs/hoon/reference/stdlib/4d/#lust' title="Detect new line"><code>++lust</code></a>
1629+[`++lust`](/docs/hoon/reference/stdlib/4d/#lust)
1630
1630
1631### 4e: parsing (combinators)
1631### 4e: parsing (combinators)
1632
1632
1633−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#bend' title="Conditional composer"><code>++bend</code></a>
1633+[`++bend`](/docs/hoon/reference/stdlib/4e/#bend)
1634−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#comp' title="Arbitrary compose"><code>++comp</code></a>
1634+[`++comp`](/docs/hoon/reference/stdlib/4e/#comp)
1635−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#fail' title="Never parse"><code>++fail</code></a>
1635+[`++fail`](/docs/hoon/reference/stdlib/4e/#fail)
1636−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#glue' title="Skip delimiter"><code>++glue</code></a>
1636+[`++glue`](/docs/hoon/reference/stdlib/4e/#glue)
1637−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#less' title="Parse unless"><code>++less</code></a>
1637+[`++less`](/docs/hoon/reference/stdlib/4e/#less)
1638−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#pfix' title="Discard first rule"><code>++pfix</code></a>
1638+[`++pfix`](/docs/hoon/reference/stdlib/4e/#pfix)
1639−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#plug' title="Parse to tuple"><code>++plug</code></a>
1639+[`++plug`](/docs/hoon/reference/stdlib/4e/#plug)
1640−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#pose' title="Parse options"><code>++pose</code></a>
1640+[`++pose`](/docs/hoon/reference/stdlib/4e/#pose)
1641−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#sfix' title="Discard second rule"><code>++sfix</code></a>
1641+[`++sfix`](/docs/hoon/reference/stdlib/4e/#sfix)
1642−<a class="tooltip" href='/docs/hoon/reference/stdlib/4e/#simu' title="First and second"><code>++simu</code></a>
1642+[`++simu`](/docs/hoon/reference/stdlib/4e/#simu)
1643
1643
1644### 4f: parsing (rule builders)
1644### 4f: parsing (rule builders)
1645
1645
1646−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#bass' title="Parser modifier (LSBordered ++list as atom of ++base)"><code>++bass</code></a>
1646+[`++bass`](/docs/hoon/reference/stdlib/4f/#bass)
1647−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#boss' title="Parser modifier: LSB"><code>++boss</code></a>
1647+[`++boss`](/docs/hoon/reference/stdlib/4f/#boss)
1648−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#cold' title="Replace with constant"><code>++cold</code></a>
1648+[`++cold`](/docs/hoon/reference/stdlib/4f/#cold)
1649−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#cook' title="Apply gate"><code>++cook</code></a>
1649+[`++cook`](/docs/hoon/reference/stdlib/4f/#cook)
1650−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#easy' title="Always parse"><code>++easy</code></a>
1650+[`++easy`](/docs/hoon/reference/stdlib/4f/#easy)
1651−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#full' title="Parse to end"><code>++full</code></a>
1651+[`++full`](/docs/hoon/reference/stdlib/4f/#full)
1652−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#funk' title="Add to tape"><code>++funk</code></a>
1652+[`++funk`](/docs/hoon/reference/stdlib/4f/#funk)
1653−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#fuss' title="Has A or B?"><code>++fuss</code></a>
1653+[`++fuss`](/docs/hoon/reference/stdlib/4f/#fuss)
1654−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#here' title="Placebased apply"><code>++here</code></a>
1654+[`++here`](/docs/hoon/reference/stdlib/4f/#here)
1655−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#ifix' title="Infix"><code>++ifix</code></a>
1655+[`++ifix`](/docs/hoon/reference/stdlib/4f/#ifix)
1656−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#inde' title="Indentation block"><code>++inde</code></a>
1656+[`++inde`](/docs/hoon/reference/stdlib/4f/#inde)
1657−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#jest' title="Match a cord"><code>++jest</code></a>
1657+[`++jest`](/docs/hoon/reference/stdlib/4f/#jest)
1658−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#just' title="Match a single character"><code>++just</code></a>
1658+[`++just`](/docs/hoon/reference/stdlib/4f/#just)
1659−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#knee' title="Recursive parsers"><code>++knee</code></a>
1659+[`++knee`](/docs/hoon/reference/stdlib/4f/#knee)
1660−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#mask' title="Match character"><code>++mask</code></a>
1660+[`++mask`](/docs/hoon/reference/stdlib/4f/#mask)
1661−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#more' title="Parse list with delimiter"><code>++more</code></a>
1661+[`++more`](/docs/hoon/reference/stdlib/4f/#more)
1662−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#most' title="Parse list of at least one match"><code>++most</code></a>
1662+[`++most`](/docs/hoon/reference/stdlib/4f/#most)
1663−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#next' title="Consume character"><code>++next</code></a>
1663+[`++next`](/docs/hoon/reference/stdlib/4f/#next)
1664−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#perk' title="Parse cube fork"><code>++perk</code></a>
1664+[`++perk`](/docs/hoon/reference/stdlib/4f/#perk)
1665−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#plus' title="List of at least one match"><code>++plus</code></a>
1665+[`++plus`](/docs/hoon/reference/stdlib/4f/#plus)
1666−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#punt' title="Unitized parse"><code>++punt</code></a>
1666+[`++punt`](/docs/hoon/reference/stdlib/4f/#punt)
1667−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#sear' title="Conditional ++cook"><code>++sear</code></a>
1667+[`++sear`](/docs/hoon/reference/stdlib/4f/#sear)
1668−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#shim' title="Match character within range"><code>++shim</code></a>
1668+[`++shim`](/docs/hoon/reference/stdlib/4f/#shim)
1669−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#slug' title="Use gate to parse delimited list"><code>++slug</code></a>
1669+[`++slug`](/docs/hoon/reference/stdlib/4f/#slug)
1670−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stag' title="Add label"><code>++stag</code></a>
1670+[`++stag`](/docs/hoon/reference/stdlib/4f/#stag)
1671−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#star' title="Produce list of matches"><code>++star</code></a>
1671+[`++star`](/docs/hoon/reference/stdlib/4f/#star)
1672−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stet' title="Add faces to rangeparser pairs in list"><code>++stet</code></a>
1672+[`++stet`](/docs/hoon/reference/stdlib/4f/#stet)
1673−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stew' title="Switch by first"><code>++stew</code></a>
1673+[`++stew`](/docs/hoon/reference/stdlib/4f/#stew)
1674−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stir' title="Parse repeatedly"><code>++stir</code></a>
1674+[`++stir`](/docs/hoon/reference/stdlib/4f/#stir)
1675−<a class="tooltip" href='/docs/hoon/reference/stdlib/4f/#stun' title="Parse several times"><code>++stun</code></a>
1675+[`++stun`](/docs/hoon/reference/stdlib/4f/#stun)
1676
1676
1677### 4g: parsing (outside caller)
1677### 4g: parsing (outside caller)
1678
1678
1679−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#rash' title="Parse or crash"><code>++rash</code></a>
1679+[`++rash`](/docs/hoon/reference/stdlib/4g/#rash)
1680−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#rose' title="Parse to each"><code>++rose</code></a>
1680+[`++rose`](/docs/hoon/reference/stdlib/4g/#rose)
1681−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#rush' title="Parse or null"><code>++rush</code></a>
1681+[`++rush`](/docs/hoon/reference/stdlib/4g/#rush)
1682−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#rust' title="Parse tape or null"><code>++rust</code></a>
1682+[`++rust`](/docs/hoon/reference/stdlib/4g/#rust)
1683−<a class="tooltip" href='/docs/hoon/reference/stdlib/4g/#scan' title="Parse tape or crash"><code>++scan</code></a>
1683+[`++scan`](/docs/hoon/reference/stdlib/4g/#scan)
1684
1684
1685### 4h: parsing (ascii glyphs)
1685### 4h: parsing (ascii glyphs)
1686
1686
1687−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#ace' title="Parse space"><code>++ace</code></a>
1687+[`++ace`](/docs/hoon/reference/stdlib/4h/#ace)
1688−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#bar' title="Parse | (bar)"><code>++bar</code></a>
1688+[`++bar`](/docs/hoon/reference/stdlib/4h/#bar)
1689−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#bas' title="Parse \ (bas)"><code>++bas</code></a>
1689+[`++bas`](/docs/hoon/reference/stdlib/4h/#bas)
1690−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#buc' title="Parse $ (buc)"><code>++buc</code></a>
1690+[`++buc`](/docs/hoon/reference/stdlib/4h/#buc)
1691−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#cab' title="Parse _ (cab)"><code>++cab</code></a>
1691+[`++cab`](/docs/hoon/reference/stdlib/4h/#cab)
1692−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#cen' title="Parse % (cen)"><code>++cen</code></a>
1692+[`++cen`](/docs/hoon/reference/stdlib/4h/#cen)
1693−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#col' title="Parse : (col)"><code>++col</code></a>
1693+[`++col`](/docs/hoon/reference/stdlib/4h/#col)
1694−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#com' title="Parse , (comma)"><code>++com</code></a>
1694+[`++com`](/docs/hoon/reference/stdlib/4h/#com)
1695−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#doq' title="Parse double quote"><code>++doq</code></a>
1695+[`++doq`](/docs/hoon/reference/stdlib/4h/#doq)
1696−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#dot' title="Parse period"><code>++dot</code></a>
1696+[`++dot`](/docs/hoon/reference/stdlib/4h/#dot)
1697−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#fas' title="Parse / (fas)"><code>++fas</code></a>
1697+[`++fas`](/docs/hoon/reference/stdlib/4h/#fas)
1698−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#gal' title="Parse < (gal)"><code>++gal</code></a>
1698+[`++gal`](/docs/hoon/reference/stdlib/4h/#gal)
1699−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#gar' title="Parse > (gar)"><code>++gar</code></a>
1699+[`++gar`](/docs/hoon/reference/stdlib/4h/#gar)
1700−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#hax' title="Parse # (hax)"><code>++hax</code></a>
1700+[`++hax`](/docs/hoon/reference/stdlib/4h/#hax)
1701−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#hep' title="Parse (hep)"><code>++hep</code></a>
1701+[`++hep`](/docs/hoon/reference/stdlib/4h/#hep)
1702−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#kel' title="Parse { (kel)"><code>++kel</code></a>
1702+[`++kel`](/docs/hoon/reference/stdlib/4h/#kel)
1703−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#ker' title="Parse } (ker)"><code>++ker</code></a>
1703+[`++ker`](/docs/hoon/reference/stdlib/4h/#ker)
1704−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#ket' title="Parse ^ (ket)"><code>++ket</code></a>
1704+[`++ket`](/docs/hoon/reference/stdlib/4h/#ket)
1705−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#lus' title="Parse + (lus)"><code>++lus</code></a>
1705+[`++lus`](/docs/hoon/reference/stdlib/4h/#lus)
1706−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#pam' title="Parse & (pam)"><code>++pam</code></a>
1706+[`++pam`](/docs/hoon/reference/stdlib/4h/#pam)
1707−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#pat' title="Parse @ (pat)"><code>++pat</code></a>
1707+[`++pat`](/docs/hoon/reference/stdlib/4h/#pat)
1708−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#pal' title="Parse ( (pal)"><code>++pal</code></a>
1708+[`++pal`](/docs/hoon/reference/stdlib/4h/#pal)
1709−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#par' title="Parse ) (par)"><code>++par</code></a>
1709+[`++par`](/docs/hoon/reference/stdlib/4h/#par)
1710−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#sel' title="Parse [ (sel)"><code>++sel</code></a>
1710+[`++sel`](/docs/hoon/reference/stdlib/4h/#sel)
1711−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#mic' title="Parse ; (mic)"><code>++mic</code></a>
1711+[`++mic`](/docs/hoon/reference/stdlib/4h/#mic)
1712−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#ser' title="Parse ] (ser)"><code>++ser</code></a>
1712+[`++ser`](/docs/hoon/reference/stdlib/4h/#ser)
1713−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#sig' title="Parse ~ (sig)"><code>++sig</code></a>
1713+[`++sig`](/docs/hoon/reference/stdlib/4h/#sig)
1714−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#soq' title="Parse ' (soq)"><code>++soq</code></a>
1714+[`++soq`](/docs/hoon/reference/stdlib/4h/#soq)
1715−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#tar' title="Parse * (tar)"><code>++tar</code></a>
1715+[`++tar`](/docs/hoon/reference/stdlib/4h/#tar)
1716−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#tic' title="Parse ` (tic)"><code>++tic</code></a>
1716+[`++tic`](/docs/hoon/reference/stdlib/4h/#tic)
1717−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#tis' title="Parse = (tis)"><code>++tis</code></a>
1717+[`++tis`](/docs/hoon/reference/stdlib/4h/#tis)
1718−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#wut' title="Parse ? (wut)"><code>++wut</code></a>
1718+[`++wut`](/docs/hoon/reference/stdlib/4h/#wut)
1719−<a class="tooltip" href='/docs/hoon/reference/stdlib/4h/#zap' title="Parse ! (zap)"><code>++zap</code></a>
1719+[`++zap`](/docs/hoon/reference/stdlib/4h/#zap)
1720
1720
1721### 4i: parsing (useful idioms)
1721### 4i: parsing (useful idioms)
1722
1722
1723−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#alf' title="Parse alphabetic characters"><code>++alf</code></a>
1723+[`++alf`](/docs/hoon/reference/stdlib/4i/#alf)
1724−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#aln' title="Parse alphanumeric characters"><code>++aln</code></a>
1724+[`++aln`](/docs/hoon/reference/stdlib/4i/#aln)
1725−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#alp' title="Parse alphanumeric characters and "><code>++alp</code></a>
1725+[`++alp`](/docs/hoon/reference/stdlib/4i/#alp)
1726−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#bet' title="Parse hep and lus axis syntax"><code>++bet</code></a>
1726+[`++bet`](/docs/hoon/reference/stdlib/4i/#bet)
1727−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#bin' title="Binary to atom"><code>++bin</code></a>
1727+[`++bin`](/docs/hoon/reference/stdlib/4i/#bin)
1728−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#but' title="Parse binary digit"><code>++but</code></a>
1728+[`++but`](/docs/hoon/reference/stdlib/4i/#but)
1729−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#cit' title="Octal digit"><code>++cit</code></a>
1729+[`++cit`](/docs/hoon/reference/stdlib/4i/#cit)
1730−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dem' title="Decimal to atom"><code>++dem</code></a>
1730+[`++dem`](/docs/hoon/reference/stdlib/4i/#dem)
1731−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dit' title="Decimal digit"><code>++dit</code></a>
1731+[`++dit`](/docs/hoon/reference/stdlib/4i/#dit)
1732−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dof' title="Hep & optional gap"><code>++dof</code></a>
1732+[`++dof`](/docs/hoon/reference/stdlib/4i/#dof)
1733−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dog' title="Optional gap"><code>++dog</code></a>
1733+[`++dog`](/docs/hoon/reference/stdlib/4i/#dog)
1734−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#doh' title="@p separator"><code>++doh</code></a>
1734+[`++doh`](/docs/hoon/reference/stdlib/4i/#doh)
1735−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#dun' title=" to ~"><code>++dun</code></a>
1735+[`++dun`](/docs/hoon/reference/stdlib/4i/#dun)
1736−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#duz' title="== to ~"><code>++duz</code></a>
1736+[`++duz`](/docs/hoon/reference/stdlib/4i/#duz)
1737−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gah' title="New line or ''"><code>++gah</code></a>
1737+[`++gah`](/docs/hoon/reference/stdlib/4i/#gah)
1738−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gap' title="Plural whitespace"><code>++gap</code></a>
1738+[`++gap`](/docs/hoon/reference/stdlib/4i/#gap)
1739−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gaq' title="End of line"><code>++gaq</code></a>
1739+[`++gaq`](/docs/hoon/reference/stdlib/4i/#gaq)
1740−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gaw' title="Classic whitespace"><code>++gaw</code></a>
1740+[`++gaw`](/docs/hoon/reference/stdlib/4i/#gaw)
1741−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gay' title="Optional gap"><code>++gay</code></a>
1741+[`++gay`](/docs/hoon/reference/stdlib/4i/#gay)
1742−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gon' title="Parse long numbers"><code>++gon</code></a>
1742+[`++gon`](/docs/hoon/reference/stdlib/4i/#gon)
1743−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#gul' title="Axis syntax < or >"><code>++gul</code></a>
1743+[`++gul`](/docs/hoon/reference/stdlib/4i/#gul)
1744−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#hex' title="Hexadecimal to atom"><code>++hex</code></a>
1744+[`++hex`](/docs/hoon/reference/stdlib/4i/#hex)
1745−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#hig' title="Parse single uppercase letter"><code>++hig</code></a>
1745+[`++hig`](/docs/hoon/reference/stdlib/4i/#hig)
1746−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#hit' title="Parse single hexadecimal digit"><code>++hit</code></a>
1746+[`++hit`](/docs/hoon/reference/stdlib/4i/#hit)
1747−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#iny' title="Indentation block"><code>++iny</code></a>
1747+[`++iny`](/docs/hoon/reference/stdlib/4i/#iny)
1748−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#low' title="Parse lowercase letter"><code>++low</code></a>
1748+[`++low`](/docs/hoon/reference/stdlib/4i/#low)
1749−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#mes' title="Parse hexabyte"><code>++mes</code></a>
1749+[`++mes`](/docs/hoon/reference/stdlib/4i/#mes)
1750−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#nix' title="Parse letters and underscore"><code>++nix</code></a>
1750+[`++nix`](/docs/hoon/reference/stdlib/4i/#nix)
1751−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#nud' title="Parse numeric character"><code>++nud</code></a>
1751+[`++nud`](/docs/hoon/reference/stdlib/4i/#nud)
1752−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#prn' title="Parse any printable character"><code>++prn</code></a>
1752+[`++prn`](/docs/hoon/reference/stdlib/4i/#prn)
1753−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#qat' title="Parse chars in blockcord"><code>++qat</code></a>
1753+[`++qat`](/docs/hoon/reference/stdlib/4i/#qat)
1754−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#qit' title="Parse character to cord atom"><code>++qit</code></a>
1754+[`++qit`](/docs/hoon/reference/stdlib/4i/#qit)
1755−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#qut' title="Parse cord"><code>++qut</code></a>
1755+[`++qut`](/docs/hoon/reference/stdlib/4i/#qut)
1756−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#soz' title="Parse triple singlequote"><code>++soz</code></a>
1756+[`++soz`](/docs/hoon/reference/stdlib/4i/#soz)
1757−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#sym' title="Term"><code>++sym</code></a>
1757+[`++sym`](/docs/hoon/reference/stdlib/4i/#sym)
1758−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#mixed-case-symbol' title="Mixed-case term"><code>++mixed-case-symbol</code></a>
1758+[`++mixed-case-symbol`](/docs/hoon/reference/stdlib/4i/#mixed-case-symbol)
1759−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#ven' title="Axis syntax parser"><code>++ven</code></a>
1759+[`++ven`](/docs/hoon/reference/stdlib/4i/#ven)
1760−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#vit' title="Parse base 64 digit"><code>++vit</code></a>
1760+[`++vit`](/docs/hoon/reference/stdlib/4i/#vit)
1761−<a class="tooltip" href='/docs/hoon/reference/stdlib/4i/#vul' title="Comments to null"><code>++vul</code></a>
1761+[`++vul`](/docs/hoon/reference/stdlib/4i/#vul)
1762
1762
1763### 4j: parsing (bases and base digits)
1763### 4j: parsing (bases and base digits)
1764
1764
1765−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#ab' title="Primitive parser engine"><code>++ab</code></a>
1765+[`++ab`](/docs/hoon/reference/stdlib/4j/#ab)
1766−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#bixab' title="Parse hex pair"><code>++bix:ab</code></a>
1766+[`++bix:ab`](/docs/hoon/reference/stdlib/4j/#bixab)
1767−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#femab' title="Parse base58check char"><code>++fem:ab</code></a>
1767+[`++fem:ab`](/docs/hoon/reference/stdlib/4j/#femab)
1768−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hafab' title="Parse non-doz phonetic pair"><code>++haf:ab</code></a>
1768+[`++haf:ab`](/docs/hoon/reference/stdlib/4j/#hafab)
1769−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hefab' title="Parse non-dozzod phonetic pair"><code>++hef:ab</code></a>
1769+[`++hef:ab`](/docs/hoon/reference/stdlib/4j/#hefab)
1770−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hifab' title="Parse phonetic pair"><code>++hif:ab</code></a>
1770+[`++hif:ab`](/docs/hoon/reference/stdlib/4j/#hifab)
1771−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hofab' title="Parse 2-4 @q phonetic pair"><code>++hof:ab</code></a>
1771+[`++hof:ab`](/docs/hoon/reference/stdlib/4j/#hofab)
1772−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hufab' title="Parse 1-4 @q phonetic pairs"><code>++huf:ab</code></a>
1772+[`++huf:ab`](/docs/hoon/reference/stdlib/4j/#hufab)
1773−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hyfab' title="Parse four @q phonetic pairs"><code>++hyf:ab</code></a>
1773+[`++hyf:ab`](/docs/hoon/reference/stdlib/4j/#hyfab)
1774−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pevab' title="Parse 1-5 @uv base-32 chars"><code>++pev:ab</code></a>
1774+[`++pev:ab`](/docs/hoon/reference/stdlib/4j/#pevab)
1775−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pewab' title="Parse <= 5 in base 64"><code>++pew:ab</code></a>
1775+[`++pew:ab`](/docs/hoon/reference/stdlib/4j/#pewab)
1776−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#pivab' title="Parse 5 @uv base-32 chars"><code>++piv:ab</code></a>
1776+[`++piv:ab`](/docs/hoon/reference/stdlib/4j/#pivab)
1777−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#piwab' title="Parse 5 @uw base-64 chars"><code>++piw:ab</code></a>
1777+[`++piw:ab`](/docs/hoon/reference/stdlib/4j/#piwab)
1778−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#qebab' title="Parse 1-4 binary digits"><code>++qeb:ab</code></a>
1778+[`++qeb:ab`](/docs/hoon/reference/stdlib/4j/#qebab)
1779−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#qexab' title="Parse 1-4 hex digits"><code>++qex:ab</code></a>
1779+[`++qex:ab`](/docs/hoon/reference/stdlib/4j/#qexab)
1780−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#qibab' title="Parse 4 binary digits"><code>++qib:ab</code></a>
1780+[`++qib:ab`](/docs/hoon/reference/stdlib/4j/#qibab)
1781−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#qixab' title="Parse 4 hexadecimal digits"><code>++qix:ab</code></a>
1781+[`++qix:ab`](/docs/hoon/reference/stdlib/4j/#qixab)
1782−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sebab' title="Parse 1"><code>++seb:ab</code></a>
1782+[`++seb:ab`](/docs/hoon/reference/stdlib/4j/#sebab)
1783−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sedab' title="Parse nonzero decimal digit"><code>++sed:ab</code></a>
1783+[`++sed:ab`](/docs/hoon/reference/stdlib/4j/#sedab)
1784−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sevab' title="Parse nonzero base 32 digit"><code>++sev:ab</code></a>
1784+[`++sev:ab`](/docs/hoon/reference/stdlib/4j/#sevab)
1785−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sewab' title="Parse nonzero base 64 digit"><code>++sew:ab</code></a>
1785+[`++sew:ab`](/docs/hoon/reference/stdlib/4j/#sewab)
1786−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sexab' title="Parse nonzero hexadecimal digit"><code>++sex:ab</code></a>
1786+[`++sex:ab`](/docs/hoon/reference/stdlib/4j/#sexab)
1787−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sibab' title="Parse binary digit"><code>++sib:ab</code></a>
1787+[`++sib:ab`](/docs/hoon/reference/stdlib/4j/#sibab)
1788−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sidab' title="Parse decimal digit"><code>++sid:ab</code></a>
1788+[`++sid:ab`](/docs/hoon/reference/stdlib/4j/#sidab)
1789−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sivab' title="Parse a base 32 digit"><code>++siv:ab</code></a>
1789+[`++siv:ab`](/docs/hoon/reference/stdlib/4j/#sivab)
1790−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#siwab' title="Parse a base 64 digit"><code>++siw:ab</code></a>
1790+[`++siw:ab`](/docs/hoon/reference/stdlib/4j/#siwab)
1791−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sixab' title="Parse a hexadecimal digit"><code>++six:ab</code></a>
1791+[`++six:ab`](/docs/hoon/reference/stdlib/4j/#sixab)
1792−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sovab' title="Parse @uv base-32 letter"><code>++sov:ab</code></a>
1792+[`++sov:ab`](/docs/hoon/reference/stdlib/4j/#sovab)
1793−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#sowab' title="Parse @uw base-64 letter/symbol"><code>++sow:ab</code></a>
1793+[`++sow:ab`](/docs/hoon/reference/stdlib/4j/#sowab)
1794−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#soxab' title="Parse hexadecimal letter"><code>++sox:ab</code></a>
1794+[`++sox:ab`](/docs/hoon/reference/stdlib/4j/#soxab)
1795−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tedab' title="Parse 1-999 decimal"><code>++ted:ab</code></a>
1795+[`++ted:ab`](/docs/hoon/reference/stdlib/4j/#tedab)
1796−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tepab' title="Parse non-doz leading phonetic byte"><code>++tep:ab</code></a>
1796+[`++tep:ab`](/docs/hoon/reference/stdlib/4j/#tepab)
1797−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tidab' title="Parse 3 decimal digits"><code>++tid:ab</code></a>
1797+[`++tid:ab`](/docs/hoon/reference/stdlib/4j/#tidab)
1798−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tilab' title="Parse 3 lowercase letters"><code>++til:ab</code></a>
1798+[`++til:ab`](/docs/hoon/reference/stdlib/4j/#tilab)
1799−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tipab' title="Leading phonetic byte"><code>++tip:ab</code></a>
1799+[`++tip:ab`](/docs/hoon/reference/stdlib/4j/#tipab)
1800−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#tiqab' title="Trailing phonetic syllable"><code>++tiq:ab</code></a>
1800+[`++tiq:ab`](/docs/hoon/reference/stdlib/4j/#tiqab)
1801−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#ursab' title="Parse knot characters"><code>++urs:ab</code></a>
1801+[`++urs:ab`](/docs/hoon/reference/stdlib/4j/#ursab)
1802−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#urtab' title="Parse knot without underscores"><code>++urt:ab</code></a>
1802+[`++urt:ab`](/docs/hoon/reference/stdlib/4j/#urtab)
1803−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#voyab' title="Parse bas, soq, or bix"><code>++voy:ab</code></a>
1803+[`++voy:ab`](/docs/hoon/reference/stdlib/4j/#voyab)
1804−
1804+
1805−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#ag' title="Toplevel atom parser engine"><code>++ag</code></a>
1805+[`++ag`](/docs/hoon/reference/stdlib/4j/#ag)
1806−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#apeag' title="Parse 0 or rule"><code>++ape:ag</code></a>
1806+[`++ape:ag`](/docs/hoon/reference/stdlib/4j/#apeag)
1807−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#bayag' title="Parses binary number"><code>++bay:ag</code></a>
1807+[`++bay:ag`](/docs/hoon/reference/stdlib/4j/#bayag)
1808−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#bipag' title="Parse IPv6"><code>++bip:ag</code></a>
1808+[`++bip:ag`](/docs/hoon/reference/stdlib/4j/#bipag)
1809−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#demag' title="Parse decmal with dots"><code>++dem:ag</code></a>
1809+[`++dem:ag`](/docs/hoon/reference/stdlib/4j/#demag)
1810−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#dimag' title="Parse decimal number"><code>++dim:ag</code></a>
1810+[`++dim:ag`](/docs/hoon/reference/stdlib/4j/#dimag)
1811−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#dumag' title="Parse decimal with leading zero"><code>++dum:ag</code></a>
1811+[`++dum:ag`](/docs/hoon/reference/stdlib/4j/#dumag)
1812−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#fedag' title="Parse @p"><code>++fed:ag</code></a>
1812+[`++fed:ag`](/docs/hoon/reference/stdlib/4j/#fedag)
1813−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#feqag' title="Parse @q phonetic base"><code>++feq:ag</code></a>
1813+[`++feq:ag`](/docs/hoon/reference/stdlib/4j/#feqag)
1814−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#fimag' title="Parse base58check"><code>++fim:ag</code></a>
1814+[`++fim:ag`](/docs/hoon/reference/stdlib/4j/#fimag)
1815−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#hexag' title="Parse hexadecimal number"><code>++hex:ag</code></a>
1815+[`++hex:ag`](/docs/hoon/reference/stdlib/4j/#hexag)
1816−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#lipag' title="Parse IPv4 address"><code>++lip:ag</code></a>
1816+[`++lip:ag`](/docs/hoon/reference/stdlib/4j/#lipag)
1817−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#motag' title="Parse numerical month"><code>++mot:ag</code></a>
1817+[`++mot:ag`](/docs/hoon/reference/stdlib/4j/#motag)
1818−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#vizag' title="Parse base 32 digit with dot separators"><code>++viz:ag</code></a>
1818+[`++viz:ag`](/docs/hoon/reference/stdlib/4j/#vizag)
1819−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#vumag' title="Parse base 32 string"><code>++vum:ag</code></a>
1819+[`++vum:ag`](/docs/hoon/reference/stdlib/4j/#vumag)
1820−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#wizag' title="Parse base 64 number"><code>++wiz:ag</code></a>
1820+[`++wiz:ag`](/docs/hoon/reference/stdlib/4j/#wizag)
1821−
1821+
1822−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#mu' title="Core used to scramble 16bit atoms"><code>++mu</code></a>
1822+[`++mu`](/docs/hoon/reference/stdlib/4j/#mu)
1823−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#zagmu' title="Add bottom into top"><code>++zag:mu</code></a>
1823+[`++zag:mu`](/docs/hoon/reference/stdlib/4j/#zagmu)
1824−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#zigmu' title="Subtract bottom from top"><code>++zig:mu</code></a>
1824+[`++zig:mu`](/docs/hoon/reference/stdlib/4j/#zigmu)
1825−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#zugmu' title="Concatenate into atom"><code>++zug:mu</code></a>
1825+[`++zug:mu`](/docs/hoon/reference/stdlib/4j/#zugmu)
1826−
1826+
1827−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#ne' title="Digit rendering engine"><code>++ne</code></a>
1827+[`++ne`](/docs/hoon/reference/stdlib/4j/#ne)
1828−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#cne' title="Render base58check"><code>++c:ne</code></a>
1828+[`++c:ne`](/docs/hoon/reference/stdlib/4j/#cne)
1829−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#dne' title="Render decimal"><code>++d:ne</code></a>
1829+[`++d:ne`](/docs/hoon/reference/stdlib/4j/#dne)
1830−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#vne' title="Render base 32"><code>++v:ne</code></a>
1830+[`++v:ne`](/docs/hoon/reference/stdlib/4j/#vne)
1831−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#wne' title="Render base 64 digit"><code>++w:ne</code></a>
1831+[`++w:ne`](/docs/hoon/reference/stdlib/4j/#wne)
1832−<a class="tooltip" href='/docs/hoon/reference/stdlib/4j/#xne' title="Render hexadecimal digit as atom of ASCII byte value"><code>++x:ne</code></a>
1832+[`++x:ne`](/docs/hoon/reference/stdlib/4j/#xne)
1833
1833
1834### 4k: parsing (atom printing)
1834### 4k: parsing (atom printing)
1835
1835
1836−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#co' title="Literal rendering engine"><code>++co</code></a>
1836+[`++co`](/docs/hoon/reference/stdlib/4k/#co)
1837−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#rearco' title="Prepend and render atom as tape"><code>++rear:co</code></a>
1837+[`++rear:co`](/docs/hoon/reference/stdlib/4k/#rearco)
1838−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#rendco' title="Render coin lot as tape"><code>++rend:co</code></a>
1838+[`++rend:co`](/docs/hoon/reference/stdlib/4k/#rendco)
1839−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#rentco' title="Render coin as knot"><code>++rent:co</code></a>
1839+[`++rent:co`](/docs/hoon/reference/stdlib/4k/#rentco)
1840−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#a-coco' title="Render decimal"><code>++a-co:co</code></a>
1840+[`++a-co:co`](/docs/hoon/reference/stdlib/4k/#a-coco)
1841−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#c-coco' title="Render base58check"><code>++c-co:co</code></a>
1841+[`++c-co:co`](/docs/hoon/reference/stdlib/4k/#c-coco)
1842−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#d-coco' title="Render decimal with min length"><code>++d-co:co</code></a>
1842+[`++d-co:co`](/docs/hoon/reference/stdlib/4k/#d-coco)
1843−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#r-coco' title="Render floating point"><code>++r-co:co</code></a>
1843+[`++r-co:co`](/docs/hoon/reference/stdlib/4k/#r-coco)
1844−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#s-coco' title="Render hex list"><code>++s-co:co</code></a>
1844+[`++s-co:co`](/docs/hoon/reference/stdlib/4k/#s-coco)
1845−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#v-coco' title="Render base-32 with minimum length"><code>++v-co:co</code></a>
1845+[`++v-co:co`](/docs/hoon/reference/stdlib/4k/#v-coco)
1846−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#w-coco' title="Render base-64 with minimum length"><code>++w-co:co</code></a>
1846+[`++w-co:co`](/docs/hoon/reference/stdlib/4k/#w-coco)
1847−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#x-coco' title="Render hex with minimum length"><code>++x-co:co</code></a>
1847+[`++x-co:co`](/docs/hoon/reference/stdlib/4k/#x-coco)
1848−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#y-coco' title="Render decimal with at least two digits"><code>++y-co:co</code></a>
1848+[`++y-co:co`](/docs/hoon/reference/stdlib/4k/#y-coco)
1849−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#z-coco' title="Render '0x'-prefixed hex"><code>++z-co:co</code></a>
1849+[`++z-co:co`](/docs/hoon/reference/stdlib/4k/#z-coco)
1850−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#em-coco' title="Render in numeric base"><code>++em-co:co</code></a>
1850+[`++em-co:co`](/docs/hoon/reference/stdlib/4k/#em-coco)
1851−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#ed-coco' title="Format with decimal place"><code>++ed-co:co</code></a>
1851+[`++ed-co:co`](/docs/hoon/reference/stdlib/4k/#ed-coco)
1852−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#ox-coco' title="Format dot-separated digits in numeric base"><code>++ox-co:co</code></a>
1852+[`++ox-co:co`](/docs/hoon/reference/stdlib/4k/#ox-coco)
1853−<a class="tooltip" href='/docs/hoon/reference/stdlib/4k/#ro-coco' title="Format dot-prefixed bloqs in numeric base"><code>++ro-co:co</code></a>
1853+[`++ro-co:co`](/docs/hoon/reference/stdlib/4k/#ro-coco)
1854
1854
1855### 4l: parsing (atom parsing)
1855### 4l: parsing (atom parsing)
1856
1856
1857−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#so' title="Coin parser engine"><code>++so</code></a>
1857+[`++so`](/docs/hoon/reference/stdlib/4l/#so)
1858−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#biskso' title="Parse auraatom pair"><code>++bisk:so</code></a>
1858+[`++bisk:so`](/docs/hoon/reference/stdlib/4l/#biskso)
1859−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#crubso' title="Parse @da, @dr, @p, @t"><code>++crub:so</code></a>
1859+[`++crub:so`](/docs/hoon/reference/stdlib/4l/#crubso)
1860−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#nuckso' title="Toplevel coin parser"><code>++nuck:so</code></a>
1860+[`++nuck:so`](/docs/hoon/reference/stdlib/4l/#nuckso)
1861−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#nuskso' title="Parse coin literal with escapes"><code>++nusk:so</code></a>
1861+[`++nusk:so`](/docs/hoon/reference/stdlib/4l/#nuskso)
1862−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#perdso' title="Parsing coin literal without prefixes"><code>++perd:so</code></a>
1862+[`++perd:so`](/docs/hoon/reference/stdlib/4l/#perdso)
1863−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#roylso' title="Parse dime float"><code>++royl:so</code></a>
1863+[`++royl:so`](/docs/hoon/reference/stdlib/4l/#roylso)
1864−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-cellso' title="Convert rn to dn"><code>++royl-cell:so</code></a>
1864+[`++royl-cell:so`](/docs/hoon/reference/stdlib/4l/#royl-cellso)
1865−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rhso' title="Parse half-precision float"><code>++royl-rh:so</code></a>
1865+[`++royl-rh:so`](/docs/hoon/reference/stdlib/4l/#royl-rhso)
1866−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rqso' title="Parse quad-precision float"><code>++royl-rq:so</code></a>
1866+[`++royl-rq:so`](/docs/hoon/reference/stdlib/4l/#royl-rqso)
1867−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rdso' title="Parse double-precision float"><code>++royl-rd:so</code></a>
1867+[`++royl-rd:so`](/docs/hoon/reference/stdlib/4l/#royl-rdso)
1868−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rsso' title="Parse single-precision float"><code>++royl-rs:so</code></a>
1868+[`++royl-rs:so`](/docs/hoon/reference/stdlib/4l/#royl-rsso)
1869−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#royl-rnso' title="Parse real number"><code>++royl-rn:so</code></a>
1869+[`++royl-rn:so`](/docs/hoon/reference/stdlib/4l/#royl-rnso)
1870−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#tashso' title="Parse signed dime"><code>++tash:so</code></a>
1870+[`++tash:so`](/docs/hoon/reference/stdlib/4l/#tashso)
1871−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#twidso' title="Parse coins without ~ prefix"><code>++twid:so</code></a>
1871+[`++twid:so`](/docs/hoon/reference/stdlib/4l/#twidso)
1872−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#whenso' title="Parse date"><code>++when:so</code></a>
1872+[`++when:so`](/docs/hoon/reference/stdlib/4l/#whenso)
1873−<a class="tooltip" href='/docs/hoon/reference/stdlib/4l/#zustso' title="Parse dimes from @i, @f, @r or @q"><code>++zust:so</code></a>
1873+[`++zust:so`](/docs/hoon/reference/stdlib/4l/#zustso)
1874
1874
1875### 4m: parsing (formatting functions)
1875### 4m: parsing (formatting functions)
1876
1876
1877−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#scot' title="Render dime as cord"><code>++scot</code></a>
1877+[`++scot`](/docs/hoon/reference/stdlib/4m/#scot)
1878−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#scow' title="Render dime as tape"><code>++scow</code></a>
1878+[`++scow`](/docs/hoon/reference/stdlib/4m/#scow)
1879−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#slat' title="Curried slaw"><code>++slat</code></a>
1879+[`++slat`](/docs/hoon/reference/stdlib/4m/#slat)
1880−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#slav' title="Demand: parse cord with input aura"><code>++slav</code></a>
1880+[`++slav`](/docs/hoon/reference/stdlib/4m/#slav)
1881−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#slaw' title="Parse cord to input aura"><code>++slaw</code></a>
1881+[`++slaw`](/docs/hoon/reference/stdlib/4m/#slaw)
1882−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#slay' title="Parse cord to coin"><code>++slay</code></a>
1882+[`++slay`](/docs/hoon/reference/stdlib/4m/#slay)
1883−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#smyt' title="Render path as tank"><code>++smyt</code></a>
1883+[`++smyt`](/docs/hoon/reference/stdlib/4m/#smyt)
1884−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#spat' title="Render path as cord"><code>++spat</code></a>
1884+[`++spat`](/docs/hoon/reference/stdlib/4m/#spat)
1885−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#spud' title="Render path as tape"><code>++spud</code></a>
1885+[`++spud`](/docs/hoon/reference/stdlib/4m/#spud)
1886−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#stab' title="Parse cord to path"><code>++stab</code></a>
1886+[`++stab`](/docs/hoon/reference/stdlib/4m/#stab)
1887−<a class="tooltip" href='/docs/hoon/reference/stdlib/4m/#stap' title="Path parser"><code>++stap</code></a>
1887+[`++stap`](/docs/hoon/reference/stdlib/4m/#stap)
1888
1888
1889### 4n: parsing (virtualization)
1889### 4n: parsing (virtualization)
1890
1890
1891−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mack' title="Nock subject to unit"><code>++mack</code></a>
1891+[`++mack`](/docs/hoon/reference/stdlib/4n/#mack)
1892−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mink' title="Mock (virtual Nock) interpreter"><code>++mink</code></a>
1892+[`++mink`](/docs/hoon/reference/stdlib/4n/#mink)
1893−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mock' title="Compute formula on subject with hint"><code>++mock</code></a>
1893+[`++mock`](/docs/hoon/reference/stdlib/4n/#mock)
1894−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mook' title="Intelligently render crash annotation"><code>++mook</code></a>
1894+[`++mook`](/docs/hoon/reference/stdlib/4n/#mook)
1895−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mole' title="Typed unitary virtual"><code>++mole</code></a>
1895+[`++mole`](/docs/hoon/reference/stdlib/4n/#mole)
1896−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mong' title="Slam gate with sample"><code>++mong</code></a>
1896+[`++mong`](/docs/hoon/reference/stdlib/4n/#mong)
1897−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mule' title="Typed virtual"><code>++mule</code></a>
1897+[`++mule`](/docs/hoon/reference/stdlib/4n/#mule)
1898−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mure' title="Untyped unitary virtual"><code>++mure</code></a>
1898+[`++mure`](/docs/hoon/reference/stdlib/4n/#mure)
1899−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#mute' title="Untyped virtual"><code>++mute</code></a>
1899+[`++mute`](/docs/hoon/reference/stdlib/4n/#mute)
1900−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#slum' title="Slam a gate on a sample using raw nock, untyped"><code>++slum</code></a>
1900+[`++slum`](/docs/hoon/reference/stdlib/4n/#slum)
1901−<a class="tooltip" href='/docs/hoon/reference/stdlib/4n/#soft' title="Virtual clam"><code>++soft</code></a>
1901+[`++soft`](/docs/hoon/reference/stdlib/4n/#soft)
1902
1902
1903### 4o: parsing (molds)
1903### 4o: parsing (molds)
1904
1904
1905−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#abel' title="Original sin: type"><code>+$abel</code></a>
1905+[`+$abel`](/docs/hoon/reference/stdlib/4o/#abel)
1906−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#alas' title="Alias list"><code>+$alas</code></a>
1906+[`+$alas`](/docs/hoon/reference/stdlib/4o/#alas)
1907−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#atom' title="Just an atom"><code>+$atom</code></a>
1907+[`+$atom`](/docs/hoon/reference/stdlib/4o/#atom)
1908−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#aura' title="'Type' of atom"><code>+$aura</code></a>
1908+[`+$aura`](/docs/hoon/reference/stdlib/4o/#aura)
1909−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#base' title="Base type"><code>+$base</code></a>
1909+[`+$base`](/docs/hoon/reference/stdlib/4o/#base)
1910−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#woof' title="Simple embed"><code>+$woof</code></a>
1910+[`+$woof`](/docs/hoon/reference/stdlib/4o/#woof)
1911−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#chum' title="Jet hint information"><code>+$chum</code></a>
1911+[`+$chum`](/docs/hoon/reference/stdlib/4o/#chum)
1912−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#coil' title="Tuple of core information"><code>+$coil</code></a>
1912+[`+$coil`](/docs/hoon/reference/stdlib/4o/#coil)
1913−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#garb' title="Core metadata"><code>+$garb</code></a>
1913+[`+$garb`](/docs/hoon/reference/stdlib/4o/#garb)
1914−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#poly' title="Polarity"><code>+$poly</code></a>
1914+[`+$poly`](/docs/hoon/reference/stdlib/4o/#poly)
1915−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#foot' title="Cases of arms by variance model"><code>+$foot</code></a>
1915+[`+$foot`](/docs/hoon/reference/stdlib/4o/#foot)
1916−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#link' title="Lexical segment"><code>+$link</code></a>
1916+[`+$link`](/docs/hoon/reference/stdlib/4o/#link)
1917−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#crib' title="Summary and details"><code>+$crib</code></a>
1917+[`+$crib`](/docs/hoon/reference/stdlib/4o/#crib)
1918−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#help' title="Documentation"><code>+$help</code></a>
1918+[`+$help`](/docs/hoon/reference/stdlib/4o/#help)
1919−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#limb' title="Reference into subject by name/axis"><code>+$limb</code></a>
1919+[`+$limb`](/docs/hoon/reference/stdlib/4o/#limb)
1920−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#null' title="Null, nil, etc"><code>+$null</code></a>
1920+[`+$null`](/docs/hoon/reference/stdlib/4o/#null)
1921−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#onyx' title="Arm activation"><code>+$onyx</code></a>
1921+[`+$onyx`](/docs/hoon/reference/stdlib/4o/#onyx)
1922−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#opal' title="Wing match"><code>+$opal</code></a>
1922+[`+$opal`](/docs/hoon/reference/stdlib/4o/#opal)
1923−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#pica' title="Prose or code"><code>+$pica</code></a>
1923+[`+$pica`](/docs/hoon/reference/stdlib/4o/#pica)
1924−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#palo' title="Wing trace, match"><code>+$palo</code></a>
1924+[`+$palo`](/docs/hoon/reference/stdlib/4o/#palo)
1925−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#plat' title="%hoon, %type, %nock or %tank"><code>+$plat</code></a>
1925+[`+$plat`](/docs/hoon/reference/stdlib/4o/#plat)
1926−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#pock' title="Changes"><code>+$pock</code></a>
1926+[`+$pock`](/docs/hoon/reference/stdlib/4o/#pock)
1927−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#port' title="Successful wing match"><code>+$port</code></a>
1927+[`+$port`](/docs/hoon/reference/stdlib/4o/#port)
1928−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#spec' title="Structure definition AST"><code>+$spec</code></a>
1928+[`+$spec`](/docs/hoon/reference/stdlib/4o/#spec)
1929−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tent' title="Model builder"><code>+$tent</code></a>
1929+[`+$tent`](/docs/hoon/reference/stdlib/4o/#tent)
1930−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tiki' title="Test case"><code>+$tiki</code></a>
1930+[`+$tiki`](/docs/hoon/reference/stdlib/4o/#tiki)
1931−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#skin' title="Texture"><code>+$skin</code></a>
1931+[`+$skin`](/docs/hoon/reference/stdlib/4o/#skin)
1932−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tome' title="Core chapter"><code>+$tome</code></a>
1932+[`+$tome`](/docs/hoon/reference/stdlib/4o/#tome)
1933−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tope' title="Topographic type"><code>+$tope</code></a>
1933+[`+$tope`](/docs/hoon/reference/stdlib/4o/#tope)
1934−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#hoot' title="Hoon tools"><code>++hoot</code></a>
1934+[`++hoot`](/docs/hoon/reference/stdlib/4o/#hoot)
1935−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#beerhoot' title="Simple embed"><code>+$beer:hoot</code></a>
1935+[`+$beer:hoot`](/docs/hoon/reference/stdlib/4o/#beerhoot)
1936−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#manehoot' title="XML name+space"><code>+$mane:hoot</code></a>
1936+[`+$mane:hoot`](/docs/hoon/reference/stdlib/4o/#manehoot)
1937−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#manxhoot' title="Dynamic XML node"><code>+$manx:hoot</code></a>
1937+[`+$manx:hoot`](/docs/hoon/reference/stdlib/4o/#manxhoot)
1938−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#marlhoot' title="Dynamic XML nodes"><code>+$marl:hoot</code></a>
1938+[`+$marl:hoot`](/docs/hoon/reference/stdlib/4o/#marlhoot)
1939−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#marthoot' title="Dynamic XML attributes"><code>+$mart:hoot</code></a>
1939+[`+$mart:hoot`](/docs/hoon/reference/stdlib/4o/#marthoot)
1940−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#marxhoot' title="Dynamic XML tag"><code>+$marx:hoot</code></a>
1940+[`+$marx:hoot`](/docs/hoon/reference/stdlib/4o/#marxhoot)
1941−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#marehoot' title="Node or nodes"><code>+$mare:hoot</code></a>
1941+[`+$mare:hoot`](/docs/hoon/reference/stdlib/4o/#marehoot)
1942−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#maruhoot' title="Interpolation or nodes"><code>+$maru:hoot</code></a>
1942+[`+$maru:hoot`](/docs/hoon/reference/stdlib/4o/#maruhoot)
1943−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tunahoot' title="Maybe interpolation"><code>+$tuna:hoot</code></a>
1943+[`+$tuna:hoot`](/docs/hoon/reference/stdlib/4o/#tunahoot)
1944−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#hoon' title="Hoon AST"><code>+$hoon</code></a>
1944+[`+$hoon`](/docs/hoon/reference/stdlib/4o/#hoon)
1945−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tyre' title="List, term hoon"><code>+$tyre</code></a>
1945+[`+$tyre`](/docs/hoon/reference/stdlib/4o/#tyre)
1946−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tyke' title="List of 'maybe' hoons"><code>+$tyke</code></a>
1946+[`+$tyke`](/docs/hoon/reference/stdlib/4o/#tyke)
1947−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#nock' title="Virtual nock"><code>+$nock</code></a>
1947+[`+$nock`](/docs/hoon/reference/stdlib/4o/#nock)
1948−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#note' title="Type annotation"><code>+$note</code></a>
1948+[`+$note`](/docs/hoon/reference/stdlib/4o/#note)
1949−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#type' title="Hoon type type"><code>+$type</code></a>
1949+[`+$type`](/docs/hoon/reference/stdlib/4o/#type)
1950−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tony' title="$tone done right"><code>+$tony</code></a>
1950+[`+$tony`](/docs/hoon/reference/stdlib/4o/#tony)
1951−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tine' title="Partial noun"><code>+$tine</code></a>
1951+[`+$tine`](/docs/hoon/reference/stdlib/4o/#tine)
1952−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tool' title="Type decoration"><code>+$tool</code></a>
1952+[`+$tool`](/docs/hoon/reference/stdlib/4o/#tool)
1953−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#tune' title="Complex"><code>+$tune</code></a>
1953+[`+$tune`](/docs/hoon/reference/stdlib/4o/#tune)
1954−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#typo' title="Old type"><code>+$typo</code></a>
1954+[`+$typo`](/docs/hoon/reference/stdlib/4o/#typo)
1955−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vase' title="Type-value pair"><code>+$vase</code></a>
1955+[`+$vase`](/docs/hoon/reference/stdlib/4o/#vase)
1956−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vise' title="Old vase"><code>+$vise</code></a>
1956+[`+$vise`](/docs/hoon/reference/stdlib/4o/#vise)
1957−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vial' title="co/contra/in/bi"><code>+$vial</code></a>
1957+[`+$vial`](/docs/hoon/reference/stdlib/4o/#vial)
1958−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vair' title="Core variance"><code>+$vair</code></a>
1958+[`+$vair`](/docs/hoon/reference/stdlib/4o/#vair)
1959−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#vein' title="Search trace"><code>+$vein</code></a>
1959+[`+$vein`](/docs/hoon/reference/stdlib/4o/#vein)
1960−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#sect' title="Paragraph"><code>+$sect</code></a>
1960+[`+$sect`](/docs/hoon/reference/stdlib/4o/#sect)
1961−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#whit' title="Documentation"><code>+$whit</code></a>
1961+[`+$whit`](/docs/hoon/reference/stdlib/4o/#whit)
1962−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#what' title="Help slogan/section"><code>+$what</code></a>
1962+[`+$what`](/docs/hoon/reference/stdlib/4o/#what)
1963−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#wing' title="Search path"><code>+$wing</code></a>
1963+[`+$wing`](/docs/hoon/reference/stdlib/4o/#wing)
1964−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#block' title="Abstract identity of resource awaited"><code>+$block</code></a>
1964+[`+$block`](/docs/hoon/reference/stdlib/4o/#block)
1965−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#result' title="Internal interpreter result"><code>+$result</code></a>
1965+[`+$result`](/docs/hoon/reference/stdlib/4o/#result)
1966−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#thunk' title="Fragment constructor"><code>+$thunk</code></a>
1966+[`+$thunk`](/docs/hoon/reference/stdlib/4o/#thunk)
1967−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#doss' title="Profiling"><code>+$doss</code></a>
1967+[`+$doss`](/docs/hoon/reference/stdlib/4o/#doss)
1968−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#moan' title="Profiling: sample metric"><code>+$moan</code></a>
1968+[`+$moan`](/docs/hoon/reference/stdlib/4o/#moan)
1969−<a class="tooltip" href='/docs/hoon/reference/stdlib/4o/#hump' title="Profiling"><code>+$hump</code></a>
1969+[`+$hump`](/docs/hoon/reference/stdlib/4o/#hump)
1970
1970
1971### 5a: compiler utilities
1971### 5a: compiler utilities
1972
1972
1973−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#musk' title="Nock with block set (compiler utility)"><code>++musk</code></a>
1973+[`++musk`](/docs/hoon/reference/stdlib/5a/#musk)
1974−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#bool' title="Make loobean (compiler utility)"><code>++bool</code></a>
1974+[`++bool`](/docs/hoon/reference/stdlib/5a/#bool)
1975−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#cell' title="Make %cell type (compiler utility)"><code>++cell</code></a>
1975+[`++cell`](/docs/hoon/reference/stdlib/5a/#cell)
1976−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#core' title="Make %core type (compiler utility)"><code>++core</code></a>
1976+[`++core`](/docs/hoon/reference/stdlib/5a/#core)
1977−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#hint' title="Make %hint type (compiler utility)"><code>++hint</code></a>
1977+[`++hint`](/docs/hoon/reference/stdlib/5a/#hint)
1978−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#face' title="Make %face type (compiler utility)"><code>++face</code></a>
1978+[`++face`](/docs/hoon/reference/stdlib/5a/#face)
1979−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#fork' title="Make %fork type (compiler utility)"><code>++fork</code></a>
1979+[`++fork`](/docs/hoon/reference/stdlib/5a/#fork)
1980−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#cove' title="Extract [0 *] axis (compiler utility)"><code>++cove</code></a>
1980+[`++cove`](/docs/hoon/reference/stdlib/5a/#cove)
1981−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#comb' title="Combine two formulas (compiler utility)"><code>++comb</code></a>
1981+[`++comb`](/docs/hoon/reference/stdlib/5a/#comb)
1982−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#cond' title="?: compile (compiler utility)"><code>++cond</code></a>
1982+[`++cond`](/docs/hoon/reference/stdlib/5a/#cond)
1983−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#cons' title="Make formula cell (compiler utility)"><code>++cons</code></a>
1983+[`++cons`](/docs/hoon/reference/stdlib/5a/#cons)
1984−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#fitz' title="Odor compatibility (compiler utility)"><code>++fitz</code></a>
1984+[`++fitz`](/docs/hoon/reference/stdlib/5a/#fitz)
1985−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#flan' title="Loobean & (compiler utility)"><code>++flan</code></a>
1985+[`++flan`](/docs/hoon/reference/stdlib/5a/#flan)
1986−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#flip' title="Loobean negation (compiler utility)"><code>++flip</code></a>
1986+[`++flip`](/docs/hoon/reference/stdlib/5a/#flip)
1987−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#flor' title="Loobean | (compiler utility)"><code>++flor</code></a>
1987+[`++flor`](/docs/hoon/reference/stdlib/5a/#flor)
1988−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#hike' title="Compiler utility"><code>++hike</code></a>
1988+[`++hike`](/docs/hoon/reference/stdlib/5a/#hike)
1989−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#jock' title="Compiler utility"><code>++jock</code></a>
1989+[`++jock`](/docs/hoon/reference/stdlib/5a/#jock)
1990−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#look' title="Compiler utility"><code>++look</code></a>
1990+[`++look`](/docs/hoon/reference/stdlib/5a/#look)
1991−<a class="tooltip" href='/docs/hoon/reference/stdlib/5a/#loot' title="Compiler utility"><code>++loot</code></a>
1991+[`++loot`](/docs/hoon/reference/stdlib/5a/#loot)
1992
1992
1993### 5b: macro expansion
1993### 5b: macro expansion
1994
1994
1995−<a class="tooltip" href='/docs/hoon/reference/stdlib/5b/#ah' title="Tiki engine"><code>++ah</code></a>
1995+[`++ah`](/docs/hoon/reference/stdlib/5b/#ah)
1996−<a class="tooltip" href='/docs/hoon/reference/stdlib/5b/#ax' title="Spec engine"><code>++ax</code></a>
1996+[`++ax`](/docs/hoon/reference/stdlib/5b/#ax)
1997−<a class="tooltip" href='/docs/hoon/reference/stdlib/5b/#ap' title="Hoon engine"><code>++ap</code></a>
1997+[`++ap`](/docs/hoon/reference/stdlib/5b/#ap)
1998
1998
1999### 5c: compiler backend and prettyprinter
1999### 5c: compiler backend and prettyprinter
2000
2000
2001−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#ut' title="Hoon compiler backend"><code>++ut</code></a>
2001+[`++ut`](/docs/hoon/reference/stdlib/5c/#ut)
2002−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#us' title="Pretty-printer backend"><code>++us</code></a>
2002+[`++us`](/docs/hoon/reference/stdlib/5c/#us)
2003−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#cain' title="Tank pretty-print"><code>++cain</code></a>
2003+[`++cain`](/docs/hoon/reference/stdlib/5c/#cain)
2004−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#noah' title="Tape pretty-print"><code>++noah</code></a>
2004+[`++noah`](/docs/hoon/reference/stdlib/5c/#noah)
2005−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#onan' title="Vise to vase"><code>++onan</code></a>
2005+[`++onan`](/docs/hoon/reference/stdlib/5c/#onan)
2006−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#levi' title="Type nests or crash"><code>++levi</code></a>
2006+[`++levi`](/docs/hoon/reference/stdlib/5c/#levi)
2007−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#text' title="Tape pretty-print"><code>++text</code></a>
2007+[`++text`](/docs/hoon/reference/stdlib/5c/#text)
2008−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#seem' title="Promote typo"><code>++seem</code></a>
2008+[`++seem`](/docs/hoon/reference/stdlib/5c/#seem)
2009−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#seer' title="Promote vise"><code>++seer</code></a>
2009+[`++seer`](/docs/hoon/reference/stdlib/5c/#seer)
2010−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#sell' title="Pretty-print vase to a tank"><code>++sell</code></a>
2010+[`++sell`](/docs/hoon/reference/stdlib/5c/#sell)
2011−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#skol' title="Pretty-print type to tank"><code>++skol</code></a>
2011+[`++skol`](/docs/hoon/reference/stdlib/5c/#skol)
2012−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slam' title="Slam a gate"><code>++slam</code></a>
2012+[`++slam`](/docs/hoon/reference/stdlib/5c/#slam)
2013−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slab' title="Test if contains"><code>++slab</code></a>
2013+[`++slab`](/docs/hoon/reference/stdlib/5c/#slab)
2014−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slap' title="Untyped vase .*"><code>++slap</code></a>
2014+[`++slap`](/docs/hoon/reference/stdlib/5c/#slap)
2015−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slog' title="Deify printf"><code>++slog</code></a>
2015+[`++slog`](/docs/hoon/reference/stdlib/5c/#slog)
2016−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#mean' title="Crash and printf"><code>++mean</code></a>
2016+[`++mean`](/docs/hoon/reference/stdlib/5c/#mean)
2017−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#road' title="Evaluate trap"><code>++road</code></a>
2017+[`++road`](/docs/hoon/reference/stdlib/5c/#road)
2018−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slew' title="Get axis in vase"><code>++slew</code></a>
2018+[`++slew`](/docs/hoon/reference/stdlib/5c/#slew)
2019−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slim' title="Identical to ++seer"><code>++slim</code></a>
2019+[`++slim`](/docs/hoon/reference/stdlib/5c/#slim)
2020−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slit' title="Type of slam"><code>++slit</code></a>
2020+[`++slit`](/docs/hoon/reference/stdlib/5c/#slit)
2021−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slob' title="Superficial arm"><code>++slob</code></a>
2021+[`++slob`](/docs/hoon/reference/stdlib/5c/#slob)
2022−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#sloe' title="Get arms in core"><code>++sloe</code></a>
2022+[`++sloe`](/docs/hoon/reference/stdlib/5c/#sloe)
2023−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slop' title="Cons two vases"><code>++slop</code></a>
2023+[`++slop`](/docs/hoon/reference/stdlib/5c/#slop)
2024−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slot' title="Got axis in vase"><code>++slot</code></a>
2024+[`++slot`](/docs/hoon/reference/stdlib/5c/#slot)
2025−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#slym' title="Slam without sample-type"><code>++slym</code></a>
2025+[`++slym`](/docs/hoon/reference/stdlib/5c/#slym)
2026−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#sped' title="Reconstruct type"><code>++sped</code></a>
2026+[`++sped`](/docs/hoon/reference/stdlib/5c/#sped)
2027−<a class="tooltip" href='/docs/hoon/reference/stdlib/5c/#swat' title="Deferred ++slap"><code>++swat</code></a>
2027+[`++swat`](/docs/hoon/reference/stdlib/5c/#swat)
2028
2028
2029### 5d: parser
2029### 5d: parser
2030
2030
2031−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#vang' title="Set ++vast parameters"><code>++vang</code></a>
2031+[`++vang`](/docs/hoon/reference/stdlib/5d/#vang)
2032−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#vast' title="Main parsing core"><code>++vast</code></a>
2032+[`++vast`](/docs/hoon/reference/stdlib/5d/#vast)
2033−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#vest' title="Parse hoon"><code>++vest</code></a>
2033+[`++vest`](/docs/hoon/reference/stdlib/5d/#vest)
2034−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#vice' title="Parse wide-form hoon"><code>++vice</code></a>
2034+[`++vice`](/docs/hoon/reference/stdlib/5d/#vice)
2035−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#make' title="Compile cord to nock"><code>++make</code></a>
2035+[`++make`](/docs/hoon/reference/stdlib/5d/#make)
2036−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#rain' title="Parse with % path"><code>++rain</code></a>
2036+[`++rain`](/docs/hoon/reference/stdlib/5d/#rain)
2037−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#ream' title="Parse cord to hoon"><code>++ream</code></a>
2037+[`++ream`](/docs/hoon/reference/stdlib/5d/#ream)
2038−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#reck' title="Parse hoon file"><code>++reck</code></a>
2038+[`++reck`](/docs/hoon/reference/stdlib/5d/#reck)
2039−<a class="tooltip" href='/docs/hoon/reference/stdlib/5d/#ride' title="End-to-end compiler"><code>++ride</code></a>
2039+[`++ride`](/docs/hoon/reference/stdlib/5d/#ride)
2040
2040
2041### 5e: Molds and mold builders
2041### 5e: Molds and mold builders
2042
2042
2043−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#mane' title="XML name+space"><code>++mane</code></a>
2043+[`++mane`](/docs/hoon/reference/stdlib/5e/#mane)
2044−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#manx' title="Dynamic XML node"><code>++manx</code></a>
2044+[`++manx`](/docs/hoon/reference/stdlib/5e/#manx)
2045−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#marl' title="XML node list"><code>++marl</code></a>
2045+[`++marl`](/docs/hoon/reference/stdlib/5e/#marl)
2046−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#mars' title="XML cdata"><code>++mars</code></a>
2046+[`++mars`](/docs/hoon/reference/stdlib/5e/#mars)
2047−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#mart' title="XML attributes"><code>++mart</code></a>
2047+[`++mart`](/docs/hoon/reference/stdlib/5e/#mart)
2048−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#marx' title="Dynamic XML tag"><code>++marx</code></a>
2048+[`++marx`](/docs/hoon/reference/stdlib/5e/#marx)
2049−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#mite' title="MIME type"><code>++mite</code></a>
2049+[`++mite`](/docs/hoon/reference/stdlib/5e/#mite)
2050−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#pass' title="Public key"><code>++pass</code></a>
2050+[`++pass`](/docs/hoon/reference/stdlib/5e/#pass)
2051−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#ring' title="Private key"><code>++ring</code></a>
2051+[`++ring`](/docs/hoon/reference/stdlib/5e/#ring)
2052−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#ship' title="Network identity"><code>++ship</code></a>
2052+[`++ship`](/docs/hoon/reference/stdlib/5e/#ship)
2053−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#shop' title="Urbit/DNS identity"><code>++shop</code></a>
2053+[`++shop`](/docs/hoon/reference/stdlib/5e/#shop)
2054−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#spur' title="ship desk case spur"><code>++spur</code></a>
2054+[`++spur`](/docs/hoon/reference/stdlib/5e/#spur)
2055−<a class="tooltip" href='/docs/hoon/reference/stdlib/5e/#time' title="Galactic time"><code>++time</code></a>
2055+[`++time`](/docs/hoon/reference/stdlib/5e/#time)
2056
2056
2057### 5f: Profiling support
2057### 5f: Profiling support
2058
2058
2059−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-heck' title="Profiling utility"><code>++pi-heck</code></a>
2059+[`++pi-heck`](/docs/hoon/reference/stdlib/5f/#pi-heck)
2060−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-noon' title="Sample trace"><code>++pi-noon</code></a>
2060+[`++pi-noon`](/docs/hoon/reference/stdlib/5f/#pi-noon)
2061−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-mope' title="Add sample"><code>++pi-mope</code></a>
2061+[`++pi-mope`](/docs/hoon/reference/stdlib/5f/#pi-mope)
2062−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-moth' title="Count sample"><code>++pi-moth</code></a>
2062+[`++pi-moth`](/docs/hoon/reference/stdlib/5f/#pi-moth)
2063−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-mumm' title="Print sample"><code>++pi-mumm</code></a>
2063+[`++pi-mumm`](/docs/hoon/reference/stdlib/5f/#pi-mumm)
2064−<a class="tooltip" href='/docs/hoon/reference/stdlib/5f/#pi-tell' title="Produce dump"><code>++pi-tell</code></a>
2064+[`++pi-tell`](/docs/hoon/reference/stdlib/5f/#pi-tell)
content/docs/hoon/reference/zuse/table-of-contents.md+170−170
@@ -13,235 +13,235 @@ Can be navigated [alphabetically](#alphabetical) or [by section](#by-section).
13
13
14### a
14### a
15
15
16−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#ardejs-softformat' title="Decode json (unit): Array as list"><code>++ar:dejs-soft:format</code></a>
16+[`++ar:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#ardejs-softformat)
17−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ardejsformat' title="Decode json: Array as list"><code>++ar:dejs:format</code></a>
17+[`++ar:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ardejsformat)
18−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#asdejsformat' title="Decode json: Array as set"><code>++as:dejs:format</code></a>
18+[`++as:dejs:format`](/docs/hoon/reference/zuse/2d_6/#asdejsformat)
19−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#at-rawdejs-softformat' title="Decode json (unit): Array as tuple, raw"><code>++at-raw:dejs-soft:format</code></a>
19+[`++at-raw:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#at-rawdejs-softformat)
20−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#at-rawdejsformat' title="Decode json: Array as tuple, raw"><code>++at-raw:dejs:format</code></a>
20+[`++at-raw:dejs:format`](/docs/hoon/reference/zuse/2d_6/#at-rawdejsformat)
21−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#atdejs-softformat' title="Decode json (unit): Array as tuple"><code>++at:dejs-soft:format</code></a>
21+[`++at:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#atdejs-softformat)
22−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#atdejsformat' title="Decode json: Array as tuple"><code>++at:dejs:format</code></a>
22+[`++at:dejs:format`](/docs/hoon/reference/zuse/2d_6/#atdejsformat)
23
23
24### b
24### b
25
25
26−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#bodejs-softformat' title="Decode json (unit): Boolean"><code>++bo:dejs-soft:format</code></a>
26+[`++bo:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#bodejs-softformat)
27−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#bodejsformat' title="Decode json: Boolean"><code>++bo:dejs:format</code></a>
27+[`++bo:dejs:format`](/docs/hoon/reference/zuse/2d_6/#bodejsformat)
28−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#budejs-softformat' title="Decode json (unit): Boolean NOT"><code>++bu:dejs-soft:format</code></a>
28+[`++bu:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#budejs-softformat)
29−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#budejsformat' title="Decode json: Boolean NOT"><code>++bu:dejs:format</code></a>
29+[`++bu:dejs:format`](/docs/hoon/reference/zuse/2d_6/#budejsformat)
30
30
31### c
31### c
32
32
33−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#cidejs-softformat' title="Decode json (unit): Maybe transform"><code>++ci:dejs-soft:format</code></a>
33+[`++ci:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#cidejs-softformat)
34−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#cidejsformat' title="Decode json: Maybe transform"><code>++ci:dejs:format</code></a>
34+[`++ci:dejs:format`](/docs/hoon/reference/zuse/2d_6/#cidejsformat)
35−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#cudejs-softformat' title="Decode json (unit): Transform"><code>++cu:dejs-soft:format</code></a>
35+[`++cu:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#cudejs-softformat)
36−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#cudejsformat' title="Decode json: Transform"><code>++cu:dejs:format</code></a>
36+[`++cu:dejs:format`](/docs/hoon/reference/zuse/2d_6/#cudejsformat)
37
37
38### d
38### d
39
39
40−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#dadejs-softformat' title="Decode json (unit): UTC date"><code>++da:dejs-soft:format</code></a>
40+[`++da:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#dadejs-softformat)
41−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#dankdejs-softformat' title="Decode json (unit): Tank"><code>++dank:dejs-soft:format</code></a>
41+[`++dank:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#dankdejs-softformat)
42−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#dejs-softformat' title="Container arm for unitized JSON decoding reparsers"><code>++dejs-soft:format</code></a>
42+[`++dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#dejs-softformat)
43−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#dejsformat' title="Container arm for JSON decoding reparsers"><code>++dejs:format</code></a>
43+[`++dejs:format`](/docs/hoon/reference/zuse/2d_6/#dejsformat)
44−<a class="tooltip" href='/docs/hoon/reference/zuse/2e_2-3/#de-jsonhtml' title="Parse JSON"><code>++de-json:html</code></a>
44+[`++de-json:html`](/docs/hoon/reference/zuse/2e_2-3/#de-jsonhtml)
45−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#didejs-softformat' title="Decode json (unit): Millisecond date"><code>++di:dejs-soft:format</code></a>
45+[`++di:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#didejs-softformat)
46−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#didejsformat' title="Decode json: Millisecond date"><code>++di:dejs:format</code></a>
46+[`++di:dejs:format`](/docs/hoon/reference/zuse/2d_6/#didejsformat)
47−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#dudejsformat' title="Decode json: Second date"><code>++du:dejs:format</code></a>
47+[`++du:dejs:format`](/docs/hoon/reference/zuse/2d_6/#dudejsformat)
48
48
49### e
49### e
50
50
51−<a class="tooltip" href='/docs/hoon/reference/zuse/2e_2-3/#en-jsonhtml' title="Parse JSON"><code>++en-json:html</code></a>
51+[`++en-json:html`](/docs/hoon/reference/zuse/2e_2-3/#en-jsonhtml)
52−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#enjsformat' title="Container arm for JSON encoders"><code>++enjs:format</code></a>
52+[`++enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#enjsformat)
53
53
54### f
54### f
55
55
56−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#frondenjsformat' title="Encode json: Object from key-value pair"><code>++frond:enjs:format</code></a>
56+[`++frond:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#frondenjsformat)
57
57
58### j
58### j
59
59
60−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#json-rnformat' title="Json to rn parser"><code>++json-rn:format</code></a>
60+[`++json-rn:format`](/docs/hoon/reference/zuse/2d_1-5/#json-rnformat)
61
61
62### m
62### m
63
63
64−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#mudejs-softformat' title="Decode json (unit): True unit"><code>++mu:dejs-soft:format</code></a>
64+[`++mu:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#mudejs-softformat)
65−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#mudejsformat' title="Decode json: True unit"><code>++mu:dejs:format</code></a>
65+[`++mu:dejs:format`](/docs/hoon/reference/zuse/2d_6/#mudejsformat)
66
66
67### n
67### n
68
68
69−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#nedejs-softformat' title="Decode json (unit): Number as real"><code>++ne:dejs-soft:format</code></a>
69+[`++ne:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#nedejs-softformat)
70−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#nedejsformat' title="Decode json: Number as real"><code>++ne:dejs:format</code></a>
70+[`++ne:dejs:format`](/docs/hoon/reference/zuse/2d_6/#nedejsformat)
71−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#nidejs-softformat' title="Decode json (unit): Number as integer"><code>++ni:dejs-soft:format</code></a>
71+[`++ni:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#nidejs-softformat)
72−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#nidejsformat' title="Decode json: Number as integer"><code>++ni:dejs:format</code></a>
72+[`++ni:dejs:format`](/docs/hoon/reference/zuse/2d_6/#nidejsformat)
73−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#nodejs-softformat' title="Decode json (unit): Number as knot"><code>++no:dejs-soft:format</code></a>
73+[`++no:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#nodejs-softformat)
74−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#nodejsformat' title="Decode json: Number as knot"><code>++no:dejs:format</code></a>
74+[`++no:dejs:format`](/docs/hoon/reference/zuse/2d_6/#nodejsformat)
75−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#nudejsformat' title="Decode json: Parse string as hex"><code>++nu:dejs:format</code></a>
75+[`++nu:dejs:format`](/docs/hoon/reference/zuse/2d_6/#nudejsformat)
76−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#numbenjsformat' title="Encode json: Number from unsigned"><code>++numb:enjs:format</code></a>
76+[`++numb:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#numbenjsformat)
77
77
78### o
78### o
79
79
80−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#of-wainformat' title="Line list to cord"><code>++of-wain:format</code></a>
80+[`++of-wain:format`](/docs/hoon/reference/zuse/2d_1-5/#of-wainformat)
81−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#of-wallformat' title="Line list to tape"><code>++of-wall:format</code></a>
81+[`++of-wall:format`](/docs/hoon/reference/zuse/2d_1-5/#of-wallformat)
82−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#ofdejs-softformat' title="Decode json (unit): Object as frond"><code>++of:dejs-soft:format</code></a>
82+[`++of:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#ofdejs-softformat)
83−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ofdejsformat' title="Decode json: Object as frond"><code>++of:dejs:format</code></a>
83+[`++of:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ofdejsformat)
84−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ojdejsformat' title="Decode json: Object as jug"><code>++oj:dejs:format</code></a>
84+[`++oj:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ojdejsformat)
85−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#omdejs-softformat' title="Decode json (unit): Object as map"><code>++om:dejs-soft:format</code></a>
85+[`++om:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#omdejs-softformat)
86−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#omdejsformat' title="Decode json: Object as map"><code>++om:dejs:format</code></a>
86+[`++om:dejs:format`](/docs/hoon/reference/zuse/2d_6/#omdejsformat)
87−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#opdejs-softformat' title="Decode json (unit): Parse keys of map"><code>++op:dejs-soft:format</code></a>
87+[`++op:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#opdejs-softformat)
88−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#opdejsformat' title="Decode json: Parse keys of map"><code>++op:dejs:format</code></a>
88+[`++op:dejs:format`](/docs/hoon/reference/zuse/2d_6/#opdejsformat)
89−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#ot-rawdejs-softformat' title="Decode json (unit): Object as list of units, raw"><code>++ot-raw:dejs-soft:format</code></a>
89+[`++ot-raw:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#ot-rawdejs-softformat)
90−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ot-rawdejsformat' title="Decode json: Object as tuple, raw"><code>++ot-raw:dejs:format</code></a>
90+[`++ot-raw:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ot-rawdejsformat)
91−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#otdejs-softformat' title="Decode json (unit): Object as tuple"><code>++ot:dejs-soft:format</code></a>
91+[`++ot:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#otdejs-softformat)
92−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#otdejsformat' title="Decode json: Object as tuple"><code>++ot:dejs:format</code></a>
92+[`++ot:dejs:format`](/docs/hoon/reference/zuse/2d_6/#otdejsformat)
93−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ou-rawdejsformat' title="Decode json: Object of units, raw"><code>++ou-raw:dejs:format</code></a>
93+[`++ou-raw:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ou-rawdejsformat)
94−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#oudejsformat' title="Decode json: Object of units"><code>++ou:dejs:format</code></a>
94+[`++ou:dejs:format`](/docs/hoon/reference/zuse/2d_6/#oudejsformat)
95
95
96### p
96### p
97
97
98−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#padejsformat' title="Decode json: String as path"><code>++pa:dejs:format</code></a>
98+[`++pa:dejs:format`](/docs/hoon/reference/zuse/2d_6/#padejsformat)
99−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#pairsenjsformat' title="Encode json: Object from key-value pair list"><code>++pairs:enjs:format</code></a>
99+[`++pairs:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#pairsenjsformat)
100−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#pathenjsformat' title="Encode json: String from path"><code>++path:enjs:format</code></a>
100+[`++path:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#pathenjsformat)
101−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#pedejs-softformat' title="Decode json (unit): Prefix"><code>++pe:dejs-soft:format</code></a>
101+[`++pe:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#pedejs-softformat)
102−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#pedejsformat' title="Decode json: Prefix"><code>++pe:dejs:format</code></a>
102+[`++pe:dejs:format`](/docs/hoon/reference/zuse/2d_6/#pedejsformat)
103
103
104### r
104### r
105
105
106−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#redejs-softformat' title="Decode json (unit): Recursive reparser"><code>++re:dejs-soft:format</code></a>
106+[`++re:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#redejs-softformat)
107
107
108### s
108### s
109
109
110−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#sadejs-softformat' title="Decode json (unit): String as tape"><code>++sa:dejs-soft:format</code></a>
110+[`++sa:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#sadejs-softformat)
111−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sedejsformat' title="Decode json: String as tape"><code>++sa:dejs:format</code></a>
111+[`++sa:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sedejsformat)
112−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sddejsformat' title="Decode json: String @ud as date"><code>++sd:dejs:format</code></a>
112+[`++sd:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sddejsformat)
113−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sedejsformat' title="Decode json: String as aura"><code>++se:dejs:format</code></a>
113+[`++se:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sedejsformat)
114−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#sectenjsformat' title="Encode json: Seconds timestamp"><code>++sect:enjs:format</code></a>
114+[`++sect:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#sectenjsformat)
115−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#shipenjsformat' title="Encode json: String from ship"><code>++ship:enjs:format</code></a>
115+[`++ship:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#shipenjsformat)
116−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#sodejs-softformat' title="Decode json (unit): String as cord"><code>++so:dejs-soft:format</code></a>
116+[`++so:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#sodejs-softformat)
117−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sodejsformat' title="Decode json: String as cord"><code>++so:dejs:format</code></a>
117+[`++so:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sodejsformat)
118−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#sudejs-softformat' title="Decode json (unit): Parse string"><code>++su:dejs-soft:format</code></a>
118+[`++su:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#sudejs-softformat)
119−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sudejsformat' title="Decode json: Parse string"><code>++su:dejs:format</code></a>
119+[`++su:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sudejsformat)
120
120
121### t
121### t
122
122
123−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#tankenjsformat' title="Encode json: Tank as string array"><code>++tank:enjs:format</code></a>
123+[`++tank:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#tankenjsformat)
124−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#tapeenjsformat' title="Encode json: String from tape"><code>++tape:enjs:format</code></a>
124+[`++tape:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#tapeenjsformat)
125−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#timeenjsformat' title="Encode json: Millisecond timestamp"><code>++time:enjs:format</code></a>
125+[`++time:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#timeenjsformat)
126−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#to-wainformat' title="Cord to line list"><code>++to-wain:format</code></a>
126+[`++to-wain:format`](/docs/hoon/reference/zuse/2d_1-5/#to-wainformat)
127
127
128### u
128### u
129
129
130−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ufdejsformat' title="Decode json: Unit fall"><code>++uf:dejs:format</code></a>
130+[`++uf:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ufdejsformat)
131−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#uldejs-softformat' title="Decode json (unit): Null"><code>++ul:dejs-soft:format</code></a>
131+[`++ul:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#uldejs-softformat)
132−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#uldejsformat' title="Decode json: Null"><code>++ul:dejs:format</code></a>
132+[`++ul:dejs:format`](/docs/hoon/reference/zuse/2d_6/#uldejsformat)
133−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#undejsformat' title="Decode json: Unit need"><code>++un:dejs:format</code></a>
133+[`++un:dejs:format`](/docs/hoon/reference/zuse/2d_6/#undejsformat)
134
134
135### w
135### w
136
136
137−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#wallenjsformat' title="Encode json: String from wall"><code>++wall:enjs:format</code></a>
137+[`++wall:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#wallenjsformat)
138
138
139### z
139### z
140
140
141−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#zadejs-softformat' title="Decode json (unit): Full unit pole"><code>++za:dejs-soft:format</code></a>
141+[`++za:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#zadejs-softformat)
142−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#zadejsformat' title="Decode json: Full unit pole"><code>++za:dejs:format</code></a>
142+[`++za:dejs:format`](/docs/hoon/reference/zuse/2d_6/#zadejsformat)
143−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#zldejs-softformat' title="Decode json (unit): Collapse unit list"><code>++zl:dejs-soft:format</code></a>
143+[`++zl:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#zldejs-softformat)
144−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#zldejsformat' title="Decode json: Collapse unit list"><code>++zl:dejs:format</code></a>
144+[`++zl:dejs:format`](/docs/hoon/reference/zuse/2d_6/#zldejsformat)
145−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#zmdejs-softformat' title="Decode json (unit): Collapse unit map"><code>++zm:dejs-soft:format</code></a>
145+[`++zm:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#zmdejs-softformat)
146−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#zmdejsformat' title="Decode json: Collapse unit map"><code>++zm:dejs:format</code></a>
146+[`++zm:dejs:format`](/docs/hoon/reference/zuse/2d_6/#zmdejsformat)
147−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#zpdejs-softformat' title="Decode json (unit): Unit tuple"><code>++zp:dejs-soft:format</code></a>
147+[`++zp:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#zpdejs-softformat)
148−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#zpdejsformat' title="Decode json: Unit tuple"><code>++zp:dejs:format</code></a>
148+[`++zp:dejs:format`](/docs/hoon/reference/zuse/2d_6/#zpdejsformat)
149
149
150## By Section
150## By Section
151
151
152### 2d (1-5): Formatting functions: Line lists and JSON encoding
152### 2d (1-5): Formatting functions: Line lists and JSON encoding
153
153
154−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#to-wainformat' title="Cord to line list"><code>++to-wain:format</code></a>
154+[`++to-wain:format`](/docs/hoon/reference/zuse/2d_1-5/#to-wainformat)
155−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#of-wainformat' title="Line list to cord"><code>++of-wain:format</code></a>
155+[`++of-wain:format`](/docs/hoon/reference/zuse/2d_1-5/#of-wainformat)
156−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#of-wallformat' title="Line list to tape"><code>++of-wall:format</code></a>
156+[`++of-wall:format`](/docs/hoon/reference/zuse/2d_1-5/#of-wallformat)
157−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#json-rnformat' title="Json to rn parser"><code>++json-rn:format</code></a>
157+[`++json-rn:format`](/docs/hoon/reference/zuse/2d_1-5/#json-rnformat)
158−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#enjsformat' title="Container arm for JSON encoders"><code>++enjs:format</code></a>
158+[`++enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#enjsformat)
159−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#frondenjsformat' title="Encode json: Object from key-value pair"><code>++frond:enjs:format</code></a>
159+[`++frond:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#frondenjsformat)
160−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#pairsenjsformat' title="Encode json: Object from key-value pair list"><code>++pairs:enjs:format</code></a>
160+[`++pairs:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#pairsenjsformat)
161−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#tapeenjsformat' title="Encode json: String from tape"><code>++tape:enjs:format</code></a>
161+[`++tape:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#tapeenjsformat)
162−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#wallenjsformat' title="Encode json: String from wall"><code>++wall:enjs:format</code></a>
162+[`++wall:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#wallenjsformat)
163−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#shipenjsformat' title="Encode json: String from ship"><code>++ship:enjs:format</code></a>
163+[`++ship:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#shipenjsformat)
164−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#numbenjsformat' title="Encode json: Number from unsigned"><code>++numb:enjs:format</code></a>
164+[`++numb:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#numbenjsformat)
165−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#sectenjsformat' title="Encode json: Seconds timestamp"><code>++sect:enjs:format</code></a>
165+[`++sect:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#sectenjsformat)
166−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#timeenjsformat' title="Encode json: Millisecond timestamp"><code>++time:enjs:format</code></a>
166+[`++time:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#timeenjsformat)
167−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#pathenjsformat' title="Encode json: String from path"><code>++path:enjs:format</code></a>
167+[`++path:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#pathenjsformat)
168−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_1-5/#tankenjsformat' title="Encode json: Tank as string array"><code>++tank:enjs:format</code></a>
168+[`++tank:enjs:format`](/docs/hoon/reference/zuse/2d_1-5/#tankenjsformat)
169
169
170### 2d (6): Formatting functions: JSON decoding
170### 2d (6): Formatting functions: JSON decoding
171
171
172−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#dejsformat' title="Container arm for JSON decoding reparsers"><code>++dejs:format</code></a>
172+[`++dejs:format`](/docs/hoon/reference/zuse/2d_6/#dejsformat)
173−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ardejsformat' title="Decode json: Array as list"><code>++ar:dejs:format</code></a>
173+[`++ar:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ardejsformat)
174−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#asdejsformat' title="Decode json: Array as set"><code>++as:dejs:format</code></a>
174+[`++as:dejs:format`](/docs/hoon/reference/zuse/2d_6/#asdejsformat)
175−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#atdejsformat' title="Decode json: Array as tuple"><code>++at:dejs:format</code></a>
175+[`++at:dejs:format`](/docs/hoon/reference/zuse/2d_6/#atdejsformat)
176−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#at-rawdejsformat' title="Decode json: Array as tuple, raw"><code>++at-raw:dejs:format</code></a>
176+[`++at-raw:dejs:format`](/docs/hoon/reference/zuse/2d_6/#at-rawdejsformat)
177−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#bodejsformat' title="Decode json: Boolean"><code>++bo:dejs:format</code></a>
177+[`++bo:dejs:format`](/docs/hoon/reference/zuse/2d_6/#bodejsformat)
178−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#budejsformat' title="Decode json: Boolean NOT"><code>++bu:dejs:format</code></a>
178+[`++bu:dejs:format`](/docs/hoon/reference/zuse/2d_6/#budejsformat)
179−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#cidejsformat' title="Decode json: Maybe transform"><code>++ci:dejs:format</code></a>
179+[`++ci:dejs:format`](/docs/hoon/reference/zuse/2d_6/#cidejsformat)
180−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#cudejsformat' title="Decode json: Transform"><code>++cu:dejs:format</code></a>
180+[`++cu:dejs:format`](/docs/hoon/reference/zuse/2d_6/#cudejsformat)
181−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#didejsformat' title="Decode json: Millisecond date"><code>++di:dejs:format</code></a>
181+[`++di:dejs:format`](/docs/hoon/reference/zuse/2d_6/#didejsformat)
182−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#dudejsformat' title="Decode json: Second date"><code>++du:dejs:format</code></a>
182+[`++du:dejs:format`](/docs/hoon/reference/zuse/2d_6/#dudejsformat)
183−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#mudejsformat' title="Decode json: True unit"><code>++mu:dejs:format</code></a>
183+[`++mu:dejs:format`](/docs/hoon/reference/zuse/2d_6/#mudejsformat)
184−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#nedejsformat' title="Decode json: Number as real"><code>++ne:dejs:format</code></a>
184+[`++ne:dejs:format`](/docs/hoon/reference/zuse/2d_6/#nedejsformat)
185−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#nidejsformat' title="Decode json: Number as integer"><code>++ni:dejs:format</code></a>
185+[`++ni:dejs:format`](/docs/hoon/reference/zuse/2d_6/#nidejsformat)
186−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#nodejsformat' title="Decode json: Number as knot"><code>++no:dejs:format</code></a>
186+[`++no:dejs:format`](/docs/hoon/reference/zuse/2d_6/#nodejsformat)
187−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#nudejsformat' title="Decode json: Parse string as hex"><code>++nu:dejs:format</code></a>
187+[`++nu:dejs:format`](/docs/hoon/reference/zuse/2d_6/#nudejsformat)
188−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ofdejsformat' title="Decode json: Object as frond"><code>++of:dejs:format</code></a>
188+[`++of:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ofdejsformat)
189−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#otdejsformat' title="Decode json: Object as tuple"><code>++ot:dejs:format</code></a>
189+[`++ot:dejs:format`](/docs/hoon/reference/zuse/2d_6/#otdejsformat)
190−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ot-rawdejsformat' title="Decode json: Object as tuple, raw"><code>++ot-raw:dejs:format</code></a>
190+[`++ot-raw:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ot-rawdejsformat)
191−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#oudejsformat' title="Decode json: Object of units"><code>++ou:dejs:format</code></a>
191+[`++ou:dejs:format`](/docs/hoon/reference/zuse/2d_6/#oudejsformat)
192−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ou-rawdejsformat' title="Decode json: Object of units, raw"><code>++ou-raw:dejs:format</code></a>
192+[`++ou-raw:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ou-rawdejsformat)
193−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ojdejsformat' title="Decode json: Object as jug"><code>++oj:dejs:format</code></a>
193+[`++oj:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ojdejsformat)
194−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#omdejsformat' title="Decode json: Object as map"><code>++om:dejs:format</code></a>
194+[`++om:dejs:format`](/docs/hoon/reference/zuse/2d_6/#omdejsformat)
195−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#opdejsformat' title="Decode json: Parse keys of map"><code>++op:dejs:format</code></a>
195+[`++op:dejs:format`](/docs/hoon/reference/zuse/2d_6/#opdejsformat)
196−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#padejsformat' title="Decode json: String as path"><code>++pa:dejs:format</code></a>
196+[`++pa:dejs:format`](/docs/hoon/reference/zuse/2d_6/#padejsformat)
197−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#pedejsformat' title="Decode json: Prefix"><code>++pe:dejs:format</code></a>
197+[`++pe:dejs:format`](/docs/hoon/reference/zuse/2d_6/#pedejsformat)
198−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sedejsformat' title="Decode json: String as tape"><code>++sa:dejs:format</code></a>
198+[`++sa:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sedejsformat)
199−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sddejsformat' title="Decode json: String @ud as date"><code>++sd:dejs:format</code></a>
199+[`++sd:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sddejsformat)
200−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sedejsformat' title="Decode json: String as aura"><code>++se:dejs:format</code></a>
200+[`++se:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sedejsformat)
201−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sodejsformat' title="Decode json: String as cord"><code>++so:dejs:format</code></a>
201+[`++so:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sodejsformat)
202−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#sudejsformat' title="Decode json: Parse string"><code>++su:dejs:format</code></a>
202+[`++su:dejs:format`](/docs/hoon/reference/zuse/2d_6/#sudejsformat)
203−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#ufdejsformat' title="Decode json: Unit fall"><code>++uf:dejs:format</code></a>
203+[`++uf:dejs:format`](/docs/hoon/reference/zuse/2d_6/#ufdejsformat)
204−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#undejsformat' title="Decode json: Unit need"><code>++un:dejs:format</code></a>
204+[`++un:dejs:format`](/docs/hoon/reference/zuse/2d_6/#undejsformat)
205−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#uldejsformat' title="Decode json: Null"><code>++ul:dejs:format</code></a>
205+[`++ul:dejs:format`](/docs/hoon/reference/zuse/2d_6/#uldejsformat)
206−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#zadejsformat' title="Decode json: Full unit pole"><code>++za:dejs:format</code></a>
206+[`++za:dejs:format`](/docs/hoon/reference/zuse/2d_6/#zadejsformat)
207−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#zldejsformat' title="Decode json: Collapse unit list"><code>++zl:dejs:format</code></a>
207+[`++zl:dejs:format`](/docs/hoon/reference/zuse/2d_6/#zldejsformat)
208−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#zpdejsformat' title="Decode json: Unit tuple"><code>++zp:dejs:format</code></a>
208+[`++zp:dejs:format`](/docs/hoon/reference/zuse/2d_6/#zpdejsformat)
209−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_6/#zmdejsformat' title="Decode json: Collapse unit map"><code>++zm:dejs:format</code></a>
209+[`++zm:dejs:format`](/docs/hoon/reference/zuse/2d_6/#zmdejsformat)
210
210
211### 2d (7): Formatting functions: JSON decoding (unit)
211### 2d (7): Formatting functions: JSON decoding (unit)
212
212
213−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#dejs-softformat' title="Container arm for unitized JSON decoding reparsers"><code>++dejs-soft:format</code></a>
213+[`++dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#dejs-softformat)
214−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#ardejs-softformat' title="Decode json (unit): Array as list"><code>++ar:dejs-soft:format</code></a>
214+[`++ar:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#ardejs-softformat)
215−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#atdejs-softformat' title="Decode json (unit): Array as tuple"><code>++at:dejs-soft:format</code></a>
215+[`++at:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#atdejs-softformat)
216−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#at-rawdejs-softformat' title="Decode json (unit): Array as tuple, raw"><code>++at-raw:dejs-soft:format</code></a>
216+[`++at-raw:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#at-rawdejs-softformat)
217−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#bodejs-softformat' title="Decode json (unit): Boolean"><code>++bo:dejs-soft:format</code></a>
217+[`++bo:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#bodejs-softformat)
218−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#budejs-softformat' title="Decode json (unit): Boolean NOT"><code>++bu:dejs-soft:format</code></a>
218+[`++bu:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#budejs-softformat)
219−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#cidejs-softformat' title="Decode json (unit): Maybe transform"><code>++ci:dejs-soft:format</code></a>
219+[`++ci:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#cidejs-softformat)
220−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#cudejs-softformat' title="Decode json (unit): Transform"><code>++cu:dejs-soft:format</code></a>
220+[`++cu:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#cudejs-softformat)
221−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#dadejs-softformat' title="Decode json (unit): UTC date"><code>++da:dejs-soft:format</code></a>
221+[`++da:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#dadejs-softformat)
222−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#dankdejs-softformat' title="Decode json (unit): Tank"><code>++dank:dejs-soft:format</code></a>
222+[`++dank:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#dankdejs-softformat)
223−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#didejs-softformat' title="Decode json (unit): Millisecond date"><code>++di:dejs-soft:format</code></a>
223+[`++di:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#didejs-softformat)
224−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#mudejs-softformat' title="Decode json (unit): True unit"><code>++mu:dejs-soft:format</code></a>
224+[`++mu:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#mudejs-softformat)
225−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#nedejs-softformat' title="Decode json (unit): Number as real"><code>++ne:dejs-soft:format</code></a>
225+[`++ne:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#nedejs-softformat)
226−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#nidejs-softformat' title="Decode json (unit): Number as integer"><code>++ni:dejs-soft:format</code></a>
226+[`++ni:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#nidejs-softformat)
227−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#nodejs-softformat' title="Decode json (unit): Number as knot"><code>++no:dejs-soft:format</code></a>
227+[`++no:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#nodejs-softformat)
228−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#ofdejs-softformat' title="Decode json (unit): Object as frond"><code>++of:dejs-soft:format</code></a>
228+[`++of:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#ofdejs-softformat)
229−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#otdejs-softformat' title="Decode json (unit): Object as tuple"><code>++ot:dejs-soft:format</code></a>
229+[`++ot:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#otdejs-softformat)
230−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#ot-rawdejs-softformat' title="Decode json (unit): Object as list of units, raw"><code>++ot-raw:dejs-soft:format</code></a>
230+[`++ot-raw:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#ot-rawdejs-softformat)
231−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#omdejs-softformat' title="Decode json (unit): Object as map"><code>++om:dejs-soft:format</code></a>
231+[`++om:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#omdejs-softformat)
232−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#opdejs-softformat' title="Decode json (unit): Parse keys of map"><code>++op:dejs-soft:format</code></a>
232+[`++op:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#opdejs-softformat)
233−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#pedejs-softformat' title="Decode json (unit): Prefix"><code>++pe:dejs-soft:format</code></a>
233+[`++pe:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#pedejs-softformat)
234−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#redejs-softformat' title="Decode json (unit): Recursive reparser"><code>++re:dejs-soft:format</code></a>
234+[`++re:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#redejs-softformat)
235−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#sadejs-softformat' title="Decode json (unit): String as tape"><code>++sa:dejs-soft:format</code></a>
235+[`++sa:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#sadejs-softformat)
236−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#sodejs-softformat' title="Decode json (unit): String as cord"><code>++so:dejs-soft:format</code></a>
236+[`++so:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#sodejs-softformat)
237−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#sudejs-softformat' title="Decode json (unit): Parse string"><code>++su:dejs-soft:format</code></a>
237+[`++su:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#sudejs-softformat)
238−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#uldejs-softformat' title="Decode json (unit): Null"><code>++ul:dejs-soft:format</code></a>
238+[`++ul:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#uldejs-softformat)
239−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#zadejs-softformat' title="Decode json (unit): Full unit pole"><code>++za:dejs-soft:format</code></a>
239+[`++za:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#zadejs-softformat)
240−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#zldejs-softformat' title="Decode json (unit): Collapse unit list"><code>++zl:dejs-soft:format</code></a>
240+[`++zl:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#zldejs-softformat)
241−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#zpdejs-softformat' title="Decode json (unit): Unit tuple"><code>++zp:dejs-soft:format</code></a>
241+[`++zp:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#zpdejs-softformat)
242−<a class="tooltip" href='/docs/hoon/reference/zuse/2d_7/#zmdejs-softformat' title="Decode json (unit): Collapse unit map"><code>++zm:dejs-soft:format</code></a>
242+[`++zm:dejs-soft:format`](/docs/hoon/reference/zuse/2d_7/#zmdejs-softformat)
243
243
244### 2e (2-3): Web text: JSON printing and parsing
244### 2e (2-3): Web text: JSON printing and parsing
245
245
246−<a class="tooltip" href='/docs/hoon/reference/zuse/2e_2-3/#en-jsonhtml' title="Parse JSON"><code>++en-json:html</code></a>
246+[`++en-json:html`](/docs/hoon/reference/zuse/2e_2-3/#en-jsonhtml)
247−<a class="tooltip" href='/docs/hoon/reference/zuse/2e_2-3/#de-jsonhtml' title="Parse JSON"><code>++de-json:html</code></a>
247+[`++de-json:html`](/docs/hoon/reference/zuse/2e_2-3/#de-jsonhtml)
content/docs/system-overview/arvo.md+2−2
@@ -11,9 +11,9 @@ itself from over the network without downtime. The Arvo kernel proper is quite
11simple -- it's only about 600 lines of code, excluding its various modules.
11simple -- it's only about 600 lines of code, excluding its various modules.
12
12
13The Urbit transition function is implemented in Arvo. Upon being 'poked' by Vere
13The Urbit transition function is implemented in Arvo. Upon being 'poked' by Vere
14−with the pair of `&lt;input event, state>`, Arvo directs the event to the
14+with the pair of `<input event, state>`, Arvo directs the event to the
15appropriate OS module. The result of each Vere 'poke' is a pair of
15appropriate OS module. The result of each Vere 'poke' is a pair of
16−`&lt;output events, new state>`. Events are typed, and each has an explicit call-stack
16+`<output events, new state>`. Events are typed, and each has an explicit call-stack
17structure indicating the event's source module in Arvo.
17structure indicating the event's source module in Arvo.
18
18
19For a more in-depth technical introduction, see [Arvo Overview](/docs/arvo/overview).
19For a more in-depth technical introduction, see [Arvo Overview](/docs/arvo/overview).
content/docs/userspace/dist/glob.md+1−1
@@ -43,7 +43,7 @@ foo
43}
43}
44```
44```
45
45
46−<sup>Note: The mime byte-length and data are 0 in this example because it was made with empty dummy files.</sup>
46+Note: The mime byte-length and data are 0 in this example because it was made with empty dummy files.
47
47
48A glob may contain any number of files and folders in any kind of heirarchy. The one important thing is that an `index.html` file is present in its root. The `index.html` file is automatically served when the app is opened in the browser and will fail if it is missing.
48A glob may contain any number of files and folders in any kind of heirarchy. The one important thing is that an `index.html` file is present in its root. The `index.html` file is automatically served when the app is opened in the browser and will fail if it is missing.
49
49
content/docs/userspace/dist/guide.md+17−4
@@ -194,10 +194,23 @@ We've grabbed an image to use in our "Hello world!" page. The next thing we need
194In the editor, paste in the following HTML and save it:
194In the editor, paste in the following HTML and save it:
195
195
196```html
196```html
197−&lt;!DOCTYPE html> &lt;html> &lt;head> &lt;style> div { text-align: center; }
197+<!DOCTYPE html>
198−&lt;/style> &lt;/head> &lt;title>Hello World&lt;/title> &lt;body> &lt;div>
198+<html>
199−&lt;h1>Hello World!&lt;/h1> &lt;img src="img/pot.svg" alt="pot" width="219"
199+ <head>
200−height="196" /> &lt;/div> &lt;/body> &lt;/html>
200+ <style>
201+ div {
202+ text-align: center;
203+ }
204+ </style>
205+ </head>
206+ <title>Hello World</title>
207+ <body>
208+ <div>
209+ <h1>Hello World!</h1>
210+ <img src="img/pot.svg" alt="pot" width="219" height="196" />
211+ </div>
212+ </body>
213+</html>
201```
214```
202
215
203Our `hello-glob` folder should now look like this:
216Our `hello-glob` folder should now look like this:
content/docs/userspace/full-stack/7-react-setup.md+1−1
@@ -74,7 +74,7 @@ window.ship = "sampel-palnet";
74```
74```
75
75
76`sampel-palnet` will of course be replaced by the actual name of the ship. We
76`sampel-palnet` will of course be replaced by the actual name of the ship. We
77−include this script by adding the following line to the `&lt;head>` section of
77+include this script by adding the following line to the `<head>` section of
78`public/index.html`:
78`public/index.html`:
79
79
80```
80```
content/docs/userspace/graph-store/data-structure-overview.md−9
@@ -12,9 +12,6 @@ Let's go through the type definitions of some of the most used types when workin
12
12
13Here's `sur/post.hoon`
13Here's `sur/post.hoon`
14
14
15−<details>
16− <summary> Code Listing (Click to Expand)</summary>
17−
18```hoon
15```hoon
19+$ index (list atom)
16+$ index (list atom)
20+$ uid [=resource =index]
17+$ uid [=resource =index]
@@ -57,8 +54,6 @@ Here's `sur/post.hoon`
57 ==
54 ==
58```
55```
59
56
60−</details>
61−
62### Index
57### Index
63
58
64```hoon
59```hoon
@@ -156,9 +151,6 @@ The parts of a `post` that are actually hashed to obtain a value of type the ear
156
151
157Here's `sur/graph-store.hoon`
152Here's `sur/graph-store.hoon`
158
153
159−<details>
160−<summary>Code Listing (Click To Expand)</summary>
161−
162```hoon
154```hoon
163+$ graph ((mop atom node) gth)
155+$ graph ((mop atom node) gth)
164+$ marked-graph [p=graph q=(unit mark)]
156+$ marked-graph [p=graph q=(unit mark)]
@@ -230,7 +222,6 @@ Here's `sur/graph-store.hoon`
230 ?(%no %self %yes)
222 ?(%no %self %yes)
231```
223```
232
224
233−</details>
234
225
235### Graph, Node, and Related Objects
226### Graph, Node, and Related Objects
236
227
content/docs/userspace/http-api-guide.md+15−15
@@ -147,7 +147,7 @@ import Urbit from '@urbit/http-api';
147```
147```
148
148
149Note that the examples in this guide are simple HTML documents with vanilla
149Note that the examples in this guide are simple HTML documents with vanilla
150−Javascript in `&lt;script>` tags, so they use [unpkg.com](https://unpkg.com) to
150+Javascript in `<script>` tags, so they use [unpkg.com](https://unpkg.com) to
151import `@urbit/http-api`. This is not typical, and is just done here for
151import `@urbit/http-api`. This is not typical, and is just done here for
152purposes of simplicity.
152purposes of simplicity.
153
153
@@ -403,7 +403,7 @@ the page.
403</html>
403</html>
404```
404```
405
405
406−### Subscribe and Unsubscribe {#subscribe}
406+### Subscribe and Unsubscribe {% #subscribe %}
407
407
408For subscribing to a particular path in an agent, the `Urbit` class in `http-api` includes a `subscribe` function.
408For subscribing to a particular path in an agent, the `Urbit` class in `http-api` includes a `subscribe` function.
409The `subscribe` function takes six arguments in a object:
409The `subscribe` function takes six arguments in a object:
@@ -437,7 +437,7 @@ This example will, upon clicking the "Subscribe" button, subscribe to the
437update it receives. You can test it by doing something like posting a message in
437update it receives. You can test it by doing something like posting a message in
438a chat. You can also unsubscribe by clicking the "Unsubscribe" button.
438a chat. You can also unsubscribe by clicking the "Unsubscribe" button.
439
439
440−```
440+````
441<html>
441<html>
442 <head>
442 <head>
443 <script src="https://unpkg.com/@urbit/http-api"></script>
443 <script src="https://unpkg.com/@urbit/http-api"></script>
@@ -445,7 +445,7 @@ a chat. You can also unsubscribe by clicking the "Unsubscribe" button.
445 </head>
445 </head>
446 <body>
446 <body>
447 <button id="toggle" type="button" onClick="doSub()" >Subscribe</button>
447 <button id="toggle" type="button" onClick="doSub()" >Subscribe</button>
448− <pre id="event"></pre>
448+ <pre id="event">```
449 </body>
449 </body>
450 <script>
450 <script>
451 const api = new UrbitHttpApi.Urbit("");
451 const api = new UrbitHttpApi.Urbit("");
@@ -478,7 +478,7 @@ a chat. You can also unsubscribe by clicking the "Unsubscribe" button.
478 };
478 };
479 </script>
479 </script>
480</html>
480</html>
481−```
481+````
482
482
483### Subscribe Once
483### Subscribe Once
484
484
@@ -514,7 +514,7 @@ printing every `graph-store` update it receives, it will instead just print the
514first one it receives and close the subscription. Additionally, it sets a five
514first one it receives and close the subscription. Additionally, it sets a five
515second timeout, and prints an error message if it times out.
515second timeout, and prints an error message if it times out.
516
516
517−```
517+````
518<html>
518<html>
519 <head>
519 <head>
520 <script src="https://unpkg.com/@urbit/http-api"></script>
520 <script src="https://unpkg.com/@urbit/http-api"></script>
@@ -522,7 +522,7 @@ second timeout, and prints an error message if it times out.
522 </head>
522 </head>
523 <body>
523 <body>
524 <button type="button" onClick="doSub()" >Subscribe Once</button>
524 <button type="button" onClick="doSub()" >Subscribe Once</button>
525− <pre id="event"></pre>
525+ <pre id="event">```
526 </body>
526 </body>
527 <script>
527 <script>
528 const api = new UrbitHttpApi.Urbit("");
528 const api = new UrbitHttpApi.Urbit("");
@@ -541,7 +541,7 @@ second timeout, and prints an error message if it times out.
541 };
541 };
542 </script>
542 </script>
543</html>
543</html>
544−```
544+````
545
545
546### Scries
546### Scries
547
547
@@ -564,7 +564,7 @@ Upon pressing the "Scry Graphs" button, this example will scry the `graph-store`
564agent's `/keys` endpoint for the list of graphs, and print the resulting JSON
564agent's `/keys` endpoint for the list of graphs, and print the resulting JSON
565data.
565data.
566
566
567−```
567+````
568<html>
568<html>
569 <head>
569 <head>
570 <script src="https://unpkg.com/@urbit/http-api"></script>
570 <script src="https://unpkg.com/@urbit/http-api"></script>
@@ -572,7 +572,7 @@ data.
572 </head>
572 </head>
573 <body>
573 <body>
574 <button id="scry" type="button" onClick="doScry()" >Scry Graphs</button>
574 <button id="scry" type="button" onClick="doScry()" >Scry Graphs</button>
575− <pre id="result"></pre>
575+ <pre id="result">```
576 </body>
576 </body>
577 <script>
577 <script>
578 const api = new UrbitHttpApi.Urbit("");
578 const api = new UrbitHttpApi.Urbit("");
@@ -584,7 +584,7 @@ data.
584 }
584 }
585 </script>
585 </script>
586</html>
586</html>
587−```
587+````
588
588
589### Thread
589### Thread
590
590
@@ -608,7 +608,7 @@ mark conversion failed, the promise will fail.
608This example takes a hoon expression (such as `(add 1 1)`), evalutes it with the
608This example takes a hoon expression (such as `(add 1 1)`), evalutes it with the
609`graph-eval` thread in the `landscape` desk, and prints the result.
609`graph-eval` thread in the `landscape` desk, and prints the result.
610
610
611−```
611+````
612<html>
612<html>
613 <head>
613 <head>
614 <script src="https://unpkg.com/@urbit/http-api"></script>
614 <script src="https://unpkg.com/@urbit/http-api"></script>
@@ -617,8 +617,8 @@ This example takes a hoon expression (such as `(add 1 1)`), evalutes it with the
617 <body>
617 <body>
618 <input id="hoon" type="text" placeholder="Hoon to evaluate" />
618 <input id="hoon" type="text" placeholder="Hoon to evaluate" />
619 <button id="submit" type="button" onClick="runThread()" >Submit</button>
619 <button id="submit" type="button" onClick="runThread()" >Submit</button>
620− <pre id="expr"></pre>
620+ <pre id="expr">```
621− <pre id="result"></pre>
621+ <pre id="result">```
622 </body>
622 </body>
623 <script>
623 <script>
624 document.getElementById("hoon")
624 document.getElementById("hoon")
@@ -646,7 +646,7 @@ This example takes a hoon expression (such as `(add 1 1)`), evalutes it with the
646 };
646 };
647 </script>
647 </script>
648</html>
648</html>
649−```
649+````
650
650
651### Delete Channel
651### Delete Channel
652
652
content/docs/userspace/threads/basics/bind.md+5−5
@@ -34,16 +34,16 @@ j
34
34
35## bind
35## bind
36
36
37−Bind by itself must be specialised like `(bind:m ,&lt;type>)` and it takes two arguments:
37+Bind by itself must be specialised like `(bind:m ,<type>)` and it takes two arguments:
38
38
39−- The first argument is a function that returns the `form` of a strand which produces `&lt;type>`.
39+- The first argument is a function that returns the `form` of a strand which produces `<type>`.
40−- The second argument is a gate whose sample is `&lt;type>` and which returns a `form`.
40+- The second argument is a gate whose sample is `<type>` and which returns a `form`.
41
41
42−Since you'll invariably use it in conjunction with micgal, the `&lt;type>` in `;< &lt;type> bind:m ...` will both specialise `bind` and specify the gate's sample.
42+Since you'll invariably use it in conjunction with micgal, the `<type>` in `;< <type> bind:m ...` will both specialise `bind` and specify the gate's sample.
43
43
44Bind calls the first function then, if it succeeded, calls the second gate with the result of the first as its sample. If the first function failed, it will instead just return an error message and not bother calling the next gate. So it's essentially "strand A then strand B".
44Bind calls the first function then, if it succeeded, calls the second gate with the result of the first as its sample. If the first function failed, it will instead just return an error message and not bother calling the next gate. So it's essentially "strand A then strand B".
45
45
46−Since the second gate may itself contain another `;< &lt;type> bind:m ...`, you can see how this allows you to glue together an arbitrarily large pipeline, where subsequent gates depend on the previous ones.
46+Since the second gate may itself contain another `;< <type> bind:m ...`, you can see how this allows you to glue together an arbitrarily large pipeline, where subsequent gates depend on the previous ones.
47
47
48## strandio
48## strandio
49
49
content/docs/userspace/threads/basics/output.md+1−1
@@ -4,7 +4,7 @@ weight = 4
4template = "doc.html"
4template = "doc.html"
5+++
5+++
6
6
7−A strand produces a `[(list card) &lt;response>]`. The first part is a list of cards to be sent off immediately, and `&lt;response>` is one of:
7+A strand produces a `[(list card) <response>]`. The first part is a list of cards to be sent off immediately, and `<response>` is one of:
8
8
9- `[%wait ~]`
9- `[%wait ~]`
10- `[%skip ~]`
10- `[%skip ~]`
content/docs/userspace/threads/basics/summary.md+4−4
@@ -55,8 +55,8 @@ Now here's a quick recap of the main points covered:
55
55
56- is used to chain strands together like javascript promises
56- is used to chain strands together like javascript promises
57- is used in conjunction with micgal (`;<`)
57- is used in conjunction with micgal (`;<`)
58−- must be specialised to a type like `;< &lt;type> bind:m ...`
58+- must be specialised to a type like `;< <type> bind:m ...`
59−- takes two arguments. The first is a function that returns the `form` of a `strand` that produces `&lt;type>`. The second is a gate whose sample is `&lt;type>` and which returns a `form`.
59+- takes two arguments. The first is a function that returns the `form` of a `strand` that produces `<type>`. The second is a gate whose sample is `<type>` and which returns a `form`.
60- calls the first and then, if it succeeded, calls the second with the result of the first as its sample.
60- calls the first and then, if it succeeded, calls the second with the result of the first as its sample.
61
61
62## Strand input
62## Strand input
@@ -68,9 +68,9 @@ Now here's a quick recap of the main points covered:
68
68
69## Strand output
69## Strand output
70
70
71−- contains `[cards=(list card:agent:gall) &lt;response>]`
71+- contains `[cards=(list card:agent:gall) <response>]`
72- `cards` are any cards to be sent immediately
72- `cards` are any cards to be sent immediately
73−- `&lt;response>` is something like `[%done value]`, `[%fail err]`, etc.
73+- `<response>` is something like `[%done value]`, `[%fail err]`, etc.
74- `%done` will contain the result
74- `%done` will contain the result
75- responses are only used internally to manage the flow of the thread and are not returned to subscribers.
75- responses are only used internally to manage the flow of the thread and are not returned to subscribers.
76
76
content/docs/vere/cryptography.md+2−2
@@ -17,7 +17,7 @@ moment, only libraries directly related to Ames are documented here, though we
17note that there are jets for other cryptographic functions such as the [SHA
17note that there are jets for other cryptographic functions such as the [SHA
18Hash Family](/docs/hoon/reference/stdlib/3d) as well.
18Hash Family](/docs/hoon/reference/stdlib/3d) as well.
19
19
20−### Ed25519 {#ed}
20+### Ed25519 {% #ed %}
21
21
22Urbit implements [Ed25519](http://ed25519.cr.yp.to/) based on the SUPERCOP
22Urbit implements [Ed25519](http://ed25519.cr.yp.to/) based on the SUPERCOP
23"ref10" implementation. Additionally there is key exchanging and scalar addition
23"ref10" implementation. Additionally there is key exchanging and scalar addition
@@ -28,7 +28,7 @@ All code is pure ANSI C without any dependencies, except for the random seed
28generation which uses standard OS cryptography APIs (CryptGenRandom on Windows,
28generation which uses standard OS cryptography APIs (CryptGenRandom on Windows,
29`/dev/urandom` on nix).
29`/dev/urandom` on nix).
30
30
31−### AES-SIV {#aes}
31+### AES-SIV {% #aes %}
32
32
33The library we utilize for AES-SIV is an
33The library we utilize for AES-SIV is an
34[RFC5297](https://tools.ietf.org/html/rfc5297)-compliant C implementation of
34[RFC5297](https://tools.ietf.org/html/rfc5297)-compliant C implementation of
content/events/2019-03-01-after-hours-ask-galen-anything.md+1−1
@@ -17,4 +17,4 @@ name = "Urbit"
17
17
18Afterwards, have a beer, connect with Urbit developers, fans, and friends IRL.
18Afterwards, have a beer, connect with Urbit developers, fans, and friends IRL.
19
19
20−Feel free to bring friends and share the primer. <a href="https://urbit.org/primer" class="linkified">https://urbit.org/primer</a>
20+Feel free to bring friends and share the primer. [https://urbit.org/primer](https://urbit.org/primer)
content/events/2020-04-03-urbit-os1-launch-party.md+4−4
@@ -36,12 +36,12 @@ Interested in contributing to Urbit? Sign up for Hoon School:
36
36
37Get the latest on Urbit:
37Get the latest on Urbit:
38
38
39−Blog: <a href="https://urbit.org/blog/" class="linkified">https://urbit.org/blog/</a>
39+Blog: [https://urbit.org/blog/](https://urbit.org/blog/)
40
40
41−Urbit Twitter: <a href="https://twitter.com/urbit" class="linkified">https://twitter.com/urbit</a>
41+Urbit Twitter: [https://twitter.com/urbit](https://twitter.com/urbit)
42
42
43−Urbit Github: <a href="https://github.com/urbit" class="linkified">https://github.com/urbit</a>
43+Urbit Github: [https://github.com/urbit](https://github.com/urbit)
44
44
45Still confused about what Urbit is?
45Still confused about what Urbit is?
46
46
47−<a href="https://urbit.org/understanding-urbit/" class="linkified">https://urbit.org/understanding-urbit/</a>
47+[https://urbit.org/understanding-urbit/](https://urbit.org/understanding-urbit/)
content/events/2020-10-09-urbit-hosting-launch-event.md+9−5
@@ -20,14 +20,18 @@ We're going to do a live demo of Tlon's Urbit hosting solution, check out some o
20
20
21Since the OS 1 launch, back in April, we've been living on Urbit day to day. Urbit has gotten gotten a lot faster, more reliable and nicer to use. Most importantly, we've got an easy way for friends to come join us without running their own node. We're really excited to let people explore what's possible with Urbit and build communities without ever touching the command-line.
21Since the OS 1 launch, back in April, we've been living on Urbit day to day. Urbit has gotten gotten a lot faster, more reliable and nicer to use. Most importantly, we've got an easy way for friends to come join us without running their own node. We're really excited to let people explore what's possible with Urbit and build communities without ever touching the command-line.
22
22
23−Join the waitlist for hosting here: <a href="https://tlon.io/" class="linkified">https://tlon.io/</a>
23+Join the waitlist for hosting here: [https://tlon.io/](https://tlon.io/)
24
24
25---
25---
26
26
27−Got a group of friends who want to use Urbit together? We periodically give away blocks of planets and help people get set up. Apply for a community grant:<br/><a href="https://urbit.org/community/community-grants/" class="linkified">https://urbit.org/community/community-grants/</a>
27+Got a group of friends who want to use Urbit together? We periodically give away blocks of planets and help people get set up. Apply for a community grant: [https://urbit.org/community/community-grants/](https://urbit.org/community/community-grants/)
28
28
29−Interested developing on Urbit? Hoon School is a community-run program to teach you the basics of the language and system. Sign up here:<br/><a href="https://hooniversity.org" class="linkified">https://hooniversity.org</a>
29+Interested developing on Urbit? Hoon School is a community-run program to teach you the basics of the language and system. Sign up here: [https://hooniversity.org](https://hooniversity.org)
30
30
31−Mostly, you can find us on Urbit in the Urbit Community group. But you can also follow along here:<br/><a href="https://urbit.org/blog/" class="linkified">https://urbit.org/blog/</a><br/><a href="https://twitter.com/urbit" class="linkified">https://twitter.com/urbit</a><br/><a href="https://github.com/urbit" class="linkified">https://github.com/urbit</a>
31+Mostly, you can find us on Urbit in the Urbit Community group. But you can also follow along here: [https://urbit.org/blog/](https://twitter.com/urbit)
32
32
33−And if you're still confused about what Urbit is, try these:<br/><a href="https://urbit.org/understanding-urbit/" class="linkified">https://urbit.org/understanding-urbit/</a>
33+[https://github.com/urbit](https://github.com/urbit)
34+
35+[https://urbit.org/blog/](https://urbit.org/blog)
36+
37+And if you're still confused about what Urbit is, try these: [https://urbit.org/understanding-urbit/](https://urbit.org/understanding-urbit/)
content/faq.md+43−44
@@ -7,7 +7,7 @@ hidetitle = "true"
7
7
8## Urbit
8## Urbit
9
9
10−### What is Urbit? {#what-is-urbit}
10+### What is Urbit? {% #what-is-urbit %}
11
11
12Urbit reimagines the internet as a peer-to-peer network designed to stay that way. Previous attempts to "decentralize" the internet have only attempted to solve certain corners of the problem. Urbit proposes that only a new stack, built from the ground up as a tightly integrated system, can realize a great user experience for people using a peer-to-peer web.
12Urbit reimagines the internet as a peer-to-peer network designed to stay that way. Previous attempts to "decentralize" the internet have only attempted to solve certain corners of the problem. Urbit proposes that only a new stack, built from the ground up as a tightly integrated system, can realize a great user experience for people using a peer-to-peer web.
13
13
@@ -15,43 +15,43 @@ Combining a deterministic operating system ([Urbit OS](#what-is-arvo) / Arvo) an
15
15
16The connected world anticipated by Urbit is a much friendlier one, much like the early Internet, where collegial discussion and collaboration was the norm. Problems that are unsolvable without large-scale political centralization in our current internet – data breaches, spam, fake reviews, malware-spreading, harassment – become tractable when individuals control their computing again. You have one login for everything. You own and control all of your software and all of your data by default. Software is designed around the friendships, families, communities, and organizations you're already a part of – not the other way around.
16The connected world anticipated by Urbit is a much friendlier one, much like the early Internet, where collegial discussion and collaboration was the norm. Problems that are unsolvable without large-scale political centralization in our current internet – data breaches, spam, fake reviews, malware-spreading, harassment – become tractable when individuals control their computing again. You have one login for everything. You own and control all of your software and all of your data by default. Software is designed around the friendships, families, communities, and organizations you're already a part of – not the other way around.
17
17
18−### How can I contribute to Urbit? {#contribute}
18+### How can I contribute to Urbit? {% #contribute %}
19
19
20We encourage outside contributors to become a part of the project. The best way to do this is to check out [Urbit](https://github.com/urbit) on GitHub, look at the pinned repositories, and check out our [Contributing](/docs/development/develop) guide. After you've gotten familiar with the system, feel free to open issues and make pull requests.
20We encourage outside contributors to become a part of the project. The best way to do this is to check out [Urbit](https://github.com/urbit) on GitHub, look at the pinned repositories, and check out our [Contributing](/docs/development/develop) guide. After you've gotten familiar with the system, feel free to open issues and make pull requests.
21
21
22−### Who is building Urbit? {#who-builds-urbit}
22+### Who is building Urbit? {% #who-builds-urbit %}
23
23
24[Tlon](https://tlon.io), a San Francisco-based company, is the primary developer of Urbit, along with [various independent developers](https://github.com/urbit/urbit/graphs/contributors) and [urbit.live](https://urbit.live).
24[Tlon](https://tlon.io), a San Francisco-based company, is the primary developer of Urbit, along with [various independent developers](https://github.com/urbit/urbit/graphs/contributors) and [urbit.live](https://urbit.live).
25
25
26## Urbit ID
26## Urbit ID
27
27
28−### What is Urbit ID? {#what-is-urbit-id}
28+### What is Urbit ID? {% #what-is-urbit-id %}
29
29
30Urbit ID is the identity system utilized by Urbit, which associates to each [ship](/docs/glossary/ship) a public and private key used to establish encrypted connections between one another and to guard private data. For [planets](/docs/glossary/planet), [stars](/docs/glossary/star), and [galaxies](/docs/glossary/galaxy), this is achieved with a set of Ethereum smart contracts called [Azimuth](#what-is-azimuth). Keys for [moons](/docs/glossary/moon) and [comets](/docs/glossary/comet) are handled within Urbit.
30Urbit ID is the identity system utilized by Urbit, which associates to each [ship](/docs/glossary/ship) a public and private key used to establish encrypted connections between one another and to guard private data. For [planets](/docs/glossary/planet), [stars](/docs/glossary/star), and [galaxies](/docs/glossary/galaxy), this is achieved with a set of Ethereum smart contracts called [Azimuth](#what-is-azimuth). Keys for [moons](/docs/glossary/moon) and [comets](/docs/glossary/comet) are handled within Urbit.
31
31
32−### What are stars, galaxies, and planets? {#stars-galaxies-planets}
32+### What are stars, galaxies, and planets? {% #stars-galaxies-planets %}
33
33
34Urbit IDs come in three classes: galaxies, stars, and planets. The length of an identity’s name will tell you its class. Galaxies are 8-bit and have names like `~mul`. Galaxies issue 16-bit stars (`~dacmul`), which can themselves issue 32-bit planets (`~laptel-holfur`).
34Urbit IDs come in three classes: galaxies, stars, and planets. The length of an identity’s name will tell you its class. Galaxies are 8-bit and have names like `~mul`. Galaxies issue 16-bit stars (`~dacmul`), which can themselves issue 32-bit planets (`~laptel-holfur`).
35
35
36Planets are intended for everyday use by individuals, and there are 4.3 billion of them (two to the 32nd power). Stars and galaxies, on the other hand, are meant to act as network infrastructure: on the [Urbit OS](#what-is-arvo) network they provide routing and are responsible for distributing software updates.
36Planets are intended for everyday use by individuals, and there are 4.3 billion of them (two to the 32nd power). Stars and galaxies, on the other hand, are meant to act as network infrastructure: on the [Urbit OS](#what-is-arvo) network they provide routing and are responsible for distributing software updates.
37
37
38−### How can I spend less to get a planet? {#gas-prices}
38+### How can I spend less to get a planet? {% #gas-prices %}
39
39
40Using Ethereum has become much more expensive since Urbit ID first launched. To rectify this, Tlon has created a system referred to as [naive rollups](/docs/glossary/rollups), or "layer 2". By reducing the size of transactions, batching them together, and moving computation off-chain to your urbit, it is now possible to perform Urbit ID transactions free of charge and without any prior knowledge of blockchains, cryptocurrency, or Ethereum. This is easily done using [Bridge](/docs/glossary/bridge), our web interface for managing your Urbit ID.
40Using Ethereum has become much more expensive since Urbit ID first launched. To rectify this, Tlon has created a system referred to as [naive rollups](/docs/glossary/rollups), or "layer 2". By reducing the size of transactions, batching them together, and moving computation off-chain to your urbit, it is now possible to perform Urbit ID transactions free of charge and without any prior knowledge of blockchains, cryptocurrency, or Ethereum. This is easily done using [Bridge](/docs/glossary/bridge), our web interface for managing your Urbit ID.
41
41
42−### What is Azimuth? {#what-is-azimuth}
42+### What is Azimuth? {% #what-is-azimuth %}
43
43
44[Azimuth](/docs/glossary/azimuth) is what we call the set of Ethereum contracts that make up a general-purpose decentralized PKI ("public key infrastructure") utilized by Urbit ID. It keeps a record of which Ethereum addresses own which Urbit planets, stars, and galaxies, as well as the public keys associated with those ships.
44[Azimuth](/docs/glossary/azimuth) is what we call the set of Ethereum contracts that make up a general-purpose decentralized PKI ("public key infrastructure") utilized by Urbit ID. It keeps a record of which Ethereum addresses own which Urbit planets, stars, and galaxies, as well as the public keys associated with those ships.
45
45
46It's also kind of a [cool astronomical concept](https://en.wikipedia.org/wiki/Azimuth).
46It's also kind of a [cool astronomical concept](https://en.wikipedia.org/wiki/Azimuth).
47
47
48−### How many planets, stars, and galaxies are active? {#how-many-planets-stars-galaxies}
48+### How many planets, stars, and galaxies are active? {% #how-many-planets-stars-galaxies %}
49
49
50The raw data on most Urbit ID / Azimuth events that have occurred can be found [on the Azimuth website](https://azimuth.network/stats/events.txt). We’re currently working on generalized tooling for viewing these events.
50The raw data on most Urbit ID / Azimuth events that have occurred can be found [on the Azimuth website](https://azimuth.network/stats/events.txt). We’re currently working on generalized tooling for viewing these events.
51
51
52You can also inspect and execute functions in the [azimuth.eth](https://etherscan.io/address/azimuth.eth#code) contract on Etherscan.
52You can also inspect and execute functions in the [azimuth.eth](https://etherscan.io/address/azimuth.eth#code) contract on Etherscan.
53
53
54−### What are comets and moons? {#comets-moons}
54+### What are comets and moons? {% #comets-moons %}
55
55
56In addition to the three classes of identities mentioned above, there are two other kinds of Urbit [ship](/docs/glossary/ship)s that are _not_ registered in the Urbit ID / Azimuth contracts.
56In addition to the three classes of identities mentioned above, there are two other kinds of Urbit [ship](/docs/glossary/ship)s that are _not_ registered in the Urbit ID / Azimuth contracts.
57
57
@@ -59,7 +59,7 @@ In addition to the three classes of identities mentioned above, there are two ot
59
59
60[Comets](/docs/glossary/comet) are 128 bits and have no parents. They can be launched by anyone for free. Since their identity is not maintained on the blockchain, they will likely not be trusted by default by others on the [Urbit OS](#what-is-arvo) network, though you shouldn't have any problem until the network grows much larger. They have long, hard-to-memorize names, like `~racmus-mollen-fallyt-linpex-watres-sibbur-modlux-rinmex`.
60[Comets](/docs/glossary/comet) are 128 bits and have no parents. They can be launched by anyone for free. Since their identity is not maintained on the blockchain, they will likely not be trusted by default by others on the [Urbit OS](#what-is-arvo) network, though you shouldn't have any problem until the network grows much larger. They have long, hard-to-memorize names, like `~racmus-mollen-fallyt-linpex-watres-sibbur-modlux-rinmex`.
61
61
62−### What is a `@p`? Why is my username generated for me? {#what-is-patp}
62+### What is a `@p`? Why is my username generated for me? {% #what-is-patp %}
63
63
64A `@p` ([pronounced](/docs/hoon/hoon-school/hoon-syntax#reading-hoon-aloud) _pat-pee_) is a name like `~zod` or `~lodleb-ritrul` composed of pronounceable, three-letter phonemic elements like `zod`, `lod`, `leb`, `rit` and `rul`. Shorter names, such as `~zod` and `~marzod`, are assigned to [ship](/docs/glossary/ship)s with special duties on the [Arvo](#what-is-arvo) network galaxies and stars, respectively. Longer names like `~palfun-foslup` are identities for typical users.
64A `@p` ([pronounced](/docs/hoon/hoon-school/hoon-syntax#reading-hoon-aloud) _pat-pee_) is a name like `~zod` or `~lodleb-ritrul` composed of pronounceable, three-letter phonemic elements like `zod`, `lod`, `leb`, `rit` and `rul`. Shorter names, such as `~zod` and `~marzod`, are assigned to [ship](/docs/glossary/ship)s with special duties on the [Arvo](#what-is-arvo) network galaxies and stars, respectively. Longer names like `~palfun-foslup` are identities for typical users.
65
65
@@ -69,41 +69,41 @@ Your name is generated for you as a solution to [Zooko's triangle](https://en.wi
69
69
70Regardless, you can always choose to set your nickname in [Landscape](#what-is-landscape), so if you wish for a different name to be displayed then you have the freedom to do so.
70Regardless, you can always choose to set your nickname in [Landscape](#what-is-landscape), so if you wish for a different name to be displayed then you have the freedom to do so.
71
71
72−### Can I change my `@p`? {#change-my-patp}
72+### Can I change my `@p`? {% #change-my-patp %}
73
73
74Nope. There is a 1:1 mapping between name and identity. Think of your `@p` sort of like a phone number. It's just a random synthetic name that doesn't leak any personal information about you.
74Nope. There is a 1:1 mapping between name and identity. Think of your `@p` sort of like a phone number. It's just a random synthetic name that doesn't leak any personal information about you.
75
75
76−### How do I get an identity? {#get-an-identity}
76+### How do I get an identity? {% #get-an-identity %}
77
77
78The easiest way is to find a friend who can give you one. They're out there — just ask around. You'll have a good chance of meeting one if you join Urbit Community, the default group for new [ship](/docs/glossary/ship)s at `~bitbet-bolbel/urbit-community`, as a [comet](/docs/glossary/comet) and contribute pleasantly to the conversation.
78The easiest way is to find a friend who can give you one. They're out there — just ask around. You'll have a good chance of meeting one if you join Urbit Community, the default group for new [ship](/docs/glossary/ship)s at `~bitbet-bolbel/urbit-community`, as a [comet](/docs/glossary/comet) and contribute pleasantly to the conversation.
79
79
80Or, if you must, try an ERC-721 (NFT) exchange (Google or Twitter should help you with this). This will probably involve a purchase and a transfer to an Ethereum address that you own. We recommend using [Bridge](/docs/glossary/bridge), available at [https://bridge.urbit.org](https://bridge.urbit.org), to access the address that the identity is transferred to.
80Or, if you must, try an ERC-721 (NFT) exchange (Google or Twitter should help you with this). This will probably involve a purchase and a transfer to an Ethereum address that you own. We recommend using [Bridge](/docs/glossary/bridge), available at [https://bridge.urbit.org](https://bridge.urbit.org), to access the address that the identity is transferred to.
81
81
82−### How do I transfer an identity to someone else? {#transfer-identity}
82+### How do I transfer an identity to someone else? {% #transfer-identity %}
83
83
84Access the Ethereum address that holds the identity you wish to transfer via [Bridge](https://bridge.urbit.org).
84Access the Ethereum address that holds the identity you wish to transfer via [Bridge](https://bridge.urbit.org).
85
85
86−### What is the best way to access my Urbit ID? {#access-azimuth}
86+### What is the best way to access my Urbit ID? {% #access-azimuth %}
87
87
88We recommended using [Bridge](https://bridge.urbit.org) for all Urbit ID-related operations. It’s great for managing your identities, as well as for viewing information about identities you don’t own.
88We recommended using [Bridge](https://bridge.urbit.org) for all Urbit ID-related operations. It’s great for managing your identities, as well as for viewing information about identities you don’t own.
89
89
90Be careful about using online versions of Bridge not hosted on urbit.org. Since Bridge touches your private keys, it can also steal them.
90Be careful about using online versions of Bridge not hosted on urbit.org. Since Bridge touches your private keys, it can also steal them.
91
91
92−### Why aren't there more planets? {#more-planets}
92+### Why aren't there more planets? {% #more-planets %}
93
93
94−Urbit is designed to be as simple as possible. The sponsorship tree for Urbit ID simply expands by squaring the size of the last tier. That is, there are <span class="mono">2<sup>8</sup> (256)</span> [galaxies](/docs/glossary/galaxy), <span class="mono">(2<sup>8</sup>)<sup>2</sup> = 2<sup>16</sup> (~65K)</span> [stars](/docs/glossary/star), <span class="mono">(2<sup>16</sup>)<sup>2</sup> = 2<sup>32</sup> (~4B)</span> [planets](/docs/glossary/planet). There are <span class="mono">2<sup>64</sup></span> [moons](/docs/glossary/moon) — but moons are tethered to their planet, unlike stars and planets.
94+Urbit is designed to be as simple as possible. The sponsorship tree for Urbit ID simply expands by squaring the size of the last tier. That is, there are <span class="mono">2^8^ (256)</span> [galaxies](/docs/glossary/galaxy), <span class="mono">(2^8^)^2^ = 2^16^ (~65K)</span> [stars](/docs/glossary/star), <span class="mono">(2^16^)^2^ = 2^32^ (~4B)</span> [planets](/docs/glossary/planet). There are <span class="mono">2^64^</span> [moons](/docs/glossary/moon) — but moons are tethered to their planet, unlike stars and planets.
95
95
96−This pattern exists because it’s a simple way to enforce the scarcity of addresses and build a friendly network. When a tier of the address space begins to be populated, we start populating the next tier down. When Urbit nears the limit of <span class="mono">2<sup>32</sup> (4B)</span> planets, we’ll figure out a way to populate the <span class="mono">2<sup>64</sup></span> moons. The galaxies that govern the Urbit ID contracts can always vote to upgrade them — and we expect that they will.
96+This pattern exists because it’s a simple way to enforce the scarcity of addresses and build a friendly network. When a tier of the address space begins to be populated, we start populating the next tier down. When Urbit nears the limit of <span class="mono">2^32^ (4B)</span> planets, we’ll figure out a way to populate the <span class="mono">2^64^</span> moons. The galaxies that govern the Urbit ID contracts can always vote to upgrade them — and we expect that they will.
97
97
98−The problem with populating the moons now is that <span class="mono">2<sup>64</sup></span> is a _really, really big_ number. We’ll need some way of differentiating between humans and their devices (to prevent devices turning into rogue botnets). But that’s a hard problem, and we prefer to start with the simplest possible solution before solving hard problems. The current scheme works. Once we need to update it, we’ll figure it out.
98+The problem with populating the moons now is that <span class="mono">2^64^</span> is a _really, really big_ number. We’ll need some way of differentiating between humans and their devices (to prevent devices turning into rogue botnets). But that’s a hard problem, and we prefer to start with the simplest possible solution before solving hard problems. The current scheme works. Once we need to update it, we’ll figure it out.
99
99
100The number of addresses is in a sort of 'Goldilocks zone' for preventing spam. Too many addresses will result in them being very cheap and thus spammers can just acquire more once they get blocked. Too few addresses and they end up too expensive for the average user. The technical term for what the finite address space bestows upon the network is [Sybil resistance](https://en.wikipedia.org/wiki/Sybil_attack), a very important property for any decentralized network.
100The number of addresses is in a sort of 'Goldilocks zone' for preventing spam. Too many addresses will result in them being very cheap and thus spammers can just acquire more once they get blocked. Too few addresses and they end up too expensive for the average user. The technical term for what the finite address space bestows upon the network is [Sybil resistance](https://en.wikipedia.org/wiki/Sybil_attack), a very important property for any decentralized network.
101
101
102−It’s also worth noting that, while there are almost 8B people on Earth, there are almost certainly not 8B internet users. Facebook has about 2.5B users, Apple has about 1B. Urbit has a long way to go before we get close to <span class="mono">2<sup>32</sup></span>.
102+It’s also worth noting that, while there are almost 8B people on Earth, there are almost certainly not 8B internet users. Facebook has about 2.5B users, Apple has about 1B. Urbit has a long way to go before we get close to <span class="mono">2^32^</span>.
103
103
104(For more background on why Urbit ID is the way it is, read [this](/understanding-urbit/urbit-id/).)
104(For more background on why Urbit ID is the way it is, read [this](/understanding-urbit/urbit-id/).)
105
105
106−### I have a galaxy or star with lockup conditions. How does this work? {#lockup-conditions}
106+### I have a galaxy or star with lockup conditions. How does this work? {% #lockup-conditions %}
107
107
108There are two kinds of release schemes for locked up assets: linear and conditional.
108There are two kinds of release schemes for locked up assets: linear and conditional.
109
109
@@ -117,8 +117,7 @@ Linear release is the simplest: your stars will be released linearly over a peri
117
117
118Conditional release is a bit more complicated. If your stars are in conditional lockup, they're likely divided over three so-called tranches. Each of these unlocks only after a unique condition is met. Since it's difficult to verify things about the real world using smart contracts, the [Galactic Senate](/docs/glossary/senate) verifies that they've been met. Once the Senate marks a condition for a tranche as cleared, it starts releasing linearly over the period of a year.
118Conditional release is a bit more complicated. If your stars are in conditional lockup, they're likely divided over three so-called tranches. Each of these unlocks only after a unique condition is met. Since it's difficult to verify things about the real world using smart contracts, the [Galactic Senate](/docs/glossary/senate) verifies that they've been met. Once the Senate marks a condition for a tranche as cleared, it starts releasing linearly over the period of a year.
119
119
120−
120+### How secure is Urbit right now? {% #how-secure-is-urbit %}
121−### How secure is Urbit right now? {#how-secure-is-urbit}
122
121
123We consider some parts of Urbit to be secure, while other parts still need some work and external auditing. For technical details on Urbit's cryptosystems, see the [documentation](/docs/system-overview/cryptography).
122We consider some parts of Urbit to be secure, while other parts still need some work and external auditing. For technical details on Urbit's cryptosystems, see the [documentation](/docs/system-overview/cryptography).
124
123
@@ -136,7 +135,7 @@ Thus, while Urbit is probably more secure and private than most digital communic
136
135
137## Urbit Grants
136## Urbit Grants
138
137
139−### What are the different types of grants? {#grants-1}
138+### What are the different types of grants? {% #grants-1 %}
140
139
141There are three ways to receive a [grant of stars](https://grants.urbit.org/) for your contribution to the Urbit ecosystem.
140There are three ways to receive a [grant of stars](https://grants.urbit.org/) for your contribution to the Urbit ecosystem.
142
141
@@ -144,69 +143,69 @@ There are three ways to receive a [grant of stars](https://grants.urbit.org/) fo
144- You can apply to claim a **Bounty.** Bounties are requests for work created by Tlon that are claimable by the public, with a predetermined number of stars as the reward.
143- You can apply to claim a **Bounty.** Bounties are requests for work created by Tlon that are claimable by the public, with a predetermined number of stars as the reward.
145- The **Gifts** program, which is Tlon’s informal way of rewarding contributions that don’t fall into the above categories. There is no way to apply for a gift.
144- The **Gifts** program, which is Tlon’s informal way of rewarding contributions that don’t fall into the above categories. There is no way to apply for a gift.
146
145
147−### How do I get a gift? {#grants-2}
146+### How do I get a gift? {% #grants-2 %}
148
147
149Make useful and substantial contributions to Urbit. These can be contributions to the project itself, or they can be outside tools that aren’t part of the Urbit codebase. There’s no formal system for determining who gets a gift; it’s at the discretion of employees at Tlon. Nothing is guaranteed, but you can get an idea for what kinds of contributions results in gifts by looking at the [gifts history](https://grants.urbit.org/history).
148Make useful and substantial contributions to Urbit. These can be contributions to the project itself, or they can be outside tools that aren’t part of the Urbit codebase. There’s no formal system for determining who gets a gift; it’s at the discretion of employees at Tlon. Nothing is guaranteed, but you can get an idea for what kinds of contributions results in gifts by looking at the [gifts history](https://grants.urbit.org/history).
150
149
151−### How often are gifts awarded? {#grants-3}
150+### How often are gifts awarded? {% #grants-3 %}
152
151
153Gifts are awarded semiannually.
152Gifts are awarded semiannually.
154
153
155−### Do gifts follow a set size? {#grants-31}
154+### Do gifts follow a set size? {% #grants-31 %}
156
155
157Gifts do follow a structure. A gift can be in one of three categories of sizes: Gold, Silver, or Bronze. Gold gifts award the most stars, Bronze gifts award the least. These categories don't correspond to a set number of stars being awarded. That number will likely change as the project matures and star values increase. That's why you see many more stars being awarded as the earliest gifts in the [history section.](https://grants.urbit.org/history)
156Gifts do follow a structure. A gift can be in one of three categories of sizes: Gold, Silver, or Bronze. Gold gifts award the most stars, Bronze gifts award the least. These categories don't correspond to a set number of stars being awarded. That number will likely change as the project matures and star values increase. That's why you see many more stars being awarded as the earliest gifts in the [history section.](https://grants.urbit.org/history)
158
157
159−### What happens if a user does not complete a proposal but meets some milestones? {#grants-4}
158+### What happens if a user does not complete a proposal but meets some milestones? {% #grants-4 %}
160
159
161You must complete the proposal to be guaranteed to receive the star grant. Partial star payouts can be negotiated for incomplete work, but such payouts are at the discretion of Tlon.
160You must complete the proposal to be guaranteed to receive the star grant. Partial star payouts can be negotiated for incomplete work, but such payouts are at the discretion of Tlon.
162
161
163However, either party may terminate a proposal on seven days’ written notice. In such a scenario, you may be paid pro rata for any portion of the proposal that has been completed.
162However, either party may terminate a proposal on seven days’ written notice. In such a scenario, you may be paid pro rata for any portion of the proposal that has been completed.
164
163
165−### Do star rewards from grants have lockup conditions? {#grant-5}
164+### Do star rewards from grants have lockup conditions? {% #grant-5 %}
166
165
167No.
166No.
168
167
169−### Do I have to pay taxes on stars? {#grant-6}
168+### Do I have to pay taxes on stars? {% #grant-6 %}
170
169
171Yes. In the United States, stars are considered to be income. If you are American, we need your W-9 before we can pay out your stars. If you’re not an American, you don’t need to get us any forms, but you do need to personally follow the relevant tax laws in your jurisdiction.
170Yes. In the United States, stars are considered to be income. If you are American, we need your W-9 before we can pay out your stars. If you’re not an American, you don’t need to get us any forms, but you do need to personally follow the relevant tax laws in your jurisdiction.
172
171
173−### Can I create a bounty? {#grants-7}
172+### Can I create a bounty? {% #grants-7 %}
174
173
175No. Bounties are only created by Tlon, but we draw inspiration for bounties from various sources, including the community. If you want to pitch a project, use the Proposals system.
174No. Bounties are only created by Tlon, but we draw inspiration for bounties from various sources, including the community. If you want to pitch a project, use the Proposals system.
176
175
177−### How are proposals approved? {#grants-8}
176+### How are proposals approved? {% #grants-8 %}
178
177
179The manager of the Grants program approves them after consulting with the relevant members of the engineering team. This proposal can be accepted, rejected, or accepted with changes by Tlon. The proposal’s star payout can also be adjusted.
178The manager of the Grants program approves them after consulting with the relevant members of the engineering team. This proposal can be accepted, rejected, or accepted with changes by Tlon. The proposal’s star payout can also be adjusted.
180
179
181−### If I win a proposal, do I have an exclusive claim on the project? {#grants-9}
180+### If I win a proposal, do I have an exclusive claim on the project? {% #grants-9 %}
182
181
183You have a claim to the reward of the project as long as milestones are met to the satisfaction of Tlon. However, Tlon may allow another developer to work on the same project in parallel, for a separate reward.
182You have a claim to the reward of the project as long as milestones are met to the satisfaction of Tlon. However, Tlon may allow another developer to work on the same project in parallel, for a separate reward.
184
183
185−### Will milestones be embedded in a smart contract? {#grants-10}
184+### Will milestones be embedded in a smart contract? {% #grants-10 %}
186
185
187No.
186No.
188
187
189−### Does reputation play a role in the assessment of grants? {#grants-11}
188+### Does reputation play a role in the assessment of grants? {% #grants-11 %}
190
189
191Yes. We consider this to be a feature.
190Yes. We consider this to be a feature.
192
191
193−### I completed a proposal. When will I receive payment? {#grants-12}
192+### I completed a proposal. When will I receive payment? {% #grants-12 %}
194
193
195We will pay you within a 30-day window.
194We will pay you within a 30-day window.
196
195
197−### Can I see the proposals of others that have been accepted? {#grants-13}
196+### Can I see the proposals of others that have been accepted? {% #grants-13 %}
198
197
199Yes. Check out our [proposals page.](https://grants.urbit.org/proposals)
198Yes. Check out our [proposals page.](https://grants.urbit.org/proposals)
200
199
201−### How do I safely store my stars? {#grants-14}
200+### How do I safely store my stars? {% #grants-14 %}
202
201
203We recommend storing each star in its own Ethereum wallet. The private keys to these wallets should be stored on physical media that is not connected to a networked computer. Redundancies don’t hurt!
202We recommend storing each star in its own Ethereum wallet. The private keys to these wallets should be stored on physical media that is not connected to a networked computer. Redundancies don’t hurt!
204
203
205−### Can I delegate a bounty or proposal to someone else? {#grants-15}
204+### Can I delegate a bounty or proposal to someone else? {% #grants-15 %}
206
205
207No, not unless explicitly authorized by Tlon.
206No, not unless explicitly authorized by Tlon.
208
207
209−### Do I need to sign a contract? {#grants-16}
208+### Do I need to sign a contract? {% #grants-16 %}
210
209
211After you are approved to work on a bounty or a proposal, you will be sent a contract that you'll need to sign. You don't need to sign a contract to receive a gift, though.
210After you are approved to work on a bounty or a proposal, you will be sent a contract that you'll need to sign. You don't need to sign a contract to receive a gift, though.
212
211
@@ -226,7 +225,7 @@ Note that these paraphrased points are just for summarization purposes. The lang
226
225
227## Miscellaneous
226## Miscellaneous
228
227
229−### Who is Curtis? {#who-is-curtis}
228+### Who is Curtis? {% #who-is-curtis %}
230
229
231Urbit started back in 2002 as Curtis Yarvin’s personal project. Curtis developed the original prototype for Urbit and, separately, wrote a blog on history and politics under the pen name ‘Mencius Moldbug’.
230Urbit started back in 2002 as Curtis Yarvin’s personal project. Curtis developed the original prototype for Urbit and, separately, wrote a blog on history and politics under the pen name ‘Mencius Moldbug’.
232
231
@@ -238,13 +237,13 @@ Curtis laid the foundation for Urbit by delivering its first prototype but, sinc
238
237
239The community of people who build Urbit have widely varied ways of thinking and looking at the world, but they all share two things: the desire to build neutral infrastructure for all people and to think from first principles about hard problems. We welcome spirited debate and disagreement as a primary tool for refining our work. Successful infrastructure, we think, serves all people — no matter their background, culture, or worldview.
238The community of people who build Urbit have widely varied ways of thinking and looking at the world, but they all share two things: the desire to build neutral infrastructure for all people and to think from first principles about hard problems. We welcome spirited debate and disagreement as a primary tool for refining our work. Successful infrastructure, we think, serves all people — no matter their background, culture, or worldview.
240
239
241−### Why do you use Ethereum? {#why-eth}
240+### Why do you use Ethereum? {% #why-eth %}
242
241
243In 2019 (when [Azimuth](#what-is-azimuth) was launched), Ethereum was the most widely deployed, most secure, and best documented general purpose blockchain, and it remains so today. Using Ethereum is a practical engineering choice. It’s the best way to bootstrap real cryptographic ownership. We’re not specifically interested in Ethereum one way or the other.
242In 2019 (when [Azimuth](#what-is-azimuth) was launched), Ethereum was the most widely deployed, most secure, and best documented general purpose blockchain, and it remains so today. Using Ethereum is a practical engineering choice. It’s the best way to bootstrap real cryptographic ownership. We’re not specifically interested in Ethereum one way or the other.
244
243
245One day we’d really like the Urbit ID registry to be hosted on [Urbit OS](#what-is-arvo) itself. But the first challenge is getting Urbit OS to be completely secure.
244One day we’d really like the Urbit ID registry to be hosted on [Urbit OS](#what-is-arvo) itself. But the first challenge is getting Urbit OS to be completely secure.
246
245
247−### Why is Hoon so weird? {#why-hoon}
246+### Why is Hoon so weird? {% #why-hoon %}
248
247
249There are things about Urbit that are weird by design, and some that are weird because we haven’t gotten around to cleaning them up. [Hoon](/docs/glossary/hoon), for the most part, is weird by design, but there are a few things about it we’d like to clean up. For a complete description of why we created Hoon, see the [Hoon overview](/docs/hoon/overview).
248There are things about Urbit that are weird by design, and some that are weird because we haven’t gotten around to cleaning them up. [Hoon](/docs/glossary/hoon), for the most part, is weird by design, but there are a few things about it we’d like to clean up. For a complete description of why we created Hoon, see the [Hoon overview](/docs/hoon/overview).
250
249
@@ -256,13 +255,13 @@ The right way to think about Hoon is as the ‘C of Urbit’. It’s a bare bone
256
255
257Another option is to treat [Urbit as an API](/docs/arvo/eyre/external-api-ref), which allows one to use common languages such as Python and Javascript to build userspace programs. For now this option is not as powerful as Hoon, but there is still a lot that a developer without the time or inclination to learn Hoon can do.
256Another option is to treat [Urbit as an API](/docs/arvo/eyre/external-api-ref), which allows one to use common languages such as Python and Javascript to build userspace programs. For now this option is not as powerful as Hoon, but there is still a lot that a developer without the time or inclination to learn Hoon can do.
258
257
259−### What is the point of Nock? {#why-nock}
258+### What is the point of Nock? {% #why-nock %}
260
259
261The primary technical reason it is difficult for the individual to run a personal server is that modern computing architectures are not deterministic. What solves a problem for one person is not guaranteed to work on another person's computer, even if they are using identical hardware. [Nock](/docs/glossary/nock) solves this problem. It provides a single computing foundation for the whole network, so that difficult issues that arise when running a server need only to be solved once and the solution is guaranteed to work for everyone on the network.
260The primary technical reason it is difficult for the individual to run a personal server is that modern computing architectures are not deterministic. What solves a problem for one person is not guaranteed to work on another person's computer, even if they are using identical hardware. [Nock](/docs/glossary/nock) solves this problem. It provides a single computing foundation for the whole network, so that difficult issues that arise when running a server need only to be solved once and the solution is guaranteed to work for everyone on the network.
262
261
263It’s true that Nock, without jets, is slow. With the ability to call out to a native function, it’s not so bad. This is done by our runtime, [Vere](/docs/glossary/vere), a Nock interpreter written in C.
262It’s true that Nock, without jets, is slow. With the ability to call out to a native function, it’s not so bad. This is done by our runtime, [Vere](/docs/glossary/vere), a Nock interpreter written in C.
264
263
265−### Can I host my Urbit with someone else? {#why-hosting}
264+### Can I host my Urbit with someone else? {% #why-hosting %}
266
265
267Yes, [Tlon](/blog/hosting-the-future) and [a few others](/blog/providers) began [accepting signups](https://tlon.io) to provide hosting service in 2020. Under this arrangement, Tlon does all the work of setting up cloud infrastructure and getting your planet up and running, making getting started with Urbit as simple as signing up for an ordinary online service.
266Yes, [Tlon](/blog/hosting-the-future) and [a few others](/blog/providers) began [accepting signups](https://tlon.io) to provide hosting service in 2020. Under this arrangement, Tlon does all the work of setting up cloud infrastructure and getting your planet up and running, making getting started with Urbit as simple as signing up for an ordinary online service.
268
267
content/getting-started/cli.md+14−55
@@ -7,10 +7,9 @@ tag = "additional"
7
7
8If you're a power user, you can run the Urbit virtual machine directly using the command line. Choose the code for your operating system and run the commands in your terminal.
8If you're a power user, you can run the Urbit virtual machine directly using the command line. Choose the code for your operating system and run the commands in your terminal.
9
9
10−<div id="os" class="os">
10+{% tabs %}
11− <input type="radio" id="macos" name="os" checked>
11+
12− <label for="macos">MacOS</label>
12+{% tab label="MacOS" %}
13− <div class="tab">
14
13
15```bash
14```bash
16mkdir ~/urbit
15mkdir ~/urbit
@@ -20,11 +19,9 @@ tar zxvf ./darwin.tgz --strip=1
20~/urbit/urbit
19~/urbit/urbit
21```
20```
22
21
23− </div>
22+{% /tab %}
24
23
25− <input type="radio" id="linux" name="os">
24+{% tab label="Linux" %}
26− <label for="linux">Linux</label>
27− <div class="tab">
28
25
29```shell
26```shell
30mkdir ~/urbit
27mkdir ~/urbit
@@ -41,11 +38,9 @@ sudo apt-get install libcap2-bin
41sudo setcap 'cap_net_bind_service=+ep' ~/urbit/urbit
38sudo setcap 'cap_net_bind_service=+ep' ~/urbit/urbit
42```
39```
43
40
44−</div>
41+{% /tab %}
45
42
46− <input type="radio" id="windows" name="os">
43+{% tab label="Windows" %}
47− <label for="windows">Windows</label>
48− <div class="tab">
49
44
50```winbatch
45```winbatch
51mkdir %USERPROFILE%\urbit
46mkdir %USERPROFILE%\urbit
@@ -57,8 +52,9 @@ tar zxvf .\windows.tgz --strip=1
57
52
58> Windows 10 build 17063 and later includes the familiar `curl` and `tar` command-line tools.
53> Windows 10 build 17063 and later includes the familiar `curl` and `tar` command-line tools.
59
54
60−</div>
55+{% /tab %}
61−</div>
56+
57+{% /tabs %}
62
58
63If successful, you will see a block of output beginning with the line:
59If successful, you will see a block of output beginning with the line:
64
60
@@ -66,7 +62,7 @@ If successful, you will see a block of output beginning with the line:
66Urbit: a personal server operating function
62Urbit: a personal server operating function
67```
63```
68
64
69−### Booting a free identity {#comet}
65+### Booting a free identity {% #comet %}
70
66
71There are two parts to Urbit: an **ID** and an **Operating System**.
67There are two parts to Urbit: an **ID** and an **Operating System**.
72
68
@@ -134,7 +130,7 @@ At the moment, the most common way to use Urbit is by launching apps like Groups
134
130
135## Next Steps
131## Next Steps
136
132
137−### Updating your comet {#updating}
133+### Updating your comet {% #updating %}
138
134
139Urbit comes with a recent release of the Urbit OS, but automatic updates of the `%base` desk (which contains the kernel of the OS) are not enabled by default for Comets. Many comets are used only once and thrown away, so it would be wasteful to update every single comet as soon as it boots. If you plan to use your comet for more than a quick test, you'll probably want to ensure you're running the latest version of the OS.
135Urbit comes with a recent release of the Urbit OS, but automatic updates of the `%base` desk (which contains the kernel of the OS) are not enabled by default for Comets. Many comets are used only once and thrown away, so it would be wasteful to update every single comet as soon as it boots. If you plan to use your comet for more than a quick test, you'll probably want to ensure you're running the latest version of the OS.
140
136
@@ -147,7 +143,7 @@ kiln: activated install into %base from [~samzod %kids]
147kiln: downloading update for %base from [~samzod %kids]
143kiln: downloading update for %base from [~samzod %kids]
148```
144```
149
145
150−### Read More about the Dojo {#the-dojo}
146+### Read More about the Dojo {% #the-dojo %}
151
147
152The dojo is Urbit's command line. You can use it to control your ship, or to execute arbitrary code. Check out the links below for more information.
148The dojo is Urbit's command line. You can use it to control your ship, or to execute arbitrary code. Check out the links below for more information.
153
149
@@ -155,47 +151,10 @@ The dojo is Urbit's command line. You can use it to control your ship, or to exe
155- [Basic Hoon](/docs/tutorials/hoon/hoon-school/setup)
151- [Basic Hoon](/docs/tutorials/hoon/hoon-school/setup)
156- [Glossary Entry](/docs/glossary/dojo)
152- [Glossary Entry](/docs/glossary/dojo)
157
153
158−### Purchase a Permanent Identity {#boot-your-planet}
154+### Purchase a Permanent Identity {% #boot-your-planet %}
159
155
160You can continue using this comet indefinitely. There are currently few differences between using a comet-level identity and a planet-level one. However, some groups will not allow comets entry in order to maintain a certain level of quality, and changes may be made in the future that further devalue comets. They will always, however, be able to access the basic functions of the network.
156You can continue using this comet indefinitely. There are currently few differences between using a comet-level identity and a planet-level one. However, some groups will not allow comets entry in order to maintain a certain level of quality, and changes may be made in the future that further devalue comets. They will always, however, be able to access the basic functions of the network.
161
157
162A comet also comes with a long and fairly unmemorable name whereas a planet has a short name and a "sigil" (avatar) associated with it that makes it more identifiable on the network. You may notice all this within the first few minutes of using Urbit.
158A comet also comes with a long and fairly unmemorable name whereas a planet has a short name and a "sigil" (avatar) associated with it that makes it more identifiable on the network. You may notice all this within the first few minutes of using Urbit.
163
159
164[For details of how to purchase a planet, visit this page](/getting-started/get-planet).
160[For details of how to purchase a planet, visit this page](/getting-started/get-planet).
165−
166−<style>
167− .os {
168− display: flex;
169− flex-wrap: wrap;
170− }
171− .os label {
172− order: -1;
173− padding: .5rem;
174− min-width: 70px;
175− text-align: center;
176− cursor: pointer;
177− }
178− .os input[type="radio"] {
179− display: none;
180− }
181− .os .tab {
182− display: none;
183− margin-top: 1rem;
184− width: 100%;
185− max-width: 100%;
186− }
187− .os .tab p:first-child {
188− margin-top: 0;
189− }
190− .os .tab p:last-child {
191− margin-bottom: 0;
192− }
193− .os input[type='radio']:checked + label {
194− font-weight: bold;
195− background-color: rgba(244,243,241,1);
196− border-radius: 0.5em;
197− }
198− .os input[type='radio']:checked + label + .tab {
199− display: block;
200−}
201−</style>
content/getting-started/desktop.md+26−66
@@ -8,19 +8,18 @@ weight = 1
8
8
9Port is a desktop GUI application that allows you to spin up, access, and manage your Urbit ships without any knowledge of the command line or Urbit binary.
9Port is a desktop GUI application that allows you to spin up, access, and manage your Urbit ships without any knowledge of the command line or Urbit binary.
10
10
11−<div id="port-os" class="os">
11+{% tabs %}
12− <input type="radio" id="port-macos" name="port-os" checked>
12+
13− <label for="port-macos">MacOS</label>
13+{% tab label="MacOS" %}
14− <div class="tab">
14+
15− <p>To install <strong>Port</strong> on MacOS simply download and open the <code>.dmg</code> file.</p>
15+To install **Port** on MacOS, simply download and open the `.dmg` file.
16− <a href="https://github.com/urbit/port/releases/latest/download/Port.dmg" class="button-lg bg-green-400 text-white" style="width: 12rem;">
16+
17− Download Port
17+{% button label="Download Port" link="https://github.com/urbit/port/releases/latest/download/Port.dmg" color="bg-green-400 text-white" %}
18− </a>
18+{% /button %}
19− </div>
19+
20−
20+{% /tab %}
21− <input type="radio" id="port-linux" name="port-os">
21+
22− <label for="port-linux">Linux</label>
22+{% tab label="Linux" %}
23− <div class="tab">
24
23
25We use `snap` so that **Port** can stay updated automatically. If you already have `snap` installed, simply run:
24We use `snap` so that **Port** can stay updated automatically. If you already have `snap` installed, simply run:
26
25
@@ -30,57 +29,18 @@ sudo snap install port
30
29
31Or to install `snap` for your distribution, snapcraft provides [installation instructions](https://snapcraft.io/docs/installing-snapd).
30Or to install `snap` for your distribution, snapcraft provides [installation instructions](https://snapcraft.io/docs/installing-snapd).
32
31
33− </div>
32+{% /tab %}
34−
33+
35− <input type="radio" id="port-windows" name="port-os">
34+{% tab label="Windows" %}
36− <label for="port-windows">Windows</label>
35+
37− <div class="tab">
36+To install **Port** on Windows, simply download and open the `.exe` file.
38− <p>To install <strong>Port</strong> on Windows simply download and open the <code>.exe</code> file.</p>
37+
39− <a href="https://github.com/urbit/port/releases/latest/download/PortSetup.exe" class="button-lg bg-green-400 text-white" style="width: 12rem;">
38+{% button label="Download Port" link="https://github.com/urbit/port/releases/latest/download/PortSetup.exe" color="bg-green-400 text-white" %}
40− Download Port
39+{% /button %}
41− </a>
40+
42− <p><small>
41+{% /tab %}
43− Note: The Windows version is newly released and is not yet code signed so you will have to click through a prompt warning you about running it. If you simply click <code>more info</code> -> <code>run anyway</code> it will run.
42+
44− </small></p>
43+{% /tabs %}
45− </div>
46−</div>
47−
48−<style>
49− .os {
50− display: flex;
51− flex-wrap: wrap;
52− }
53− .os label {
54− order: -1;
55− padding: .5rem;
56− min-width: 70px;
57− text-align: center;
58− cursor: pointer;
59− }
60− .os input[type="radio"] {
61− display: none;
62− }
63− .os .tab {
64− display: none;
65− margin-top: 1rem;
66− width: 100%;
67− max-width: 100%;
68− }
69− .os .tab p:first-child {
70− margin-top: 0;
71− }
72− .os .tab p:last-child {
73− margin-bottom: 0;
74− }
75− .os input[type='radio']:checked + label {
76− font-weight: bold;
77− background-color: rgba(244,243,241,1);
78− border-radius: 0.5em;
79− }
80− .os input[type='radio']:checked + label + .tab {
81− display: block;
82−}
83−</style>
84
44
85### 2. Boot a comet
45### 2. Boot a comet
86
46
@@ -96,7 +56,7 @@ Once that's finished, click **Launch Ship into Urbit** and you'll be on the netw
96
56
97![](https://media.urbit.org/site/getting-started/Desktop-app-2.jpg)
57![](https://media.urbit.org/site/getting-started/Desktop-app-2.jpg)
98
58
99−<div className="bg-wall-100 p-7 rounded-xl markdown-callout">
59+{% callout %}
100
60
101**Want to combine the simplicity of Port with a permanent Urbit ID?**
61**Want to combine the simplicity of Port with a permanent Urbit ID?**
102
62
@@ -107,7 +67,7 @@ Port will boot your Urbit in a few minutes!
107
67
108For more information on getting a planet, see our [Getting an Urbit ID](/guides/getting-an-urbit-id) guide.
68For more information on getting a planet, see our [Getting an Urbit ID](/guides/getting-an-urbit-id) guide.
109
69
110−</div>
70+{% /callout %}
111
71
112### Next steps
72### Next steps
113
73
content/getting-started/get-planet.md+18−34
@@ -17,7 +17,7 @@ There are a few ways to get your own planet:
17- Purchasing a planet, including hosting, from a hosting provider
17- Purchasing a planet, including hosting, from a hosting provider
18- Manually setting up and hosting a planet purchased from a third party marketplace
18- Manually setting up and hosting a planet purchased from a third party marketplace
19
19
20−### Hosting Providers {#hosting-providers}
20+### Hosting Providers {% #hosting-providers %}
21
21
22Hosting providers will often sell you a planet and run it for you. This option is very simple but will probably cost a regular fee.
22Hosting providers will often sell you a planet and run it for you. This option is very simple but will probably cost a regular fee.
23
23
@@ -43,38 +43,28 @@ Layer 2 planets do not require any crypto wallet management, but are at present
43Don’t worry, both types work the same on the network.
43Don’t worry, both types work the same on the network.
44
44
45Here are a few of the places where you can buy planets:
45Here are a few of the places where you can buy planets:
46−
46+{% table .w-full .my-4 %}
47−<div style="display: flex;padding-top: 2rem;">
47+* L1 Planet Markets
48−
48+* L2 Planet Markets
49−<div class="column">
49+---
50−
50+*
51−**L1 Planet Markets**
51+ - [Urbitex](https://urbitex.io)
52−
52+ - [Urbit.live](https://urbit.live)
53−- [Urbitex](https://urbitex.io)
53+ - [Urbit.me](https://urbit.me)
54−- [Urbit.live](https://urbit.live)
54+*
55−- [Urbit.me](https://urbit.me)
55+ - [azimuth.shop](https://azimuth.shop)
56−
56+ - [\_networked subject](https://subject.network)
57−</div>
57+ - [~mocbel house](https://mocbel.house)
58−
58+ - [Wexpert Systems](https://wexpert.systems)
59−<div class="column">
59+{% /table %}
60−
60+
61−**L2 Planet Markets**
61+{% callout %}
62−
63−- [azimuth.shop](https://azimuth.shop)
64−- [\_networked subject](https://subject.network)
65−- [~mocbel house](https://mocbel.house)
66−- [Wexpert Systems](https://wexpert.systems)
67−
68−</div>
69−</div>
70−
71−<div class="rounded-xl bg-wall-100" style="padding: 2rem; margin-top: 4rem;">
72
62
73**Layer 2 for planets**
63**Layer 2 for planets**
74
64
75Learn more about [layer 2 for planets](/using/id/layer-2-for-planets) in the User's Manual page on the topic.
65Learn more about [layer 2 for planets](/using/id/layer-2-for-planets) in the User's Manual page on the topic.
76
66
77−</div>
67+{% /callout %}
78
68
79### Next steps
69### Next steps
80
70
@@ -87,9 +77,3 @@ Read the [Server setup](/getting-started/server) guide to learn how to get it se
87Or, follow the instructions of a [hosting provider](/getting-started/hosted) and set up your planet there.
77Or, follow the instructions of a [hosting provider](/getting-started/hosted) and set up your planet there.
88
78
89Remember, your planet is yours and you can always change how you run your urbit in the future.
79Remember, your planet is yours and you can always change how you run your urbit in the future.
90−
91−<style>
92− .column {
93− flex-basis: 50%;
94− }
95−</style>
content/getting-started/installing-applications.md+1−1
@@ -37,5 +37,5 @@ After selecting the “picture” app, a pane will open that shows some informat
37Soon you’ll have a new application tile on your home screen that will let you upload and display a picture to your home screen.
37Soon you’ll have a new application tile on your home screen that will let you upload and display a picture to your home screen.
38
38
39![](https://media.urbit.org/site/additional-guides/Installing-apps-3.jpg)
39![](https://media.urbit.org/site/additional-guides/Installing-apps-3.jpg)
40−<br><br>
40+
41![](https://media.urbit.org/site/additional-guides/Installing-apps-4.jpg)
41![](https://media.urbit.org/site/additional-guides/Installing-apps-4.jpg)
content/getting-started/server.md+14−57
@@ -18,7 +18,7 @@ Visit the instructions for [launching a temporary comet with Port](/getting-star
18
18
19There are many markets and individuals selling planets such as [azimuth.shop](https://azimuth.shop), [Networked Subject](https://subject.network), and [Wexpert Systems](https://wexpert.systems) for Ethereum, Bitcoin, and USD respectively.
19There are many markets and individuals selling planets such as [azimuth.shop](https://azimuth.shop), [Networked Subject](https://subject.network), and [Wexpert Systems](https://wexpert.systems) for Ethereum, Bitcoin, and USD respectively.
20
20
21−<div className="bg-wall-100 p-7 rounded-xl markdown-callout">
21+{% callout %}
22
22
23**Layer 1 vs Layer 2 planet purchasing**
23**Layer 1 vs Layer 2 planet purchasing**
24
24
@@ -26,8 +26,7 @@ The websites listed in B) sell Layer 2 (L2) planets -- which means they avoid Et
26
26
27For this reason we generally advise using a L2 planet market, unless you are interested in a very rare sigil or a particular planet name.
27For this reason we generally advise using a L2 planet market, unless you are interested in a very rare sigil or a particular planet name.
28
28
29−</div>
29+{% /callout %}
30−
31### 2. Claim your planet
30### 2. Claim your planet
32
31
33An invitation to claim your planet comes in one of two forms.
32An invitation to claim your planet comes in one of two forms.
@@ -40,14 +39,13 @@ The second, only recently made available through our [L2 solution](/using/id/lay
40
39
41Clicking a link to activate a planet on Bridge will take you to page which will generate a Master Ticket for you. Follow the instructions which will prompt you to download a copy of your Passport - your Master Ticket, management proxy, and keyfile. Store your Master Ticket and management proxy somewhere safe, hold on to the keyfile, and proceed to the next step.
40Clicking a link to activate a planet on Bridge will take you to page which will generate a Master Ticket for you. Follow the instructions which will prompt you to download a copy of your Passport - your Master Ticket, management proxy, and keyfile. Store your Master Ticket and management proxy somewhere safe, hold on to the keyfile, and proceed to the next step.
42
41
43−<div className="bg-wall-100 p-7 rounded-xl markdown-callout">
42+{% callout %}
44
43
45**Claiming L1 planets**
44**Claiming L1 planets**
46
45
47If you’ve purchased an L1 planet, you won’t need to claim it because you already own it as an NFT. Simply log into Bridge using Metamask or your wallet of choice.
46If you’ve purchased an L1 planet, you won’t need to claim it because you already own it as an NFT. Simply log into Bridge using Metamask or your wallet of choice.
48
47
49−</div>
48+{% /callout %}
50−
51### 3. Use Bridge to get your keyfile
49### 3. Use Bridge to get your keyfile
52
50
53Now that you have your planet, you can create your keyfile (eg. `sample-palnet.key`), which is the cryptographic signature required to encrypt and decrypt messages on Urbit's P2P network.
51Now that you have your planet, you can create your keyfile (eg. `sample-palnet.key`), which is the cryptographic signature required to encrypt and decrypt messages on Urbit's P2P network.
@@ -69,10 +67,9 @@ You may also want to see the cloud hosting guide for additional details like set
69
67
70Download Urbit with the following commands:
68Download Urbit with the following commands:
71
69
72−<div id="os" class="os">
70+{% tabs %}
73− <input type="radio" id="macos" name="os" checked>
71+
74− <label for="macos">MacOS</label>
72+{% tab label="MacOS" %}
75− <div class="tab">
76
73
77```bash
74```bash
78mkdir ~/urbit
75mkdir ~/urbit
@@ -82,11 +79,9 @@ tar zxvf ./darwin.tgz --strip=1
82~/urbit/urbit
79~/urbit/urbit
83```
80```
84
81
85− </div>
82+{% /tab %}
86
83
87− <input type="radio" id="linux" name="os">
84+{% tab label="Linux" %}
88− <label for="linux">Linux</label>
89− <div class="tab">
90
85
91```shell
86```shell
92mkdir ~/urbit
87mkdir ~/urbit
@@ -103,11 +98,9 @@ sudo apt-get install libcap2-bin
103sudo setcap 'cap_net_bind_service=+ep' ~/urbit/urbit
98sudo setcap 'cap_net_bind_service=+ep' ~/urbit/urbit
104```
99```
105
100
106−</div>
101+{% /tab %}
107
102
108− <input type="radio" id="windows" name="os">
103+{% tab label="Windows" %}
109− <label for="windows">Windows</label>
110− <div class="tab">
111
104
112```winbatch
105```winbatch
113mkdir %USERPROFILE%\urbit
106mkdir %USERPROFILE%\urbit
@@ -119,8 +112,9 @@ tar zxvf .\windows.tgz --strip=1
119
112
120> Windows 10 build 17063 and later includes the familiar `curl` and `tar` command-line tools.
113> Windows 10 build 17063 and later includes the familiar `curl` and `tar` command-line tools.
121
114
122−</div>
115+{% /tab %}
123−</div>
116+
117+{% /tabs %}
124
118
125Next, transfer `your-keyfile.key` to your server using scp or an FTP client, then move it to the `~/urbit` directory you created in the last step.
119Next, transfer `your-keyfile.key` to your server using scp or an FTP client, then move it to the `~/urbit` directory you created in the last step.
126
120
@@ -165,40 +159,3 @@ Open up the Urbit CLI again if it's not still running, and enter +code. The outp
165### Next steps
159### Next steps
166
160
167Learn how to [get around your urbit](/getting-started/getting-around).
161Learn how to [get around your urbit](/getting-started/getting-around).
168−
169−<style>
170− .os {
171− display: flex;
172− flex-wrap: wrap;
173− }
174− .os label {
175− order: -1;
176− padding: .5rem;
177− min-width: 70px;
178− text-align: center;
179− cursor: pointer;
180− }
181− .os input[type="radio"] {
182− display: none;
183− }
184− .os .tab {
185− display: none;
186− margin-top: 1rem;
187− width: 100%;
188− max-width: 100%;
189− }
190− .os .tab p:first-child {
191− margin-top: 0;
192− }
193− .os .tab p:last-child {
194− margin-bottom: 0;
195− }
196− .os input[type='radio']:checked + label {
197− font-weight: bold;
198− background-color: rgba(244,243,241,1);
199− border-radius: 0.5em;
200− }
201− .os input[type='radio']:checked + label + .tab {
202− display: block;
203−}
204−</style>
content/grants/a-network-enabled-spatial-database-and-demonstration-app.md+5−8
@@ -68,14 +68,6 @@ This proposal has grown out of a previous bounty which called for Open Street Ma
68- Poast will be minimally landscape integrated, insofar is it can be launched from a tile and follow landscape styling.
68- Poast will be minimally landscape integrated, insofar is it can be launched from a tile and follow landscape styling.
69- For this milestone only a minimal set of features will be included to allow for creating, sharing, and viewing of Poastcards.
69- For this milestone only a minimal set of features will be included to allow for creating, sharing, and viewing of Poastcards.
70
70
71−##### Footnotes
72−
73−[^1]:
74− The very readable spec for geojson can be found here http://geojson.org. An overview of GeoJSON summarizing
75− it's advantages and limitations can be found here https://macwright.com/2015/03/23/geojson-second-bite.html
76−
77−[^2]: A mature spatial store would include spatial indexes and provide spatial queries, however for the objectives of this proposal basic spatial spatial documents storage and retrieval can be achieved without spatial indexing. Each spatial document is treated as its own entity, and has limited querying beyond fetching and inspecting the data structure. However this is enough that it can easily be splatted on a map. Spatial indexing of geometries (or parent features/feature collections), is a sensible next step, which would allow many more use cases but is not in scope for this proposal.
78−[^3]: It may be possible to store styling info within the spatial documents, there are at least two GeoJSON style storage conventions, but nothing standardised (see discussion here https://gis.stackexchange.com/questions/22474/geojson-styling-information). Neither of these are part of the GeoJSON standard and appear to be not used much in the wild. There are formats such as KML and GeoPackage which have styling support, but these are also more complex formats.
79
71
80##### About Me
72##### About Me
81
73
@@ -95,3 +87,8 @@ A spatial store, spatial types, simple demo landscape app
952 stars
872 stars
96A network enabled spatial store, for sharing spatial data in urbit.
88A network enabled spatial store, for sharing spatial data in urbit.
97A rich demostration app, for sharing spatial data, images and text.
89A rich demostration app, for sharing spatial data, images and text.
90+
91+
92+[^1]: The very readable spec for geojson can be found here http://geojson.org. An overview of GeoJSON summarizing its advantages and limitations can be found here https://macwright.com/2015/03/23/geojson-second-bite.html
93+[^2]: A mature spatial store would include spatial indexes and provide spatial queries, however for the objectives of this proposal basic spatial spatial documents storage and retrieval can be achieved without spatial indexing. Each spatial document is treated as its own entity, and has limited querying beyond fetching and inspecting the data structure. However this is enough that it can easily be splatted on a map. Spatial indexing of geometries (or parent features/feature collections), is a sensible next step, which would allow many more use cases but is not in scope for this proposal.
94+[^3]: It may be possible to store styling info within the spatial documents, there are at least two GeoJSON style storage conventions, but nothing standardised (see discussion here https://gis.stackexchange.com/questions/22474/geojson-styling-information). Neither of these are part of the GeoJSON standard and appear to be not used much in the wild. There are formats such as KML and GeoPackage which have styling support, but these are also more complex formats.
content/grants/content-saver.md+1−1
@@ -33,7 +33,7 @@ The file should strip the content out of HTML and save it into the Markdown form
33
33
34- Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
34- Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
35- Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
35- Do not begin work until your request to claim this bounty is accepted. We will assign a designer to work with you on the interface.
36−- Submit your code as a PR to the [urbit](github.com/urbit/urbit] repository.
36+- Submit your code as a PR to the [urbit](github.com/urbit/urbit) repository.
37- You have 90 days from the time of approval to complete this bounty.
37- You have 90 days from the time of approval to complete this bounty.
38
38
39## Milestones
39## Milestones
content/groups/~ladtem-filmyr/urbit-ny-week.md+37−76
@@ -11,11 +11,9 @@ participant_range = "100+"
11
11
12Join this group on Urbit for event locations.
12Join this group on Urbit for event locations.
13
13
14−<div class="box">
15−
16## Thursday, May 19, 2022
14## Thursday, May 19, 2022
17
15
18−<div class="entry">
16+
19
17
20**The Scrying Philosopher (Salon)**
18**The Scrying Philosopher (Salon)**
21
19
@@ -25,39 +23,35 @@ Lower Manhattan ([RSVP](https://docs.google.com/forms/d/e/1FAIpQLSeY84O65omPNvc1
25
23
26Contact: [`~lagrev-nocfep`](https://urbit.org/ids/~lagrev-nocfep)
24Contact: [`~lagrev-nocfep`](https://urbit.org/ids/~lagrev-nocfep)
27
25
28−</div>
29
26
30−<div class="entry">
27+
28+
31
29
32**Dimes Square (the play) Live!**
30**Dimes Square (the play) Live!**
33
31
349PM
329PM
35
33
36−<div class="blackout"></div>
34+<div class="blackout"/>
37
35
38Contact: [`~librex-dozryc`](https://urbit.org/ids/~librex-dozryc)
36Contact: [`~librex-dozryc`](https://urbit.org/ids/~librex-dozryc)
39
37
40−</div>
41−
42−</div>
43
38
44−<div class="box">
45
39
46## Friday, May 20, 2022
40## Friday, May 20, 2022
47
41
48−<div class="entry">
42+
49
43
50**Wet Brain Afternoon Tea**
44**Wet Brain Afternoon Tea**
51
45
52TBA (PM)
46TBA (PM)
53
47
54−<div class="blackout"></div>
48+<div class="blackout"/>
55
49
56Contact: [`~napmer-rilnut`](https://urbit.org/ids/~napmer-rilnut)
50Contact: [`~napmer-rilnut`](https://urbit.org/ids/~napmer-rilnut)
57
51
58−</div>
59
52
60−<div class="entry">
53+
54+
61
55
62**Mars Review of Books**
56**Mars Review of Books**
63
57
@@ -65,169 +59,136 @@ Issue I Launch Party
65
59
669:30PM
609:30PM
67
61
68−<div class="blackout"></div>
62+<div class="blackout"/>
69
63
70Contact: [`~librex-dozryc`](https://urbit.org/ids/~librex-dozryc)
64Contact: [`~librex-dozryc`](https://urbit.org/ids/~librex-dozryc)
71
65
72−</div>
73−
74−</div>
75−
76−<div class="box">
77−
78## Saturday, May 21, 2022
66## Saturday, May 21, 2022
79
67
80−<div class="entry">
81−
82**The Combine DAO Launch Party**
68**The Combine DAO Launch Party**
83
69
84Noon
70Noon
85
71
86−<div class="blackout"></div>
72+<div class="blackout"/>
87
73
88Contact: [`~poldec-tonteg`](https://urbit.org/ids/~poldec-tonteg)
74Contact: [`~poldec-tonteg`](https://urbit.org/ids/~poldec-tonteg)
89
75
90−</div>
91−
92−<div class="entry">
93
76
94**Tlon on the Private Island**
77**Tlon on the Private Island**
95
78
963PM-8PM
793PM-8PM
97
80
98−<div class="blackout"></div>
81+<div class="blackout"/>
99
82
100Contact: Christine or [rsvp@tlon.io](mailto:rsvp@tlon.io)
83Contact: Christine or [rsvp@tlon.io](mailto:rsvp@tlon.io)
101
84
102−</div>
103−
104−<div class="entry">
105
85
106**ERA 2 (Tlon Rave)**
86**ERA 2 (Tlon Rave)**
107
87
1089PM-4AM
889PM-4AM
109
89
110−<div class="blackout"></div>
90+<div class="blackout"/>
111
91
112Contact: [~dapryc-tilryn](https://urbit.org/ids/~dapryc-tilryn) or rsvp@tlon.io
92Contact: [~dapryc-tilryn](https://urbit.org/ids/~dapryc-tilryn) or rsvp@tlon.io
113
93
114−</div>
115−
116−<div class="entry">
117−
118**Tirrel Party**
94**Tirrel Party**
119
95
120Night Time
96Night Time
121
97
122−<div class="blackout"></div>
98+<div class="blackout"/>
123
99
124Contact: [`~pindet-timmut`](https://urbit.org/ids/~pindet-timmut)
100Contact: [`~pindet-timmut`](https://urbit.org/ids/~pindet-timmut)
125
101
126−</div>
127−
128−<div class="entry">
129−
130**Sophon x Idolate x Dusko Peter Teal Party**
102**Sophon x Idolate x Dusko Peter Teal Party**
131
103
1329PM
1049PM
133
105
134−<div class="blackout"></div>
106+<div class="blackout"/>
135
107
136Contact: [`~tasset-norlux`](https://urbit.org/ids/~tasset-norlux)
108Contact: [`~tasset-norlux`](https://urbit.org/ids/~tasset-norlux)
137
109
138−</div>
139−</div>
140−
141−<div class="box">
142−
143## Sunday, May 22, 2022
110## Sunday, May 22, 2022
144
111
145−<div class="entry">
146−
147**Networked Spirituality (Holium)**
112**Networked Spirituality (Holium)**
148
113
14911AM
11411AM
150
115
151−<div class="blackout"></div>
116+<div class="blackout"/>
152
117
153Contact: [`~fasnut-famden`](https://urbit.org/ids/~fasnut-famden)
118Contact: [`~fasnut-famden`](https://urbit.org/ids/~fasnut-famden)
154
119
155−</div>
156−
157−<div class="entry">
158−
159**Informal Urmetica Lodge brunch**
120**Informal Urmetica Lodge brunch**
160
121
161Noon
122Noon
162
123
163−<div class="blackout"></div>
124+<div class="blackout"/>
164
125
165Contact: [`~todset-partug`](https://urbit.org/ids/~todset-partug)
126Contact: [`~todset-partug`](https://urbit.org/ids/~todset-partug)
166
127
167−</div>
168
128
169−<div class="entry">
129+
130+
170
131
171**Urmetica Initiation**
132**Urmetica Initiation**
172
133
1732 PM
1342 PM
174
135
175−<div class="blackout"></div>
136+<div class="blackout"/>
176
137
177Contact: [`~poldec-tonteg`](https://urbit.org/ids/~poldec-tonteg)
138Contact: [`~poldec-tonteg`](https://urbit.org/ids/~poldec-tonteg)
178
139
179−</div>
180
140
181−<div class="entry">
141+
142+
182
143
183**Innocent Garden Party**
144**Innocent Garden Party**
184
145
1855PM - 9PM
1465PM - 9PM
186
147
187−<div class="blackout"></div>
148+<div class="blackout"/>
188
149
189Contact: [`~hatryx-lastud`](https://urbit.org/ids/~hatryx-lastud)
150Contact: [`~hatryx-lastud`](https://urbit.org/ids/~hatryx-lastud)
190
151
191−</div>
192
152
193−<div class="entry">
153+
154+
194
155
195**No Agency x Urbit**
156**No Agency x Urbit**
196
157
19710PM
15810PM
198
159
199−<div class="blackout"></div>
160+<div class="blackout"/>
200
161
201Contact: [`~marrys-sapbyt`](https://urbit.org/ids/~marrys-sapbyt) / rsvp@noagency.nyc
162Contact: [`~marrys-sapbyt`](https://urbit.org/ids/~marrys-sapbyt) / rsvp@noagency.nyc
202
163
203−</div>
164+
204−</div>
165+
205−<BR>
166+
206<H2>EXTRA</H2>
167<H2>EXTRA</H2>
207
168
208−<div class="box">
169+
209
170
210## Monday, May 23, 2022
171## Monday, May 23, 2022
211
172
212−<div class="entry">
173+
213
174
214**Flatline Black Lake (Outskirts)**
175**Flatline Black Lake (Outskirts)**
215
176
21610AM
17710AM
217
178
218−<div class="blackout"></div>
179+<div class="blackout"/>
219
180
220Contact: [`~hatryx-lastud`](https://urbit.org/ids/~hatryx-lastud)
181Contact: [`~hatryx-lastud`](https://urbit.org/ids/~hatryx-lastud)
221
182
222−</div>
223
183
224−</div>
225
184
226−<div class="box">
185+
186+
187+
227
188
228## Thursday, May 26, 2022
189## Thursday, May 26, 2022
229
190
230−<div class="entry">
191+
231
192
232**Merde!**
193**Merde!**
233
194
@@ -237,8 +198,8 @@ Contact: [`~hatryx-lastud`](https://urbit.org/ids/~hatryx-lastud)
237
198
238[Star for Auction](https://event.auctria.com/b9db22be-4245-42dc-8032-02275a0fea19/a780d600ec2e11e9ae081db830846aa5?2bd25550ec3411e98fdeb3a273cf08d8%2FcurrentPage=2&2bd25550ec3411e98fdeb3a273cf08d8%2FselectedItem=ed2b191c-ad38-4fc6-9cb5-eda5c87ffee5)
199[Star for Auction](https://event.auctria.com/b9db22be-4245-42dc-8032-02275a0fea19/a780d600ec2e11e9ae081db830846aa5?2bd25550ec3411e98fdeb3a273cf08d8%2FcurrentPage=2&2bd25550ec3411e98fdeb3a273cf08d8%2FselectedItem=ed2b191c-ad38-4fc6-9cb5-eda5c87ffee5)
239
200
240−</div>
201+
241−</div>
202+
242
203
243<style>
204<style>
244.box {
205.box {
content/privacy.md+2−2
@@ -3,7 +3,7 @@ title = "Privacy Policy"
3template = "page_indiced.html"
3template = "page_indiced.html"
4+++
4+++
5
5
6−## Scope of this Privacy Policy {#scope}
6+## Scope of this Privacy Policy {% #scope %}
7
7
8Tlon Corporation ('Tlon,' 'we,' 'our,' and/or 'us') values the privacy of individuals who use Urbit software, our websites, and related services (collectively, our 'Services'). This privacy policy (the 'Privacy Policy') explains how we collect, use, and share information from users of our Services ('Users'). By using our Services, you agree to the collection, use, disclosure, and procedures this Privacy Policy describes. Beyond the Privacy Policy, your use of our Services is also subject to our Terms of Service.
8Tlon Corporation ('Tlon,' 'we,' 'our,' and/or 'us') values the privacy of individuals who use Urbit software, our websites, and related services (collectively, our 'Services'). This privacy policy (the 'Privacy Policy') explains how we collect, use, and share information from users of our Services ('Users'). By using our Services, you agree to the collection, use, disclosure, and procedures this Privacy Policy describes. Beyond the Privacy Policy, your use of our Services is also subject to our Terms of Service.
9
9
@@ -47,7 +47,7 @@ _On the Blockchain._ If you purchase address space, we may publish information a
47
47
48_Vendors and Service Providers._ We may share any information we receive with vendors and service providers retained in connection with the provision of the Service.
48_Vendors and Service Providers._ We may share any information we receive with vendors and service providers retained in connection with the provision of the Service.
49
49
50−_Analytics Partners._ We use analytics services such as Google Analytics to collect and process certain analytics data. These services may also collect information regarding your use of other websites, apps, and online resources. You can learn about Google's practices by going to <a href="https://www.google.com/policies/privacy/partners/">https://www.google.com/policies/privacy/partners/</a>, and opt out of them by downloading the Google Analytics opt-out browser add-on, available at <a href="https://tools.google.com/dlpage/gaoptout">https://tools.google.com/dlpage/gaoptout</a>.
50+_Analytics Partners._ We use analytics services such as Google Analytics to collect and process certain analytics data. These services may also collect information regarding your use of other websites, apps, and online resources. You can learn about Google's practices by going to [https://www.google.com/policies/privacy/partners/](https://www.google.com/policies/privacy/partners/), and opt out of them by downloading the Google Analytics opt-out browser add-on, available at [https://tools.google.com/dlpage/gaoptout](https://tools.google.com/dlpage/gaoptout).
51
51
52_As Required By Law and Similar Disclosures._ We may access, preserve, and disclose your information if we believe doing so is required or appropriate to (a) comply with law enforcement requests and legal process, such as a court order or subpoena; (b) respond to your requests; or (c) protect your, our or others' rights, property, or safety. For the avoidance of doubt, the disclosure of your information may occur if you post any objectionable content on or through the Service.
52_As Required By Law and Similar Disclosures._ We may access, preserve, and disclose your information if we believe doing so is required or appropriate to (a) comply with law enforcement requests and legal process, such as a court order or subpoena; (b) respond to your requests; or (c) protect your, our or others' rights, property, or safety. For the avoidance of doubt, the disclosure of your information may occur if you post any objectionable content on or through the Service.
53
53
content/understanding-urbit/roadmap.md−10
@@ -24,16 +24,12 @@ Bringing together many different things in one place is something only a general
24
24
25As Urbit matures, other killer digital environments may emerge—but Landscape is the app we need if we want to move away from the world of MEGACORP software and onto a secure, distraction-free network of our own.
25As Urbit matures, other killer digital environments may emerge—but Landscape is the app we need if we want to move away from the world of MEGACORP software and onto a secure, distraction-free network of our own.
26
26
27−<br>
28−
29![A Landscape](https://storage.googleapis.com/media.urbit.org/tlon/landscape.png)
27![A Landscape](https://storage.googleapis.com/media.urbit.org/tlon/landscape.png)
30
28
31Today, we pour all of our focus into making Landscape a comfortable place for digital communities to call home, starting with our own. This effort forces us to mature the entire stack, from the interpreter to the interface.
29Today, we pour all of our focus into making Landscape a comfortable place for digital communities to call home, starting with our own. This effort forces us to mature the entire stack, from the interpreter to the interface.
32
30
33Let’s walk through the next few phases of Landscape to get a sense of where we are and where we’re headed.
31Let’s walk through the next few phases of Landscape to get a sense of where we are and where we’re headed.
34
32
35−<br>
36−
37![The current state of Landscape/OS1](https://storage.googleapis.com/media.urbit.org/site/understanding-urbit/uu-interface-3.png)
33![The current state of Landscape/OS1](https://storage.googleapis.com/media.urbit.org/site/understanding-urbit/uu-interface-3.png)
38
34
39### Today: Landscape OS 1.N
35### Today: Landscape OS 1.N
@@ -48,8 +44,6 @@ Our initial goal was just to get ourselves living on Urbit everyday. We achieved
48
44
49OS 1 was a huge step forward. Let’s talk about what’s next.
45OS 1 was a huge step forward. Let’s talk about what’s next.
50
46
51−<br>
52−
53![A speculative interface for Landscape S2](https://storage.googleapis.com/media.urbit.org/site/understanding-urbit/uu-interface-4.png)
47![A speculative interface for Landscape S2](https://storage.googleapis.com/media.urbit.org/site/understanding-urbit/uu-interface-4.png)
54
48
55## Late 2020: Landscape S2
49## Late 2020: Landscape S2
@@ -68,8 +62,6 @@ We know that getting onto the network can be difficult for less technical users.
68
62
69We’re planning to share the hosted version of S2 with a few small communities to test it out and put it through the paces. If you’re curious, [let us know](https://tlon.io).
63We’re planning to share the hosted version of S2 with a few small communities to test it out and put it through the paces. If you’re curious, [let us know](https://tlon.io).
70
64
71−<br>
72−
73![A speculative payments interface](https://storage.googleapis.com/media.urbit.org/site/understanding-urbit/uu-roadmap-4.jpg)
65![A speculative payments interface](https://storage.googleapis.com/media.urbit.org/site/understanding-urbit/uu-roadmap-4.jpg)
74
66
75## Early 2021: Landscape S3
67## Early 2021: Landscape S3
@@ -82,8 +74,6 @@ Perhaps most importantly, Landscape 3 will be backed by a fully audited networki
82
74
83Landscape inherits the benefits of Urbit itself: simplicity, durability, and a real sense of ownership. These come out of the box, from the beginning, but supporting a fully-featured interface makes a lot of demands of a new stack. By Landscape 3 our interface and infrastructure will have matured to the point that it can be confidently held up against alternatives.
75Landscape inherits the benefits of Urbit itself: simplicity, durability, and a real sense of ownership. These come out of the box, from the beginning, but supporting a fully-featured interface makes a lot of demands of a new stack. By Landscape 3 our interface and infrastructure will have matured to the point that it can be confidently held up against alternatives.
84
76
85−<br>
86−
87![A landscape](https://storage.googleapis.com/media.urbit.org/site/understanding-urbit/uu-roadmap-5.jpg)
77![A landscape](https://storage.googleapis.com/media.urbit.org/site/understanding-urbit/uu-roadmap-5.jpg)
88
78
89## 2021 and beyond
79## 2021 and beyond
content/understanding-urbit/urbit-id.md+2−2
@@ -31,7 +31,7 @@ Since the Urbit ID registry is live and deployed you can even [look at the chain
31
31
32Each Urbit ID is really just a number. From that number we generate a pronounceable name and a visually identifiable sigil. `~dalwel-fadrun` is `3,509,632,436`, for example.
32Each Urbit ID is really just a number. From that number we generate a pronounceable name and a visually identifiable sigil. `~dalwel-fadrun` is `3,509,632,436`, for example.
33
33
34−Urbit IDs are distributed by a sponsorship tree. At the top of the tree are 2<sup>8</sup> (256) galaxies. Each galaxy issues 2<sup>8</sup> stars, making a total of 2<sup>16</sup> (65K). Stars then each can issue 2<sup>16</sup> planets, making for 2<sup>32</sup> (~4B). As you might expect, each planet issues 2<sup>32</sup> moons.
34+Urbit IDs are distributed by a sponsorship tree. At the top of the tree are 2^8^ (256) galaxies. Each galaxy issues 2^8^ stars, making a total of 2^16^ (65K). Stars then each can issue 2^16^ planets, making for 2^32^ (~4B). As you might expect, each planet issues 2^32^ moons.
35
35
36You can also call stars ‘infrastructure nodes’ and galaxies ‘governance nodes’, since those are more descriptive names for their roles. Stars help route packets, kind of like an ISP. And galaxies are a bit like DNS root servers or ICANN members. The difference, of course, is that Urbit IDs are owned cryptographically by many different people and accrue reputation independently.
36You can also call stars ‘infrastructure nodes’ and galaxies ‘governance nodes’, since those are more descriptive names for their roles. Stars help route packets, kind of like an ISP. And galaxies are a bit like DNS root servers or ICANN members. The difference, of course, is that Urbit IDs are owned cryptographically by many different people and accrue reputation independently.
37
37
@@ -41,7 +41,7 @@ And that's it. It's a simple system. What's important is why it is the way it is
41
41
42At a high level, there are three important things to understand about the overall Urbit ID system design.
42At a high level, there are three important things to understand about the overall Urbit ID system design.
43
43
44−First, scarcity: there are only 2<sup>32</sup> (~4B) Urbit IDs, so they cost something. Since they cost something, people are less likely to use them to spam or abuse the network. When you meet a stranger with an Urbit ID, you know they have some skin in the game (even without leaking personal data in either direction). That said, each Urbit ID is purely pseudonymous, so `~dalwel-fadrun` for example, is proof of some stake in the network, but not much more.
44+First, scarcity: there are only 2^32^ (~4B) Urbit IDs, so they cost something. Since they cost something, people are less likely to use them to spam or abuse the network. When you meet a stranger with an Urbit ID, you know they have some skin in the game (even without leaking personal data in either direction). That said, each Urbit ID is purely pseudonymous, so `~dalwel-fadrun` for example, is proof of some stake in the network, but not much more.
45
45
46Second, decentralization: Urbit IDs are distributed by a sponsorship tree. Each sponsor issues a fixed number of addresses. Since there are lots of sponsors, there are lots of ways to get an Urbit ID — not just one central authority. Once you get one, it’s yours forever.
46Second, decentralization: Urbit IDs are distributed by a sponsorship tree. Each sponsor issues a fixed number of addresses. Since there are lots of sponsors, there are lots of ways to get an Urbit ID — not just one central authority. Once you get one, it’s yours forever.
47
47
content/updates/2020-07-27-update.md−2
@@ -28,8 +28,6 @@ We’re also working on delivering a new, keyboard-oriented, searchable navigati
28
28
29We’re also beginning to plan our next slate of work: we are preparing to make the leap to the OS2 codebase, and it involves quite a bit of research, but it’ll arrive sooner than you think…
29We’re also beginning to plan our next slate of work: we are preparing to make the leap to the OS2 codebase, and it involves quite a bit of research, but it’ll arrive sooner than you think…
30
30
31−<br>
32−
33Reminder: Hoon School begins August 1
31Reminder: Hoon School begins August 1
34
32
35[Hooniversity](https://hooniversity.org/) is the new home of Hoon School run by `~rabsef-bicrym` and `~risruc-habteb`. To enroll, visit hooniversity.org or email join@hooniversity.org
33[Hooniversity](https://hooniversity.org/) is the new home of Hoon School run by `~rabsef-bicrym` and `~risruc-habteb`. To enroll, visit hooniversity.org or email join@hooniversity.org
content/using/id/hd-wallet.md+10−13
@@ -7,7 +7,7 @@ template = "doc.html"
7This document explains what the [Urbit HD wallet](/docs/glossary/hdwallet) is
7This document explains what the [Urbit HD wallet](/docs/glossary/hdwallet) is
8and how to use it.
8and how to use it.
9
9
10−### What is the Urbit HD Wallet? {#urbit-hd-wallet}
10+### What is the Urbit HD Wallet? {% #urbit-hd-wallet %}
11
11
12The [Urbit Hierarchical Deterministic (HD) Wallet](/docs/glossary/hdwallet) is a
12The [Urbit Hierarchical Deterministic (HD) Wallet](/docs/glossary/hdwallet) is a
13custom Ethereum wallet based on BIP39 and BIP44 – the same underlying technology
13custom Ethereum wallet based on BIP39 and BIP44 – the same underlying technology
@@ -21,10 +21,9 @@ you shouldn't have to worry about this: you can simply think of your "master
21ticket" as the password to your Urbit ID. If you're operating a star or galaxy,
21ticket" as the password to your Urbit ID. If you're operating a star or galaxy,
22the Urbit HD Wallet allows you to implement a multi-tier key custody scheme.
22the Urbit HD Wallet allows you to implement a multi-tier key custody scheme.
23
23
24−If you're interested, you can read the spec here: [Urbit HD Wallet Spec (UP
24+If you're interested, you can read the spec here: [Urbit HD Wallet Spec (UP 8)](https://github.com/urbit/proposals/blob/master/008-urbit-hd-wallet).
25−8)](https://github.com/urbit/proposals/blob/master/008-urbit-hd-wallet).
26
25
27−### What is a master ticket? {#master-ticket}
26+### What is a master ticket? {% #master-ticket %}
28
27
29The "master ticket" is the cryptographic seed from which your other Urbit ID keys are
28The "master ticket" is the cryptographic seed from which your other Urbit ID keys are
30derived. It should be treated like a master password: **you should never share
29derived. It should be treated like a master password: **you should never share
@@ -38,7 +37,7 @@ hosted version of Bridge.
38If you're operating a planet, you can use your master ticket to authenticate
37If you're operating a planet, you can use your master ticket to authenticate
39with Bridge.
38with Bridge.
40
39
41−### What is an ownership address? {#ownership-address}
40+### What is an ownership address? {% #ownership-address %}
42
41
43An ownership address is an Ethereum address that owns one or more of your Urbit
42An ownership address is an Ethereum address that owns one or more of your Urbit
44IDs. The Urbit Wallet Generator creates one [Urbit HD
43IDs. The Urbit Wallet Generator creates one [Urbit HD
@@ -47,11 +46,11 @@ identities. Using the ownership key associated with your ownership address, you
47can transfer identities to other people, meaning that it’s very important to
46can transfer identities to other people, meaning that it’s very important to
48store securely.
47store securely.
49
48
50−### What are proxies? {#proxies}
49+### What are proxies? {% #proxies %}
51
50
52See [Proxies](/using/id/proxies).
51See [Proxies](/using/id/proxies).
53
52
54−### What are seeds? {#seeds}
53+### What are seeds? {% #seeds %}
55
54
56All Ethereum key-pairs in the Urbit wallet system, including
55All Ethereum key-pairs in the Urbit wallet system, including
57[proxies](/docs/glossary/proxies), are produced by 128-bit cryptographically
56[proxies](/docs/glossary/proxies), are produced by 128-bit cryptographically
@@ -60,10 +59,9 @@ of an Ethereum wallet and are yours alone. An ownership key pair is derived from
60an ownership seed and, likewise, the various proxy key pairs are generated from
59an ownership seed and, likewise, the various proxy key pairs are generated from
61their respective proxy seeds.
60their respective proxy seeds.
62
61
63−For detailed information see the [Urbit HD Wallet Spec (UP
62+For detailed information see the [Urbit HD Wallet Spec (UP 8)](https://github.com/urbit/proposals/blob/master/008-urbit-hd-wallet).
64−8)](https://github.com/urbit/proposals/blob/master/008-urbit-hd-wallet).
65
63
66−### What does it mean to “set public keys”? {#set-public-keys}
64+### What does it mean to “set public keys”? {% #set-public-keys %}
67
65
68This means registering the public keys of your identity's encryption and
66This means registering the public keys of your identity's encryption and
69authentication key pairs (together known as "networking keys") with Urbit ID /
67authentication key pairs (together known as "networking keys") with Urbit ID /
@@ -75,13 +73,13 @@ You want to reset these keys if they are compromised, or if your ship has sunk.
75This is of little practical significance today, but resetting your networking
73This is of little practical significance today, but resetting your networking
76keys resets your relationship with other ships on the network.
74keys resets your relationship with other ships on the network.
77
75
78−### What do I do if I want to own multiple identities? {#multiple-points}
76+### What do I do if I want to own multiple identities? {% #multiple-points %}
79
77
80We recommend using a different HD Wallet for each identity. You are able to
78We recommend using a different HD Wallet for each identity. You are able to
81assign any number of identities to a single Ethereum address, however, since
79assign any number of identities to a single Ethereum address, however, since
82they are just ERC-721 tokens.
80they are just ERC-721 tokens.
83
81
84−### How should I take care of my Urbit HD Wallet? {#custody}
82+### How should I take care of my Urbit HD Wallet? {% #custody %}
85
83
86Urbit IDs have accompanying security realities that must be taken seriously. The
84Urbit IDs have accompanying security realities that must be taken seriously. The
87responsibility for keeping cryptographic assets safe rests fully with the party
85responsibility for keeping cryptographic assets safe rests fully with the party
@@ -161,4 +159,3 @@ exposes a much larger attack surface to malicious actors.
161
159
162For all of these reasons, if you use Tier 3 methods, use them only for the
160For all of these reasons, if you use Tier 3 methods, use them only for the
163storage of low-value secrets.
161storage of low-value secrets.
164−
content/using/id/overview.md+50−187
@@ -7,160 +7,49 @@ template = "doc.html"
7
7
8![](https://media.urbit.org/site/posts/essays/pki-maze.png)
8![](https://media.urbit.org/site/posts/essays/pki-maze.png)
9
9
10−A public key infrastructure (PKI) is a system for binding a set of keys to a
10+A public key infrastructure (PKI) is a system for binding a set of keys to a name. Sometimes a small amount of metadata is included.
11−name. Sometimes a small amount of metadata is included.
11+
12−
12+Existing PKIs include PGP-style ["web of trust"](https://en.wikipedia.org/wiki/Web_of_trust), [SSL certificates](https://en.wikipedia.org/wiki/Certificate_authority), [ZeroTier](https://www.zerotier.com/lf-announcement/), [Keybase](https://keybase.io/), [OpenID](https://openid.net/what-is-openid/), [Mozilla Persona](https://developer.mozilla.org/en-US/docs/Archive/Mozilla/Persona), and [Login with Google](https://developers.google.com/identity). These take unique approaches to the problem and have achieved some degree of success, but none provide globally consistent, permanent, and completely self-owned identities. Exhaustive exploration and categorization is unfortunately out of scope for this post, so we'll just describe Urbit's approach to achieving these properties in our PKI.
13−Existing PKIs include PGP-style ["web of
13+
14−trust"](https://en.wikipedia.org/wiki/Web_of_trust), [SSL
14+In Urbit, a "name" is often called a "ship" or an "address" because we use the metadata in the PKI to make names routable. The total data is two 256-bit asymmetric keys, a cryptographic suite number (to allow changing crypto algorithms), the revision number of the key, and the name of a ship that will route for it. This sums to less than 128 bytes of data.
15−certificates](https://en.wikipedia.org/wiki/Certificate_authority),
15+
16−[ZeroTier](https://www.zerotier.com/lf-announcement/),
16+Each PKI trades off various properties. We chose a tripartite system so that appropriate choices can be made for different use cases. Here, we explore the various properties we chose by following a series of binary choices -- the idea maze.
17−[Keybase](https://keybase.io/), [OpenID](https://openid.net/what-is-openid/),
17+
18−[Mozilla
18+There are two sorts of PKI: either you can change your keys or not. If you cannot, then your name is impermanent, for no one can keep a set of keys secure forever. Even if your opsec never fails, eventually your crypto algorithms may be compromised.
19−Persona](https://developer.mozilla.org/en-US/docs/Archive/Mozilla/Persona), and
19+
20−[Login with Google](https://developers.google.com/identity). These take unique
20+However, if you sacrifice the ability to change your keys, you can have a very nice property: self-attesting keys. If your name is a hash of your public key information, then no other source of information is required to verify you are who you say you are. This is a useful property since it requires no coordination at all. Many things are impermanent, especially during development. It also provides a way to try out the network without obtaining a permanent address.
21−approaches to the problem and have achieved some degree of success, but none
21+
22−provide globally consistent, permanent, and completely self-owned identities.
22+This is our first stop in the idea maze. We call this sort of name a "comet". A comet's name is the 128-bit hash of its public keys.
23−Exhaustive exploration and categorization is unfortunately out of scope for this
23+
24−post, so we'll just describe Urbit's approach to achieving these properties in
24+However, Urbit is yours and it's forever. You shouldn't have to change your name every time you change your keys. So, we go back and take the other choice: you must be able to change your keys.
25−our PKI.
25+
26−
26+To change keys, you must sign a message with the old keys revoking them and supplying the new ones[^0]. The question is what happens if the old keys also sign a second set of new keys. This could happen if an attacker obtained your old keys after the fact. This is important because one of the reasons to be able to change your keys is to invalidate the old ones so that they have no power.
27−In Urbit, a "name" is often called a "[ship](/docs/glossary/ship)" or an "address" because we use the
27+
28−metadata in the PKI to make names routable. The total data is two 256-bit
28+We have two options again: the PKI may be globally consistent or not. To be globally consistent means that if you believe a name is bound to a set of keys, then nobody on the network will disagree.
29−asymmetric keys, a cryptographic suite number (to allow changing crypto
29+
30−algorithms), the revision number of the key, and the name of a ship that will
30+If you don't require global consistency, you may sign this message and send it to all your neighbors, and they pass it on, and hopefully it gets to most of the network quickly. However, if one of those ships receives two contradictory versions of this message, the only thing it can do is trust the first one it heard, which may be different than what someone else heard. Thus, this is pairwise consistent but globally inconsistent. This is essentially how the pre-blockchain Ames network worked, though key changes were not actually implemented. Because global consistency is a valuable property, we looked at other options.
31−route for it. This sums to less than 128 bytes of data.
31+
32−
32+For a globally consistent PKI that allows you to revoke keys, you need to be able to distinguish between two cryptographically valid messages to determine which was signed first. The dual problem could be solved easily — you can prove a message is signed after another by including the signature of the first in the second. This is equivalent to reading out a newspaper headline to prove a message was recorded after a given day.
33−Each PKI trades off various properties. We chose a tripartite system so that
33+
34−appropriate choices can be made for different use cases. Here, we explore the
34+However, the problem of proving one message was sent before any later ones inverts the problem. You can solve this with newspapers by placing the message in the text of the newspaper. However, while reading a newspaper requires no central party, writing one does. For a long time, this sort of message was always handled by a central party. SSL revocations are managed by a few central parties. When you buy property, it's not sufficient to have the previous owner sign the title — this must be entered into a central land registry. Otherwise, the owner may sell their property to multiple people and there would be no way to determine who is the new owner. With the land registry, all you need to do is ask the registry which sale happened first, and that's the one that counts.
35−various properties we chose by following a series of binary choices -- the idea
35+
36−maze.
36+However, Urbit is yours and it's forever. Trusting central registries jeopardizes both. The keen reader will notice that the problem of determining which key rotation happened first is exactly the double-spend problem that Satoshi solved with his proof of work algorithm for Bitcoin. His first block famously includes a newspaper headline to prove he didn't mine the block before that date. In a beautiful duality, his own algorithm proves that he didn't mine it after that date.[^1]
37−
37+
38−There are two sorts of PKI: either you can change your keys or not. If you
38+Some argue that blockchain is only good for money. This is myopic and is generally based on the experience that its most valuable application so far has been money. However, blockchain is a cryptographic primitive to do what was previously impossible: prove that one message was signed before another without a central party. Blockchain was discovered by someone trying to create digital money, and he needed that primitive, but that doesn't mean that's all it's good for.
39−cannot, then your name is impermanent, for no one can keep a set of keys secure
39+
40−forever. Even if your opsec never fails, eventually your crypto algorithms may
40+Thus, we store our PKI data on a blockchain for our second kind of name: planets. A planet is a 32-bit address which has key information stored on the blockchain.[^2] The owner of a planet may broadcast new PKI data by adding it to the blockchain. Any later messages by the old keys will be rejected, and everyone on the network will listen to the blockchain for key data. Thus, we have global consistency, permanence, and self sovereignty. We know of no other solution that can provide these properties.
41−be compromised.
41+
42−
42+However, while small individually, the aggregate PKI data for all nodes on the network may become very large. This is not an issue for comets because nobody needs to store comet keys except for those which they're talking with, and even those can be garbage-collected and re-requested and verified. For planets, there is a canonical set of keys, and somebody must store that. There are about 2^32^, or 4 billion planets. If the PKI data is about 100 bytes for each planet, this is about 400 GB of data. This may be more than most users wish to store, but it's small enough that it would be very cheap for someone to host this data for many users[^3].
43−However, if you sacrifice the ability to change your keys, you can have a very
43+
44−nice property: self-attesting keys. If your name is a hash of your public key
44+This information is currently stored directly on the Ethereum 1.0 blockchain, but as is well understood in blockchain circles this approach will not scale beyond a certain point. Many chains are pursing designs that allow the users of the smart contracts to store locally the data associated with the contracts they care about and only commit hashes to the chain. We expect there to be several viable options for this by the time our scaling needs exceed what's provided by Ethereum 1.0. This will free us from the cost of hosting the PKI data on all Ethereum nodes, but the data must still be stored somewhere. Any service that could handle such a large amount of data would inherently centralize the network.
45−information, then no other source of information is required to verify you are
45+
46−who you say you are. This is a useful property since it requires no coordination
46+However, 4 billion is not enough addresses for every device on the planet today, much less in a few decades. So, we apply our maxim of re-examining our choices at each level for each use case. Examining the idea maze above, we cannot use the blockchain option for everything since the data is too big. However, it's not actually necessary for each of your devices to have its own self-sovereign identity separate from your planet. So we choose the option of using a central registry: your own planet.
47−at all. Many things are impermanent, especially during development. It also
47+
48−provides a way to try out the network without obtaining a permanent address.
48+We allocate 4 billion "moons" to each of those planets. A moon is a 64-bit address whose 32-bit suffix is its planet. Your planet can easily store the keys for its own moons, and anyone who needs to talk to your moons can ask you for the keys.
49−
49+
50−This is our first stop in the idea maze. We call this sort of name a "[comet](/docs/glossary/comet)". A
50+This is the sense in which moons are true ships: they're permanent names and you own them completely, as long as you own the planet. However, they're not independent ships — their keys can always be revoked by their planet.
51−comet's name is a 128-bit human-readable hash of its public keys.
51+
52−
52+To create a sane network, we require global consistency for all our names. There are three other properties; pick any two:
53−However, Urbit is yours and it's forever. You shouldn't have to change your name
54−every time you change your keys. So, we go back and take the other choice as well: you
55−must be able to change your keys.
56−
57−<a name="0"></a>
58−To change keys, you must sign a message with the old keys revoking them and
59−supplying the new ones<sup><a href="#f0">[0]</a></sup>. The question
60−is what happens if the old keys also sign a second set of new keys. This could
61−happen if an attacker obtained your old keys after the fact. This is important
62−because one of the reasons to be able to change your keys is to invalidate the
63−old ones so that they have no power.
64−
65−We have two options again: the PKI may be globally consistent or not. To be
66−globally consistent means that if you believe a name is bound to a set of keys,
67−then nobody on the network will disagree.
68−
69−If you don't require global consistency, you may sign this message and send it
70−to all your neighbors, and they pass it on, and hopefully it gets to most of the
71−network quickly. However, if one of those ships receives two contradictory
72−versions of this message, the only thing it can do is trust the first one it
73−heard, which may be different than what someone else heard. Thus, this is
74−pairwise consistent but globally inconsistent. This is essentially how the
75−pre-blockchain [Ames](/docs/glossary/ames) network worked, though key changes were not actually
76−implemented. Because global consistency is a valuable property, we looked at
77−other options.
78−
79−For a globally consistent PKI that allows you to revoke keys, you need to be
80−able to distinguish between two cryptographically valid messages to determine
81−which was signed first. The dual problem could be solved easily — you can prove
82−a message is signed after another by including the signature of the first in the
83−second. This is equivalent to reading out a newspaper headline to prove a
84−message was recorded after a given day.
85−
86−The problem of proving that one message was sent before any later ones
87−inverts the problem. You can solve this with newspapers by placing the message
88−in the text of the newspaper. While reading a newspaper requires no
89−central party, writing one does. For a long time, this sort of message was
90−always handled by a central party. SSL revocations are managed by a few central
91−parties. When you buy property, it's not sufficient to have the previous owner
92−sign the title — this must be entered into a central land registry. Otherwise,
93−the owner may sell their property to multiple people and there would be no way
94−to determine who is the new owner. With the land registry, all you need to do is
95−ask the registry which sale happened first, and that's the one that counts.
96−
97−<a name="1"></a>
98−Again, Urbit is yours and it's forever. Trusting central registries
99−jeopardizes both. The keen reader will notice that the problem of determining
100−which key rotation happened first is exactly the double-spend problem that
101−Satoshi solved with his proof of work algorithm for Bitcoin. His first block
102−famously includes a newspaper headline to prove he didn't mine the block before
103−that date. In a beautiful duality, his own algorithm proves that he didn't mine
104−it after that date.<sup><a href="#f1">[1]</a></sup>
105−
106−Some argue that blockchain is only good for money. This is myopic and is
107−generally based on the experience that its most valuable application so far has
108−been money. The deeper problem that the blockchain cryptographic primitive
109−allows one to solve a previously impossible task: prove that one message was
110−signed before another without a central party. Blockchain was discovered by
111−someone trying to create digital money, and he needed that primitive, but that
112−doesn't mean that's all it's good for.
113−
114−<a name="2"></a>
115−Thus, we store our PKI data on a blockchain for our second kind of name:
116−[planets](/docs/glossary/planet). A planet is a 32-bit address which has key
117−information stored on the blockchain.<sup><a href="#f2">[2]</a></sup>
118−The owner of a planet may broadcast new PKI data by adding it to the
119−blockchain. Any later messages by the old keys will be rejected, and everyone
120−on the network will listen to the blockchain for key data. Thus, we have global
121−consistency, permanence, and self sovereignty. We know of no other solution
122−that can provide these properties.
123−
124−<a name="3"></a>
125−While small individually, the aggregate PKI data for all nodes on the
126−network may become very large. This is not an issue for comets because nobody
127−needs to store comet keys except for those which they're talking with, and even
128−those can be garbage-collected and re-requested and verified. For planets, there
129−is a canonical set of keys, and somebody must store that. There are about
130−2<sup>32</sup>, or 4 billion planets. If the PKI data is about 100 bytes for
131−each planet, this is about 400 GB of data. This may be more than most users wish
132−to store, but it's small enough that it would be very cheap for someone to host
133−this data for many users<sup><a href="#f3">[3]</a></sup>.
134−
135−This information is currently stored directly on the Ethereum 1.0 blockchain,
136−but as is well understood in blockchain circles this approach will not scale
137−beyond a certain point. This moment came to be sometime in 2020. In reaction to
138−this state of affairs, Tlon developed a "layer 2" scaling solution known as
139−[naive rollups](/docs/glossary/rollups). This allows users to submit compressed
140−PKI transactions to Ethereum as batches and compute the resulting change in PKI
141−state locally, dramatically reducing gas costs to the point that Tlon offers a
142−free-to-use public "roller" which aggregates transactions and submits them as a
143−batch.
144−
145−Of course, 4 billion is not enough addresses for every device on the planet today,
146−much less in a few decades. So, we apply our maxim of re-examining our choices
147−at each level for each use case. Examining the idea maze above, we cannot use
148−the blockchain option for everything since the data is too big. However, it's
149−not actually necessary for each of your devices to have its own self-sovereign
150−identity separate from your planet. So we choose the option of using a central
151−registry: your own planet.
152−
153−We allocate 4 billion "moons" to each of those planets. A moon is a 64-bit
154−address whose 32-bit suffix is its planet. Your planet can easily store the keys
155−for its own moons, and anyone who needs to talk to your moons can ask you for
156−the keys.
157−
158−This is the sense in which moons are true ships: they're permanent names and you
159−own them completely, as long as you own the planet. But they're not
160−independent ships — their keys can always be revoked by their planet.
161−
162−To create a sane network, we require global consistency for all our names. There
163−are three other properties; pick any two:
164
53
165- Comets are impermanent, self sovereign, and plentiful.
54- Comets are impermanent, self sovereign, and plentiful.
166
55
@@ -168,36 +57,10 @@ are three other properties; pick any two:
168
57
169- Moons are permanent, not self sovereign, and plentiful.
58- Moons are permanent, not self sovereign, and plentiful.
170
59
171−<a name="4"></a>
60+Fancifully, comets are wayward celestial bodies that are great for testing and miscellaneous low-value things that won't last for long. Planets are where you can build a home and shape it into anything you want it to be. People can always find your planet; it's not going anywhere. Moons are useful for special purposes, like storage, heavy industry, and anything else you might want to do off-planet.[^4]
172−Fancifully, comets are wayward celestial bodies that are great for testing and
61+
173−miscellaneous low-value things that won't last for long. Planets are where you
62+[^0]: Or the equivalent with a hierarchical key structure. In practice, you want to have a master key which signs a junior key for everyday use. You use the master key to rotate the junior key.
174−can build a home and shape it into anything you want it to be. People can always
63+[^1]: More strictly: it proves that he didn't mine it after the other blocks currently on the Bitcoin blockchain. It only gives an ordering within the chain, not a literal timestamp.
175−find your planet; it's not going anywhere. Moons are useful for special
64+[^2]: In addition to planets, there are stars and galaxies. From a PKI perspective they're treated exactly like planets, but on the network they provide infrastructure services like routing.
176−purposes, like storage, heavy industry, and anything else you might want to do
65+[^3]: In practice, this will likely be an included service by your sponsoring star. It could be a separate service, but it will be very cheap because it's a commodity and the "cost of production" is very cheap. At any rate, it should never rise above the capital cost of a 400GB hard drive.
177−off-planet.<sup><a href="#f4">[4]</a></sup>
66+[^4]: To extend the metaphor, stars are a neighborhood to live in -- they're easier for other planets to see, so when they want to send you a message they look for your star first. If they don't even know where your star is, they can certainly find your star's galaxy, and that will be enough to locate the star. Of course, if your star is not providing satisfactory service, you can take your planet and move to another star.
178−
179−
180−<a name="f0" href="#0">[0]</a>: Or the equivalent with a hierarchical key
181−structure. In practice, you want to have a master key which signs a junior key
182−for everyday use. You use the master key to rotate the junior key.
183−
184−<a name="f1" href="#1">[1]</a>: More strictly: it proves that he didn't mine it
185−after the other blocks currently on the Bitcoin blockchain. It only gives an
186−ordering within the chain, not a literal timestamp.
187−
188−<a name="f2" href="#2">[2]</a>: In addition to planets, there are stars and
189−galaxies. From a PKI perspective they're treated exactly like planets, but on
190−the network they provide infrastructure services like routing.
191−
192−<a name="f3" href="#3">[3]</a>: In practice, this will likely be an included
193−service by your sponsoring star. It could be a separate service, but it will be
194−very cheap because it's a commodity and the "cost of production" is very cheap.
195−At any rate, it should never rise above the capital cost of a 400GB hard drive.
196−
197−<a name="f4" href="#4">[4]</a>: To extend the metaphor, stars are a
198−neighborhood to live in -- they're easier for other planets to see, so when
199−they want to send you a message they look for your star first. If they don't
200−even know where your star is, they can certainly find your star's galaxy, and
201−that will be enough to locate the star. Of course, if your star is not
202−providing satisfactory service, you can take your planet and move to another
203−star.
content/using/id/using-bridge.md+1−1
@@ -73,7 +73,7 @@ Click `Generate ->`, which will download a keyfile onto your machine.
73
73
74With that keyfile in hand, you can now exit Bridge and continue to the guide to [install the Urbit binary](/getting-started/).
74With that keyfile in hand, you can now exit Bridge and continue to the guide to [install the Urbit binary](/getting-started/).
75
75
76−### Escaping your sponsor {#escaping-your-sponsor}
76+### Escaping your sponsor {% #escaping-your-sponsor %}
77
77
78As a planet or star, it behooves you to be sponsored by an active star or galaxy,
78As a planet or star, it behooves you to be sponsored by an active star or galaxy,
79respectively. If your sponsor isn't suiting your needs, you can escape to a
79respectively. If your sponsor isn't suiting your needs, you can escape to a
content/using/os/basics.md+10−10
@@ -134,7 +134,7 @@ On startup, urbit tries to bind to `localhost:80`. If you're already running som
134
134
135Once running, you can sign into your ship’s web interface from `http://localhost` (if bound to port `80`), `http://localhost:8080` (if bound to port `8080`), or `https://your-urbit.arvo.network` if you've set up DNS.
135Once running, you can sign into your ship’s web interface from `http://localhost` (if bound to port `80`), `http://localhost:8080` (if bound to port `8080`), or `https://your-urbit.arvo.network` if you've set up DNS.
136
136
137−## Moons {#moons}
137+## Moons {% #moons %}
138
138
139Planets can spawn moons, which are conceptually meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
139Planets can spawn moons, which are conceptually meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
140
140
@@ -178,21 +178,23 @@ To cycle the keys of a moon without a factory reset, run:
178
178
179You can then run `|rekey` on the moon with the key given by the above command as the argument.
179You can then run `|rekey` on the moon with the key given by the above command as the argument.
180
180
181−### Maintaining Moons Through A Breach {#restoring-moons}
181+### Maintaining Moons Through A Breach {% #restoring-moons %}
182
182
183Moons are [always subordinate to the ship that issued them](/docs/glossary/moon). Their PKI is sent around the network by their parent planet/star/galaxy. As such, if the sponsor planet/star/galaxy of a moon breaches, other urbits on the network who were not aware of the moon prior to the breach (knew its PKI information) will not be able to reach the old moon. Moons can, however, be preserved over the breach of their sponsor and re-added to `jael`. The following guide assumes you are on `[life=n rift=1]` where `n` can be any life #. If you've previously breached your moon and want to preserve it, you'll need to modify the instructions to include setting the appropriate rift using `|moon-breach` from `hood`.
183Moons are [always subordinate to the ship that issued them](/docs/glossary/moon). Their PKI is sent around the network by their parent planet/star/galaxy. As such, if the sponsor planet/star/galaxy of a moon breaches, other urbits on the network who were not aware of the moon prior to the breach (knew its PKI information) will not be able to reach the old moon. Moons can, however, be preserved over the breach of their sponsor and re-added to `jael`. The following guide assumes you are on `[life=n rift=1]` where `n` can be any life #. If you've previously breached your moon and want to preserve it, you'll need to modify the instructions to include setting the appropriate rift using `|moon-breach` from `hood`.
184
184
185To add an existing moon to `jael` on a breached planet, you'll need the following:
185To add an existing moon to `jael` on a breached planet, you'll need the following:
186
186
187− - Your moon's current life # `+keys ~sampel-monler-dozzod-dozzod` (run on the moon) _and_;
187+- Your moon's current life # `+keys ~sampel-monler-dozzod-dozzod` (run on the moon) _and_;
188− - Your moon's sponsor's understanding of your moon's current life (same command, run on the sponsor).
188+- Your moon's sponsor's understanding of your moon's current life (same command, run on the sponsor).
189− - Your moon's existing keyfile or key-string (`@uw`) _or_ the result of `pub:ex:(nol:nu:crub:crypto .^(@uv %j /=vein=/<life # of moon, per moon, here>))` _and_;
189+- Your moon's existing keyfile or key-string (`@uw`) _or_ the result of `pub:ex:(nol:nu:crub:crypto .^(@uv %j /=vein=/<life # of moon, per moon, here>))` _and_;
190− - Your moon's sponsor's understanding of your moon's existing public key `pass:.^([@ud pass=@uw ~] %j /=deed=/~sampel-monler-dozzod-dozzod/<life # of moon per sponsor here>)`.
190+- Your moon's sponsor's understanding of your moon's existing public key `pass:.^([@ud pass=@uw ~] %j /=deed=/~sampel-monler-dozzod-dozzod/<life # of moon per sponsor here>)`.
191
191
192If you only have they keyfile or key-string from your moon's last boot, you'll need to derive the `pass` value from that using
192If you only have they keyfile or key-string from your moon's last boot, you'll need to derive the `pass` value from that using
193+
193```
194```
194pub:ex:(nol:nu:crub:crypto key:(seed:jael:l (cue <your @uw keyfile contents or key-string contents here>)))
195pub:ex:(nol:nu:crub:crypto key:(seed:jael:l (cue <your @uw keyfile contents or key-string contents here>)))
195```
196```
197+
196This should produce a long `@ud`.
198This should produce a long `@ud`.
197
199
198Once you have all of the requisite elements, you can perform the following on the moon's sponsor:
200Once you have all of the requisite elements, you can perform the following on the moon's sponsor:
@@ -203,9 +205,7 @@ Once you have all of the requisite elements, you can perform the following on th
203
205
204Eventually, the PKI will populate through the network w/ the correct life #, reconnecting your previously orphaned moon. You can speed this up by `|hi ~zod` and `|hi ~sampel-monler-dozzod-dozzod`-ing from the moon and sponsor, respectively (replace with the appropriate ship names).
206Eventually, the PKI will populate through the network w/ the correct life #, reconnecting your previously orphaned moon. You can speed this up by `|hi ~zod` and `|hi ~sampel-monler-dozzod-dozzod`-ing from the moon and sponsor, respectively (replace with the appropriate ship names).
205
207
206−
208+## Escaping A Sponsor {% #escape %}
207−
208−## Escaping A Sponsor {#escape}
209
209
210To use the network as a planet or star, you must be sponsored by an active star
210To use the network as a planet or star, you must be sponsored by an active star
211or galaxy, respectively. If your sponsor isn't suiting your needs, you can
211or galaxy, respectively. If your sponsor isn't suiting your needs, you can
@@ -218,7 +218,7 @@ escape to a different one. This can be done with
218You can check your ship's _life_ and _rift_ number by running `+keys our` in
218You can check your ship's _life_ and _rift_ number by running `+keys our` in
219dojo. You can inspect another ship's life and rift number by running `+keys ~sampel-palnet`. For information on what life and rift are, see [Life and Rift](/docs/azimuth/life-and-rift).
219dojo. You can inspect another ship's life and rift number by running `+keys ~sampel-palnet`. For information on what life and rift are, see [Life and Rift](/docs/azimuth/life-and-rift).
220
220
221−## DNS setup {#dns-setup}
221+## DNS setup {% #dns-setup %}
222
222
223We have a system that lets you request a domain name for your ship in the form of `ship.arvo.network`, where `ship` is your ship's name minus the `~`. This allows users to access their ships remotely using Landscape, our graphical web interface. Stars and planets follow the same DNS request process, and galaxies have their own requirements. Moons and comets are not supported.
223We have a system that lets you request a domain name for your ship in the form of `ship.arvo.network`, where `ship` is your ship's name minus the `~`. This allows users to access their ships remotely using Landscape, our graphical web interface. Stars and planets follow the same DNS request process, and galaxies have their own requirements. Moons and comets are not supported.
224
224
content/using/os/messaging.md+3−2
@@ -63,7 +63,8 @@ In order to see messages in `:chat-cli` you may need to do the following in Dojo
63```
63```
64:chat-cli %connect
64:chat-cli %connect
65```
65```
66− ### Creating and managing chats {#chat-management}
66+
67+### Creating and managing chats {% #chat-management %}
67
68
68As mentioned before, any urbit can host any number of chats. Existing chats can be deleted or modified with various commands. All commands in this section should be sent from the `chat-cli>` prompt.
69As mentioned before, any urbit can host any number of chats. Existing chats can be deleted or modified with various commands. All commands in this section should be sent from the `chat-cli>` prompt.
69
70
@@ -72,6 +73,7 @@ As mentioned before, any urbit can host any number of chats. Existing chats can
72Syntax: `;create [type] /name +`, where `+` represents an optional glyph.
73Syntax: `;create [type] /name +`, where `+` represents an optional glyph.
73
74
74Creates and joins a chat, where `[type]` is any of the following:
75Creates and joins a chat, where `[type]` is any of the following:
76+
75- `channel`: public chat. Has a blacklist for write control.
77- `channel`: public chat. Has a blacklist for write control.
76- `village`: invite-only chat.
78- `village`: invite-only chat.
77- `journal`: publicly readable, invite-only for writing.
79- `journal`: publicly readable, invite-only for writing.
@@ -192,7 +194,6 @@ There are a few special-purpose "glyphs":
192- `|` - Informational messages
194- `|` - Informational messages
193- `*` - Posts to a target you don't have a glyph binding for
195- `*` - Posts to a target you don't have a glyph binding for
194
196
195−
196### Configuration
197### Configuration
197
198
198#### Set audience
199#### Set audience
content/using/os/ship-troubleshooting.md+6−6
@@ -18,7 +18,7 @@ If your issue is not covered here, please check out our [Troubleshooting Knowled
18- [Booting issues](#booting-issues)
18- [Booting issues](#booting-issues)
19- [Crashing issues](#crashing-issues)
19- [Crashing issues](#crashing-issues)
20
20
21−## Best Practices {#best-practices}
21+## Best Practices {% #best-practices %}
22
22
23An ounce of prevention is worth a pound of cure, so let's first go over some best practices to keep your ship in working order.
23An ounce of prevention is worth a pound of cure, so let's first go over some best practices to keep your ship in working order.
24
24
@@ -68,7 +68,7 @@ The command takes two arguments, and comes in the form of `|knob %error-tag %lev
68
68
69So for example, to silence all Ames packet-related errors, try `|knob %hole %hush`.
69So for example, to silence all Ames packet-related errors, try `|knob %hole %hush`.
70
70
71−### Perform a factory reset. {#factory-reset}
71+### Perform a factory reset. {% #factory-reset %}
72
72
73A factory reset is when a ship tells the rest of the network to treat it as though the ship was just started for the first time again. Any ongoing or outstanding communication is forgotten and connections are reestablished from scratch.
73A factory reset is when a ship tells the rest of the network to treat it as though the ship was just started for the first time again. Any ongoing or outstanding communication is forgotten and connections are reestablished from scratch.
74
74
@@ -88,7 +88,7 @@ regularly. You may do so by entering `|code %reset` into dojo. Doing this
88will prevent [Bridge](/docs/glossary/bridge) from being able to derive your code,
88will prevent [Bridge](/docs/glossary/bridge) from being able to derive your code,
89meaning you will only be able to check it from dojo in the future.
89meaning you will only be able to check it from dojo in the future.
90
90
91−## Operation Issues {#operation-issues}
91+## Operation Issues {% #operation-issues %}
92
92
93### My urbit is frozen
93### My urbit is frozen
94
94
@@ -104,7 +104,7 @@ This happens when your Dojo is waiting on a request, such as an HTTP request. Yo
104
104
105Since version `0.8.0`, changes no longer automatically sync between the Unix side (your pier) and your ship. To sync your file changes, you must run `|commit %desk` in your Dojo, where `%desk` is the desk you'd like to sync.
105Since version `0.8.0`, changes no longer automatically sync between the Unix side (your pier) and your ship. To sync your file changes, you must run `|commit %desk` in your Dojo, where `%desk` is the desk you'd like to sync.
106
106
107−## Connectivity Issues {#connectivity-issues}
107+## Connectivity Issues {% #connectivity-issues %}
108
108
109### I can't communicate with anyone
109### I can't communicate with anyone
110
110
@@ -156,7 +156,7 @@ The above commands work if you have the wrong keys of other ships. If other ship
156This is usually the result of deleting your pier and starting your ship again. To fix
156This is usually the result of deleting your pier and starting your ship again. To fix
157this, you must perform a [factory reset](#factory-reset).
157this, you must perform a [factory reset](#factory-reset).
158
158
159−## Booting Issues {#booting-issues}
159+## Booting Issues {% #booting-issues %}
160
160
161### My ship booted for the first time, but it turned into a comet instead of my planet or star
161### My ship booted for the first time, but it turned into a comet instead of my planet or star
162
162
@@ -166,7 +166,7 @@ You may have used the wrong arguments when booting your ship for the first time.
166
166
167This means that you gave your development ship an invalid `@p`. So, you will get this error if you write, for example, `urbit -F zodzod` instead of `urbit -F zod`.
167This means that you gave your development ship an invalid `@p`. So, you will get this error if you write, for example, `urbit -F zodzod` instead of `urbit -F zod`.
168
168
169−## Crashing Issues {#crashing-issues}
169+## Crashing Issues {% #crashing-issues %}
170
170
171### I got a `bail` error and my ship crashed
171### I got a `bail` error and my ship crashed
172
172
lib/lib.js−2
@@ -1,5 +1,3 @@
1−import remark from "remark";
2−import html from "remark-html";
3import fs from "fs";
1import fs from "fs";
4import { join, parse } from "path";
2import { join, parse } from "path";
5import matter from "gray-matter";
3import matter from "gray-matter";
next.config.js+2−45
@@ -1,47 +1,4 @@
1−const withTM = require("next-transpile-modules")([
1+module.exports = {
2− "remark-parse",
3− "remark-gfm",
4− "remark-rehype",
5− "rehype-stringify",
6− "rehype-raw",
7− "micromark-core-commonmark",
8− "micromark-extension-gfm",
9− "micromark-util-combine-extensions",
10− "micromark-util-chunked",
11− "micromark-util-character",
12− "micromark-util-sanitize-uri",
13− "micromark-util-encode",
14− "micromark-util-classify-character",
15− "micromark-util-resolve-all",
16− "micromark-util-subtokenize",
17− "micromark-util-normalize-identifier",
18− "micromark-util-html-tag-name",
19− "micromark-util-decode-numeric-character-reference",
20− "micromark-util-decode-string",
21− "micromark-factory-destination",
22− "micromark-factory-label",
23− "micromark-factory-space",
24− "micromark-factory-title",
25− "micromark-factory-whitespace",
26− "mdast-util-gfm",
27− "ccount",
28− "mdast-util-find-and-replace",
29− "hast-util-raw",
30− "hast-util-from-parse5",
31− "hast-util-to-parse5",
32− "hast-util-parse-selector",
33− "hast-to-hyperscript",
34− "hastscript",
35− "unist-util-visit-parents",
36− "unist-util-is",
37− "vfile-location",
38− "web-namespaces",
39− "mdast-util-to-markdown",
40− "mdast-util-from-markdown",
41− "markdown-table",
42−]);
43−
44−module.exports = withTM({
45 reactStrictMode: false,
2 reactStrictMode: false,
46 // target: 'serverless',
3 // target: 'serverless',
47 webpack: (config, { isServer }) => {
4 webpack: (config, { isServer }) => {
@@ -66,4 +23,4 @@ module.exports = withTM({
66 // }
23 // }
67 return config;
24 return config;
68 },
25 },
69−});
26+};
package-lock.json+1551−4641

This diff is too big to show here.

package.json+6−11

This diff is too big to show here.

pages/applications/[[...application]].js+6−3

This diff is too big to show here.

pages/audits.js+2−2

This diff is too big to show here.

pages/bitcoin-wallet.js+2−2

This diff is too big to show here.

pages/blog/[slug].js+4−8

This diff is too big to show here.

pages/coinmarketcap.js+2−2

This diff is too big to show here.

pages/community/[[...slug]].js+5−9

This diff is too big to show here.

pages/docs/[[...slug]].js+4−9

This diff is too big to show here.

pages/events.js+1−8

This diff is too big to show here.

pages/events/[slug].js+4−12

This diff is too big to show here.

pages/faq.js+2−3

This diff is too big to show here.

pages/getting-started/[[...slug]].js+3−6

This diff is too big to show here.

pages/grants/[slug].js+4−12

This diff is too big to show here.

pages/grants/apprenticeships.js+2−16

This diff is too big to show here.

pages/grants/bounties.js+2−17

This diff is too big to show here.

pages/grants/proposals.js+2−16

This diff is too big to show here.

pages/groups/[[...group]].js+6−4

This diff is too big to show here.

pages/ids/[id].js+6−3

This diff is too big to show here.

pages/index.js−25

This diff is too big to show here.

pages/media/[slug].js+3−8

This diff is too big to show here.

pages/privacy.js+2−2

This diff is too big to show here.

pages/terms-of-service.js+2−3

This diff is too big to show here.

pages/understanding-urbit/[[...slug]].js+4−8

This diff is too big to show here.

pages/updates.js−2

This diff is too big to show here.

pages/updates/[slug].js+4−15

This diff is too big to show here.

pages/using/[[...slug]].js+4−8

This diff is too big to show here.

pages/voting-instructions.js+2−3

This diff is too big to show here.

patches/@markdoc+markdoc+0.1.2.patchnew file+1409

This diff is too big to show here.

styles/globals.css+6−2

This diff is too big to show here.

styles/markdown.css+17−3

This diff is too big to show here.