on 7bb11e7 help sign in
.gitignore+10−44
since splitsnapshots
unifiedsplit
@@ -1,46 +1,12 @@
1−# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
1+# intermediate
2−
2+*.swo
3+*.swp
4+*.o
5+/outside/**/*.a
6+/outside/re2/obj
7+# build
8+public/
3# dependencies
9# dependencies
4−/node_modules
5−/.pnp
6−.pnp.js
7−
8−# testing
9−/coverage
10−
11−# next.js
12−/.next/
13−/out/
14−.next
15−
16−# production
17−/build
18−/cache
10+.sass-cache
19−
11+# OS
20−# misc
21.DS_Store
12.DS_Store
22−*.pem
23−
24−# debug
25−npm-debug.log*
26−yarn-debug.log*
27−yarn-error.log*
28−
29−# local env files
30−.env
31−.env.local
32−.env.development.local
33−.env.test.local
34−.env.production.local
35−
36−# vercel
37−.vercel
38−
39−# editors
40−/.nova/
41−
42−# rss
43−public/rss.xml
44−
45−yarn.lock
46−
.gitmodulesnew file+3
@@ -0,0 +1,3 @@
1+[submodule "content/docs"]
2+ path = content/docs
3+ url = git@github.com:urbit/docs.git
.npmrcdeleted−1
@@ -1 +0,0 @@
1−unsafe-perm = true
.nvmrcdeleted−1
@@ -1 +0,0 @@
1−14
.prettierrcdeleted−5
@@ -1,5 +0,0 @@
1−{
2− "tabWidth": 2,
3− "useTabs": false,
4− "printWidth": 80
5−}
README.md+11−52
@@ -1,58 +1,17 @@
1−The website for Urbit is maintained by the Urbit Foundation and the Urbit community. Issues and contributions are welcome.
1+# urbit.org
2
2
3−## Getting Started
3+[![Netlify Status](https://api.netlify.com/api/v1/badges/71f99a93-7b2e-4e10-b74d-7cbbb2e6dacd/deploy-status)](https://app.netlify.com/sites/urbit-org/deploys)
4
4
5−1. Fork the [Urbit site repository](https://github.com/urbit/urbit.org).
5+The website for the Urbit project.
6
6
7−2. [Create a local clone](https://help.github.com/articles/cloning-a-repository/) of your fork.
7+## Build
8
8
9−3. Navigate to the `urbit.org` directory and install Node 14 using [nvm](https://github.com/nvm-sh/nvm):
9+1. git clone this repository
10+2. Install [zola@0.8.0](https://github.com/getzola/zola/releases/tag/v0.8.0) (see [Installation](https://www.getzola.org/documentation/getting-started/installation/))
11+3. `git submodule init`
12+4. `git submodule update`
13+5. In the root directory of `urbit.org`, run `zola serve`
10
14
11− ```shell
15+## Deploy
12− cd urbit.org
13− nvm install 14
14− ```
15− You can then run `nvm use` whenever in the repository (or automate it with a script - see [here](https://github.com/nvm-sh/nvm#deeper-shell-integration)).
16
16
17−4. Install our dependencies:
17+Commits to master are automatically deployed with Netlify.
18−
19− ```shell
20− npm install
21− ```
22−
23− If running an arm64 Mac (M1 or later), you may need to install some dependencies to compile canvas, one of our dependencies. Assuming you have [Homebrew](https://brew.sh):
24−
25− ```shell
26− arch -arm64 brew install pkg-config cairo pango libpng jpeg giflib librsvg
27− ```
28−
29−5. Run the development server:
30−
31− ```shell
32− npm run dev
33− # or
34− yarn dev
35− ```
36−
37− Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
38−
39−To learn more about contributing, see GitHub's [documentation](https://docs.github.com/en/get-started/quickstart/contributing-to-projects).
40−
41−## Framework and Library Documentation
42−
43−To learn more about Next.js, take a look at the following resources:
44−
45−- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
46−- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
47−
48−To learn more about Tailwind CSS, take a look at the docs:
49−
50−- [Tailwind CSS Docs](https://tailwindcss.com/docs) - Docs
51−
52−## Deployment
53−
54−We deploy using Vercel. All pull requests will show a deployment preview via the same.
55−
56−## Upgrades
57−
58−The `/scripts` contains scripts used to programmatically upgrade site content data.
components/BackgroundImage.jsdeleted−9
@@ -1,9 +0,0 @@
1−// Easily crops images
2−export default function BackgroundImage(props) {
3− return (
4− <div
5− className={`bg-img bg-cover ${props.className || ""}`}
6− style={{ backgroundImage: `url(${props.src})`, ...props.style }}
7− />
8− );
9−}
components/BasicPage.jsdeleted−46
@@ -1,46 +0,0 @@
1−import { useRouter } from "next/router";
2−import Head from "next/head";
3−import Meta from "../components/Meta";
4−import ErrorPage from "../pages/404";
5−import {
6− Container,
7− SingleColumn,
8− Section,
9− Markdown,
10− IntraNav,
11− TableOfContents,
12−} from "@urbit/foundation-design-system";
13−import Header from "./Header";
14−import Footer from "./Footer";
15−import classNames from "classnames";
16−
17−export default function BasicPage({ post, markdown, search, index = false }) {
18− const router = useRouter();
19− if (!router.isFallback && !post?.slug) {
20− return <ErrorPage />;
21− }
22− return (
23− <Container>
24− <Head>
25− <title>{post.title}</title>
26− {Meta(post)}
27− </Head>
28− <IntraNav ourSite="https://urbit.org" search={search} />
29− <SingleColumn>
30− <Header search={search} />
31− <Section>
32− <h1>{post.title}</h1>
33− </Section>
34− <Section>
35− <div className={classNames("flex", { sidebar: index })}>
36− <div className={classNames("markdown", { "max-w-prose": index })}>
37− <Markdown.render content={JSON.parse(markdown)} />
38− </div>
39− {index && <TableOfContents />}
40− </div>
41− </Section>
42− </SingleColumn>
43− <Footer />
44− </Container>
45− );
46−}
components/Contact.jsdeleted−16
@@ -1,16 +0,0 @@
1−import NewsletterSignup from "./NewsletterSignup";
2−
3−export default function Contact({
4− emphasize,
5− ecosystem = false,
6− className = "",
7−}) {
8− const linkText = emphasize ? "text-green-400" : "text-wall-600";
9− const border = emphasize ? "border-green-400" : "border-wall-600";
10−
11− return (
12− <div className={className}>
13− <NewsletterSignup color={border} />
14− </div>
15− );
16−}
components/ContentArea.jsdeleted−86
@@ -1,86 +0,0 @@
1−import { useState, useEffect, useRef } from "react";
2−import { useRouter } from "next/router";
3−import { TableOfContents } from "@urbit/foundation-design-system";
4−
5−export default function ContentArea(props) {
6− const [shortcut, setShortcut] = useState("");
7−
8− const detectOS = () => {
9− const agent = window.navigator.appVersion;
10− if (agent.includes("Win")) {
11− return "Ctrl+K";
12− } else if (agent.includes("Mac")) {
13− return "⌘K";
14− } else if (agent.includes("Linux")) {
15− return "Ctrl+K";
16− }
17− };
18−
19− useEffect(() => {
20− setShortcut(detectOS());
21− }, []);
22−
23− const scrollBox = useRef();
24−
25− const router = useRouter();
26−
27− useEffect(() => {
28− const handleRouteChange = () => {
29− if (scrollBox.current === null) return;
30− scrollBox.current.scrollTop = 0;
31− };
32−
33− router.events.on("routeChangeComplete", handleRouteChange);
34−
35− // If the component is unmounted, unsubscribe
36− // from the event with the `off` method:
37− return () => {
38− router.events.off("routeChangeStart", handleRouteChange);
39− };
40− }, []);
41−
42− return (
43− <div className="w-full min-w-0 flex flex-col items-center bg-white">
44− <div
45− ref={scrollBox}
46− className="px-4 md:px-12 lg:px-24 pt-8 md:pt-10 lg:pt-16 flex flex-col w-full max-w-screen-xl max-h-screen h-screen overflow-y-scroll"
47− >
48− <div className="flex justify-between w-full items-center shrink-0">
49− <div className="font-semibold antialiased text-lg text-black">
50− {props.breadcrumbs}
51− </div>
52− <div className="hidden md:block">
53− <button
54− onClick={(e) => {
55− e.stopPropagation();
56− props.search.toggleSearch();
57− }}
58− className="bg-wall-100 text-wall-500 flex px-4 py-1 rounded-lg type-ui"
59− >
60− Search<div className="ml-4 text-wall-400">{shortcut}</div>
61− </button>
62− </div>
63− </div>
64− <div className="flex justify-between">
65− <div className="min-w-0 max-w-screen-md">
66− <div className="mb-16">
67− <h2 className="mt-24">{props.title}</h2>
68− {props?.description && (
69− <p className="text-wall-400 font-regular mt-2 text-xl">
70− {props.description}
71− </p>
72− )}
73− </div>
74− {props.children}
75− <div className="pb-24" />
76− </div>
77− {!props?.disableToC && (
78− <TableOfContents
79− key={props.params.slug?.join("/") || Math.random()}
80− />
81− )}
82− </div>
83− </div>
84− </div>
85− );
86−}
components/CopyLink.jsdeleted−61
@@ -1,61 +0,0 @@
1−import { useCopyToClipboard } from "../lib/hooks";
2−
3−export default function CopyLink({ content, className }) {
4− const [copyStatus, copy] = useCopyToClipboard(content);
5−
6− const buttonIcon =
7− copyStatus === "inactive" ? (
8− <svg
9− width="16"
10− height="16"
11− viewBox="0 0 16 16"
12− className="fill-white"
13− xmlns="http://www.w3.org/2000/svg"
14− >
15− <path
16− fillRule="evenodd"
17− clipRule="evenodd"
18− d="M3.2 1.6C3.2 0.716344 3.91634 0 4.8 0H11.3615L14.9333 2.38124V12.2667C14.9333 13.1503 14.217 13.8667 13.3333 13.8667H12.8V14.4C12.8 15.2837 12.0837 16 11.2 16H2.66667C1.78301 16 1.06667 15.2837 1.06667 14.4V3.73333C1.06667 2.84968 1.78301 2.13333 2.66667 2.13333H3.2V1.6ZM3.2 3.2H2.66667C2.37211 3.2 2.13333 3.43878 2.13333 3.73333V14.4C2.13333 14.6946 2.37211 14.9333 2.66667 14.9333H11.2C11.4946 14.9333 11.7333 14.6946 11.7333 14.4V13.8667H4.8C3.91634 13.8667 3.2 13.1503 3.2 12.2667V3.2Z"
19− />
20− </svg>
21− ) : copyStatus === "copied" ? (
22− <svg
23− width="16"
24− height="16"
25− viewBox="0 0 16 16"
26− xmlns="http://www.w3.org/2000/svg"
27− >
28− <path
29− fillRule="evenodd"
30− clipRule="evenodd"
31− d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM7.54325 11.4247L12.1498 5.66647L11.3169 5.00013L7.39013 9.90859L4.60812 7.59025L3.92526 8.40969L7.54325 11.4247Z"
32− />
33− </svg>
34− ) : (
35− <svg
36− width="16"
37− height="16"
38− viewBox="0 0 16 16"
39− className="fill-white"
40− xmlns="http://www.w3.org/2000/svg"
41− >
42− <path
43− fillRule="evenodd"
44− clipRule="evenodd"
45− d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM10.8229 11.5772L8.00004 8.75429L5.17716 11.5772L4.42292 10.8229L7.24579 8.00004L4.42292 5.17716L5.17716 4.42292L8.00004 7.24579L10.8229 4.42292L11.5772 5.17716L8.75429 8.00004L11.5772 10.8229L10.8229 11.5772Z"
46− />
47− </svg>
48− );
49−
50− return (
51− <button
52− className={`bg-wall-600 p-4 rounded-xl button-sm text-white flex items-center justify-center space-x-2 ${className}`}
53− onClick={() => copy()}
54− >
55− <p className="leading-5">
56− {copyStatus === "copied" ? "Copied" : "Shortcode"}
57− </p>
58− {buttonIcon}
59− </button>
60− );
61−}
components/DocsSidebar.jsdeleted−32
@@ -1,32 +0,0 @@
1−import Link from "next/link";
2−import { useState } from "react";
3−import { MenuTray } from '@urbit/foundation-design-system'
4−
5−export default function Sidebar(props) {
6− const [isOpen, setTray] = useState(false);
7− return (
8− <>
9− <div className="hidden md:flex flex-col w-96 bg-wall-100 max-h-screen h-screen">
10− <header className="flex shrink-0 justify-between items-center pl-6 pt-12 mt-5 pb-8">
11− <Link href="/" passHref>
12− <a className="font-semibold antialiased text-lg text-wall-500">Urbit</a>
13− </Link>
14− </header>
15− <div className="overflow-y-auto p-6 pt-16">
16− {props.children}
17− <div className="pb-32" />
18− </div>
19− </div>
20−
21− <MenuTray isOpen={isOpen} setTray={setTray} search={props.search}>
22− <header className="flex shrink-0 justify-between items-center pb-8">
23− <Link href="/" passHref>
24− <a className="type-ui text-wall-500">Urbit</a>
25− </Link>
26− </header>
27− {props.children}
28− <div className="pt-64" />
29− </MenuTray>
30− </>
31− );
32−}
components/EventPreview.jsdeleted−92
@@ -1,92 +0,0 @@
1−import Link from "next/link";
2−import { DateTime } from "luxon";
3−import { DateRange } from "../components/Snippets";
4−import {
5− generateDisplayDate,
6− generateRealtimeDate,
7−} from "@urbit/foundation-design-system";
8−import classNames from "classnames";
9−
10−export default function EventPreview({ event, className, big }) {
11− // Event tiles have a 'dark mode' used when their background images are dark and white text is needed for legibility.
12− const grayText = event?.dark ? "text-white dark:text-black" : "text-wall-400";
13− const blackText = event?.dark
14− ? "text-white dark:text-black"
15− : "text-wall-600";
16−
17− const starts = generateDisplayDate(event.starts, event.timezone);
18− const ends = generateDisplayDate(event.ends, event.timezone);
19−
20− const inFuture = generateRealtimeDate(starts) > DateTime.now();
21−
22− const happeningNow =
23− generateRealtimeDate(event.starts) > DateTime.now() && !inFuture;
24−
25− return (
26− <div className={`cursor-pointer h-full ${className}`}>
27− <div
28− key={event.slug}
29− className={`bg-wall-100 min-h-[320px] h-full flex flex-col rounded-xl bg-cover bg-center bg-no-repeat `}
30− style={{ backgroundImage: `url(${event.image})` || "" }}
31− >
32− <Link href={`/events/${event.slug}`}>
33− <div
34− className={classNames(
35− "flex flex-col p-6 min-h-[320px] justify-between items-between h-full relative",
36− {
37− "backdrop-brightness-50 rounded-xl": Boolean(
38− event?.darken_image
39− ),
40− }
41− )}
42− >
43− <div
44− className={`grow-1 flex ${big ? "justify-center" : ""
45− } flex-col h-full`}
46− >
47− <h3 className={`${blackText} mb-2`} id={event.title}>{event.title}</h3>
48− <p className={blackText + " truncate text-sm"}>
49− {event.description}
50− </p>
51− </div>
52−
53− <div className="flex justify-between items-end">
54− <div className="">
55− <p className={`${blackText} type-sub mb-1`}>{event.location}</p>
56− <DateRange
57− starts={starts}
58− ends={ends}
59− className={`${grayText} type-sub`}
60− />
61− </div>
62−
63− {inFuture && event.registration_url ? (
64− <div>
65− <a
66− className="button-sm bg-green-400 text-white"
67− href={event.registration_url}
68− onClick={(e) => e.stopPropagation()}
69− target="_blank"
70− >
71− RSVP
72− </a>
73− </div>
74− ) : event.youtube ? (
75− <div className="shrink-0">
76− <a
77− className="button-sm bg-wall-600 text-white shrink-0"
78− href={`https://www.youtube.com/watch?v=${event.youtube}`}
79− onClick={(e) => e.stopPropagation()}
80− target="_blank"
81− >
82− ▶ Watch
83− </a>
84− </div>
85− ) : null}
86− </div>
87− </div>
88− </Link>
89− </div>
90− </div>
91− );
92−}
components/Footer.jsdeleted−6
@@ -1,6 +0,0 @@
1−import { Footer as FooterComponent } from "@urbit/foundation-design-system";
2−import { footerData } from "../lib/constants";
3−
4−export default function Footer() {
5− return <FooterComponent data={footerData} />;
6−}
components/GrantPreview.jsdeleted−63
@@ -1,63 +0,0 @@
1−import classnames from "classnames";
2−import Link from "next/link";
3−
4−export default function GrantPreview({ grant }) {
5− const isCompleted = grant.extra.completed;
6− const isOpen = !isCompleted && grant.extra.assignee?.[0] === "";
7− const type = grant.taxonomies.grant_type;
8−
9− const className = classnames({
10− "bg-lightBlue": type.includes("Proposal") && isOpen,
11− "bg-purple-200": type.includes("RFP") && isOpen,
12− "bg-yellow-100": type.includes("Bounty") && isOpen,
13− });
14−
15− return (
16− <div
17− key={grant.slug}
18− className={`mb-4 cursor-pointer bg-wall-100 rounded-lg ${className}`}
19− >
20− <Link href={`/grants/${grant.slug}`} passHref>
21− <a>
22− <div className="p-8">
23− <div className="flex items-center mb-4">
24− <h3 className="type-ui" id={grant.slug}>
25− {grant.title}
26− </h3>
27− <div className={`bg-wall-500 text-wall-100 badge-sm ml-2`}>
28− {!isCompleted ? (isOpen ? "Open" : "In Progress") : "Completed"}
29− </div>
30− </div>
31− <p className="mb-4">{grant.extra.description}</p>
32− <div className="flex w-full flex-col md:flex-row md:items-center justify-between">
33− <p className="text-wall-500">
34− <strong>Reward: </strong>
35− {grant.extra.reward}
36− </p>
37− <div className="flex items-center flex-wrap md:mt-0 mt-4">
38− {grant.taxonomies.grant_type.map((category) => {
39− const className = classnames({
40− "bg-blue-400 text-white": category === "Proposal",
41− "bg-purple text-white": category === "RFP",
42− "bg-green-400 text-white": category === "Apprenticeship",
43− "bg-yellow-300": category === "Bounty",
44− });
45− return (
46− <div className={`${className} badge-sm mr-1 my-1`}>
47− {category}
48− </div>
49− );
50− })}
51− {grant.taxonomies.grant_category.map((category) => (
52− <div className="bg-wall-500 text-wall-100 badge-sm mr-1 my-1">
53− {category}
54− </div>
55− ))}
56− </div>
57− </div>
58− </div>
59− </a>
60− </Link>
61− </div>
62− );
63−}
components/GrantProgramOverview.jsdeleted−59
@@ -1,59 +0,0 @@
1−import { useRouter } from "next/router";
2−import Link from "next/link";
3−import Head from "next/head";
4−import Meta from "../components/Meta";
5−import ErrorPage from "../pages/404";
6−import {
7− Container,
8− Section,
9− SingleColumn,
10− Markdown,
11− IntraNav,
12− formatDate,
13−} from "@urbit/foundation-design-system";
14−import Header from "./Header";
15−import Footer from "./Footer";
16−import { DateTime } from "luxon";
17−
18−export default function GrantProgramOverview({
19− post,
20− markdown,
21− search,
22− program,
23− actionLink,
24− actionText,
25−}) {
26− const router = useRouter();
27− if (!router.isFallback && !post?.slug) {
28− return <ErrorPage />;
29− }
30−
31− const title = program.charAt(0).toUpperCase() + program.slice(1);
32− return (
33− <Container>
34− <Head>
35− <title>{title} • Grants</title>
36− {Meta(post)}
37− </Head>
38− <IntraNav ourSite="https://urbit.org" search={search} />
39− <SingleColumn>
40− <Header search={search} />
41− <Section narrow short>
42− <h1>{post.title}</h1>
43− <div className="type-ui text-wall-500 mt-4 md:mt-8 lg:mt-10">
44− Last Revision: {formatDate(DateTime.fromISO(post.date))}
45− </div>
46− <Link href={actionLink} passHref>
47− <a className="button-sm bg-green-400 text-white mt-8 max-w-fit">
48− {actionText}
49− </a>
50− </Link>
51− </Section>
52− <Section narrow short className="markdown">
53− <Markdown.render content={JSON.parse(markdown)} />
54− </Section>
55− </SingleColumn>
56− <Footer />
57− </Container>
58− );
59−}
components/Header.jsdeleted−169
@@ -1,169 +0,0 @@
1−import Link from "next/link";
2−import { useRouter } from "next/router";
3−import { useState } from "react";
4−import classnames from "classnames";
5−import { capitalize, MenuTray } from "@urbit/foundation-design-system";
6−
7−function ActiveLink({ children, href, className, currentPath }) {
8− const firstCrumb = currentPath.split("/")[1];
9−
10− const activeClassName = classnames({
11− "text-wall-900": "/" + firstCrumb === href,
12− "text-wall-500": "/" + firstCrumb !== href,
13− });
14−
15− return (
16− <Link href={href} passHref>
17− <a className={`${className} ${activeClassName}`}>{children}</a>
18− </Link>
19− );
20−}
21−
22−export default function Header(props) {
23− const [isOpen, setTray] = useState(false);
24−
25− const currentPath = useRouter().asPath;
26−
27− const routeDepth = currentPath.split("/").length;
28−
29− const firstCrumb = currentPath.split("/")[1];
30−
31− return (
32− <header className="layout px-4 md:px-8 flex justify-between items-center pt-8 md:pt-10 lg:pt-12 pb-10 md:pb-12 lg:pb-24">
33− <div>
34− <Link href="/" passHref>
35− <a className="font-semibold text-lg">Urbit</a>
36− </Link>
37− {routeDepth > 2 ? (
38− <Link href={`/${firstCrumb}`} passHref>
39− <a className="inline md:hidden type-ui text-wall-500 ml-2">
40− {capitalize(firstCrumb)}
41− </a>
42− </Link>
43− ) : null}
44− </div>
45− {
46− // Large screen header
47− }
48− <nav className="items-center hidden md:flex">
49− <ActiveLink
50− currentPath={currentPath}
51− className="mr-5 type-ui"
52− href="/getting-started"
53− >
54− Get Started
55− </ActiveLink>
56−
57− <ActiveLink
58− currentPath={currentPath}
59− className="mr-5 type-ui"
60− href="/overview"
61− >
62− Overview
63− </ActiveLink>
64−
65− <ActiveLink
66− currentPath={currentPath}
67− className="mr-5 type-ui"
68− href="/ecosystem"
69− >
70− Ecosystem
71− </ActiveLink>
72−
73− <ActiveLink
74− currentPath={currentPath}
75− className="mr-5 type-ui"
76− href="/grants"
77− >
78− Grants
79− </ActiveLink>
80−
81− <ActiveLink
82− currentPath={currentPath}
83− className="mr-5 type-ui"
84− href="/events"
85− >
86− Events
87− </ActiveLink>
88−
89− <ActiveLink
90− currentPath={currentPath}
91− className="mr-5 type-ui"
92− href="/blog"
93− >
94− Blog
95− </ActiveLink>
96− </nav>
97−
98− {
99− // Small screen header
100− }
101− <MenuTray isOpen={isOpen} setTray={setTray} search={props.search}>
102− <Link href="/" passHref>
103− <a className="font-semibold mb-4">Urbit</a>
104− </Link>
105− <Link href="https://urbit.org" passHref>
106− <a className="font-semibold mt-2">Urbit.org</a>
107− </Link>
108− <Link href="https://operators.urbit.org" passHref>
109− <a className="mt-2">Operators</a>
110− </Link>
111− <Link href="https://developers.urbit.org" passHref>
112− <a className="mt-2">Developers</a>
113− </Link>
114− <Link href="https://roadmap.urbit.org" passHref>
115− <a className="mt-2 mb-4">Roadmap</a>
116− </Link>
117− <hr className="border-wall-200" />
118−
119− <ActiveLink
120− currentPath={currentPath}
121− className="mr-5 mt-4 mb-4 text-green-400"
122− href="/getting-started"
123− >
124− Get Started
125− </ActiveLink>
126−
127− <ActiveLink
128− currentPath={currentPath}
129− className="mr-5 mb-4"
130− href="/overview"
131− >
132− Overview
133− </ActiveLink>
134−
135− <ActiveLink
136− currentPath={currentPath}
137− className="mr-5 mb-4"
138− href="/ecosystem"
139− >
140− Ecosystem
141− </ActiveLink>
142−
143− <ActiveLink
144− currentPath={currentPath}
145− className="mr-5 mb-4"
146− href="/grants"
147− >
148− Grants
149− </ActiveLink>
150−
151− <ActiveLink
152− currentPath={currentPath}
153− className="mr-5 mb-4"
154− href="/events"
155− >
156− Events
157− </ActiveLink>
158−
159− <ActiveLink
160− currentPath={currentPath}
161− className="mr-5 mb-4"
162− href="/blog"
163− >
164− Blog
165− </ActiveLink>
166− </MenuTray>
167− </header>
168− );
169−}
components/HighlightCard.jsdeleted−22
@@ -1,22 +0,0 @@
1−import Link from "next/link";
2−export default function HighlightCard({ slug, highlight }) {
3− return (
4− <Link href={highlight.url}>
5− <div className="cursor-pointer bg-wall-100 rounded-xl min-h-0 flex-1">
6− <div className="flex flex-col p-4 h-full relative">
7− {highlight.image ? (
8− <div className="w-64 md:w-full rounded-xl object-cover overflow-hidden basis-3/5">
9− <img className="h-full w-64 md:w-full object-cover" src={highlight.image} />
10− </div>
11− ) : (
12− <div className="rounded-xl w-full"/>
13− )}
14− <div className="pt-4">
15− <p className="mb-2 font-semibold leading-5">{highlight.title}</p>
16− <p className="text-sm leading-5">{highlight?.description}</p>
17− </div>
18− </div>
19− </div>
20− </Link>
21− );
22−}
components/JoinGroup.jsdeleted−79
@@ -1,79 +0,0 @@
1−import { useCopyToClipboard } from "../lib/hooks";
2−
3−export default function Contact({ emphasize, groupName, label, className }) {
4− const [copyStatus, copy] = useCopyToClipboard(groupName);
5−
6− const linkText = emphasize ? "text-green-400" : "text-wall-600";
7− const border = emphasize ? "border-green-400" : "border-wall-600";
8− const washedBg = emphasize ? "bg-green-100" : "bg-wall-100";
9− const iconColor = emphasize ? "#00B171" : "#24221E";
10−
11− const buttonIcon =
12− copyStatus === "inactive" ? (
13− <svg
14− width="16"
15− height="16"
16− viewBox="0 0 16 16"
17− fill="none"
18− xmlns="http://www.w3.org/2000/svg"
19− >
20− <path
21− fillRule="evenodd"
22− clipRule="evenodd"
23− d="M3.2 1.6C3.2 0.716344 3.91634 0 4.8 0H11.3615L14.9333 2.38124V12.2667C14.9333 13.1503 14.217 13.8667 13.3333 13.8667H12.8V14.4C12.8 15.2837 12.0837 16 11.2 16H2.66667C1.78301 16 1.06667 15.2837 1.06667 14.4V3.73333C1.06667 2.84968 1.78301 2.13333 2.66667 2.13333H3.2V1.6ZM3.2 3.2H2.66667C2.37211 3.2 2.13333 3.43878 2.13333 3.73333V14.4C2.13333 14.6946 2.37211 14.9333 2.66667 14.9333H11.2C11.4946 14.9333 11.7333 14.6946 11.7333 14.4V13.8667H4.8C3.91634 13.8667 3.2 13.1503 3.2 12.2667V3.2Z"
24− fill={iconColor}
25− />
26− </svg>
27− ) : copyStatus === "copied" ? (
28− <svg
29− width="16"
30− height="16"
31− viewBox="0 0 16 16"
32− fill="none"
33− xmlns="http://www.w3.org/2000/svg"
34− >
35− <path
36− fillRule="evenodd"
37− clipRule="evenodd"
38− d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM7.54325 11.4247L12.1498 5.66647L11.3169 5.00013L7.39013 9.90859L4.60812 7.59025L3.92526 8.40969L7.54325 11.4247Z"
39− fill={iconColor}
40− />
41− </svg>
42− ) : (
43− <svg
44− width="16"
45− height="16"
46− viewBox="0 0 16 16"
47− fill="none"
48− xmlns="http://www.w3.org/2000/svg"
49− >
50− <path
51− fillRule="evenodd"
52− clipRule="evenodd"
53− d="M0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8ZM10.8229 11.5772L8.00004 8.75429L5.17716 11.5772L4.42292 10.8229L7.24579 8.00004L4.42292 5.17716L5.17716 4.42292L8.00004 7.24579L10.8229 4.42292L11.5772 5.17716L8.75429 8.00004L11.5772 10.8229L10.8229 11.5772Z"
54− fill={iconColor}
55− />
56− </svg>
57− );
58−
59− return (
60− <div className={className}>
61− <h4 className="text-wall-500 flex items-baseline flex-wrap">
62− {label ? label + " " : ""}
63− <div className="rounded-lg flex items-stretch">
64− <code
65− className={`rounded-l-lg px-2 md:px-4 py-2 ${washedBg} flex items-center h-full ${linkText}`}
66− >
67− {groupName}
68− </code>
69− <button
70− className={`rounded-r-lg px-4 ml-0.5 flex-1 flex justify-center items-center ${washedBg}`}
71− onClick={() => copy()}
72− >
73− {buttonIcon}
74− </button>
75− </div>
76− </h4>
77− </div>
78− );
79−}
components/Meta.jsdeleted−54
@@ -1,54 +0,0 @@
1−export default function Meta(post, disableImage, large = false) {
2− const author = post?.extra?.author || "urbit.org";
3− const title = post?.title ? post.title : "";
4− const description =
5− post?.description || "Urbit is a new kind of computer that you can own completely in ways that matter: networking, identity, & data.";
6− const image =
7− post?.extra?.image ||
8− post?.image ||
9− "https://storage.googleapis.com/media.urbit.org/site/opengraph/sig-white.png";
10− return (
11− <>
12− <link rel="icon" type="image/png" href="/images/favicon.ico" />
13− <link
14− rel="apple-touch-icon"
15− sizes="180x180"
16− href="/images/apple-touch-icon.png"
17− />
18− <link
19− rel="icon"
20− type="image/png"
21− sizes="32x32"
22− href="/images/favicon-32x32.png"
23− />
24− <link
25− rel="icon"
26− type="image/png"
27− sizes="16x16"
28− href="/images/favicon-16x16.png"
29− />
30− <link rel="manifest" href="/images/site.webmanifest" />
31−
32− <meta
33− name="twitter:card"
34− content={large ? "summary_large_image" : "summary"}
35− key="twitter-card"
36− />
37− <meta name="twitter:site" content="@urbit" key="twitter-site" />
38− <meta name="twitter:creator" content="@urbit" key="twitter-creator" />
39− <meta name="og:title" content={title} key="title" />
40− <meta name="og:description" content={description} key="description" />
41− <meta name="description" content={description} />
42− <meta name="author" content={author} key="author" />
43− {!disableImage && (
44− <meta name="twitter:image" content={image} key="image" />
45− )}
46− <link
47− rel="alternative"
48− type="application/rss+xml"
49− title="RSS"
50− href="/rss.xml"
51− />
52− </>
53− );
54−}
components/NewsletterSignup.jsdeleted−38
@@ -1,38 +0,0 @@
1−export default function NewsletterSignup(props) {
2− return (
3− <form
4− action="https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&amp;amp;id=be143888d2"
5− method="post"
6− id="mc-embedded-subscribe-form"
7− name="mc-embedded-subscribe-form"
8− className="validate form max-w-screen-sm"
9− target="_blank"
10− noValidate
11− >
12− <div className="input-group" id="mc_embed_signup_scroll">
13− <div className="mc-field-group w-full relative">
14− <input
15− className={`appearance-none outline-none text-wall-500 type-ui bg-white black ${
16− props.color || "border-wall-600"
17− } border-4 px-3 w-full mb-2 h-16 rounded-xl`}
18− type="email"
19− name="EMAIL"
20− id="mce-EMAIL"
21− placeholder="your@email.com"
22− />
23− <div className="flex h-16 items-center justify-center absolute top-0 right-6">
24− <button
25− id="mc-embedded-subscribe"
26− className="type-ui dark:text-green-400 text-wall-500 bg-transparent"
27− type="submit"
28− name="subscribe"
29− >
30− {/* onClick={() => _paq.push(['trackEvent', 'Mailing List', 'Subscribe'])}> */}
31− Sign Up
32− </button>
33− </div>
34− </div>
35− </div>
36− </form>
37− );
38−}
components/Pagination.jsdeleted−22
@@ -1,22 +0,0 @@
1−import Link from "next/link";
2−export default function Pagination(props) {
3− return (
4− <Link
5− href={`/${props.section}/${props.post.slug}`}
6− key={`post-${props.post.slug}`}
7− >
8− <div
9− className="bg-wall-100 cursor-pointer font-semibold p-2 px-4 rounded-xl flex"
10− style={{ maxWidth: "45%" }}
11− >
12− <p className="shrink-0 pr-1">{props.previous ? "<- " : ""}</p>
13− <p className="text-wall-600 truncate">{props.post.title}</p>
14− <p className="shrink-0 pl-1">{props.next ? " ->" : ""}</p>
15− </div>
16− </Link>
17− );
18−}
19−
20−Pagination.defaultProps = {
21− className: "",
22−};
components/PostPreview.jsdeleted−27
@@ -1,27 +0,0 @@
1−import {
2− Card,
3− formatDate,
4− generateDisplayDate,
5−} from "@urbit/foundation-design-system";
6−
7−export default function PostPreview(props) {
8− const section = props?.section ? props.section : "blog";
9−
10− const date = generateDisplayDate(props.post.date);
11− return (
12− <Card
13− slug={`/${section}/${props.post.slug}`}
14− image={props.post.extra.image}
15− title={props?.title || props.post?.title || ""}
16− author={props.post?.extra?.author || ""}
17− ship={props.post?.extra?.ship || ""}
18− content={
19− <div className="text-wall-500 type-sub mt-1">{formatDate(date)}</div>
20− }
21− />
22− );
23−}
24−
25−PostPreview.defaultProps = {
26− className: "",
27−};
components/Sidebar.jsdeleted−21
@@ -1,21 +0,0 @@
1−import { useState } from "react";
2−import { MenuTray } from '@urbit/foundation-design-system';
3−
4−export default function Sidebar(props) {
5− const [isOpen, setTray] = useState(false);
6− return (
7− <>
8− <div className="hidden md:flex flex-col h-full sticky top-8">
9− <div className="overflow-y-auto">
10− {props.children}
11− <div className="pb-32" />
12− </div>
13− </div>
14−
15− <MenuTray isOpen={isOpen} setTray={setTray} search={props.search}>
16− {props.children}
17− <div className="pt-64" />
18− </MenuTray>
19− </>
20− );
21−}
components/Snippets.jsdeleted−111
@@ -1,111 +0,0 @@
1−import Link from "next/link";
2−import {
3− formatDate,
4− formatTime,
5− formatTimeZone,
6−} from "@urbit/foundation-design-system";
7−
8−export function Name({ children, className }) {
9− return <b className={`font-normal ${className || ""}`}>{children}</b>;
10−}
11−
12−export function Patp({ children, className }) {
13− return (
14− <Link href={`/ids/${children}`} passHref>
15− <a>
16− <code className={`font-mono ${className || ""}`}>{children}</code>
17− </a>
18− </Link>
19− );
20−}
21−
22−// Used to render a human name alongside their @p
23−export function Person({
24− name,
25− patp,
26− nameClassNames,
27− patpClassNames,
28− className,
29−}) {
30− return (
31− <>
32− {patp && name ? (
33− <>
34− <Name className={nameClassNames}>{name}</Name>{" "}
35− <Patp className={patpClassNames + " opacity-60"}>{patp}</Patp>
36− </>
37− ) : patp ? (
38− <Patp className={patpClassNames}>{patp}</Patp>
39− ) : name ? (
40− <Name className={nameClassNames}>{name}</Name>
41− ) : null}
42− </>
43− );
44−}
45−
46−// This goes inside a <p/> tag
47−export function ReadableList({ children, serial = ",", conjunction = "and" }) {
48− return (
49− <>
50− {children.map((Child, index) => {
51− if (index < children.length - 2) {
52− return (
53− <>
54− {Child}
55− {serial}
56− </>
57− );
58− } else if (index < children.length - 1) {
59− return (
60− <>
61− {Child} {conjunction}{" "}
62− </>
63− );
64− }
65− return <>{Child}</>;
66− })}
67− </>
68− );
69−}
70−
71−export function ShowOrHide({ children, condition }) {
72− if (condition) {
73− return children;
74− }
75− return null;
76−}
77−
78−export function DateRange({ starts, ends, className, short }) {
79− // For events which have no end datetime
80− if (!ends.isValid) {
81− return (
82− <div>
83− <p className={className}>
84− {`${formatDate(starts)} • ${formatTime(starts)} ${formatTimeZone(
85− starts
86− )}`}
87− </p>
88− </div>
89− );
90− }
91− // For events which start and end on the same day
92− if (starts.hasSame(ends, "day")) {
93− return (
94− <div>
95− <p className={className}>
96− {`${formatDate(starts)} • ${formatTime(starts)} to ${formatTime(
97− ends
98− )} ${formatTimeZone(starts)}`}
99− </p>
100− </div>
101− );
102− }
103− // For multi-day events
104− return (
105− <div>
106− <p className={className}>{`${starts.toFormat(
107− "cccc, LLLL d"
108− )} to ${formatDate(ends)}`}</p>
109− </div>
110− );
111−}
components/TabCarousel.jsdeleted−9
@@ -1,9 +0,0 @@
1−// Given multiple children, returns only 1 to be rendered based on props.index
2−export default function TabCarousel(props) {
3− if (props.children) {
4− if (props.children[props.index]) {
5− return props.children[props.index]
6− }
7− }
8− return null
9−}
components/ecosystem/Badge.jsdeleted−20
@@ -1,20 +0,0 @@
1−import classnames from "classnames";
2−export default function EcosystemBadge({ type }) {
3− return (
4− <div
5− className={classnames(
6− "uppercase font-bold text-white text-xs w-fit rounded-lg mb-2 px-2 py-1",
7− {
8− "bg-[#B37ED7]": type === "Organization",
9− "bg-[#83b2d4]": type === "Application",
10− "bg-wall-600": type === "Podcast",
11− "bg-[#8dd5b1]": type === "Marketplace",
12− "bg-[#B5966D]": type === "Article",
13− "bg-[#219DFF]": type === "Group",
14− }
15− )}
16− >
17− {type}
18− </div>
19− );
20−}
components/ecosystem/BasicPage.jsdeleted−146
@@ -1,146 +0,0 @@
1−import { useRouter } from "next/router";
2−import Head from "next/head";
3−import Link from "next/link";
4−import Meta from "../Meta";
5−import ErrorPage from "../../pages/404";
6−import classnames from "classnames";
7−import {
8− Container,
9− SingleColumn,
10− Section,
11− Markdown,
12− IntraNav,
13−} from "@urbit/foundation-design-system";
14−import Header from "../Header";
15−import Footer from "../Footer";
16−import MetadataBlock from "./MetadataBlock";
17−
18−export default function BasicPage({
19− section,
20− post,
21− markdown,
22− search,
23− children,
24−}) {
25− const router = useRouter();
26− if (!router.isFallback && !post?.slug) {
27− return <ErrorPage />;
28− }
29− const metaPost = Object.assign({}, post);
30− metaPost.title = `${post.title} - ${section}`;
31− metaPost.description =
32− section === "Podcast" ? `${post.podcast} - ${post.date}` : post.description;
33− section === "Article" ? `${post.publication} - ${post.date}` : post.description;
34− return (
35− <Container>
36− <Head>
37− <title>
38− {post.title} • {section}
39− </title>
40− {Meta(metaPost)}
41− </Head>
42− <IntraNav ourSite="https://urbit.org" search={search} />
43− <SingleColumn>
44− <Header search={search} />
45− <Section narrow className="space-y-12">
46− <div className="flex items-center space-x-4">
47− <img src={post.image} className="w-36" />
48− <div className="flex flex-col pl-2">
49− <h1 className="text-3xl">
50− {post.title}
51− </h1>
52− <p>{section}</p>
53− </div>
54− </div>
55− {/* General purpose metadata bar -- podcast listen button is special-cased URL, flexed at the end of the row */}
56− <div className="flex justify-between">
57− <div className="flex space-x-12">
58− {post?.podcast && (
59− <MetadataBlock
60− title="Podcast"
61− content={post.podcast}
62− />
63− )}
64− {post?.publication && (
65− <MetadataBlock
66− title="Publication"
67− content={post.publication}
68− />
69− )}
70− {post?.author && (
71− <MetadataBlock
72− title="Author"
73− content={post.author}
74− />
75− )}
76− {post?.date && (
77− <MetadataBlock
78− title="Date"
79− content={post.date}
80− />
81− )}
82−
83− {post?.twitter && (
84− <div className="flex flex-col">
85− <p className="font-bold text-wall-400">Twitter</p>
86− <Link href={"http://twitter.com/" + post.twitter}>
87− <a className="text-green-400 text-sm font-semibold font-mono">@{post.twitter}</a>
88− </Link>
89− </div>
90− )}
91−
92−
93− {post?.URL && section !== "Podcast" && section !== "Article" && (
94− <div className="flex flex-col">
95− <p className="font-bold text-wall-400">Website</p>
96− <a
97− className="text-green-400 text-sm font-semibold font-mono"
98− href={post.URL}
99− >
100− {post.URL.slice(post.URL.indexOf("://") + 3)}
101− </a>
102− </div>
103− )}
104−
105− {post?.URL && section === "Urbit Marketplace" && (
106− <div className="flex flex-col">
107− <p className="font-bold text-wall-400">Accepts</p>
108− <p className="text-sm font-semibold font-mono">
109− {post.payment.join(", ")}
110− </p>
111− </div>
112− )}
113− </div>
114−
115−
116−
117− {post?.URL && section === "Podcast" && (
118− <a
119− href={post.URL}
120− className="button-lg bg-green-400 text-white cursor-pointer flex space-x-2"
121− >
122− <img src="/images/sound.svg" />
123− &nbsp;Listen
124− </a>
125− )}
126− {post?.URL && section === "Article" && (
127− <a
128− href={post.URL}
129− className="button-lg bg-green-400 text-white cursor-pointer flex space-x-2"
130− >
131− Read
132− </a>
133− )}
134− </div>
135− <div className="flex">
136− <div className="markdown w-full">
137− <Markdown.render content={JSON.parse(markdown)} />
138− {children}
139− </div>
140− </div>
141− </Section>
142− </SingleColumn>
143− <Footer />
144− </Container>
145− );
146−}
components/ecosystem/EcosystemSidebar.jsdeleted−86
@@ -1,86 +0,0 @@
1−import { useRouter } from "next/router";
2−import Link from "next/link";
3−import classnames from "classnames";
4−function ActiveLink({ children, href, className, currentPath }) {
5− // special casing this behaviour which overloads one nav
6− const archive = Boolean(
7− currentPath === "/ecosystem?type=archive" && href === "/ecosystem"
8− );
9− const activeClassName = classnames({
10− "text-wall-800": currentPath === href || archive,
11− "text-wall-400": currentPath !== href && !archive,
12− });
13−
14− return (
15− <Link href={href} passHref>
16− <a className={`${className} ${activeClassName}`}>{children}</a>
17− </Link>
18− );
19−}
20−
21−export default function EcosystemSidebar() {
22− const router = useRouter();
23− let currentPath = router.asPath;
24− return (
25− <div className="flex flex-col space-y-4 pr-24">
26− <ActiveLink
27− currentPath={currentPath}
28− className="type-ui"
29− href="/ecosystem"
30− >
31− Spotlight
32− </ActiveLink>
33− <ActiveLink
34− currentPath={currentPath}
35− className="type-ui"
36− href="/ecosystem?type=communities"
37− >
38− Communities
39− </ActiveLink>
40− <ActiveLink
41− currentPath={currentPath}
42− className="type-ui"
43− href="/ecosystem?type=organizations"
44− >
45− Organizations
46− </ActiveLink>
47−
48− <ActiveLink
49− currentPath={currentPath}
50− className="type-ui"
51− href="/ecosystem?type=applications"
52− >
53− Applications
54− </ActiveLink>
55− <ActiveLink
56− currentPath={currentPath}
57− className="type-ui"
58− href="/ecosystem?type=groups"
59− >
60− Groups
61− </ActiveLink>
62− <ActiveLink
63− currentPath={currentPath}
64− className="type-ui"
65− href="/ecosystem?type=marketplaces"
66− >
67− Marketplaces
68− </ActiveLink>
69− <ActiveLink
70− currentPath={currentPath}
71− className="mr-5 type-ui"
72− href="/ecosystem?type=podcasts"
73− >
74− Podcasts
75− </ActiveLink>
76−
77− <ActiveLink
78− currentPath={currentPath}
79− className="mr-5 type-ui"
80− href="/ecosystem?type=articles"
81− >
82− Articles
83− </ActiveLink>
84− </div>
85− );
86−}
components/ecosystem/IndexCard.jsdeleted−34
@@ -1,34 +0,0 @@
1−import Link from "next/link";
2−import EcosystemBadge from "./Badge";
3−export default function IndexCard({ slug, feat }) {
4− return (
5− <Link href={slug}>
6− <div className="cursor-pointer bg-wall-100 rounded-xl min-h-0 flex-1">
7− <div className="flex flex-col p-4 h-full relative">
8− {feat.image ? (
9− <div
10− className="w-64 md:w-full rounded-xl object-cover overflow-hidden basis-1/2"
11− style={{
12− backgroundColor: feat?.matchedPost?.bgColor || "rgba(0,0,0,0)",
13− }}
14− >
15− <img className="h-full w-64 md:w-full object-cover" src={feat.image} />
16− </div>
17− ) : (
18− <div
19− className="rounded-xl w-full"
20− style={{
21− backgroundColor: feat?.matchedPost?.bgColor || "rgba(0,0,0,0)",
22− }}
23− />
24− )}
25− <div className="pt-4">
26− <p className="mb-2 font-semibold leading-5">{feat.title}</p>
27− <EcosystemBadge type={feat.type} />
28− <p className="text-sm leading-5">{feat?.description}</p>
29− </div>
30− </div>
31− </div>
32− </Link>
33− );
34−}
components/ecosystem/MetadataBlock.jsdeleted−7
@@ -1,7 +0,0 @@
1−export default function MetadataBlock({ title, content }) {
2− return <div className="flex flex-col py-2 basis-1/2">
3− <p className="font-bold text-wall-400">{title}</p>
4− <p>{content}</p>
5− </div>
6−
7−}
components/ecosystem/Post.jsdeleted−107
@@ -1,107 +0,0 @@
1−import { Markdown } from "@urbit/foundation-design-system";
2−import EcosystemBadge from "./Badge";
3−
4−import Link from "next/link";
5−export default function Post({ post }) {
6− return ["featured-1", "featured-2", "featured-3"].map((feat) => {
7− const childPath =
8− post[feat] && (post[feat]?.matchedPost?.type === "Application" || post[feat]?.matchedPost?.type === "Group")
9− ? `${post[feat]?.matchedPost.ship}/${post[feat].matchedPost.slug}`
10− : `${post[feat].matchedPost?.slug}`;
11− const href = post[feat]?.matchedPost
12− ? `/${post[feat].matchedPost.type.toLowerCase()}s/${childPath}`
13− : null;
14− return post?.[feat] ? (
15− <div
16− className="mt-8 mb-24"
17− id={post?.[feat].title.toLowerCase().replace(/ /, "-")}
18− >
19− <div className="flex space-x-4 items-center">
20− <div
21− className="h-24 w-24 rounded-xl items-center justify-center shrink-0 overflow-hidden"
22− style={{
23− backgroundColor:
24− post[feat]?.matchedPost?.bgColor || "rgba(0,0,0,0)",
25− }}
26− >
27− {(post[feat]?.matchedPost?.image || post[feat]?.matchedPost?.tile) && (
28− <img
29− className="rounded-xl w-24 object-cover"
30− src={post[feat]?.matchedPost?.image || post[feat]?.matchedPost?.tile}
31− />
32− )}
33− </div>
34− <div className="flex flex-col">
35− <h4 className="text-xl pb-2 leading-6 font-bold">
36− {post?.[feat].title}
37− </h4>
38− <EcosystemBadge type={post[feat].type} />
39− </div>
40− </div>
41− <div className="markdown mt-8 mb-8">
42− <Markdown.render content={JSON.parse(post[feat].content)} />
43− </div>
44−
45− {post[feat].type === "Podcast" && (
46− <Link href={href || "#"} passHref>
47− <a class="button-sm text-white flex-col bg-green-400 cursor-pointer pr-4 w-fit">
48− Listen to {post[feat].type}
49− </a>
50− </Link>
51− )}
52−
53− {post[feat].type === "Article" && (
54− <Link href={href || "#"} passHref>
55− <a class="button-sm text-white flex-col bg-green-400 cursor-pointer pr-4 w-fit">
56− Read {post[feat].type}
57− </a>
58− </Link>
59− )}
60−
61− {post[feat].type === "Application" && (
62− <Link href={href || "#"} passHref>
63− <a class="button-sm text-white flex-col bg-green-400 cursor-pointer pr-4 w-fit">
64− View {post[feat].type}
65− </a>
66− </Link>
67− )}
68−
69− {post[feat].type === "Organization" && (
70− <Link href={href || "#"} passHref>
71− <a class="button-sm text-white flex-col bg-green-400 cursor-pointer pr-4 w-fit">
72− More about {post[feat].title}
73− </a>
74− </Link>
75− )}
76−
77− {post[feat].type === "Community" && (
78− <Link href={href || "#"} passHref>
79− <a class="button-sm text-white flex-col bg-green-400 cursor-pointer pr-4 w-fit">
80− More about {post[feat].title}
81− </a>
82− </Link>
83− )}
84−
85−
86− {post[feat].type === "Marketplace" && (
87− <Link href={href || "#"} passHref>
88− <a class="button-sm text-white flex-col bg-green-400 cursor-pointer pr-4 w-fit">
89− More about {post[feat].title}
90− </a>
91− </Link>
92− )}
93−
94− {post[feat].type === "Group" && (
95− <Link href={href || "#"} passHref>
96− <a class="button-sm text-white flex-col bg-green-400 cursor-pointer pr-4 w-fit">
97− More about {post[feat].title}
98− </a>
99− </Link>
100− )}
101−
102− </div>
103− ) : null;
104− });
105−}
106−
107−
components/ecosystem/SpotlightArchive.jsdeleted−66
@@ -1,66 +0,0 @@
1−import { Container, IntraNav, SingleColumn, Section } from "@urbit/foundation-design-system";
2−import Header from "../Header";
3−import Footer from "../Footer";
4−import Meta from "../Meta";
5−import Head from "next/head";
6−import Link from "next/link";
7−import EcosystemSidebar from "./EcosystemSidebar";
8−import Sidebar from "../Sidebar";
9−
10−export default function SpotlightArchive({ posts, search }) {
11− const post = {
12− title: "Spotlight Archive",
13− description: "The archive of ecosystem spotlights.",
14− };
15− return (
16− <Container>
17− <Head>
18− <title>Archive • Spotlight • Urbit</title>
19− {Meta(post)}
20− </Head>
21− <IntraNav ourSite="https://urbit.org" search={search} />
22− <SingleColumn>
23− <Header search={search} />
24− <Section>
25− <div className="measure">
26− <h1>Ecosystem</h1>
27− </div>
28− </Section>
29− <Section className="flex">
30− <Sidebar>
31− <EcosystemSidebar />
32− </Sidebar>
33− <div>
34− <h3 className="mb-12">Spotlight Archive</h3>
35− {posts.map((post) => {
36− return (
37− <div key={post.slug} className="mb-24 cursor-pointer">
38− <Link href={`/ecosystem/spotlight/${post.slug}`}>
39− <div>
40− <h3 className="text-green-400">{post.title}</h3>
41− <div className="type-ui mt-2">
42− {["featured-1", "featured-2", "featured-3"].map(
43− (feat, i) => {
44− if (post?.[feat]) {
45− return (
46− <>
47− {i ? ", " : ""}
48− <span>{post[feat].title}</span>
49− </>
50− );
51− }
52− }
53− )}
54− </div>
55− </div>
56− </Link>
57− </div>
58− );
59− })}
60− </div>
61− </Section>
62− </SingleColumn>
63− <Footer />
64− </Container>
65− );
66−}
components/gateway/Description.jsdeleted−19
@@ -1,19 +0,0 @@
1−import { Markdown } from "@urbit/foundation-design-system";
2−
3−const Description = ({ description, fallback, markdown }) => {
4− return (
5− (description !== fallback || markdown) && (
6− <div className="flex flex-col space-y-4">
7− {markdown ? (
8− <div className="markdown">
9− <Markdown.render content={JSON.parse(markdown)} />
10− </div>
11− ) : (
12− <p>{description}</p>
13− )}
14− </div>
15− )
16− );
17−};
18−
19−export default Description;
components/gateway/Gateway404.jsdeleted−29
@@ -1,29 +0,0 @@
1−import GatewayHeader from "./GatewayHeader";
2−import {
3− Container,
4− SingleColumn,
5− Section,
6−} from "@urbit/foundation-design-system";
7−import Link from "next/link";
8−
9−const Gateway404 = ({ type }) => {
10− return (
11− <Container>
12− <SingleColumn>
13− <Section narrow className="space-y-12">
14− <GatewayHeader
15− title="Error 404"
16− error
17− item={`No ${type} at this address`}
18− />
19− <hr className="text-wall-200" />
20− <Link href="/" passHref>
21− <a className="text-xl block font-semibold">Urbit.org</a>
22− </Link>
23− </Section>
24− </SingleColumn>
25− </Container>
26− );
27−};
28−
29−export default Gateway404;
components/gateway/GatewayHeader.jsdeleted−29
@@ -1,29 +0,0 @@
1−import GatewayImage from "./Image";
2−
3−const GatewayHeader = ({
4− image,
5− patp,
6− color,
7− subtitle,
8− subtitleMono,
9− error,
10− title,
11− item,
12−}) => {
13− return (
14− <div className="flex items-center space-x-4">
15− <GatewayImage patp={patp} color={color} image={image} error={error} />
16− <div className="flex flex-col">
17− <h2>{title}</h2>
18− {subtitle && (
19− <p className={(subtitleMono ? "font-mono" : "font-sans") }>
20− {subtitle}
21− </p>
22− )}
23− <p className="mt-1">{item}</p>
24− </div>
25− </div>
26− );
27−};
28−
29−export default GatewayHeader;
components/gateway/Image.jsdeleted−62
@@ -1,62 +0,0 @@
1−import { Sigil } from "@urbit/foundation-design-system";
2−const GatewayImage = ({
3− error = false,
4− patp = false,
5− color = "transparent",
6− image = "",
7− size = 100,
8−}) => {
9− if (error) {
10− return (
11− <div className="overflow-hidden rounded-xl shrink-0">
12− <svg
13− width={size}
14− height={size}
15− viewBox="0 0 100 100"
16− fill="none"
17− xmlns="http://www.w3.org/2000/svg"
18− >
19− <rect width="100" height="100" rx="10" className="fill-wall-600" />
20− <path
21− d="M28.8906 27.9844C28.5019 28.0215 28.1699 28.2833 28.043 28.6524C27.914 29.0235 28.0137 29.4336 28.2969 29.7032L70.2969 71.7032C70.4844 71.8965 70.7402 72.0059 71.0098 72.0059C71.2773 72.0079 71.5352 71.9004 71.7246 71.709C71.9141 71.5176 72.0176 71.2598 72.0137 70.9903C72.0098 70.7227 71.8984 70.4668 71.7031 70.2813L66.2501 64.8283C69.8204 60.9181 72.0001 55.7073 72.0001 50.0003C72.0001 37.8618 62.1386 28.0003 50.0001 28.0003C44.2931 28.0003 39.0976 30.1956 35.1876 33.7658L29.7031 28.2813C29.4922 28.0645 29.1934 27.9551 28.8906 27.9844L28.8906 27.9844ZM50.0001 30C61.0566 30 70.0001 38.9435 70.0001 50C70.0001 55.17 68.0411 59.8575 64.8281 63.406L36.5936 35.1715C40.1405 31.9606 44.8336 29.9995 49.9996 29.9995L50.0001 30ZM32.1721 37.8125C31.842 37.8321 31.5452 38.0137 31.3752 38.2969C29.2424 41.6856 28.0002 45.7029 28.0002 49.9999C28.0002 62.1384 37.8617 71.9999 50.0002 71.9999C54.2951 71.9999 58.3147 70.7558 61.7032 68.6249C62.1739 68.3319 62.3165 67.7128 62.0235 67.2421C61.7305 66.7714 61.1114 66.6288 60.6407 66.9218C57.5587 68.8593 53.9122 69.9999 50.0002 69.9999C38.9437 69.9999 30.0002 61.0564 30.0002 49.9999C30.0002 46.0878 31.1233 42.4414 33.0627 39.3594C33.2697 39.043 33.2815 38.6387 33.092 38.3125C32.9045 37.9844 32.5491 37.7929 32.1721 37.8125L32.1721 37.8125Z"
22− className="fill-white"
23− />
24− </svg>
25− </div>
26− );
27− }
28−
29− if (patp) {
30− return (
31− <div className="rounded-xl overflow-hidden shrink-0">
32− <Sigil patp={patp} size={size} color={color} />
33− </div>
34− );
35− }
36−
37− if (image?.startsWith("#")) {
38− return (
39− <div
40− style={{ height: size, width: size, backgroundColor: image }}
41− className="rounded-xl shrink-0"
42− />
43− );
44− }
45−
46− return image ? (
47− <div
48− className="rounded-xl overflow-hidden shrink-0"
49− style={{ backgroundColor: color }}
50− >
51− <img src={image} style={{ height: size, width: size }} />
52− </div>
53− ) : (
54− <img
55− className="object-contain shadow-sm rounded-xl"
56− style={{ height: size, width: size }}
57− src="https://media.urbit.org/public-links/placeholder-image.png"
58− />
59− );
60−};
61−
62−export default GatewayImage;
components/gateway/MetadataBlock.jsdeleted−8
@@ -1,8 +0,0 @@
1−const MetadataBlock = ({ title, content }) => (
2− <div className="flex flex-col basis-1/2 pr-2 sm:basis-1/4 mb-4 md:mb-0 flex-1">
3− <p className="font-bold text-wall-400">{title}</p>
4− <p className="font-mono">{content}</p>
5− </div>
6−);
7−
8−export default MetadataBlock;
components/gateway/MetadataLink.jsdeleted−14
@@ -1,14 +0,0 @@
1−import Link from "next/link";
2−
3−const MetadataLink = ({ title, href, content }) => (
4− <div className="flex flex-col basis-1/2 sm:basis-1/4 pr-2 mb-4 min-w-0 flex-1">
5− <p className="font-bold text-wall-400">{title}</p>
6− <Link href={href}>
7− <div className="flex truncate">
8− <a className="truncate font-mono text-green-400">{content}</a>
9− </div>
10− </Link>
11− </div>
12−);
13−
14−export default MetadataLink;
components/gateway/ResourceCard.jsdeleted−24
@@ -1,24 +0,0 @@
1−import Link from "next/link";
2−import GatewayImage from "./Image";
3−import classNames from "classnames";
4−import { capitalize } from "@urbit/foundation-design-system";
5−
6−const ResourceCard = ({ type, shortcode, title, description = "", color, image, full }) => (
7− <Link href={`/${type}s/${shortcode}`}>
8− <div className={classNames("cursor-pointer rounded-xl bg-wall-100 p-4 flex items-center space-x-4 mr-2 my-1", {
9− "basis-full": full
10− })}>
11− <GatewayImage color={color} image={image || color} size={50} />
12− {full
13− ? <><div className="flex flex-col w-full">
14− <a className="font-semibold">{title}</a>
15− <p className="hidden lg:block">{description}</p>
16− </div>
17− <a className="button-lg bg-green-400 text-white shrink-0">View {capitalize(type)}</a>
18− </>
19− : <a className="font-semibold">{title}</a>}
20− </div>
21− </Link>
22−);
23−
24−export default ResourceCard;
components/icons/Cross.jsdeleted−11
@@ -1,11 +0,0 @@
1−export default function Cross(props) {
2− return (
3− <svg {...props} viewBox="0 0 12 12">
4− <path
5− fillRule="evenodd"
6− clipRule="evenodd"
7− d="M0.292893 10.2942C-0.0976311 10.6847 -0.0976311 11.3179 0.292893 11.7084C0.683417 12.0989 1.31658 12.0989 1.70711 11.7084L6.00063 7.41487L10.2948 11.7091C10.6853 12.0996 11.3185 12.0996 11.709 11.7091C12.0996 11.3185 12.0996 10.6854 11.709 10.2949L7.41484 6.00066L11.7084 1.70711C12.0989 1.31658 12.0989 0.683417 11.7084 0.292894C11.3179 -0.0976312 10.6847 -0.0976312 10.2942 0.292894L6.00063 4.58645L1.70775 0.293571C1.31723 -0.0969534 0.684061 -0.0969534 0.293536 0.293571C-0.0969879 0.684095 -0.0969879 1.31726 0.293536 1.70778L4.58641 6.00066L0.292893 10.2942Z"
8− />
9− </svg>
10− );
11−}
components/index/BubbleLink.jsdeleted−25
@@ -1,25 +0,0 @@
1−export default function BubbleLink(props) {
2− return (
3− <li className={"list-none " + props.className}>
4− <a className={"flex"} href={props.href} target={props.target}>
5− <div>{props.children}</div>
6− <div className="flex flex-col ml-4">
7− <p className="font-bold">{props.title}</p>
8− <p className="text-wall-400 dark:text-antiwall-400 font-bold leading-snug">
9− {props.caption}
10− </p>
11− </div>
12− </a>
13− </li>
14− );
15−}
16−
17−BubbleLink.defaultProps = {
18− className: "",
19− title: "",
20− caption: "",
21− children: (
22− <div className="w-12 h-12 bg-wall-500 dark:bg-antiwall-500 rounded-full" />
23− ),
24− target: "_blank",
25−};
config.tomlnew file+54
@@ -0,0 +1,54 @@
1+# Used in RSS by default
2+title = "Urbit"
3+description = "Urbit is a personal server built from scratch."
4+
5+# The default language, used in RSS
6+default_language = "en"
7+
8+# The URL the site will be built for
9+base_url = "https://urbit.org"
10+
11+# Whether to automatically compile all Sass files in the sass directory
12+compile_sass = true
13+
14+# Whether to generate a RSS feed automatically
15+generate_rss = true
16+
17+# Whether to do syntax highlighting
18+# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
19+highlight_code = true
20+
21+# Whether to build a search index to be used later on by a JavaScript library
22+build_search_index = true
23+
24+# The taxonomies to be rendered for that site and their configuration
25+# Example:
26+# taxonomies = [
27+# {name = "tags", rss = true}, # each tag will have its own RSS feed
28+# {name = "categories", paginate_by = 5}, # 5 items per page for a term
29+# {name = "authors"}, # Basic definition: no RSS or pagination
30+# ]
31+#
32+taxonomies = [
33+ {name = "posts", rss = true},
34+]
35+
36+[extra]
37+urbit_menu = [
38+ {url = "$BASE_URL", name = "Urbit"},
39+ {url = "$BASE_URL/primer/", name = "Primer"},
40+ {url = "$BASE_URL/posts/", name = "Posts"},
41+ {url = "$BASE_URL/docs/", name = "Docs"},
42+]
43+
44+urbit_footer = [
45+ {url = "$BASE_URL/faq/", name = "FAQ"},
46+ {url = "$BASE_URL/tos/", name = "Terms of Service"},
47+ {url = "$BASE_URL/privacy/", name = "Privacy Policy"},
48+ {url = "$BASE_URL/bounty/", name = "Bug Bounties"},
49+]
50+
51+docs_number_chapters = true
52+
53+[extra.author]
54+name = "urbit.org"
content/_index.mdnew file+3
@@ -0,0 +1,3 @@
1++++
2+title = "Home"
3++++
content/_primer.mdnew file+4
@@ -0,0 +1,4 @@
1++++
2+title = "Primer"
3+template = "primer.html"
4++++
content/applications/_index.mddeleted−3
@@ -1,3 +0,0 @@
1−+++
2−title = "Application Directory"
3−+++
content/applications/~bacwyl-samweg/templeochess.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "Temple O Chess"
3−shortcode = "~bacwyl-samweg/templeochess"
4−license = "MIT"
5−image = "https://0x0.st/oFuT.png"
6−bgColor = "#FFFF55"
7−developer = "~bacwyl-samweg"
8−website = "https://youtu.be/Raej8C2yIEc"
9−description = "chess game from Temple OS"
10−+++
11−
12−### Chess from Temple OS
13−![Screenshot](https://0x0.st/oORF.png)
14−
15−Temple O Chess is a pixel-for-pixel reproduction of the chess game from Temple OS.
16−
17−It was created using [this youtube video](https://youtu.be/Raej8C2yIEc) as a reference.
18−
19−It's a fully playable online chess game. Instead of a challenge system, games are formed using a naive public queue.
20−
21−Just queue up, and you will be automatically matched with the next (or previous) player.
22−
content/applications/~datder-sonnet/hodl.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "hodl"
3−description = "Track your digital hodlings"
4−shortcode = "~hodler-datder-sonnet/hodl"
5−license = "MIT"
6−image = "https://user-images.githubusercontent.com/16504501/194947852-8802fd63-5954-4ce8-b147-2072bd929242.png"
7−bgColor = "#b8a3d1"
8−developer = "~datder-sonnet"
9−website = "https://github.com/tomholford/hodl"
10−+++
11−
12−A portfolio app for tracking your digital assets.
13−
14−Add transactions to get a summary of your crypto net worth.
15−
16−Supports over 13K coins via the Coingecko API.
content/applications/~disreb-winner-mittec/urbit-go.mddeleted−12
@@ -1,12 +0,0 @@
1−+++
2−title = "Go"
3−shortcode = "~disreb-winner-mittec/urbit-go"
4−license = "GPLv3"
5−image = "https://winnermittec.space/icon.svg"
6−bgColor = "#D37504"
7−developer = "~winner-mittec"
8−website = "https://winnermittec.space/"
9−description = "Go on Urbit"
10−+++
11−
12−The classic board-game Go, now on Urbit!
content/applications/~dister-dister-datryn-ribdun/campfire.mddeleted−12
@@ -1,12 +0,0 @@
1−+++
2−title = "Campfire"
3−shortcode = "~dister-dister-datryn-ribdun/campfire"
4−description = "Voice and video chat"
5−license = "MIT"
6−image = "https://raw.githubusercontent.com/datryn-ribdun/urbit-webrtc/master/campfire/logo.svg"
7−bgColor = "#FFC179"
8−developer = "~datryn-ribdun"
9−website = "https://github.com/datryn-ribdun/urbit-webrtc"
10−+++
11−
12−Hang out with your friends. Voice and video chat by Holium.
content/applications/~dister-dister-sidnym-ladrut/quorum.mddeleted−17
@@ -1,17 +0,0 @@
1−+++
2−title = "Quorum"
3−shortcode = "~dister-dister-sidnym-ladrut/quorum"
4−developer = "Quorum Team"
5−description = "A choral explanations app for Urbit"
6−license = "MIT"
7−website = ""
8−bgColor = ""
9−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/quorum-logo.png"
10−+++
11−
12−Quorum is a Stack Overflow/Quora style application that allows individuals to submit and vote on questions and answers in threads.
13−
14−To join the Urbit Foundation's [battery payload] board, when prompted to add a board, enter `~dister-dozzod-lapdeg` as the provider, and `battery-payload` as the board.
15−
16−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/quorum.png)
17−
content/applications/~dister-dozzod-bacdun/uqbar-suite.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Uqbar Development Suite"
3−shortcode = "~dister-dozzod-bacdun/zig"
4−developer = "Uqbar"
5−description = "The contract & app development, wallet, and block explorer suite from Uqbar."
6−license = "MIT"
7−website = "https://uqbar.network"
8−bgColor = ""
9−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/uqbarsuite.png"
10−+++
11−
12−The Uqbar Development Suite, also known as Ziggurat, is an all-in-one developer suite designed to give programmers a seamless coding experience as they create and deploy smart contracts and blockchain-integrated Urbit apps to our testnet. The Ziggurat suite consists of:
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/ziggurat-1.png)
15−
16−
17−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/ziggurat-2.png)
18−
19−
20−For more information, read our [Developer Docs](https://uqbar-network.gitbook.io/uqbar-developer-documentation/developer-documentation/developer-documentation).
content/applications/~dister-dozzod-dalten/books.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Books"
3−developer = "Quartus Co."
4−shortcode = "~dister-dozzod-dalten/books"
5−description = "It just makes cents"
6−license = "MIT"
7−website = "https://dalten.org"
8−bgColor = "#E44D11"
9−+++
10−
11−Books is an application for managing your crypto wallets, transactions, and counterparties. It allows you to add your wallet and other people’s, track balances and transactions, and add private annotations to all of the above.
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/books.png)
14−
15−## Books in a Nutshell
16−If you spend much time interacting with crypto, you probably have a few wallets: a few hot wallets in metamask, a ledger or two, perhaps an Urbit ID on a master ticket, and that’s just Ethereum.
17−
18−To get a good picture of your aggregate activity you can use a variety of chain analytics tools, but there’s always a sizable catch: there’s nowhere to record the identities of the counter parties you transact with, or the purpose of the transactions. To do this now, your options are to either keep your own records (offline), use a local-storage based address book like Metamask’s, or put your data on someone else’s servers.
19−
20−Books provides an ideal solution: annotate on-chain, public information with private data stored on your urbit, your personal server. This lets you account for your spending, keep records of the people you transact with, and organize your wallets without compromising on privacy or mobility.
content/applications/~dister-dozzod-dalten/gora.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Gora - ピタゴラ装置"
3−developer = "~dalten"
4−shortcode = "~mister-dozzod-dalten/gora"
5−description = "A Proof of Attendance Protocol for Urbit"
6−license = "MIT"
7−website = "https://dalten.org"
8−bgColor = "#FCD977"
9−+++
10−
11−### A Proof of Attendance Protocol for Urbit
12−
13−Gora is a proof of presence protocol (POPP) that is
14−intended to be extensible, flexible and educational
15−(at least for new hooners).
16−
17−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/gora.png)
18−
19−
20−Gora has two distros in
21−circulation - these can be found at:
22−~laddys-dozzod-dalten (Vue.js frontend)
23−~mister-dozzod-dalten (sail frontend)
24−The canonical distro for all Quartus and Dalten Collective apps can always be found at ~dister-dozzod-dalten
content/applications/~dister-dozzod-dalten/keep.mddeleted−13
@@ -1,13 +0,0 @@
1−+++
2−title = "Keep"
3−developer = "Quartus Co."
4−shortcode = "~dister-dozzod-dalten/keep"
5−description = "State backup for your agents"
6−license = "MIT"
7−website = "https://dalten.org"
8−bgColor = "#E44D11"
9−+++
10−
11−Keep is backup utility for preserving the state of your applications across breaches. Unlike [peat](https://urbit.org/ecosystem/applications/~dister-dozzod-dalten/peat), Keep can backup the state of any arbitrary agent, but does not offer granular control of specific graphs or other targeted contexts.
12−
13−For support with any of Quartus' applications, please visit the [Quartus public group](https://urbit.org/ecosystem/groups/~mister-hilper-dozzod-dalten/quartus)
content/applications/~dister-dozzod-dalten/orca.mddeleted−17
@@ -1,17 +0,0 @@
1−+++
2−title = "Orca"
3−developer = "Quartus Co."
4−shortcode = "~dister-dozzod-dalten/orca"
5−description = "Now THIS is podchatting"
6−license = "MIT"
7−website = "https://dalten.org"
8−bgColor = "#13181C"
9−+++
10−
11−** ocra has been deprecated and will soon be replaced with updated tooling supporting chat federation for the new Groups backend **
12−
13−Now THIS is podchatting
14−
15−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/orca.png)
16−
17−
content/applications/~dister-dozzod-dalten/peat.mddeleted−36
@@ -1,36 +0,0 @@
1−+++
2−title = "peat"
3−developer = "Quartus Co."
4−shortcode = "~dister-dozzod-dalten/peat"
5−description = "Graph Backup and Restoration Utility"
6−license = "REKT"
7−website = "https://dalten.org"
8−bgColor = "#574D5A"
9−+++
10−
11−Peat is Urbit's first backup utility and works with the %graph-store backend. Quartus is also working to support backup and recovery for arbitrary agent state via %keep, as well as updated utility tooling that supports the new Groups backend.
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/peat.png)
14−
15−## Peat in a Nutshell
16−- Import
17− - Recover a Social `graph` from a saved file - transferrable between ships
18−- Export
19− - Export a Social `graph` to a file on underlying file system (e.g. Unix)
20−- Backup/Restore
21− - Local recreation of a `graph` that exists, 're-basing' the `graph` to be hosted by the local ship
22−## Import from Disk - Details
23−- User has a `/path/to/pier/<project-desk>/hav` directory for importing (though they could import from anywhere, really).
24−- User also has a form interface, through Peat's webapp allowing them to import without tracking the files in their loom.
25−### From Clay
26−- User gets instructions from the frontend as to how to add files to this directory and commit the desk so the files are available in the OS
27− - NOTE: This should be converted to using `drum`'s `get` functionality at some point, but this hasn't been wired up yet in `drum`.
28−- User can see all files available for restoration in the default `hav` directory, delineated by whether they represent Agent `state` or `graph`s
29−- User can select a file for restoration
30−- User can apply the file for restoration
31− - Potentially needing to specify additional details, for a `graph` (e.g. what `group` to associate it with, and what to call the new `resource`)
32−User is informed that the restoration is underway/has completed
33−### From Web
34−- User gets instructions from the frontend as to how to upload files through the frontend, resulting in their unpacking and importing to graph store
35−- User can select from local files on the computer through which they're accessing the frontend.
36−- Note: This method avoids polluting loom with transient files - it is to be the preferred method
content/applications/~dister-dozzod-dalten/wrdu.mddeleted−15
@@ -1,15 +0,0 @@
1−+++
2−title = "wrdu"
3−developer = "Quartus Co."
4−shortcode = "~dister-dozzod-dalten/wrdu"
5−description = "Word game by ~dalten for our mothers"
6−license = "MIT"
7−website = "https://dalten.org"
8−bgColor = "#79A86B"
9−+++
10−
11−word game by ~dalten for our mothers
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/wrdu.png)
14−
15−
content/applications/~donpub-datdux/forms.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Forms"
3−shortcode = "~donpub-datdux/forms"
4−developer = "~nallux-dozryl"
5−description = "Publish and Respond to Forms."
6−license = "MIT"
7−website = "https://github.com/nallux-dozryl/urbit-forms"
8−bgColor = "#AFC4E0"
9−image = ""
10−+++
11−
12−Create and fill out forms and surveys on Urbit.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/new-form.png)
content/applications/~fabnev-hinmur/escape.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "EScape"
3−shortcode = "~dister-fabnev-hinmur/escape"
4−developer = "Uqbar"
5−description = "EScape from Eternal September. The UI from Uqbar."
6−license = "MIT"
7−website = "https://uqbar.network"
8−bgColor = "#f2f3ef"
9−image = "https://escape-app-dist.s3.us-east-2.amazonaws.com/escape-logo.png"
10−+++
11−
12−EScape is a fully-integrated social management and DAO Tooling system. EScape provides a simple, intuitive, and unified interface for managing groups, messaging ships, receiving notifications, and interacting with other Urbit apps.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/escape2.png)
15−
16−Get EScape on [iOS](https://apps.apple.com/my/app/escape-by-uqbar/id1610194217) and [Android](https://play.google.com/store/apps/details?id=network.uqbar.escape).
content/applications/~fabnev-hinmur/handshake.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Handshake"
3−developer = "Uqbar"
4−shortcode = "~dister-fabnev-hinmur/handshake"
5−description = "Confirm Urbit IDs via QR code."
6−license = "MIT"
7−website = "https://uqbar.network"
8−bgColor = "#df828b"
9−image = "https://static.thenounproject.com/png/2002633-200.png"
10−+++
11−
12−Handshake generates and verifies QR codes for admission into IRL events.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/handshake.png)
content/applications/~finmep-lanteb/chess.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Chess"
3−shortcode = "~finmep-lanteb/chess"
4−developer = "~bonbud-macryg, ~finmep-lanteb, ~nordus-mocwyl, ~rovmug-ticfyn, ~sigryn-habrex"
5−description = "Fully peer-to-peer chess over Urbit"
6−license = "GPL3"
7−website = "https://github.com/thecommons-urbit/chess"
8−bgColor = "#ffffff"
9−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/finmep-chess.svg"
10−+++
11−
12−Fully decentralized, peer-to-peer Chess app for Urbit
13−
14−![chess example](https://raw.githubusercontent.com/thecommons-urbit/chess/master/images/urbit-chess-demo.png)
content/applications/~haddef-sigwen/transit.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Transit"
3−shortcode = "~haddef-sigwen/transit"
4−license = "MIT"
5−image = "https://haddefsigwen1.s3.us-east-1.amazonaws.com/haddef-sigwen/2022.5.07..20.27.02-image.png"
6−bgColor = "#38285c"
7−developer = "~haddef-sigwen"
8−description = "Planetary transit occurs once per day."
9−website = ""
10−+++
11−
12−Planetary transit occurs once per day.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/transit.png)
content/applications/~hanfel-dovned/board.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Board"
3−shortcode = "~dister-hanfel-dovned/board"
4−license = "MIT"
5−image = ""
6−bgColor = "#9E34EB"
7−developer = "~hanfel-dovned"
8−website = "https://github.com/hanfel-dovned/Board"
9−description = "A digital bulletin-board"
10−+++
11−
12−An implementation of [Robin Sloan’s Spring ‘83](https://www.robinsloan.com/lab/specifying-spring-83/) concept as an Urbit app called %board. Imagine a digital bulletin-board where each item is a person’s miniature homepage, and the pages you see are based on who you know.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/board.png)
content/applications/~hanfel-dovned/pony.mddeleted−12
@@ -1,12 +0,0 @@
1−+++
2−title = "Pony"
3−shortcode = "~dister-hanfel-dovned/pony"
4−license = "MIT"
5−image = ""
6−bgColor = "#232323"
7−developer = "~hanfel-dovned"
8−website = "https://github.com/hanfel-dovned/Pony"
9−description = "Pony is an app for longform threaded conversations"
10−+++
11−
12−Pony is an app for longform threaded conversations, like a blend of email and message boards. Create private threads with arbitrary sets of ships, fork threads to new sets of participants, schedule messages to be sent later, and much more.
content/applications/~hanfel-dovned/slam.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Slam"
3−shortcode = "~dister-hanfel-dovned/slam"
4−license = "MIT"
5−image = "https://hanfel-dovned.sfo3.digitaloceanspaces.com/slam-tile.png"
6−bgColor = "#100032"
7−developer = "~hanfel-dovned"
8−website = "https://github.com/hanfel-dovned/Slam"
9−description = "A social arcade game"
10−+++
11−
12−Slam is a social arcade game where you battle waves of enemies that are generated from your pals' gorae.
13−
14−Requires [gora](https://urbit.org/applications/~dalten/gora) and [pals](https://urbit.org/applications/~paldev/pals).
content/applications/~hanrut-sillet-dachus-tiprel/blog.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "%blog"
3−shortcode = "~hanrut-sillet-dachus-tiprel/blog"
4−license = "MIT"
5−image = ""
6−bgColor = "#533E78"
7−developer = "~dachus-tiprel"
8−website = "https://dachus-tiprel.tlon.network/blog/introducing-blog"
9−description = "The easiest and most versatile publishing app on Urbit"
10−+++
11−
12−A publishing tool for creating a basic blog with markdown and css.
13−
14−Blog is just what it sounds like. A new tool from Uqbar, the app lets anyone on Urbit spin up and customize a blog that displays to the net at an auto-generated URL. Nothing could be breezier. Plus it’s got payments through Uqbar and group-blogging settings on the roadmap. Find out more about it on it's [creator's blog](https://dachus-tiprel.tlon.network/blog/introducing-blog).
15−
16−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/blog.png)
content/applications/~larryx-woldyr/osmosis.mddeleted−12
@@ -1,12 +0,0 @@
1−+++
2−title = "Osmosis"
3−shortcode = "~larryx-woldyr/osmosis"
4−license = "MIT"
5−image = "https://holium-app-globs.nyc3.cdn.digitaloceanspaces.com/osmosis/osmosis-logo-wc.png"
6−bgColor = "#180D39"
7−developer = "~larryx-woldyr"
8−website = "https://https://osmosis.zone/"
9−description = "Interchain liquidity lab."
10−+++
11−
12−A fully self-hosted Osmosis frontend, deployed via Urbit.
content/applications/~larryx-woldyr/safe.mddeleted−12
@@ -1,12 +0,0 @@
1−+++
2−title = "Safe"
3−shortcode = "~larryx-woldyr/safe"
4−license = "MIT"
5−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/safe.jpeg"
6−bgColor = "#180D39"
7−developer = "~larryx-woldyr"
8−website = "https://safe.global/"
9−description = "Safe front-end"
10−+++
11−
12−A fully self-hosted Safe frontend, deployed via Urbit.
content/applications/~larryx-woldyr/uniswap.mddeleted−12
@@ -1,12 +0,0 @@
1−+++
2−title = "Uniswap"
3−shortcode = "~larryx-woldyr/uniswap-v3"
4−license = "MIT"
5−image = "https://cryptologos.cc/logos/uniswap-uni-logo.png"
6−bgColor = "0xffffff"
7−developer = "~larryx-woldyr"
8−website = "http://uniswap.org"
9−description = "Self-hosted Uniswap interface"
10−+++
11−
12−A self-hosted Uniswap interface for swapping assets on Ethereum.
content/applications/~larryx-woldyr/urbhue.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Hue"
3−shortcode = "~larryx-woldyr/urbhue"
4−license = "MIT"
5−image = "https://i.imgur.com/czmkmoK.png"
6−bgColor = "#F0B43D"
7−developer = "~larryx-woldyr"
8−website = "https://ajlamarc.com"
9−description = "Controlling Philips Hue"
10−+++
11−
12−In this prototype, Philips Hue Lightbulbs and groups can be controlled from a standard Urbit application by using the Hue Remote API.
13−
14−History and logging of the bulb are collected to provoke consideration of what should be controlled and tracked by the people living in a smart home.
15−
16−This app will hopefully inspire people to think of the potential utility of Urbit in the smart home, inspire non-Urbit users to think of Urbit in non-community driven scenarios, and be a small step forward in understanding the affordances for Urbit in the home.
17−
18−For more information on `%urbhue`, check out our Urbit group: `~pilwyc-fastec/communal-computing-for-urbit`
content/applications/~lomder-librun/ballot.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Ballot"
3−shortcode = "~livdel-binmun-lomder-librun/ballot"
4−license = "MIT"
5−image = "https://lomder-librun.sfo3.digitaloceanspaces.com/tiles/ballot-app-tile.svg"
6−bgColor = "#cebef0"
7−developer = "~lomder-librun"
8−website = "https://www.holium.com"
9−description = "An app that allows you to vote with other ships."
10−+++
11−
12−Ballot allows you to create and vote on proposals, delegate votes to other urbit ships, and trigger actions based on results.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/ballot.png)
content/applications/~lomder-librun/realm.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Realm"
3−shortcode = "~lomdyr-librun/realm"
4−license = ""
5−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/realm-icon.png"
6−bgColor = ""
7−developer = "Holium"
8−website = "https://www.holium.com/"
9−description = "A desktop interface for Urbit"
10−+++
11−
12−Realm is a desktop app for Urbit communities (currently in private alpha).
13−
14−[Sign up for the alpha.](https://www.holium.com/)
15−
16−<iframe width="560" height="315" src="https://www.youtube.com/embed/gdu4QtFR-Bs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
17−
18−Note that the shortcode will not install this application.
content/applications/~midlev-mindyr/astrolabe.mddeleted−30
@@ -1,30 +0,0 @@
1−+++
2−title = "Astrolabe"
3−shortcode = "~dister-midlev-mindyr/astrolabe"
4−license = ""
5−image = "https://raw.githubusercontent.com/johnhyde/astrolabe/main/ui/src/assets/astrolabe-tile.svg"
6−bgColor = ""
7−developer = "~midlev-mindyr"
8−website = "https://github.com/johnhyde/astrolabe"
9−description = "Astrolabe is a one-stop shop app for exploring Urbit address space."
10−+++
11−
12−### Astrolabe is a one-stop shop app for exploring Urbit address space.
13−
14−Features:
15−
16−- **ID Search**:
17−When you search a partial @p (or use wildcards), it will show you the spawned/owned ships which match your search.
18−
19−- **Sigil Search**:
20−You can use a visual interface to enter sigils, either just general shapes, or specific shape/pattern combos
21−
22−- **Sky Chart**:
23− Astrolabe integrates with %pals to highlight your pals on the sky chart. Clicking/tapping on a point opens a small modal with basic info and a button to take you to a Ship View of the point.
24−
25−- **Ship View**:
26−Summary view for any ship. As on urbit.live or urbit.me, it shows the @p, owner, parent, etc. Allows PNG or SVG download of sigils. Displays tags from %pals, and potentially allows you to add pals and/or edit tags from that screen.
27−
28−
29−
30−Astrolabe integrates with pals wherever possible, and contains documentation to explain the many quirks of Urbit address space to a new user.
content/applications/~midsum-salrux/faux.mddeleted−11
@@ -1,11 +0,0 @@
1−+++
2−title = "Faux"
3−developer = "~midsum-salrux"
4−shortcode = "~tindys-botter-dozzod-tomdys/faux"
5−description = "An Urbit-native Discord bridge"
6−license = "MIT"
7−website = "https://github.com/midsum-salrux/faux"
8−bgColor = "#000000"
9−+++
10−
11−Faux, a bridge between discord and urbit groups. When a member posts a new message in your discord group, a bot reposts it in your urbit group, and vice versa. This is implemented as a native gall agent and includes a frontend app to configure the connections between your discord and urbit servers.
content/applications/~migmeg-fidlen-sillus-mallus/kenning.mddeleted−17
@@ -1,17 +0,0 @@
1−+++
2−title = "kenning"
3−shortcode = "~migmeg-fidlen-sillus-mallus/kenning"
4−license = "MIT"
5−image = "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Voiced_dental_fricative_%28vector%29.svg/1920px-Voiced_dental_fricative_%28vector%29.svg.png"
6−bgColor = "#a59a2d"
7−developer = "~sillus-mallus"
8−website = "https://lovecrypt.net"
9−description = "Memorization tool for text passages."
10−+++
11−
12−Memorize passages of text. Every passage is called a “kenning”.
13−
14−1. Every kenning is assigned a kelvin version based on word count.
15−1. You may test your knowledge by filling in the blanks.
16−1. As kelvin decreases, the number of blanks increases.
17−1. For large passages, split the text into several kens for best results.
content/applications/~mister-dister-dozzod-dozzod/terminal.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Terminal"
3−developer = "Tlon"
4−shortcode = "~mister-dister-dozzod-dozzod/webterm"
5−description = "A web interface to your Urbit's command line."
6−license = "MIT"
7−website = "https://tlon.io"
8−bgColor = "#324246"
9−+++
10−
11−
12−Terminal is a command line interface for your urbit. You can run commands, script, and program your Urbit directly, even if your urbit is located on a remote server. Discover the gratification of programming a computer that is truly yours.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/terminal.png)
content/applications/~niblyx-malnus/gol-cli.mddeleted−15
@@ -1,15 +0,0 @@
1−+++
2−title = "Goals"
3−shortcode = "~dister-dozzod-niblyx-malnus/gol-cli"
4−license = "MIT"
5−image = ""
6−bgColor = "#362711"
7−developer = "~niblyx-malnus"
8−website = ""
9−description = "Hierarchically nested goals and projects"
10−+++
11−
12−### Goals helps you track and share interrelated tasks
13−
14−
15−Goals is primarily dealing with four kinds of relationships: containment/ownership, virtual nesting, precedence, and priority. These fundamental relationships between goals and that any other important information about a goal does not require any complex sort of topological representation, but can simply be a piece of data associated with the goal.
content/applications/~nocsyx-lassul/silo.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "silo"
3−shortcode = "~dister-nocsyx-lassul/silo"
4−license = "MIT"
5−image = ""
6−bgColor = "#4f46e5"
7−developer = "~nocsyx-lassul"
8−description = "An S3 storage manager"
9−website = "https://github.com/arthyn/silo"
10−+++
11−
12−### An S3 storage manager
13−
14−Silo is an application for viewing and managing your urbit's file storage. Currently that means the files in an S3-compatible storage system, but hopefully soon we'll also be able to provide an interface for your local urbit's filesystem too.
15−
16−![](https://nyc3.digitaloceanspaces.com/hmillerdev/nocsyx-lassul/2022.7.23..19.23.39-Screen%20Shot%202022-07-23%20at%202.23.07%20PM.png)
17−
18−Currently silo allows you to upload, delete, add folders, and otherwise manage your files like you expect. It also offers easy access to downloading files and copying their URLs.
19−
20−In the future we hope to add the ability to easily share files with others, offer storage to friends or groups, a fully urbit-side S3 and virtual filesystem API, and a drop-in file-picker component that devs can use to easily add image uploads to their apps.
content/applications/~nocsyx-lassul/sphinx.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "sphinx"
3−shortcode = "~dister-nocsyx-lassul/sphinx"
4−license = "MIT"
5−image = "https://nyc3.digitaloceanspaces.com/hmillerdev/nocsyx-lassul/2022.7.16..04.35.22-sphinx-web-shifted.svg"
6−bgColor = "#b25068"
7−developer = "~nocsyx-lassul"
8−website = "https://github.com/arthyn/sphinx"
9−description = "Community powered search"
10−+++
11−
12−### Community powered search
13−
14−Sphinx is a search engine powered by you and your pals. Using the gossip mechanism developed by ~paldev for [%rumors](https://urbit.org/applications/~paldev/rumors), anytime you post a listing it gets indexed on your urbit and then shared with your friends and friends of friends.
15−
16−![](https://nyc3.digitaloceanspaces.com/hmillerdev/nocsyx-lassul/2022.7.23..19.04.39-Screen%20Shot%202022-07-23%20at%202.04.05%20PM.png)
17−
18−Currently sphinx is probably best as a tool for finding groups and apps, but will likely index content soon too. It uses exact, phonetic, and unordered trigram matching to index the keywords in your listings. This allows you to type a query inconsistently and still get similar results as if it was spelled right.
19−
20−Future features include tag aggregation for more "classifieds"-type browsing, browsing by who shared something, ability to specify who a listing gets shared with (private/pals/pals+sponsor), and the ability to add search providers who might host non-gossiped indexes.
content/applications/~nodmyn-dosrux/basket.mddeleted−34
@@ -1,34 +0,0 @@
1−+++
2−title = "basket"
3−shortcode = "~nodmyn-dosrux/basket"
4−license = "MIT"
5−image = "https://0x0.st/oFHB.png"
6−bgColor = "#F2F2F2"
7−developer = "Assembly Capital"
8−website = "https://github.com/bacwyls/basket"
9−description = "show off your meme collection"
10−+++
11−
12−
13−### Basket is a simple db of tagged images
14−
15−The frontend displays the most recent image in the full window,
16−so it can be used to add some personal style to an urbit desktop environment.
17−
18−In addition to being a personal db, basket is an experimental app on top of the 'rooms' primitive in [Realm](https://twitter.com/HoliumCorp).
19−
20−Members of a room have temporary write-access to each others basket db.
21−The frontend makes it ergonomic and fun to share / collaboritively create this data.
22−
23−In theory (at scale), this creates a kind of decentralized giphy.
24−
25−The images you know about are the images your friends have shared with you.
26−It gamifies the creation of rich, human curated image metadata.
27−One obvious use case for this is keeping track of memes.
28−
29−To export the full dataset you can GET `http://yoururbitship.com/~/scry/basket/images.json`
30−Then you might want to use a python script to actually download the images to local storage.
31−
32−Eventually, it would be nice to have a simple way to export and share the dataset.
33−
34−Read full documentation on the [Github repository](https://github.com/bacwyls/basket).
content/applications/~nodmyn-dosrux/houston.mddeleted−17
@@ -1,17 +0,0 @@
1−+++
2−title = "houston"
3−shortcode = "~nodmyn-dosrux/houston"
4−license = "MIT"
5−image = "https://0x0.st/ojrj.png"
6−bgColor = "#FFFFFF"
7−developer = "Assembly Capital"
8−website = "https://github.com/assemblycapital/houston"
9−description = "Moon Management Dashboard"
10−+++
11−
12−### Moon Management Dashboard
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/houston.png)
15−
16−Keeps track of the moons you've spawned and exposes a poke API for the standard moon utilities: `|moon`, `|moon-breach` and `|moon-cycle`
17−
content/applications/~nodmyn-dosrux/radio.mddeleted−15
@@ -1,15 +0,0 @@
1−+++
2−title = "radio"
3−shortcode = "~nodmyn-dosrux/radio"
4−license = "MIT"
5−image = "https://0x0.st/o4--.png"
6−bgColor = "#f2f2f2"
7−developer = "Assembly Capital"
8−website = "https://github.com/bacwyls/radio"
9−description = "an app for urbit disc jockeys"
10−+++
11−
12−Create and tune into virtual radio stations where you can chat and play Youtube videos with your friends.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/radio.png)
15−
content/applications/~nodmyn-dosrux/vita.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "vita"
3−shortcode = "~nodmyn-dosrux/vita"
4−license = "MIT"
5−image = "https://bwyl.nyc3.digitaloceanspaces.com/vita%2Fvita.png"
6−bgColor = "#F2F2F2"
7−developer = "Assembly Capital"
8−website = "https://github.com/assemblycapital/vita"
9−description = "monitor your app distributions"
10−+++
11−
12−### Keep track of your app distributions
13−
14−To get downloads, `:vita` periodically scrys %cs /subs for each desk and caches the results.
15−
16−`:vita` accepts foreign pokes attesting to activity on a desk.
17−`/lib/vita-client.hoon` helps any agent send vita activity pokes.
18−It sends a maximum of one poke per day, and allows users to opt-in / opt-out depending on developer preference.
19−
20−Read full documentation on the [Github repository](https://github.com/assemblycapital/vita).
content/applications/~norsyr-torryn/canvas.mddeleted−29
@@ -1,29 +0,0 @@
1−+++
2−title = "canvas"
3−shortcode = "~dister-norsyr-torryn/canvas"
4−license = "MIT"
5−image = "https://yosoyubik.fra1.digitaloceanspaces.com/canvas/tile.svg"
6−bgColor = "#3787B9"
7−developer = "~norsyr-torryn"
8−website = "https://github.com/yosoyubik/canvas"
9−description = "Collaborative Pixel Art"
10−+++
11−
12−### Collaborative Pixel Art
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/canvas.png)
15−
16−#### Features
17−- Each stroke is stored automatically on your Urbit.
18−- Export Canvas Images as SVG.
19−- Image files are stored on S3 Storage, if configured.
20−- Allows creation of public or private canvases.
21−- Others can join a public canvas and work collaboratively in a cool art project.
22−
23−#### Access
24−Search for ~dister-norsyr-torryn in Grid to find the Canvas app, and install it from there
25−
26−A public canvas is hosted at: ~picsel-norsyr-torryn/public
27−
28−
29−Come and join the group to share your creations and see what others are doing: ~norsyr-torryn/canvas
content/applications/~paldev/face.mddeleted−13
@@ -1,13 +0,0 @@
1−+++
2−title = "face"
3−developer = "~paldev"
4−shortcode = "~paldev/face"
5−description = "see your friends"
6−license = "MIT"
7−website = "https://pal.dev/suite/face"
8−bgColor = "#3b5998"
9−+++
10−
11−Face is an image rolodex of your urbit friends. Compatible with [pals](/applications/~paldev/pals), face lets you share a photo of yourself with mutuals and also see a gallery of their faces. To share, enter an image link in the url field.
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/face.png)
content/applications/~paldev/fafa.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "fafa"
3−developer = "~paldev"
4−shortcode = "~paldev/fafa"
5−description = "2fa otp authenticator app"
6−license = "MIT"
7−website = "https://pal.dev/suite/fafa"
8−bgColor = "#1a1a2a"
9−+++
10−
11−
12−Fafa is a two-factor authentication app. Log in to your saved accounts with a one-time passcode generated on your urbit. (Only access this app over a secure connection and remember to also save your backup codes somewhere secure.)
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/fafa.png)
content/applications/~paldev/pals.mddeleted−15
@@ -1,15 +0,0 @@
1−+++
2−title = "pals"
3−shortcode = "~paldev/pals"
4−developer = "~paldev"
5−description = "friendlist for peer discovery"
6−license = "MIT"
7−website = "https://pal.dev/suite/pals"
8−bgColor = "#99D3BD"
9−+++
10−
11−Pals is a contact list for your urbit friends. Send and receive friend requests with intuitive ease. Once you're pals, a smiley face icon indicates mutual status.
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/pals.png)
14−
15−Keep track of who your pals are or how you know them with tags, which exist mostly for your own book-keeping, but could be used in the future by other applications to group content. Similarly, some apps work better with pals, like [rumors](/applications/~paldev/rumors), an anonymous gossip app, and [sphinx](/applications/~nocsyx-lassul/sphinx), an Urbit search engine.
content/applications/~paldev/picture.mddeleted−13
@@ -1,13 +0,0 @@
1−+++
2−title = "picture"
3−developer = "~paldev"
4−shortcode = "~paldev/picture"
5−description = "a picture frame for the garden"
6−license = "MIT"
7−website = "https://pal.dev/suite/picture"
8−bgColor = "#DDDDDD"
9−+++
10−
11−Picture is a digital frame for your urbit. Simply upload an image to see it every time you open up Landscape. (Refrain from uploading huge images to avoid memory pressure.)
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/picture.png)
content/applications/~paldev/rumors.mddeleted−15
@@ -1,15 +0,0 @@
1−+++
2−title = "rumors"
3−shortcode = "~paldev/rumors"
4−developer = "~paldev"
5−description = "anonymous gossip from friends of friends"
6−license = "MIT"
7−website = "https://pal.dev/suite/rumors"
8−bgColor = "#bb77dd"
9−+++
10−
11−Rumors is an anonymous gossip feed powered by [pals](/applications/~paldev/pals). The more mutuals you have, the more rumors you'll see: messages posted by your pals, and their pals, populate the feed.
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/rumors.png)
14−
15−Built using a p2p gossip protocol, rumors anonymizes posts and orders them chronologically. Drop links, ask questions, lurk, or whisper secrets into the void …
content/applications/~paldev/scooore.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "sc'o're"
3−developer = "~paldev"
4−shortcode = "~paldev/scooore"
5−description = "leaderboard for groups' ['o']s, as seen on tv!"
6−license = "MIT"
7−image ="https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/scooore.svg"
8−website = "https://pal.dev/suite/scooore"
9−bgColor = "#FDFF54"
10−+++
11−
12−A leaderboard of your peers' emoji reactions in Groups.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/scooore.png)
content/applications/~paldev/verse.mddeleted−13
@@ -1,13 +0,0 @@
1−+++
2−title = "verse"
3−developer = "~paldev"
4−shortcode = "~paldev/verse"
5−description = "a random Bible verse, every day"
6−license = "MIT"
7−website = "https://pal.dev/suite/verse"
8−bgColor = "#EEEEDD"
9−+++
10−
11−Verse displays a random Bible verse. Whenever you open Landscape, a new daily passage awaits.
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/verse.png)
content/applications/~pocwet/docs.mddeleted−17
@@ -1,17 +0,0 @@
1−+++
2−title = "Docs"
3−developer = "~pocwet"
4−shortcode = "~pocwet/docs"
5−description = "User and developer documentation for Urbit apps"
6−license = "MIT"
7−website = "https://github.com/tinnus-napbus/docs-app"
8−bgColor = "#FBCF44"
9−image = "https://m.tinnus-napbus.xyz/pub/books.svg"
10−+++
11−
12−
13−Docs is an Urbit app for documenting other Urbit apps - it finds docs in other desks and displays them for users and deveopers to browse.
14−
15−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/docs.png)
16−
17−The docs folder contains the source of the app, and the docs-dev folder contains the files necessary for including docs in your app. Note that the files in docs-dev are symlinked, so the'll need to be copied with cp -rL or equivalent.
content/applications/~pocwet/straw.mddeleted−13
@@ -1,13 +0,0 @@
1−+++
2−title = "Straw"
3−developer = "~pocwet"
4−shortcode = "~pocwet/straw"
5−description = "Vote on what to publish."
6−license = "MIT"
7−website = "https://urbit.org"
8−bgColor = "#6C6973"
9−image = ""
10−+++
11−
12−
13−This app lets group members vote on whether a post is published to a notebook. It is intended for use with Studio, which you can install from ~tirrel/studio.
content/applications/~ribben-donnyl/funes-notes.mddeleted−15
@@ -1,15 +0,0 @@
1−+++
2−title = "Funes Notes"
3−shortcode = "~ribben-donnyl/funes-notes"
4−license = "MIT"
5−image = "https://is4-ssl.mzstatic.com/image/thumb/Purple112/v4/64/64/8b/64648bfc-02b2-b955-6230-b86af334b6b1/AppIcon-0-1x_U007emarketing-0-10-0-85-220.png/230x0w.webp"
6−bgColor = ""
7−developer = "~ribben-donnyl"
8−website = "https://funes.app"
9−description = "Mobile notetaking application using urbit as a back-end."
10−+++
11−
12−Funes Notes is a mobile notetaking application [available for iOS](https://apps.apple.com/us/app/funes-notes/id1627315560), using urbit's `%graph-store` as a backend.
13−
14−
15−Initial development funded by the Urbit Foundation via [Urbit Notes](https://urbit.org/grants/urbit-notes) proposal grant.
content/applications/~sitden-sonnet/channel.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Channel"
3−shortcode = "~sitden-sonnet/channel"
4−license = "REKT"
5−image = "https://s3.us-east-1.amazonaws.com/haddefsigwen1/reciprocal/2022.7.09..22.54.53-channel.png"
6−bgColor = "#000000"
7−developer = "Quartus Co., Reciprocal Ltd."
8−website = "https://reciprocal.ltd"
9−description = "A distributed imageboard platform, with love"
10−+++
11−
12−### An imageboard platform, with love
13−
14−Developed as a collaboration between the Quartus Corporation and [Reciprocal Ltd.](https://reciprocal.ltd), Channel is an imageboard platform that leverages graph-store to allow any ship on the Urbit network to create and manage their own imageboard.
15−
16−![](https://s3.us-east-1.amazonaws.com/haddefsigwen1/channel/2022.7.14..05.09.33-Screen%20Shot%202022-07-13%20at%2010.09.16%20PM.png)
17−
18−Incoming posts have their authors scrambled with a per-ship, per-installation SHA-256 salt and thus get rotated into a "tripcode comet" visible when viewing the graph outside the interface. The interface by default hides all authors.
19−
20−Board owners can ban ships (using their rotated names), delete threads, and ban words and URLs, as well as assign janitors. You can even connect two boards using Quartus' Orca tool to syndicate posts across boards.
content/applications/~sogryp-dister-dozzod-dozzod/groups.mddeleted−40
@@ -1,40 +0,0 @@
1−+++
2−title = "Groups"
3−shortcode = "~sogryp-dister-dozzod-dozzod/groups"
4−license = "MIT"
5−image = "https://bootstrap.urbit.org/icon-groups.svg"
6−bgColor = "#EFF0F4"
7−developer = "Tlon"
8−website = "https://github.com/tloncorp/landscape-apps"
9−description = "Groups is a decentralized platform that integrates with Talk, Notebook, and Gallery for a full, communal suite of tools."
10−+++
11−
12−Start, host, and cultivate communities. Own your communications, organize your resources, and share documents. Groups is a decentralized platform that integrates with Talk, Notebook, and Gallery for a full, communal suite of tools.
13−
14− <video autoPlay muted loop playsInline>
15− <source
16− src="https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/groups-create-a-group.webm"
17− type="video/webm"
18− />
19− </video>
20−
21−Teams, clubs, DAOs, and secret societies use Groups to digitally congregate, using channel integrations to extend their capabilities.
22−
23− <video autoPlay muted loop playsInline>
24− <source
25− src="https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/groups-create-a-channel.webm"
26− type="video/webm"
27− />
28− </video>
29−
30−Write, edit, and publish longform or shorter documents with Notebook, a basic text editor for announcements, internal meeting minutes, blogs, and everything in between.
31−
32− <video autoPlay muted loop playsInline>
33− <source
34− src="https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/notebooks.webm"
35− type="video/webm"
36− />
37− </video>
38−
39−
40−Gather links to images, articles, and web pages to maintain a collection of references with Gallery, a versatile and interoperable repository for day-to-day digital trawling.
content/applications/~sogryp-dister-dozzod-dozzod/talk.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "Talk"
3−shortcode = "~sogryp-dister-dozzod-dozzod/talk"
4−license = "MIT"
5−image = "https://bootstrap.urbit.org/icon-talk.svg"
6−bgColor = "#2B5DC0"
7−developer = "Tlon"
8−website = "https://github.com/tloncorp/landscape-apps"
9−description = "Talk is a decentralized chat app that integrates with Groups, Notebook, and Gallery for a full, communal suite of tools."
10−+++
11−
12−Send peer-to-peer direct messages to one or many friends. Talk is a simple chat tool for catching up, getting work done, and everything in between.
13−
14− <video autoPlay muted loop playsInline>
15− <source
16− src="https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/talk.webm"
17− type="video/webm"
18− />
19− </video>
20−
21−Start threads. React with emojis. Respond to your Groups chat channels from Talk. When integrated with Groups, both direct messages and team chats appear in Talk. Two apps in one place.
content/applications/~sortug/gate.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Gate"
3−shortcode = "~dister-dozzod-sortug/gate"
4−license = "MIT"
5−image = "https://s3.sortug.com/img/fav.png"
6−bgColor = "#000000"
7−developer = "Sortug Development"
8−website = "https://sortug.com"
9−description = "Seamless QR login"
10−+++
11−
12−# Secure, seamless login for Urbit
13−
14−Let's make joining Urbit easier!
15−
16−Why do this?
17−![code](https://s3.sortug.com/img/gate-code.png)
18−When you can do this?
19−![gate](https://s3.sortug.com/img/gate-gate.png)
20−
21−Logging in to any Urbit app requires you to input your ship's URL and the `+code` generated on dojo. This requires people to login to their ship's terminal, output the code on dojo, then copy and paste it in their browser or app. This is bad enough if you have a ship running locally, but if you have it running remotely (as is common) the process becomes seriously annoying.
22−
23−Mainstream mobile apps such as Signal handle first login much more seamlessly; after registration is done, further logins are done via QR code. The app produces a QR code, you scan it, and that's it. That's the state-of-the-art, battle-tested user experience for modern applications. Now available on Urbit.
24−
25−Gate makes it easier for newcomers to use Urbit, and greatly enhances the user experience of native applications, desktop and mobile, that Urbit deserves.
26−
27−Users can login to Urbit just by scanning a QR code, receive a URL link and login to an Urbit ship instantly by clicking on it. That simple. Most importantly, hosting providers can use Gate to send a QR code or a URL link to a user, and have the user access his Urbit apps with a simple camera scan or click of a link, making the onboarding process much easier for non-technical users.
content/applications/~sortug/trill.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Trill"
3−shortcode = "~dister-dozzod-sortug/trill"
4−license = "MIT"
5−image = "https://s3.urbit.cloud/img/trill-logo.png"
6−bgColor = "#000000"
7−developer = "Sortug Development"
8−website = "https://sortug.com"
9−description = "Urbit Native Microblog"
10−+++
11−
12−### Your own social feed, forever.
13−
14−Urbit is a networked personal server. It is the ideal stack to host a microblog service.
15−
16−For years Urbit users have been busy chatting to each other, coordinating to build the network. But it is time that we lay back a little and just post at our leisure.
17−
18−Trill is an Urbit native microblog. You can post text or media links into your feed, make threads, and share it with your friends and followers. You can also build a timeline of your favorite Urbit users, and keep lists of users, categorized as you want.
19−
20−Unlike other microblogs, however, users of Trill truly own their feed. Users host their own content. They can even program it; tinker with the source as much as you want.
21−
22−There are no ads in Trill, no "trends", no analytics. We don't even know how many people are using Trill. And we don't care. We just want to trill. Please join the party.
23−
24−### More information
25−You can install the app by searching for ~dister-dozzod-sortug on your Grid interface, or by running `|install ~dister-dozzod-sortug %trill` in Dojo.
26−
27−The official group of the app is at ~hoster-dozzod-sortug/trill on the Groups app.
content/applications/~sortug/ufa.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Urbit Feed Aggregator"
3−shortcode = "~dister-dozzod-sortug/ufa"
4−license = "MIT"
5−image = "https://s3.urbit.cloud/img/lan.png"
6−bgColor = "#000000"
7−developer = "Sortug Development"
8−website = "https://sortug.com"
9−description = "Bring all the web into Urbit"
10−+++
11−
12−### Own your content, share it with your friends
13−
14−Urbit is your personal server. Why do you want a personal server? Many things. But one of them, part of the initial vision of Urbit's development, was to use to interact programatically with the Web. To interact with Web services, but in your own terms. Using your chosen frontend, blocking all tracking, telemetry, analytics and other malicious code. Urbit as an API aggregator.
15−
16−The Urbit Feed Aggregator (aka UFA) makes that vision true. Now you will be able to browse the best content on the internet, but really own it, like people used to own books, magazines and newspapers. Control, curate, save and share your the content you like, with complete freedom.
17−
18−UFA is not just an app, it's a platform to which a myriad apps will be added in the future. As of present (August 2022) UFA includes support for Trill (our sister app, the Urbit native microblog) and Twitter. You can read and keep lists of Twitter content without having to login to Twitter.com, and you can save and share that content inside Urbit, via the Trill or Groups apps.
19−
20−### More information
21−You can install the app by searching for ~dister-dozzod-sortug on your Grid interface, or by running `|install ~dister-dozzod-sortug %ufa` in Dojo.
22−
23−The official group of the app is at ~hoster-dozzod-sortug/ufa on the Groups app.
24−
25−You can also follow ~sortug on Trill for announcements.
26−
27−Within 2022 RSS, Instagram and Email support will be added. For the future, the sky is the limit. If you want to help create a new plugin for UFA, please contact us at the official group.
content/applications/~tiller-tolbus/membrane.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Membrane"
3−shortcode = "~mister-master-tiller-tolbus/membrane"
4−license = "MIT"
5−image = "https://tiller-tolbus.nyc3.digitaloceanspaces.com/membrane.png"
6−bgColor = ""
7−developer = "~tiller-tolbus"
8−website = ""
9−description = "Spreadsheets and databases"
10−+++
11−
12−### Membrane is a spreadsheet tool for Urbit
13−
14−Spreadsheets were the original tool for the productivity power user, so it is only fitting that we bring them to Urbit. Keep a budget, run a formula, and share your sheets with friends using Membrane.
content/applications/~tirrel/scene.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Scene"
3−shortcode = ""
4−license = ""
5−image = "https://tirrel.io/assets/scene-logo-stroke.svg"
6−bgColor = "rgb(0, 0, 0)"
7−developer = "Tirrel Corp."
8−website = "https://tirrel.io"
9−description = "The new Urbit desktop, by ~tirrel corp."
10−+++
11−
12−![Screenshot](https://tirrel.io/assets/scene-demo-screenshot.webp)
13−
14−[Download scene here](https://tirrel.io/scene/index.html).
content/applications/~tirrel/studio.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "Studio"
3−shortcode = "~tirrel/studio"
4−license = ""
5−image = "https://tirrel.io/assets/stool.svg"
6−bgColor = "rgb(160, 226, 167)"
7−developer = "Tirrel Corp."
8−website = "https://tirrel.io"
9−description = "Tools for making money."
10−+++
11−
12−### Studio is a publishing tool for Urbit
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/studio.png)
15−
16−Need a personal website, fast? Studio can set one up in under a minute. For writers, Studio connects you with your legacy-web audience, even if they’re not on Urbit yet. With a click, you can share your newsletter or blog via auto-generated blog or email distribution list
17−
18−Studio pulls content from your Groups notebooks. Notebooks from any group you own will appear.
19−
20−If you need any help, we’re always available in our group: ~tirrel/tirrel-support
21−
content/applications/~worpet-bildet/portal.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "Portal"
3−shortcode = "~worpet-bildet/portal"
4−license = ""
5−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/portal.svg"
6−bgColor = "rgb(0,0,0)"
7−developer = ""
8−website = ""
9−description = "Portal is the front page"
10−+++
11−
12−### Portal is the front page for urbit
13−
14−Portal made its debut as the solution to decentralized discovery on Urbit. Portal enables anyone on Urbit to curate content, apps, and groups for other ships to discover
15−
16−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/portal-screenshot.png)
content/apprenticeships.mddeleted−38
@@ -1,38 +0,0 @@
1−+++
2−title = "Become an Apprentice"
3−date = "2023-01-04"
4−weight = 1
5−description = "Everything you need to know about applying for an apprenticeship"
6−+++
7−
8−Apprenticeships are practical learning opportunities for new Urbit developers provided by experienced members of the Urbit development community. As an apprentice, you'll have the opportunity to:
9−
10−- Learn from an experienced Urbit contributor
11−- Make helpful contributions to an active project, and
12−- Earn address space for learning
13−
14−Becoming an apprentice is easily one of the best ways to level up your skills, and perhaps even land a job.
15−
16−## Get started
17−
18−Apprenticeships are for those that are new to Urbit development (or an area of it), and would like to find their grounding by working on a pre-existing codebase and problem set. Nearly all apprenticeships involve some degree of Hoon work, so you should make sure that you've completed [Hoon School](https://developers.urbit.org/guides/core/hoon-school) and [App School](https://developers.urbit.org/guides/core/app-school/intro) in either their asychronous or [cohort formats](https://developers.urbit.org/courses) prior to signing up.
19−
20−To become an apprentice, [apply for an open apprenticeship](/grants?program=apprenticeship&open=true&wip=false&completed=false#view-grants)
21−
22−Although some apprenticeships are posted on this site to be claimed, more often than not they emerge out of a conversation between a mentor and an enthusiastic potential apprentice. This is because mentors are generally busy engineering, and while they know many things that need to be done, getting those ideas into writing is difficult.
23−
24−## How it works
25−
26−Once a mentor has written up an apprenticeship, and approved an apprentice, The Urbit Foundation will perform a quick KYC step and send contracts to all parties for signing. Once those contracts are executed, work can proceed.
27−
28−Mentors and apprentices work together by having weekly pairing sessions and maintaining an open line of communication over Urbit. It's expected that mentors put at least two hours per week into supporting their apprentice.
29−
30−## Funding
31−
32−Apprenticeships pay 1 star upon the sucessful completion of the apprenticeship, for an apprenticeship of a duration of up to three months.
33−
34−## Getting Paid
35−
36−When you have completed the scope of your grant, you will create a detailed writeup of the work completed and your learnings, share the writeup with your mentor, and get your approval of completion. After recieving this approval from your mentor, please [submit an invoice here](https://airtable.com/shrXXCs1uaxtNSBcg). Your mentor must also contact `~marfun-pacpet` to confirm completion of the apprenticeship and approve the payment. Once the Urbit Foundation receives approval from your champion and an invoice for the amount agreed upon in your grant or milestone, the Foundation will pay your star allocation to the Ethereum address you have provided.
37−
38−We approve and issue payments within 30 days of invoice receipt and approval, although often payment is made more quickly. If you have any questions regarding getting paid or submitting an invoice, please contact `~marfun-pacpet` for assistance.
content/articles/2022-09-24_urbit-courts-daos-crypto.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "Urbit Courts DAOs, Crypto Teams in Quest to Make Internet P2P Again"
3−publication = "Coindesk"
4−author = "March Hochstein and Daniel Kuhn"
5−date = "2022-09-24"
6−URL = "https://www.coindesk.com/layer2/2022/09/24/urbit-courts-daos-crypto-teams-in-push-to-make-internet-p2p-again/"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/coindesk.jpg"
8−+++
9−
10−A wildly ambitious project to reinvent the entire internet computing stack is finally shipping usable apps after a decade-plus of laying groundwork. Can it overcome a “janky” UX?
content/articles/2022-09-24_urbit-is-web3-weird-and-wonderful.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "Urbit Is Web3, Weird and Wonderful and I Don’t Care Who Made It"
3−publication = "Coindesk"
4−author = "March Hochstein"
5−date = "2022-09-24"
6−URL = "https://www.coindesk.com/layer2/2022/09/24/urbit-is-web3-weird-and-wonderful-and-i-dont-care-who-made-it/"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/coindesk.jpg"
8−+++
9−
10−Software can have bugs, but it doesn’t have cooties.
content/articles/2022-09-28_college-course-on-urbit.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "Why Would Anyone Take a College Course on Urbit?"
3−publication = "Coindesk"
4−author = "Daniel Kuhn"
5−date = "2022-09-28"
6−URL = "https://www.coindesk.com/layer2/2022/09/28/why-would-anyone-take-a-college-course-on-urbit/"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/coindesk.jpg"
8−+++
9−
10−Neal Davis taught the first graduate-level seminar on the controversial computing platform Urbit. Here’s why.
content/articles/2022-09-29_assembly-miami-dispatch.mddeleted−11
@@ -1,11 +0,0 @@
1−+++
2−title = "Urbit Assembly: If We’re All Here, Who’s Watching The Internet?"
3−publication = "Zora Zine"
4−author = "Madeline Cash"
5−date = "2022-09-29"
6−URL = "https://zine.zora.co/urbit-assembly-miami-dispatch"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/zorazine.png"
8−+++
9−
10−Forever Magazine founder and Zora Zine contributor Madeline Cash reports on secret societies, subjective idealism, and digital intimacy in her dispatch from Urbit Assembly in Miami
11−
content/articles/2022-09-29_the-dream-of-digital-homesteading.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "The Dream of Digital Homesteading"
3−publication = "Compact"
4−author = "Geoff Schullenberger"
5−date = "2022-09-29"
6−URL = "https://compactmag.com/article/the-dream-of-digital-homesteading"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/compactmag.png"
8−+++
9−
10−Geoff Schullenberger attends Assembly 2022 and chronicles his impressions and thoughts.
content/articles/2022-10-04_a-more-beautiful-computer.mddeleted−11
@@ -1,11 +0,0 @@
1−+++
2−title = "User Error: A More Beautiful Computer"
3−publication = "Spike Art Magazine"
4−author = "Adina Glickstein"
5−date = "2022-10-04"
6−URL = "https://www.spikeartmagazine.com/?q=articles/user-error-more-beautiful-computer"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/spike-logo-text.jpg"
8−+++
9−
10−From Dimes Square to the Network State, new frontiers are in the making. Adina Glickstein attends Urbit Assembly and considers the politics of tech-augmented exit.
11−
content/articles/2022-10-13_my-weekend-with-the-martians.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "My Weekend With the Martians"
3−publication = "Astra"
4−author = "Ruby Sutton"
5−date = "2022-10-13"
6−URL = "https://astra-mag.com/articles/my-weekend-with-the-martians/"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/astra.png"
8−+++
9−
10−At the Assembly, a conference of Urbit denizens, Ruby Sutton discovers a community of eccentrics who dare to dream of a different internet.
content/articles/2022-10-23_three-things.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "Three Things #40: October 23, 2022"
3−publication = "Three Things"
4−author = "Lane Rettig"
5−date = "2022-10-23"
6−URL = "https://rettig.substack.com/p/three-things-40-october-23-2022"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/3things40.jpg"
8−+++
9−
10−Lane Rettig outlines three unique aspects of Urbit in an attempt to answer the eternal question "What is Urbit?"
content/articles/2023-02-20_trailblazing-urbit-startup-makes-earth-shaking-acquisition.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "Trailblazing Urbit Startup Makes Earth Shaking Acquisition"
3−publication = "Globe Newswire"
4−author = "Globe Newswire"
5−date = "2023-02-20"
6−URL = "https://www.globenewswire.com/en/news-release/2023/02/20/2611391/0/en/Trailblazing-Urbit-Startup-Makes-Earth-Shaking-Acquisition.html"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/globe-newswire.jpeg"
8−+++
9−
10−Holium Corp closes $2.9 million in seed funding and acquires Third Earth in record pace.
content/articles/2023-05-10_urbit-a-network-older-and-weirder-than-bitcoin.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "Urbit, a Network Older and Weirder Than Bitcoin, Finally Turns Toward Growth"
3−publication = "Coindesk"
4−author = "Bradley Keoun"
5−date = "2023-05-10"
6−URL = "https://www.coindesk.com/tech/2023/05/10/urbit-a-network-older-and-weirder-than-bitcoin-finally-turns-toward-growth/"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/coindesk.jpg"
8−+++
9−
10−The peer-to-peer network started in 2002 says it's taking on "MEGACORP," much in the same vein as many blockchain networks. A bit more fun are the "secret code names" that users are assigned.
content/audits.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "Audits"
3−date = "2021-10-10"
4−weight = 1
5−description = "Urbit Security Audits"
6−+++
7−
8−Confidence and trust are fundamental to Urbit's ethos. The strength of our smart contract protocols are regularly scrutinized for potential vulnerabilities and enhanced when weaknesses are identified.
9−
10−To that end, we continue to maintain a robust security protocol. Our smart contracts are generally healthy and secure, but the process of auditing is never fully complete. As our ecosystem evolves, our security protocols evolve with it.
11−
12−Since transparency is an integral feature of trust, we've made our security audits publicly available. Please refer to the below documents for a more thorough analysis.
13−
14−### Security Audits
15−
16−- [Ames Networking Protocol Review](<https://storage.googleapis.com/media.urbit.org/site/audits/Tlon.io%20-%20Urbit%20AMES%20Networking%20Protocol%20Review%20Final%20Report%20(1).pdf>), Leviathan, November 2020
17−- [Urbit Constitution Audit](https://storage.googleapis.com/media.urbit.org/site/audits/Urbit%20Constitution%20Audit%20-%20OpenZeppelin.pdf), OpenZepplin, September 2021
18−- [Urbit Constitution JS Library Audit](https://storage.googleapis.com/media.urbit.org/site/audits/Urbit%20Constitution%20JS%20Audit.pdf), bloctrax, July 2018
19−- [Urbit Constitution JS Library Code Review](https://storage.googleapis.com/media.urbit.org/site/audits/Urbit%20Constitution%20JS%20Library%20Report%20-%20December%202018%20Review.pdf), bloctrax, December 2018
20−- [Urbit Keygen JS Library Report](https://storage.googleapis.com/media.urbit.org/site/audits/Urbit%20Keygen%20JS%20Library%20Report.pdf), bloctrax, September 2018
21−- [Urbit Keygen JS Library Report, 2nd Review](https://storage.googleapis.com/media.urbit.org/site/audits/Urbit%20Keygen%20JS%20Library%20Report%20-%20Second%20Review%20with%20Resolutions.pdf), bloctrax, November 2018
22−- [Urbit Security Audit](https://storage.googleapis.com/media.urbit.org/site/audits/Urbit%20Security%20Audit.pdf), bloctrax, June 2018
content/bitcoin-wallet.mddeleted−60
@@ -1,60 +0,0 @@
1−+++
2−title = "Bitcoin Wallet"
3−+++
4−
5−The latest Urbit release includes a native Bitcoin wallet. Please read the following security recommendations and disclaimers carefully. Urbit.org cannot recover any lost keys.
6−
7−### Instructions
8−
9−Run `|start %btc-wallet` in the dojo. After refreshing Landscape you should see an orange bitcoin tile in the first row. Clicking on it will prompt a two-step process:
10−
11−1. Enter a provider who is connected to a full-node (such as `~zod`). The provider will maintain a synced Bitcoin ledger, index your public addresses to determine your balance, and process your transactions.
12−
13−2. The next step is to provide an extended public key (or xpub). Providing your xpub allows the Bitcoin Wallet to automatically generate new public addresses (called _child public keys_—you can learn more about this [here](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)) when bitcoin is sent to your ship. To provide an xpub you can either enter your master ticket (which can be downloaded from [Bridge](https://bridge.urbit.org)), or directly import your xpub (such as from a hardware wallet like [Ledger](https://support.ledger.com/hc/en-us/articles/360011069619-Extended-public-key) or [Trezor](<https://wiki.trezor.io/User_manual:Displaying_account_public_key_(XPUB)>)).
14−
15−Clicking on the Landscape tile will take you to the Bitcoin Wallet application, where you can view your balance and send bitcoin. All that you'll need to do is enter the recipient's Urbit ID (if they have configured the wallet using the above steps) or a Bitcoin address.
16−
17−If you are interested in [being a provider](https://subject.network/posts/btc-wallet-config/#connecting-a-provider-to-a-full-node) or [running a bitcoin full node](https://subject.network/posts/pi-fullnode-urbit/#bitcoind) on the Urbit network please check out `~sitful-hatred`’s excellent tutorials.
18−
19−### Verify
20−
21−You should verify your version of this Bitcoin wallet. To do so, follow the instructions in the README in our [Github](https://github.com/urbit/urbit/blob/master/pkg/btc-wallet/README) repo.
22−
23−Instructions reproduced here:
24−
25−To verify your version of the bitcoin wallet, run the following command in the dojo:
26−`> +btc-wallet-check`
27−It should return with the following hash:
28−`0v9t022.n8kv1.5emkt.s2p9i.hvsa9`
29−
30−### Disclaimer Statement
31−
32−The Urbit Bitcoin Wallet and its related components are experimental pieces of software. You are free to review the open-source code before using:
33−
34−- [Wallet](https://github.com/urbit/urbit/tree/master/pkg/btc-wallet)
35−- [Full Node Provider Agents](https://github.com/timlucmiptev/btc-agents)
36−
37−No guarantees are made about the security of this software. It may contain vulnerabilities that could lead to loss of funds. This wallet software has not had a formal security audit.
38−
39−You can read about the security audit for Urbit's networking protocol in this [post](https://urbit.org/blog/security-audit/). This audit does not encompass the wallet, except to the extent that the wallet operates on Urbit's networking architecture.
40−
41−If you decide to use this wallet, please store responsible amounts of Bitcoin, and use best security practices. The developers of this software cannot help you recover your keys / funds, if lost.
42−
43−### License
44−
45−With the exception of its external dependencies, this software is a component of Urbit, and is released under Urbit's MIT License, reproduced below.  [View Original](https://raw.githubusercontent.com/urbit/urbit/master/LICENSE.txt)
46−
47−The MIT License (MIT)
48−
49−Copyright (c) 2015 Urbit
50−
51−Permission is hereby granted, free of charge, to any person obtaining a copy
52−of this software and associated documentation files (the "Software"), to deal
53−in the Software without restriction, including without limitation the rights
54−to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
55−copies of the Software, and to permit persons to whom the Software is
56−furnished to do so, subject to the following conditions:
57−
58−The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
59−
60−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
content/bitcoin.mddeleted−125
@@ -1,125 +0,0 @@
1−+++
2−title = "Bitcoin Development on Urbit"
3−+++
4−
5−### Overview
6−
7−Urbit OS currently ships with our Bitcoin wallet, %btc-wallet, released in 2021,
8−and our Lightning implementation, %volt, is almost ready for live use on the network. Several integrations with the app ecosystem are planned immediately following its release, including subscription publishing, social payments, and more.
9−
10−**The Urbit Advantage**
11−
12−- Composability: Modular userspace applications expose a consistent API format to each other locally and over the network, making seamless integration of Lightning payments, Taro assets, and other protocols easy
13−- Networking and identity: Exactly-once message delivery, NAT traversal, and E2E encryption come built into Urbit's P2P protocol, and Urbit identities are sybil-resistant, human-readable network addresses bound to BIP32 extended public keys
14−- Efficient, secure development: Urbit OS is strictly typed and purely functional, and apps have reproducible builds on all client machines, removing much of the complexity, risk, and pain points from development
15−
16−**Getting Involved**
17−
18−Interested in contributing to or supporting Bitcoin development on Urbit? GitHub repos for individual projects and information on the Urbit Foundation grant program are linked below, and dedicated Urbit groups and Bitcoin node operators on Urbit are listed in the Community section. You can also reach out to current contributors ~tondes-sitrym and ~pindet-timmut on Urbit or at urbitcoin@protonmail.com.
19−
20−### Wallet
21−
22−Urbit's Bitcoin wallet consists of two agents: %btc-provider, which communicates with an external full node; and %btc-wallet, which handles transaction generation and signing, and uses a %btc-provider instance (on the same ship or elsewhere on the Urbit network) to broadcast transactions and receive data from the Bitcoin network.
23−
24−Wallet users can receive payments using the xpub associated with their Urbit ID, allowing Bitcoin payments to be sent between ships with a persistent, human-readable network address without compromising on-chain privacy.
25−
26−**Resources**
27−
28−GitHub
29−
30−- Agents: [https://github.com/urbit/urbit/tree/master/pkg/bitcoin](https://github.com/urbit/urbit/tree/master/pkg/bitcoin)
31−- UI: [https://github.com/urbit/urbit/tree/master/pkg/btc-wallet](https://github.com/urbit/urbit/tree/master/pkg/btc-wallet)
32−- Provider utilities: [https://github.com/urbit/urbit-bitcoin-rpc](https://github.com/urbit/urbit-bitcoin-rpc)
33−
34−Writeups
35−
36−- Grant proposal: [https://urbit.org/grants/bitcoin-full-node-provider-and-wallet](https://urbit.org/grants/bitcoin-full-node-provider-and-wallet)
37−- Architecture document: [https://gist.github.com/jalehman/e0c91071427ca4c349c0673f376945cb](https://gist.github.com/jalehman/e0c91071427ca4c349c0673f376945cb)
38−- Provider setup guide: [https://subject.network/posts/pi-fullnode-urbit/#bitcoind](https://subject.network/posts/pi-fullnode-urbit/#bitcoind)
39−
40−
41−**Continuing Work**
42−
43−The current %btc-wallet implementation is not a modern BIP-157/158 light client. While users who depend on another ship's %btc-provider/full node for communication with the Bitcoin network do not risk loss of on-chain funds, their lack of visibility on the network will be more problematic for those also using it with Lightning. Funding is available for developers interested in contributing: reach out to the Urbit Foundation, ~tondes-sitrym on Urbit, or urbitcoin@protonmail.com.
44−
45−### Lightning
46−
47−Volt, Urbit's Lightning implementation, like our Bitcoin wallet consists of two agents: %volt, the primary agent that manages channels, payments, invoices, and chain monitoring; and %volt-provider, which connects to an external LND node for handling payments with endpoints outside the Urbit network.
48−
49−All Volt nodes will run %volt, and be able to operate channels with Urbit peers without maintaining an LND instance or depending on another ship that does. To transact with non-Urbit Lightning peers, and in the short term (see below) to perform multi-hop payments inside Urbit, they will need to open a channel with a node that uses %volt-provider to connect with LND. Chain monitoring likewise requires connecting to a local or remote %btc-provider agent (see Wallet above). For more details on the network architecture, see the grant proposal linked below.
50−
51−Volt implements BOLTs 2, 3, 5, and 11, and in the near future will add onion routing (variants on BOLTs 4 and 7). Because %ames, Urbit's networking module, already handles transport, guarantees required message delivery properties, and furnishes persistent, unique 'domain names', implementation of BOLTs 1, 8, and 9 is unnecessary for Volt nodes.
52−
53−Beta release of Volt is planned for the end of 2022, and additional features including multi-hop/onion routing implementation are proposed for completion by mid-2023.
54−
55−**Resources**
56−
57−GitHub: [https://github.com/dasrun-fadben/volt/tree/on-chain](https://github.com/dasrun-fadben/volt/tree/on-chain)
58−
59−Initial grant proposal and spec: [https://urbit.org/grants/volt-lightning-on-urbit](https://urbit.org/grants/volt-lightning-on-urbit)
60−
61−Proposal for further work: [https://urbit.org/grants/lightning-development](https://urbit.org/grants/lightning-development)
62−
63−**Continuing Work**
64−
65−The primary element currently missing from Volt is onion routing of multi-hop payments for full privacy and efficiency of payments to and from nodes that don't also operate LND. This has been partially specified in the second proposal linked above: funding and collaborators are available for this as well as work described there on application integrations, submarine swaps, and more, so interested developers should take a look and get in touch.
66−
67−### Roadmap
68−
69−**2022**
70−
71−- *Volt Beta Release*
72−Final work on channel sweeps, remaining safety checks, and UI development is currently ongoing and expected to be complete by EOY 2022.
73−
74−**2023**
75−
76−- *Initial Ecosystem Integrations*
77− - Submarine swaps: Implementation of the PeerSwap protocol, fallback use of the Loop API, and UI targeted at merchant use-cases. Funded, expected completion in spring 2023.
78− - Apps: Integration of Lightning subscription and one-time paygates into Groups, social payments and %volt-provider discovery with %pals, and app tipjar module. Specified and proposed for grant funding.
79−- *Lightning Routing*
80−Payments with multiple intra-Urbit hops and via multiple %volt-provider channels are the last remaining component for full-featured and private payments with Volt. Specified and proposed for grant funding.
81−- *Wallet Improvements*
82−Work on feature, security, and UI upgrades for the Bitcoin wallet and node provider, aimed at making the application a full-featured and BIP157/158-compliant light client, should begin before EOY 2023.
83−
84−**Future**
85−
86−- *Taro Implementation*
87−Implementation of Taproot Asset Representation Overlay, with an initial focus on using nonfungible Taro assets to represent credentials, permissions, and reputation of Urbit identities.
88−- *Atomic Streaming Payments*
89− - Integration of Volt payments with streaming apps like %radio and the Holium WebRTC client via HTLC-DASH or similar implementation.
90− - Generic protocol for non-media pay-to-stream data
91−
92−### Grants
93−
94−The Urbit Foundation operates a grant program aimed at new Urbit developers, network public goods, and community development. Work on the Bitcoin wallet, Lightning implementation, and submarine swaps for Volt (Urbit Lightning) users all has received funding from UF, and interesting non-technical proposals with social value to the network are also considered.
95−
96−Grants homepage: [https://urbit.org/grants](https://urbit.org/grants)
97−
98−Past Bitcoin-related grants
99−
100−- [https://urbit.org/grants/bitcoin-full-node-provider-and-wallet](https://urbit.org/grants/bitcoin-full-node-provider-and-wallet)
101−- [https://urbit.org/grants/volt-lightning-on-urbit](https://urbit.org/grants/volt-lightning-on-urbit)
102−- [https://urbit.org/grants/lightning-development](https://urbit.org/grants/lightning-development)
103−
104−## Bitcoiners on Urbit
105−
106−### Groups
107−
108−Urbitcoiners: ~pindet-timmut/urbitcoiners
109−
110−### Providers
111−
112−**Bitcoin Full Nodes**
113−
114−~tirrel
115−~zod
116−
117−**Lightning Nodes**
118−
119−~tondes-sitrym
120−~bosdys
121−
122−### Guides
123−
124−Running %btc-provider with a full node on Raspberry Pi: [https://subject.network/posts/pi-fullnode-urbit/](https://subject.network/posts/pi-fullnode-urbit/)
125−
content/blog/2019-10-3-roadmap.mddeleted−112
@@ -1,112 +0,0 @@
1−+++
2−title = "~2019.10 Roadmap"
3−date = "2019-10-02"
4−description = "Galen Wolfe-Pauly on the road ahead for the identity/OS/interface/community stack."
5−aliases = [
6− "/posts/essays/2019-10-3-roadmap",
7− "/posts/2019-10-3-roadmap"
8−]
9−
10−[extra]
11−author = "Galen Wolfe-Pauly"
12−ship = "~ravmel-ropdyl"
13−image = "https://media.urbit.org/site/posts/essays/2019-10-3-roadmap.jpg"
14−+++
15−
16−![](https://media.urbit.org/site/posts/essays/2019-10-3-roadmap.jpg)
17−
18−The daily work of building a new OS from scratch is so engaging and exciting that we habitually forget to even take stock of what we’ve accomplished. We’re fixated on the prospect of moving the world on to Urbit, starting with ourselves.
19−
20−It’s a good thing I have a recurring reminder to write these updates. While our focus is on the future, it’s good to get a sense of the rate that we’re moving forward, and to let everyone know what’s been going on. We’ve made great progress over the past few months.
21−
22−We’ve got a new interface, Urbit 0.8.0, Hoon School, and a grants program among lots of other updates. We’ll go into detail about all of these, and talk a bit about where we’re headed next. The system is improving at a really good pace. We intend to keep it up.
23−
24−## Identity (Azimuth)
25−
26−The other day I got an email, clicked a link, and got a planet. A real, live, piece of cryptographic property with paper wallets and everything. It took about two minutes. And at the end, I could have easily sent invites to my friends.
27−
28−This experience is part of a completely new Bridge, the interface for interacting with your Urbit identity. The beta experience we’re testing today is quite stripped down, but it’s a huge improvement over the last Bridge release. Clicking a link is a lot easier than downloading source code, running it from the command-line, and probably running into a python-related error.
29−
30−Getting to this point involved rewriting Bridge from scratch, figuring out how to host it securely, building infrastructure to fund the requisite transactions involved in registering a new identity, and setting up a service to send emails (and dispose of them afterward). We've also redesigned our paper wallets to make them simpler and clearer.
31−
32−We still want to get this new version of Bridge a bit further along before releasing it to everyone — but we’re excited about it. We didn’t quite get to the point of building an affordance for payments, which we had hoped to do, but that’s coming later.
33−
34−We want everyone to have an Urbit identity. And we want it to be incredibly easy to get one, so we’ll get Bridge out this month with a new urbit.org (more on that below).
35−
36−The other area of identity-related work was Sigils — the algorithmically generated images that go with every Urbit identity. (We’ve got a blog post in the works that covers how we created these, which is a good story that needs to be told.) The original version of Sigils didn’t look very good at small sizes and a few collisions were found (thanks to [urbit.live](https://urbit.live) for helping to discover the collisions). The [new, improved sigils](https://github.com/urbit/sigil-js) have no collisions and look great at small sizes.
37−
38−**Q4 2019**
39−
40−- Release Bridge to the public
41−- Get Bridge working well on mobile
42−- Add payments support, hopefully including BTC
43−- Add a network explorer
44−
45−**Q1 2020**
46−
47−- Integrate Bridge with a native app for Arvo
48−
49−## OS (Arvo)
50−
51−As a team, we want Urbit to be our primary computer, our last computer, our permanent computer. And we want this now — or at least as soon as we possibly can. We’re both ambitious and impatient.
52−
53−The frustration that we can’t move onto Urbit today propels us forward. The system saw major updates over the past few months all the way through the stack. On the Arvo side, we divide our work into Infrastructure (everything in the kernel and interpreter) and Interface (everything in userspace and the front-end). We’ll start with Infrastructure progress first.
54−
55−We’re very nearly to the point that all the kernel-level code in the system has been written by our current team. The one remaining vane that deserves a rewrite (Gall) has had a major cleanup by Jared just recently. The [Ship of Theseus](https://en.wikipedia.org/wiki/Ship_of_Theseus) approach does appear to be working. The infrastructure team is doing fantastic work and has really deepened their ownership of the system. The Urbit of today is on the road to becoming a great piece of system software.
56−
57−The biggest infrastructure-level milestone was the release of [Urbit 0.8.0](https://github.com/urbit/urbit/releases/tag/v0.8.0). We introduced a new process-separation architecture, implemented the correct bootstrap sequence, moved to LMDB for persistence, replaced our http vane (%eyre) and moved to Nix for our build system.
58−
59−To put it simply, Arvo is now much more stable and durable. During the beginning of the year we were seeing bugs and instability that were frustrating and unacceptable. While there are still issues on the live network, none of them terrify us much. We also implemented the ability for users to ‘individually breach’, which means that you can now reset your Urbit without waiting for us to reset the network.
60−
61−### Landscape (Arvo UI)
62−
63−We don’t just build infrastructure for others to develop on top of. We build interfaces too. At the top of the stack, we released a completely new Landscape, the interface for Arvo. This new interface makes it possible to build other ‘modules’ for Arvo that go beyond chat and publishing.
64−
65−This new Landscape is a complete departure from the last direction. Your Urbit now has a simple home screen that launches individual modules and it’s [relatively easy](https://github.com/urbit/create-landscape-app) to create new ones. We’re all enjoying using Landscape around the office. It’s still a bit of a prototype — but it’s quite a good one, I think.
66−
67−In moving to this new model we decided to narrow our focus to desktop only for now. We’ll return to mobile again next year — but first we want to get the desktop experience right. We’ve pulled the iOS app from the app store for the time being. I’m personally sad to see it go, since I enjoyed using it. But our prior iteration of Landscape just wasn’t quite right.
68−
69−This version of Landscape is, I think, the last one that we’ll call a prototype. Over the past few weeks, since shipping this, some amazing work has been happening on the interface front. We have a systematic approach to building interfaces on top of Urbit that’s very promising, albeit just getting started. We’ve already put out [one post](https://urbit.org/posts/landscape-a-portrait/) about Landscape's future, with more posts to come.
70−
71−**Q4 2019**
72−
73−- Improved Arvo-level error handling
74−- Implementation plan for ‘telescoping kelvins’ — or [how we plan to future proof Arvo](https://groups.google.com/a/urbit.org/forum/#!topic/dev/6Mwn6TQFVwc)
75−- Versioning scheme between Arvo and Vere
76−- A new Haskell implementation of the daemon
77−- A native client (instead of just a browser tab)
78−- A [new user-space architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit)
79−- Hoon.hoon that’s OTA upgradeable
80−- Working Jacque prototype, a graal-truffle-based implementation of vere
81−
82−**Q1 2020**
83−
84−- Integrated client with Bridge and Arvo
85−- New interface framework, codenamed ‘Widescreen’
86−
87−## Docs + Community
88−
89−We had quite a bit of interest in our second session of Hoon School. We ended up with 150 people enrolled in Hoon 101, and 42 in 201. The 101 session just ended, with a lot of positive responses and feedback from the participants. We learned a lot doing it and got quite a bit of interesting new example code.
90−
91−Hoon 101 started with students with little to no programming experience. Hoon 201, which is just getting underway, covers more advanced topics. We’re quite curious to see what comes out of it.
92−
93−We’re also adding features to Landscape to make it more amenable to use by Hoon Schoolers. Good examples include code evaluation within Chat (for office hours), and the ability to pin posts in Publish. The next crop of Hoon learners will be able to use Urbit to learn about Urbit.
94−
95−Aside from Hoon School we’re always updating our documentation. Most notably, we added search to the docs (finally). This was a much needed feature that makes the docs much more usable.
96−
97−We also launched our [grants program](https://grants.urbit.org/) quietly, but all of our available bounties were quickly claimed nonetheless. We’re ready to give away more address space to contributors and are excited by how quickly people got involved.
98−
99−We also did some experimentation with holding events on Arvo. We held weekly AMAs for while, and hosted a few meetings with the community. With the new UI out, our public channels have been a lot more active. We’ll surely be holding more on-urbit events in the future — but for the time being the conversation in urbit-help is a lot of fun.
100−
101−**Q4 2019**
102−
103−- Vane level documentation
104−- An active grant program
105−
106−## urbit.org
107−
108−Urbit.org is about ready for a refresh — so we’re in the process of rebuilding it. We have, for a long time, told the story of Urbit by describing the system technically. We think Urbit can be explained much more simply and much more concisely. We’re working to put together a new set of materials in this direction.
109−
110−We’d also like to populate urbit.org with a lot more content about what we’re working on and thinking about. We do a reasonable job of writing updates, but many of our projects get released without any background info. Tlon and the Urbit community are full of smart, thoughtful people — and we’d like to do a lot more to surface their work. We plan to close out the year with both a new website and a lot of writing about what we’ve been building. Not everyone wants to read the source code!
111−
112−That covers it for now. If you have questions or want to chat — find us in `~dopzod/urbit-help`. See you online!
content/blog/2020-to-2021.mddeleted−45
@@ -1,45 +0,0 @@
1−+++
2−title = "2020 -> 2021"
3−description = "Reflecting and looking forward."
4−date = "2021-01-20"
5−
6−[extra]
7−author = "Josh Lehman"
8−ship = "~wolref-podlex"
9−image = "https://media.urbit.org/site/posts/essays/arch-sunrise-2.jpeg"
10−+++
11−
12−![arch](https://media.urbit.org/site/posts/essays/arch-sunrise-2.jpeg)
13−
14−In 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.
15−
16−## 2020
17−
18−In spite of the many challenges presented over the last year, it was a resoundingly good one for Urbit.
19−
20−It seems like a long time ago now that the folks at Tlon rolled out OS1 (now called Landscape), just as the pandemic forced everyone into their homes throughout the world. At the time, [Urbit is for Communities"](https://urbit.org/blog/urbit-is-for-communities/) was just a vision, but now it’s been transformed into reality—there are more thriving communities in Landscape than any of us can keep track of, with new faces popping onto the network on a daily basis.
21−
22−Landscape brought many new ships onto the network which helped identify those areas in which Urbit’s infrastructure could be most improved. [Ford Fusion](https://urbit.org/blog/ford-fusion/) eliminated the possibility of a partially-applied over-the-air (OTA) update through a drastic reduction in the size and complexity of the codebase. The efficiency of the OTA process was improved by several orders of magnitude, and many long-standing memory issues were resolved. Now we deploy code on our infrastructure nodes and see users receive an update, over a decentralized network, often in less than a minute.
23−
24−After improving the stability of the system Tlon turned its attention to bringing more ships onto the network. A long-standing barrier to Urbit’s adoption has been the technical knowledge required to host one’s own ship—this prompted Tlon to build and launch an Urbit [hosting service](https://tlon.io), the waitlist for which is now thousands deep.
25−
26−With Tlon becoming more singularly focused on building products on Urbit, concrete steps have been taken towards making urbit.org a separate organization that’s focused on long-term development of Urbit’s platform. I joined to [lead that effort](https://urbit.org/blog/first-steps-towards-urbit-org/) back in August and have since spent the majority of my time working with dozens of contributors on projects spanning documentation, education, external integrations, and much more.
27−
28−We rounded out the year with a full network reset (called a “continuity breach”), which has in the past has been synonymous with loss of all data on the network. This time things went differently: tooling was made available to the community that allowed ships to preserve their data, which enabled most to seamlessly rejoin post-reset. This is a significant milestone for the project as it signifies not only a commitment to technical excellence, but to supporting our budding community.
29−
30−## 2021
31−
32−In the last three weeks we’ve seen a huge amount of inbound interest as people are waking up to the inherent problems with using centralized services run by MEGACORPs—we’re just happy we started working on Urbit all those years ago. While we tend to not plan more than about six months in advance, I can still talk at a high level about what urbit.org will be focusing on in the immediate future.
33−
34−Growth in Urbit’s developer community has been growing organically in lockstep with the overall network growth. This means, happily, that there’s a pretty large pool of people eager to contribute to Urbit. The priority for urbit.org, therefore, is to improve its capacity to effectively assist contributors. In broad strokes, this means:
35−
36−- Rework urbit.org to better help developers learn how to contribute to Urbit
37−- Since Urbit is ready to build on top of, provide practical guides that demonstrate how to do so
38−- Guide developers to make high-value contributions to Urbit and its ecosystem
39−- Build community amongst contributors
40−
41−My strategy to date has been heavily focused on working directly with contributors to provide technical guidance and direction, and it’s been working really well. To that end I’ll also be scaling our ability to provide such support by bringing more individuals into urbit.org that can mentor, review work, and provide guidance on where to best direct contributors' energy.
42−
43−2021 is shaping up to be a big year for Urbit, and we'd [love your help](https://grants.urbit.org) in building it. If you want to see what we're working on in real time, join us in Landscape at ~wolref-podlex/foundation.
44−
45−See you on the network!
content/blog/20200929-state-of-urbit.mddeleted−72
@@ -1,72 +0,0 @@
1−+++
2−title = "Late 2020 Progress Update: OS 1 -> OS 1.N"
3−date = "2020-09-28"
4−description = "When 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."
5−
6−[extra]
7−author = "Galen Wolfe-Pauly"
8−ship = "~ravmel-ropdyl"
9−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-1.jpg"
10−+++
11−
12−![Grassy Knoll](https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-1.jpg)
13−
14−When 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.
15−
16−We’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.
17−
18−In a way, our ability to use Urbit day to day doesn’t make sense. When we shipped OS 1, it was full of holes. There were serious performance, stability, and reliability issues. Plenty of people showed up and thought, ‘I don’t understand why you think this is useful.’ But, it was good enough that we wanted to use it. And since we wanted to use it, we put our energy into making it better like we hadn’t ever before. Being able to use a system that you can really trust is a wonderful feeling. It’s Computing Without Compromises.
19−
20−All of the sudden, it’s Fall. We never found the time to name any of our releases or write announcements. We’ve just been making the system better in every way we can find. We’ve got a lot of exciting things planned for the last few months of the year — but I wanted to recap the progress we’ve made for those following along from the outside. If you haven’t been on the network, it’d be impossible to see.
21−
22−The tl;dr is that Urbit is much faster, more reliable, and nicer to use than it was six months ago. Things have gotten much better, across the board. We threw ourselves into OS 1 admittedly underprepared, but we’ve learned a lot and matured the system a lot along the way.
23−
24−Anyway, let’s walk through the details. We’ll talk about our infrastructure and interface work independently, since that’s how we organize things internally. Then we’ll talk a bit about what’s going on on the network.
25−
26−### Infrastructure
27−
28−![Debugging Interface](https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-2.png)
29−
30−In April, Urbit was slow, fragile, and didn’t always update itself properly. We made enormous progress on all of these.
31−
32−First off, Urbit is about 10x faster for most users. With some careful debugging, we were able to locate a few really [high](https://github.com/urbit/urbit/pull/3029) [impact](https://github.com/urbit/urbit/pull/3054) [improvements](https://twitter.com/pcmonk/status/1276327036722704385). There’s still performance work to do, but the effects of this work are widespread. Boot times are faster, local compute is faster, the network is faster. It’s a huge improvement.
33−
34−Second, we got our memory usage under control. Urbit still uses a 2GB memory arena. If the state of your Urbit grows to over 2GB things, uh, fall apart. This used to happen regularly, and now it’s pretty much unheard of. We implemented [tooling](https://github.com/urbit/urbit/pull/3235) to compact and deduplicate the memory image when it’s growing too large. We brought the memory usage of the compiler [down ~90%](https://github.com/urbit/urbit/pull/3041). There are areas where we can be more disciplined about how we use memory, but this is more or less a solved problem for the near term.
35−
36−Third, we implemented a completely new build system. Well, we actually [got rid of the build system](https://urbit.org/blog/ford-fusion/) altogether and [made it a part of the filesystem](https://github.com/urbit/urbit/pull/3060). This made it possible for us to fix our over the air (OTA) updates and make them both fast and reliable. In April, an OTA could bring down your node and would take hours or even days to apply. Today, we regularly deploy OTAs with no fear of them breaking any nodes — they often go from galaxy → planet in a minute or less.
37−
38−We also rewrote a large part of our runtime in Haskell and made overall progress on [network scaling](https://github.com/urbit/urbit/pull/3174). And: we implemented a [principled approach](https://github.com/urbit/urbit/pull/2366) to [error handling](https://github.com/urbit/urbit/pull/3064), making nodes much less likely to become unrecoverable.
39−
40−The network is stable, fast, and safe from day to day. We’re pretty confident it can grow quite a bit without serious issues. When we shipped OS 1 we really weren’t sure what we could handle. Now we’re standing on much more solid ground.
41−
42−### Interface
43−
44−![](https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-3.jpg)
45−
46−When we shipped OS 1 it was a bunch of separate pages (that were slow to load), all with separate ways of storing and processing data. Our interface work over the past six months is all about unification and simplification.
47−
48−First, we pulled OS 1 together as a [single page app](https://github.com/urbit/urbit/pull/3025). Using OS 1 involves a good amount of moving around and refreshing the page each time was pretty painful. Now it’s snappy to move between pages and keep up with what’s going on. In tandem, we started using our own component library, [Indigo](https://github.com/urbit/indigo-react). This makes frontend development much cleaner and more efficient.
49−
50−Next, we unified the way we store data and compute. It used to be that each individual module (chat, publish, and links) used their own ‘agents’ to store and process data on the Urbit side. (An agent is the Urbit equivalent of a datastore + business logic.) With a lot of moving parts, this approach caused all kinds of synchronization challenges. Rather than a module-per-agent model we’ve started to move toward a type-of-data-per-agent model. The first of these is [graph store](https://github.com/urbit/urbit/pull/3110). We’re presently in the process of migrating all our modules to graph store.
51−
52−Those two are by far the most significant, but there’s so much more. We [rewrote](https://github.com/urbit/urbit/pull/2937) the `group-store`, allowing for different roles (admin, moderators, and so on) in a group. We shipped better debugging tools, automatic reconnection, a settings panel, and overall visual polish and refinement.
53−
54−![](https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-4.jpg)
55−
56−And I almost forgot [Leap](https://github.com/urbit/urbit/pull/3231): an omnibox for navigating around OS 1 with the keyboard. We have plans to make Leap much more powerful — but it’s a great first start toward making OS 1 keyboard accessible. I almost exclusively use [Leap](https://upload.wikimedia.org/wikipedia/commons/0/06/Canon_Cat_keyboard.jpg) to get around OS 1 these days.
57−
58−### Community + network
59−
60−![Fishing Village](https://storage.googleapis.com/media.urbit.org/site/posts/essays/state-of-urbit-5.png)
61−
62−Our primary goal with OS 1 was to get both Tlon and the Urbit Community living entirely on Urbit. We did that, and in doing so we’ve seen how nice it is to grow a community in a calm, non-invasive environment. We started doing regular [Urbit](https://twitter.com/urbit/status/1308875082312364048) [Dialogues](https://twitter.com/urbit/status/1304139629948329985) with friends and peers in the absence of physical meetups, which have been fun.
63−
64−Getting onto Urbit is still relatively challenging. By the standards of software you run yourself, it’s not so bad at all. But by comparison to ordinary consumer software, it’s way too hard. Tlon is [working on that](https://tlon.io) — but these last six months have been only for the brave. That is, those that want to host their own nodes.
65−
66−Turns out, there are plenty of people who are up for running Urbit themselves and quite a few small communities have sprouted around the network. Overall the network has a fun, cozy feeling. It’s nice.
67−
68−### What’s next
69−
70−We’re still more or less flat-out, full speed ahead into an even better Urbit-world. The seeds of change were planted when we made Josh the [interim technical director of urbit.org](https://urbit.org/blog/first-steps-towards-urbit-org/). Urbit itself is getting close to the point where the separation between Urbit and Tlon has to become more real. Urbit is aimed at being an ubiquitous platform, Tlon is aimed at making it as usable and useful as possible.
71−
72−We’ll talk about some of this on [October 9th](https://www.meetup.com/urbit-sf/events/273439025/), and you can see a bit of what’s coming on [tlon.io](https://tlon.io) today. If you tried booting Urbit in April and it was tough, try again. We’re easy to find on the network, and we’d love to get reacquainted.
content/blog/20201119-models-of-society.mddeleted−65
@@ -1,65 +0,0 @@
1−+++
2−title = "Models of Society"
3−description = "Conversations compose society. What composes conversation — how do we digitize it in a way that enhances society without imposing upon it? How do we form this new medium, both to facilitate natural human behavior and to inspire the best of it?"
4−date = "2020-11-18"
5−
6−[extra]
7−author = "Tyler Shuster"
8−ship = "~radbur-sivmus"
9−image = "https://media.urbit.org/site/posts/essays/cochno-stone.png"
10−+++
11−
12−_I had used Facebook and Google for my entire adult life. I knew they were toxic but I didn't know why. For a few weeks I tried to create a website that would scrape data from Facebook’s API and push data back, puppetting it from my own server. But as I stared headlong into the ever-shifting darkness of the modern web, I despaired and abandoned my attempt. Less than a year later I heard about Urbit. Technically, it went way over my head&mdash;but socially I knew exactly what it was, what it always had to be, why it was a discovery and not an invention, a place and not a product. I've watched the settlers there for four years, only just now using the opportunity of the pandemic to swim to this new landscape and gaze upon this young nation, this digital city, this urbis ec bit. I do not work for Tlon. I just live here._
13−
14−<hr>
15−
16−All people like to talk. Society is built by talking. In this&mdash;the year of our Lord two thousand and twenty&mdash;for many (maybe most) talking means typing on computers: handheld, laptop, or desktop. Computers can do all sorts of interesting things, like aid in designing buildings or simulate protein folding&mdash;fundamentally, a computer is a machine for doing math really fast. But computers can be networked, which turns them into tools for communication. Because society runs on talking and because computers enable us to do that, the most common thing that computers end up doing is to transmit human thoughts in text. Normal people call this writing, which is a kind of talking. Let’s call it messaging. When we think about building a good computer&mdash;and computer network&mdash;one that serves society in the best ways needs to do messaging well. Only a small percentage of people will regularly do anything else. (Urbit does serve those needs but I will leave that explanation to more capable minds.)
17−
18−## Modes of Messaging
19−
20−![Ludovic Maclellan Mann examining the Cochno Stone](https://media.urbit.org/site/posts/essays/cochno-stone.png)
21−
22−In 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.
23−
24−Consider 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.
25−
26−Although we do not have a clear picture of how humanity developed the technology of writing out of the basic capacity for speech, we can imagine that the computerization of writing has many parallels. It does not make the old tools obsolete, nor does it immediately introduce new social structures. It does create the potential, however. On the timeline of human existence, we have only had digitized text for a relatively short time. Because we want to understand how to best use these new forms, we should look at their underlying structure.
27−
28−In order to digitize messages well, computers need to reconcile two facts about all modes of messaging. They have:
29−
30−1. One basic shape, and
31−2. An infinite variety of forms.
32−
33−1 &mdash; The basic shape: all these modes have one common substance: human language. Any conversation is made of words. At first we only had spoken language. Then we discovered writing. Writing allows us to encode our words as glyphs to transmit them over time or distance. The internet extends this capacity. We called this "hypertext"&mdash;like good old fashioned text, but one level up. A staggering amount of messaging now takes place over this hypertext transfer protocol (http). In the process of digitizing language, we have learned the basic shape of a message. We can see this in how every social network shares messages in basically the same shape: an author, some content, references, an audience. We can confirm this basic shape by comparing it against our experience of the real world, and the previous comparison between speech and writing. Speech and writing both use the same substance, and take the same basic shape. They all have an author, content, references, and an audience.
34−
35−2 &mdash; Our experience of this one basic shape takes an infinite number of forms. The examples above (letter, meeting, &c) are just a few. These forms depend on the content of the message, the people involved, and the place they occur. All three aspects contribute significantly to its form, but the one that computerized messaging has not adequately compensated for is the place. Content depends only on the author and their intent. Getting certain people to view that content might be more difficult but most know how to use a computer. The place however, has not yet been adequately compensated for, and I think that has contributed seriously to our lack of civil and serious discourse over the internet. A president would not give an address in a bar, and a prospective lover would not utter his advances on stage. In writing, we can use the different physical forms to distinguish place. You shouldn’t read a book by the pool. You might not read a letter in public. You wouldn’t put a billboard in your bedroom.
36−
37−Furthermore, it seems possible that in our eagerness to "connect the world," we focused injudiciously on creating communities around "interests." Evidence suggests that unless the interest has a highly refined focus, these communities devolve into pandering, self-reference, and exploitation. In this way, the internet is something like a convention of conventions, where you wander in a sea of foreigners loosely affiliated by interest and surrounded by advertising booths. In physical space, people do gather by interest but they also gather by physical proximity&mdash;they are grounded and bound in place.
38−
39−Having an indistinct sense of place makes the form of conversation ambiguous and the participants of the conversation disconnected. Consequently, people are unsure how to interact. One need only know the term "comments section" to understand that.
40−
41−## People in Places
42−
43−![Halle Saale Marktplatz](https://media.urbit.org/site/posts/essays/halle-saale-marktplatz.jpg)
44−
45−As 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.
46−
47−The 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.
48−
49−People need distinct spaces to form conversations in distinct modes, and they need to have a consistent identity that controls how public their words are.
50−
51−In theory, we would have a digital city with unique regions, public fora, and sovereign parcels, into which one person might travel at will. In practice, we see this pattern: an app emerges to facilitate a mode of conversation. It gains popularity. Facebook (or Google, or Microsoft) buys and absorbs it. As monolithic empires, they can use the same format for all their messages. This gives them a great amount of power. They use this power to create things like "Sign in with Facebook" (or Google, or Microsoft) that benefit the user by consolidating their identity, but fail to solve the underlying problem. Their problem is that in order to allow people to communicate using the current technology stack, they need to be in control of everything.
52−
53−## Urbis ec Bit
54−
55−![View of Florence from San Miniato](https://media.urbit.org/site/posts/essays/view-of-florence.jpg)
56−
57−Urbit 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.
58−
59−In 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.
60−
61−The default tools work with messages in a few of the ways with which we've grown familiar: chat, direct messaging, publishing, link-sharing. They map onto existing forms of messaging because as I said earlier, the technology does not create new social structures; it just facilitates them. We have only seen the beginning of what the internet is capable of doing. Within a few decades it replaced the majority of letters, phone calls, and text dissemination&mdash;that was just the first phase of getting up to parity with what written text and speech could already do. In order to get to the next phase of creating new social processes, we need our technology to be organic and democratic, in the sense that everyone can participate and shape it. It needs to have a consensual foundation&mdash;a common substrate&mdash;and infinite possibility for expression. Urbit provides both of those.
62−
63−Similar to working undeveloped land, it takes a lot of hard work, which is why Urbit is not ready for mainstream adoption yet, and why I alluded to the idea of settlers in my opening paragraph. Traveling to the new world is not for everyone, but everyone is welcome.
64−
65−_How could one do other than submit to Tlön, to the minute and vast evidence of an orderly plant? It is useless to answer that reality is also orderly. Perhaps it is, but in accordance with divine laws&mdash;I translate: inhuman laws&mdash;which we never quite grasp. Tlön is surely a labyrinth, but it is a labyrinth devised by men, a labyrinth destined to be deciphered by men._
content/blog/2021-11-18-report-from-the-field.mddeleted−94
@@ -1,94 +0,0 @@
1−+++
2−title = "Report from the field: Assembly 2021"
3−date = "2021-11-18"
4−description = "The system builds the community and the community builds the system."
5−[extra]
6−author = "Galen Wolfe-Pauly"
7−ship = "~ravmel-ropdyl"
8−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/galen-at-assembly.JPG"
9−+++
10−
11−![Galen at Assembly](https://storage.googleapis.com/media.urbit.org/site/posts/essays/galen-at-assembly.JPG)
12−
13−Before Assembly I committed to write a ‘recap’ post for everyone who couldn’t make it. Originally I figured this post would be an opportunity to walk through the list of things that we shipped and showed off in Austin. But it turns out that the most important thing about Assembly was simply the way it felt to be there.
14−
15−I’m not sure it’s possible to really do the feeling in the room justice, but I’m going to try. Then I’ll get into the announcements and happenings for those of you who couldn’t make it.
16−
17−But first, a quick note:
18−
19−We ran Assembly under the [Chatham House rule](https://en.wikipedia.org/wiki/Chatham_House_Rule). Basically, you can talk about what happens at Assembly—but you can’t name anyone.
20−
21−I’ve run many of our Urbit events this way because I think it puts people at ease. Everyone in the room can just relax, connect with one another, and hang out without worrying about being named on the internet.
22−
23−I’ll try to abide by the Chatham rule in this post which is why no one is named specifically.
24−
25−![secret society shirt](https://storage.googleapis.com/media.urbit.org/site/posts/essays/secret-society-shirt.JPG)
26−
27−New world energy -
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 *ready to build*.
30−
31−When 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−
33−We didn’t have much scheduled during Assembly. Most of the time was unstructured to allow for freeform discussion, sunbathing on the lawn, and gathering at picnic tables. The panels that we did schedule will go down in history. Panelists discussed questions about creators, escaping reward systems, and the role of DAOs from governance to governments. There was hard money with a computer on it, Moloch shoes, community members grabbing the mic, and a talk written two hours before it was delivered about the relationship between centralization and decentralization when it comes to UX that blew our minds.
34−
35−I 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−
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−
39−This 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−
41−![Use only beautiful computers](https://storage.googleapis.com/media.urbit.org/site/posts/essays/use-only-computers.JPG)
42−
43−Urbit is ready to be built upon -
44−
45−Sometime in early 2021 we realized that there were many lines of work converging on a single theme: ‘Urbit is ready to be built upon’. This is the spirit we wanted to bring to Assembly, and it was very much in the room in Austin. Some of that feeling is still lingering on the network. I think it comes from some very concrete improvements that have been made to the system.
46−
47−We’ve always wanted Urbit to be maintained by a self-sustaining ecosystem and, early this year, we could see what needed to be done to really let others begin doing so. There were four parallel projects that came together to hit this milestone: Software distribution, star.market, developer and operator guides, and the Foundation roadmap. We talked about all of these things in the Assembly keynote (which you can watch [here](https://www.youtube.com/watch?v=ywj36TUtbS4)), but let’s touch on them one by one.
48−
49−Software distribution
50−
51−The most important thing that we shipped just before Assembly is the ability to actually package and distribute software over Urbit itself. It’s now possible for someone to build an app, package it up, and share it with a friend directly over the network.
52−
53−For their friend, the experience is incredibly nice. You can simply send someone a link and they can install the app and run it themselves, on their own urbit, right away. The whole thing is peer-to-peer, of course. There’s no app store, no vetting process. It’s networked software like it’s supposed to be: people computing together freely.
54−
55−We’ve been saying for years that we want people to build on top of Urbit and we always meant it. Now it’s possible in a way it never has been before. To check it out, watch [this segment](https://www.youtube.com/watch?v=MA8sqFi8Bd8) from Assembly.
56−
57−Software distribution can get better in _a lot_ of ways, and we’re continuing to work on it. But it’s live, and people are experimenting with it already. There’s Chess, there’s Pokur, there are video calls (although they’re still a little buggy). Everyone seems to love ‘pals’ and ‘zone’—but you’ll have to get on the network to check those out.
58−
59−star.market
60−
61−We’ve always used the address space to fund our work as one of the primary Urbit developers. As Urbit has become more useful, and address space has become more expensive, it’s more and more difficult for others to do this. The community saw the need for developers to easily use their granted address space to fund their work and a higher resolution for the Foundation to fund contributions to Urbit.
62−
63−This is what [star.market](https://star.market/) and the WSTR project are for. WSTR is an ERC-20 token that is backed 1:1 by ERC-721 Urbit stars. Unlike a star, a WSTR token can be fractionally divided, allowing for a broader distribution of ownership of Urbit. WSTR was built by the community over the past couple of months with no involvement from Tlon. Tlon did, eventually, help to put together star.market—the interface for interacting with the WSTR contracts safely and securely.
64−
65−I’ve come to think that WSTR can be a powerful tool for funding new Urbit projects. I’m excited to see what both our early community of developers and operators can do with it, as well as the nascent Urbit Foundation.
66−
67−Guides
68−
69−As we make it easier for developers to build software, operators to participate in the economy, and communities to make Urbit their home, we need to improve our documentation. We always like to do things bottom-up: the product work comes first. Well, the product is now live.
70−To this end we recently launched:
71−
72−[operators.urbit.org](https://operators.urbit.org/) collects all of the information about participating in the Urbit economy, running infrastructure nodes, and participating in governance in one place.
73−
74−[developers.urbit.org](https://developers.urbit.org/) has an overhauled program for learning about Urbit as a system and beginning to develop on top of it.
75−
76−[network.urbit.org](https://network.urbit.org/) allows anyone to explore the network. View galaxy transfers or how many planets a star has spawned.
77−
78−We’ve got a lot more planned in this area of work in the coming months, and these three sites are a great start.
79−
80−Urbit Foundation
81−
82−Over these past few years we’ve operated the Urbit Foundation as a ‘protocol’ inside of Tlon. Our goal has been to develop that protocol to the point that it’s refined, working, and can run on its own outside of Tlon.
83−
84−Josh has done an exceptional job running the foundation protocol at Tlon over the last year or so. He and I have been working closely together on everything that Tlon builds, while also coordinating our community of contributors. I’m very excited that the Foundation, with Josh as its Director, is now separating from Tlon as a fully independent entity focussed on supporting the ecosystem.
85−
86−Assembly was the perfect moment to begin formally separating out the Foundation and, as of a week ago, it is an independent entity. We’ve thought long and hard about how to make the Foundation an enduring, stable organization. Josh will be the first Executive Director but, ultimately, the Senate of Galaxies will elect the Board. This will keep the Foundation accountable to the network as a whole and I’m optimistic it can work well.
87−
88−If you’re on the network, you can read more about the Foundation in ~wolref-podlex/foundation.
89−
90−Assembly 2022 -
91−
92−I had more than a few enthusiastic people come up to me at Assembly and ask what we were planning for Assembly 2022. I have absolutely no idea, of course. We poured all our energy into making Assembly 2021 a success.
93−
94−Given what I saw in Austin, I’m pretty confident that next year we’ll be in completely new territory. The goal of this project has always been to build a completely new digital world. And now, it seems to be building itself.
content/blog/2021-11-18-the-promise-and-paradox-of-decentralization.mddeleted−55
@@ -1,55 +0,0 @@
1−+++
2−title = "The Promise and Paradox of Decentralization"
3−date = "2021-11-17"
4−description = "Is centralization just a natural tendency of all networks? Are we destined to have a 'decentralization sandwich?'"
5−[extra]
6−author = ""
7−ship = "~lableg-tadrex"
8−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/ux-centralization.JPG"
9−+++
10−
11−![Presentation](https://storage.googleapis.com/media.urbit.org/site/posts/essays/ux-centralization.JPG)
12−
13−Every 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−
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−
17−And yet all of these originally decentralized systems end up facing some degree of centralization.
18−
19−The 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−
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−
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−
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−
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−
29−This privatization proceeds in three different ways:
30−
31−- Some companies start building on an open protocol and then slowly make it their own. Chrome's decision to make the search bar synonymous with the address bar was a slight improvement in the interface, but also a very strong statement that Google had replaced manually typing in URLs as the default way to navigate. (The strongest evidence for this is the frequency of navigational searches; [the most commonly-searched term on Google](https://www.mondovo.com/keywords/) is "Facebook" and [the most frequently searched term on Bing is "Google"](https://www.bloomberg.com/news/articles/2021-09-28/google-tells-judges-it-s-so-popular-it-s-bing-s-top-search-term).) Typing in URLs is a sometimes-decent way to find what you're looking for, though [the half-life of links is about two years](https://blog.zomdir.com/2017/10/the-half-life-of-link-is-two-year.html). But guessing at URLs can be [perilous](https://en.wikipedia.org/wiki/Whitehouse.com). No one is responsible for fixing this, but Google is the closest approximation, because what they are responsible for is solving the "look for something on the Internet and get the wrong result" problem, a different but related one from the broader task of allowing arbitrary site owners to host arbitrary content. Privatizing is effective, and solves problems for users rather than protocol designers. But it does go against the spirit of the original network.
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.
34−
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−
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−
39−One 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−
41−This is a nice theoretical solution to the "build your own" problem above: if someone tries to start Twitter-but-without-banning-X, they begin with "Twitter-but-it's-100%-X," which seems bad until they reach the next stage where trolls arrive and they start to learn that Online Censorship is mostly about spam and gore and only occasionally about politics. But if they're moving their data around, and their friends graph with it, then spinning up a separate instance of the same service, pulling in the same content from their friends, and whitelisting someone who's blacklisted elsewhere is a lot more feasible.
42−
43−At least at first. One of the problems with owning your own data is that it ignores the question of what format that data is in. Data formats are sometimes considered carefully, but they can also be hammered out fast to get a minimum viable product out the door. Then they evolve over time, accumulating cruft and complexity, until they might as well be encrypted.
44−
45−And indeed, what's to stop someone from having a proprietary format that's literally encrypted? Or one that gets changed to an encrypted version later on? This is not a trivial point; if you're ever in a position where you absolutely have to share some information that you want to keep secret, the smartest thing to do is share a huge amount of confusing and poorly-explained information, or use an [annoying but technically accurate format](https://www.vice.com/en/article/gv5vxb/crypto-keys-printout-of-edward-snowdens-email-service-lavabit-ladar-levison). Strict and unalterable rules are no match for determined adversaries, whether they're trying to play a prank, make a point, or maximize shareholder value.
46−
47−But the data format questions are not rhetorical: there is actually an answer of sorts, though it's a frustrating one. Software systems are not just lines of code, but the entire extended system of people who maintain, host, and build on platforms. And the norms of those communities can push back against market pressures. I've been spending an increasing amount of time around Urbit users and devs, and they really do view the current centralized model of the Internet as anathema. They are aware that the fun apps we use are all either designed to be addictive from the start or subject to relentless evolutionary pressure to get more addictive. There's a history of [norms evolving in response to new addictive behavior](https://gist.github.com/jm3/6724931). And Urbit's architecture is a lot closer to norms than to the clumsy mechanism of laws; instead of centralized services that own data, there's a set of 256 Urbit identities that can route messages between users. Instead of single points of failure, there are a few hundred fallback options; instead of the binary of on-Facebook-or-anathematized, there's a 2^8 bit gradient.
48−
49−One possibility for the successor to the current Internet is that it will end up being a system designed to support communities that achieve cohesion based on which forms of addictive or socially corrosive technology they reject. Sort of a digital version of the Amish, [not rejecting technology wholesale but carefully considering every new technology before adopting it](https://kk.org/thetechnium/amish-hackers-a/). If you assume that the pace of change in consumer-facing Internet stays high, and that it gets more compelling over time, then in the long run the only options are a) be careful what you use, or b) accept that you're outsourcing a growing share of your decisions to product managers and growth hackers who do not necessarily have your interests at heart.
50−
51−Norms 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−
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−
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/a-topiary.mddeleted−38
@@ -1,38 +0,0 @@
1−+++
2−title = "A Topiary: Hypertext and Urbit"
3−date = "2021-06-13"
4−description = "A brief history of hypertext and Urbit networking"
5−
6−[extra]
7−author = "Reid Scoggin"
8−ship = "~sitful-hatred"
9−image = "https://media.urbit.org/site/posts/essays/treebranches.jpeg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/treebranches.jpeg)
13−
14−> Under the trees of England I meditated on this lost and perhaps mythical labyrinth. I imagined it untouched and perfect on the secret summit of some mountain; I imagined it drowned under rice paddies or beneath the sea; I imagined it infinite, made not only of eight-sided pavilions and of twisting paths but also of rivers, provinces and kingdoms... I thought of a maze of mazes, of a sinuous, ever growing maze which would take in both past and future and would somehow involve the stars.
15−
16−-- _The Garden of Forking Paths_, Jorge Luis Borges
17−
18−The pre-technological world was already [networked](https://en.wikipedia.org/wiki/Indra%27s_net). No material object and no idea has ever stood alone—"no man is an island". Language itself is a network of associations shared between a group of people. The question of technology is: how do we bring our web of associations into the realm of computers? The legacy internet has focused on social networks almost exclusively—our mammalian brains readily took to this, we all love to [signal](https://conversationswithtyler.com/episodes/robin-hanson/). But before “social media” there was something called hypertext: a seemingly modest way to connect documents shared between computers.
19−
20−A footnote in a book used to require a library, locating the referenced book, and finding the cited page (which might have footnotes itself)! Hypertext allows one to traverse a network quickly and easily with just mouse clicks, making information accessible to those without the time and resources to hunt down physical artifacts. Urbit’s “%graph-store” is not the same as hypertext but it does bear some familial resemblances. Fundamentally, %graph-store is a data structure that can accommodate disparate data types within a single edifice. It is based on [graph databases](https://en.wikipedia.org/wiki/Graph_database) and recent implementations such as [GraphQL](https://graphql.org/). To understand this data structure it is worth diving into the origins of hypertext—the original linked network.
21−
22−The story of hypertext begins at the end of WWII with an article in _The Atlantic_ that proposed to extend the human mind via machine. Vannevar Bush had seen first-hand the explosion of electronics manufacturing and scientific knowledge, recognizing the great peril and opportunity of such a revolution. His [description](https://www.theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/) of the Memex presaged the technological world of today, envisioning a personal device that would allow the user to draw upon a vast library of information, and link documents together arbitrarily—what he called "associative indexing"—a deliberate recreation of how the mind connects thoughts.
23−
24−The 1960s saw the first implementations of these ideas. Ted Nelson's [writing](https://archive.org/details/SelectedPapers1977/page/n15/mode/2up) around _Project Xanadu_ elaborated this linking between documents into what Nelson called _hypertext_. Nelson imagined "a text arranged in a graph structure", centered around a corpus arranged in nonlinear sequence, manipulable by author or audience. The concept was first demonstrated in 1968, at Douglas Engelbart's 'Mother of all Demos', where a vision of computers as a collaborative social environment was revealed to the world. "[The Journal](https://www.dougengelbart.org/content/view/137/#7)", presented alongside other revolutionary demos, exhibited collaboratively edited documents with hyperlinked connections. Any time-travellers in the audience would have immediately recognized the first webpage. From here, the idea of a linked network of documents would be developed through successive phases of computing, from the mainframe to the PC.
25−
26−Experimentation with these ideas continued through the 1970s and 80s. A team directed by Andy Lippman at MIT extended the concept to threaded visual hypermedia with the _Aspen Movie Map_, a user-directed virtual tour of Aspen, Colorado. Hypertext and hypermedia gained a mass audience for the first time with HyperCard, a program that shipped with Mac computers. Users were able to collect or create '[stacks](https://archive.org/details/hypercardstacks)' of interlinked cards; a personal body of text, art, and knowledge could be accrued and modified, or shared with others—though not yet with native networking capabilities.
27−
28−With the World Wide Web, hypertext achieved escape velocity. Initially a one-man [project](http://info.cern.ch/hypertext/WWW/TheProject.html), the world wide web was similar to Bush’s vision of the Memex—a way to share, index, and connect information between individuals and groups. The web succeeded by utilizing the physical infrastructure already available: PCs with graphical interfaces, DNS, and the internet. Critically, its method of transmitting and traversing texts was a standardized protocol, allowing a free body of information to assemble atop the new infrastructure by anyone willing to learn the tools. A new frontier was cleared and cultivated with open standards, but it would gradually face enclosure.
29−
30−In the following decade, after the first wave of social networking sites had crested but before phones became the primary web clients, Twitter was launched. Originally an awkward bridge between SMS and the web, its design eventually coalesced around static identity, posts with chronological sorting, and interlinked post threads. These simple primitives spawned a vast corpus of information, a graph-of-graphs intertwined and overlapped, mapping an entire platonic world. Twitter is fundamentally constrained by its very nature: it is the walled garden of an advertising company. The financial incentives of the server operators demanded seizure of the commons and the replacement of standardized protocols with proprietary databases.
31−
32−As the first networked services withered, a new critique was implicitly articulated in the construction of a [new kind of abstract machine](https://moronlab.blogspot.com/2010/01/urbit-functional-programming-from.html). Urbit learned from the past: tightly defined protocols, baked-in cryptography, and decentralization were key. If power over the network was determined by those who ran the servers, then we would run the servers ourselves.
33−
34−Urbit is not fundamentally a hypertext system; it is a new kind of computer, designed to participate in a peer-to-peer network that rejects the client-server model. All Urbit software takes its networking model for granted, it is not an ad-hoc layering of mismatched abstractions. Fundamental design decisions determine the trajectory of the future.
35−
36−Early [implementations](https://en.wikipedia.org/wiki/Neo4j) of graph databases and projects like [RDF](https://en.wikipedia.org/wiki/Resource_Description_Framework) hit on the same core idea: linked data needs its own data structure. In 2020 Urbit OS adopted an application called %graph-store that made use of a new, native [data structure](https://docs.google.com/document/d/1-Gwfg442kV3cdfG7NnWPEf2TMa3uLUTAKkZD70ALZkE/edit) which would act as a database service for social applications. Chats, long-form text, and other types of data produced in the course of social computing now share the same tent, a single structure extensible to new types of content. Each item added to it is a node in a personal graph—a tree that grows branches as your computer communicates. These nodes can be linked arbitrarily to other graphs—Urbit's global immutable namespace grants both permanence and ownership and allows the graph’s branches to intertwine with others. Graphs can accommodate a variety of content, from simple text, to code and media yet to be conceived. You own your graph, and it is a record of your digital journey with others.
37−
38−Personal hypertext graphs are leaving behind proprietary platforms and gaining independence. Graphs until now have been used as tools of surveillance and marketing, but they are being reclaimed and sewn back into the network, each bound to the cryptographic identity of an individual, permanent computer. Where the map of your life was once splintered across a thousand systems and held in the custody of strangers, it is now possessed only by you and shared only as you see fit. On Urbit, an infinite forest of digital lives can take root, nesting their boughs and stalks.
content/blog/aesthetic-culture-1.mddeleted−103
@@ -1,103 +0,0 @@
1−+++
2−title = "Aesthetic Culture #1"
3−description = "One 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)."
4−date = "2020-11-11"
5−
6−[extra]
7−description = "One 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)."
8−author = "~nartes-fasrum"
9−ship = "~nartes-fasrum"
10−image = "https://media.urbit.org/site/posts/essays/help-the-environment.jpg"
11−+++
12−
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)
14−
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_
16−
17−One 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.
18−
19−To that end, I wrote [the Art by Urbit proposal](https://grants.urbit.org/proposals/636838408-art-by-urbit), a regular digest for the dissemination of Urbit art and propaganda. We'll bring you the works of both familiar faces and new users, in a variety of media types from image manipulation to 3D models and physical pieces. This first digest will cover some of the art produced in the past year, but will have a focus on the last two months. Future digests will be incremental updates summarizing the artworks of the prior month.
20−
21−## ~datnut-pollen
22−
23−~datnut- made a physical representation of their sigil from maple wood & epoxy resin, and mentioned the potential to use an Arduino to cause different lighting effects for different statuses of an urbit.
24−
25−![The sigil of ~datnut-pollen glowing yellow on a black background](https://i.imgur.com/GxmO6sT.jpg)
26−
27−## ~lagrev-nocfep
28−
29−~lagrev- [made a thread of Dinosaur Comics](https://twitter.com/sigilante/status/1299101593997127680), using the Urbit Whitepaper as the seed text.
30−
31−![A Dinosaur Comics comic, with text pulled from the Urbit Whitepaper](https://pbs.twimg.com/media/EgdUaoKWoAAl6A3.jpg)
32−
33−A sweet poem about the potential for Martian felines is theirs as well:
34−
35−![A brief poem regarding cats on Mars](https://pbs.twimg.com/media/Ef_KTbqWAAAHN-k.jpg)
36−
37−## ~litmus-ritten
38−
39−~litmus- produces art full of glowing gases and colourful curves:
40−
41−![A hand holding a glowing orb, underneath the text: "Urbit - Lunar Operations"](https://i.imgur.com/fRbFIpj.png)
42−
43−~litmus- also drew Urbitan for the release of OS1:
44−
45−![An cartoon-type female character holding an orb, standing in front of a fan of Urbit sigils](https://i.imgur.com/vGqVmNM.png)
46−
47−More of their work is available in the notebooks of the Internet Weirdness Research Unit.
48−
49−## ~minder-folden
50−
51−~minder- stylistically ranges from retrofuturistic memes to flat-out classic 50s retro:
52−
53−![An image of a meteor shaped like ~minder-folden's sigil in front of Mr. Clean, with the text "Soon it will all be clean"](https://pbs.twimg.com/media/Eggk0CGU8AAJC-W.jpg)
54−
55−![A Popular Science cover advertising "Video-Disc Players", with ~minder-folden's sigil present on a television](https://minderimages.nyc3.digitaloceanspaces.com/1ib61l8ugy451.jpg)
56−
57−More of ~minder-’s work is available in his The New Era notebook.
58−
59−## ~naltyc-wornes
60−
61−~naltyc-, & by extension ~dasfeb industries, produces content related to the exploration of Urbit on small & unique computers:
62−
63−![An image of five astronauts wearing Urbit badges strapped into a spaceship cockpit, with the ~dasfeb logo & a Raspberry Pi on the wall behind them](https://pbs.twimg.com/media/EkiyfGbVgAAp8wm.jpg)
64−
65−![An image of a large, early computer control panel with the ~dasfeb sigil on the upper wall and a number of planet sigils on display readouts](https://pbs.twimg.com/media/Ejap_knXgAARo38.png)
66−
67−More of their work is available in the smol computers group.
68−
69−## ~nartes-fasrum
70−
71−I use GIMP to edit images I pull off various social media platforms, and usually post the results on Twitter at [@nartesfasrum](https://twitter.com/nartesfasrum).
72−
73−![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://pbs.twimg.com/media/EjuuJjTXsAIcfU9.jpg)
74−
75−## ~norsyr-torryn
76−
77−No discussion of Urbit art would be complete without mentioning [~norsyr-'s Canvas app](https://github.com/yosoyubik/canvas), which won first place in the [Hackathon 2020](https://urbit.org/blog/hackathon-results/) event.
78−
79−![A demo image of the Canvas app, with various drawn characters](https://i.imgur.com/zpm3dYX.png)
80−
81−## ~radbur-sivmus
82−
83−~radbur- writes poetry on a range of subjects, one of which could be Urbit. Interpretation of ["A Weaver's Regard"](https://t.fust.us/writing/poetry/weavers-regard) and ["Internet Absurdities"](https://t.fust.us/writing/poetry/internet-absurdities) is left as an exercise to the reader.
84−
85−## ~sitful-hatred
86−
87−~sitful- has a Martian Meme Depository chat in the Networked Subject group, which catalogs a number of the Urbit memes that have been created so far.
88−
89−![An image of a Connect-Four type game box, edited to read “Connect ~zod: The Classic Network Connectivity Game](https://i.postimg.cc/d1yH7PHL/connect.png)
90−
91−## ~tocrex-holpen
92−
93−~tocrex- has been drawing the galaxies of Urbit, and uploading results to Twitter at [@tocrexholpen](https://twitter.com/tocrexholpen). Each galaxy has a unique design and outfit, with the galactic sigil proudly displayed as its face.
94−
95−![An image of the ~feb galaxy wearing elaborately embossed armor.](https://pbs.twimg.com/media/ENeLOb4WkAApDu2.jpg)
96−
97−## Landscape
98−
99−Something that's become quickly evident with the addition of background images to Landscape is that people love to customize their ship's appearance and make it feel more like home. To close things out, we're providing a pair of backgrounds — one darker, one lighter — for use on your ship (or your desktop, should you so desire).
100−
101−![A moody Martian city](https://i.imgur.com/7Ot9Hcu.jpg)
102−
103−![A bright outing in a young ship](https://i.imgur.com/wFKt2EW.jpg)
content/blog/after-machine-war.mddeleted−40
@@ -1,40 +0,0 @@
1−+++
2−title = "After the Machine War"
3−description = "The date is January 1, 2050. The place, New York City. The vibe...subdued."
4−date = "2021-03-14"
5−
6−[extra]
7−author = "Simon Kovacs"
8−ship = "~bacbec-lormur"
9−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/berlin-wall.jpeg"
10−+++
11−
12−![berlin-wall](https://storage.googleapis.com/media.urbit.org/site/posts/essays/berlin-wall.jpeg)
13−
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.
15−>
16−> Really the only notable thing about it is that it was written on Urbit. And that, perhaps, has made all the difference.
17−>
18−> It’s easy to be pessimistic about the future. Intellectuals, especially, are drawn to pessimism, because pessimism (falsely) implies a greater wealth of knowledge about the ways of the world. But one thing the pessimist never sees coming is a turn for the better. To wit, the future described in the below excerpt doesn’t have to take place. And Urbit is one piece of evidence for the claim that it will not.
19−>
20−> The philosopher-cum-internet comedian Slavoj Zizek likes to point out that no one was really expecting the Soviet Union to collapse in 1989. In fact, the average Soviet dissident wasn’t even gunning for it. He was haggling over small reforms, pushing to get the less corrupt politicians to the top, just going about his day eating or opening a window or walking dully along. Then, kaboom. Collapse. No more USSR.
21−>
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.
23−
24−The 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.
25−
26−But 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?
27−
28−That’s odd. You’ve never even had Health Morsels. You open up your laptop, where you can view the activity of the iThink microchip that you got implanted in your cortex a few years ago. “Ads help Elysium provide you with free, quality sleep-monitoring. To disable ads, please upgrade to Elysium Premium.” That explains it. After all—and you pause for a moment over whether the forthcoming thought is yours or the iThink’s, before deciding that it’s much the same anyway—Health Morsels probably are delicious. And healthy, too.
29−
30−As usual, they’re setting something on fire outside your home. Normally you’d scroll back through your Squawker feed to see what it was all about, but today you’re late for work, and anyway you’re in a pleasant haze after the Health Morsels dream—no point ruining it by poring over the latest Squawker pile-on. You glance at the awning. Ah, the bodega. Toilet paper and Juul Pods are cheaper in bulk from Titicaca anyway.
31−
32−Another day at the office. You were never exactly passionate about content moderation, but hey, it keeps the lights on. (And since ConEd got absorbed by Titicaca, it’s been pretty important to have a Verified Income Stream.) It’s a normal day at work. Algorithms haven’t yet been able to filter out all Unverified Content—so it’s up to you the flag Unacceptable Violence, Disputed Claims, and Unfederated Currency transactions.
33−
34−Except after your pleasant dream, it all suddenly seems so drab. You start to wonder whether there was an error last night—maybe they turned the dream levels up too high. Something from your night-time vision just won’t leave your mind, like a film strip looping over and over. It’s that river beside a sloping field, like you used to swim in when you were a kid. You can almost feel the icy cold against your skin, the sticks and mud against the soles of your feet, and then there’s the ripe, marshy scent of the riverbed. Uh oh. You realize you’re close to danger levels. This isn’t where your head’s supposed to be at. Frantically you scroll through content, seeking to moderate it. A user threatening violence against Titicaca. A stream that violates DMCA. A highly dubious Squawker claim, with no support from experts. Flagged. Flagged. Flagged.
35−
36−Yet the river remains. You see it, you feel it, just as you feel the kiss of the sun on your shoulders, the breeze rustling through your damp hair.
37−
38−Now you know what’s coming. You brace for it and wait. Three. Two. One. ZAP. Your iThink produces an electric shock: plenty painful but not permanently damaging—at least that’s what the Verified studies show. The river recedes from your mind. Following the shock, your iThink, as versatile a little machine as ever was invented, delivers a few milligrams of both amphetamine and oxycodone, bringing on a wonderful feeling of simultaneous alertness and relaxation. You look up at your monitor. Content moderation doesn’t seem so bad, with the stimulant and the barbiturate swirling paradoxically through your system. It’s true what they say in the ads: iThink doesn’t just make you think better, it makes you feel better. You dive back into your content moderation with renewed verve, even flagging a couple completely innocent posts just out of surplus exuberance. So what if you hardly get outside at all these days, so what if you’ll never swim in that stupid river. The fastest electronics, the Your Health and Wellbeing tracked and adjusted by an intelligence far greater than that which you could ever hope to possess, a gizmo that gives a whole new meaning to the term neural net.
39−
40−2050 turned out to be a pretty good year after all.
content/blog/agency-daos.mddeleted−110
@@ -1,110 +0,0 @@
1−+++
2−title = "The Dream of the Agency DAO"
3−date = "2022-11-04"
4−description = "As creative studios and agencies struggle for more creative freedom, DAOs and tokenization will surely take a more central role in the marketing and branding industries. Decentralization offers such entities benefits that could fundamentally reshape creatives’ relationships with clients—reducing layers of inefficiency and anti-creative incentives."
5−
6−[extra]
7−author = "Isaac Simpson"
8−ship = "~mogmet-tadnem"
9−image = "https://storage.googleapis.com/media.urbit.org/blog/skybanner.jpg"
10−+++
11−
12−![Image](https://storage.googleapis.com/media.urbit.org/blog/skybanner.jpg)
13−
14−
15−Chris Callahan runs an independent brand strategy agency called [Visitor](https://visitor.agency/). Visitor wrote the line that [emblazoned](https://astra-mag.com/articles/my-weekend-with-the-martians/) the sky over the parking lot that housed Urbit Assembly. Its work focuses on Web3 blue chips and up-and-comers: dev marketing, notoriously one of the toughest niches in the branding world.
16−
17−“Devs are very sensitive to puffery and cringe,” says Callahan. “Traditional tactics like headlines and manifestos fall flat. Clarity and vision are much more important because they showcase the benefit as well as a long term potential for use.”
18−
19−Why? Because developers eschew sales. If something is good, it will rise to the top without the help of annoying salespeople. The thing is, marketing-world creatives usually agree—we’re just bogged down by salespeople of our own. So we, like devs, yearn for the day when decentralization will save us from the social climbers and “connectors” that suck up all the oxygen.
20−
21−Enter the Agency DAO. The idea—a creative agency that solicits work, receives clients, hires creatives, and makes decisions all on the blockchain—is oft-discussed because it appeals to the crunchy, anti-establishment vibe at the core of every major ad agency. A trustless, leaderless creative community where everyone has equal voice and the best creative rises naturally to the top? The dream of the ‘90s come true!
22−
23−Unfortunately, decentralization in the ad world currently occupies much more podcast time than reality.
24−
25−## Creative by Committee
26−
27−But there are some actual attempts at making the Agency DAO a reality. Koto, a top creative agency known for creating the AirBNB brand, tried it with Web3 brand Polkadot. [It pit two pitches against each other to determine the future direction of the Polkadot brand by vote](https://vote.polkadot.network/). It used a quadratic voting via Snapshot to deliver the will of the Polkadot network to four “multisig curators” who executed the vote on chain.
28−
29−While the experiment worked, it also revealed the shortcomings of the blockchain’s ability to guide creative decisionmaking.
30−
31−“To organize Polkadot token holders who wanted to participate and create the voting parameters took very long,” says Callahan. “To have the wisdom of crowds decide on two design elements was an exemplary concept for Polkadot to own. The question is, did it push the work? Or was its value in consensus alone?”
32−
33−Quadratic voting is cool, but the creative process is long and complicated. Stakeholders chose between option A and option B. At the end of the day, that doesn’t feel like a significant innovation, especially if the vote isn’t even actually happening on chain. Rebranding sprints typically take around 3 months. This process took 11. Sure, it was a good way for Koto to play ball, but it wasn’t much more than that.
34−
35−Agency DAOs face the same central problem as ordinary DAOs, which can be summed up thusly: every decentralizing force is too costly, and every cost compromise moves the system back towards traditional hierarchies. The nature of creative work even further stymies the theoretical Agency DAO. Creative products almost always suffer when anti-hierarchical principles are put in place. As David Ogivly famously said,
36−
37−_“Some agencies pander to the craze for doing everything in committee. They boast about ‘team-work’ and decry the role of the individual. But no team can write an advertisement, and I doubt whether there is a single agency of any consequence which is not the lengthened shadow of one man.”_
38−
39−So this leaves us with the question of how exactly the DAO model can help creative agencies, and what such an organization might look like, and how Urbit can help. There are roughly three paths: 1) Project Bountification 2) Talent Retention 3) Idea Valuation.
40−
41−## Project Bountification
42−
43−In the Mad Men era, a few Agencies of Record (AORs) dominated the advertising world. These massive whales took every cent of a given big brand’s yearly advertising budget and charged a simple 15% premium on all media (e.g. radio time, TV time) purchased. A very simple and very profitable system, [now long gone](https://www.genedelibero.com/the-agency-of-record-the-shift-is-on-to-specialized-agencies/).
44−
45−Today, big brands typically have many agencies—sometimes hundreds—each with a different specialty, and each fighting for their own share of the budget. I’ve been in rooms with representatives from no less than 10 agencies—digital, DEI, experiential, CSR, influencer, etc—all pitching ideas for the same holiday campaign, and all surely billing upwards of $100/hour per person to do so.
46−
47−This sounds nice for agencies, but actually it isn’t—instead of focusing on the creative work, they must dedicate their energy towards constantly re-pitching themselves to the client and fighting with procurement people on rates. The managerial class types who control the budgets care a lot less about the quality of the creative than whether you remembered their dog’s birthday.
48−
49−Crypto could provide a solution to modern agencies’ woes by creating a flatter system for project acquisition; adopting the sort of decentralized bounty system some devs already use for Web3 projects.
50−
51−“Bounties are great,” says Callahan. “Big agency players should popularize them. I feel like if there's a way to do an on-chain bounty with select members who either hold a special token that allows participation on key briefs, that would help a lot.”
52−
53−How would such a system work? First, a brand issues a bounty for a project for work it needs done. Luckily, this basically already happens in advertising, it’s called a request for proposal, or RFP. The only difference here is instead of RFP acquisition and response being 90% schmooze-fest and 10% creativity/pitching prowess, it’s a lot more like what you’ve seen on Mad Men: the client’s RFP passes trustlessly to the bold creatives who spend many drunk, sleepless nights coming up with genius ways to knock their socks off.
54−
55−“A brand issues a bounty for a stunt activation that, for example, educates the world on the psychological benefits of calm computing,” Callahan explains. “The members of Agency DAO approve it, and create their own bounty for creatives inside the DAO. Bounties burn after 10 days. Ideas submitted and sent to client in the manner set by DAO.”
56−
57−Once the job is awarded, the chosen agency will continue this pattern, effectively removing the “account guy” layer—the sales-y middle people abhorred by both creatives and devs alike—and returning more focus to creativity.
58−
59−## Talent Retention
60−
61−“Professional creative” industries, e.g. marketing, branding, etc, suffer from turnover rates orders of magnitude higher than the industries they serve. Being a creative is both kind of awesome, because a new gig is never too far away, and also scary, your current gig reliant on the slightest whims of the client.
62−
63−This means that the market for creative talent in the form of copywriters, designers, art directors, animators, producers, editors, etc, is always choppy and competitive. Staffing sucks—it’s difficult to evaluate the quality of someone’s work until you’re actually working with them, because creatives stuff their portfolios with successful projects they’ve barely touched. Beyond that, now bloated Web2 lowballers like Fiverr and Upwork bottom out the market with garbage time labor that even the biggest brands still somehow fall for. Another great opportunity for Web3 disruption.
64−
65−The Agency DAO model provides permanence. Currently, some independent agencies offer equity packages that take a long time to vest, and are only ever worth anything if the agency sells. Owning fungible tokens from day one is a much better way to incentivize both work quality and retention.
66−
67−DAOs also offer flatter and more collaborative atmospheres, which creatives at least ostensibly want.
68−
69−“There’s total transparency of who works on what. Better collaboration between members, meaning happier, more fulfilled workers. Awards will be more meaningful and accurate,” says Callahan. “Plus, the value of your tokens naturally increases or decreases based on your performance. Just by getting hired at a successful DAO you can already be doing well.”
70−
71−Finally, a system that allows democratized voting on creative products, as opposed to traditional [Hype Dad aristocracies](https://thecarousel.substack.com/p/vibe-shift-to-destroy-marketing-world), could actually foster more Darwinistic environments where the best creative has a higher chance of rising to the top.
72−
73−“Eventually group preference will select one creative over others; causing repeat elections of the same member,” says Callahan. This could occur on both the agency level—removing the Hype Dad problem, e.g. lazy incumbents making lame decisions. “There's a sort of Darwinism that is created that can determine benefits or even redundancies for those not pulling their weight or who simply aren't as talented as others.”
74−
75−## Idea Valuation
76−
77−The creative industries are perhaps the only example of a field in which the artists retain no intellectual property right for their ideas. This is why advertising creatives make so much money—an advertiser can milk a good idea for decades and we’ll never see a dime.
78−
79−The tokenization inherent to the DAO model opens up several possibilities for valuing ideas in new ways that behave more like copyright.
80−
81−“The basic thought now is starting something I’m calling General Idea; pre-created, white label ideas based on research of real creative problems that need fixing,” says Callahan. “We NFT the ideas, sell them to clients. They make them or they resell that idea to other clients or agencies. That monetary markup value on the idea trickles down the original creator. More democratic way to share ideas and defend their ownership when they’ve been recorded on the blockchain.”
82−
83−This sort of blockchain-based soft copyright is one way to value an agency’s DAOs. Another, simpler way, is to sell NFTs or NFT-related independent creations of the agency itself. Art collective/creative agency [MSCHF](https://mschf.xyz/), for example, makes its money both via brand deals and also a la carte meme-to-merch drops. Agencies with a certain amount of clout could easily tokenize the clever side projects of its creatives—making it far less reliant on client deals and more able to capitalize on its creative prowess.
84−
85−“Pool Suite [another creative studio] does a great job of being a creative company that happens to make NFTs of music and general drops and stuff,” says Callahan. “They're a studio first and then a blockchain player after. I'd still consider them a ‘diet-DAO.’”
86−
87−[Édouard Urcades](https://fabled-faster.tlon.network/writing/stars) has designed interfaces for Tumblr and IBM, and currently serves as a design lead at Tlon. His project Structure is a “cork board” for creative projects on Urbit—sort of a “mercenary guild,” for UX/UI designers looking for work. Structure is run by a gnosis safe wallet operated by its 12 members. Beyond serving as a “soft on-ramp for Urbit-related design labor,” Ed plans to monetize Structure by selling Urbit merch designed in-house, both NFT and IRL.
88−
89−## How Urbit Can Help
90−
91−The three categories discussed above—project bountification, talent retention, idea valuation—present theoretical frameworks for the Agency DAO. However, the shortcomings of current DAO infrastructure and governance make them largely impossible. Enter Urbit.
92−
93−The creative industries rely almost entirely on reputation—so any Agency DAO without permanent pseudonymous ID is dead in the water.
94−
95−“Goodby Silverstein and Partners, for example, is widely regarded as one of the best ad agencies out there,” says Callahan. “When a big name in the creative industry goes to work there, the reputation of Goodby Silverstein increases.”
96−
97−Urbit IDs let you maintain your creative and working reputations while operating within a self-owned ecosystem that can’t be deleted. Beyond that, Urbit’s design-forward OS selects for self-expression in a way that no corporate-owned platform could.
98−
99−
100−“The sigil itself is its own design feature,” says Callahan.
101−
102−Simply put, running an Agency DAO on Discord and Google Docs would be fundamentally unserious. It’s one thing for a traditional agency to use Web2 products as _tools_ for its creatives. It’s quite another for Web2 products to be the only connection the agency has with its creatives outside of the blockchain.
103−
104−Recruitment, ideation, project sharing, and even simple chat aren’t possible on Web3 without something like Urbit to tie it all together. Sure, you could get a bunch of anonymous creatives together on a shared Figma, but there will be zero accountability and likely low participation. Whereas Urbit—particularly Holium’s forthcoming Realm—brings Urbit ID into a decentralized, permanent environment that connects members P2P, and allows on-chain transactions without leaving Urbit. All while maintaining permanent IDs.
105−
106−As creative studios and agencies struggle for more creative freedom, DAOs and tokenization will surely take a more central role in the marketing and branding industries. Decentralization offers such entities benefits that could fundamentally reshape creatives’ relationships with clients—reducing layers of inefficiency and anti-creative incentives. However, a decentralized ID layer like Urbit is needed before the Agency DAO can be practically attempted.
107−
108−–
109−
110−*Isaac Simpson is a Los Angeles based writer and the founder of the marketing agency [WILL](https://willtheagency.com/). You can read his work on his substack [The Carousel](https://thecarousel.substack.com/).*
content/blog/an-email.mddeleted−84
@@ -1,84 +0,0 @@
1−+++
2−title = "An Email from the Archive"
3−description = "I found this email in my archives recently and thought it might be fun to share publicly."
4−date = "2020-11-29"
5−
6−[extra]
7−author = "Galen Wolfe-Pauly"
8−ship = "~ravmel-ropdyl"
9−image = "https://media.urbit.org/site/posts/essays/moon.jpg"
10−+++
11−
12−![An email from the archive](https://media.urbit.org/site/posts/essays/moon.jpg)
13−
14−I found this email in my archives recently and thought it might be fun to share publicly.
15−
16−```
17−From: Galen Wolfe-Pauly <galen@tlon.io>
18−Date: Thu, Jul 2, 2020 at 9:50 AM
19−Subject: Continuing
20−To: XXXXXXXXXXXXX
21−```
22−
23−Here are a few things I was thinking about after we chatted. It may be that I'm just reiterating things I already said — but perhaps it's useful:
24−
25−1 -
26−
27−Our collective desire to depend on digital communication tools vastly exceeds what I would have ever guessed. Even if you somehow factor out what’s addictive about the platforms we use today: they serve a real need. The crux of the problem with our current platforms is that they don’t actually serve the need that we want them to serve. They’re not tools in the way we expect tools to be. For the most part, the platforms we depend on serve the needs of their shareholders or some graph or another that needs to go ‘up’, which makes them compromised in a very deep way.
28−
29−In the pre-digital world we enjoyed a few things about the way we communicated, collaborated and did business that are dwindling: simplicity, durability and ownership. I’ll try to give some straightforward examples of what I mean:
30−
31−A - When I talk to someone directly, I’m not worried that someone else is listening in. If they go tell someone else what I said to them, that’s something for us to work out between us — they’re not _always_ reporting our conversations back to a third party. The constraints of the interaction and the privacy implications are _simple_ — I don’t think about them at all. Good privacy guarantees flow from a strict focus on simplicity. When two people want to talk to each other: give them a secure channel to talk. Putting a centrally-controlled service between them is just an interim solution because no one could figure out a better way to do it.
32−
33−B - When I write something down on paper, or type into a typewriter, I have an intuitive sense of the durability of what I’ve made. I have notes on my shelf I took ten years ago. I don’t worry about them disappearing. This means I can have a very direct, high-resolution relationship with the medium. I can pour myself into my physically-written notes in a way I would never pour myself into a Google Doc. Our digital tools are deeply untrustworthy because we know they can disappear, that they won’t actually last forever.
34−
35−C - Around 2008 I started limiting myself to a few specific drawing and writing tools. I use them all the time and can actually refine my relationship to them since I know they’re not going to change out from under me. Perhaps at some point these pens wont be made anymore, but the ones I have are actually _mine_. Similarly, the things I make with them actually belong to me in a way that doesn’t require some ridiculous terms of service. A sense of ownership, when it comes to the medium of communication, determines our level of trust and commitment.
36−
37−Our digital tools have to achieve the same level of simplicity, durability and ownership that our pre-digital tools did. Until they do, we’re always going to be in conflict with them, full stop.
38−
39−The main thing is that exactly none of our present platform-centric world can survive when you see things this way. The digital world we live in is composed of an insanely complicated, ephemeral set of tools that distinctly _do not_ belong to the people that use them.
40−
41−We’re going to be in a constant struggle with technology until it conforms to these three very basic expectations. These are the expectations we try to get Urbit to fall in-line with, of course. Something else could also succeed by satisfying them. But I also don’t really see anything else, aside from Bitcoin and maybe Ethereum, falling in line with these core principles.
42−
43−So: while I wish that Urbit was more mature and ready to capture those that are being purged from mainstream social media, are bored with it or are frustrated with the constraints of ‘productivity software’ — I think this conflict is going to drag on until people realize that what we’re in conflict with is the structure of the software we use. Using software that’s managed by other people is always going to cause serious problems all the way up at the user level. For more speculation on how this might play out, watch Black Mirror.
44−
45−2 -
46−
47−(1) is, in a way, a long-winded way of saying that the state of the world hasn’t changed our direction all that much. In order for Urbit to be approachable to use, it has to be very nicely made and that takes time and iteration. As the system stabilizes, Urbit can evolve in a more traditional way: we, along with others in the ecosystem, release stuff, observe how people use it, and try to make it better. We’re at the point where we’re nearly ready to get into that feedback loop, and we very much need to get there. We’re close.
48−
49−Urbit is a distinctly different _kind_ of software than anything we have now. Your Urbit is something you actually own and can do whatever you want with: not unlike your furniture or your kitchen tools. An Urbit is a tool for individual, human-scale computing and our whole approach to designing and making things is completely different. Most computing is about industrial-scale computing: where the software system stores everyone’s data and is managed by the people who build it.
50−
51−Urbit is the opposite of industrial-scale. Urbit is much more like something that’s carefully crafted and delivered to you directly. This craftsman-like approach to building software really isn’t a part of most modern software engineering.
52−
53−When I think about this from the standpoint of the person using what we make, it’s especially important. Urbit should feel like something that’s purposefully made by hand — not something you picked off the shelf at Wal-Mart. Some of this ethos was present in the early PC movement, but it’s mostly lost today. The care and attention that goes into building the system is also exactly what we make money on. People pay us to own a piece of it, to use it. We’re incentivized to make nice things, in the Urbit model, and we take that responsibility seriously.
54−
55−3 -
56−
57−Networks are a really important social form that’s only just beginning to come into existence. A network is neither a state nor a company, but something in-between. Bitcoin is a network, Ethereum is network (but it’s still far too centralized). Urbit is a young network.
58−
59−(In my view, a real network is always decentralized. Centralized networks are basically just companies.)
60−
61−Urbit is controlled by the collective of people who use it — in varying degrees, of course. The main thing is that this collective is bound together only by private keys and a blockchain, not a set of legal documents. The agreements between everyone on the network are in some cases more formalized (in terms of ownership) and looser (in terms of content moderation) than what we’re used to in either a state controlled or company controlled model. This is a very unusual kind of institution.
62−
63−On a successful Urbit network, Facebook, Airtable, and Signal are just successful applications. You could probably build companies around them that ship software to Urbit — but they’re more like 5 - 10 people instead of thousands.
64−
65−Urbit doesn’t aim to eat away at the government per se. Instead, it’s an important communication tool for institutions of any scale to actually take control of their means of collaboration. The efficiency of inter-government communication and government to populace communication can clearly be improved by _a whole lot_.
66−
67−4 -
68−
69−The most important thing is that people can generate a vision of the future. This can only emerge from a small collective of motivated people. Our public life is overwhelmed by people shooting from the hip, aiming for likes.
70−
71−There are difficult, infrastructural problems _all over the place_ that desperately need the considerate attention of small groups of people. Urbit, as communication tooling, is aimed at improving the quality of the fabric that binds these groups together. Or, to put it another way, before you can solve any specific problem you have to improve the problem solving process overall. Everything is gated on solving the process.
72−
73−5 -
74−
75−Christopher Alexander is, indeed, probably the biggest influence on my thinking when it comes to paying close attention to making things that both generate a deep sense of connection and are shaped by the people who inhabit them.
76−
77−[http://en.bp.ntu.edu.tw/wp-content/uploads/2011/12/06-Alexander-A-city-is-not-a-tree.pdf](http://en.bp.ntu.edu.tw/wp-content/uploads/2011/12/06-Alexander-A-city-is-not-a-tree.pdf) is one of his early, well known essays that’s easy to find online. I think ‘The Nature of Order’ is the thing that had the biggest impact on me, but it’s harder to find. There’s probably a PDF floating around on the internet somewhere. It's also a beautiful (four volume) book. The first volume kind of nails it. This talk is also great: [https://twitter.com/urbit/status/1148030042846326784](https://twitter.com/urbit/status/1148030042846326784)
78−
79−The thing that comes to mind lately is Hejduk. He had passed away by the time I was at Cooper, but I feel like I was educated in the ghost of his work. This documentary gives a good impression of his thinking: [https://www.amazon.com/John-Hejduk-Builder-Worlds/dp/B07NKQ72C8](https://www.amazon.com/John-Hejduk-Builder-Worlds/dp/B07NKQ72C8)
80−
81−Hejduk was able to see that architecture isn’t about building buildings per se, but something else. That was always quite obvious to me.
82−
83−Talk soon!
84−G
content/blog/an-urbit-overview.mddeleted−215
@@ -1,215 +0,0 @@
1−+++
2−title = "An Urbit Overview"
3−date = "2016-05-10"
4−description = "A high-level overview of Urbit."
5−aliases = [
6− "/posts/essays/an-urbit-overview",
7− "/posts/an-urbit-overview"
8−]
9−
10−[extra]
11−author = "Galen Wolfe-Pauly"
12−ship = "~ravmel-ropdyl"
13−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/an-urbit-overview.jpg"
14−+++
15−
16−![](https://storage.googleapis.com/media.urbit.org/site/posts/essays/an-urbit-overview.jpg)
17−
18−## What Urbit is
19−
20−Urbit is a virtual city of general-purpose personal servers.
21−
22−## Your old personal server
23−
24−What's a personal server? In a sense, you already have one. Your
25−personal server is the combination of all the cloud services you use
26−now.
27−
28−This "server" is a mess. It's broken into 17 different fragments
29−which are scattered all over the planet. You have no control at all
30−over any of the pieces. The more we depend on Web services, the more
31−we realize how unsustainable this situation is.
32−
33−Can you remember all the services you have accounts for? How about
34−the username and password for each? Some of them will let you pull
35−your data out somehow, some won't. Sometimes you can move your data
36−between them, sometimes you can't. But they're all good at
37−showing you ads.
38−
39−## Your new personal server
40−
41−Your urbit is your own general-purpose server. It holds your
42−data; runs your apps; wrangles your connected devices; and
43−defines your secure identity. If you still need your old
44−services, it drives them with APIs.
45−
46−Your urbit presents your whole digital life as a single web
47−service. And since it's yours, open source and patent-free, it
48−never shows you ads. Or loses your data. Or updates without
49−your consent.
50−
51−Technically, Urbit is a new kind of OS that has a precise formal
52−definition. (Urbit is actually a [single mathematical function](https://media.urbit.org/whitepaper.pdf).) One advantage of a math-based OS is that Urbit is perfectly
53−portable. It can't tell whether it's in a cloud data center or on
54−your home PC.
55−
56−Concerned about mass surveillance? Download your urbit and restart it
57−on your laptop, or move to a new host in Iceland. Urbit's formal
58−simplicity makes managing it as easy as managing an iPhone: all you
59−have to decide is what apps to add.
60−
61−Each urbit is a node on a global, encrypted P2P network. Your Urbit
62−name, a generated pseudonym like `~talsur-todres`, is also your
63−network address. Like Bitcoin, Urbit address space is a cryptographic
64−asset with a limited supply.
65−
66−By keeping addresses scarce, we make spam and abuse expensive. Urbit
67−is a "friendly network," like the Internet in 1986, where a stranger
68−is nice until proven nasty. As it matures, Urbit will grow into a
69−decentralized, self-governing virtual city both safe and free.
70−
71−## The Urbit future
72−
73−In an Urbit world, your data is no longer trapped in a jumble of
74−proprietary servers. Your urbit is a permanent, versioned, typed
75−archive the size of your digital life. Even before you move your data
76−from a Web service to a local Urbit app, your urbit can drive your
77−account with an API or scraper.
78−
79−And within Urbit, data is never locked inside apps. Imagine if you
80−could painlessly switch between Facebook and Google+, Asana and
81−Trello, Tumblr and WordPress. Not only does your urbit upgrade itself
82−and its apps automatically, you can "sidegrade" a running app to
83−another vendor without losing data.
84−
85−Your urbit is also your digital identity. Along with your data
86−lifestream of media, messages and documents, it has the keys and
87−tokens to manage all your legacy Web services. It holds the keys
88−for your cryptocurrency wallets, so it can buy and sell for you.
89−(With one personal server to secure, not 17 different accounts,
90−you actually have the bandwidth to take security seriously.)
91−
92−You still use network services. But instead of interacting with
93−the service provider's HTML UI, which phones home using
94−proprietary HTTP APIs, you interact with a third-party app on
95−your urbit, which talks to multiple service providers using
96−public, typed Urbit protocols. For example, your urbit runs a
97−single shopping app, which downloads catalogs and uploads orders.
98−This app is one store which sells everything in the world, with a
99−salesman who's 100% on your side and always has the best price.
100−Every computing experience is different when the UI is working
101−exclusively for the user.
102−
103−Finally, your urbit is the hub for your network of connected
104−devices. Your smart thermostat, your wristband, your phone and
105−tablet, all run satellite urbits which talk securely to your main
106−urbit in the cloud.
107−
108−## A chance for digital freedom
109−
110−The promise of the personal server isn't just convenience.
111−General-purpose computing is magic. This magic must be in the
112−hands of all, not just those who can master Unix. The computer
113−is a bicycle for the mind. It's an open vehicle for exploration
114−and discovery. It's not a way to optimize ad delivery.
115−
116−Urbit, as virtual city, is a platform that brings together all our
117−datastreams -- from emails to heartbeats -- in a way that we ourselves
118−control. Can we work together to match faces in photos, without
119−submitting to some panopticon in Mountain View? While the first step
120−in freedom is the right to be left alone, the second is the power to
121−form new intentional communities, to create and evolve a voluntary
122−definition of public space. We have no idea at all what people will
123−do with this power.
124−
125−General-purpose computing is digital freedom. And today, a cloud data
126−center is the technically optimal locus of computation. The cloud is
127−always on, always available, never loses data. Hosts are sometimes
128−attacked; but they never intentionally tamper with their virtual
129−computers. The cloud can never be secure against a global adversary;
130−but most people don't have a global adversary. A single portable
131−platform provides "herd immunity" for the few who do need direct
132−physical control over their main computers.
133−
134−Though even laptops are atrophying into mere browsers, mass-market,
135−general-purpose computing on the client side remains an endangered
136−species that must be protected. But on the server side, this species
137−has never even _existed_. There has never been anything like a
138−mass-market personal server. Why not?
139−
140−## Freedom is an engineering problem
141−
142−Urbit is not a difficult idea. Urbit is like a flying car: the idea
143−is not the hard part. Almost everyone we talk to about Urbit turns
144−out to have had pretty much the same idea themselves. The problem is
145−building it.
146−
147−A server is a computer. It's running some operating system. This OS
148−is a flavor of Unix. There are no alternatives. It's connected to
149−some network. This network is the Internet. It has no competitors.
150−You can have a personal server, if it's a Unix server on the Internet.
151−
152−Almost no one thinks being a Unix system administrator is fun. Not
153−even Unix system administrators think running an Internet server is
154−fun. So the personal Unix/Internet server is like the personal
155−bulldozer. This is not a consumer product. Any number of engineers
156−can't turn a bulldozer into a bicycle.
157−
158−How did we build the personal bulldozer? We didn't. We started
159−from scratch. (The people who built the first PCs didn't start
160−with a mainframe OS, either.) We created a new platform: Urbit.
161−
162−Urbit doesn't compete with Unix and the Internet. It's a new,
163−opaque layer on top of them. Your browser runs on a native OS,
164−but it doesn't give Web apps any way to talk to the native OS.
165−Urbit is like a browser for the server side: code within Urbit is
166−formally isolated from the platform it runs on top of.
167−
168−Your urbit is a Unix process, in a data center or your PC. It sends
169−UDP packets over the Internet. It can both load and serve web pages
170−over HTTP. Except for character sets and crypto, nothing in Urbit
171−reuses or depends on any 20th-century code.
172−
173−Urbit is a complete, clean-slate system software stack: a
174−non-lambda interpreter (Nock), a functional language (Hoon), and
175−an event-driven OS (Arvo), with its own encrypted protocol
176−(Ames), typed revision control (Clay), reactive web server (Eyre)
177−and functional build system (Ford). The full system, including
178−basic apps, is only 30,000 lines of Hoon.
179−
180−The first end-to-end prototype of Urbit took one engineer eleven
181−years. The current beta took three more years, with about three
182−engineers on average.
183−
184−How does it take 14 years to write 30,000 lines of code? The code
185−wasn't the hard part. The hard part was rewriting it until it was
186−right. We think we've solved all the real CS problems, and we're
187−certainly done changing major interfaces. But it will take more than
188−our small team to deliver a polished Urbit user experience that can
189−actually challenge modern web apps.
190−
191−## Where we are, what we're doing
192−
193−Urbit is in feature freeze. It's a minimum viable product in
194−early beta. It still needs quite a bit of fit-and-finish work.
195−We certainly don't recommend it for end users or consider it in
196−any way secure. But it's fun to play with, if you're a hacker.
197−
198−This summer, we're making the switch to an open and transparent
199−development and specification process. A system as unusual as
200−Urbit can't be invented in public. But it has to be finished and
201−maintained in public.
202−
203−Additionally, we're creating an open political and economic process,
204−with a small, fixed-price public presale of Urbit address space. Join
205−us and help make this future actually happen.
206−
207−To keep reading, learn more about [Urbit's address
208−space](/blog/the-urbit-address-space); share our vision of the Urbit user
209−experience, from the [top down](/blog/what-is-urbit-for) or the [bottom
210−up](/blog/magic); check out the [development roadmap](/blog/roadmap);
211−evaluate Urbit's [beliefs and principles](/blog/beliefs-and-principles) or its
212−[interim constitution](/blog/interim-constitution).
213−
214−(For technical readers, check out our [documentation](https://urbit.org/docs/) or
215−the [whitepaper](https://media.urbit.org/whitepaper.pdf)).
content/blog/announcing-urbit-grants.mddeleted−49
@@ -1,49 +0,0 @@
1−+++
2−title = "Announcing: Urbit Grants Program"
3−date = "2019-08-05"
4−description = "Announcing Urbit Grants, a way to earn stars through contributing."
5−aliases = [
6− "/posts/essays/announcing-urbit-grants",
7− "/posts/announcing-urbit-grants"
8−]
9−
10−[extra]
11−author = "Robert Mariani"
12−ship = "~lodleb-ritrul"
13−+++
14−
15−We’ve long been grateful for the hard work of our open-source community, so we’re pleased to announce Grants, a program that gives contributors the opportunity to be compensated for their efforts. It’s in beta right now at [grants.urbit.org](https://grants.urbit.org/).
16−
17−The Grants program will reward valuable contributions with Azimuth stars in one of three ways: Gifts, Bounties, and Proposals.
18−
19−### Gifts
20−
21−We’ve periodically announced gifts for important contributions to the project – like in [2018](https://urbit.org/posts/2018-2-17-update/) and [2019](https://urbit.org/posts/urbit-grants-and-mid-2019-gifts/) – but we wanted to make this more formal.
22−
23−Not everyone always works on structured projects, so the lack of formal criteria for receiving a gift is meant to reward contributors who work outside of the bounty and grant system.
24−
25−Going forward, gifts will be awarded semi-annually (every six months). They’ll retain the informal and arbitrary nature of the awards that came before: Tlon will determine who gets what. We’ll work hard to make sure these payouts are fair.
26−
27−To see the gifts that have been awarded so far, check out the [History section](https://grants.urbit.org/history) of the Grants website.
28−
29−### Bounties
30−
31−Bounties are discrete projects in search of a champion. Tlon will define a clear deliverable, and some number of stars as their reward. Larger bounties will often have their star reward spread across multiple milestones.
32−
33−Contributors can apply to claim a bounty by clicking the “Request to work on this” button. Once a contributor is selected to work on a bounty, nobody else will be able to apply.
34−
35−Bounties are listed in the [Bounties explorer](https://grants.urbit.org/rfws). Play around with the explorer by filtering bounties using the Tag and Category features.
36−
37−### Proposals
38−
39−Proposals are a way for contributors to pitch their own ideas, with a targeted number of stars. Proposals can be accepted, rejected, or accepted with changes. Unlike bounties, a proposal can only be completed by the individual or group who submitted it.
40−
41−Proposals don’t need to be fleshed out like a bounty does, at least not initially. Submit an idea and Tlon will work with you to refine it.
42−
43−You can see the list of accepted proposals in the [Proposals explorer](https://grants.urbit.org/proposals).
44−
45−### What can you do?
46−
47−[Sign up](https://grants.urbit.org/auth/sign-up) on our Grants website page, then set up your profile so we know who you are, linking your GitHub, Twitter, and your Azimuth point: reputation is a factor in determining eligibility for a grant.
48−
49−Also, check out the [Grants section](https://urbit.org/faq/#grants-1) of the new Urbit FAQ for more information.
content/blog/ares.mddeleted−51
@@ -1,51 +0,0 @@
1−+++
2−title = "Ares"
3−date = "2023-06-26"
4−description = "A light technical description of Ares, the new Urbit runtime"
5−
6−[extra]
7−author = "Noah Kumin"
8−ship = "~librex-dozryc"
9−image = "https://storage.googleapis.com/media.urbit.org/blog/ares-header.png"
10−+++
11−
12−![Image](https://storage.googleapis.com/media.urbit.org/blog/ares-header.png)
13−
14−## What is Ares?
15−
16−Ares is a new Urbit runtime that will be much faster and manage a much larger amount of data than previous versions of the runtime. Those new to Urbit commonly ask if they will be able to host photos and videos on their Urbit ships. Ares—a joint project from the Urbit Foundation, Tlon, and Zorp—sets the stage for us to be able to answer, simply, “Yes.” Ares is still a work in progress, but we expect to see the new binaries rolled out later this year. There are three components to the project. Let’s talk about them one by one.
17−
18−## 1. Code Generation
19−
20−Modern CPUs are extraordinarily fast. But until now your Urbit hasn’t been able to take full advantage of this fact. One way to conceptualize the problem is to imagine a train that is only able to go as fast as a track-worker can lay down track for it. In this analogy, your CPU is the train, and the track-worker is the Urbit runtime. The aim is to have large sections of track laid down ahead of time. Ares includes a codegen system that compiles Nock, Urbit’s assembly language, to machine code that the CPU can predict well.
21−
22−This system addresses what has until now been a problem: Nock is meant to invoke other code in a given Urbit computer’s “subject.” Or, in more common parlance, in the computer’s “state.” Your state changes with every new message your Urbit computer sends and receives, or with any new event in any app. That makes it hard to make the resulting machine code run fast, since the CPU needs to read from the subject while it’s running in order to figure out what machine code will be run next.
23−
24−The new code generation process in Ares solves this problem by using a system which the developers have called “subject knowledge analysis.” What does this mean? By analyzing how an Urbit subject might change over the course of a Nock computation, Ares will learn about the subject's tree shape and about its data dependencies (*i.e.*, the way that later parts of the computation depend on earlier parts of the computation). This allows those parts of the subject which are known at the time of compiling Nock to machine code to remain known at later points in the computation.
25−
26−To go back to our metaphor of train tracks, this is what allows the “track” to be laid down ahead of time. This set of known parts of the subject typically includes Nock formulas stored in [cores](https://developers.urbit.org/guides/core/hoon-school/F-cores#cores). This allows the resulting machine code to use direct jumps to perform Nock function calls. Without this “subject knowledge analysis,” the CPU would have had to perform an “indirect jump” by calculating the location to which a later instruction would jump. Now your computer’s CPU can jump directly to where it’s supposed to go.
27−
28−## 2. 2stackz Noun Allocator
29−
30−Ares will make use of what we’re calling the *2stackz noun allocator*. With the advent of Ares, your Urbit will be a virtual machine with two stacks and no heap. What does this mean? Traditionally, a program has a *stack* and a *heap*. The stack is a linear data structure within a program used for the program’s execution. The heap is a less structured region of memory that is used for storing large pieces of data or data that you want to keep around for a while without taking up space in the stack. However, the heap is slower, because its system for allocating memory is less orderly. (Imagine, say, trying to find a specific pair of socks in a heap of clothing.)
31−
32−Ares recognizes that because Nock is much more constrained than most languages, the Urbit runtime doesn’t actually need a heap. Instead you can take the function call stack and split it in two. The top of either stack can then be used as a little temporary heap. Whenever a function executes, you copy the data that gets returned from one stack to the other. And all the intermediate products that get created when running that function (*i.e.*, other functions that got called by the initial function) sit there as *garbage* (unwanted or unused data) in between the two stacks. But you don’t have to do the same sort of bookkeeping—tracking and updating these values—that you would have to do with a heap.
33−
34−Every piece of data in your Urbit computer is a noun. A noun is an atom (a positive integer or zero) or a cell (a pair of nouns). Before Ares, both allocating and freeing a noun in the Urbit runtime were processes that took a lot of time. (To *allocate* a noun is to put that noun in memory and to *free* it is to tell your urbit that you don’t need it any more.) Ares should make both of these processes much faster. This is good news because the Urbit runtime allocates nouns (particularly pairs of nouns, known as cells) like nobody’s business.
35−
36−## 3. Persistent Memory Arena
37−
38−Ares’s Persistent Memory Arena is for managing large amounts of data within your urbit in such a way that your urbit does not get slow. If you have terabytes of data within your Urbit, you can only have a very small subset of that within your hardware’s RAM at a given time. The rest of that data is going to have to live on disk—the section of your hardware that is more capacious but takes more time to access.
39−
40−To deal with this fact, your motherboard moves data back and forth between RAM and disk depending on what data needs to be accessed at a given time. This is known as *paging*, because it does so one *page* (usually four kilobytes) at a time. Traditionally operating systems will handle paging for you, but they do it in a generic way. The Persistent Memory Arena is designed specifically for managing Urbit's single-level store.
41−
42−A *single-level store* means that there’s no distinction in the operating system between data that lives in RAM and data that lives on disk. Instead of having two levels from which you can access data, you only have one, and the system itself manages which parts of the data are in RAM and which are in disk. The Persistent Memory Arena is an optimization for handling a large amount of data in a single level store. It is for nouns that persist between computations. Using the PMA, your urbit’s state can grow large without being hemmed in by the limitations of your hardware’s RAM.
43−
44−
45−## Updates and Links
46−
47−You can find the Ares GitHub repository [here](https://github.com/urbit/ares). The technical proposal is [here](https://github.com/urbit/ares/blob/status/docs/proposal/proposal-nock-performance.md). Check back at the Urbit Google Groups [listserv](https://groups.google.com/a/urbit.org/g/dev/), the [@zodisok](https://twitter.com/zodisok) Twitter account, and the Urbit Foundation [group](https://tlon.network/lure/~halbex-palheb/uf-public) for updates about the upcoming release.
48−
49−–
50−
51−*Noah Kumin is the founder and editor in chief of the [Mars Review of Books](https://marsreview.org/).*
content/blog/august-2022-grants-program.mddeleted−73
@@ -1,73 +0,0 @@
1−+++
2−title = "August Grants Program Review"
3−date = "2022-08-30"
4−description = "The completion of the first cohort of Hoon School Live and the following App School Live program minted dozens of capable new Hoon developers. These developers are completing applications, closing out bounties, and putting together proposals at a rapid pace, with more to come as Assembly 2022 draws near."
5−[extra]
6−author = ""
7−ship = "~sarlev-sarsen"
8−image = "https://storage.googleapis.com/media.urbit.org/blog/b52.jpg"
9−+++
10−
11−![Image](https://storage.googleapis.com/media.urbit.org/blog/b52.jpg)
12−
13−# Completed Grants
14−
15−Recently completed grant projects include Urbit micro-blogging, Hoon-native Discord bridging, Urbit’s first arcade-style game, Port application improvements, Ethereum bookkeeping and eth-provider infrastructure.
16−
17−* [Trill](https://urbit.org/applications/~sortug/trill) and sister application [Urbit Feed Aggregator](https://urbit.org/applications/~sortug/ufa) give you a way to escape from Twitter’s algorithms while still being able to share your shower thoughts with your followers.
18−* [Faux](https://urbit.org/applications/~midsum-salrux/faux) is a transformation of the python-based Urbit to Discord bridge, turning it into a Hoon native app and offering a front-end that takes you through the setup experience, letting you to bring your Discord friends a little taste of Urbit.
19−* [Slam](https://urbit.org/applications/~hanfel-dovned/slam), everyone’s favorite new arcade game, integrates with [Gora](https://urbit.org/applications/~dalten/gora) and [pals](https://urbit.org/applications/~paldev/pals), utilizing a mechanism whereby the number of gorae held by your pals will influence the way your game is played.
20−* The [Ethereum Provider](https://urbit.org/grants/eth-provider) grant gets the network a step closer to decentralized Ethereum access, particularly for those who don’t wish to rely on an infura node.
21−* A bounty for [Port Maintenance](https://urbit.org/grants/port-maintenance) delivered iterative improvements to the Port application for those who run their ships on a local machine.
22−* And Quartus delivered [Books](https://urbit.org/applications/~doller-doller-rabsef-bicrym/books), an Ethereum address and transaction manager for you to easily append notes and memos to your on chain transactions without having to rely on a third party (as a friendly reminder, [Urbit is not yet a secure environment so please be careful](https://twitter.com/pcmonk/status/1563634078779592709?s=20&t=FN7VVjMdjyIdukSvtg5_7g) what information you store on your ship).
23−
24−
25−# Proposals
26−
27−As the above grants wrap up, more grants are coming to life. Proposals are community generated and selected projects which offer contributors the space to build whatever tooling or applications they believe Urbit needs. Each of the following projects was funded in August:
28−
29−
30−
31−* [Herd](https://urbit.org/grants/herd) - Dependency management for Citadel
32−* [Full Stop](https://urbit.org/grants/full-stop) - A menstruation tracker for Urbit
33−* [Peat](https://urbit.org/grants/peat) - Urbit’s first backup utility
34−* [Quorum](https://urbit.org/grants/quorum) - A clone of stack exchange on Urbit
35−* [Gather](https://urbit.org/grants/gather) - an Urbit native meetup tool
36−* [Olif](https://urbit.org/grants/olif) - Olfactive rendering of Urbit address space
37−* [Urbit Interface Framework](https://urbit.org/grants/urbit-interface-framework) - Framework for alternative web browser interface
38−* [Whom](https://urbit.org/grants/whom) - A profile and contacts manager
39−
40−
41−# Apprenticeships
42−
43−Apprenticeships are also bringing opportunities for hands-on developer education and enabling seasoned contributors to share knowledge through real world projects. And contributors get to earn address space as they learn the stack and grow their network.
44−
45−Three new apprenticeships began in August:
46−
47−
48−
49−* [Loom Pointer Compression](https://urbit.org/grants/loom-pointer-compression) - Work to double the size of the loom
50−* [Build a UI for Volt](https://urbit.org/grants/volt-ui) - An interface for %volt, Urbit’s lightning wallet agent
51−* [Vere Profiling](https://urbit.org/grants/profiling) - Uncovering and visualized performance bottlenecks in the runtime
52−
53−
54−# Bounties
55−
56−August also brings with it the assignment of previously open bounties to developers looking to grow their portfolio of Urbit projects. Many of bounties that found contributors are a part of [Holium’s App Dev Summer](https://www.youtube.com/watch?v=dHyzH09QaZQ), and are slated to be completed by Assembly in Miami:
57−
58−* [Minesweeper](https://urbit.org/grants/minesweeper) - A classic desktop game, now natively in hoon
59−* [Abacus](https://urbit.org/grants/abacus) - A basic calculator app with the ability to convert units
60−* [Chronicle](https://urbit.org/grants/chronicle) - A news app that links articles from group channels
61−* [Lexicon](https://urbit.org/grants/lexicon) - A simple dictionary app with custom definitions for a group
62−* [Chess Improvements](https://urbit.org/grants/chess-bounty) - An enhanced chess experience with timing and ELO servers
63−
64−Even with all the claimed bounties, there remain a variety of projects which currently seek developers. Check out the following grants and apply to those that fit your skills and interests:
65−
66−
67−* [Trove](https://urbit.org/grants/trove) - A group file sharing tool
68−* [Urbit Native Ethereum wallet](https://urbit.org/grants/eth-wallet) - An ETH wallet for Urbit maxis
69−* [UrbitSwap](https://urbit.org/grants/urbitswap) - An Urbit-hosted Uniswap instance
70−* [Tune slaw/scot jets](https://urbit.org/grants/slaw-scot-jets) - Tuning jets for better performance
71−* [New Mars Persistent Memory](https://urbit.org/grants/persistent-memory) - Development of a persistent memory arena
72−
73−Have a project that you want to help fund and think would make a good bounty? Want to propose a project about which you are passionate? Looking for a mentor to better learn a part of the Urbit ecosystem? For more information on current projects and opportunities from the Urbit Foundation’s grant program, visit [urbit.org/grants](/grants) or reach out to ~sarlev-sarsen to get involved.
content/blog/azimuth-security-bounty-program.mddeleted−40
@@ -1,40 +0,0 @@
1−+++
2−title = "Azimuth Security Bounty Program"
3−date = "2019-07-21"
4−description = "Inviting you (and your friends) to help us make Azimuth as secure as possible."
5−aliases = [
6− "/posts/essays/azimuth-security-bounty-program",
7− "/posts/azimuth-security-bounty-program"
8−]
9−
10−[extra]
11−author = "Anthony Arroyo"
12−ship = "~poldec-tonteg"
13−image = "https://media.urbit.org/site/posts/essays/azimuth-security-bounty-program-1.jpg"
14−+++
15−
16−![](https://media.urbit.org/site/posts/essays/azimuth-security-bounty-program-1.jpg)
17−
18−Since launching [Azimuth](https://urbit.org/posts/azimuth-is-on-chain/), we’ve been running a private bounty program with [HackerOne](https://hackerone.com/). We’re now taking the program public and inviting you (and your friends) to help us make Azimuth as secure as possible.
19−
20−[Go here](https://hackerone.com/tlon) to see the live program on HackerOne.
21−
22−## What is Azimuth again?
23−
24−Azimuth is [the Urbit public key infrastructure](https://urbit.org/posts/azimuth-is-on-chain/). It’s a set of Ethereum smart contracts that allow for cryptographic ownership and management of Urbit identities. It also provides a governance mechanism whereby galaxy owners are able to propose and vote on improvements.
25−
26−People already [use Azimuth](https://github.com/urbit/bridge) to boot Arvo ships, spawn stars and planets for others and transfer points. But Azimuth is a general identity system, with great potential to be used beyond Arvo: there are primitives for reputation, payments and securing communication channels.
27−
28−## Security program details
29−
30−We had the Azimuth contracts audited by [Open Zeppelin](https://openzeppelin.org/), [Blockchain at Berkeley](https://blockchain.berkeley.edu/) and [Bloctrax](https://www.bloctrax.com/), but we don’t want to take any chances. We’re hoping that the HackerOne program will help us get more eyes on the contracts, identify vulnerabilities and get out in front of any problems. You can find more information about the program at [our page](https://hackerone.com/tlon) on HackerOne.
31−
32−We’re interested in any vulnerability in the Azimuth contracts that would allow an attacker to either seize other user’s points, impersonate points or that would result in the platform becoming unusable.
33−
34−The program page has links and instructions on how to set up a development version of Bridge and point it at either the Ropsten deployment of the contracts or at a local network to play with the contracts and look for vulnerabilities.
35−
36−## Arvo is out of scope for now
37−
38−We’re intentionally focusing our security efforts on Azimuth for now. Since Azimuth serves as our PKI layer, it’s the most crucial for the time being: it’s the source of truth for who owns what. We don’t want to have even a shred of a doubt that these cryptographic properties are secure.
39−
40−Of course, we’re working toward a future where you have a computer connected to this Azimuth point, and the computer has to be as secure as its identity. To achieve this, we have some more hard work to do on Arvo and our interpreter, Vere. When the time comes, we’ll also reach out for help testing vulnerabilities throughout the entire stack.
content/blog/community-spotlight-the-portico.mddeleted−138
@@ -1,138 +0,0 @@
1−+++
2−title = "Community Spotlight: The Portico"
3−date = "2021-05-03"
4−description = "Interview with The Portico founder Josh Reagan"
5−
6−[extra]
7−author = "Matt"
8−ship = "~tirwyd-sarmes"
9−image = "https://media.urbit.org/site/posts/essays/orthodoxchurch.jpg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/orthodoxchurch.jpg)
13−
14−_One of the most striking things about Urbit is the ideological diversity between communities. The Community Spotlight blog series will focus on various Urbit communities via interviews with founding members._
15−
16−For the first week of the Community Spotlight series, I (~tirwyd-sarmes) will be speaking with Josh Reagan (~taglux-nidsep). Josh is the founder of The Portico, an Urbit community of Eastern Orthodox Christians.
17−
18−The Portico is a very active group with conversations taking place over multiple channels. There are channels for posting Orthodox iconography, discussing the broader Christian culture war, and just talking about Orthodoxy in general. Of particular interest is Josh’s “Euthyphro” blog series which investigates the relationship between logic and the Orthodox faith. This is a topic that Josh is well qualified to talk about: he has a PhD in Philosophy from Rice University. His dissertation on the epistemology of logic and truth-preservation was titled "Knowing Your Limits: Logic for Limited Beings”. Josh is also the co-author of a forthcoming textbook on formal logic.
19−
20−To read Josh’s blog is to be inducted into two esoteric traditions: theory of logic and Orthodox theology. With titles like “St. Gregory the Theologian and the Liar Paradox” and “The Existence of Abstract Objects”, Josh does not pull punches.
21−
22−Accordingly, our conversation focused on the idiosyncratic and niche community that The Portico is home to. There, you won’t find cussing or much talk about “life partners”, but you will find cutting critiques of liberalism and the best way to raise Orthodox children.
23−
24−As other users have pointed out, Urbit is pre-[Eternal September](https://en.wikipedia.org/wiki/Eternal_September). In fact, there’s some hope that the very nature of Urbit, how it tries to protect the sovereignty of niche communities via decentralization, might foil the Eternal September phenomenon. If Josh’s community persists, it will be a testament to both Josh and the decentralized Urbit network. As of now The Portico is a refreshing, perhaps jarring (as Josh might say), reminder of what the internet looked like back in the early days—a place for those who are different.
25−
26−I encourage you to take a look. Find The Portico at ~topnup-firber/the-portico.
27−
28−\-\-\-\-
29−
30−**Do you see any connection between Rod Dreher’s _The Benedict Option_ and your community on Urbit? Dreher sees a need for American Christians to create self-sustaining communities outside of the mainstream to protect the Christian religion and culture.**
31−
32−It’s tough to say with certainty—I’ve never read _The Benedict Option_.
33−
34−A few years ago, while he was writing the book, I was a regular reader of Dreher’s blog. From his descriptions there, I was never clear about what exactly he was proposing. Much of his “clarification” came by way of metaphor: don’t “run for the hills”, but stop “shoring up the American imperium”. I didn’t read his book because I didn’t have much confidence that he would be especially precise or insightful.
35−
36−[There is an interesting review I’d recommend](https://handleshaus.wordpress.com/2020/10/06/review-of-rod-drehers-live-not-by-lies/), however, of his later book, _Live Not By Lies_. I believe it accurately characterizes the scale of the threat Christians will soon face in this country.
37−
38−My upbringing was conservative Christian and self-consciously counter-cultural. I've inherited that understanding of what it means to be a Christian in an increasingly secular world. It comes naturally to me, so I find it obvious that Christians should form self-sustaining communities. But the details matter. What do such communities look like? How do we secure the freedom to pursue such communities? How do we sustain them, when myriad external forces seek to undermine them? How do we solve the long-term problem of the declining cultural importance of Christianity (which surely erodes the plausibility of our religion to many, even to some of those with sympathies toward it)?
39−
40−I don’t claim to know the answers to these questions.
41−
42−One kind of answer is that we should redouble our efforts to support and maintain a religiously and morally neutral liberal political order, which leaves room for subcultures to live and self-regulate as they wish. I disagree. Those who support a kind of “neutral” liberalism view it as an attempt to go “meta” and rise above various parochial metaphysical, moral, and religious disputes. I view this as a cop-out, a refusal to grapple with the most important questions.
43−
44−Does the liberal have metaphysically-rooted moral reasons for going “meta”? If so, then he’s just another sectarian and he should be honest about it. The only difference is that his team has had the whip hand for the last several generations. On the other hand, if the liberal claims no underlying metaphysical justification then his project can succeed only to the extent that he can arrange and adjudicate unprincipled (and therefore ad hoc) agreements between otherwise hostile moral communities. But how stable can such an arrangement really be?
45−
46−Orthodox Christians have theologically rich, metaphysical foundations for their social and moral teachings. With these we can form healthy, thriving, and growing communities. We can do so even under actively hostile political orders. If the early Church could make it under the Romans, so can we today. But it’s going to be difficult and sound judgment is necessary. Unfortunately, we lack strong leadership and that leaves us vulnerable. If we stay uncoordinated we dissipate our energies needlessly. If we latch onto the wrong leaders we can be led astray.
47−
48−The challenges are immense. There is no technological solution. Even so, I’m an Urbit early-adopter for a reason. Over the years I’ve come into contact with a number of Orthodox and Ortho-curious Urbit followers. Why not try to bring them together in an Urbit group?
49−
50−As far as I know, no one in the group is clergy. We’re all just a bunch of laymen with no authority to do much of anything. But I’d like to think we can still contribute in some way. I have an academic background in analytic philosophy so my inclination is to emphasize theory, but we have room for a bit of everything. Someone in the group wrote a script to take the texts of various Church Fathers and convert them to audio using AWS Polly. Those turned out pretty well!
51−
52−At times I entertain ambitions to do a bit more, but for now perhaps it’s better to keep expectations in check. If nothing else, we can read and discuss the Scriptures and Church Fathers together, and try to understand better how to apply and live out their teachings. As we continue to grow the community and develop a consistent internal dynamic perhaps opportunities will arise that aren’t yet on the horizon. One thing I can say is that I’m committed to keeping the group active and growing.
53−
54−**I’d like to talk about your blog on The Portico. It combines two of your main interests: logic and theology. In broad strokes, do you think theology and logic are compatible? What is the relevance of this intersection to both of these disciplines?**
55−
56−I feel obligated to answer this question in two ways.
57−
58−(1) If by “logic” you mean “first-order predicate calculus”, then I think there’s no special conflict between logic and theology. There are certain puzzles about their relationship, but similar puzzles exist between logic and other disciplines. Theology isn't especially endangered.
59−
60−For example, in the 1930s, Alfred Tarski proved his famous Undefinability Theorem. Crudely put, it says that a plausible truth predicate cannot consistently be contained in any formal system with axioms strong enough to model arithmetic. Superficially it seems like our options are (a) get rid of the concept of truth, (b) get rid of arithmetic, or (c) throw away parts of logic until all inconsistency disappears.
61−
62−None of these options is appealing. Tarski came up with a solution that mostly satisfies many logicians: reduce the concept of truth to “truth in a language” and forbid any language from containing its own truth predicate. If you want to talk about truth in a language L-1, you have to do it from a “metalanguage”, L-2.
63−
64−Is Tarski’s definition of truth in a language the definitive solution for preserving truth, math, and logic? Perhaps not many philosophers think so, and there’s a massive literature in which logicians have attempted to improve on or extend his results.
65−
66−Sometimes people seem to think formal logic is an infallible gift from heaven that must always be right. Kant said in the _Critique of Pure Reason_ that formal logic is essentially a completed field. In fact, [the logic of his day](https://en.wikipedia.org/wiki/Port-Royal_Logic) was an early-modern Cartesian variation of a medieval scholastic synthesis of ancient Stoic and Aristotelian logics. Roughly 100 years after Kant’s first critique was published, C. S. Peirce and Gottlob Frege independently discovered first-order mathematical logic as we know it today, inaugurating the greatest advance of logic since Aristotle. Kant was wrong.
67−
68−Mathematical logic is a convenient, generally reliable, man-made tool that, when used carelessly in certain untamed domains, can lead one astray. Probably most people reading this are familiar with such puzzles as the Liar paradox. When one understands that logic is not a completed science, and perhaps never will be, there is less reason to worry about whether it can be used to nuke entire disciplines, like theology.
69−
70−For more on this topic, see the blog post in my Urbit group: “St. Gregory the Theologian and the Liar Paradox”.
71−
72−(2) There is perhaps a deeper challenge than the one I’ve just sketched. The Stoics used the term “logic” to encompass what we might today call “epistemology”. If the word “logic” is meant in some such broad and normative sense, then we may restate the challenge as one about rationality and theology. Is it irrational to pursue theology in our modern age?
73−
74−As an undergraduate under the influence of Kierkegaard, I was attracted to a romantic, vaguely irrationalist notion of faith. Dawkins-mania was at its peak and I was disgusted by the pop-rationality (or was it empiricism?) of his annoying followers. Their view seemed to be that rationality just means “following the evidence”. The raw evidence is foundational, and theories are built atop by generalizing from the evidence. The ghost of logical positivism is with us even now.
75−
76−I was dimly aware that Quine and others had made it difficult to sustain epistemic foundationalism. However, being unable to supply a more clear and cogent notion of rationality, I became skeptical of the idea altogether. But I went too far.
77−
78−Instead, the proper response is to develop a superior account of rationality. Readers can probably guess where I went looking!
79−
80−The word “logic” comes from the Greek “λόγος”. This is also the word used to describe Jesus Christ in the Gospel of John: “In the beginning was the Logos, and the Logos was with God, and the Logos was God.” This connection is not merely etymological.
81−
82−For many ancients, the term “λόγος” meant something like “divine principle”. You might think of it as akin to a law of nature, but with stronger theological connotations. Christians appropriated this term and made it rather more exalted: the Logos is begotten of the Father, and yet somehow one with Him.
83−
84−We are told that all things come into being through the Logos (John 1:3), giving Him an intimate relationship to the whole of creation. He gives structure and order to all created things, and in His divinity He understands them as so structured and ordered. He is also sinless, perfectly holy, and good. In Christ we have a perfect unity of the knowledge of all truth and righteousness.
85−
86−Man was created in the image of God, which means that we bear a likeness to Christ. And we are commanded to realize that likeness with ever greater fidelity (Romans 8:29). The Church calls the pursuit of this likeness [“theosis”](<https://en.wikipedia.org/wiki/Theosis_(Eastern_Christian_theology)>).
87−
88−Thus we have the explanation of all normativity, according to Orthodox Christianity. In moral matters we must take on the holiness of Christ. In epistemic matters we aspire to the wisdom and knowledge of Christ, which includes an understanding of the whole created order. Socially we (the community of believers, i.e. the Church) are called to be in ever greater communion with God, cooperating with His work just as the Son cooperates with the Father.
89−
90−Sadly we are conceived in sin and ignorant; hence the need for redemption by Christ.
91−
92−Accordingly, my understanding of what it means to be rational is just to be Christ-like. The only perfect exemplar of reason, so construed, is Christ Himself. Any deviation from Him is irrational. What could be more logical than to be conformed to the Logos? But we cannot attain rationality without redemption. Hence we cannot become rational without first being saved from sin.
93−
94−Doubtlessly many will find all of this too much to take, just too implausible. What about the development of mathematics, or the advances of the sciences? These are canonically ennobling, intellectual achievements. Jesus wasn’t a mathematician or a scientist! Nowhere in the Scriptures is He recorded as having applied Bayes’ theorem.
95−
96−Undoubtedly my construal of rationality de-emphasizes the pursuit of knowledge by labeling it as merely one of several normative ends. To seek knowledge without seeking holiness is to be understood as dangerously unbalanced. To try to attain holiness and knowledge without communion with God is arrogant.
97−
98−On the other hand, we need not exaggerate matters. St. Paul affirms the need for specialization of labor within the Church (1 Cor. 12). There is room for some to specialize in intellectual endeavors, so long as they act in a cooperative setting in which the other virtues are pursued as well. (Nor should anyone neglect the development of such virtues in himself.) Mathematicians and physicists are more than welcome in the Church.
99−
100−According to this (all too briefly put) theory of rationality, there can be no conflict between ‘logic’ and theology. Theology is compatible with rationality because the account of rationality in question derives from a theological tradition. Naturally I’ve only given a sketch; much more could be said. But even if some readers are put off by the theory presented here, I hope it’s at least clear that there are conflicting notions of rationality. Anyone who wants to be rational confronts the task of figuring out which theory of rationality is correct.
101−
102−**In terms of community moderation, The Portico follows norms that are quite different than other online communities, often times quite drastically. For instance, living with women that you are not married to, is not something that should be talked about lightly. Can you talk about the importance of norms and how they relate to a healthy community?**
103−
104−Orthodox Christians are not commanded to “get along” with the rest of the world (John 15:18-25). We’re different, and our norms of interaction should likewise differ from those of outsiders. There is no one, monolithic “Orthodox culture”, but there are standards governing which local expressions of culture are legitimate and which are sinful. We should live in a way that enables and promotes holiness and discourages sin.
105−
106−We have rules that may seem unusual from the outside. I don’t permit profanity, lewd jokes, or irreverent comments about God. In your question you mention a living arrangement that is prevalent in the world. Another rule I have is that we shouldn’t talk causally about sinful practices or lifestyles as if they are unremarkable parts of ordinary life. If Orthodox Christianity is true then such things aren’t minor peccadilloes. They’re spiritually destructive. The marriage-bond sanctifies activities that would otherwise be sinful.
107−
108−If someone wants to analyze what is destructive about men and women living together before marriage, we’re open to that. But if you want to be affirmed in your sin, we’re not the place for you. Anyone of any religious creed is welcome to show up—but as a guest in an Orthodox Christian community. Hosts should be courteous to guests, but my first priority is not to make you feel good about your choices. We’re here to encourage each other, learn, and grow spiritually as Orthodox Christians. Naturally that means a little gate-keeping may sometimes be necessary if someone ever comes along who doesn’t share those goals. Being different is difficult and takes work.
109−
110−In a way the cultural contrast is meant to be jarring. It can force you to confront moral and cultural presuppositions that you didn’t even know you had. When you become aware of the wider choices of culture available to you, you become free to look with a critical eye on the culture you’ve hitherto taken for granted. I think anyone could see how that might be liberating, even before considering the particulars of the cultures in question. Of course, as an Orthodox Christian, I think we have a good case to make about the particulars of our subculture.
111−
112−I’ve never had to kick or ban anyone from the group. The group is relatively small (~180 people at the moment) so that probably helps. The vast majority of conversations are relaxed and friendly. Occasionally there are intense debates about one issue or another but I enjoy it, as long as it doesn’t become bitter or the primary mode of discourse. But everything ought to be done in a spirit of truth-seeking, not of one-upmanship.
113−
114−**The fact that The Portico can exist side-by-side with atheist communities on Urbit is pretty striking. On Urbit, a user is able to create niche communities and governance structures and yet still participate in a larger network. In other words, Urbit is trying to thread the needle between sameness and difference through federation at multiple levels. It seems to me that modern culture has become homogeneous due to an inability to maintain, or distinguish between, different communities. People who have nothing in common are forced to engage as if they were roommates, while those who are similar have trouble creating their own home. In other words, what is the role of community formation in the modern world and how does it connect to your critique of liberalism? Does Urbit have anything to say about this?**
115−
116−As I said in an earlier response, I see the liberal project as more or less an attempt to sidestep (not solve) difficult metaphysical and religious disputes between various distinct moral communities. Liberals have tried several methods of governance to achieve their ends. We can divide such attempts into two broad categories: centralized and decentralized.
117−
118−Social media companies in the US confront similar governance challenges, so we can analyze them in similar terms.
119−
120−A social network like Facebook takes a centralized approach. Zuckerberg spoke early and often of his desire to connect people and “bring the world closer together”. There was a sense that if people from various communities could get to know each other a little better, we would see how much we have in common and make progress toward some kind of universal cosmopolitan consensus.
121−
122−But that didn’t happen. With centralized social media you’re practically guaranteed to interact with people whose moral and metaphysical commitments are sharply at odds with your own. As a result, you face a persistent, nagging risk of conflict. Without warning, a friendly disagreement can explode into an all-out flame war. Most choose one of two basic approaches for dealing with this threat:
123−
124−(1) You live a compartmentalized life. You keep your moral and metaphysical commitments to yourself and cultivate a culturally homogenized persona for your social media activities. No one disagrees with you because there’s nothing to disagree with.
125−
126−(2) You can enlist to fight in the culture war and display your regimental colors with pride. And because you take your smartphone everywhere you’re always on the front line.
127−
128−These aren’t the only options, of course. With some combination of charisma, patience, and grace you can be relatively open about your beliefs without getting into too much trouble. But even if you have the talent to pull it off, it takes time and energy. Many of us aren’t willing to go to all that trouble. Social media is supposed to serve us, not the other way around.
129−
130−Urbit is decentralized which, in my opinion, means that it isn’t really a network in the way that Facebook is. I see Urbit as more of a network platform. The users create the networks, or migrate them in from elsewhere. We’re all using Landscape and running our VMs on Nock, so obviously there can be interaction between different communities. But anyone who doesn’t want that cross-community interaction doesn’t have to have it.
131−
132−I’ve followed Urbit’s progress since 2016, so I’m plugged into groups with other Urbit people I’ve come to know over the years. Other than that, however, I don’t know much about who’s out there. It’s not like The Portico is in one neighborhood and the atheists are in the next neighborhood over. There’s a real sense in which we’re not even on the same network—different Urbit communities share a common protocol, but a protocol isn’t a network.
133−
134−Some people may want to see a little of everything. If atheists want to join our group they’re welcome to do so! We’ll be friendly. I don’t seek out their groups, though.
135−
136−One virtue of decentralized social media is that it offers a totally different set of trade-offs with respect to how you share and act on your beliefs. What if you could talk earnestly about philosophy and religion without having to worry about alienating many of your friends and family? I guess that’s somewhat possible on Facebook—do they still have “groups”?—but Urbit was designed for it.
137−
138−Having said all that, I don’t think decentralization is a panacea. Even if Urbit takes off, it will likely face problems that are difficult to anticipate now. My hope is simply that Urbit’s trade-offs are healthier than the ones we’ve had before.
content/blog/convivial-networks.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Convivial Networks"
3−date = "2022-05-27"
4−description = "Like the relationships that we build within them, our platforms should yield satisfaction precisely because they’re non-trivial; they demand effort, which is another way of saying they require engagement with the world."
5−[extra]
6−author = ""
7−ship = "~witwyt-widlyr"
8−image = "https://media.urbit.org/blog/convivial-computers.jpg"
9−+++
10−
11−![](https://media.urbit.org/blog/convivial-computers.jpg)
12−
13−In 1989, when the idea of forging a community online was still niche enough to feel like a radical dream, an essay in the inaugural issue of cyberpunk magazine Mondo2000 already had the audacity to ask: have we missed the revolution? Penned by Lee Felsenstein, the text takes stock of the potential, promised by the advent of the personal computer, for new technologies to contest control and engender greater forms of interpersonal connection. This opportunity, of course, was not a given. “If people can gain control over their own channels, and have the technological means available to do that directly”, he wrote, “then they can control their own communities.” If the revolution in question was not to be missed, then ownership and control over one’s own means of communication were central affordances of any technology that would lend itself to genuine community-building, or what Felsenstein called “convivial” interaction.
14−
15−His use of that term brings to mind Ivan Illich, whose “Tools for Conviviality” expressed the need for technology that can be grasped and reconstructed – tools of “high, independent efficiency” that a user could take responsibility for. Convivial tools are the opposite of industrial or institutional; Illich argued for making things usable and re-inserting the personal dimension into their construction. This was 1973, and he was talking about urban planning, but the resonance with Felsenstein’s point doesn’t seem so far a reach. If personal computing was indeed to offer any radical possibility, and especially any claim to agency over the ability to build and be in communities, it ought to be grounded in simple, accessible tools that we ourselves can operate.
16−
17−From a present standpoint, we could understand both Illich and Felsenstein’s texts as calls for human-scale technology. Simplicity is a central ingredient of this prescription; it’s hard to feel much ownership over something that one can’t use, manipulate, or maintain without deferring to an external expert every time something needs tinkering under the hood. In the decades since these treatises’ publication, personal computing has become totally commonplace, yet, with the elaboration of social networking and Cambrian Explosion of communication tools brought about by Web 2.0, it feels increasingly, and noticeably, less convivial.
18−
19−Why did this trajectory – and not one of “personal computing leagues” and ad-hoc hacking, of the nature Felsenstein and his _Mondo_ co-conspirators so passionately envisioned – take hold? My hypothesis is that, as [Rich Hickey](https://www.youtube.com/watch?v=SxdOUGdseq4&ab_channel=StrangeLoopConference) lays out, simplicity actually demands a lot of _work_. In a culture of convenience, the concerted and enthusiastic effort necessary to achieve real agency over our tools can, paradoxically, come across as prohibitively hard. Yet conflating accessibility with frictionlessness works to our collective detriment. The technologies capable of fostering conviviality _ask something of us_: engagement, patience, the will to understand. In our offline social lives, these are accepted as necessary labors of love: intimacy without investment is an impossible, irresponsible fantasy. To invoke the oft-quoted Simone Weil, “attention is the rarest and purest form of generosity.”
20−
21−And as we well know, in the present mediatic environment – tellingly termed the “attention economy” – the dynamics of directing our focus online are deeply broken. Is it any surprise that, on the platforms that have pioneered a business model out of stealing and selling that attention, community and conviviality feel so hard to come by? Effort, labor, and understanding are fundamental to relationships online and off. But the spaces where we’re meant to share these qualities online disingenuously sell us (or, rather, do they _buy us?_) with promises of ease that amount to empty calories, or worse.
22−
23−By removing friction from the equation (think: Log In With Facebook), they wall us in and transform our connections, conducted within their borders, into spaces of extraction. The mainstream communications platforms we have access to today are marketized to the hilt. Our interactions and the relational graphs they chart – in short, the tender data of our sociality – is made into fodder for surveillance capitalism. When nothing short of interpersonal intimacy is on the line, we ought to be very concerned with what is being occulted away in the name of convenience.
24−
25−If we want to create technologies that are conducive to meaningful community, where “engagement” is not just a quantitative metric or empty piece of advertising parlance, then, we need to re-orient our values beyond “ease of use”. Like the relationships that we build within them, our platforms should yield satisfaction precisely because they’re non-trivial; they command effort, which is another way of saying they require engagement with the world. Attention; generosity. In step with these values, I’m inspired to ask: what would a convivial social network look and feel like? Human-scale, peer-to-peer, open-source, and non-extractive are all descriptors that come to mind. You can probably anticipate where I’m going with this: a network with many of these merits exists today, ready to be used, tinkered with, and built on top of, and if you’re reading this, you’re probably familiar with it.
26−
27−Getting started on Urbit takes some work: investment in address space; effort to acquire a planet; possibly even bearing with some confusion during the booting process if you, like me, are an armchair network theorist who often shies away from the technical. But these costs are up-front, not black-boxed out of sight or hidden in an epic-length user agreement. Once it’s up and running, it even feels, dare I say, easy, though the healthy extension of my comfort zone that getting onto the network entailed – especially when I joined in November, a few months shy of the [L2 rollout](https://urbit.org/using/id/layer-2-for-planets) – sticks in my mind. It reminds me of the dynamics that have strengthened my closest relationships online and off: the ability to navigate challenges together and find a connection strengthened, not diminished, by our shared time spent swimming around in that vulnerable space of learning. By re-materializing a little bit of the friction of computing, not _gatekeeping_ but commanding effortful engagement, Urbit has created a platform that is purpose-built for conviviality.
content/blog/creating-sigils.mddeleted−172
@@ -1,172 +0,0 @@
1−+++
2−title = "Creating Sigils"
3−date = "2020-02-03"
4−description = "The origin and design process informing Urbit's generative user avatar system, Sigils."
5−
6−[extra]
7−author = "Gavin Atkinson"
8−ship = "~ridlur-figbud"
9−image = "https://media.urbit.org/site/posts/essays/sigils3.png"
10−+++
11−
12−<!-- ![](https://media.urbit.org/site/blog-9.jpg) -->
13−
14−![](https://media.urbit.org/site/posts/essays/sigils0-v3.png)
15−
16−One of the basic building blocks of Urbit is Urbit ID, our naming and identity system. Your Urbit ID is a short, recognizable name that’s also a network address for your Urbit OS instance. (You can find a complete, high level description of Urbit ID [here](https://urbit.org/understanding-urbit/urbit-id/).)
17−
18−Your Urbit ID is meant to feel a bit like a secret code name. It doesn’t leak any information about the real you — but it’s still memorable and recognizable. Getting an Urbit ID should feel exciting, like getting a brand new identity in a new world.
19−
20−From a design standpoint, some of this is accomplished simply by having a system for the names themselves. Under the hood, Urbit IDs are actually just numbers. There has always been an algorithm for turning these numbers into pronounceable names like `~tacryt-socryp` (13,304,832) or `~litzod` (1,280) or `~nes` (212).
21−
22−While 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−
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−
26−Regardless, we set out to tackle this problem. By the end of this process, every Urbit ID got its very own ‘sigil.’
27−
28−In this post we’ll walk through how we thought about the problem, iterated through possible solutions, and the toolchain we used to arrive at the final result.
29−
30−## Background
31−
32−What are the basic primitives of a visual language? There aren’t any completely authoritative answers to this question, of course. But we knew that to produce such a large number of visually distinct items we’d need some way to reason about form that’s closer to letterforms.
33−
34−So we started by collecting influences.
35−
36−{% iframe src="https://www.are.na/tlon/seal-zp3irwad52y/embed" className="arena-iframe" width="100%" /%}
37−
38−The ‘chop’ or [seal](<https://en.wikipedia.org/wiki/Seal_(East_Asia)>) is conceptually pretty close to what we wanted to get to.
39−
40−<br /><br />
41−
42−{% iframe className="arena-iframe" src="https://www.are.na/tlon/kamon/embed" width="100%" /%}
43−
44−[Kamon](<https://en.wikipedia.org/wiki/Mon_(emblem)>) are even closer — especially since they have very little visual complexity.
45−
46−<br /><br />
47−
48−{% iframe className="arena-iframe" src="https://www.are.na/tlon/grids-jd_xbmspxkm/embed" width="100%" /%}
49−
50−We also spent a good amount of time with both Anni Albers and Agnes Martin. Both of these painters had an incredible mastery of the grid as a means of creating engaging visual work. These paintings all have a wonderful tension between an underlying system and their specific expression.
51−
52−<br /><br />
53−
54−{% iframe className="arena-iframe" src="https://www.are.na/tlon/stella-xfroicotm_4/embed" width="100%" /%}
55−
56−Frank Stella is a master at producing incredibly dynamic work from only a few elements. His ability to create a sense of depth from simple overlapping elements is fantastic.
57−
58−<br /><br />
59−
60−{% iframe className="arena-iframe" src="https://www.are.na/tlon/ledoux-palladio/embed" width="100%" /%}
61−
62−The plans of both Ledoux and Palladio are incredibly dynamic. They’re mostly gridded, use only a few elements, and use lots of symmetry — but they’re at once distinct, engaging, and fresh.
63−
64−<br /><br />
65−
66−{% iframe className="arena-iframe" src="https://www.are.na/tlon/flags-k9moxiayuvq/embed" width="100%" /%}
67−
68−Another influence: international maritime signal flags. We like these not only because of their striking visual qualities, but also because they correspond with a letter system, just like our sigils. Each one conveys useful information; for example, “Keep clear of me; I am maneuvering with difficulty,” a flag we all feel like raising from time to time. This influence was key to the idea that pairing symbol to phoneme was a possibility.
69−
70−You can see the whole collection of our visual research [here](https://www.are.na/tlon/2019-sigils-research).
71−
72−Ultimately, we didn’t specifically draw on any of these influences very consciously. The goal of visual research is to get a sense of the territory, what has been tried, and what works. We think these threads of prior work are evident in the final result — you can _feel_ them, but it’s tough to point to them individually.
73−
74−## What’s in a name?
75−
76−> _“Lev’s sigil appeared, strobing, as Netherton was getting out of the cab in Henrietta Street. “Yes?” Netherton asked.”_
77−>
78−> **— William Gibson, The Peripheral**
79−
80−Before we get to how we worked through the problem of actually designing these things, let’s talk about the problem of naming.
81−
82−We went through so many names for these things. Crest, symbol, seal, tag, pictograph, stamp, emblem, signet, icon, glyph, holomark, visage, radigy, pattern, the list goes on for an incredibly (embarrassingly) long time. We argued about this, we went back and forth about it.
83−
84−Sigil won, ultimately, because of the way that it’s personified in William Gibson’s _The Peripheral_. In the far future, characters talk to each other by some kind of telepresence. When a call comes in from someone else, they first appear as a ‘sigil.’ It’s a strange word, but we were imagining a similar use-case.
85−
86−While we can’t point to any specific parts of our visual research that reappear directly, sigil is lovingly borrowed.
87−
88−## Experiments + iterations
89−
90−So, how did we actually end up making these things?
91−
92−We iterated through plenty of possibilities before landing on our final approach. Let’s walk through the two we remember best.
93−
94−<br /><br />
95−
96−![](https://media.urbit.org/site/posts/essays/sigils1-v2.png)
97−
98−The first attempt was a series of images in the style of Karel Martens. Overall this technique was just too cluttered and sometimes difficult to parameterize in a predictable way. We kept iterating.
99−
100−<br /><br />
101−
102−![](https://media.urbit.org/site/posts/essays/sigils2-v2.png)
103−
104−Just like the previous example, the main idea was that we could take a set of geometric primitives, combine them, then alter their appearance along a set of parameters, like color, rotation, and size.
105−
106−But also just like the previous attempt, the technique of overlapping symbols made the images too difficult to read and differentiate. We wanted to create sigils that were not only great to look at, but visually ordered. Since overlapping elements didn’t seem to quite hit the mark, on we went.
107−
108−## Closing in
109−
110−Eventually, we realized: tiles! With tile designs there are no overlaps, which in early experiments immediately started to take on the consistent, legible appearance we were after. Each element is discrete and clearly visible. Tile designs were also easier to create and control from an implementation standpoint.
111−
112−Best of all, tiles made it clear that we should be thinking in terms of creating representations of individual syllables rather than entire names. Urbit IDs are constructed from two sets of 256 three-letter syllables. `~fallyn-balfus` is `fal` `lyn` `bal` `fus`, for example. (There are two syllable sets in order to prevent duplicates — we always alternate between the two when composing names.)
113−
114−Thinking in terms of syllables greatly reduced the complexity of the problem, but there was still some work to do.
115−
116−<br /><br />
117−
118−![](https://media.urbit.org/site/posts/essays/sigils3-v2.png)
119−
120−At first, we thought about using a 4 x 4 tile grid, as shown here. These designs were tricky to implement because of the detailed lines and arcs spanning across individual tiles. In order to generate a result that matched these mockups, a program would have to generate a data model that knew about which tiles touched which other tiles.
121−
122−We felt this was too complicated and had an unknown performance profile. Plus, they proposed a deterministic color scheme and we felt strongly that color is personal, not to mention hard to parameterize. In the end we thought it better to create something that had the potential for user customization.
123−
124−<br /><br />
125−
126−![](https://media.urbit.org/site/posts/essays/sigils4-v2.png)
127−
128−Around this stage, we were thinking a lot about how architectural plans aren’t unduly constrained by the fact that they’re only one color. We had a feeling we could make the grid smaller and assign details to the tiles individually.
129−
130−<br /><br />
131−
132−![](https://media.urbit.org/site/posts/essays/sigils10-v3.png)
133−
134−So, we scaled it down to a 2 x 2 grid and stuck with it. It’s simple to implement, visually unique, consistent, and the color scheme is black and white, leaving room for user customization. We felt we had reached a semblance of a final result. Now all we had to do was manually draw 512 unique but consistent individual ‘phonemes’.
135−
136−<br /><br />
137−
138−![](https://media.urbit.org/site/posts/essays/sigils5-v2.png)
139−
140−As it turns out, drawing 512 consistent, abstract elements by hand isn’t easy. We had to strike a balance between authorship and automation — we wanted each tile to look well-made, but not too authored. To do so, we took advantage of Figma’s web API which helped us design in SVG but iterate programmatically.
141−
142−## Final process
143−
144−![](https://media.urbit.org/site/posts/essays/sigils6-v4.png)
145−
146−We took a look at our hand drawn mockups and drew each individual visual building block of the tiles separately. Then we loaded the SVG elements into a script that programmatically combined them to create trillions of layered symbols. This way, we were able to easily select candidate phoneme symbols that worked visually.
147−
148−We eventually added a rule system to find higher quality phoneme symbols — but this combination of programmatic generation and hand selection was working pretty well.
149−
150−<br /><br />
151−
152−![](https://media.urbit.org/site/posts/essays/sigils7-v2.png)
153−
154−The final step, using the tool we built, was to hand select individual phoneme symbols and create a complete index.
155−
156−<br /><br />
157−
158−![](https://media.urbit.org/site/posts/essays/sigils8-square-v2.png)
159−
160−This allowed us to start looking at possible combinations and selecting phoneme symbols based on their interplay with others.
161−
162−Once we had selected the final set, we went about compiling the `sigil-js` library that’s now publicly available. This turned out to be fairly technically complex due to the different ways SVG is handled between browsers and Figma — but the end result is a single Javascript library you can use to embed an SVG in almost any context on a web page. See it in action and browse the available sigils [here](https://sigil.azimuth.network). If you're technically inclined, the [source](https://github.com/urbit/sigil-js) can be found on GitHub.
163−
164−<br /><br />
165−
166−![](https://media.urbit.org/site/posts/essays/sigils9.png)
167−
168−We think sigils are pretty successful. They look nice in our native Urbit interfaces, people have made them into shirts and posters and cards, even laser-cut them to make stamps.
169−
170−Urbit ID and the sigils are components of Urbit that are totally separate from the OS — you can use them on their own and potentially even extend their functionality. We’re happy with what we’ve done with them so far, and hope that people will experiment with what’s possible with this naming and identity system.
171−
172−![](https://media.urbit.org/site/posts/essays/sigils11-v2.png)
content/blog/desire-lines.mddeleted−35
@@ -1,35 +0,0 @@
1−+++
2−title = "Desire Lines to a New Internet"
3−date = "2022-05-06"
4−description = "As more DAOs, NFT and digital communities find their way to Urbit, others are likely to follow their paths, making them their own, just like the network itself."
5−[extra]
6−author = ""
7−ship = "~dalwes-migdec"
8−image = "https://media.urbit.org/blog/desire-lines.jpg"
9−+++
10−
11−![](https://media.urbit.org/blog/desire-lines.jpg)
12−
13−The beginning of a migration is usually imperceptible. First comes discontent, then comes the decision to either stick with inadequate, but familiar circumstances or to try something new and foreign. Eventually, someone makes the jump. A few others join. Then, seemingly all at once, a rush precipitates a trend, signaling the migration's final wave before broad and broader adoption.
14−
15−By now it's obvious that the tooling web3 communities and DAOs rely on day-to-day are, at best, deficient. Pointing this out verges on parody. Still, stuck between a disjointed terrain of engagement-oriented apps and data-harvesting services, where are these newly nomadic syndicates supposed to go? If you spend more than ten minutes on Twitter, reading the same canned takes on digital itinerancy, you will come across a variety of answers, and the figureheads of several recently incorporated Delaware LLCs claiming to be building the OS for web3. Some of these endeavors appear promising, to be sure, but none are more mature or as [well-positioned](https://datnut-pollen.discordja.net/discordja/giving-daos-a-brain) to satisfy this need than Urbit. A few communities are already on the network and [thriving](https://urbit.org/blog/urbit-for-creators), and another swell is approaching.
16−
17−To understand why Urbit is so appealing for web3 communities, start by examining the principles that motivate its development. Ownership of data, durability, and digital sovereignty underpin the entire project, from its earliest days to its present, evolved form. Without ownership, your tools control you more than you control them. Without built-in longevity, your tools can't be easily passed from one generation to the next, which is the premise of Urbit's technological page one rewrite. (For those interested in learning more about Urbit's clean slate stack, you can read documentation [here](https://urbit.org/docs).) Finally, without sovereignty, you're powerless to the whims of a centralized stronghold of corporate and bureaucratic control.
18−
19−As an open source peer-to-peer network, Urbit offers communities the reliability absent elsewhere in the ecosystem, and the assurance that there will never be surreptitious terms of service changes, nor shareholders to appease. By design and in spirit, Urbit is the only viable alternative to the hodgepodge of competing chat rooms, voting services, blogs, and wallets presently available. Building dapps that supplant these services ultimately leads to similar impractical quandaries. Every dapp requires that a server be online, in a friendly jurisdiction, for you to be able to access its interface and once you access its interface, a dapp can't store any data about you that isn't on a (slow) public blockchain. Why can't a dapp wallet show you all of your assets, your transaction history, and all the contacts you trade with? Because running and operating the necessary server is at odds with the premise of a dapp.
20−
21−An Urbit app retains its decentralized integrity while providing the ability to share data between apps, run regular computation, and call out to the blockchain as needed—all on a cohesive platform. Fundamentally, Urbit is yours: to own, to customize, to turn into a digital home. When more communities ditch the dance between MEGACORP-operated servers and create new homesteads on Urbit, it gets significantly easier for others to mirror their steps and relocate themselves.
22−
23−Communities that find their way to Urbit are essentially traversing desire lines, taking paths that "emerge gradually and organically, almost of their own accord" as [described](https://books.google.ca/books?id=mW7RCwAAQBAJ&pg=PA3&dq=%2522christopher+alexander%2522+organically+%2522paths%2522&hl=en&sa=X&ved=0ahUKEwjN7dqN6fbPAhUqr1QKHTB9BBsQ6AEIHjAA%23v=onepage&q=%2522christopher%2520alexander%2522%2520organically%2520%2522paths%2522&f=false#v=onepage&q=%2522christopher%2520alexander%2522%2520organically%2520%2522paths%2522&f=false) by the late architect Christopher Alexander. Before Urbit's [L2 launched](https://urbit.org/blog/layer-2-guides), distributing a tranche of planets to community members would have been cost prohibitive. Now that it can be done, and done simply, planet activations are rapidly increasing, [doubling](https://twitter.com/jmrphy/status/1517533689118306304) in the last two months. Desire lines to Urbit exist as invitations for the next community, to pass over, and to make their own, just like the network itself.
24−
25−The limitations of operating on the clearnet appear to be at long last irrevocable. Multiple desire lines to Urbit are materializing concurrently. Remilia Collective, aka Remco, aka the creators of Milady, has been [vocal](https://blog.remilia.org/urbit-with-port/) about the network for quite some time, but more community members than ever have onboarded as the result of a [headless](https://twitter.com/TheCombineDAO/status/1514000804235120644), [grassroots](https://twitter.com/hastuc_dibtux/status/1514031235135377421) collaboration between Urbit maximalists and miladies.
26−
27−DAO tooling is also proliferating on Landscape, Tlon's interface for navigation on Urbit and a platform from which developers can release apps directly to users with minimal effort. [Holium](https://www.holium.com), a team working specifically on unifying the DAO tech stack, released a ballot app last month that allows for flexible voting, delegating, and result-related actions. [PointDAO](https://pointdao.notion.site/pointdao/Point-DAO-bc8fc478b67a49ac92358a2a40d77d35), a collective of more than two hundred people that owns a galaxy, serves as a prototype for other communities to crowdfund purchases of Urbit address space—a procedure that they are aiming to make replicable and scalable.
28−
29−Growing your own society on Urbit can be as straightforward as using ownership of one token as the prerequisite for claiming another token (in other words: token gating a token). The Urbit Foundation just funded a [grant](https://urbit.org/grants) that simplifies the process of deploying Urbit IDs via another NFT's minting. Development is still ongoing, but [Dusko](https://dusko.world), the NFT project that received the grant, did a trial run last week to coincide with the release of a fresh batch of character pfps. For each mint, the collector could [custody](https://www.mintdusko.world) their very own planet—all authenticated via Metamask. (To track their progress, join [~panrut-ragbyl/dusko](https://urbit.org/groups/~panrut-ragbyl/dusko).) Dusko's approach represents the first desire line of its kind, and other communities are likely to take their path.
30−
31−The adage goes something like as soon as you notice a migration is underway, you've already missed the boat. But there's no boat to miss because an overabundance of communities could never exist on Urbit—it's as vast as it is cozy. Angling to get your community onboard? Share planets with a NFT-based community using Valve, the distribution mechanism Dusko is working on, or apply to build your own version. Crowdsource the funds for a star. Set up your group and send out a [flare](https://tirrel.io): everyone else will follow.
32−
33−
34−
35−
content/blog/eliza.mddeleted−46
@@ -1,46 +0,0 @@
1−+++
2−title = "Eliza"
3−date = "2021-02-22"
4−description = "Building things, even Calm™ things, makes noise."
5−
6−[extra]
7−author = "Christian Langalis"
8−ship = "~pindet-timmut"
9−image = "https://media.urbit.org/site/posts/essays/valleys.jpg"
10−+++
11−
12−![valleys](https://media.urbit.org/site/posts/essays/valleys.jpg)
13−
14−## The Storm before the Calm
15−
16−Building 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.
17−
18−We call her Eliza. She is a data-collection robot.
19−
20−Hang on. An AI? Harvesting my data? Spying on me? Flooding me with spam? This is Urbit, right? Let us tell you about our new friend in basic terms, where MEGACORP might otherwise deploy legalese.
21−
22−## What Eliza is and isn’t
23−
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.
25−>
26−> **Rick Deckard**
27−
28−Let'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.
29−
30−Finding bugs is critical to Urbit's rapid development, especially in this period of nascency. Most Urbit-related frustrations go unreported; regular folks don't think to open up Github when they experience a minor issue. That's why it's incumbent upon us to design a lower-friction forum for feedback. People who aren't comfortable filing an issue might be willing to talk to a friendly chatbot.
31−
32−Now, about hazards. By design, there are few. Eliza runs on Tlon's comet, not on your planet. There will be no OTA to install `%eliza-bot-store` on everyone's ships. Eliza learns things through conversation, not hidden surveillance software. Data she requests, like the text output of our network analytic tool, `+tally`, must be sent manually. MEGACORP tends to cut this corner; to refine their products, they just track your reactions in real-time.
33−
34−Since she's [open-source](https://github.com/urbit/urbit/blob/b0c1f83287cbf4c85847a9238d9f4be17e1fcb33/pkg/arvo/app/eliza.hoon), anyone can creatively deploy Eliza. Just write her a dialogue tree. Of course, that also means we can't keep people from misusing Urbit bots. We think automated agents on the Urbit network are inevitable, so let's create a good baseline culture around them. (Much love to Tendiebot, who's serving up stock prices in `~tomdys/wall-star-bets`.) However, once Urbit is used world-wide, we can't rely on culture alone.
35−
36−## A New Internet Economics
37−
38−The sum of Urbit's architectural design is a new online economics: a way to finance and monetize access to internet infrastructure where people retain maximum equity. Explicitly acquire a low-maintenance, low-cost server. Use it to compute explicit things. Return to life.
39−
40−We all know the basic MEGACORP business model: offer a free service (to suckers who don't own a server), secretly mine the data they generate on the (addictive) platform, then sell targeted ads to advertisers. This model will not survive Urbit. The ubiquitous personal server changes the economic equation. You used to 'pay' for an experience with your time and data. On Urbit, once you purchase core internet infrastructure, it's yours.
41−
42−So, can Urbit meaningfully curtail our world's appetite for data? We'll see. Post-enlightenment society runs on instrumental reason, right down to the last byte. Marketers will always want a fresh dataset. However, when the goods are on your Urbit, you can at least demand the respect you deserve. Long term, we expect a transparent market for data, not an opaque "agreement". An analytics company wants to track everything you see and do on Urbit? They better be paying well.
43−
44−Eliza doesn't pay respondents. Her collection is a charity to Urbit's developers. (We're also still busy enabling payments on Urbit with the Bitcoin wallet.) However, her presence is not a term of service either. In a few years, by the nth time some smart aleck uses Eliza's chatbot code and conjures 'Zalexa' to attempt an intrusion upon your Calm™, we will see the economics of Urbit's architecture suddenly vivify. Blacklists, reputation systems, and, eventually, even data markets, all Urbit primitives envisioned long ago, will become real. We won't need Zoogle to underwrite a spam filter for the entire internet; the scarcity of Urbit address space, in tandem with a true web-of-trust, handles that.
45−
46−If Urbit is to be used worldwide, the old system will not go down without a fight. Spammers, spies, and digital robber-barons will hunt for ways to game Urbit. Our passage out of the digital gutter is beginning in earnest, and we are thrilled to put our new architectures to the test.
content/blog/events-series.mddeleted−53
@@ -1,53 +0,0 @@
1−+++
2−title = "Urbit Events Series"
3−description = "These events are an opportunity for Urbit contributors to share real-time updates that don’t make it into this blog, and for the community to get to know the contributors (and one another)."
4−date = "2020-10-29"
5−
6−[extra]
7−description = "These events are an opportunity for Urbit contributors to share real-time updates that don’t make it into this blog, and for the community to get to know the contributors (and one another)."
8−author = "Lane Rettig"
9−ship = "~naplet-hildec"
10−image = "https://media.urbit.org/site/posts/essays/bau.jpg"
11−+++
12−
13−![people gathered](https://media.urbit.org/site/posts/essays/bau.jpg)
14−
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._
16−
17−--
18−
19−If you’re familiar with the project, you’ve probably noticed that Urbit folks talk a lot about the fact that [Urbit is for communities](https://urbit.org/blog/urbit-is-for-communities/). This is central to what Urbiteers believe: Urbit is a platform that any group of people should be able to use to build, communicate, and transact in precisely the way that makes sense to them. Today, Urbit is already capable of facilitating many of these activities, and it’s already a big part of the daily workflow for many people. I think we’re off to a pretty good start, and over time Urbit will become accessible to more communities.
20−
21−Something we tend to talk less about is the fact that Urbit itself is also a community. If you’ve spent any amount of time hanging out in Landscape in the Urbit Community group, you already know this—but getting to know the community takes time and effort.
22−
23−One of the reasons you don’t hear about the Urbit community as much is that community is difficult to pin down: you'd be hard-pressed to put "the community" into a room together. It's a weird, fuzzy notion and doesn't have clear boundaries.
24−
25−Other parts of Urbit do have clear boundaries. If you decided to learn more about Urbit, chances are you started by reading the docs. You might learn about [Nock](https://urbit.org/docs/tutorials/nock/), [Hoon](https://urbit.org/docs/glossary/hoon/), and [Arvo](https://urbit.org/docs/glossary/arvo/). You might get an [Urbit ID](https://urbit.org/understanding-urbit/urbit-id/) and [launch your own ship](https://urbit.org/getting-started/). These things are all pretty well documented and, while not necessarily easy, their respective processes are relatively straightforward and [getting easier](https://urbit.org/blog/hosting-the-future/) every day. Community is less well documented. It’s more difficult to document—it’s something you just have to experience.
26−
27−We lead with technology because it’s what we’re good at and because it’s easier to write about. But the social side of Urbit is no less important. Since so many of us are working on and contributing to Urbit in order to solve our own problems, and since we’re dogfooding as we go, you could define Urbit as the minimal technological infrastructure needed to sustain the Urbit community. It’s circular, but it’s as good a definition of Urbit as you’re likely to find. For this reason, you can’t really understand Urbit without some degree of exposure to the cultural knowledge of its community. When the Urbit community did fit in a single room together, transmitting cultural knowledge was easy and happened over pizza and beer. As the number and diversity of Urbit stakeholders continue to grow, we need to find ways to scale the transmission of this cultural knowledge.
28−
29−One way that seems to work well is getting everyone together once in a while for events. Over the last few years, I and others in the community have collectively attended hundreds of community events, virtually and in person around the world, from small developer chats to massive, global developer conferences with thousands of attendees. Urbit has even hosted [a few of our own](https://www.meetup.com/urbit-sf/).
30−
31−As a newcomer to the Urbit community I recently found myself seeking exposure to cultural knowledge. I know from experience attending and organizing events in other communities that regular events are a good way of making this knowledge more accessible, and of helping newcomers like myself onboard. I applied for [a grant](https://grants.urbit.org/proposals/1751024973) to bootstrap a new event series, and I’m excited to announce that this series is launching next week with the support of [urbit.org and the grants program](https://urbit.org/blog/first-steps-towards-urbit-org/).
32−
33−The event series has three components. The first is a series of developer calls. These will be shorter and more narrowly focused on the technologies that underpin Urbit, from the top of the stack to the very bottom. They’re an opportunity for the people developing and contributing to Urbit to share their knowledge and expertise, including things that typically don’t make it into the docs, such as how and why Urbit works the way it does. It’s recently become much easier to build applications on top of Urbit, so I hope these events will help developers see what sort of things they can already use Urbit to build, and how to get started. These events are also an opportunity for Urbit contributors to share real-time updates that don’t make it into this blog, and for the community to get to know the contributors (and one another!).
34−
35−The first developer call will take place on Thursday, November 5 at 9am PT, and you can [sign up to attend here](https://www.meetup.com/urbit-sf/events/274279522/). The second call will take place two weeks later on Thursday, November 19, and we’ll continue holding these calls about every two weeks.
36−
37−The second component is a larger Town Hall event to take place on Thursday, December 17. The Town Hall will feature multiple speakers and will cover topics including technology but also design, community, and our overall progress towards our vision for Urbit. You can think of it as part show and tell, part “State of the Network,” part meet-and-greet.
38−
39−The third component is a larger conference, tentatively called UrbitCon, to take place early next year. This event is still in a conceptual phase. It’ll be an opportunity for the global Urbit community to celebrate how far the project has come, to share technical as well as cultural knowledge, and, maybe most importantly, to hang out together and have some fun as well. Watch this space for more information on the Town Hall and UrbitCon.
40−
41−Collectively, these events allow the community to achieve several goals. Firstly, they’re a great way for community members to meet one another, exchange cultural knowledge, and share what they’re working on. Events provide excellent motivation to get something that’s a work-in-progress to a state where you can share it with others!
42−
43−Secondly, the content from these events will be recorded and published, and will form the cornerstone of a new knowledge base on urbit.org that will augment existing documentation. This will make it much easier for newcomers, even those that can’t attend the events live, to benefit from the wealth of knowledge and expertise of the Urbit community.
44−
45−Finally, these events are a great opportunity for community members to contribute things other than code. While Tlon will provide speakers for the first few events of the series, it’s important to emphasize that the initiative is entirely community-led and that we’ll need lots of help to organize and host events. If you’re interested in helping out with any of the events in the series, please find me and others helping out with events on Landscape in the Urbit Community group (the channels called “Events Series”).
46−
47−They say that a project’s community has reached critical mass when new things are happening that even the project’s earliest and most active contributors aren’t aware of. By this standard, the Urbit community reached critical mass sometime in the past few months, as even core team members tell me they’re regularly surprised to learn of another new project or initiative launched by a community member.
48−
49−Tlon could no longer catalog the Urbit community even if it wanted to. This is a good thing. As Tlon [has also said](https://urbit.org/blog/hosting-the-future/), it’s natural that Tlon and Urbit drift apart a bit over time. Just as Urbit itself is self-hosted, so the community, over time, should become self-hosting: it should play a more active role in shaping the future of the project. A community-run event series can be an important catalyst for this trend. I’m looking forward to the first event, and I hope to see you there, and at many events to come.
50−
51−--
52−
53−_Sign up to attend [the first event](https://www.meetup.com/urbit-sf/), and join the channels called “Events Series” on Landscape in the Urbit Community group to get involved._
content/blog/first-contract.mddeleted−289
@@ -1,289 +0,0 @@
1−+++
2−title = "Azimuth’s First Contract Upgrade"
3−date = "2021-06-04"
4−description = "Galactic Senate makes first concrete action"
5−
6−[extra]
7−author = "Jonathan Paprocki and Mark"
8−ship = "~datnut-pollen and ~palfun-foslup"
9−image = "https://media.urbit.org/site/posts/essays/land3.jpg"
10−+++
11−
12−![milestone](https://media.urbit.org/site/posts/essays/land3.jpg)
13−
14−Recently, the [first upgrade](https://github.com/urbit/azimuth/pull/35) to the
15−[Azimuth](/docs/glossary/azimuth) smart contracts which make up Urbit ID was
16−put up to an [upgrade proposal vote](/docs/glossary/upgrade) by the
17−[Galactic Senate](/docs/glossary/senate). This vote is still open and will
18−last for 30 days (June 20th) or until an absolute majority is reached. We’d like
19−to take this opportunity to discuss two things. [First](#changelist), what the
20−proposed changes are, and [second](#senate), a review of how Urbit governance
21−works and where we’re at in the decentralization process.
22−
23−Before we dive into what the proposed changes are, let’s review what the Senate
24−is actually capable of changing. Urbit ID is really two sets of smart contracts:
25−Azimuth and [Ecliptic](/docs/glossary/ecliptic). Azimuth is the data of the
26−public key infrastructure - roughly, this is the list of
27−[ships](/docs/glossary/ship) and which Ethereum addresses own them, along
28−with other data such as networking keys and sponsorship status. The Senate has
29−no ability to touch this data directly. This is in direct contrast to all
30−existing centralized services, where your account is always at risk of being
31−taken away from you. What the Senate can change is Ecliptic, which is the
32−“business logic” that decides how you can interact with the data in Azimuth.
33−These are mechanisms such as what powers various
34−[proxies](/docs/glossary/proxies) have, how stars/planets are released over
35−time, and how sponsorship works. Put another way, the data and database format
36−must remain the same, but the rules by which we interact with it may change
37−according to the governance rules we [detail below](#senate).
38−
39−## Changelist {% #changelist %}
40−
41−The Galactic Senate is voting on the following changes to Ecliptic:
42−
43−- Fixed ERC721 compatibility
44−- Self-modifying proxies
45−- Upgraded Claims contract
46−
47−### Fixed ERC721 compatibility
48−
49−In Ecliptic, the contract includes various functions and events
50−that make it conform to the ERC721 (non-fungible token) standard. However, two
51−events have [ever so slightly
52−non-confirming](https://github.com/urbit/azimuth/issues/8) descriptions. This
53−causes Ethereum explorers like Etherscan to incorrectly recognize Azimuth as
54−ERC20 (fungible token), rather than ERC721.
55−
56−The proposed change simply modifies the event descriptions to accurately match
57−the ERC721 definition. This does not affect any functionality within the
58−contract itself.
59−
60−### Self-modifying proxies
61−
62−Owners of Azimuth assets are allowed to configure "proxy addresses" for those
63−assets: Ethereum addresses allowed to act "as" the owner, but only for a subset
64−of operations. For example, setting the management proxy will let you change
65−your networking keys and sponsor using that address, just like your ownership
66−address can. This is useful for keeping the ownership keys in very cold storage
67−while still letting you perform lower-value operations.
68−
69−Currently, only the ownership address is allowed to change proxy addresses.
70−Fairly early on after Azimuth's deployment, we realized it might be nice for
71−proxies to be able to change themselves.
72−
73−This means that, in addition to being able to configure networking keys and
74−sponsorship, your management proxy would be able to assign a new management
75−proxy. This would allow you, or a trusted third party holding your management proxy,
76−to rotate your proxy keys without needing to take your ownership keys out of cold
77−storage.
78−
79−### Upgraded Claims contract
80−
81−[The Claims
82−contract](https://github.com/urbit/azimuth/blob/master/contracts/Claims.sol)
83−lets asset managers associate various "claims" with their identity. For
84−example, an Ethereum address to send donations to, or proving ownership of a
85−Twitter account.
86−
87−For ease of use by off-chain tools and services, the contract emits events
88−(notifications) whenever any claims are updated. However, the current version of
89−the contract has a bug where it does not emit events when all claims are removed
90−at once (clearClaims()). This "gap" in the event stream makes it much more
91−difficult to write off-chain tools around this contract. Considering Claims has
92−seen [practically no
93−use](https://etherscan.io/address/0xe7e7f69b34d7d9bd8d61fb22c33b22708947971a#events)
94−since it was first deployed, it should not be a problem to simply start over
95−fresh with a new contract that contains [the
96−fix](https://github.com/urbit/azimuth/pull/32) for the described bug.
97−
98−The reason we must do an Ecliptic upgrade to switch to a new Claims contract, is
99−that it is tied in with the logic for transferring an asset. If an asset is
100−flagged for "reset" (common when transferring to/from someone other than
101−yourself), its configured proxies, networking keys and claims are cleared during
102−transfer. As such, Ecliptic will need to know about the address of the new
103−Claims contract.
104−
105−## Urbit Governance {% #senate %}
106−
107−![geology](https://media.urbit.org/site/posts/essays/b1.jpg)
108−
109−The ultimate goal of Urbit is to become a digital republic manifested as a peer
110−to peer network owned and controlled by its users. The goal of Tlon, then, is to
111−become one of many companies who build products for Urbit rather than being the primary
112−driving force behind its development. We’d like to take this opportunity to
113−spell out our perspective on where we’re at in that process. Here are some previous posts that are relevant, but please note that
114−some of them are several years old and as such may not accurately reflect our
115−current position, but still serve as useful historical markers. We hope to
116−revisit and refresh these documents soon.
117−
118−- [2016.5.16 - Interim
119− Constitution](/blog/interim-constitution)
120−- [2016.5.16 - The
121− Urbit Address Space](/blog/the-urbit-address-space)
122−- [2016.6.24 - The DAO as a Lesson in Decentralized
123− Governance](/blog/the-dao-as-a-lesson-in-decentralized-governance)
124−- [2019.1.11 - Governance of
125− urbit.org](/blog/governance-of-urbit)
126−
127−### Galactic Senate
128−
129−The Galactic Senate is composed of all [galaxy](/docs/glossary/galaxy)
130−holders, which at present consists of more than 100 individuals and a few
131−organizations, including Tlon and the Urbit Foundation. Using the Azimuth
132−voting contract, the Senate can present and vote on two kinds of proposals:
133−[document proposals](/docs/glossary/docvote) and [upgrade
134−proposals](/docs/glossary/upgrade). Thus far, all matters which the Senate
135−has voted on have been document proposals. The [most recent
136−vote](https://github.com/urbit/azimuth/pull/34) declared the Urbit network as
137−(i) being secure (as confirmed by a [third party
138−audit](/blog/security-audit)) and (ii) having reached continuity (as in, no
139−further [network breaches](/docs/glossary/breach) are expected). Previous votes
140−were to declare that [Azimuth is live](https://github.com/urbit/azimuth/pull/25)
141−and that [Arvo is stable](https://github.com/urbit/azimuth/pull/24).
142−
143−### Address space distribution
144−
145−Perhaps the most informative measure of how decentralized Urbit is in terms of
146−how many independent parties hold address space. By the very nature of Urbit, it
147−is impossible to know this with great accuracy (a common feature of
148−decentralized projects). However, the movement of galaxies is closely watched
149−and thus we have a fairly good idea of how distributed they are.
150−
151−In the beginning, Urbit’s creator Curtis Yarvin was in possession of the entire
152−address space - all 256 galaxies, and everything underneath it. A network of one
153−is no network at all, and so over the last decade Urbit’s development has been
154−primarily driven by selling or giving away these galaxies. On [June 1,
155−2016](/blog/the-urbit-address-space), the allocation was:
156−
157−> 95, to the Tlon Corporation. 50, to urbit.org, the future community
158−> foundation. 40, to Tlon employees and their family members (24 to Curtis, who
159−> started in 2002; 16 to everyone else, who started in 2014). 34, to outside
160−> investors in Tlon. 37, to 33 other individuals, who donated to the project,
161−> contributed code or services, won a contest, or were just in the right place
162−> at the right time.
163−
164−Since then, Tlon has sold a number of
165−its galaxies to fund development and others have changed hands to the point
166−that Tlon and urbit.org no longer possess a majority share of galaxies. In
167−January 2019, [Curtis gave all of his galaxies](/blog/a-founders-farewell) to
168−Tlon when he left the project. In August 2020 we shared an update on the [known
169−distribution of address space](/blog/value-of-address-space-pt3), where
170−Curtis’ galaxies are marked as Tlon’s “naked galaxies”. Shortly thereafter, Tlon
171−disbursed its naked galaxies among the employees that wanted one who did not
172−already possess one, thus removing Tlon and urbit.org’s controlling share of the
173−Senate. Galaxies held by current and former Tlon employees are entirely
174−independent of Tlon Corporation—they may do with them, and vote with them, as
175−they please. `~ravmel-ropdyl` plans to give more color to this decision in the
176−near future.
177−
178−Distribution of stars is much more difficult to know. There is an active market
179−for stars on [OpenSea](https://opensea.io/collection/urbit-id), so we know that
180−they are changing hands frequently, but checking the number of distinct Ethereum
181−addresses that hold stars does not tell you very much information since a single person can control multiple adresses.
182−
183−### Software and smart contracts
184−
185−As was written in [The DAO as a Lesson in Decentralized
186−Governance](https://urbit.org/blog/the-dao-as-a-lesson-in-decentralized-governance/),
187−we are keenly aware of the threat of _decentralization theater_. Urbit has
188−undergone steady progress towards decentralization, and with the developments we
189−outline below, it’s never been more clear that the project is beginning to leave
190−the cradle of Tlon. It’s also important to note that the decentralization of a
191−project is always a movement away from an initial centralized state⁠—you cannot
192−go from A to Z without first traversing every letter in between. While Urbit was
193−centralized at the beginning, the journey towards a network owned and
194−controlled by the users is now well underway.
195−
196−In the past, nearly all Urbit software was written by Tlon. While Tlon is still
197−the only corporation actively updating Urbit’s MIT-licensed open source
198−software, namely [Vere](/docs/glossary/vere) (the runtime),
199−[Arvo](/docs/glossary/arvo) (the kernel),
200−[Landscape](/docs/glossary/landscape) (the client), and
201−[Bridge](/docs/glossary/bridge) (the ID manager), unaffiliated individuals have been making enormous contributions to Urbit over the past couple of years via the [grants program](https://grants.urbit.org/history). Recent examples include the [Bitcoin node and wallet integration](https://github.com/urbit/urbit/pull/4940), [WebRTC integration](https://grants.urbit.org/proposals/21131866-webrtc-gall-agent-and-external-app), [Port, an Urbit installer and ship manager](https://github.com/arthyn/port), and [`|fuse`, an important primitive for 3rd party software distribution](https://github.com/urbit/urbit/pull/4820).
202−
203−The only real power Tlon holds over Urbit is the ability to push [OTA
204−updates](/docs/glossary/ota-updates) via `~zod`, and suggest that people
205−download our binaries. To the best of our knowledge, all extant galaxies
206−retrieve their OTA updates from `~zod`, who forward it to their stars, who
207−forward it to their planets. This software distribution route is merely a
208−convenient default setting. Ships initially retrieve OTA updates from their
209−sponsor, but they have full authority to retrieve updates from whoever they want
210−with the `|ota` command, or even to only install software updates by hand if
211−they so choose.
212−
213−In the future, one can easily imagine many organizations shipping their own
214−distributions of Urbit from their own urbit nodes, somewhat analogously to the
215−large number of Linux distributions which exist today. There is nothing we can
216−do to stop a group from forking Urbit, declaring `~sampel-palnet` the new `~zod`
217−(both for updates and for sponsorship purposes), and retrieving all OTA updates
218−via that route and building their own binaries. This is all by design, and we
219−wouldn’t want it any other way.
220−
221−The use of the Azimuth smart contracts is also somewhat optional. By changing a
222−few lines of code to point their ships at another set of PKI smart contracts,
223−they could rid themselves of hierarchical peer discovery entirely and make use
224−of some other routing strategy such as [Kademlia based DHT
225−routing](https://en.wikipedia.org/wiki/Kademlia). This would likely give rise to
226−an entirely separate network. The fact that the network is fully capable of such
227−a schism helps keep the Senate honest and accountable to the users. If they ever
228−were to vote on a contract modification that greatly angered or upset a portion
229−of the user base, they would be inviting such a schism and be entirely deserving
230−of it. In that sense, the power to control the network is already held by the
231−users, they just have not yet had a reason to make use of it.
232−
233−### Legitimacy
234−
235−The only way by which Tlon and the Senate hold any power is via legitimacy.
236−Vitalik Buterin recently wrote a [very informative
237−article](https://vitalik.ca/general/2021/03/23/legitimacy.html) on the role of
238−legitimacy in decentralized governance, and I do not know of a better source to
239−understand how Tlon and the Senate are kept in check by the users. Besides the
240−DAO split resulting in Ethereum and Ethereum Classic mentioned in the article,
241−perhaps the most prominent example of the power users have over a decentralized
242−network is the saga of [Steem and Justin
243−Sun](https://www.coindesk.com/justin-sun-bought-steemit-steem-moved-to-limit-his-power).
244−The short version of the story is that Justin Sun bought a controlling share of
245−the Steem blockchain and attempted to exert control over it, and the users
246−banded together to fork the blockchain into one called Hive, which was identical
247−to Steem except with Sun’s token balance set to zero. An analogous outcome for
248−Urbit would be that the Senate makes sweeping changes to the PKI and invites a
249−schism like that outlined above.
250−
251−For these reasons, there are strong disincentives for any one organization or
252−individual to acquire too many galaxies. If galaxy ownership becomes more centralized, individuals will be less incentivized to build on the network which will reduce the value of address space. Furthermore, such centralization might provoke a fork if such centralized powers are perceived as malicious by the users. This is in contrast to real-life republics, where there is little risk
253−for one party to accumulate as much power as they can manage since the cost to
254−the citizens to overthrow that power is enormous. Thus, only especially
255−egregious displays of power ever result in rebellion. Within the Urbit republic,
256−users need only to change the code they run to leave the Senate powerless, and
257−so the threat of rebellion is much more real. We estimate that within a digital
258−republic like Urbit, the centrifugal forces outweigh the centripetal forces, and
259−that the outcome of this is more stable than the reverse.
260−
261−### Why have governance at all?
262−
263−An important question the reader may still have lingering is: why does Urbit
264−need governance at all? The short answer is: (i) there will always be necessary
265−protocol upgrades that cannot be foreseen, and (ii) a total lack of governance
266−inevitably gives rise to a shadow government with undefined powers that is
267−almost impossible to hold accountable.
268−
269−With (ii), we see this to be the case on many early blockchain projects where
270−power is shared by the developers and the miners, but what each is capable of
271−doing has never been codified, and thus users of the blockchain can never have a
272−great deal of certainty of what changes might occur in the future. This doesn’t
273−guarantee a bad outcome, but it does create more wariness among developers when they cannot know whether they really have a say in
274−the project's direction. Recognizing this issue, many newer blockchain and
275−blockchain-adjacent projects have built-in governance mechanisms that lay out
276−exactly what an individual can expect should they join and contribute to that
277−network.
278−
279−As for (i), with Urbit being a wholly new kind of network, it would take
280−incredible luck to get the PKI exactly right on the very
281−first try without ever needing another modification. Thus, some mechanism was
282−needed to guarantee that the PKI’s logic could be altered. Leaving control of
283−Azimuth in the hands of Tlon would have just granted Tlon dictatorial power, which Tlon nor Urbit users desired. There’s certainly
284−room to argue that the Galactic Senate is not a perfect system: our interim
285−constitution did outline potential roles for stars and planets to play in
286−governance in the future, so there is ample opportunity for the system to evolve
287−in response to the will of the users. As always, it is important to keep in mind
288−the unfinished nature of the Urbit of today and the still moldable clay of the
289−Urbit of tomorrow⁠—nothing yet is set in stone.
content/blog/first-steps-towards-urbit-org.mddeleted−52
@@ -1,52 +0,0 @@
1−+++
2−title = "First Steps Towards urbit.org"
3−date = "2020-08-11"
4−description = "With a stable platform taking shape and a strong community forming that wants to help build Urbit, it’s time to make urbit.org real."
5−
6−[extra]
7−author = "Josh Lehman"
8−ship = "~wolref-podlex"
9−image = "https://media.urbit.org/site/posts/essays/first-steps.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/first-steps.png)
13−
14−## Summary
15−
16−It’s been a long time since we last discussed separating the [governance of urbit.org](https://urbit.org/blog/governance-of-urbit/) from Tlon. In the last few weeks, we’ve taken steps to make such a separation real. In this update we’ll discuss the background that led us here, why we’re doing this now, and what this means for Urbit.
17−
18−## Background
19−
20−At present Urbit is an open-source project developed primarily by the company Tlon. Urbit is an ambitious project with a long roadmap, which has required both careful guidance and resources to sustain its development. These resources have been Urbit’s address space, which have value in direct proportion to the value of Urbit as a platform. Naturally, Tlon has been focused thus far on making Urbit into a platform that people want to use.
21−
22−Ultimately, Urbit presents more possibilities than any one organization can manage. We anticipated this, and set aside address space for urbit.org, which we’ve often thought of as some type of software foundation. As Urbit matures to the point where Tlon can shift from developing the platform to developing products _on_ the platform, urbit.org is meant to continue to improve and maintain the parts of Urbit that many will come to rely upon.
23−
24−When we last discussed this, in early 2019, we weren’t quite ready to pull the trigger on setting up urbit.org. We weren’t sure if a software foundation would be the right structure, didn’t have the resources to tackle the overhead, and Urbit wasn’t yet stable enough for Tlon to focus on anything _but_ platform development.
25−
26−## The Present
27−
28−Urbit is really starting to look like a platform. Tlon has put tons of work into making Urbit stable and performant, we’ve launched OS1, and hosting services are on the horizon. Meanwhile, the grants program and Hoon School were initiated, and community members have been [contributing](https://github.com/natareo/hooncard/blob/master/hooncard.pdf) [learning](https://github.com/timlucmiptev/gall-guide/blob/master/guide-docs/overview.md) [materials](https://github.com/lukechampine/rote/blob/master/urbit/app/rote.hoon), [issuing](https://github.com/urbit/urbit/pull/2885) [patches](https://github.com/urbit/urbit/pull/3202) [to](https://github.com/urbit/urbit/pull/3238) [Urbit](https://github.com/urbit/urbit/pull/2867), and [building](https://github.com/ryjm/srrs) [new](https://github.com/dclelland/UrsusChat) [applications](https://github.com/yosoyubik/canvas) [in](https://github.com/yosoyubik/urbitcoin) [userspace](https://github.com/taalhavras/ucal).
29−
30−With a stable platform taking shape and a strong community forming that wants to help build Urbit, it’s time to make urbit.org real. We’ve had plenty of time to think about what it should look like, how it should work, and who should lead it.
31−
32−Our plan is to run urbit.org as a protocol—we’ll treat it like a real entity, but instead of dealing with the administrative details of setting up such an organization, we’ll incubate it within Tlon and give it a mandate: To competently distribute address space as a means of improving Urbit.
33−
34−## Moving Forward
35−
36−On that note, allow me to introduce myself: I’m Josh[^1], the new Interim Director of urbit.org. I’ve been a follower of this project for several years now and more recently a fairly active community member. I first became fascinated by Urbit as a programmer that saw the potential in a clean-slate OS; I later became compelled by a future in which social computing becomes small, friendly, and human-scale again.
37−
38−My background is predominantly in building software, companies, and teams—most notably [Starcity](https://starcity.com), where I am a co-founder and CTO. Starcity[^2], like Tlon, is focused on enabling communities to flourish. While the approaches couldn’t be more different, the goal of bringing people together in fundamentally human ways is shared.
39−
40−My goal is to leverage urbit.org to ensure Urbit’s success. I want to see a world in which Urbit is used by my friends, family, colleagues, everyone I know. To get there, much is left to build.
41−
42−To that end, the first objective of urbit.org is to recruit builders and give them the tools to succeed. I’ll be focusing heavily on providing technical support to developers that engage with us via Grants, outreach to the wider developer community, supporting the efforts of those that are creating educational courses and documentation, and enlarging the contribution surface by exposing it to other programming languages[^3].
43−
44−The product work that Tlon is doing is crucial to Urbit’s long-term success, so I’ll also be leveraging bounties to more directly accelerate their development efforts. Landscape represents the clearest example of a cohesive vision for Urbit’s use. The existence of a polished product built on Urbit demonstrates to the world that the platform is robust and capable, and the growing community seems eager to help. You can expect more bounties very soon that provide a direct connection to the Landscape roadmap.
45−
46−As I’m only just getting started, I’d love to hear your thoughts. If you’re working on any grants you’ll hear from me soon, and if you have an idea that you want to pursue, I’m here to help you make it happen. You can reach me directly via Urbit as `~wolref-podlex` or by email at josh@urbit.org.
47−
48−I look forward to working with you.
49−
50−[^1]: But my friends call me ~wolref-podlex.
51−[^2]: We’re also really into the idea of being the first builder of housing on Mars. Just saying...
52−[^3]: We call this project Airlock. You’ll hear more about it soon.
content/blog/ford-fusion.mddeleted−222
@@ -1,222 +0,0 @@
1−+++
2−title = "Ford Fusion"
3−date = "2020-07-14"
4−description = "Ford Fusion was an overhaul of Urbit's over-the-air upgrade process and a rewrite of its build system. The new update system corrects a few long-standing bugs with the previous one, and the new build system is simpler, smaller (by around 5,000 lines), and easier to manage."
5−
6−[extra]
7−author = "Ted Blackman"
8−ship = "~rovnys-ricfer"
9−image = "https://media.urbit.org/site/posts/essays/ford-fusion.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/ford-fusion.png)
13−
14−## Overview and Rationale
15−
16−Ford Fusion was an overhaul of Urbit's over-the-air upgrade process and a rewrite of its build system. The new update system corrects a few long-standing bugs with the previous one, and the new build system is simpler, smaller (by around 5,000 lines), and easier to manage.
17−
18−Since deployment of Ford Fusion to the livenet in late June, over-the-air updates (OTAs) have been much smoother. Before Ford Fusion, it was common for an OTA to take several hours, use too much memory, and leave ships in inconsistent states. After Ford Fusion, multiple OTAs have been pushed out, including kernelspace changes, and most users didn't even notice.
19−
20−Urbit has always been able to update itself OTA, but this process has often been rocky. Updating an operating system kernel on-the-fly is a difficult problem in general, like performing heart replacement surgery on yourself while running a marathon. Code that allows Linux to update its kernel in this way became a startup called Ksplice, won multiple awards, and sold to Oracle. Even that, as impressive as it is, and as brilliant as its [programmers](https://nelhage.com) are, can only perform certain limited kinds of patches to the kernel.
21−
22−Urbit isn't exactly a traditional operating system, so the comparison is somewhat unfair, but the purpose of better architecture is to create unfair comparisons. In this case, because the Nock layer is frozen, upgrading everything above that layer is easier. Upgrades are also facilitated by pure-functional semantics, transactional event processing, a type system oriented toward concrete data, and orthogonal persistence. These features make it feasible for Urbit to upgrade
23−itself in the general case, not just some special cases.
24−
25−Ford Fusion has fixed the major upgrade issues of the past by guaranteeing three properties that in retrospect are obvious requirements, but, like much of Urbit, took many years and rewrites to identify as such:
26−
27−- Atomic: the update should complete or fail in one transaction. If it
28− fails, the system shouldn't get stuck.
29−- Self-contained: there must be no implicit dependencies or hysteresis
30− (dependence on previous system states) when building the new software
31− from source.
32−- Ordered: updates must be monotonically sequenced from the system's
33− lowest layer to highest.
34−
35−Let’s walk through them one by one.
36−
37−### Atomic
38−
39−In previous versions of Urbit, updates failed atomicity by deferring parts of the update to later events, which are separate transactions that can fail independently. Generally, each deferral causes an exponential increase in the number of failure states that needed to be handled.
40−
41−We've learned that asynchronicity is an entropic state. A system will tend toward more asynchronicity over time unless effort is put into keeping it synchronous. [As Jonathan Blow has noted](https://youtu.be/pW-SOdj4Kkk?t=2547), the language server protocol has turned every editor plugin into a distributed system, since now it has to communicate asynchronously with the main editor process.
42−
43−Consider an update system that took multiple Arvo events to complete. An ad-hoc higher-level transaction system would need to be built to roll back the effects of the first few events in case of failure. It’s important for various parts of the system to be able to emit effects on upgrade; since those effects would need to be rolled back if a later event in this upgrade fails, the system would need to maintain a queue of those events and only apply them once all the other upgrade events have completed.
44−
45−Note that the asynchronicity has now spread. Some effects that would normally be guaranteed to be processed synchronously might now be asynchronous. Entropy has begun to take hold, chipping away at the set of invariants the system is capable of guaranteeing.
46−
47−This observation is not purely theoretical. False modularity was the cause of internal asynchronicity in Clay where it had to wait for responses in a complex dance with Ford, which was another vane (Arvo kernel module); moving Ford into Clay allowed function calls that were synchronous from Clay’s perspective, which allowed further simplifications, culminating in about a twenty percent reduction of source code size of the Arvo kernelspace.
48−
49−[Steve Yegge's "platform
50−rant"](https://gist.github.com/chitchcock/1281611) describes a Bezosian
51−edict prohibiting synchronous communication among modules through direct
52−linking. This can be seen as an acknowledgment of the difficulty Amazon
53−was going to have when it needed to turn internal services external. If
54−your software needs to run in hell, build it that way from the start.
55−
56−An Urbit ship is not an enterprise SaaS product and does not need to run in this hell; it exists for just one person, with natural pressure pushing it in the opposite direction from Amazon’s web services. Instead of needing a ship’s state and functionality sharded into microservices strewn across multiple clusters, an Urbit instance is easiest to manage as a single server with all its state unified into one data structure and its event log stored as one totally ordered sequence of state updates -- the antithesis of a distributed system.
57−
58−### Self-Contained
59−
60−Before Ford Fusion, each commit to the Clay filesystem validated its files using filetypes (called “marks”) defined by files in the previous commit. This could cause bugs if the filetype definitions had changed in a backward-incompatible manner. It also meant a commit could not add both a new filetype and new files of that type; instead, you needed two commits: one to define the filetypes, and a second to add files of that new type. More theoretically, it caused history-dependence. The validated contents of files in a commit could vary based on the history of commits that led to this one.
61−
62−Another way source code failed to be self-contained was that it had access to symmetry-breaking information at build-time, namely ship, desk (Urbit's answer to a git branch), and (faked) date. A build recipe should be able to shared, cached, and rerun without dependence on local conditions, so user code now no longer learns its ship, desk, or date until runtime.
63−
64−Source code also had build-time access to Urbit's immutable global namespace, called the “scry namespace”, which the kernel makes available as an implicit argument to userspace Hoon code. The scry namespace is immutable and referentially transparent, i.e. a request must always yield the same result for all time, but if an agent asks the kernel for a resource that’s from the future, hosted on another ship, or to which that agent doesn’t have permission, the kernel will deny the request.
65−
66−If the kernel denies a scry request that user code made during the build process, the build system has no choice but to treat it as a nondeterministic error. Nondeterministic errors can never be fully eradicated, if for no other reason than that the user always has the option to defenestrate the machine—there's nothing deterministic about that. But we try to minimize them, and especially to minimize uncertainty as to under what conditions they might occur.
67−
68−No build should be killed by the absence of files outside the desk, so as of this update, user code can no longer scry at build time. Once built, userspace programs can scry if run in a context with a scry handler; a Gall agent's runtime scry requests still work just fine.
69−
70−### Ordered
71−
72−The final kind of failure fixed by Ford Fusion was the lack of ordered layering during a software update. The most common form of this failure was that old Ford had a tendency to try to build userspace code using the previous version's standard library. This didn't work too well, unsurprisingly.
73−
74−Emerging from this underworld required making a number of changes to the Arvo kernel, Clay, Gall, and the procedure for kernel updates. To avoid turning into a pillar of salt, I'll skip the details of how the old system worked and instead describe the new update procedure.
75−
76−## How Updates Work Now
77−
78−These are the layers of the stack that update themselves on the fly, from lowest to highest:
79−
80−- hoon: the hoon language definition and compiler, defined in `/sys/hoon/hoon`
81−- arvo: the arvo kernel proper and related type definitions, in `/sys/arvo/hoon`
82−- zuse: the standard library, in `/sys/zuse/hoon`
83−- vanes: arvo kernel modules, including clay itself, in folder `/sys/vane`
84−- userspace: apps, marks, ancillary source code like libraries, and user data
85−
86−An update to one layer necessitates a reload of all layers above it; e.g. a change to Zuse should trigger updates to the vanes and userspace. Conversely, an update to a higher layer should not cause a spurious reload of lower layers, which should not be affected by the change; for example, an update to just userspace should not cause any reloads of system code.
87−
88−Clay is responsible for enforcing the layering of updates. An update to a module is triggered when an attempt is made to commit a change to Clay that affects one or more files needed to build the module. For example, if the 'foo' agent's source, defined in `/app/foo/hoon`, imports the 'bar' library from `/lib/bar/hoon`, then a modification to `/lib/bar/hoon` triggers an update to the 'foo' agent. All vanes and userspace files depend on Zuse, which depends on the Arvo and Hoon sources, so a change to the Hoon, Arvo, or Zuse sources will trigger updates to all vanes and userspace files.
89−
90−When asked to perform a commit, Clay determines which layers need to be updated based on which files have changed and which modules depend on those files. For now, all running programs load their source from the `%home` desk, so only changes to `%home` trigger stateful updates. Files in other desks can be built, but not installed into the system. This might be relaxed in the future.
91−
92−The process of updating varies by layer. The Hoon and Zuse layers are stateless, so their newly rebuilt cores (Nock executables) must be stored (somewhere in the system’s Nock tree, in memory; remember, Urbit is a single-level store), but they have no state that would need to be migrated. The Arvo kernel, vanes, and userspace agents are all live, stateful programs, so in order to update one of those, the system must extract the state from the old program, pass that data into the newly built program, then discard the old program and store the new one. Arvo and agent state injection routines can emit effects, but vane updates cannot.
93−
94−To work around this limitation, Gall has a two-phase update process. First it enters a dormant “pupal” phase that stores not running agent cores, but only the agent states that the old Gall had extracted from its agents. When Clay notifies Gall that its agents have been rebuilt, Gall “molts” back into normal functionality by loading the agent cores from Clay and then running their `+on-load` routines to inject the old state.
95−
96−If there's a change to files in `/sys` on the `%home` desk, Clay asks Arvo to update kernelspace. Clay sends a sequence of moves (effects) to Arvo to ask Arvo to perform any necessary updates to hoon, the kernel, Zuse, and vanes. This sequence is terminated by an extra move back to Clay itself, which will be received by the updated version of Clay after migrating its state. The rebuilt Clay can then use the newly rebuilt version of Zuse to rebuild userspace and notify clients of the update. One client is Gall, which molts when Clay notifies it.
97−
98−Clay triggers updates, but the Arvo kernel is responsible for performing updates to all kernelspace layers, and Gall is responsible for updating userspace agents. Agents are stored in Gall's state, but all other layers are stored directly in the Arvo core's state, so the Arvo kernel contains the routines that reload Hoon, the kernel itself, Zuse, and the vanes.
99−
100−The Arvo kernel reloads itself by receiving its new source code as a `%lyra` move from Clay, compiling this source into a core with empty state, then calling the new core's `+load` routine with the relevant parts of the old state. The state passed to the new Arvo now includes not just the vane cores and their states, but also the Arvo "duct" call `stack`, which maintains a stack of queues of moves to be passed from one vane to another, and a list of effects to emit to Unix at the end of the current Arvo event. If needed, Arvo could migrate the outstanding moves themselves -- if, say, the duct datatype changes.
101−
102−Passing the Arvo call stack state to new Arvo allows a kernel update to happen in the middle of a more complex event without disturbing other sequences of processing steps happening concurrently in the vanes.
103−
104−This entire update process happens in one Arvo event and doesn’t break event-dispatching semantics. This not only provides atomic rollback, but allows the update to be combined with other actions into a larger transaction -- for example, to stage complex changes, user code could trigger two kernel updates in a row, both in the same event.
105−
106−Note that this is the opposite situation from the entropically leaking asynchronicity described earlier. Now the guarantees don’t deteriorate; they can be composed into stronger guarantees.
107−
108−## How Clay Validates a Desk
109−
110−A desk is Urbit's answer to a git branch. It's almost identical, except all files are typed and validated, and whenever a commit becomes the equivalent of git’s ‘HEAD’, it’s assigned a semantically meaningful revision number, and all files are typed and validated.
111−
112−If Clay has been asked to perform a commit, it needs to validate all the files in this desk and notify all subscribers to live queries of this desk's data. Gall, for example, maintains live queries on builds of its live agents. Validation uses the Ford build system, which as of this update is no longer a standalone vane but a core within Clay.
113−
114−A Clay commit, like a git commit, is specified as the current value of all its changed files (and, separately, references its parent commits by hash), not as the diff from a parent commit. Unlike git, Clay is typed, and every file must be validated according to its "mark". A mark is named like a file extension, e.g. `%txt`, `%png`, or `%noun`, and Clay maintains a mapping from that name to behaviors of values of that type under various operations. The last segment of any Clay path specifies the mark to use for operations on that file, including validation.
115−
116−Mark operations include conversion to and from other marks (such as converting `%json` to `%txt`), revision control operations (diff, patch, and merge), and validating an untyped noun. Operations for mark `%foo-bar` are defined by a core built using the source code at `/mar/foo-bar/hoon`, or if that doesn't exist, at `/mar/foo/bar/hoon`.
117−
118−Consider a file at `/web/foo/json`. In order to validate this file, Clay must load the mark definition core and use its validation routine to ensure the untyped value of `/web/foo/json` is in fact valid JSON. To obtain this core, Clay must build the file at `/mar/json/hoon` from source and then process the resulting raw mark core using some mild metaprogramming to get a standard interface core for dealing with marks, called a `$dais`, whose type is defined in Zuse.
119−
120−Since building a source file only makes sense if the file has been validated as a `%hoon` file, but mark definitions themselves must be built from source, there's a logical dependency cycle -- who validates the validators? To break this cycle, Clay hard-codes the validation of `%hoon` files. This allows mark definitions to be built from source, and in fact any file can depend on any other file of any mark as long as there are no cycles. As of Ford Fusion, Ford performs a cycle check to ensure acyclicity.
121−
122−Since building a file is a pure function, Clay memoizes the results of all builds, including builds of marks, mark conversions, and hoon source files. These memoization results are stored along with the desk and are used by later revisions of that desk. Future work should allow merge commits to pull memoized builds from all parents, but for now only the previous revision of the current desk is used. This is a major simplification of previous Ford architectures, which maintained much more complex caches with less clear eviction semantics. Now on every commit, we just throw away any unused memoized builds from the previous revision's Ford cache.
123−
124−Once Clay has validated every file in this new revision of a desk, it constructs and sends updates to any subscriptions that other vanes or agents have requested. More Ford builds may be run to fulfill these requests, including builds for any running agents whose dependencies changed in this commit.
125−
126−When Gall receives a newly rebuilt agent from Clay, it calls the gate produced by the `+on-load` arm of the new agent with the state extracted from the old agent. If there is a crash in any `+on-load` calls or in the handling of any effects they emit (which can include more agent activations), then the whole event crashes, canceling the commit. This effectively gives any agent the ability to abort a commit by crashing.
127−
128−It is a bit counterintuitive that an app reload failure could prevent a kernel update. The reason is that we don't want the system to update itself into a broken state. An Urbit can be rendered practically unusable by the presence of broken agents, even if the kernel hasn't lost integrity,
129−so it's kinder to the user not to break their agents by installing an incompatible kernel update. This also puts virtuous pressure on kernel developers not to "break userspace", the importance of which has been insisted on for decades by Linus Torvalds, among others.
130−
131−If an agent does crash a commit event that included a kernel update, the attempted commit is now trivially rolled back, and the system can deliver an error message to the user. This does not leave the system in an inconsistent or stuck state, so the user could modify the failing agent and try the kernel update again later. Supporting better workflows for keeping third-party agents up-to-date will be an important aspect of Urbit’s upcoming software distribution work.
132−
133−## Ford Build Semantics
134−
135−### The Three Types of Ford Builds: Files, Marks, and Casts
136−
137−The Ford build semantics have been simplified. There are now three kinds of builds that Ford can perform: files, marks, and casts, all of which happen synchronously as function calls inside Clay and are available (without memoization) as scry interfaces.
138−
139−#### File Builds
140−
141−A file build takes in a filepath containing Ford runes and Hoon source, runs the Ford runes to perform imports, and then compiles the source, producing a `$vase`, a noun tagged with its Hoon type.
142−
143−Clay exposes file builds into the scry namespace with `%ca`: as an example, `.^(vase %ca /~zod/home/3/lib/sole/hoon)` will build the `sole` library.
144−
145−#### Mark Builds
146−
147−A mark build produces a `$dais` mark-interface core. It first performs a file build on the Hoon file in `/mar` that defines the mark core, then it does some metaprogramming to make the operations more convenient to use. If the raw mark core delegated revision control operations to another mark core, the mark build will also load the delegate mark core and resolve the result into the `$dais`.
148−
149−Clay exposes mark builds into the scry namespace with `%cb`: as an example, `.^(dais:clay %cb /~zod/home/3/mar/foo/hoon)` builds a `$dais` for the `%foo` mark.
150−
151−#### Cast Builds
152−
153−A cast build produces a `$tube`: a gate that takes a value of one mark as input and converts it to a valid value of another mark or crashes. To convert from mark `%foo` to mark `%bar`, Clay tries the following operations, in order:
154−
155−- direct grow from `%foo`
156−- direct grab from `%bar`
157−- indirect jump from `%foo` through `%qux`
158−- indirect grab from `%bar` through `%qux`
159−
160−The `%foo` mark can “grow to” `%bar` by providing an arm in its `+grow` core named `+bar`. `%bar` can convert from `%foo` using a `+foo` arm in its `+grab` core. `%foo` can also chain a conversion through an intermediary using an arm in its `+jump` core, and `%bar` can specify an “indirect grab” by having a `+grab` arm produce a delegate mark instead of directly defining a conversion gate.
161−
162−Clay exposes cast builds into the scry namespace with `%cc`: as an example, `.^(tube:clay %cc /~zod/home/3/foo/bar)` builds a `$tube` conversion gate from `%foo` to `%bar`.
163−
164−### Ford Runes
165−
166−There are now only four Ford runes. A file can contain zero, one, or many of each, but each Ford expression can only be one line, and they must be in the standard order of `/-`s, `/+`s, `/=`s, and then `/*`s.
167−
168−```
169−/- foo, *bar, baz=qux
170−```
171−
172−The `/-` rune imports a structures file from `/sur`. You can import it as just `foo`, in which case the build result of that file (usually a core with mold definitions) will be pinned into the compilation subject with the face `foo`. If you prefix it with a `*` as in `*bar`, the result will be pinned into the subject with no face; if the structures file compiled to a core, this exposes all the arms into the namespace of the compilation subject. Finally, if you import it as `baz=qux`, the `baz` face will be applied instead of `qux`. This is similar to "import as" in other languages.
173−
174−```
175−/+ foo, *bar, baz=qux
176−```
177−
178−The `/+` rune imports a library file from `/lib`. Aside from the different source folder, the syntax and semantics are the same as for `/-`.
179−
180−```
181−/= clay-raw /sys/vane/clay
182−```
183−
184−The `/=` rune imports the result of building a hoon file from a user-specified path (the second argument), wrapping it in a face specified by the first argument. The final `/hoon` at the end of the path must be omitted. This is mostly useful for importing a file for testing. The file at the specified path will be built as a normal userspace hoon file; i.e. its compilation subject will be Zuse augmented with the results of any Ford runes it has at the top of the file.
185−
186−```
187−/* hello-gen %hoon /gen/hello/hoon
188−```
189−
190−The `/*` rune imports the contents of a file in the desk, specified as the third argument with the full path including the trailing mark, converted to the mark specified by the second argument, and pinned into the compilation subject wrapped in the face specified by the first argument. This can be used to import static data at build-time, such as a data file, a media file, or, in the case of this example, a hoon file as source text rather than already built.
191−
192−A valid userspace hoon file must contain a nonempty list of hoons (hoon source expressions) below the Ford runes, separated by gap (more than one space, or at least one newline). The system wraps this list of hoons in a `=~` expression so that the result of the previous hoon is used as the subject of the next hoon. The result of the Ford runes is used as the compilation subject for this `=~` hoon; informally, the shape of the compilation subject can be thought of as:
193−
194−```
195−:* fastar-2 fastar-1
196− fastis-2 fastis-1
197− faslus-2 faslus-1
198− fashep-2 fashep-1
199− <zuse>
200−==
201−```
202−
203−## Future Work
204−
205−Urbit still needs to make better use of desks other than `%home` and the development process should be adjusted given the tighter coupling between source code and kernel and tighter criteria for accepting an update.
206−
207−This work also hopefully provides a good foundation of a package management and software distribution system for Urbit. As `~wicdev-wisryt` has said, a user should be able to run `|install ~norsyr-torryn/canvas` to load and build remote source. No one should experience dependency hell on Urbit, but we're not there yet.
208−
209−At least now, building a desk has no dependencies, other than a Ford with a compatible Hoon compiler. No decisions have been made on this yet, but
210−Ford might get moved to inside the desk, possibly by making Zuse callable. This could allow a desk to expose a Nock interface in addition to a typed Hoon interface, which could even let a desk be used as a "pill" bootloader.
211−
212−## Conclusion
213−
214−`~littel-ponnys` and I spent most of 2018 rewriting Ford with the intent of improving its performance. Compared to its predecessor, its result was better in some ways but worse in others. The caching system was labyrinthine and poorly factored, making the system difficult to debug or prove correct, even informally. Some things were faster, but the caching and dependency tracking were actually complex enough that a number of common operations, like mark conversion, were too slow.
215−
216−In early 2020, `~master-morzod` suggested moving Ford into Clay to reduce asynchronicity. It seemed absurd at first, but at some point I realized I could combine that idea with a simpler build-caching scheme and self-contained desk builds, and `~wicdev-wisryt` realized he could use that to further simplify Clay’s commit and merge code, which he did as part of this project.
217−
218−The first time I rewrote Ford, it took me six months, with help from `~littel-ponnys`, and it weighed in at 6,000 lines of code. The second time, in late 2018, took a few weeks. The third time, in January 2020, took a week. I wrote `+ford` in Ford Fusion in one long day, and it’s about 500 lines of synchronous, functional code.
219−
220−It has taken me two or three years to understand this problem as well as I do, and I expect there are parts of it I still don’t understand. The code itself isn’t the issue; it’s finding the right answer to ontological and teleological questions. What _is_ Ford? What will it be in a hundred years? I’m confident Ford Fusion is more similar than its predecessor to the Ford of 2120, because it’s smaller, more functional, and easier to understand and administer.
221−
222−As an engineering discipline and organizational practice, working on a system intended to be frozen yields surprising simplifications like this every so often. Urbit is now reaching the point where we’re starting to see more of the obsidian edges of the frozen future system emerge from the lava.
content/blog/foss-1.mddeleted−64
@@ -1,64 +0,0 @@
1−+++
2−title = "Urbit's Open Source Culture, Part I"
3−date = "2023-05-31"
4−description = "How did Urbit cultivate a unique open source software culture? Let's take a look at how we got to where we are today."
5−
6−[extra]
7−author = "N E Davis"
8−ship = "~lagrev-nocfep"
9−image = "https://upload.wikimedia.org/wikipedia/commons/a/a9/SR71_factoryfloor_SkunkWorks.jpg"
10−+++
11−
12−![](https://upload.wikimedia.org/wikipedia/commons/a/a9/SR71_factoryfloor_SkunkWorks.jpg)
13−
14−> “Open source is an intellectual property destroyer. I can't imagine something that could be worse than this for the software business and the intellectual-property business.” (Jim Allchin, Microsoft executive)
15−
16−A founder's personal enquiry into the foundations of practical computing grew into a skunkworks startup to build an alternative basis for principled computing, and has now evolved into a burgeoning open source platform and community.
17−
18−- [Moron Lab, “Maxwell's equations of software (Nock)” (~2010.1.9)](https://moronlab.blogspot.com/2010/01/nock-maxwells-equations-of-software.html)
19−- [Moron Lab, “Urbit: functional programming from scratch” (~2010.1.13)](https://moronlab.blogspot.com/2010/01/urbit-functional-programming-from.html)
20−
21−How did Urbit cultivate a unique open source software culture? Let's take a look at how we got to where we are today.
22−
23−Open source culture really got going in the 1980s with the restrictive Unix licensing scheme and the consequent publication of the GNU software tools. With the marriage of GNU to Linux ([“I'd like to interject for a moment”](https://copypastatext.com/id-just-like-to-interject-for-a-moment/)), a full stack, from the bare metal to the end user, was possible. Usenet and early Internet forums furthermore encouraged interested developers to start contributing actively.
24−
25−The ethos of open source software drew on a number of sources, from William Gibson's _Neuromancer_ trilogy to “A Cypherpunk's Manifesto.” Those involved were often motivated by a healthy distrust of proprietary software. The big break for open source software (OSS) came with the [Unix ownership lawsuits](https://en.wikipedia.org/wiki/Unix_wars), which gave GNU/Linux a chance to break into the bigtime for systems software. The [2001 case against Microsoft](https://en.wikipedia.org/wiki/United_States_v._Microsoft_Corp.) as a monopoly lent further credence to the open source mandate.
26−
27−During this time, Urbit began life as a personal dissertation, in a sense, to derive a minimalist practical set of computing expressions as a combinator calculus. The early concepts that became part of Urbit, such as kelvin versioning and Maxwellian code, show up during its first decade. Nock was not open source for two reasons: the founder's conviction that as software it was already public domain, and the fact that there was no one yet to collaborate with.
28−
29−It was about a decade before Tlon was started as a small bespoke programming house to work on the esoteric project of defining something usable on top of the minimalist Nock specification. No one knew about Urbit besides some blog readers, and unless you worked in or next to Tlon you had basically zero chance of following the project via software alone.
30−
31−Early Tlon did a fairly good job of putting their software out there, but the documentation and nomenclature were considered obscurantist and the project was described as performance art or a deliberate wild goose chase. These combined to make Urbit appear fairly opaque, despite open development using GitHub and the liberal MIT license. System components like Nock and Arvo were declared public domain or liberally licensed.
32−
33−To this point (let's say 2019), Urbit was by license and by code an open source project, but had a reputation for being basically impossible for an outsider, even one with a fair amount of coding experience, to really figure out what's going on without serious handholding from the core devs. (Nor is this inappropriate for a small startup at this stage—it simply is the way most nominally OSS projects function.) However, the mystery engaged others beyond Tlon to brave the wilds and figure out what this Urbit project was all about.
34−
35−Urbit’s goal has always been to produce a stable kernel for all time, referred to by a metaphor of losing heat energy and entropy. As Urbit gradually cooled from red hot slag to what we'll call a developer alpha, Tlon began a project of greater outreach to the developer community. In particular, crypto software developers saw attractive aspects in Nock's concision and apparent provability and in Urbit's functional-as-in-math approach to operating system and application state. Tlon started a Discord for onboarding and troubleshooting, including community concierges who were tasked with engaging anyone with ship troubles. This tapped into and fostered a culture of Urbiters aggressively helping others debug and troubleshoot their ships, which continues to this day. Tlon also began Hoon 101 to teach outsiders how to actually build things on Urbit.
36−
37−As Urbit slowly grew into a larger developer community, some hard strategic questions about project scope and direction came into focus. There had always been a provision for Urbit to have some sort of foundation with stewardship over the project—either the Urbit Educational Foundation or something similar. Like the Linux Foundation, this organization would serve to coordinate activity between various companies and individuals contributing to the Urbit project. The foundation would receive an endowment of galaxies earmarked to fund Urbit's development.
38−
39−Urbit's use of address space to fund development means that the builders, even those who have discovered Urbit relatively recently, are able to acquire a significant stake in the project and its success.
40−
41−In practical terms, Tlon started the Urbit Foundation internally first as `urbit.org`, then rolled it out as a standalone company with a mandate to first build itself into a viable cultivator of Urbit, then to take over Urbit core development. By early 2023, the Urbit Foundation was in a position to take over core development for the platform.
42−
43−There have been several aspects of this journey that have led Urbit to have a thriving and promising open source software culture:
44−
45−1. Urbit's nature as a functional operating system has a deep appeal to software developers and others who find appeal in a mathematically elegant system, including the guarantees made by innovations such as the scry namespace bindings and the public key infrastructure.
46−2. Hoon is a mood. What I mean by that is that Hoon's unique aesthetics, subject-oriented paradigm, and the utility of cores give coders a unique experience, like systems programming in APL would feel like.
47−3. The developer docs are finally prioritized and made publicly legible. Large swaths of the operating system and standard library are finally documented.
48−4. Third-party software distribution is made trivial. Decentralized peer-to-peer open source software distribution without having to go through a GitHub intermediary changes the game.
49−5. Urbit's educational program expands from Tlon's initial offerings to a community program (Hooniverse/Hooniversity), then to a dedicated program with specific course milestones under the auspices of the Urbit Foundation.
50−6. Urbiters start meeting in person at Assembly and other events. After the 2020 efflorescence of the Urbit community, this is the first time most of the newer people were able to meet in real life. (This is a substantially different situation than the pre-2019 Urbit environment—most people didn't know Tlonners first, they knew Urbit first and mainly online.)
51−7. Three major active groups form dedicated to all-purpose coding on Urbit:
52− A. Hooniverse, ~hiddev-dannut/new-hooniverse, originally strictly for the community Hoon School but now for all of the UF's educational efforts.
53− B. The Forge, ~middev/the-forge, for advanced technical discussion.
54− C. `[battery payload]`, ~dister-dozzod-lapdeg/battery-payload, the UF's developer community group.
55−8. The Urbit Foundation begins an active grants program. At first focusing on userspace and cultural grants, this eventually leans back into kernel work.
56−9. As the Urbit Foundation takes over core development, this necessitates changing that process from being a one-company project to requiring coordination, said coordination being much easier in the open than in closed meetings. (This also enables Tlon to focus on product delivery over core development.)
57−10. The Urbit Foundation begins using a `gather.town` “Urbit Hacker House,” which puts people together for synchronous interrupts. Any community member can wander in and be a fly on the wall or an active interlocutor.
58− A. This enables the UF to start hosting daily pull request triage and a rapid assignment of tasks in the open.
59− B. Communications strategy meetings are also public.
60− C. Build parties (originally conceived as app-in-a-day) demonstrate pair programming, achieve inter-programmer communication of information akin to IRL programming, and allow anyone to participate.
61−
62−We find ourselves, as Urbit developers, having grown together a strong and unique culture of open source software development verging on radical transparency. It's not just code and license being open—it's the entire ensemble of programmer culture and on-platform dogfooding (to the extent possible). The greybeards and the noobs encounter each other directly and openly all the time, in `gather.town` and in Urbit groups.
63−
64−From modest beginnings, Urbit has achieved some small traction in the world and grown an exemplary open source culture. What will it take for Urbit to succeed in the future? That's the next entry.
content/blog/foss-2.mddeleted−59
@@ -1,59 +0,0 @@
1−+++
2−title = "Urbit's Open Source Culture, Part II"
3−date = "2023-06-13"
4−description = "How will Urbit continue to foster its innovative open source software culture?"
5−
6−[extra]
7−author = "N E Davis"
8−ship = "~lagrev-nocfep"
9−image = "https://spacecenter.org/wp-content/uploads/2023/02/img-apollo-mission-control-3.jpg"
10−+++
11−
12−![](https://spacecenter.org/wp-content/uploads/2023/02/img-apollo-mission-control-3.jpg)
13−
14−> God watches over fools, drunks, and the United States of America. (Otto von Bismarck, apocryphal)
15−
16−In our last installment, we considered how Urbit has grown its own robust open source culture. Now we look to the future: what will it take for Urbit to succeed, not only as an exemplary open source project but as a computing platform that delivers on its promise?
17−
18−Part of what makes an open source culture vibe is remix culture, the ability to rework the source material to produce novel components or manifestations. Urbit has the raw materials for this in spades, memetically and technically. It is up to us to keep these tools in our developers’ and enthusiasts’ hands.
19−
20−The default answer, which isn't terrible, is that Urbit should keep doing what it's done to get this far:
21−
22−1. Urbit should continue to prioritize decentralized development.
23−2. Urbit should lean into ownership-based incentives. Indeed, this is the most effective lever that the Urbit Foundation has.
24−3. Urbit should maintain the developer's republic. Core developers should rub shoulders with first-time Hooners.
25−4. Urbit should continue to ship source with code, since that is how code is actually distributed. The means of open source software are _necessarily in the user's hands_ with Martian software.
26−
27−There are some areas in which we hope to improve. Our documentation continues to expand, as do our educational offerings. We have a mandate to use the Urbit Foundation’s endowment of stars to produce the mature Urbit.
28−
29−What else should we have an eye to in the near future? There’s always more to do, but by prioritizing the items on this short list we would continue to elaborate our open source bona fides as a community and a steering foundation.
30−
31−1. **Code accessibility should be a priority.** Any computer language falls on the spectrum between machine legibility (the pole of machine code and assembly language) and human legibility (the pole of [Scratch](https://scratch.mit.edu/). All code must walk this line.
32−
33− Hoon has had a reputation for being a language of dense expressions, which we believe is now being cleared by sunshine. However, Hoon's extensive sugar syntax and irregular expressiveness can make it challenging for those relatively new to Hoon to decipher programs. We can support their learning and entry into the ecosystem by defining a subset of Hoon syntax that we adhere to in all of the docs and some of the userspace code. Even if there is a "better" way to write it, we should prefer this restricted discipline in those cases. Let's call this subset "Hoon Prime." Hoon Prime will not always be the most concise Hoon code, and it will likely fail to maintain certain well-established preferences, like heavier expressions going to the bottom, but it should encourage developers to produce generators and agents from `%base`-distributed models as quickly as possible.
34−
35− Hoon Prime should also adopt a standard of literate programming. Several example files already display such a self-documenting nature:
36−
37− - [`simple.hoon` for solid-state subscriptions](https://github.com/wicrum-wicrun/sss/blob/master/urbit/app/simple.hoon)
38− - [`deco.hoon` for doccords](https://github.com/urbit/urbit/blob/develop/pkg/arvo/lib/deco.hoon)
39− - [`pals.hoon`](https://github.com/Fang-/suite/blob/master/app/pals.hoon)
40− - [`rudder.hoon` for serving websites](https://github.com/Fang-/suite/blob/master/lib/rudder.hoon)
41−
42− Our userspace code accessibility model should allow contributors from widely different skill levels to interact. We need to surface and document code patterns as cleanly as possible in the code we distribute. We need to include comments and unit tests so people can see how and why code works like it does.
43−
44− Code accessibility cannot be an afterthought. We need to upgrade as much code as possible to A standards [per the style guide](https://developers.urbit.org/reference/hoon/style#grading).
45−
46−2. We need to improve the developer experience. Part of this involves better coding support, and part of this involves better debugging support.
47−
48− To promote better coding, we should continue to develop IDE integrations like the Hoon Language Server. We've had some significant wins here, but rust never sleeps. We should also continue to produce userspace and middleware support libraries. We need to pay attention to how developer preferences are manifesting in their workflows and tooling.
49−
50− Better error messaging and debugging support, perhaps even a framework for line-by-line code execution, would be invaluable. Upgrading Dojo and generator support is an easy win. Any tool friction is a sin and we need to track this and think about how to improve use.
51−
52−3. We need our open source culture to continue to develop in the sunlight. We need to highlight and communicate user stories for developer tools, new and old. We need to share these from inside of companies in the ecosystem. I'm not going to call for “best practices”—it's too early and that's too corporate—but tacit knowledge and horizontal skill transfer need to be encouraged through active pair programming and utilization of build parties and the like.
53−
54− We need to expose how bugs occur, propagate, and are corrected. The core development team has committed to public [postmortems](https://github.com/urbit/urbit/issues/6583) when things go wrong.
55−
56−4. Ultimately, Urbit has to stay playful. Urbit makes programming, even systems programming, a lot of fun. Fun is open-ended and surprising. It allows for whimsy in code and product.
57−
58−Our developer onboarding and open source culture should be a model for the entire open source world. This is neither impossible nor impractical—we've made huge strides in legibility, and we're sailing with the wind.
59−
content/blog/gifts-q3-2020.mddeleted−72
@@ -1,72 +0,0 @@
1−+++
2−title = "Gifts Q3 2020"
3−date = "2020-09-22"
4−description = "Twice 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."
5−
6−[taxonomies]
7−grant_type = [ "Gift" ]
8−grant_category = [ ]
9−
10−[extra]
11−author = "Josh Lehman"
12−ship = "~wolref-podlex"
13−image = "https://media.urbit.org/site/posts/essays/gifts.png"
14−+++
15−
16−![](https://media.urbit.org/site/posts/essays/gifts.png)
17−
18−Twice 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.
19−
20−I'm happy to announce that urbit.org has a record number of gifts to distribute to community contributors for the period from February to August of 2020. Because the gifting of address space is an old tradition, and the last several months have seen an unprecedented amount of user growth, let’s talk about why we do this.
21−
22−## Why gifts?
23−
24−One way to think about Urbit is as _infrastructure for powering digital communities._ We’ve talked about this before in [some detail](https://urbit.org/blog/urbit-is-for-communities/), so while I won’t rehash the “why” of that here, I’ll reiterate that what we really want is a digital world that's generated by the communities that inhabit it.
25−
26−We know that digital communities need better technology with which to generate their world; just as importantly though, they need _people_ to inhabit and develop them.
27−
28−Tlon and urbit.org can’t bring the world into Urbit alone—we need community members to help us. By distributing address space to a variety of people that can invite their friends and families, the network can grow faster, more organically, and with a wider range of diversity.
29−
30−Currently, the majority of available address space is owned by Tlon and urbit.org, but it won’t stay that way. Instead, we want to give address space to folks that want Urbit to succeed. Because we’re custodians of something valuable it’s important that we are intentional about how we handle it. We treat that responsibility seriously.
31−
32−Gifts are one of the ways we invest in the future of the network. We look for others that see Urbit’s value and engage in building the digital home that they want to live in. They ease the learning curve for people new to Urbit, contribute to the technology, and create thriving communities.
33−
34−## Recipients
35−
36−Gifts are being awarded for a variety of reasons this quarter. As usual, there have been plenty of code and documentation contributions, but this time around we’re also recognizing those who have evangelized Urbit, been active in guiding newcomers to the system, and developed thriving communities within Landscape.
37−
38−Gifts are being awarded using the following criteria:
39−
40−**Bronze**: one star for continuous contributions over the last six months in at least one of the above areas.
41−
42−**Silver**: two stars for creation of something exceptional and/or contributing across many categories.
43−
44−**Gold**: three stars awarded to one contributor who has contributed at a volume that indicates a high degree of care and ownership.
45−
46−Without further ado, here are the recipients:
47−
48−### Gold
49−
50−[`~radbur-sivmus`](https://github.com/tylershuster) has more or less become an unofficial member of the interface team by tackling an absolutely [immense](https://github.com/urbit/urbit/pulls?q=is%3Apr+author%3Atylershuster+) amount of Landscape-related work.
51−
52−### Silver
53−
54−- [`~littel-wolfur`](https://github.com/ryjm): Jake maintains the premier development group in Urbit, The Forge, and has led the way for other developers by authoring [srrs](https://github.com/ryjm/srrs), one of the more popular community-developed applications on Urbit.
55−- [`~botter-nidnul`](https://github.com/botter-nidnul): `~botter` has been instrumental in furthering [Urbit on ARM](https://botter-nidnul.github.io/), has made contributions across Vere and our documentation, and been highly active in onboarding newcomers on our Discord server.
56−- [`~timluc-miptev`](https://github.com/timlucmiptev): `~timluc` is highly engaged in many groups and the maintainer of some, wrote the [Nock for Everyday Coders](https://blog.timlucmiptev.space/part1.html) guide, and has gone far above and beyond in teaching the community about developing Landscape applications.
57−- [`~lanrus-rinfep`](https://github.com/dclelland): Daniel has done extensive development on iOS by writing Swift libraries for interacting with Urbit, and employed all of these towards the development of an [iOS client for chat](https://github.com/dclelland/UrsusChat).
58−- [`~minder-folden`](https://twitter.com/the_pritchard): Jonathan is a prolific member of the community. His group _The Sanctorium_ is always active, he's always around to help newcomers to the system, is an active evangelist on Twitter, and a creator of much excellent content.
59−
60−### Bronze
61−
62−- [`~watter-parter`](https://github.com/lukechampine): Luke has made a number of [contributions](https://github.com/urbit/urbit/pulls?q=is%3Apr+is%3Aclosed+author%3Alukechampine) to Arvo, and wrote a great [introductory guide](https://github.com/lukechampine/rote) to developing Gall agents.
63−- [`~naltyc-wornes`](https://github.com/JohnELester): `~naltyc` runs the popular group “Smol Computers” both inside and outside of Urbit where discussions ensue about various forms of computing on small devices like Android and ARM, and actively evangelizes the project.
64−- [`~nartes-fasrum`](https://twitter.com/nartesfasrum): `~nartes` evangelizes Urbit on Twitter by creating artwork, and maintains the popular food-centric group “Urbytes.”
65−- [`~fonnyx-nopmer`](https://twitter.com/fonnyx_nopmer): `~fonnyx` maintains an active presence throughout many groups on Urbit and runs the first Urbit-centric podcast, [Hooked on fonnyx](https://www.twitch.tv/fonnyx).
66−- `~libhut-samwes`: `~libhut` started and maintains one of the most popular groups on Urbit centered on crypto and investing, and contributes to conversations throughout Urbit.
67−- `~salmus-master`: In addition to embodying the quality of high-level, respectful debate we like to see, `~salmus` created the group: “The Tribal Network,” where he maintains one of the most active long-form notebooks on Urbit.
68−- [`~fostyr-solfyr`](https://github.com/cmarcelo): `~fostyr` has submitted a number of PRs against Arvo, including a much-requested feature to reset the web login code.
69−- [`~sarpen-laplux`](https://github.com/xiphiness): `~sarpen` has done a significant amount of research and work on Ethereum ABI parsing and other Ethereum-related topics in addition to being an active participant in dialogues throughout Urbit.
70−- `~mister-todteg`: `~mister` is a top evangelist of Urbit on Twitter, has brought many newcomers onto the network, and has even made several hires for his company from within the network.
71−
72−Thank you to all who contributed to making Urbit what it is today!
content/blog/hackathon-results.mddeleted−59
@@ -1,59 +0,0 @@
1−+++
2−title = "Hackathon Results"
3−date = "2020-06-11"
4−description = "We recently held an invite-only Urbit Hackathon for graduates of our Hoon School program, and the submissions really impressed us across the board. Submissions were judged on several criteria: creativity, usefulness, and code quality."
5−
6−[extra]
7−author = "Robert Mariani"
8−ship = "~lodleb-ritrul"
9−image = "https://media.urbit.org/site/posts/essays/hackathon-results-wide.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/hackathon-results.png)
13−
14−Results of the Urbit Hackathon
15−
16−We recently held an invite-only Urbit Hackathon for graduates of our Hoon School program, and the submissions really impressed us across the board. Submissions were judged on several criteria: creativity, usefulness, and code quality.
17−
18−Congratulations to all the participants, especially the winners—their projects are seriously impressive.
19−
20−### First Place: Eight Stars
21−
22−Jose’s `~norsyr-torryn` Canvas is a peer-to-peer, collaborative drawing app that comes in the form of a Landscape tile. It’s kind of like a multiplayer MS Paint, but better.
23−
24−Canvas uses Urbit in a way that we think it’s supposed to be used: the stuff that doesn’t require peer-to-peer or storage heavy lifting, such as the actual “drawing” component of the app, is done outside of Urbit.
25−
26−In addition to a freehand template for the classic Paint experience, you can choose from a number of templates to work with, such as a grid of fillable hexagons, or maps of parts of the world and of continents with fillable country divisions. Have you ever wanted to compare which countries you visited, color-coded for how much you liked them? Canvas has a built-in feature for sharing your work on chats in Landscape.
27−
28−Check out a video [demonstration](https://www.youtube.com/watch?v=S6DySv730Hw) of Canvas, and view [the code](https://github.com/yosoyubik/canvas).
29−
30−Jose wins eight stars, and he also wins [le internet for the day](https://news.ycombinator.com/item?id=23228058). Bravo!
31−
32−### Second Place: Four Stars Each
33−
34−Luke Champine’s (`~watter-parter`) flashcard app for Landscape, Rote, has been awarded one of two second-place prizes.
35−
36−Rote users write decks in udon, review them, and share them with other ships. His immaculate backend code-style and documentation secured his high placement in the Hackathon—his Hoon code also functions as a full-blown walkthrough. If you’re a Gall novice and you’re looking to learn, take a look at his [code](https://github.com/lukechampine/rote). Luke also kept a Notebook documenting his experience at `~watter-parter/hackathon`.
37−
38−Luke also included example decks for flashcards on Hoon runes and their irregular forms. So, all said and done, everything about Rote is an excellent resource to the eager Hoon neophyte.
39−
40−Pyry Kovanen (`~dinleb-rambep`) was also awarded second prize for his reading-list-sharing app, Books. Also a Landscape tile, and it’s pretty darn useful, with the ability to import books from Goodreads. Check out [the code](https://github.com/pkova/urbit/tree/books/pkg/interface/books) and the [video demo](https://youtu.be/Spy7FoPdfx8).
41−
42−### Third Place: Two Stars Each
43−
44−N E Davis (`~lagrev-nocfep`) brought the heavy infrastructural artillery with Roessler, and won third prize. Roessler is actually three related Hoon tools:
45−`roessler` proper, a library for solving the differential equations producing the [Roessler attractor](https://en.wikipedia.org/wiki/R%C3%B6ssler_attractor).
46−`lazytrig`, a library for transcendental functions.
47−`proj-3d`, a generator that takes the 3D coordinates produced by `Roessler`.
48−
49−The Roessler project is full of cool, novel features. You might enjoy taking a look at the [GitHub repo](https://github.com/sigilante/roessler) ...if your brain is big enough.
50−
51−John Franklin (`~dirwex-dosrev`) also secured third place for his Notes application. True to its name, it’s a Landscape tile that allows the user to create and search notes by keyword. Look at the [code](https://github.com/jfranklin9000/notes/) and the [demo video](https://www.youtube.com/watch?v=7DurNjCFOmA).
52−
53−Jon (`~ribnes-fonbex`) was awarded third prize for his Quadratic Voting project. It implements for Urbit ships a [quadratic voting system](https://en.wikipedia.org/wiki/Quadratic_voting), which is sort of like ranked-choice voting but allows people to express their stronger preferences.
54−
55−Congratulations to the winners and to everyone who submitted—nice work!
56−
57−### The Future
58−
59−We were thoroughly impressed with all of the projects from this inaugural Hackathon. Not only did this Hackathon demonstrate the talent and dedication of our community members, it’s an encouraging sign about the maturity of the Urbit system. We’re going to hold more Hackathons in the future, with one big change: they will be open to anyone who applies.
content/blog/haleek-maul-interview.mddeleted−71
@@ -1,71 +0,0 @@
1−+++
2−title = "NFTs, Urbit IDs, and Communities w/ Haleek Maul"
3−date = "2021-09-09"
4−description = "An interview with the founder of Holdersland"
5−[extra]
6−author = "Matt"
7−ship = "~tirwyd-sarmes"
8−image = "https://media.urbit.org/site/posts/essays/haleek_sigil.jpg"
9−+++
10−
11−![](https://media.urbit.org/site/posts/essays/haleek_sigil.jpg)
12−
13−*Check out the Holdersland x Urbit collection: [holders.land/urbit](https://holders.land/urbit)*
14−
15−We sat down recently with Haleek Maul to discuss the current state of NFTs and the future of Urbit IDs and digital communities.
16−
17−Are Urbit IDs NFTs? Sure, they're ERC-721 non-fungible tokens which you can buy on OpenSea—but to be clear, we made them way back before the word "NFT" had entered mainstream consciousness. An Urbit ID is a number that is used to generate both a phonetic name and an avatar (what we call [sigils](https://urbit.org/blog/creating-sigils)), but it is so much more than your average NFT—it is a key to an entire digital world.
18−
19−We built Urbit IDs for digital communities and the people they’re made of. An Urbit ID is a decentralized and pseudonymous identity perfect for your collective, commune, squad, team, or DAO. Unlike most addresses or social identities, you own your Urbit ID like you own your crypto. Your Discord handle might be free for now, but as the saying goes, if it’s free then you’re the product. On Urbit your ID is actually yours and you pay for it up front. You can log into third party apps or software without ever relinquishing control of your data. What is yours stays with you. IDs themselves can be owned collectively—there are already DAOs on Urbit who jointly own stars and galaxies.
20−
21−Urbit IDs are evolving and generative. They’re generative because some IDs spawn additional NFTs which themselves can be bought and sold. For instance, each star can spawn 65,535 planets, and each galaxy can spawn 255 stars. The network itself is evolving, meaning that the network can be upgraded via a majority vote by galaxy holders. Urbit IDs and the Ubit network itself are inherently dynamic.
22−
23−At Urbit, we support communities of all kinds. We recently granted Holdersland ten Urbit IDs: four stars and six planets to be auctioned off. Haleek Maul (his Urbit ID is `~fosmex-hocmel`) will be creating custom artwork for each of the sigils. The proceeds of the auction will help support Holdersland in bringing blockchain technologies to the Caribbean. The auction will go live on September 16th, 2021 on [holders.land/urbit](https://holders.land/urbit).
24−
25−Without further ado, here’s Haleek Maul.
26−
27−---
28−
29−**Tell us a little bit about yourself and Holdersland.**
30−
31−Sure. My name is Haleek Maul and I’m a multi-disciplinary artist. I was born in America and came to Barbados when I was three years old. I’ve been making music since 2007. I put out my first debut project in 2012 and since then it has been a process of creating art from the stuff flowing through my mind.
32−
33−Holdersland is a digital extension of my artistic project—a way of creating change in the world around me. When I was younger, there weren’t many artists like me coming from Barbados. I was into a lot of niche electronic and club music and felt alienated from the larger conversation. Holdersland is a way to help creative people in the Caribbean connect with like-minded people around the world, especially using new technologies like blockchain. So I founded Holdersland in 2020 when I left my record label after four years. I felt like music institutions was archaic and didn’t feed into my other artistic practices. I wanted to create an institution that captured the full creative practice—all the way from creating to selling. Most importantly, I wanted to get artists from Barbados and the Caribbean involved in global conversations around art and technology.
34−
35−**What exactly is Holdersland?**
36−
37−It’s a company centered around Caribbean intellectual property. We’re trying to help people get connected with new web3 technologies, especially artists. Holdersland is an aggregator that helps connects those who are interested in new technology with those those who actually develop it.
38−
39−For example, there is a lot of math that underlies music. Part of our project is to extract these mathematical principles and see how they can help generate new forms of art that can be widely distributed. So we’re working to build our own projects and work with users to adopt some of these new technologies. It’s a community of people centered around these values. We plan to implement voting, governance, and incentive structures into the community soon.
40−
41−**What do you think is the link between your two main interests: music and technology?**
42−
43−I’ve always been interested in technology. Anyone who has made music in the last twenty years has had to get involved with tech. Especially if you’re a producer. There are many young kids who are downloading music software and messing around with it, and in the process becoming knowledgeable about music production and design. Science and math live right beside art.
44−
45−I was also into web development when I was a teenager and was very interested in how the internet worked. This led into the work I’m doing with Holdersland. Technology, more often than not, is concerned with collaboration and communication. But in order to develop new technologies we often need to talk about nitty-gritty details. This requires detailed knowledge of particular technologies.
46−
47−**What is the great hope or promise with new decentralized technologies like blockchain or Urbit?**
48−
49−They lower the barrier to communication and trade. Especially for countries like Barbados, we don’t have access to the world market. But now with these networks, and assets like NFTs, we can engage in commerce without borders. It allows new entrants to join the market.
50−
51−It also allows new financial relationships and funding structures to emerge. Rather than have a few people contribute $20k, you can have hundreds of people contribute $100. Once again, this lowers the entry for people to invest is early-stage projects. This changes the way that companies build and ship products.
52−
53−Brain drain is when skilled workers move abroad for more profitable employment. These new technologies allow native Carribeans to stay where they are while earning money. Using these new technologies, the Carribean can prosper while not losing its unique character and cultural identity. Crypto is permanently going to change the distribution of wealth and culture around the world.
54−
55−Discord is a fine community solution, but it’s not ideal. There’s an endless array of plugins and dependencies that makes Discord unstable. However, it is a good mixture of an office, a storefront, and a club: I can do my work, sell assets, and just have fun. Communities are important. People naturally want to be in communities, we just need a better solution than Discord. Especially one that’s crypto-native and allows for commerce. Urbit is a one-stop shop that could fill that gap.
56−
57−**What is the collaboration between Holdersland and Urbit that’s happening this week?**
58−
59−I’m producing some custom sigil artwork for a set of stars and planets. Both the Urbit assets and artwork will be auctioned off together. The proceeds from the event will go towards creating a community music studio here in Barbados and technology education around the island.
60−
61−A lot of people here in Barbados don’t even understand what crypto is. A lot of the work being done around this project is to raise awareness about the potentials of this new technology. I want this to be a general springboard for the Caribbean to gain greater technological literacy. That literacy is an important step for lower-income people to drastically change their situation.
62−
63−**What are you looking forward to talking about on the New World Energy panel at Assembly 2021?**
64−
65−I want to talk about how to migrate communities onto Urbit. How to use Urbit as a new platform for niche cultures found around the current internet. Also the great strength and power provided by Urbit’s digital identities.
66−
67−NFTs can be very powerful—there are a lot of possible applications of a unique digital asset. It’s already dissolved geographical boundaries which will help countries to export their intellectual products freely. Countries need first to gain knowledge around these technologies and their economies will follow.
68−
69−**Thanks for chatting!**
70−
71−See you at Assembly 2021!
content/blog/hoon-4-lispers.mddeleted−764
@@ -1,764 +0,0 @@
1−+++
2−title = "A Perspective on Lisp and Hoon"
3−date = "2023-06-15"
4−description = "Lisp is an éminence grise of programming. How does Hoon compare?"
5−
6−[extra]
7−author = "N E Davis"
8−ship = "~lagrev-nocfep"
9−image = "https://engineering.stanford.edu/sites/default/files/styles/card_1900x950/public/images/news/john_mccarthy.jpeg?h=3751da6c&itok=6tPSih53"
10−+++
11−
12−![John McCarthy, inventor of Lisp, at Stanford.](https://engineering.stanford.edu/sites/default/files/styles/card_1900x950/public/images/news/john_mccarthy.jpeg?h=3751da6c&itok=6tPSih53)
13−
14−> In the beginning, von Neumann created the machine. And the machine was with rigorous form and code, and no compiler yet moved upon the face of the tubes. And the evening and the morning were the first day.
15−>
16−> And John Backus said, Let there be FORTRAN, and there was Fortran. And Fortran ruled over the assembly.
17−>
18−> And John McCarthy saw the lambda calculus, that it was very good. And McCarthy made the LISP and divided the programmers who were for the array from the programmers who were for the list.
19−>
20−> And the Fortran and the Lisp were the second day. And God set them in the firmament to give light upon the earth.
21−
22−Two great temperaments of programming language design span these poles: Fortran as the engineer of assembler-first hard-nosed array coding and Lisp as the math professor running down to the machine room waving papers. While they have ceded some to the practicalities of the other over time, each is a trope of a particular computing paradigm. In this article, we will examine the Lisp pole in light of Urbit's development language, Hoon.
23−
24−Hoon is a statically typed functional programming language that is designed to be safe, efficient, and expressive. Hoon has a unique syntax relying heavily on symbolic expressions (using “runes”) rather than traditional keywords and operators. Hoon's underlying execution language, Nock, has been described as a “pico-Lisp“, making reference to its nature as a cell-based combinator calculus. Both languages (Nock and Hoon) follow very much in the philosophical steps of Lisp but seek to improve the genre.
25−
26−Lisp is known for its powerful macro system, which allows developers to write code that generates more code at compile time, and for its powerful `eval` function; while Hoon provides a flexible metaprogramming system that allows developers to manipulate code at compile time and hot-swap code at runtime.
27−
28−This article will contrast classical Lisp syntax and assumptions with Hoon's design. As Lisp is a family of languages rather than a single implementation, I will strive to make generally applicable statements or qualify the discussion—I welcome nuance in your responses about the different major Lisp dialects.
29−
30−Hoon's characteristic structure has arisen from these overarching design principles:
31−
32−1. Hoon must compile to Nock, and benefits from reflecting Nock's calculational worldview.
33−2. Hoon must be capable of live upgrades; that is, conscious brain surgery on itself.
34−3. Hoon should grow organically based on actual developer usage patterns.
35−
36−Our investigation of Lisp and Hoon will compare their syntax, their metaprogramming affordances, and their underlying philosophies.
37−
38−
39−## Syntax
40−
41−Hoon has many commonalities with Lisp and its most common calling convention is sugared to appear like Lisp. The conventions of Nock differ—e.g. using `[]` brackets instead of `()` parentheses—and Nock does not have non-numeric tokens or names. Hoon serves as a more human-friendly syntax which mediates common expressions and structures much as C overlays assembly language. For practical purposes, we never need to write Nock code by hand, and so while Nock informs Hoon's design choices, we don't need to understand any Nock to talk about Hoon.
42−
43−Both Lisp and Hoon are homoiconic, meaning that code and data are directly represented the same way: Lisp code is represented as Lisp data structures, and Hoon code is represented as Hoon data structures. Homoiconicity means that code can be manipulated and transformed as data at runtime. While the most compelling investigation in this article focuses on metaprogramming, we need to start with a comparative syntax and grammar so we understand how code and data are represented.
44−
45−Before all of that, let us compare a simple program implemented in both Lisp and Hoon. Both programming languages are species of functional languages for which expressions result in values, but they handle side effects differently: in Hoon side effects are strictly impossible (although a runtime workaround permits I/O and necessary effects), while in Lisp side effects are permitted (although opinions on their use vary). We will therefore not use a trivial “Hello World” example. Instead we will calculate the arithmetic mean of a set of numbers of known size.
46−
47−```scheme
48−(define (mean a)
49− (if (null? a)
50− 0
51− (/ (apply + a) (length a))))
52−```
53−
54−```hoon
55−:: Common (sugared) form
56−++ mean
57− |= a=(list @ud)
58− ?~ a 0
59− (div (roll a add) (lent a))
60−
61−:: Rune (unsugared) form
62−++ mean
63− |= a=(list @ud)
64− ?~ a 0
65− %+ div
66− %- roll [a add]
67− %- lent a
68−```
69−
70−The Scheme code has the advantage that it reads almost English-like as one works through the logic, but implicitly relies on familiarity with the `if`/`then`/`else` structure and function application using `()` (on which more soon).
71−
72−The Hoon code uses the `%` function application runes (differentiated by number of arguments) to apply the function calls. With syntactic sugar, this looks similar to the Lisp call, with `++roll` instead of `apply` and `++lent` instead of `length`.
73−
74−Throughout I will use code examples for Lisp taken from [Rosetta Code](https://rosettacode.org/wiki/Category:Scheme). I will select or compose Hoon examples to be structurally similar to the Lisp code in order to facilitate comparison. I will also avoid sugar syntax that would obscure the structure of the Hoon code; in some cases this will make it slightly less readable than its equivalent in practice.
75−
76−### Syntax in Lisp
77−
78−#### Types
79−
80−Lisp types are dynamic, checked at runtime rather than on compilation. Since everything is an object, some assumptions can be made about manipulation and behavior. Most Lisp dialects share these types:
81−
82−- Numbers, including integers and floating-point numbers.
83−- Characters.
84−- Strings, as a sequence of characters.
85−- Lists, as a sequence of objects (including lists).
86−- Symbols, names used to refer to a function, variable, or other object.
87−- Arrays, a fixed-size multidimensional indexed object collection.
88−
89−Lisp code, being dynamically typed, is inclined to try a value and see if it works in a given context. However, some restrictions can be made, such as an argument type declaration on a function:
90−
91−```lisp
92−(defun add-two-integers (x y)
93− (declare (type integer x y))
94− (+ x y))
95−```
96−
97−Lisp types are to some extent (justly) influenced by the underlying platform architecture: Lisp is generally compiled directly to machine code (like a C program), with the notable exception of [Clojure](https://clojure.org/reference/lisps) which runs on the Java Virtual Machine.
98−
99−#### Operators, Functions, Macros, and Thunks
100−
101−Lisp syntax is characterized by its use of nested lists, called S-expressions (symbolic expressions), which consist of parentheses enclosing atoms or other S-expressions. The basic structure of an S-expression is an operator (or function) followed by its arguments, all enclosed in parentheses. For example, the following S-expression performs a simple arithmetic operation:
102−
103−```lisp
104−(+ 1 2 3)
105−```
106−
107−Lisp uses prefix notation, where the operator comes before the operands, and parentheses are used to group expressions. The S-expression is evaluated from left to right (in most Lisps save Scheme), with the operator being applied to its arguments.
108−
109−Operators in Lisp operate on values of different basic types. Lisp dialects vary in their particular base types, but typically include numbers, strings, booleans, and so forth. The core data type is the list, of course (LISP is for LISt Processing). Since Lisp biases towards list processing, many operators are comfortable receiving an arbitrary number of values as inputs, as in the code sample above.
110−
111−In Lisp, [`cons`](https://en.wikipedia.org/wiki/Cons) describes the procedure to construct a pair of objects. This seemingly modest capability is fundamental to how Lisp builds lists—and since everything is a list, `cons` has consequences. One fundamental convention is the `cons` cell, which consists of two other Lisp objects and is how lists are actually constructed.
112−
113−![](https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Cons-cells.svg/450px-Cons-cells.svg.png)
114−
115−Lisp operations are built either as functions or as macros. Functions produce results directly from their inputs. Macros by contrast are basically function-building functions, and produce expressions that can be evaluated with inputs to get a result.
116−
117−A Lisp function is created using `defun`:
118−
119−```lisp
120−> (defun square (x) (* x x))
121−SQUARE
122−
123−> (square 2)
124−4
125−```
126−
127−(Lisp dialects tend to not be case-sensitive.)
128−
129−Lisp functions are first-class objects and can be manipulated and passed like values of basic types as well.
130−
131−Before we can look at macros, we need to consider Lisp's notion of evaluation and in particular deferred evaluation. For Lisp, an expression can be marked as a literal value rather than evaluated to produce a result. The quote `'` symbol is used to mark expressions for prevented evaluation:
132−
133−```lisp
134−'(1 2 3) ; evaluates to the list (1 2 3)
135−'foo ; evaluates to the symbol FOO
136−(1 5) ; evaluates to the list (1 5)
137−'(1 (+ 2 3)) ; evaluates to the list (1 (+ 2 3))
138−```
139−
140−Backtic or backquote `` ` `` allows you to switch an expression in and out of evaluation mode, along with `,` to mark evaluated components for splicing back into the unevaluated expression.
141−
142−```lisp
143−`(1 2 3) ; evaluates to the list (1 2 3)
144−`foo ; evaluates to the symbol FOO
145−`(1 ,(+ 2 3)) ; evaluates to the list (1 5)
146−```
147−
148−A Lisp macro is essentially a compile-time function.
149−
150−```lisp
151−> (defmacro square (x)
152− "Returns the square of the input value."
153− `(* ,x ,x))
154−
155−> (square 2)
156−4
157−```
158−
159−(The `` ` `` notation constructs the expression with values spliced in by `,`.)
160−
161−A deferred evaluation, called a thunk, is a closure that inherits its lexical environment but is deferred for later computation. Thunks enable lazy code evaluation and separate the computation’s definition from its execution.
162−
163−```lisp
164−(defun create-thunk (function &rest arguments)
165− (lambda () (apply function arguments)))
166−
167−(defun invoke-thunk (thunk)
168− (funcall thunk))
169−
170−;; Creating a thunk that calculates the factorial of a number
171−(defvar factorial-thunk (create-thunk #'(lambda () (factorial 5))))
172−
173−;; Invoking the thunk to get the result
174−(print (invoke-thunk factorial-thunk)) ; Output: 120
175−```
176−
177−In this code example, `create-thunk` accepts a function and returns a thunk created using a lambda function to encapsulate the computation. `invoke-thunk` is used to invoke the thunk to get the actual result. The actual application creates a deferred factorial implementation and then finally invokes it. Without the last line, the actual calculation would never be executed.
178−
179−As Paul Graham wrote, “The unusual thing about Lisp-- in fact, the defining quality of Lisp-- is that it can be written in itself.” A Lisp program is an S-expression, and in principle we can run the equation the other way: certain S-expressions are valid Lisp programs. Although uncommon in practice due to code safety issues, the `eval` function is illustrative of Lisps’ ability to evaluate a Lisp expression that is represented as a data structure. It takes a single argument, which is a Lisp expression, and returns the value of that expression. Lisp programs can in principle generate new code—or modify existing code—and evaluate it on the fly, since code is data.
180−
181−```lisp
182−(defvar x 10)
183−(defvar y 20)
184−(defvar z '(+ x y))
185−
186−(eval z)
187−```
188−
189−Besides explicitly named functions and macros, Lisp frequently employs lambda expressions to produce functions on demand at the point of use.
190−
191−```lisp
192−> ((lambda (x y) (+ x y)) 5 10)
193−15
194−```
195−
196−Naturally, we have not covered all of Lisp, but the above should motivate how Hoon differs from Lisp. Furthermore, Lisp is really a family of languages, so there is a fair amount of variation in specifics.
197−
198−- [Paul Graham, _On Lisp_](http://www.paulgraham.com/onlisptext.html)
199−
200−### Syntax in Hoon
201−
202−#### Types
203−
204−Hoon compiles to Nock and runs on a Nock virtual machine interpreter. Nock knows only about nouns, that is to say either simple unsigned integers or pairs of other nouns.
205−
206−> To be exact, a noun is an S-expression, except that classic S-expressions have multiple atom types ("S" is for "symbol"). Since Nock is designed to be used with a higher-level type system (such as Hoon's), it does not need low-level types. An atom is just an unsigned integer of any size.
207−
208−
209−One of the biggest differences between Hoon and Lisp lies in their respective type systems: Hoon is statically typed while Lisp is dynamically typed. Furthermore, since Hoon compiles to Nock, ultimately every value, expression, and program in Hoon results in a noun (an atom or unsigned integer, or a cell or pair of nouns). (The compiler may make this process slightly opaque, but it is deterministic.) Types, if values are known, must match or nest properly at compile time.
210−
211−Hoon implements types as a metadata layer over bare Nock numbers and atoms. (The implementation details do not concern us but can be seen using the `!,` zapcom rune, which produces the abstract syntax tree of an expression.) Hoon atom types include various numeric types (signed and unsigned, hexadecimal, binary, etc.); address space identifiers (such as ~zod); IP addresses; UTF-8 text; and floating-point values, [among many others](https://developers.urbit.org/blog/literals). As these are interpretations laid over the bare integer, it is trivial to convert among them, a convenience like C affords.
212−
213−```hoon
214−:: raw unsigned decimal integer
215−> 123
216−123
217−
218−:: hexadecimal integer
219−> `@ux`123
220−0x7b
221−
222−:: UTF-8 text
223−> `@t`123
224−'{'
225−
226−:: relative datetime (a small fraction of a second)
227−> `@dr`123
228−~s0..0000.0000.0000.007b
229−
230−:: address mnemonic (ship name)
231−> `@p`123
232−~rux
233−
234−:: IPv4 address
235−> `@if`123
236−.0.0.0.123
237−
238−:: IPv6 address
239−> `@is`123
240−.0.0.0.0.0.0.0.7b
241−```
242−
243−A cell is a pair of two nouns, and of course many compound types exist, including lists (a null-terminated series of cells). A file path in Urbit is, for instance, a list of resource names (a `path`). A manipulable text string is a list of single bytes for characters (a `tape`). Maps (associative arrays), sets, and other containers round out the basic data structure types, but more complex types such as HTTP headers and app metadata are available. Even app actions have an associated type so that the set of actions is enumerable and validated. Here, for instance, are some cryptographic types from the standard library:
244−
245−```hoon
246−+$ jacobian [x=@ y=@ z=@] :: jacobian point
247−+$ point [x=@ y=@] :: curve point
248−+$ domain
249− $: p=@ :: prime modulo
250− a=@ :: y^2=x^3+ax+b
251− b=@ ::
252− g=point :: base point
253− n=@ :: prime order of g
254− ==
255−```
256−
257−Hoon expressions are ultimately binary trees of cells and atoms—Hoon is homoiconic and so code is directly represented as a data structure which can be interpreted as a value as well. This facilitates Hoon's ability to upgrade itself in place, as we will see.
258−
259−Hoon commonly implements types structurally via _molds_, or functions which coerce to type or crash. A mold is a way of asserting known type information over a value, typically at compile time, in a way that allows for data transformation and data validation. This leads to some interesting cases such as the difference between a null-terminated tuple and a true list, which some functions require.
260−
261−```hoon
262−> ~[1 2 3]
263−[1 2 3 ~]
264−
265−> `(list @)`~[1 2 3]
266−~[1 2 3]
267−
268−> (snag 2 ~[1 2 3])
269−mull-grow
270−-need.[i=@ud t=%~]
271−-have.%~
272−nest-fail
273−dojo: hoon expression failed
274−
275−> (snag 2 `(list @)`~[1 2 3])
276−3
277−```
278−
279−Hoon implements a unique character literal syntax for every single atom type, allowing any value to be unambiguously interpreted by the parser per the developer's intent. You can see this somewhat in evidence in this comparison chart:
280−
281−| Type | Lisp Type | Hoon Type |
282−| --- | --- | --- |
283−| (Unsigned) integer | `1` | `1` |
284−| Signed integer | `-1`, `1` | `-1`, `--1` |
285−| Symbol | `x` | `%x` |
286−| Real/FP | `1.5` | `.1.5` |
287−| Character | `#\c` | `'c'` |
288−| Text | `"Hello"` | `'Hello'` (as atom); `"Hello"` (as list) |
289−| Rational | `2/3` | (no Hoon equivalent) |
290−| Address | (no Lisp equivalent) | `~sampel-palnet` |
291−
292−Much of Hoon's practical power derives from how it represents and manipulates nouns as data and as code.
293−
294−> The type of type is just a normal datatype in Hoon, and a lot of the system manipulates types. In particular, the `!>` rune, when applied to a piece of data, uses compile-time type reflection to produce something called a "vase": a pair of type and data, similar to a `Data.Dynamic` in Haskell, or a limited form of a dependent pair. Since the Arvo kernel does a lot of dynamic compilation, it uses vases to implement something akin to a dynamically typed language using Hoon. This allows for type-safe dynamic program loading, program execution, and data migration. (Ted Blackman ~rovnys-ricfer, [“Why Hoon”](https://urbit.org/blog/why-hoon))
295−
296−A `vase` in Hoon is a cell of type and value. Typically `vase`s are produced with the `!>` zapgar rune. We use `vase`s to carry type information where otherwise it may be lost, such as in transmission over the wire to another Urbit instance.
297−
298−```hoon
299−> !>('hello')
300−[#t/@t q=478.560.413.032]
301−
302−> !>([5 10])
303−[#t/[@ud @ud] q=[5 10]]
304−
305−> !>(`(list @)`~[1 2 3])
306−[#t/it(@) q=[1 2 3 0]]
307−
308−> !>(`(list @)`~)
309−[#t/it(@) q=0]
310−```
311−
312−A `vase` can be used at runtime to resolve a value from a dynamic context into an executable Hoon expression, and this is commonly done with web-based input, for instance, where insufficient information will be available at compile time to resolve the type correctly.
313−
314−#### Expressions
315−
316−Nock explicitly consists of binary trees, since any Nock structure or program consists entirely of atoms (bare values) and cells (pairs of nouns).
317−
318−![](https://storage.googleapis.com/media.urbit.org/docs/userspace/hoon-school/binary-tree.png)
319−
320−Expressions are oriented around runes, which act as operators to join or manipulate expressions. To construct a cell of two values like `1` and `2`, one uses the `:-` cencol rune. (Hoon cells implement what we call an “implicit `cons`”, meaning that two nouns composed together are simply unified in a shared binary tree.)
321−
322−```
323− :-
324− / \
325−1 2
326−```
327−
328−To invoke a function named `add`, one can provide a `%-` cenhep rune with the function name and the arguments.
329−
330−```
331− %-
332− / \
333−add :-
334− / \
335− 1 2
336−```
337−
338−We write this Hoon expression one of two ways, either separated by whitespace or using parentheses:
339−
340−```
341−> %- add :- 1 2
342−3
343−
344−> %-(add :-(1 2))
345−3
346−```
347−
348−Hoon employs “sugar syntax” for many common code patterns to make them easier to write and (sometimes) to read. Since Hoon had the advantage of knowing about Lisp's syntax beforehand, the standard invocation syntax in Hoon (formally a `%` rune) uses the irregular `()`-based syntax like Lisp. In this case, we could instead write the Lisp-like expression:
349−
350−```hoon
351−> (add 1 2)
352−3
353−```
354−
355−which results in basically the same expression once the parser is done.
356−
357−(Although Hoon ultimately compiles to Nock, it is more natural in some ways to approach the syntax of a program as an array of $n$-ary trees, where each “slot” in an expression can have zero, one, or many children. Zero children refers to a tree address containing a terminal value like a symbol or an integer.)
358−
359−Rune syntax is Hoon's answer to the Lisp proliferation of parentheses—by restricting expressions to a definite number of children, Hoon avoids needing to explicitly terminate most expressions. In some ways, runes are an ASCII-based equivalent of APL's symbolic character operators.
360−
361−```apl
362−life ← {⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵}
363−```
364−
365−Rather than permit polymorphic language statements, Hoon requires each rune to be extremely tightly defined. While many statements may be functionally equivalent to an `if` or a `cond` statement, for instance, Hoon allows the developer to select a particular expressive rune if desired.
366−
367−- `?:` typical `if`/`then`/`else` branch
368−- `?=` branch on type
369−- `?@` branch if atom
370−- `?^` branch if cell
371−- `?+` switch on type with default
372−- `?-` switch on type without default
373−- `?~` branch if null
374−
375−The next examples explore an interesting difference between Lisp `cond` and Hoon `?+` wutlus swtich statements: Hoon switches over _types_ not _values_, and `term` symbols as constants are instances of self-matching types.)
376−
377−```scheme
378−(define (weather f)
379− (cond ((> f 80) 'too-hot)
380− ((> f 60) 'nice)
381− ((< f 35) 'too-cold)
382− (else 'typical-midwest)))
383−```
384−
385−```hoon
386−|%
387−++ weather
388− |= f=@ud
389− ?: (gth f 80) %too-hot
390− ?: (gth f 60) %nice
391− ?: (lth f 35) %too-cold
392− %typical-midwest
393−++ symbol-to-message
394− |= msg=term
395− ?+ msg 'Typical Midwest'
396− %too-hot
397− 'Too hot outside'
398− %nice
399− 'Nice outside'
400− %too-cold
401− 'Too cold here'
402− ==
403−--
404−```
405−
406−Lisp expects a program to be a running series of expressions, naturally composed together as a list. Hoon, in contrast, expects everything to be an evaluable expression (no implicit `progn`, for instance): thus, series of expressions must be composed together, e.g. using `=>` tisgar to concatenate two expressions.
407−
408−This code example defines an expression and immediately evaluates another expression against it:
409−
410−```hoon
411−=> [a=1 b=2 c=3]
412−::
413−b
414−```
415−
416−Hoon code is compiled to Nock, but it is not a simple macro over Nock—multiple Hoon expressions could result in an identical Nock expression, and the same Hoon expression evaluated against different subjects could result in different Nock expressions. Hoon code is parsed to an abstract syntax tree first, which includes type metadata, then compiled into the appropriate Nock statement. Here we use the `!,` zapcom rune to turn a Hoon expression into its AST, then `!=` zaptis to compile a Hoon expression to Nock.
417−
418−```hoon
419−> !,(*hoon `@ux`+(1))
420−[ %ktls
421− p=[%sand p=%ux q=0]
422− q=[%ktls p=[%sand p=%$ q=0] q=[%dtls p=[%sand p=%ud q=1]]]
423−]
424−
425−> !=(`@ux`+(1))
426−[4 1 1]
427−```
428−
429−Hoon has much more syntactic sugar than Lisp. Not only is the Lisp-like `()` execution convention sugar for `%:` cencol to invoke a function, there are in fact many ways to evaluate code expressions. Consider, for instance:
430−
431−| Rune | Usage |
432−|---|---|
433−| `%-` | Evaluate a function against a single noun. |
434−| `%+` | Evaluate a function against a cell (pair of nouns). |
435−| `%^` | Evaluate a function against a trio of nouns. |
436−| `%:` | Evaluate a function with many arguments ($n$-ary, unspecified number of nouns). |
437−| `%~` | Evaluate a higher-order function to produce a function. |
438−
439−This gives a Hoon developer an extreme amount of flexibility in constructing and laying out code expressions. In fact, many Hoon programs read as a hybrid of imperative code and functional code, since the ability to lay out intent line-by-line feels rather like C.
440−
441−Hoon conventions and sugar syntax have evolved organically as core developers discovered or invented useful design patterns and appropriately concise syntax.
442−
443−#### Functions (Gates) and Cores
444−
445−The most important structural concept in Hoon is the core, which organizes code into a binary tree of `[code data]`, or as we call it in Hoon, `[battery payload]`. Since cores have a standard structure, this means that many kinds of direct manipulations (metaprogramming) are possible, such as altering the input arguments to a function or manipulating the code variance model. Cores play a role in Hoon similar to that of objects in many other languages.
446−
447−Any function (“gate” in Hoon parlance) is a core, whose `battery` is the compiled Nock code and whose `payload` includes its view of the system, including the standard library, and its input arguments. The `|=` bartis rune is most commonly used to make a gate:
448−
449−```hoon
450−:: Select the larger of two values ("max").
451−|= [a=@ b=@]
452−?: (gth a b)
453− a
454−b
455−```
456−
457−The gate definition rune `|=` bartis has two children, a specification of the expected input and the expression. When invoked, the values of the specification (or "sample") are provided to the expression, which then evaluates to return a noun.
458−
459−One quirk of Hoon is that since everything is an address (or “axis”) in a binary tree, you can access anything in your scope (“subject”) through its axis. Most commonly you attach a face to a value (like a gate), but you don't have to. At any point, to refer to the previous statement, you can invoke the head of the tree, `-`; to wit,
460−
461−```hoon
462−> =/ a 5
463− -
464−a=5
465−```
466−
467−The name `a` is also attached to the value and can be used to identify the value. (To the Hoon parser there is no real difference; this is a programmer quality-of-life affordance.)
468−
469−```hoon
470−> =/ a 5
471− a
472−5
473−```
474−
475−Thus faces (names) are attached to gates (functions) within a particular scope or context, such as a `|%` core. Each core defines a collection of values and gates (collectively termed “arms”) which occupy a shared scope. For example, the following library demonstrates a few floating-point operations in Hoon. Each function can see the parent subject (including `hoon.hoon` and some other cores) as well as its neighboring arms (such as `++pow-n` called by `++exp`).
476−
477−```hoon
478−|%
479−:: Factorial, x!
480−++ factorial
481− |= x=@rs
482− =/ t=@rs .1
483− |- ^- @rs
484− ?: =(x .1) t
485− $(x (sub:rs x .1), t (mul:rs t x))
486−:: Absolute value, |x|
487−++ absolute
488− |= x=@rs
489− ?: (gth:rs x .0) x
490− (sub:rs .0 x)
491−:: Exponential function, exp(x)
492−++ exp
493− |= x=@rs
494− =/ rtol .1e-5
495− =/ p .1
496− =/ po .-1
497− =/ i .1
498− |- ^- @rs
499− ?: (lth:rs (absolute (sub:rs po p)) rtol) p
500− $(i (add:rs i .1), p (add:rs p (div:rs (pow-n x i) (factorial i))), po p)
501−:: Power, restricted to integeres only, x**n
502−++ pow-n
503− |= [x=@rs n=@rs]
504− ?: =(n .0) .1
505− =/ p x
506− |- ^- @rs
507− ?: (lth:rs n .2) p
508− $(n (sub:rs n .1), p (mul:rs p x))
509−--
510−```
511−
512−Ultimately, however, the faces resolve back to an axis and the code is composed by the compiler into a Hoon syntax tree and thence to Nock for the runtime interpreter.
513−
514−The nature of cores derives from Nock and is key to understanding how Hoon works. All nontrivial structures in Hoon are cores. For instance, even a gate is a regular `|%` core, with `|=` expanding to `|%`. The following code snippets are identical to the Hoon compiler after parsing.
515−
516−```hoon
517−:: increment a number by two
518−|= p=@ud
519−+(+(p))
520−```
521−
522−```hoon
523−:: increment a number by two
524−=+ ^~(*p=@ud)
525−|%
526−++ $
527− +(+(p))
528−--
529−```
530−
531−Although Lisp's `'` quoting has no direct equivalent in Hoon, there are a couple of structures that can provide a similar effect. The most important of these is the `|.` trap, which defines an expression to be evaluated at a later time—Hoon’s equivalent of Lisp’s thunk. For instance, traps are used when testing code that _should_ fail, as the expression can be defined and deferred until the test framework is ready to process it.
532−
533−```hoon
534−> =foo |.((add 1 41))
535−
536−> -:foo
537−[8 [9 36 0 2.047] 9 2 10 [6 [7 [0 3] 1 1] 7 [0 3] 1 41] 0 2]
538−
539−> (foo)
540−42
541−```
542−
543−(To understand the second entry, recall that code is the in head of the core—here, we see the Nock code for the operation defined in the `|.` trap.)
544−
545−[Wet gates](https://developers.urbit.org/guides/core/hoon-school/R-metals) present the most macro-like feature in Hoon. A regular function, or “dry gate” (as above), receives an argument (the sample); the type system tries to cast the sample to the type specified by the gate, and fails if not possible. Wet gates instead defer type evaluation and instead attempt to use the sample (or arguments) directly in the expression. This produces a parametric polymorphism. (This comes close to dynamic typing, but type is still checked at compile time.) Wet gates are commonly used as gate-building gates, such as mold-producing gates like `++list`.
546−
547−Consider a function like `++turn` which transforms each element of a list.
548−
549−```hoon
550−> `tape`(turn ~[77 97 114 115] @t)
551−"Mars"
552−```
553−
554−To use `++turn`, we need a list and a transformation function. The type of the list we produce depends on the type of the list and the type of the transformation function. The actual gate `++turn` should work to transform each element of the list for on any function and any list, so long as the function's argument is the list item.
555−
556−Wet gates are therefore used when incoming type information is not well known and needs to be preserved. This includes parsing, building, and structuring arbitrary nouns. (Beyond Lisp analogues, you can think of C++'s templates and operator overloading, and Haskell's typeclasses.)
557−
558−This example compares the Lisp deferred factorial thunk with an equivalent Hoon trap. (Hoon includes `++factorial` since it is not part of the standard library.)
559−
560−```scheme
561−(defun create-thunk (function &rest arguments)
562− (lambda () (apply function arguments)))
563−
564−(defun invoke-thunk (thunk)
565− (funcall thunk))
566−
567−;; Creating a thunk that calculates the factorial of a number
568−(defvar factorial-thunk (create-thunk #'(lambda () (factorial 5))))
569−
570−;; Invoking the thunk to get the result
571−(print (invoke-thunk factorial-thunk)) ; Output: 120
572−```
573−
574−```hoon
575−=>
576−|%
577−++ factorial
578− |= n=@ud
579− |-
580− ?: =(n 1) 1
581− %+ mul n
582− %= $
583− n (dec n)
584− ==
585−++ factorial-5
586− |. (factorial 5)
587−--
588−(factorial-5)
589−```
590−
591−### Subject-Oriented Programming
592−
593−Urbit programming employs a paradigm deriving from the nature of Nock (_a fortiori_ Hoon), subject-oriented programming. Every expression of Hoon is evaluated relative to its subject, a piece of data that represents the environment, or the context, of an expression.
594−
595−The subject refers to the parent binary tree of an expression, more or less, and serves as state, lexical scope, environment, and function argument. (We can be precise about the definition in all cases—e.g. the subject of a gate in a core is the core itself—but don't need to for this essay.) Lisp supports variable scope and global variables, such that any part of the program can access a particular binding. Hoon's subject-oriented programming model naturally provides its equivalent of scope: all code is evaluated against a subject and name bindings proceed by depth-first match (with permitted skips to prevent unwanted masking).
596−
597−> Subject orientation in Nock and Hoon stems partly from minimalism (there's just one subject, which serves as state, lexical scope, environment, and function argument), partly from a desire to simplify compilation (the type of the subject is a full specification of the compile-time environment for a source file), and partly in order to give the language a more imperative feel.
598−>
599−> Everything about a scope, including name bindings, aliases, and docstrings, is stored in the subject's type. This allows Hoon's compilation discipline to be similarly minimal: the compiler is a function from subject type and Hoon source to product type and compiled Nock. Running this Nock against a value of the subject type produces a vase of the result. It's hard to imagine a more streamlined formalism for compilation. (Ted Blackman ~rovnys-ricfer, [“Why Hoon”](https://urbit.org/blog/why-hoon))
600−
601−The subject is typically the core in which an expression is evaluated, but can be more narrowly defined; consider, for instance, our example from above:
602−
603−```hoon
604−=> [a=1 b=2 c=3]
605−::
606−b
607−```
608−
609−A slightly different program fails:
610−
611−```hoon
612−=> [a=1 b=2 c=3]
613−::
614−(add a b)
615−```
616−
617−because the `++add` gate is not defined in the subject against which the expression is evaluated, the first statement.
618−
619−### Comparative Examples
620−
621−#### Find in List
622−
623−```scheme
624−(define index-of
625− (lambda (needle haystack)
626− (let ((tail (member needle haystack)))
627− (if tail
628− (- (length haystack) (length tail))
629− (throw 'needle-missing)))))
630−```
631−
632−```hoon
633−:: Produces the index of the first occurrence of nedl in hstk
634−:: as the unit of an atom.
635−++ find
636− |= [nedl=(list) hstk=(list)]
637− =| i=@ud
638− |- ^- (unit @ud)
639− =+ [n=nedl h=hstk]
640− |-
641− ?: |(?=(~ n) ?=(~ h))
642− ~
643− ?: =(i.n i.h)
644− ?~ t.n
645− `i
646− $(n t.n, h t.h)
647− ^$(i +(i), hstk +.hstk)
648−```
649−
650−#### Filter a List
651−
652−```scheme
653−(define filter
654− (lambda (fn lst)
655− (let iter ((lst lst) (result '()))
656− (if (null? lst)
657− (reverse result)
658− (let ((item (car lst))
659− (rest (cdr lst)))
660− (if (fn item)
661− (iter rest (cons item result))
662− (iter rest result)))))))
663−```
664−
665−```hoon
666−:: Cycle through the members of a list a, passing them to a gate b
667−:: and produce a list of all of the members that produce TRUE.
668−++ skim
669− |* [a=(list) b=$-(* ?)]
670− |-
671− ^+ a
672− ?~ a ~
673− ?:((b i.a) [i.a $(a t.a)] $(a t.a))
674−```
675−
676−- Several examples in the above section were drawn from [UW's CSE 341 course notes](https://courses.cs.washington.edu/courses/cse341/03wi/scheme/basics.html) and from [Rosetta Code](https://rosettacode.org/).
677−
678−
679−## Metaprogramming
680−
681−A Lisp program is really a list, or a list of lists (nested as much as necessary). While this can be interpreted as an $n$-ary tree, tree structure is not the preferred structural metaphor. A Hoon program is a noun, or equivalently a binary tree. Every component of it is directly addressable and thus in principle reflective. Both languages are homoiconic, with code and data representations being the same. What are the consequences of homoiconicity?
682−
683−### Metaprogramming in Lisp
684−
685−Metaprogramming is the practice of writing code that manipulates other code at either compile-time or runtime. In Lisp, metaprogramming is a core feature of the language, and it allows developers to create programs that are incredibly powerful and flexible. Lisp's metaprogramming capabilities are primarily built on two features: macros and syntax manipulation.
686−
687−Macros in Lisp are a way to define new language constructs that are more expressive and more powerful than those provided by the language itself. When a Lisp program is compiled or interpreted, macros are expanded into regular Lisp code, allowing the macro to generate new code based on its input arguments. Since Lisp code is represented as data, it can be manipulated using the same functions and operators used to manipulate other data structures.
688−
689−For instance, Lisp macros could allow you flexibility in expressing a common operation. Imagine you're working on a project that requires a lot of complex math calculations. Rather than writing out each calculation manually, you could define a macro that takes an expression in infix notation (e.g. `2 + 3 * 4`), and transforms it into a Lisp expression that can be evaluated directly. Thus you could compose math expressions in a more human-natural way without having to worry about details of Lisp syntax.
690−
691−Lisp can also manipulate its own syntax. This is sometimes done through the use of reader macros, which operate at the level of the Lisp reader, which is responsible for converting textual input into Lisp expressions. Reader macros can be used to extend the syntax of Lisp, allowing developers to define new conventions or domain-specific languages for specific types of data or operations. Beyond reader macros, Lisp can permit the developer to change the parser (and as long as the result is a Lisp expression, the interpreter or compiler will be fine with this). Top-level functions can be replaced or modified (“advised”). Symbol macros can change source code.
692−
693−Lisp's `'` quote and the `eval` statement allow single expressions to be inhibited or evaluated at will, which is incredibly useful when dealing with symbols that may not be defined yet or in the composition of macros.
694−
695−In addition to macros and syntax manipulation, Lisp dialects typically provide a number of other features that make metaprogramming easier, such as the ability to inspect and modify the runtime environment, and the ability to create or redefine functions and classes at runtime.
696−
697−### Metaprogramming in Hoon
698−
699−While Hoon explicitly avoids macros and domain-specific language specializations, there are many aspects of Hoon which allow or exploit code reflection and manipulation.
700−
701−In practice, Hoon is intended as a systems programming language for the Urbit Nock VM. Hoon's metaprogramming has as a consequence mainly focused on aspects of core manipulation (such as code building and wet gates) and on live code upgrades (what I'll call hot-swapping code). Hoon eschews macros and in particular has a philosophical stance against domain-specific languages (DSLs). (There are some exceptions, notably Sail, Hoon's XML/HTML syntax; and JSON reparsing.)
702−
703−Hoon has the ability to parse arbitrary text strings (typically files) into executable ASTs and Nock. Symbols can be directly converted to and from regular text strings.
704−
705−As the programming language for a “hundred-year computer”, Hoon needs the ability to hot-swap code at runtime. Elements of cores can be removed or replaced. (Really, Hoon code is immutable: the system is actually making a copy with a specified change.) Every app and even the OS itself can define a state transition function and upgrade along a deterministic pathway.
706−
707−Hoon is in principle extremely reflective as it simply compiles to a Nock noun. Since everything is a stationary tree, it is straightforward to manipulate any object. There are no magic binary blobs or opaque data types: if you have a file handle or an Ethereum block or a websocket connection object, it is a tree and you can work with it directly. (Cf. [“Why Hoon”](https://urbit.org/blog/why-hoon).) Obtaining—or changing—details about gate sample or core behavior becomes a routine part of the Hoon developer’s toolkit. Given such regularity, it would be desirable to expose further capabilities of code reflection and introspection explicitly for the interpreter and IDE.
708−
709−One of the most common design patterns in Hoon is that of the higher-order function, or what Hoon calls “gate-building gates”. These are gates (functions) that produce gates (functions). For instance, as Hoon is statically typed a list must have an associated element type at compile time. `++list` is a gate builder that produces a type gate, which can then be applied to the actual values:
710−
711−```hoon
712−list :: gate builder
713−(list cord) :: gate for list of cords (strings)
714−`(list cord)`~['a' 'b' 'c'] :: list type applied to value
715−```
716−
717−Hoon represents a “hyperlambda” with respect to anonymous function creation: one very often defines gates at their point of use, particularly when operating on each member of a list or set. Similar to Lisp's frequent use of `lambda`, the one-time-use function is available at the point of call as an anonymous gate. (More generally, every gate is anonymous and we have to attach a name to it as a search path, but that's a bit out of scope here.)
718−
719−```scheme
720−((lambda (x1 x2)
721− (* (- x1 x2) (- x1 x2)))
722− 2 -5)
723−```
724−
725−```hoon
726−%- |= [x1=@ x2=@]
727− (pro:si (dif:si x1 x2) (dif:si x1 x2))
728−[--2 -5]
729−```
730−
731−Like Lisp, Hoon yields a lot of power to the user–developer. One could implement a fairly regular Lisp on top of Hoon with very few changes—and perhaps even implement a pure-Hoon discipline yielding a statically-typed Lisp à la TypeScript from JavaScript.
732−
733−- [~tacryt-socryp, “Hick, a more traditional Lisp than Hoon”](https://gist.github.com/tacryt-socryp/b08dc66b7bcc760e914c4db5c9fd7ba7)
734−
735−
736−## Philosophy
737−
738−Hoon's focus on atoms, static typing, and symbolic expressions make it a highly expressive and efficient language for building applications on the Urbit platform, while Lisp's flexible syntax and macro system make it a popular choice for a wide range of programming tasks.
739−
740−Lisp has evolved greatly since John McCarthy's founding. Like Unix, a complicated family tree has finally settled down into a few strong contenders: Scheme, Common Lisp, Clojure, Racket.
741−
742−Lisp has tended to be fractious: as many have noted, and [Mark Tarver eloquently expressed](http://web.archive.org/web/20080803193859/http://www.lambdassociates.org/blog/bipolar.htm), the Lisp platform appeals to idiosyncratic visions for completist platforms. There's a looseness in the community's coherence as a result.
743−
744−For a few reasons, the Urbit community has managed to avoid such splintering (the [Urbit Classic joke](http://urbit-classic.org/) aside). With a single sponsoring organization, first Tlon Corporation and since 2022 the Urbit Foundation, to steward the ecosystem and a philosophical commitment to protocol-as-platform, Urbit should avoid partition into competing bazaars.
745−
746−Urbit's governing philosophy as a technical program is laid out in the [Precepts](https://urbit.org/blog/precepts). A sampling:
747−
748−> A.13. If you don't completely understand your code and the semantics of all the code it depends on, your code is wrong.
749−
750−> A.16. Explicit state is better than implicit state.
751−
752−> A.20. One hundred lines of simplicity is better than twenty lines of complexity.
753−
754−> D.3. Not being qualified to solve a problem is no reason not to solve it.
755−
756−There is significant overlap here with the ideals of the Lisp developer community present. Scheme like Hoon aims at minimalism and ample use of lambda expressions. [Clojure](https://www.clojure.org/about/rationale) aims at strengthening Lisp by building it on a modern platform (the JVM); it would agree with Urbit's disdain for nondeterminism: “pervasive, unmoderated mutation simply has to go”. Racket was designed for production systems and to some extent with a hope to unify parts of the developer stack.
757−
758−In many ways, Hoon is more Lisp-y than Lisp: that is, it represents a point more polar towards the telos of Lisp than any extant Lisp. By shedding the skin of lists and focusing on binary trees, Urbit achieves a deeper conceptual unification within itself. Hoon doesn't properly supersede Lisp—it requires running on a particular VM architecture, for instance—but Hoon's focus on typing, the nature of Hoon's binary-tree homoiconicity, and its employment of pure functional concepts make it a strong new tool for those to whom Lisp already appeals.
759−
760−Hoon goes farther than Lisp, however. Hoon is an accessible and practical, if unconventional, tool for simplifying the developer stack, ultimately to a single language. Ultimately, Urbit is a technical project to encode human digital freedom into the very protocol we use—with Hoon its nose-to-tail _lingua franca_. Hoon carries the torch that Lisp kindled into a new user-oriented future.
761−
762−To close, I quote Urbit Foundation CTO Ted Blackman on why Urbit follows its particular design discipline:
763−
764−> The promise of Urbit lies in its reimagination of the digital world using components that are as constrained and limited as possible. By adhering firmly to principle and doubling down on minimalism at every turn, we get an OS that provides far stronger guarantees than Unix with a thousand times less code. Given the complexity of modern software, this is what's required to put personal computing back into the hands of people. (Ted Blackman ~rovnys-ricfer, [“Why Hoon”](https://urbit.org/blog/why-hoon))
content/blog/hosting-the-future.mddeleted−30
@@ -1,30 +0,0 @@
1−+++
2−title = "Hosting the Future"
3−date = "2020-09-30"
4−description = "The way we see it, hosting is the most important thing, next to Landscape, that Tlon can do to help Urbit continue toward widespread adoption."
5−
6−[extra]
7−author = "Nick Simmons"
8−ship = "~simfur-ritwed"
9−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/200930-hosting-by-tlon.jpg"
10−+++
11−
12−![Ocean](https://storage.googleapis.com/media.urbit.org/site/posts/essays/200930-hosting-by-tlon.jpg)
13−
14−Urbit 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.
15−
16−At 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.
17−
18−To learn more about Tlon hosting and sign up for the waiting list, check out the new [tlon.io](https://tlon.io/) website. We are officially launching the service on October 9th, with a virtual event and demo; we’ll also show off some of the new features and improvements to Landscape, the Urbit web client.
19−
20−To be very clear, hosting isn’t for everyone; if you’re deeply security-conscious or privacy-oriented, you’ll still want to self-host so that nobody else needs to touch your keys. That said, hosting isn’t a walled garden; you’ll get a planet when you sign up for hosting, which you will own 100% and forever. You’ll also always have the option to roll up your data and take it with you if you choose to stop using our service. Your Urbit data is just a single file, and we’ll happily hand it back to you if you ever decide to leave. Nothing will ever stop you from self-hosting.
21−
22−We’ve talked for a while about how the ultimate destiny of Urbit is to escape the control of Tlon. For Urbit to really succeed, it has to be managed by its own community. We started Tlon in order to solidify the foundation of this young platform. Now that Urbit is starting to grow up, Tlon and Urbit will naturally drift apart a bit.
23−
24−Urbit is meant to be universal, ubiquitous infrastructure. Tlon exists to make that infrastructure useful and usable. We expect Urbit, as a platform, to be cared for by the community in collaboration with the emerging [Urbit Foundation](https://urbit.org/blog/first-steps-towards-urbit-org/). We intend Tlon to become increasingly focussed on providing a great user experience for anyone interested in this new network, so the network can continue to grow and thrive.
25−
26−The way we see it, hosting is the most important thing, next to Landscape, that Tlon can do to help Urbit continue toward widespread adoption. We don’t expect to be the only ones providing this service—and look forward to including more contributions from the community here on urbit.org as they continue to mature.
27−
28−If you’re curious to keep up with what Tlon is doing here, head to [tlon.io](https://tlon.io) and join the waiting list. We’ll be posting updates to that list as well as to the Tlon Transmissions notebook in the Urbit Community group. Going forward we’ll do our best to keep urbit.org neutral and focussed on the technology itself.
29−
30−See you all on the network!
content/blog/immunology-for-the-internet-age.mddeleted−118
@@ -1,118 +0,0 @@
1−+++
2−title = "Immunology for the Internet Age"
3−date = "2022-04-07"
4−description = "A consideration of the history of the Internet motivates introspection on the nature and causes of social dysfunction in a globally shared space. Centralized solutions fail to yield satisfactory outcomes for human freedom and thriving. Decentralized autonomous organizations and their technological apparatus together represent the evolution of an immune system against a corporatized Internet."
5−[extra]
6−author = ""
7−ship = "~lagrev-nocfep"
8−image = "https://live.staticflickr.com/4322/35891780782_4179f476f9_k.jpg"
9−+++
10−
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−
13−**✿**
14−
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._
16−
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.
18−
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]
20−
21−**✿**
22−
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].
24−
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.
26−
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.
28−
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]
30−
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.
32−
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]
34−
35−**✿**
36−
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.
38−
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]
40−
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.
42−
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.
44−
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]
46−
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.
48−
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.
50−
51−Identity is still fluid and polysemous, but in certain key instances it is indelibly demonstrable.[^11]
52−
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]
54−
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])
56−
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]
58−
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.
60−
61−The experience with export-grade cryptography has already shown that regulatory attempts ultimately fail.[^17]
62−
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.
64−
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.
66−
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_.
68−
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?
70−
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]
72−
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.
74−
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.
76−
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.
78−
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.
80−
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.
82−
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.
84−
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.
86−
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.
88−
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.
90−
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.mddeleted−73
@@ -1,73 +0,0 @@
1−+++
2−title = "Infrastructural"
3−date = "2020-04-09"
4−description = "A reflection–meditation on OS 1’s initial form development, and the attitude we brought to bear in designing it."
5−
6−[extra]
7−author = "É. Urcades"
8−ship = "~fabled-faster"
9−image = "https://media.urbit.org/site/posts/essays/infrastructural-2.jpg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/infrastructural-1.jpg)
13−
14−## Seasons
15−
16−It’s early 2020, the transition between winter and spring, and Tlon’s interface group has concluded a series of projects that mark a transition point for the Urbit project. We’ve named the culmination of our efforts “OS 1,” as in “Operating System 1.”
17−
18−For those who have yet to try it out, OS 1 is a bundling of “essential digital utilities” in the form of 1) a linear chat, 2) a long-form text editor and publishing/discussion medium, 3) a link bookmarking/discussion software, and most importantly, 4) a grouping mechanism that allows you to bundle the above services in the context of a group of friends, acquaintances, or family. We see these utilities as being archetypical “software shapes” that are inherently flexible and open for interpretation in terms of their use, but we have wild expectations for how these software shapes will evolve in the near future. Later design output and supplementary writing will expand upon what we mean by this.
19−
20−Functionally, OS 1 has been designed to serve as a bridge between [OS 0](https://urbit.org/blog/landscape-a-portrait/) (The first interface in Urbit’s evolutionary chain) and OS 2 (Urbit’s eventual departure from the web browser context). In its service as a “bridge”, we designed OS 1 to extend from the baseline app-like “module” experience first defined in OS 0, while granting it new affordances that gesture towards nascent conceptions of “communal computing” we have planned for OS 2 onward.
21−
22−This year, as the warmer seasons give way to chillier ones, we plan on further demonstrating our vision of what new computers and networks can be and how they feel to use. Until then, we'll be building upon OS 1, our foundation and initial take on what we deem "human-shaped infrastructure."
23−
24−This post serves as a reflection–meditation on OS 1’s initial form development and the attitude we brought to bear in designing it. I will be highlighting a few disparate-yet-interconnected themes we encountered in our design work, and how we materially began to address them.
25−
26−## Products
27−
28−Urbit’s interfaces, and the process by which we build them, are resolutely not projections of the world’s current conception of digital design—that of mass digital product design. Products are sold, bought, and discarded as they are in their physical sense. Digital products are slotted into the [vending machines](https://urcad.es/writing/personal-computer-vending-machine/) we call our phones and are mass produced as candy is produced. Candy is _essentially_ free, and contemporary digital products are _absolutely_ free of cost. If you’re reading this, you probably already have a good idea of what free corporate digital products mean for your privacy.
29−
30−Urbit is distinctly _not_ free (as in freely offered as a service via a corporate entity), and your urbit is distinctly _not_ a product. As we trace over the interfaces we design with our cursors, we’re not building a product, we’re not selling a product, we’re not painting a product, and we’re certainly not decorating a product.
31−
32−Here at Tlon, we’re assembling thoughtful infrastructure you can spend your life using, learning, and extending. We’re attempting to assemble spaces you can one day pass on to friends, close collaborators, or possibly your grandchildren. We are resolute in our practice and stay our hands to the greatest degree possible as a result of this mindset.
33−
34−## Beautiful Infrastructure
35−
36−OS 1, while incremental in its initial expression from OS 0, serves to outline our stance of what sublimely beautiful, useful, and durable digital infrastructure should feel like to inhabit. For the purposes of OS 1, we can imagine “Beautiful Infrastructure” to form the spirit of what we’re building:
37−
38−**Beautiful infrastructure is inhabitable**. You’re not floating in an infinite feed of content streams. You are situated in a defined space with edges you can shift at-will, as your needs deem fit. Our model for inhabitable computing is new and in limited flux, but our vision is long.
39−
40−**Beautiful infrastructure is a gravitational force**. Even if you can’t feel it or directly experience it, well-designed infrastructure is a cohering force. One is grounded with respect to the infrastructure they live alongside.
41−
42−**Beautiful infrastructure is like a [shell](https://en.wikipedia.org/wiki/Shell)**. Well-considered infrastructural projects provide durable, generalized, reusable, and most importantly, _self-designed_ containers around otherwise formless flows of information.
43−The current state of mass software design has gotten many of the “reusable” elements of design down pat, but these structures are optimized to pump ads and information into your brain, algorithmically-sorted-linear-feed style.
44−In Urbit, I can take the conceptual container of "temporal linearity" and use this to shape communication data as I see fit. I should be able to shape once-linear communication and cast it into a nodal communication model: My DM is now a MUD.
45−
46−Truly beautiful infrastructure undergirds the daily exchanges people actually care about—I don’t drink plumbing, I drink the water it carries and protects.
47−
48−Another way of thinking about “Infrastructure” (here defined loosely as “the _truly_ essential structures that allow society at varying scales to operate”) is to think about it in terms of interpersonal support structure.
49−
50−We deeply hope that Urbit can form a support structure for you and your community.
51−
52−These 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?
53−
54−![](https://media.urbit.org/site/posts/essays/infrastructural-2.jpg)
55−
56−## Expressing Infrastructure
57−
58−OS 1 was optimized from an interface design standpoint to ensure that a new inhabitant viscerally felt like there was a “space to inhabit”, or a “canvas to be painted”, or a set of simple and fundamental digital structures they could arrange to make their computer their own.
59−
60−Counterintuitively, designing around this notion of a "rich blank slate” required OS 1 to be designed in a manner that _almost_ results in it feeling incomplete, or on the verge of appearing deeply unremarkable.
61−
62−A few key design decisions emphasized the above gestalt we sought to express:
63−
64−- We decided very early on to revert the colorful presentation of Modulo to a literal blank slate—OS 1 is much like a sheet of graph paper now.
65−- All typography and typographic representation was severely flattened. This decision was one of our more drastic ones, and granted OS 1 a sense of being somewhat more "undirected" in terms of its form. We hope that as our system becomes more robust, users can decide which elements of their systems require emphasizing, to feel most at home with their information.
66−- The majority of graphics used throughout the system were rendered into black and white line drawings. As architectural schematics and orthographic projections flatten their representation of reality so an architect can “see structure” easier, we made the decision to express a visual foundation that felt more like a diagram than an ergonomic user interface.
67−- In its visual simplicity, OS 1 was essentially arranged to emanate the quality that modifying the underlying system was a simple task. Rather than present Urbit's first users with beautiful artistry and a sense that our infrastructure was to remain untouched and sacred, we decided to present a visual face to the project that felt nearly rudimentary, nothing outside the realm of editorial capability for the average person.
68−
69−Many other small constraints have been set into place to build what we truly believe to be simple, durable, personal, digital infrastructure.
70−
71−While visually primitive, OS 1 has managed to manifest a rich systematic expressiveness based on how it seems to be currently inhabited. We've been enjoying witnessing the ways people are beginning to interpret and make use of the faculties provided to create communal computing experiences of their own.
72−
73−What's most wonderful to observe is the fun people are having in striking out on their own in this collective endeavor. More than anything, we hope Urbit’s inhabitants are having a good time and learning to enjoy computers again.
content/blog/interplanetary_commerce.mddeleted−37
@@ -1,37 +0,0 @@
1−+++
2−title = "Interplanetary Commerce"
3−date = "2021-04-08"
4−description = "OS-level commercial primitives."
5−tags = ["bitcoin"]
6−
7−[extra]
8−author = "Christian Langalis"
9−ship = "~pindet-timmut"
10−image = "https://media.urbit.org/site/posts/essays/ocean.jpeg"
11−+++
12−
13−![ocean](https://media.urbit.org/site/posts/essays/ocean.jpeg)
14−
15−## Paying
16−
17−A 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.
18−
19−Things only accelerate from here. Our next objective, to integrate Lightning Network capability, is now an [active bounty](https://gist.github.com/timlucmiptev/53ef1d290e55ea2fa25d9df681c32695) and open for applicants. Early on, we [recognized](https://www.youtube.com/watch?v=DTvRVHMbrcY) the congruence and compatibility between the Urbit and Lightning networks. Routing Lightning payments is an obvious business model for Urbit providers, one that can even nucleate new features onto Lightning itself. What we’re ultimately driving at is fully-sovereign Bitcoin usage, with the UX of the Cash App.
20−
21−## Being Paid
22−
23−> 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?
24−>
25−> **Herman Melville**
26−
27−However, 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.
28−
29−First, digital cottage industry, the “creator economy”, is blossoming. Streaming, podcasting, and writing on platforms like Youtube, Patreon, and Substack has been big business [lately](https://otherlife.co/barbarians-past-the-gate/). What fintech did to “unbundle the banks", we will now do to media monopolies and their centralized distribution platforms. With the introduction of Urbit payments, you can syndicate, distribute, and monetize your media on Urbit. By selling access to a private group containing content, digital creatives can begin doing this today.
30−
31−Second, Urbit-native [service providers](https://urbit.org/blog/providers/) are now operating at scale. Companies offering Urbit hosting, onboarding, Urbit IDs, and software now communicate with their customers directly on the network. A basic set of commercial tools will make their processes more efficient. Storefront interfaces, paywalls, CRM, and reputation tools will replace the ad-hoc assemblages they currently use.
32−
33−The Urbit Foundation is soliciting contributors to this project through Urbit Grants. If you’re interested in working on any of these components [send us a proposal](https://grants.urbit.org/create).
34−
35−## An Ocean
36−
37−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/urbitcoiners) and [Urbit Community](web+urbitgraph://group/~bitbet-bolbel/urbit-community/graph/~darrux-landes/business-building-on-urbit).
content/blog/introducing-os1.mddeleted−140
@@ -1,140 +0,0 @@
1−+++
2−title = "Introducing OS 1"
3−date = "2020-04-29"
4−description = "OS 1 is somewhere between ‘productivity software’ and a ‘social network’. We think it’s the beginning of an altogether new breed of social computing."
5−
6−[extra]
7−author = "Galen Wolfe-Pauly"
8−ship = "~ravmel-ropdyl"
9−image = "https://media.urbit.org/site/posts/essays/intro-os1-landscape.png"
10−+++
11−
12−<video class="ba w-100" autoplay loop src="https://media.urbit.org/site/posts/essays/intro-os1.mov"></video>
13−
14−## Introducing OS 1
15−
16−OS 1 is a simple, unified system for building digital communities. OS 1 is for groups of people sharing messages, links, and notes on Urbit.
17−
18−We designed and built OS 1 for ourselves, and we’re really enjoying using it every day. Instead of figuring out how to duct tape together apps and services, we use a single system to stay connected with the company and broader Urbit community that we really trust. OS 1 makes it feel like our company and community has a place in the digital world to call home.
19−
20−Most groups of friends and collaborators juggle apps and services to stay connected in the digital world today. We think OS 1 is a much better model. It’s still too early to ask the whole world to switch over to it — but we’re ready to help onboard our friends and adjacent communities into Urbit to have them try it out and get their feedback.
21−
22−First, let’s walk through what OS 1 is and how we’ve been using it. Then, if OS 1 is interesting to you, we’ll tell you how to apply for a community grant.
23−
24−Here we go:
25−
26−## What is OS 1?
27−
28−OS 1 is a very simple, integrated tool for messaging, sharing links, and writing with a group of people. OS 1 is somewhere between ‘productivity software’ and a ‘social network’. We think it’s the beginning of an altogether new breed of social computing.
29−
30−OS 1 isn’t our first attempt to build an interface for Urbit, but it’s certainly the most complete. OS 1 is the first Urbit interface that doesn’t feel like an experiment.
31−
32−Today, when you boot Arvo (the Urbit OS kernel) and connect your browser to it, you’ll see OS 1. OS 1 isn’t the only possible client for Arvo, though. Anyone could build their own client or, since it’s completely open source, modify OS 1 however they like.
33−
34−For most people, out of the box, OS 1 feels like an app. Given that it’s running on Urbit OS — it’s much more than that. It’s a full-fledged general purpose virtual computer that’s secure and private to you. We’ll come back to what that means at the end.
35−
36−Let’s walk through the features of OS 1 one by one to see what it’s like.
37−
38−### Groups
39−
40−![](https://media.urbit.org/site/posts/essays/intro-os1-groups.png)
41−
42−The 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.
43−
44−A group of friends might just share a few chat channels. A reading group might just share a publish channel for discussion of what they’re reading and a links channel for upcoming books. As a company, we share a variety of chat, publish, and links channels to get things done and communicate. There are chats for each area of work, publish channels for digests and feature discussion, and links channels for music, influences and references, for example.
45−
46−Each person in a group is identified by their [Urbit ID](https://urbit.org/understanding-urbit/urbit-id/): a short, memorable name that you own with a private key (and belongs to you completely). Each group is private and requires an invite. Groups aren’t discoverable. They’re meant to be high-trust communities of people. More like a commune than a public event.
47−
48−Let’s walk through each module and talk about what they can do.
49−
50−### Chat
51−
52−![](https://media.urbit.org/site/posts/essays/intro-os1-chat.png)
53−
54−Chat 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.
55−
56−First, each chat channel is only shared between the host and the members of a chat. When you DM with people, messages are sent peer to peer. The system is, in fact, decentralized and pseudonymous by default. No one knows anything about you outside of your Urbit ID.
57−
58−Second, each chat message is encrypted and signed by your Urbit ID. Again, we don’t call Urbit ‘secure’ yet since it’s unaudited — but we’re working to have Urbit audited this year.
59−
60−Third, chat in Urbit OS is a protocol for sending messages between computers on the network (known as “[ships](https://urbit.org/docs/glossary/ship/)” and identified by their Urbit IDs). It’s easy to imagine extending chat in all kinds of fun and interesting directions: chats that only accept certain message types, chats that have disappearing history, chats that you can only post to during certain times of day, and so on.
61−
62−(If you’re curious to try one of these things, or have an idea about something you’d like to experiment with — consider submitting a proposal in our [grants program](https://grants.urbit.org/). We regularly reward contributor work with address space.)
63−
64−We think of chat as a primitive, not simply a ‘better IRC’. But even in the rudimentary form it’s in today, chat is essential to delivering a feeling of being at home. There’s no way to deliver a complete interface for groups without chat.
65−
66−Anyway, not everything can happen in a chat. Let’s keep moving.
67−
68−### Links
69−
70−![](https://media.urbit.org/site/posts/essays/intro-os1-links.png)
71−
72−Links 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.
73−
74−We use links to collect external references and track things we’re thinking about. We’re always looking at things going on outside our small digital universe and talking about them. Links lets us keep an archive of those discussions.
75−
76−We originally imagined links as evolving into more of a general-purpose ‘collection creation’ interface. One where you can pull together images, video, URLs, maybe even runnable code and so on into a single channel. We’ll get there.
77−
78−### Publishing
79−
80−![](https://media.urbit.org/site/posts/essays/intro-os1-publish1.png)
81−
82−Publishing 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.
83−
84−We use publish for both long-form discussion and one-way communication about what we’re working on in its current form. The editor is calm and simple. In distraction-free mode, it’s a nice place to put a note together.
85−
86−Publish, like all our other modules, is an interface to a generalized protocol for storing text. We have high hopes for how Publish can evolve into a flexible tool for notetaking and discussion with richer content types and better controls over structuring discussion.
87−
88−### Modules
89−
90−![](https://media.urbit.org/site/posts/essays/intro-os1-home.png)
91−
92−You’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.
93−
94−The clock and weather tiles are simple indications of the state of the outside world. We built them because they’re things we wanted to be able to check in on often. When you’re spending much of the day in front of a computer, it’s nice to know if you have enough daylight left to get some exercise in.
95−
96−### Dojo
97−
98−![](https://media.urbit.org/site/posts/essays/intro-os1-dojo.png)
99−
100−The 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.
101−
102−## Why we made OS 1
103−
104−We made OS 1 because we wanted to begin the process of re-centralizing our digital lives on a platform we actually control. Replacing all the services we use all at once is impossible — so we picked a suite that we felt would work nicely together. We’ve always felt that one of the most exciting things about Urbit is in bringing your digital life together in a way that feels like home.
105−
106−The digital home, we think, is what our computers are meant to be but simply can’t be in a world of cloud services. Once upon a time, thirty years ago, your personal computer was an open-ended tool that was reasonably simple to understand and use, lasted a pretty long time, and belonged to you in every way.
107−
108−OS 1 is a first step down the road back to a system that’s simple, durable, and belongs to you in every way. It’s a long road, and we feel like we’ve made a very significant step forward.
109−
110−One really critical thing about OS 1 is the pattern of ‘groups sharing modules’. This pattern makes it perfectly clear how a virtual computer can outcompete a bunch of different services. As the collection of modules in OS 1 → N grows, we make it easier for others to contribute modules, and we increase the flexibility of connecting modules our system quickly outruns the messy, disconnected world we’re currently stuck in.
111−
112−OS 1 isn’t mature enough to be _easy_ for outside contributors to add modules — but it is [open source](https://github.com/urbit/urbit), and anyone is welcome to tinker and experiment with modifying it. We run a [grants program](https://grants.urbit.org/) to reward contributors for improving any part of Urbit OS. As the system matures we expect this program to expand and accelerate.
113−
114−## Looking ahead
115−
116−By using OS 1 you inherit all the benefits of running Urbit OS. Each user runs their own node completely independently. Everyone using Urbit OS owns their own identity and data. And every Urbit OS node communicates over an encrypted and authenticated network. (Again, We don’t yet call Urbit OS ‘secure’ because it hasn’t been audited.)
117−
118−OS 1 is just a client for Urbit OS, of course. Other people could write their own clients that are completely different — like different windowing systems for Linux. Our hope is to build a client that includes interface components and frameworks that make it exceptionally easy to build modules for groups of people to share. Other clients could potentially invent entirely new ways of interacting with the underlying system.
119−
120−There are two threads by which OS 1 evolves into OS 2 and beyond. First, by becoming a more powerful system and second, by adding modules to expand our supported modes for interacting.
121−
122−In its current form, OS 1 by no means exposes all the power of the underlying system. Our approach to building OS 1 was to focus on the quality of the UI, and accept that it will feel like a monolithic app. We’re already working to evolve our interface into something that feels flexible to an ordinary user and developers can easily extend and build on top of.
123−
124−Specifically, we want better affordances for putting multiple streams of data on the screen at once, better keyboard shortcuts and navigation affordances, better libraries and frameworks for building modules. We want a standalone client and a single login system. These are some of the things currently on the drawing board.
125−
126−As far as modules are concerned, there are too many things we’d like to build to list them all. We’d really like to have threaded conversations; short, Twitter-style messages; biometric and status tracking; an e-book reader and annotations system — and that’s just to name a few we see in the near term.
127−
128−We’ve long since felt that the most powerful thing about Urbit is that it’s a general-purpose system. OS 1 puts us on the road to giving people an actual material sense of what using a general-purpose networked computer feels like.
129−
130−As we expand the affordances of the system and add modules over the course of OS 1, 2, and beyond we expect to deliver a system that can foster everyday creativity. There’s a long road ahead, in the best possible sense. We’re really excited about what the future holds.
131−
132−### Becoming a homesteader
133−
134−![](https://media.urbit.org/site/posts/essays/intro-os1-landscape.png)
135−
136−As 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.
137−
138−Each community that’s selected will get a block of address space to share, direct support, and (in the near future) free hosting.
139−
140−Please tell us a bit about yourselves [here](https://urbit.org/community/community-grants/).
content/blog/introduction-to-the-combine-dao.mddeleted−46
@@ -1,46 +0,0 @@
1−+++
2−title = "Introduction to the Combine DAO"
3−date = "2022-07-01"
4−description = "Inside the mind of the Combine"
5−
6−[extra]
7−author = "Anthony Arroyo"
8−ship = "~poldec-tonteg"
9−image = "https://media.urbit.org/blog/cortina-ampezzo.jpg"
10−+++
11−
12−![Cortina-D'Ampezzo-1200x1200px.jpg](https://media.urbit.org/blog/cortina-ampezzo.jpg)
13−
14−_This is cross-posted from [The Combine DAO Blog](https://blog.the-combine.org). If you'd like to comment, join the public [Urbit group](https://urbit.org/groups/~famreb-todmec/the-combine-public)_
15−
16−Until a couple of weeks ago, The Combine was a subdivision of the Urbit Foundation with a budget earmarked to invest in new projects. As of Urbit NYC that all changed. Now we’re an honest-to-goodness DAO built on Urbit—by Urbit maximalists, for Urbit maximalists. We pool assets to invest in teams building new tools, products and services for the Urbit Universe. Our members are investors, engineers, founders and galactic senators.
17−
18−In this post we'll talk about what we're aiming to do and why we’re in the best position to do it. In a future post, we'll dive into technical and strategic insights drawn from building a DAO on Urbit.
19−
20−## Our Objective
21−
22−Our objective is simple: support organizations in building high-value projects on Urbit. Urbit address space has intrinsic, tradeable value, as is the case with many crypto assets. But, unlike most crypto, that’s just the tip of the Urbit iceberg. Where most crypto assets are built to be owned and exchanged, Urbit is built to be owned and used. It has the potential to replace virtually every centralized part of Web2 you use (but don’t own) today.
23−
24−The Combine DAO invests in teams working on projects that generate and capture value beyond Urbit address space. The price of address space reflects confidence in Urbit's user growth, but every increase in utility to an Urbit user — that is, every time a user can do more with their Urbit — creates additional value. The Combine takes advantage of this upside.
25−
26−For example, one of our portfolio companies, [Uqbar](https://uqbar.network), is building a smart contract platform on Urbit. The Uqbar network will use Urbit ships as nodes in their network, as ZK provers and sequencers, creating an ZK Rollup L2 with the full power of general compute and identity. While their use of the Urbit network as part of their infrastructure will drive demand for planets, stars and galaxies, the value of Uqbar is potentially much greater than that demand.
27−
28−So, members of The Combine DAO should believe at least one of two things:
29−
30−- That products built on Urbit can outpace the value of address space alone, and that The Combine is in the best position to capture that value.
31−- That successful projects built on Urbit will enhance the value of Urbit address space.
32−
33−## Our Pipeline
34−
35−The Combine works hand-in-hand with the Urbit Foundation, meaning we have unparalleled visibility into the development of new projects and teams on Urbit. The Foundation has been working hard to shore up Urbit's developer pipeline, with Hoon School constantly bringing in new developers. The last cohort had 61 finishers, seven of whom had no previous programming experience. The Foundation’s [Grants](https://urbit.org/grants) program is active with over 40 active grants. The Combine and The Foundation continue to work together to identify, nurture and launch projects in need of funding.
36−
37−## Our Membership
38−
39−Startups are risky by nature. Add Urbit’s novel technology and you’ve got more than your share of pitfalls. The Combine mitigates these risks through its membership. Combine members are long-time supporters of the project who have run startups, exchanges and have invested in successful technology on Urbit and beyond. The membership can help lead teams past challenges inherent to all new ventures. We're familiar with the technical and product landscape of Urbit and its adjacent technologies. All of us have experience building technology, on Urbit and outside it, which enables us to provide valuable coaching and due diligence.
40−
41−Another of our portfolio companies, [Holium](https://holium.com), is building unified tooling for DAOs. They started with an application that the Combine DAO uses internally: a voting app called “Ballot.” Holium’s founder has been working on a unified environment for DAOs for some time, but it wasn’t until he came to Assembly 2021 that the pieces finally clicked and he realized that Urbit was the correct stack for Holium’s projects. As he built Ballot on Urbit, The Combine provided product feedback, investor intros, and access to experienced contractors and personnel. Now we’re actively dogfooding Ballot as a core element in The Combine stack.
42−
43−In the coming weeks we’ll dive into the details of why we think Urbit is the natural home for DAOs. For now, we’ll just say that Urbit’s unified stack opens up a unique level of ownership and customizability to DAO builders. The Combine, as a DAO built on Urbit, to support Urbit, is test driving this use case. What we learn here will feed back into diligence, outreach and development priorities for the Foundation.
44−
45−In the next post, we’ll share technical insights for DAOs gleaned from our own experiences building The Combine DAO on Urbit.
46−
content/blog/io-in-hoon.mddeleted−342
@@ -1,342 +0,0 @@
1−+++
2−title = "Input and Output in Hoon"
3−description = "Let's talk about IO in Urbit."
4−date = "2020-12-15"
5−
6−[extra]
7−author = "Philip Monk"
8−ship = "~wicdev-wisryt"
9−image = "https://media.urbit.org/site/posts/essays/zion-canyon-1.jpg"
10−+++
11−
12−![canyon](https://media.urbit.org/site/posts/essays/zion-canyon-1.jpg)
13−
14−Let'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.
15−
16−All 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!
17−
18−## The three styles of IO
19−
20−I will call these styles imperative IO, monadic IO, and state machines (note that this classification refers only to the experience of using them and the program structure they dictate). An imperative programming language can use any of these and a functional programming language can use any of them.
21−
22−### Imperative IO
23−
24−Imperative languages (such as C and Python) perform IO by calling a function in the middle of whatever they were doing. Anywhere, in any statement, you could have IO.
25−
26−In this example and others to follow, the task will be to read a filename from the command line, read a URL out of that file, and fetch the contents at that URL.
27−
28−```
29−output = fetchUrl(stripWhitespace(readFile(cliInput())))
30−```
31−
32−For readability, intermediate variables would be a good idea, but nothing stops you from nesting IO this way.
33−
34−### Monadic IO
35−
36−Languages that use explicit monads for IO (such as Haskell) perform IO by running IO behind a bind operation, which I'll notate with `<-`. Thus, while you can't put IO _anywhere_, the general structure is a sequence of IO operations.
37−
38−```
39−fileName <- cliInput()
40−url <- readFile(fileName)
41−output <- fetchUrl(stripWhitespace(url))
42−```
43−
44−[Tackling the Awkward Squad](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/mark.pdf) is the canonical description of monadic IO, and does a great job of explaining how the Haskell community decided to use this as their primary IO style.
45−
46−### State machines
47−
48−Languages that use explicit state machines for IO (such as Elm) perform IO by accepting events and producing a list of effects.
49−
50−```
51−event :: Initialize
52− | CLIInput text
53− | FileInput text
54− | HTTPResponse body
55−effect :: CLIInput
56− | ReadFile fileName
57− | FetchUrl url
58− | Print text
59−main(event) {
60− switch event {
61− Initialize -> [CLIInput ~]
62− CLIinput fileName -> [ReadFile fileName]
63− FileInput url -> [FetchUrl stripWhitespace(url)]
64− HTTPResponse body -> [Print body]
65− }
66−}
67−```
68−
69−The effects produced are not functions but data.
70−
71−It's important to note that this example is chosen to highlight a particular kind of IO — sequences of events. Further, this example has no persistent state — each IO operation is a pure function of the output of the previous one.
72−
73−## A stateful, loopy example
74−
75−Let's look at another type of program: a simple HTTP server that you can give text at the CLI, which will respond to all HTTP requests with that text.
76−
77−Imperative:
78−
79−```
80−text = "no text entered yet"
81−while (true)
82− cli = readCli()
83− if (cli != Null)
84− text = cli
85− request = readHttp()
86− if (request != Null)
87− respond(request,text)
88−```
89−
90−Monadic:
91−
92−```
93−loop("no text entered yet")
94−
95−where:
96−
97−loop :: text -> IO Null
98−loop =
99− input <- readInput()
100− switch input
101− CLIInput newText -> loop(newText)
102− HTTPRequest request ->
103− _ <- respond(request,text)
104− loop(text)
105−```
106−
107−State machine:
108−
109−```
110−text = "no text entered yet"
111−main(text,event) {
112− switch event {
113− CLIInput newText -> [newText, Null]
114− HTTPRequest request -> [text, HTTPResponse text]
115− }
116−}
117−```
118−
119−Again, note the response in the state machine is data, not a function.
120−
121−I'm not trying to make a point about which type is better in general. There's a pretty strong argument that in the first example, imperative was the best option, followed by monadic, followed by state machine. There's an equally strong argument that the second example is most naturally represented by the state machine.
122−
123−Look at how state is handled in the monadic example. Formally, bind composes functions, so that every time you see a `<-` there's actually a new function (closure/delimited continuation) being created and stored for when we receive a response. All variables in scope are stored in that closure, so we can conveniently access them later without explicitly storing them. However, the state we preserve over time varies a lot. In this example, it varies between storing `loop`, `[loop input]`, `[loop input newText]`, and `[loop input request]`.
124−
125−By comparison, the state machine does not store intermediate values, it only stores its explicit state. While this is somewhat less flexible, it puts the permanent state front-and-center.
126−
127−I'll reiterate that all of these are possible to implement in purely functional languages, and further they can all be implemented in terms of each other. State machines are trivially implementable -- it's just a function [state event] -> [new-state (list effect)]. Monadic IO can be implemented directly (as in Haskell) or on top of state machines by storing continuations in your state. Imperative IO is somewhat more difficult but should be possible through algebraic effects.
128−
129−When inventing a new system, you should consider which of these you intend to support based on the sort of code you expect to see. For example, a scripting language will almost always benefit from imperative (or at least monadic) style.
130−
131−## In Urbit
132−
133−So much for exploring the space of IO solutions. In terms of deployed code on Earth, the split is about 90% imperative, 5% monadic, and 5% state machine. In Urbit, the split is about 90% state machine and 10% monadic. This is what I intend to explain and defend.
134−
135−Urbit's OS is called Arvo; it has several "kernel modules" called vanes, and it has userspace applications. Colloquially these are called "apps," but when speaking about them abstractly, it's helpful to use their more specific name: ["agents"](https://developers.urbit.org/reference/glossary/agent). Arvo, the vanes, and agents are all structured as explicit state machines.
136−
137−In addition, there are ["threads"](https://developers.urbit.org/reference/glossary/thread), which are structured as monadic IO. Note there's only a superficial resemblance to Unix threads: they are not executed in parallel and they don't share memory, or at least not any more than agents do. They're simply a computation that takes an argument and produces a result, possibly after doing some IO, structured monadically.
138−
139−As you can see, all the lowest levels of Arvo are explicit state machines, and only the highest layer supports monadic IO. To see why this is the case, let's list advantages and disadvantages to each type. Note that, while I'm speaking specifically of agents and threads in the context of Urbit, these are fundamental properties of monadic and state machine IO.
140−
141−Agents are:
142−
143−- Upgradable. Since the state is explicit, you can upgrade an agent in-place by supplying a new state machine and a function from the old state type to the new state type. This is very similar to a database migration.
144−
145−- Robust. A state machine must accept any input at any time. If it receives unexpected input, it must have had explicit error handling for that input, since it's one of the types in the switch statement. Thus, it's relatively easy to stay in a consistent state.
146−
147−- Permanent. Since it's upgradable and robust, there's no reason to stop its running.
148−
149−- Hard to write long sequences of IO. Long sequences of IO create many possible states, and you must handle any input in any state. This can result in complex, hard-to-follow code with code paths that are rarely if ever taken.
150−
151−Threads are:
152−
153−- Not upgradable in-place. Since the state is implicit, you can only cleanly upgrade by (1) killing the thread and restarting it or (2) letting it resolve to a defined "upgradable state" periodically, usually at the top of a "main loop". If you do (2), then you are in fact structuring it as a state machine, so the other advantages of threads are compromised.
154−
155−- Fragile. If we don't receive expected input, the default behavior is to be stuck waiting for input. You must remember to add any error-handling features you want, and it's easy to end up in an inconsistent state.
156−
157−- Impermanent. Since a thread can't be upgraded and may get stuck in case of unexpected input, a thread can't be expected to last forever. It must be "rebooted" from time to time.
158−
159−- Easy to write long sequences of IO. Just...write the IO one line at a time.
160−
161−Arvo proper and the vanes are permanent pieces of software and, for this reason, state machines are more natural.
162−
163−I'll note that other kernels, like the Unix kernel, use imperative IO. The difference is that Unix isn't permanent in itself — it only lasts until you reboot. Since your permanent state is stored externally, you don't need to be upgradable or permanent. With sufficient discipline you can write robust C code, so it makes sense to use imperative style. Even so, a lot of C code is written in a state machine style; even if it doesn't need to be upgradable, it's worth it for the robustness and concurrency advantages.
164−
165−However, Arvo is a single-level store — all of its state is permanent. This is very convenient and eliminates many long-tail bugs, but it also means we need to code for permanence, and that's much easier when you structure your code with explicit state.
166−
167−Further, 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:
168−
169−```
170−loop()
171−
172−where:
173−
174−loop =
175− request <- receiveRequest()
176− agent = lookupAgent(request)
177− response <- callAgent(agent, request)
178− _ <- sendResponse(request, response)
179− loop()
180−```
181−
182−This 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?
183−
184−The naive solution in monadic code is to say that you can only handle one request at a time, and if an upgrade happens you just drop outstanding requests. You can resolve both of these by introducing a sort of main loop, which is just a way of saying "turn it into a state machine".
185−
186−In a state machine, the naive solution is:
187−
188−```
189−state :: (map request agent)
190−main(state, event) {
191− switch event {
192− HTTPRequest request ->
193− agent = lookupAgent(request)
194− [put(state, request, agent), CallAgent agent request]
195− AgentResponse request response ->
196− [del(state, request), HTTPRespond request response]
197− }
198−}
199−```
200−
201−Upgrading this is trivial, since the state (map of requests to outstanding calls to agents) is explicit. It also trivially handles concurrent requests.
202−
203−I won't claim this is easier or harder to write than the monadic version, but it has the properties we need at this level of the system.
204−
205−Userspace agents similarly are permanent entities that need to not lose data or get stuck. For this reason they’re structured as state machines.
206−
207−A helpful comparison is that explicit state machines are basically Mealy machines, the kind you might have learned about in an introductory digital design class. This shouldn't be surprising; a digital circuit must always be consistent because it can't be manually "rebooted", and their input and output is highly formalized. By contrast, a Rube Goldberg machine doesn't have the same constraints; which is why they're a lot more fun!
208−
209−It's notable also that explicit state machines are considerably more declarative than imperative or monadic IO. Not everyone thinks that's a good thing, but anyone who defends functional programming should see some advantages to that.
210−
211−However, userspace sometimes needs to perform long sequences of IO. Let's look at an example where we want to fetch the front page of a site and the first couple comments on each story. HTTP is unreliable, so on failure we retry five times.
212−
213−Monadic:
214−
215−```
216−topStories <- fetch(topStoriesUrl)
217−loop(topStories)
218−
219−where:
220−
221−loop :: topStories -> IO Null
222− if topStories is Null
223− return Null
224− comments <- retryLoop(5,head(topStories))
225− otherComments <- loop(tail(topStories))
226− append(comments,otherComments)
227−
228−retryLoop :: [n story] -> IO Comments
229− comments <- fetchComments(story)
230− if comments is HTTPError:
231− if n == 0:
232− bail
233− else:
234− retryLoop(n-1, story)
235−```
236−
237−State machine:
238−
239−```
240−state :: Initial
241− | FetchingTop
242− | FetchingStory comments stories retries
243− | Done comments
244−
245−main(state, event) {
246− switch event {
247− Initialize ->
248− assert state == Initial
249− [FetchingTop, Fetch topStoriesUrl]
250− HttpResponse response ->
251− switch state {
252− FetchingTop ->
253− [FetchingStory Null stories 5, FetchComments head(stories)]
254− FetchingStory comments stories retries ->
255− if response is HTTPError:
256− if retries == 0:
257− [Initial, Null]
258− else:
259− [FetchingStory comments stories retries-1,
260− FetchComments head(stories)]
261− else:
262− comments = append(response,comments)
263− if tail(stories) is Null:
264− [Done comments, Null]
265− else:
266− [FetchingStory append(comments,response) tail(stories) 5,
267− FetchComments head(tail(stories))]
268− }
269− }
270−}
271−```
272−
273−With 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.
274−
275−The monadic version, on the other hand, flows cleanly down the page. We can factor out generic functionality like "retry this request n times" to make the essence of the computation clear.
276−
277−Suppose you have to upgrade this. In the state machine, you can see exactly which stage of the computation you're in and write specific code to upgrade cleanly.
278−
279−Threads, as we've discussed, can't be upgraded in-place. Let's be real though: we're downloading comment sections, not regulating a nuclear reactor. If we get a better version of this script, just kill the old one and start the new one from scratch. What's a couple extra HTTP requests?
280−
281−This suggests a general division of workloads: code which needs to be permanent, upgradable, and concurrent should generally be a state machine. Code with long or complex sequences of IO and definite termination should generally be a thread.
282−
283−These aren't completely mutually exclusive, but it's surprising how often they are.
284−
285−### Jael: a case study
286−
287−When you need to do something permanent and upgradable, but you also need to do long sequences of IO, the main trick is to factor your problem into both an agent and a thread (or several).
288−
289−As a case study, consider Jael, one of our vanes. This maintains our PKI state, which it downloads over HTTP from an Ethereum node. Downloading from an Ethereum node is a complex sequence that starts with fetching its most recent block number, then fetching all the blocks we haven't seen and scanning for transactions we care about. We also maintain a map of block hashes to block number, and if we see that a block's parent doesn't have the hash we expect, that means a reorganization has occurred, so we must "rewind" one block at a time until we find where the fork happened, then restart going forward.
290−
291−You don't have to understand this sequence of IO; it's sufficient to see that it's complex and must be exactly right. We used to do this in a state machine directly in Jael. This data is, of course, permanent and needs to be accessible to the rest of the system, so Jael must be a state machine.
292−
293−However, we had many small mistakes in this sequence of IO, some of which only appeared during unusual events, such as when an HTTP request failed at the same time as a reorganization happened.
294−
295−We're in a bit of a bind, though: Jael has to be a state machine. The solution is to factor out the act of getting updates into a thread while the main PKI state is stored in the state machine in Jael.
296−
297−This 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:
298−
299−```
300−syncEthereum oldBlockNumber -> IO [newBlockNumber, newTxs]
301−```
302−
303−Jael 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.
304−
305−From Jael's perspective, it looks something like:
306−
307−```
308−state :: State block txs outstandingThread
309−main(state,event) {
310− switch event {
311− Initialize -> [State 0 Null Null, StartTimer (now + five minutes)]
312− TimerFired ->
313− effects = If outstandingThread is Null
314− then Null
315− else [Kill outstandingThread]
316− newId = newThreadId()
317− [State txs newId,
318− append(effects,
319− StartThread newId syncEthereum(block),
320− StartTimer (now + five minutes))]
321− ThreadFinished Failure -> [State block txs Null, Null]
322− ThreadFinished Success newBlockNumber newTxs ->
323− [State newBlockNumber append(txs,newTxs) Null, Null]
324− }
325−}
326−```
327−
328−In 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.
329−
330−What about upgrading? We've already said we can handle the thread dying for arbitrary reasons, so if an upgrade comes in, we just kill it. We can upgrade Jael's state machine easily since its state is very simple.
331−
332−## Recap
333−
334−Let's recap what we've covered:
335−
336−- There are three styles of IO: imperative, monadic, and explicit state machines.
337−- Urbit supports explicit state machines (agents) and monadic IO (threads).
338−- Explicit state machines are preferred for permanent, robust, concurrent code.
339−- Monadic IO is preferred for short-lived code with complex IO.
340−- If a state machine needs to perform complex IO, it should encapsulate it in a thread so that, from the perspective of the state machine, it's simple IO.
341−
342−Hopefully it's fairly clear why Urbit uses explicit state machines in most situations. More than anything else, our goal is to build software that can last forever. Explicit state machines are a crucial tool for that.
content/blog/iot.mddeleted−445
@@ -1,445 +0,0 @@
1−+++
2−title = "Lunar Urbit and the Internet of Things"
3−date = "2021-04-29"
4−description = "Potential future use cases of moons for industry and consumers"
5−
6−[extra]
7−author = "Jonathan Paprocki"
8−ship = "~datnut-pollen"
9−image = "https://media.urbit.org/site/posts/essays/phobos.jpeg"
10−+++
11−
12−![phobos](https://media.urbit.org/site/posts/essays/phobos.jpeg)
13−
14−Each of the ~4B 32-or-fewer-bit or [Azimuth](/docs/glossary/azimuth)
15−identities, namely [planets](/docs/glossary/planet),
16−[stars](/docs/glossary/star), and [galaxies](/docs/glossary/galaxy), may
17−spawn ~4B 64-bit child identities known as [moons](/docs/glossary/moon).
18−Moons are the undeveloped wild outback of Urbit, with a story waiting to be told
19−that promises to be as enormous in scale as the cloud personal computing story
20−told by planets, and possibly even more so.
21−
22−Throughout this piece, we use "Earth" and "Mars" in the Urbit sense. "Earth"
23−refers to the [current computing
24−paradigm](https://en.wikipedia.org/wiki/Big_ball_of_mud). "Mars" refers to the
25−perfected computing paradigm that Urbit aspires to be, but also to the current
26−and future state of Urbit.
27−
28−Today we will review the prehistory of moons on Earth, give a snapshot of how
29−moons are being utilized on Urbit in 2021, cover existing issues with consumer
30−IoT and how Urbit resolves them, and speculate what the lunar locus of the Urbit
31−ID address space may become in the future. To keep the futurist scope limited,
32−we primarily speculate on the usage of moons in (industrial) internet of things
33−settings, especially with respect to agriculture, and how they may manifest as
34−the workhorse collection unit of decentralized data markets.
35−
36−For those unfamiliar, moons differ from all other
37−[ships](/docs/glossary/ship) in that they are not independent identities
38−with total sovereignty over their data and keys. Instead, their cryptographic
39−keys are issued and controlled by their parent identity. The relationship
40−between the keys of a parent ship and its moons are analogous to the
41−relationship between primary keys and subkeys in a system like
42−[PGP](https://en.wikipedia.org/wiki/Pretty_Good_Privacy). The parent may revoke
43−or change its child moons' keys at any time. A typical relationship between a
44−planet and a moon may be like one of a human and their smartphone. If you lose
45−your phone, you don't want someone to pretend they are you, operating one of
46−your moons, on the network. The planet can revoke the keys, and the moon stored
47−on the phone becomes inert, no longer able to communicate with the network.
48−While planets and stars also depend on their sponsor to assist with peer
49−discovery and software updates, these relationships rely on mutual agreement,
50−since either party may choose to discontinue the relationship and establish a
51−new one elsewhere. Moons possess no such freedom.
52−
53−### Lunar prehistory
54−
55−![luna](https://media.urbit.org/site/posts/essays/luna.jpg)
56−
57−It may come as a surprise to you that you are already very familiar with moon
58−identities—they've just never been explained as such because the context in
59−which that terminology makes sense didn't exist before Urbit. Moons, in fact, are not
60−a new concept at all. Virtually your entire experience of the internet in the
61−modern era is the experience of someone who possesses some number of moons
62−subordinate to planets who mostly refuse to talk to one another. The feeling you
63−get of constantly moving between silos, juggling accounts, not controlling your
64−own data, etc., is a direct result of the fact that, on Earth, you only possess
65−moons. No planets.
66−
67−We're speaking, of course, of the client-server relationship. From the Urbit
68−perspective, the Facebooks, Twitters, and Googles of the world are planets, and
69−accounts held with these services may be thought of as moons subordinate to
70−those planets. Your account with these megacorps is only yours for as long as
71−they please. If you happen to step on a digital landmine, such as a virus that
72−causes Google's servers to believe you are a bot, you are suddenly banned from
73−their service, often with no recourse. All your data, your connections, your
74−network—vanished. We are all Mark Zuckerberg's moons, and they're armed to the
75−teeth with surveillance equipment.
76−
77−There are two classes of internet users: those with servers who hold all the
78−power, and clients who use those servers in the way prescribed by the owners.
79−Running a server is theoretically accessible to anyone, but practically
80−difficult: server maintenance is a technical endeavor that requires specialized
81−knowledge and substantial time investment. Other barriers exist beyond just the
82−technical: for instance, if you wish to set up your own email server, you will
83−probably be blocked by large providers because unknown email servers are almost
84−always spam. The root cause of this circumstance is that the email protocol
85−lacks [Sybil resistance](https://en.wikipedia.org/wiki/Sybil_attack). Urbit has
86−Sybil resistance built in, eliminating certain kinds of incentives for
87−gatekeeping such as this.
88−
89−We seek to level the playing field by giving everyone a server. We accomplish
90−this by making the process of running your own server (planet) as easy as
91−running your personal computer today. We aren't quite there yet, but we've made
92−leaps and bounds over the past couple of years.
93−
94−Of course, this analogy isn't perfect—Urbit moons are servers themselves, but as
95−they may only act in accordance with the wishes of its parent, they are
96−effectively as locked in degrees of freedom as a client is to a server. The
97−moon's keys may be revoked at any time by the parent. To distinguish these
98−prehistoric moons from Urbit moons, we will refer to them later as "primitive
99−moons".
100−
101−Urbit contends that moons are not the appropriate digital exocortex for a
102−responsible adult. They are for devices, experiments, or your children. We hope
103−that the dominant server-client relationship, which is the primary weapon of the
104−surveillance-industrial complex, will meet its end in the near future.
105−
106−### Moons in the early Martian era
107−
108−![sputnik](https://media.urbit.org/site/posts/essays/sputnik.jpg)
109−
110−In 2021, moons are mostly unused on Urbit. There's a smattering of minor use
111−cases which we'll describe here, but they represent only a tiny fraction of
112−their ultimate potential.
113−
114−Tlon recently launched a survey bot called [Eliza](/blog/eliza), which was
115−initially a comet. We frequently got questions on whether Eliza was actually
116−Tlon's bot, because it could just as easily be a malicious actor posing as Tlon.
117−We soon plan to relaunch Eliza as a moon of `~zod`, which is the most
118−recognizable official galaxy of Tlon. This is to establish that the bot is
119−indeed official; only someone with access to `~zod` is capable of creating a
120−moon of `~zod`, and so a moon of `~zod` automatically carries with it a
121−cryptographic guarantee that you are communicating with an official digital
122−representative of Tlon. On Earth something like this would need to be
123−accomplished with certificate chains but, on Mars, this sort of authentication
124−is baked into the very fabric of the network, rather than as an additional layer
125−on top. This is a very good representative case of how moons naturally inherit
126−the reputation of their parent, even in the absence of any formal reputation
127−systems on Urbit.
128−
129−We see folks using moons as backup identities in case they can't or don't want
130−to access their primary planet for one reason or another. Again, since anyone
131−may verify the parent of a moon, the moon inherits the reputation of its parent.
132−These backups could be vanity identities—for instance, every `~sampel-palnet`
133−has underneath it a moon named `~master-sampel-palnet`[^0].
134−
135−Some use moons to host group(s). Hosting a group inevitably means that that ship
136−will process more network traffic, and a heavily trafficked group may impact a
137−ship's performance. Thus one may wish to offload group hosting duties to a moon
138−to maintain a more performant planet.
139−
140−As we currently lack a real system for 3rd party software distribution (though
141−see this recent [developer call](https://youtu.be/XwICC6Its1E) on a solution in
142−progress), one stopgap has been to download software by syncing a foreign
143−[desk](/docs/glossary/desk) to your ship. This is risky, as buggy software
144−may make break your ship and make it difficult to get running properly again.
145−For this reason, testing new software on the livenet is frequently performed on
146−moons, so as not to risk the parent ship if something were to go wrong.
147−
148−### Internet of Things
149−
150−![telstar](https://media.urbit.org/site/posts/essays/telstar.jpg)
151−
152−Now we start to look towards the future by examining the problems faced by IoT
153−in the present and speculating on how Urbit might solve them.
154−
155−The Internet of Things is much maligned by technologists as a privacy, security,
156−and maintenance nightmare. These products usually depend on phoning home to
157−perform their service, which is inevitably a funnel by which personal data is
158−harvested, an attack surface for hackers to gain access to your home network,
159−and a single point of failure which may render the device useless, all in one!
160−One need look no further than the recent [Ubiquiti
161−breach](https://krebsonsecurity.com/2021/03/whistleblower-ubiquiti-breach-catastrophic/)
162−to see all of these failure modes happening on a massive scale, and this is par
163−for the course. This sort of dynamic is completely antithetical to the Urbit
164−philosophy, so any involvement of Urbit with IoT will reject many fundamental
165−assumptions on how IoT operates today.
166−
167−However, it's important to understand why the current IoT model works like this
168−at all. We posit that it ultimately stems from the fact that today's IoT
169−products are primitive moons for which you do not operate the parent planet.
170−Almost every IoT device operates in the Software as a Service (SaaS) paradigm
171−because most people don't have personal servers that could do all the processing
172−work actually necessary for an IoT device to operate. This is not the _only_
173−reason for this—it's also just more profitable to collect consumer data.
174−However, it's the SaaS aspects which make the whole thing such a catastrophic
175−mess.
176−
177−Imagine a different world: if the server that your device reports to is your
178−own, there is no loss of control over personal data. If the device only
179−communicates on the local network, it will prevent remote hackers and disruption
180−if you internet fails. And if the manufacturer goes out of business, the device
181−will still work-it is not dependent on the manufacturer's servers.
182−
183−The wants and needs of the individual are at odds with the wants and needs of
184−the megacorp, and that mismatch manifests as the antifeatures that plague IoT.
185−By eliminating the SaaS aspect, Urbit solves many of the largest outstanding
186−issues with IoT in a single blow. Digital personal AI assistants have long been
187−an anticipated science fiction prediction and their full realization is on the
188−horizon. But in their current manifestation, many privacy- and
189−security-conscious people would never consider using them at all, since they are
190−inevitably presented as SaaS that requires intimate knowledge of your devices
191−and their stored data. Recommendation engines such as the one used by YouTube
192−offer helpful guidance towards content you'll find appealing, but they're also
193−designed to keep you hooked to the service. These kinds of programs can be
194−useful, but they're dystopian when they come saddled with anti-consumer
195−subroutines. Since your Urbit belongs to you, it can never act against your own
196−interests without your consent. In our lunar vision, your digital personal AI
197−assistant will live on one of your moons, rather than on megacorp's cloud.
198−
199−For web-exposed devices, Urbit offers the same security guarantees that it
200−offers for your personal computer: everything is end-to-end encrypted by
201−default, and signed with keys that one can easily verify as belonging to the
202−node sending the message.
203−
204−[Vint Cerf](https://en.wikipedia.org/wiki/Vint_Cerf) has outlined the case for a
205−system like Urbit ID for IoT use
206−[here](https://cacm.acm.org/magazines/2018/12/232883-self-authenticating-identifiers/fulltext).
207−In brief, that the Urbit ID system allows one to match public keys with devices,
208−bestowing devices with self-authenticating identities. This allows one to trust
209−the communications received from the device to whatever degree the private key
210−is held secure. IP addresses, GPS coordinates, MAC addresses, etc., are not
211−sufficient to generate high levels of trust—they're all temporary, easily
212−spoofed, or both.
213−
214−> One might imagine applying this to the Internet of Things (IOT) in which the
215−> IOT device self-generates a public- and private-key pair and registers the
216−> public key. For example, with a hub or controller so the hub can confirm it
217−> has reached the right IOT device. By the same token, configuration of the IOT
218−> device into an ensemble could include incorporation of the public key of the
219−> controller into a list of valid devices that can command or obtain data from
220−> the now-configured IOT device. Both ends can verify they are talking to the
221−> originally configured devices, assuming no device has lost its private key.
222−
223−Here, the hub or controller referred to would be your planet.
224−
225−Urbit has many other features that make it well-suited for IoT, above and beyond
226−eliminating the SaaS model and providing self-authenticating identities. Many of
227−these additional advantages derive from the fact that Urbit is a [solid state
228−interpreter](/docs/arvo/overview#solid-state-interpreter) and that
229−[Ames](/docs/glossary/ames) is a network of solid-state interpreters
230−equipped with cryptographic identity. We explore this in the next section.
231−
232−### Future lunar cosmotechnics
233−
234−![farm](https://media.urbit.org/site/posts/essays/farm.jpg)
235−
236−We now polish off the old crystal ball and imagine future uses of Martian lunar
237−technology. Particularly, how the tech may develop over time once it becomes
238−widely exposed to the evolution-inducing forces of industry and culture. This
239−section is pure speculation, and I only aim to offer a small glimpse of a
240−potential future, rather than an exhaustive one. This picture will necessarily
241−be biased by my personal proclivities and expertise, or lack thereof.
242−
243−Any discussion on the future of moons is incomplete without mentioning the
244−possibility of [lunar emancipation](https://urbit.org/faq/#more-planets) in
245−order to increase the number of planets. This fascinating topic sees regular
246−discussion in the Urbit Community group, but is outside the scope of this
247−article.
248−
249−In order to respect the reader's time, I'm narrowing our scope to a particular
250−topic: the agriculture industry. I'm also assuming a future with specialized and
251−increasingly small hardware to run Urbit. Right now, a 4 GB Raspberry Pi is the
252−standard for "small Urbit". If someday there are CPUs specifically designed for
253−running [Nock](/docs/glossary/nock), one could imagine going much smaller.
254−Ultimately, I'm going to assume that there will someday be [solid-state
255−interpreter](#ssi) microcontrollers - so the inclusion of Urbit on a device may
256−require nothing more than a couple [surface-mount
257−devices](https://en.wikipedia.org/wiki/Surface-mount_technology) on a larger
258−chip.
259−
260−Urbit is intended first and foremost as a personal computer. When I unravel its
261−potential usage in industry, I adopt the forecast of a drastic increase in the
262−manufacturing capacity for individuals and small groups. Agriculture is a great
263−microcosm of this long-standing trend; less human input is needed to produce the
264−same amount of food, whether it be crops or livestock. The modern era is
265−distinguished by the fact that small numbers of people can manage enormous farms
266−which produce food for vast populations. Thus, computation on modern automated
267−farms may be thought of as existing at the intersection of both personal and
268−industrial scale, and show how computerized and mechanized workflows add to the
269−amazing productivity of modern farms and demonstrate that individual-sized
270−inputs are able to create industrial-sized outputs. I predict that the set of
271−trades for which this dynamic holds will only increase over time.
272−
273−Agricultural automation has been a primary engine for the growth of
274−civilization, but it has been hampered by the downsides of IoT elaborated in the
275−previous section. One bellwether of this dynamic is the right to repair one's
276−own equipment. [John
277−Deere](https://www.thetruthaboutcars.com/2020/03/its-payback-time-right-to-repair-movement-targets-john-deere/)
278−has long been at the center of this controversy. Farmers have lost the ability
279−to repair their own equipment due to vendor locks and a dependency on remote
280−servers. Furthermore, any suite of sensor products designed to gather important
281−data such as genomics, hydrology, soil health, weather, etc., inevitably only
282−cooperate with other products by the same vendor. It's the same story all over
283−again—you are a client of a megacorp server. Or in Urbit terms, you have a bunch
284−of primitive moons belonging to different planets held by megacorps, and no
285−planet to call your own.
286−
287−Again, Urbit resolves these issues in the same fashion as above. One might argue
288−that using Urbit is another form of vendor lock-in—but this is evaluating Urbit
289−at the incorrect level. Since Urbit is an open source operating system, its
290−functionality may be extended and modified arbitrarily by any party. _Some_
291−computational infrastructure is necessary— that fact can never be escaped. But
292−you can escape from closed source software that does not permit you to modify,
293−to open source software that allows you to tinker at will. Thus we do not
294−consider open source software to be a form of lock-in, or at least, it's a much
295−milder form of lock-in compared to something like Apple's walled garden.
296−
297−So let us focus on the additional meritorious aspects of Urbit (or more
298−generally, solid state interpreter networks) that make it not merely a band-aid
299−to the broken IoT system but a permanent and sound replacement.
300−
301−#### Solid state interpreter networks {% #ssi %}
302−
303−![cubesats](https://media.urbit.org/site/posts/essays/cubesats.jpg)
304−
305−Urbit is the world's first solid-state interpreter (SSI). This concept is
306−summarized in the [white paper](https://media.urbit.org/whitepaper.pdf) as
307−follows:
308−
309−> Imagine it as a chip. Plug this chip into power and network; packets go in and
310−> out, sometimes changing its state. The chip never loses data and has no
311−> concept of a reboot; every packet is an ACID transaction.
312−
313−Also,
314−
315−> Briefly, an SSI is an interpreter which is also a database. In more depth, an
316−> SSI combines three properties: uniform persistence, source independent packet
317−> networking, and high-level determinism.
318−
319−We do not wish to segue into a lengthy examination of what this really means—
320−that's what the white paper is for—but we will attempt to explain why these
321−properties are of great benefit in an industrial IoT context such as
322−agriculture. We'd also like to predict that Urbit will not be the only SSI.
323−Other sorts of SSI's specialized to various tasks may one day roam the planet,
324−and these may be better suited for particular IoT tasks than
325−[Arvo](/docs/glossary/arvo). However, this article will be couched in terms
326−of SSIs communicating with an [Ames](/docs/glossary/ames)-like networking
327−protocol and Urbit ID-style cryptographic identity, rather than Urbit in
328−particular.
329−
330−For a SSI, losing power is less of a catastrophic event than it is for ordinary
331−computers with volatile memory. Knowing that you can never lose any state is a
332−powerful guarantee on the integrity of your data. Loss of power will always mean
333−loss of any data potentially collected while power is down, regardless of the
334−device you use, but with a SSI you at least have assurance that you will never
335−lose data that was collected before it could be transferred from the cache to
336−the disk. Of course, this is actually the sort of guarantee that [ACID
337−transactions](https://urbit.org/docs/arvo/overview/#acid-database) have—it is
338−just that this set of guarantees emerges naturally as a consequence when you
339−have a SSI. Put another way, every SSI is a database; having every device be a
340−database is a major boon in situations where enormous quantities of data are
341−being collected across a distributed network. The standard today is that data is
342−only collected at hubs, and any data that doesn't reach a hub is irretrievably
343−lost.
344−
345−SSIs are also deterministic at a high level. While all computers are
346−deterministic at the CPU level, interruptions to power can result in an
347−undefined semantic state and result in the random erasure of half of its brain.
348−This determinism is what begets ease of maintainability of Urbit—problems
349−generally only need to be solved once by experts and the solution propagates to
350−the rest of the network via [OTA updates](/docs/glossary/ota-updates). We
351−addressed this maintenance issue previously—we only remark now that this
352−property is derived from being a SSI, rather than something particular only to
353−Arvo or Urbit. When one has hundreds or thousands of devices to manage, the
354−guarantees on ease of maintenance provided by determinism are extraordinarily
355−convenient.
356−
357−Packet routing on SSI networks is source-independent, and in the context of an
358−Ames-like networking protocol, are always delivered exactly once and in a
359−precise order due to the fact that nodes on an Ames network are in a permanent
360−session. Source-independent means that the identity that originated a packet
361−does not need to be the one to deliver it—packets are _facts_, and the truth of
362−a fact does not depend on who you heard it from. This means that it is possible,
363−for instance, to send instructions to a moon before it even exists and be
364−guaranteed that that moon will receive them and perform the tasks given, even if
365−the device that originally sent the packets no longer exists. As long as
366−somebody has kept the packets on hand, they will eventually be delivered. So,
367−one could imagine transmitting directions to a crop harvesting robot into which
368−a moon will be installed before the robot has even been purchased, know that
369−once it is delivered it will automatically begin its task, and know that those
370−tasks will be completed in the correct order, without any accidental repeats.
371−Taken to the limit, one can imagine preplanning the automated tasks for an
372−entire farm before a single device is purchased, with powerful guarantees on the
373−integrity of those instructions no matter how much time elapses between sending
374−and receiving.
375−
376−#### P2P data markets
377−
378−![knots](https://media.urbit.org/site/posts/essays/knots.jpeg)
379−
380−As was mentioned above, today's IoT devices ferry all sorts of your personal
381−data to megacorp, where they package it and sell it to the highest bidder.
382−Though personal data in aggregate is quite valuable, the value of a single
383−individual's data is quite low. On the other hand, industrial scale data such as
384−that collected on digitized farms could be quite valuable. Here we briefly
385−examine how Urbit can be utilized to populate and facilitate a market for data.
386−
387−All data collected by your moons may be digitally signed by that moon,
388−certifying the exact origin of that data. This is one advantage of having
389−cryptographic identity baked into the core of the operating system and
390−networking protocol. One could imagine collecting large amounts of such data and
391−packaging it for exchange with other local and regional farmers. This can, of
392−course, already be done in principle with current systems. But current systems
393−do not automatically come equipped with the sort of provenance, immutability,
394−and reputation that comes for free when you make use of SSI networks.
395−Manipulated or faked data becomes easier to spot, and you'll know who it came
396−from, so supplying such data puts one's reputation at stake.
397−
398−One major issue facing conjoining data gathered from disparate sources is simply
399−how to do it. Data arriving in random order, from different software versions,
400−running different hardware, is all very difficult to bundle into a good
401−dataset - and indeed wrangling this sort of task forms a large part of the data
402−scientist profession. As devices in SSI networks utilizing an Ames-like protocol
403−are engaged in permanent sessions, leading to properties such as exactly-once
404−delivery and well-ordered message sequences, issues about the order in which
405−data arrives are dramatically simplified. I do not wish to get mathematical
406−here, but I personally have confidence that the emerging discipline of
407−[categorical informatics](http://math.mit.edu/~dspivak/informatics/), as well as
408−the relevance of [low-dimensional topology to data
409−fusion](https://arxiv.org/abs/1409.5505), resolves many of these issues. I
410−promise to explain this in more detail in the future. For now, it suffices to
411−say that SSI networks seem well-positioned to utilize these techniques.
412−
413−Cryptographic techniques such as [(composable) zero-knowledge
414−proofs](https://en.wikipedia.org/wiki/Zero-knowledge_proof), [secure multi-party
415−computation](https://en.wikipedia.org/wiki/Secure_multi-party_computation),
416−[ring signatures](https://en.wikipedia.org/wiki/Ring_signature), and even
417−[homomorphic encryption](https://en.wikipedia.org/wiki/Homomorphic_encryption)
418−offer a variety of ways in which data may be shared in an IoT context with
419−mathematical guarantees on what sort of privacy is maintained. This is perhaps
420−less relevant in the context of agricultural IoT, where personal private data is
421−largely absent, but we mention them here to invite further speculation from the
422−reader about the possibilities of IoT and SSI networks.
423−
424−We end our discussion with an adaptation of a scenario borrowed from my brief
425−time working on [Ceptr](http://ceptr.org/) that begins to show how a lunar
426−IoT-connected world evokes properties of a hypothetical ["global nervous
427−system"](https://en.wikipedia.org/wiki/Global_brain). This example is
428−purposefully mundane to illustrate how deficient our Earth systems are, and
429−while it is possible to accomplish in theory, it is impractical on a wide scale
430−due to the numerous problems with IoT. Imagine that you suffer headaches from
431−low atmospheric pressure. You'd like to know when a low-pressure front is an
432−hour away from you so that you can pre-emptively take aspirin to prevent the
433−headache. Your personal digital assistant, running on Urbit, can then
434−periodically query the moons of sensors in your region for weather data to
435−predict whether or not you will soon be passing through a low pressure front.
436−This could be a free service or paid for automatically with cryptocurrency
437−microtransactions. On Mars, this task will be trivial, and is merely a stone's
438−throw away from a vast and undiscovered universe of other possibilities unlocked
439−by SSI networks.
440−
441−[^0]:
442− Of course, all moon names have four words, not three. What the fourth word
443− needs to be for only three words to display is a matter of Urbit lore that
444− is more fun to discover yourself than have it told to you, so we won't spoil
445− it here.
content/blog/landscape-a-portrait.mddeleted−89
@@ -1,89 +0,0 @@
1−+++
2−title = "Landscape: A Portrait"
3−date = "2019-09-02"
4−description = "On the latest Urbit user interface, and the interfaces to come."
5−aliases = [
6− "/posts/essays/landscape-a-portrait/",
7− "/posts/landscape-a-portrait"
8−]
9−
10−[extra]
11−author = "Matilde Park"
12−ship = "~haddef-sigwen"
13−+++
14−
15−![](https://media.urbit.org/site/posts/essays/landscape-a-portrait-1.png)
16−
17−Alongside [the v0.8.0 launch](https://urbit.org/posts/2019-7-25-update/) we released the latest version of Landscape – Urbit's prototype user interface. Codenamed “Modulo,” it's our vision of an Urbit UI designed for everyday use. Most importantly, it’s the beginning of an interface that has access to the entire Arvo OS, rather than just one facet. Previous iterations of Landscape solely made use of the [Hall](https://urbit.org/docs/learn/arvo/hall/) messaging protocol.
18−
19−Served after installation on your ship’s HTTPS port, it allows you to interact with Arvo through a web interface built with [Indigo](https://github.com/urbit/indigo), our new UI design language. It has a home screen, which exposes ‘tiles’ for each Landscape application – each able to integrate and customise information from elsewhere in the system and from the broader internet – and connects them to full-screen, graphical applications.
20−
21−The first set of application includes Chat, a new, streamlined chat client, a basic Weather information tile, an analog clock, and Publish, a place for publishing, subscribing, and commenting on ‘notebooks’ – invite-oriented blogs hosted on your ship.
22−
23−![](https://media.urbit.org/site/posts/essays/landscape-a-portrait-2.png)
24−
25−![](https://media.urbit.org/site/posts/essays/landscape-a-portrait-3.png)
26−
27−Our unofficial mantra – “it’s not finished yet” – is performed yet again, but we're _close_. We can now talk with the broader community about both our inspirations, our visions for its future and our plan to enact that future.
28−
29−## Entering userspace
30−
31−Urbit has been in “research mode” for most of its history, but the system has now made extensive progress and our kernelspace engineers are the opinionated, confident veterans of the long war you’d expect from an operating system’s early history. The spoils of that war, after rewriting and refactoring all of the system's components several times over, are beginning to really speak for themselves.
32−
33−Urbit’s kernel is graduating from its rebellious period, however its _userspace_ has remained embryonic for most of its history. The project of building an application model has been restarted and rescoped into _aspects_ that could weather the chaotic growth of the kernel, but it would never quite serve as an interface to the entire operating system. Due to one of our latest vane refactors, it’s becoming possible to start that work in earnest.
34−
35−Alongside the latest release of Landscape came the rewrite of the [`%eyre`](https://urbit.org/docs/learn/arvo/eyre/) vane, which serves a ship’s files and applications over HTTP. Among the improvements came the decision to move from serving from one ‘/web’ folder by default to an application-specific endpoint.
36−
37−That is, a Hoon application, upon being started, now tells Eyre it wants to serve _these files_ at _this endpoint_ over HTTP and Eyre facilitates that.
38−
39−Landscape, with this in mind, serves at the root endpoint (you know, at `/`). It pre-authenticates the user and provides an API to your ship for applications (and their tiles) to access and _poke_, _peer_ and _scry_ the ship with.
40−
41−![](https://media.urbit.org/site/posts/essays/landscape-a-portrait-4.png)
42−
43−Whereas, before, a ship had a web server that was good at serving text, but was more obscure for complex (or graphical) applications that made use of the Arvo OS and network, now a ship launches with a web-based interface that makes applications much simpler to experiment with and develop.
44−
45−If you want, you can just serve files at any endpoint with [a boilerplate](https://github.com/matildepark/urbit-static-page).
46−
47−What's more? Arvo access and Hoon logic are now, by default, inside their own application on the ship itself rather than served as inline code on the front-end. This allows for better separation of concerns and more complex and performant applications.
48−
49−(If you want to play around, there’s an [experimental tool](https://github.com/urbit/create-landscape-app) you can use to get a full-stack boilerplate running in about 40 seconds.)
50−
51−All of this is fantastic news; and while Landscape-oriented userspace development is now _possible_, it’s still not all the way to being an interface to _an operating system_. For that, we’ve started drawing up specifications and proposals.
52−
53−## Rethinking interfaces
54−
55−Among the inspirations for our team are [the tales of Andy Hertzfeld](https://www.folklore.org/StoryView.py?project=Macintosh&story=Were_Not_Hackers!.txt), working on the Macintosh, and ongoing [discussions](http://doc.cat-v.org/plan_9/4th_edition/papers/812/) and [decisions](https://research.swtch.com/help.pdf) that went into Plan 9 from Bell Labs. (Sometimes, for fun, we also watch videos about [the Xerox Alto](https://www.youtube.com/watch?v=tngrLvyiNEI).)
56−
57−These inspirations share that their creators were dealing with really primordial stuff – the font of human-computer interface had really just sprung and they were _seeing things no one had seen before_ because they _had to_.
58−
59−Doing that now, after a lifetime of reflexive familiarity with the dominant solutions – from Apple’s macOS to Google’s Material Design – we have to do the work of _unseeing_. By engaging with what it was like to see for the first time, we get closer to seeing with fresh eyes. We work to avoid implicitly categorising the new territory as simply, well, comparative to the old one.
60−
61−So, while it’s not the same to simply _read_ these dialogues, it can get us pretty close.
62−
63−One reason this iteration of Landscape isn’t the last is because – we must emphasise – this is not the only interface Urbit will have. We aren’t creating a web platform. It should be possible to use _just_ the command-line, and ideally it should be possible to serve windowed interfaces from Arvo itself. It should be possible to SSH into _and_ SMS with your ship, should you want to.
64−
65−After all, we’re creating a decentralised platform of personal servers with an entirely new stack from the bytecode up. Most of the world’s computers descend from Unix, and Unix was based on [timesharing](https://en.wikipedia.org/wiki/Time-sharing) — multiple users in one computer, all pretending it was theirs. Everything since hasn’t left that mindset.
66−
67−So what do we think that new platform needs from its interface?
68−
69−- **Landscape, and all of Urbit’s future interfaces, need a standardised way to view and edit the filesystem.** We had circumnavigated this by mounting to Unix, but it’s now time to confront that issue.
70−
71−- **Landscape, and all of Urbit’s future interfaces, need a way to easily organise around _cohorts_ of ships, or _groups_,** with shared applications or files and a socially-oriented computing experience in turn — [something always in the vision](https://urbit.org/posts/azimuth-is-on-chain/#aegean), but not quite implemented yet.
72−
73−- Lastly, **Landscape, and all of Urbit’s future interfaces, need a userspace-specific, software design pattern** to integrate all of this: access to the file system, permissioning shared sets of files, and tying it together, an underlying representation of both data and interface amongst many computers.
74−
75−No more siloed input/output in applications on a ‘timeshared computer’ with your redundant data always belonging to someone else.
76−
77−## Into the future
78−
79−Right now, Landscape applications are still _monolithic_ and geared exclusively toward _single-person computing_. We hope to change that, and keep communication open with developers so it’s easy for their own development to keep pace with ours.
80−
81−It should be easy to share whatever data with your friends as you like; to permission files programmatically on a server that is permanently, irrevocably _yours_.
82−
83−It should also be easy to read, annotate and discuss a shared book with a specific set of friends; or only allow another set of people to see files in a specific directory if they meet specified requirements.
84−
85−We will backport these exploratory developments into Landscape as they continue and evolve. This, of course, includes kernel work, as we refactor [Gall](https://urbit.org/docs/learn/arvo/gall/), the userspace handler vane, and in the process, standardise streamlined practices for writing Hoon in user applications. Take, for example, the [async monad](https://groups.google.com/a/urbit.org/forum/#!topic/dev/DDG6gHSG1Lc), which allows you to avoid dealing with moves or handling each response in separate parts of the application. User applications and Hoon should be both laconic and accessible, and we’re reifying that.
86−
87−Most importantly, we’ll continue to iterate on how we onboard new developers. [Hoon School](https://urbit.org/hoonschool) continues to evolve; its first cohort is thriving and friendly. We have a dedicated cast of teachers and ongoing access to much of the Urbit team through this stream.
88−
89−If you’d like to join us here, you’ll discover a computer that you can learn and master from the bottom up. Right now, it is a labyrinth for the intrepid; but for the future, and forever, it is _mappable_. A landscape, after all, doesn’t show a single leaf, but the earth and the horizon ahead.
content/blog/layer-2-faq.mddeleted−155
@@ -1,155 +0,0 @@
1−+++
2−title = "Layer 2 FAQ"
3−date = "2022-03-01"
4−description = "Answers to all your lingering L2 questions."
5−[extra]
6−image = "https://media.urbit.org/site/posts/essays/l2-faq-artwork.jpg"
7−+++
8−
9−The launch of our [Layer 2](https://urbit.org/blog/layer-2-guides) was met with
10−a lot of excitement and a few questions. Don’t fret, we have answers. Below is a
11−selection of the most frequently asked questions and our responses.
12−
13−If you're still stumped, head to `~bitbet-bolbel/urbit-community` or give us a
14−shout online.
15−
16−### Questions:
17−
18−#### Planet Booting, Buying, Custody
19−
20−1. [Do I need ETH to boot my planet?](#1-do-i-need-eth-to-boot-my-planet)
21−2. [Do I have full custody of my L2 planet?](#2-is-there-anything-i-need-to-do-to-ensure-full-custody-of-my-planet)
22−3. [Where can I buy a planet?](#3-are-there-any-platforms-where-i-can-buy-a-planet-for-btc-or-usd)
23−4. [How do I get a hosted planet?](#4-how-do-i-get-a-cloud-hosted-planet)
24−
25−#### Layer 2 Architecture & Migration
26−
27−5. [Why did you decide to build your own Layer 2 rollup?](#5-there-are-plenty-of-organizations-dedicated-to-customizable-rollup-solutions-why-did-you-decide-to-build-your-own)
28−6. [Should I migrate my L1 planet to L2?](#6-if-i-currently-have-an-l1-planet-are-there-any-advantages-to-migrating)
29−7. [Where did the old Bridge go? Can I still use it?](#7-is-it-possible-to-use-the-old-bridge-for-l1-operations)
30−8. [Why is the cost reduction so significant?](#8-why-is-the-cost-reduction-so-significant)
31−9. [What exactly is the mechanism for the “naive” consensus?](#9-what-exactly-is-the-mechanism-for-the-naive-consensus)
32−10. [When I spawn L2 planets via Metamask, I'm prompted to sign every transaction. Do you have plans to remedy this?](#10-when-i-spawn-l2-planets-via-metamask-im-prompted-to-sign-every-transaction-do-you-have-plans-to-remedy-this)
33−
34−#### 1. Do I need ETH to boot my planet?
35−
36−If you were invited to claim a L2 planet, you **do not** need ETH to claim
37−that Urbit ID. Anyone can get on Urbit without ETH or a crypto wallet via L2.
38−Inviting your mom to Urbit just got a lot easier.
39−
40−If you have a L1 planet, you **do** need ETH to claim that Urbit ID.
41−
42−Once you have claimed your Urbit ID and have recorded your master ticket,
43−you **do not** need ETH to boot Urbit. That Urbit ID is now yours, forever.
44−
45−Unsure whether you have been invited to claim a L2 or L1 planet? The quickest
46−way to identify a L2 planet is if you used the below flow to claim.
47−
48−![](/images/planet-l2-claim.gif)
49−
50−For those with L1 planets, you can avoid future transaction fees by migrating
51−your L1 planet to L2. Read the migration instructions
52−[here](https://urbit.org/getting-started/layer-2-for-planets).
53−
54−#### 2. Is there anything I need to do to ensure full custody of my planet?
55−
56−If you were sent a direct link to claim an L2 planet (see above), it’s
57−in your full custody by design. Bridge generates your master ticket, which you
58−downloaded during the claiming process.
59−
60−#### 3. Are there any platforms where I can buy a planet for BTC or USD?
61−
62−There are a few ways to procure a planet, including some platforms that offer
63−BTC and USD payment options.
64−
65−To purchase a L2 planet, we direct you to:
66−
67−- [Networked Subject](https://subject.network/buy/) for payment in BTC.
68− Brought to you by `~sitful-hatred`.
69−- [planets.lanlyd.net](https://planets.lanlyd.net) and
70− [tomdys.gumroad.com](https://tomdys.gumroad.com) for payment in USD.
71−
72−To purchase a L1 planet with ETH, there are a number of platforms dedicated
73−exclusively to Urbit ID. These include:
74−
75−- [urbit.live](https://urbit.live/buy)
76−- [urbitex.io](https://urbitex.io)
77−- [urbit.me](https://urbit.me)
78−
79−You can also acquire L1 Urbit IDs with ETH on [OpenSea](https://opensea.io/collection/urbit-id).
80−
81−Once you purchase a planet, the easiest way to manage your cryptographic asset
82−is through [Bridge](https://bridge.urbit.org/), which is our Urbit ID management
83−interface, wallet navigator, and governance portal.
84−
85−You can use Bridge to perform any desired
86−[Azimuth](https://urbit.org/docs/glossary/azimuth) interactions or download your
87−planet’s keyfile. As an alternative, [Metamask](https://metamask.io) is an
88−easy-to-use Ethereum wallet with a browser extension that integrates easily with
89−Bridge.
90−
91−#### 4. How do I get a cloud-hosted planet?
92−
93−There are a number of ways to host a planet in the cloud. Your options:
94−
95−- DIY:
96− The most cost-effective method is [setting it up
97− yourself](https://urbit.org/using/running/hosting), though this route requires
98− some system administration, and troubleshooting if any issues arise.
99−
100−- Via a Hosting Provider:
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
103− following service providers offer hosting (some include a free planet):
104− [Tlon](https://urbit.typeform.com/to/zQ9QOV3Z?typeform-source=tlon.io#source=tlon_io),
105− [UrbitHost](https://urbithost.com/landing), [Get Urbit
106− ID](https://www.geturbitid.com), [Escape Pod
107− Store](https://www.escapepod.store), [Nodestead](https://www.nodestead.dev), and
108− [ThirdEarth](https://third.earth/en/).
109−
110−#### 5. There are plenty of organizations dedicated to customizable rollup solutions. Why did you decide to build your own?
111−
112−Simply put, we designed and engineered our own rollup because we can’t depend
113−on the success or longevity of another organization. As they currently exist,
114−outsourced rollups are too immature and compromised in ways that undermine the
115−integrity of our technical principles. We also can’t restrict the aggregators to
116−a waitlist, another issue which might eventually be resolved, but one that we
117−can’t count on to be resolved soon.
118−
119−#### 6. If I currently have an L1 planet, are there any advantages to migrating?
120−
121−One of the most significant advantages to migrating is the reduced cost of
122−Azimuth-event related transactions. On L2, you can change sponsors or reset your
123−network keys for free with our roller. An important note: migration is currently
124−one-way. If you want to hold onto your L1 planet as a novelty, migration isn't
125−recommended.
126−
127−#### 7. Is it possible to use the old Bridge for L1 operations?
128−
129−The old version of Bridge will remain live, but unmaintained and eventually
130−decommissioned. You can access it at
131−[bridge-sunset.urbit.org](https://bridge-sunset.urbit.org). If you run into
132−something you can only do with the older version of Bridge,
133−[let us know on Github](https://github.com/urbit/bridge/issues/new?assignees=&labels=bridge&template=bridge-bug-report.md&title=).
134−
135−#### 8. Why is the cost reduction so significant?
136−
137−On L1, every operation is an Ethereum transaction, with logic and state, etc.
138−On L2, these operations are reduced and simplified into a
139−no-logic-involved Ethereum transaction. This is what makes L2 transactions
140−cost-efficient: multiple transactions happen simultaneously to share the cost of
141−just one L1 transaction.
142−
143−#### 9. What exactly is the mechanism for the “naive” consensus?
144−
145−Our engineering team has written extensively about the technical features of
146−our L2 rollup. To learn about its intricacies, we encourage you to read
147−`~datnut-pollen`’s comprehensive
148−[overview](https://urbit.org/blog/rollups#technical) and `~wicdev-wisryt`’s
149−original
150−[proposal](https://groups.google.com/a/urbit.org/g/dev/c/p6rP_WsxLS0/m/hQBX0modAwAJ?pli=1)
151−on the Urbit developer mailing list.
152−
153−#### 10. When I spawn L2 planets via Metamask, I'm prompted to sign every transaction. Do you have plans to remedy this?
154−
155−We realize this UX headache and are taking active steps to devise a more efficient transaction scheme. The new method will reduce the number of manual signatures needed for each spawned L2 planet. At the time of this FAQ's publication, we haven't publicized the release timing for the improvement. A provisional solution: set the star's spawn proxy to a custodied L2 planet secured via Master ticket and log in to Bridge as that planet to spawn invites.
content/blog/magic.mddeleted−205
@@ -1,205 +0,0 @@
1−+++
2−title = "Magic"
3−date = "2016-05-15"
4−description = "A thought-experiment to explain the Urbit user experience."
5−aliases = [ "/posts/essays/magic", "/posts/magic" ]
6−
7−[extra]
8−author = "Curtis Yarvin"
9−ship = "~sorreg-namtyv"
10−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/magic.jpg"
11−+++
12−
13−![](https://storage.googleapis.com/media.urbit.org/site/posts/essays/magic.jpg)
14−
15−It's easy to get too obsessed with Urbit's alien technology. We
16−didn't build Urbit for its tech. We built it for people to use.
17−
18−It's also hard to understand the power of Urbit, because it's
19−still quite immature. Unless you understand it already, it's
20−just a weird OS that doesn't work all that well.
21−
22−And this OS is supposedly designed as a new kind of product: a
23−personal server. What is a personal server? If you had one,
24−you'd know. Since you don't, you don't. So both your problem
25−and our solution are totally unclear.
26−
27−One way to understand Urbit is to forget the technology totally.
28−Instead, let's build the same product out of magic. Technology
29−is hard and imperfect and slow. Magic is easy and perfect and
30−fast. Why not use it? At least for a demo?
31−
32−## Magic step one: total integration.
33−
34−Make a list of all the cloud apps which have your personal data.
35−OK, just imagine making a list. OK, use magic.
36−
37−By magic, we make some giant company buy all these apps. It
38−could be any of them, but let's say it's Facebook. Facebook buys
39−_all the apps_. As of now, _all your cloud computing happens in
40−your Facebook profile_.
41−
42−Your Facebook is now your Dropbox and your Evernote and your
43−Wordpress and your Gmail. And it's not just Web apps; all your
44−servers move to Facebook. Your Nest talks to a Facebook server.
45−Your iPhone talks to Facebook instead of iCloud. Your Fitbit
46−records your heart rate in a Facebook log. Your Facebook
47−manages your finances and pays your bills. Got bitcoin?
48−Facebook is your wallet. Shop online? Check out the Facebook
49−Store -- it sells everything!
50−
51−In short, you can just lock your browser to `facebook.com`. The
52−Web is dead. Or more precisely, it's an obsolete protocol which
53−you use to log in to Facebook.
54−
55−Does this sound creepy? Sure. It's incredibly creepy. But look
56−on the bright side: it's also incredibly convenient. (And
57−incredibly secure, at least with a 2-factor key.)
58−
59−For the first time ever, _all your data is in one place_. For
60−example, the engineers at Facebook, who are awesome, would never
61−leave Dropbox, Instagram and iCloud as three separate things.
62−You don't need an "integration" between them. Your profile is
63−one thing: you. Your entire digital life.
64−
65−(In fact, if you're a geek and have Unix boxes, your Facebook is
66−magically integrated with Unix. You can just open your laptop
67−and type `ls /photos/2016/May/` -- as if your digital life was a
68−chip in a box in your backpack, not redundant servers in multiple
69−secure data centers.)
70−
71−Imagine we all lived in hotels, all the time, even in just one
72−city. Imagine you don't even have one room with a long-term
73−lease. You sleep in one pod Mondays, another on Tuesdays...
74−then, someone offers you a home. Your own house. With your own
75−furniture, your own books in your own bookcases...
76−
77−## Magic step two: free your data.
78−
79−The good news is, you get your own house. The bad news is, it's
80−in North Korea.
81−
82−Having your whole life owned by Facebook is still creepy. Or so
83−most people would think. It's not actually clear that it's more
84−creepy to be owned by one corporation, than nine corporations.
85−But it _feels_ creepier.
86−
87−By magic, Facebook cares. So it decides to free you. Actually,
88−Facebook's business is owning you. So freedom will destroy its
89−business. But magically, Facebook doesn't mind.
90−
91−Right now, the software behind your Facebook experience is a
92−million lines of Facebook goo. It solves your problems and shows
93−your ads and does whatever the heck it wants with your data.
94−(Not that it's "your" data. It's Facebook's data, about you.)
95−
96−Without changing the functionality of your Facebook experience,
97−Facebook replaces every component of this goo with an "agent."
98−(You have about as many agents as you used to have apps.) If you
99−don't care about being free, you won't notice the change. If you
100−do care, everything changes.
101−
102−One, you don't have to run Facebook's agents. You can replace
103−them with anyone else's software, free or paid. Agents upgrade
104−themselves automatically, but you are never locked in; you can
105−always switch agents and/or vendors without damaging your data.
106−
107−Don't like your email UI? Change it. Don't like to see ads?
108−You no longer see any ads -- why would someone use an agent that
109−showed them ads? Ick. Unless it's something ridiculously
110−specialized, an agent is either free software or costs $3.99.
111−
112−Two, agents _act as you_. Facebook is no longer the Panopticon.
113−It is not a giant mainframe where all the code can access all the
114−data. An agent can use as much of your own data as you give it;
115−it cannot use anyone else's data. At least not without asking.
116−
117−When anyone can write an agent, only code can be law. Privacy is
118−no longer enforced by the informal decisions of Facebook product
119−managers. It must be enforced by formal security policies.
120−
121−This might constrict the services Facebook can offer, but only a
122−little. Since privacy is a human universal, apps that don't
123−respect it (for instance, image face tagging) feel weird. A
124−service like this can't be broken up into personal agents; it
125−still requires a Big Data mainframe somewhere. But it's okay;
126−the agents can still talk to it.
127−
128−For the most part, Big Data (everyone's) has become little data
129−(yours). You no longer have a Facebook profile -- a fancy UI
130−backed by a million lines of Facebook goo on one big mainframe.
131−Now what you have is a Facebook _server_: a real computer. Or at
132−least, a virtual computer (which is much more reliable than any
133−one physical computer).
134−
135−Is this computer hard to manage? You have the same basic job as
136−someone who owns an iPhone: deciding what software to run. If
137−you skip this job, your iPhone or your Facebook is still pretty
138−useful. You also need to decide what data to keep. An iPhone
139−has finite, free storage; the cloud has infinite, non-free
140−storage. You still want a warning when your server gets fat.
141−But at least it keeps working.
142−
143−## Magic step three: free your server.
144−
145−This agent-oriented Facebook can't show you ads. But this is not
146−actually a huge business problem. Since Facebook owns everyone's
147−life, it has the mother of all monopoly lockins. It can just
148−bill you $9.99 a month for running your Facebook server. This is
149−a great deal, for you and for Facebook.
150−
151−But you're still a slave, Neo. A Facebook server still isn't a
152−personal server. Monopolies suck.
153−
154−Magic works, so Facebook feels guilty. It goes all the way
155−toward freeing you, and ruins its own business.
156−
157−Now, your server is just a big file whose format is precisely
158−defined. You can move it to any hosting service, or even run it
159−on a home PC. Since hosting is now a commodity, it costs almost
160−nothing and has zero profit margin. It may even come bundled
161−with your Internet service.
162−
163−Every data center is owned by the local government. If you have
164−data to hide from the authorities, compute at home. Most people
165−don't have anything to hide and should run in the cloud, because
166−the cloud works better. But using the _same platform_ as those
167−who do have something to hide creates "herd immunity". You don't
168−have to choose between a secure platform with no network effect,
169−and a non-secure platform that everyone else uses.
170−
171−## Magic step four: free your name.
172−
173−Freeing your server also means freeing your identity. It's no
174−longer true that Facebook decides who you are. Facebook just
175−wrote the algorithm. Your server contains cryptographic secrets
176−that control your identity. If your identity was a bitcoin, your
177−server would be a giant bitcoin wallet.
178−
179−The bad news: lose the file, lose the identity. The good news:
180−your server is genuinely personal now. It's yours in every way.
181−It's so personal that if you destroy it, it's gone.
182−
183−Facebook doesn't even keep its power to create new servers. The
184−"real name" policy has done great things to control spam, because
185−spam always depends on disposable accounts. But it implies a
186−central authority.
187−
188−Instead, Facebook borrows an idea from bitcoin and just limits
189−the number of identities. If you need one, you have to buy one.
190−They don't cost that much; just enough to deter spammers.
191−
192−(Is your real name still linked to your identity? Maybe, maybe
193−not. There's a role for name validation, but not everyone needs
194−to have a real name, and not everyone else needs to know it. A
195−dissident, or anyone who wants to speak out and let the words
196−speak for themselves, might want a second anonymous identity.
197−But sock puppets remain evil -- two names for the same person
198−should not interact in the same place.)
199−
200−## Magic step five: call it Urbit.
201−
202−And, with magic, we've succeeded in turning Facebook into Urbit.
203−Technically, Urbit is pretty close to magic, but there is no way
204−it's going to happen this way. See the [roadmap](/blog/roadmap) for how it
205−actually happens.
content/blog/metaphase.mddeleted−79
@@ -1,79 +0,0 @@
1−+++
2−title = "Metaphase"
3−date = "2020-12-08"
4−description = "On the upcoming and foregoing Landscape lifecycles, and other forms of mitosis across the Urbit project."
5−
6−[extra]
7−author = "Matilde Park"
8−ship = "~haddef-sigwen"
9−image = "https://media.urbit.org/site/posts/essays/metaphase.jpg"
10−+++
11−
12−![mitosis](https://media.urbit.org/site/posts/essays/metaphase.jpg)
13−
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:_
15−
16−```
17−|ota ~hanruc-nalfus-nidsut-tomdun %kids
18−|merge %home ~hanruc-nalfus-nidsut-tomdun %kids, =gem %take-that
19−|merge %kids ~hanruc-nalfus-nidsut-tomdun %kids, =gem %take-that
20−```
21−
22−_We will surface this option more broadly in a future settings overhaul._
23−
24−A few weeks ago, the Landscape team — those of us building Tlon’s suite of userspace applications on top of Urbit— deployed our first over-the-air update for notifications. This is a big leap forward for us. Of course, getting notifications inside Landscape itself is a big deal, but getting a push notification on your phone, or an email digest based on activity inside Urbit is now just one step away, a weekend project for a hobby developer, not an indeterminate number of steps away.
25−
26−After release, we received some feedback from users on the behaviour and design of this feature; beyond the obvious kinks that come from an initial release, it seemed to some like a minimum viable affordance pitched as a fully designed feature. This “bottom-up” development approach was, to us, fairly straightforward; to some of our users, it seemed that we had closed the door on the feature without even beginning to expose all its possibilities.
27−
28−As I’ll describe, we haven’t just been iterating Landscape, but the way we develop Landscape, and the way we consider Landscape in relation to Arvo. Finally, we’ll discuss our upcoming two-stream release process: a “stable” release stream with updates every six weeks and a development stream, with ongoing changes continuously deployed on an opt-in basis.
29−
30−To someone coming to Landscape for the first time, it is starting to look mature; and it is indeed maturing quickly. After all, these mismatches in expectations are pangs calling out for growth. Landscape truly has _users_, not just explorers, who are developing the same expectations they have with the other tools they use: predictability, reliability, and iterative improvements, not just leaps forward. So to meet those expectations, we’ve been working on the prerequisite work for a mature release schedule, with two different release streams for users and explorers: a lifecycle, with the cells, interlinked, dividing into a coherent higher being.
31−
32−## Landscapers and lifecycles
33−
34−For most of 2020, the core Landscape team has comprised of Liam (`~hastuc-dibtux`), Logan (`~tacryt-socryp`), and myself (`~haddef-sigwen`). Others at Tlon have rotated on and off, and some community members (`~radbur-sivmus` comes to mind) have also contributed a lot, but the three of us handle the core decisions and the entire stack for Landscape, working with designers, infrastructure, and third-party developers.
35−
36−After OS1’s release in April 2020, Landscape’s back-end has changed quite a bit; the first rearchitecture we performed was in group-store, adding roles and simplifying quite a lot of the back-end logic at the same time.
37−
38−Around May of this year, Logan flagged that our code surface was too large and had too much boilerplate by writing a set of bespoke full-stack applications when just one flexible userspace database would do. Our designers also had a vision of our interfaces being “modes and genres of the same data” that fit this vision as well; and so since then, we’ve put our resources into migrating all of Landscape to use graph-store (more information available in [this developer call](https://www.youtube.com/watch?v=E4DFuAZQ32Y)).
39−
40−Obviously, developing userspace for distributed computing has some additional challenges that you don’t have to consider when writing software for a single server. Each ship interacting has to mutually coordinate the agents running and the events to be processed. If those fall out of synchronisation, the edge cases multiply.
41−
42−We traditionally tended toward solving those problems by writing the simplest possible incarnation of an application or a solution first, triaging out additional complications until they can be most prudently addressed — usually when they are just one step away.
43−
44−For most of its history, Landscape’s userspace suite had to be up-to-date on all ships to function at all, so multiple staging streams added quite a few complications. Since incompatible versions of applications on different ships would produce mutual fail states if they attempted to interact –and since each application had no sense of how to negotiate compatibility with older applications, each user had to keep up-to-date. Landscape was moving too fast, constantly reconfiguring (to give you a sense of this: we still refer to a month ago as “old”).
45−
46−Historically, Arvo and Landscape were also considered just one object; changes in Landscape would often require refining the layers underneath it as well. We often aimed to use our interface’s requirements to refine Arvo in turn. But as Landscape’s cells continued to split, as it became a proper client _for_ Arvo rather than a subsection _of_ Arvo, it required its own planning and execution cycle that only came to fruition around April of this year.
47−
48−The first thing we did was start recurring, six-week product backlogs with designers and engineers to occasionally reassess short-term priorities with a larger roadmap. Once we did that, we began working on opening our process to the public, migrating all tasks, priorities, and current decisions to a [product board](https://github.com/urbit/landscape). By doing this, community members could both suggest features _and_ contribute features, with a centralised, transparent process for getting designer input and Tlon engineer priorities. This has also been a successful effort.
49−
50−By adjusting ourselves to a six week rhythm for execution, it’s clearly time to slow down our release schedule and dedicate design and QA time to each release.
51−
52−Since Arvo is still quite young, we can’t quite get to all the thornier aspects of instituting a lifecycle. For example, we can’t tackle agent version negotiation in full yet; and mark versioning is still not present. This means modifying the validators for our graph modules (that is, validating the graph structure of a notebook vs. a collection) presents a deployment challenge in a two-stream lifecycle.
53−
54−That said, our userspace infrastructure is maturing, so we could at least organise the APIs to those agents; and we could at least slow the development cycle on those agents in favour of the more flexible components of the stack. The front-end specific features, for example, can be deployed on different ships without side effects for other users.
55−
56−So now, before we could launch a stable stream, we had some things to do first:
57−
58−- **We wanted to provide assurance that the userspace suite is relatively stable.** All our remaining stores (invite-store, metadata-store, and contact-store) needed to be modernised to use the same libraries and utilities inside Arvo as newer userspace applications.
59−- **We wanted all our applications to be using graph-store.** If we were going to migrate the entire network to a new userspace model, we shouldn’t undermine the new release cycle process and make it more difficult to test and deploy to meet higher user expectations. We needed to migrate everything first.
60−- **We wanted to release the notification-store**. After the October 2020 groups release, Landscape simply wouldn’t be complete without it.
61−- Finally, **we wanted all of Landscape to use the [Indigo component library](https://github.com/urbit/indigo-react).** Landscape shipped with each application using its own build with handwritten, bespoke DOM components. Once we moved to a single-page application architecture in June 2020, we wanted the same guaranteed consistency for both back-end and front-end code.
62−
63−Most of these are now accomplished; the remaining tasks are awaiting some final tests and UX work. We’re aiming for a stable stream of Landscape to deploy by **January 5, 2021**.
64−
65−What does this mean? For everyday users, you can expect Landscape releases every six weeks; the slate of features and any breaking changes will be flagged well in advance for third-party developers; and you can expect a more thoroughly considered user experience with notes and copy for each new release.
66−
67−And for intrepid users, you can opt-in to a development stream and help us find and eliminate bugs before release to the wider public. This development stream is much like how we've been deploying Landscape up until now — but now it's optional.
68−
69−## Mitosis
70−
71−Describing our progress so candidly can feel strange — after all, it sounds so _early_. But to me, it’s exciting. It’s mitosis.
72−
73−Take another example. For all of Urbit’s history — all until now — Tlon was playing the role of both parents to the project when it was really just an embryonic corporate vehicle itself, fated to become twins. But in the past few months the burgeoning Urbit Foundation’s interim Director, Josh Lehman (`~wolref-podlex`), has begun to ramp up responsibility, taking increasing stewardship over urbit.org and giving it a physical voice, an Otherness, apart from Tlon’s own goals.
74−
75−Now, each day, we stray a little closer to these entities splitting apart, a step closer to the Urbit Foundation and the Tlon Corporation being completely different entities with completely different concerns.
76−
77−The same has occurred with Landscape. Previously Landscape was “_the_ interface to Urbit,” the proof that there was more to the project than a Unix executable. And slowly to those of us at Tlon, it became obvious what it was destined to become: a flagship client for an entire network, a tree branch rooting a world beneath clearnet, the first cell by which other clients might be born. Mitosis can be clumsy to watch; it can be nauseating to experience; it can be difficult to make out what will arrive where.
78−
79−But this is, after all, how a body forms.
content/blog/on-christopher-alexander.mddeleted−70
@@ -1,70 +0,0 @@
1−+++
2−title = "On Christopher Alexander"
3−date = "2021-07-19"
4−description = "An overview of his writing and relevance"
5−
6−[extra]
7−author = "Matt"
8−ship = "~tirwyd-sarmes"
9−image = "https://media.urbit.org/site/posts/essays/timelesswaybridge.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/timelesswaybridge.png)
13−
14−_A well-designed house not only fits its context well but also illuminates the problem of just what the context is, and thereby clarifies the life which it accommodates — Notes on the Synthesis of Form_
15−
16−There is an unofficial design canon at Urbit. If you were a fly on the wall, you would hear the name &quot;Christopher Alexander&quot; regularly mentioned around the office. Christopher Alexander is an architect, albeit one who isn&#39;t taught at most architecture schools. However, his work encompasses far more than what is usually understood as &quot;architecture&quot;. Alexander&#39;s work is concerned with the production of functional beauty. What&#39;s remarkable about his books is that they are not empty philosophical manifestos—Alexander gives specific, actionable guidance on creative problems. His best books are manuals for how to construct forms that are &quot;alive&quot;. Alexander threads the needle between highly specific instruction and generalized abstract concepts—his success at this task can be seen in his influence on fields outside of architecture, from computer science to network theory. In his most recent work, Alexander touches upon subjects ranging from religion to math and connects it all into a theory about how the universe functions. But people read him for less lofty reasons: to build a house that is beautiful, design a comprehensive programming language, or figure out how to approach a complex problem. In this post, I&#39;ll give an overview of Alexander&#39;s work and hear from some Urbit staff about his relevance to software development.
17−
18−Alexander&#39;s first book, _Notes on the Synthesis of Form,_ detailed a new way to approach the design process. Released in 1962, it incorporated networks, set theory, language, and math into a new method for accurately modeling and solving design problems. Although Alexander was an architect, the book was concerned with fundamental issues: how do you solve complex problems with hundreds of interconnected variables? The answer lies in decomposing the problem into subsystems and then &quot;diagramming&quot; those subsystems back into a singular integrated form. The process of decomposing a set into [highly-interconnected subsets](https://en.wikipedia.org/wiki/Community_structure) involves a significant amount of computation—Alexander wrote a computer program for the IBM 7090 mainframe which was described in his 1962 paper _HIDECS 2: A Computer Program for the Hierarchical Decomposition of a Set with an Associated Graph._ But this was only half of his design process; after the creation of subsets which are the fundamental units of the design problem, the subsets must be diagrammed. This second half of the process involves integrating and synthesizing all of the variables within a single subset into a conceptual diagram. These fundamental diagrams are then integrated and combined _themselves_ into a single diagram which is the final result of the process. The diagram below is Alexander&#39;s solution to the problem of designing a village in India with a huge number of variables and constraints.
19−
20−![](https://media.urbit.org/site/posts/essays/villagediagram.png)
21−
22−_Notes on the Synthesis of Form_ can be seen as embodying many of the tensions in 1960s America. Computers were seen as a suspicious technology which embodied the institutionalized science that created the nuclear bomb and cold war era tensions. These suspicions were understandable: computers were massive esoteric machines housed in entire rooms of university and government buildings. They were physically and mentally inaccessible to the average American citizen, while the elites who did use them were held in contempt by the populace. Student protests against being just another cog in &quot;the machine&quot; or &quot;IBM card&quot; were partly right—at this point in the early 60s, many intellectuals were interested in [cybernetics](https://en.wikipedia.org/wiki/Cybernetics:_Or_Control_and_Communication_in_the_Animal_and_the_Machine) and the [mathematical modeling of &quot;human&quot; problems](https://en.wikipedia.org/wiki/Theory_of_Games_and_Economic_Behavior) and Alexander drew from these fields frequently in his book. However, when _Notes on the Synthesis of Form_ came out in 1964 computer culture was shifting towards an alliance with the counterculture—a cultural and technological process that would culminate with these massive pieces of institutional technology becoming &quot;personal computers&quot;. He criticized those who wished to keep math and computers away from human creativity: he saw the possibility of computers yoked to creative human beings. He believed this symbiotic approach to technology was necessary—without a new approach to design, the world would continueto produce the ugliness endemic since the industrial revolution. According to Alexander, a designer could only successfully solve this problem by combining his creativity with the analytic and computational power of machines. Through his books and [presentations](https://www.youtube.com/watch?v=98LdFA-_zfA), Alexander would have a lasting impact on object-oriented programming and [pattern based thinking in software design](https://en.wikipedia.org/wiki/Design_Patterns).
23−
24−In _Notes on_ _the Synthesis of Form_ Alexander applauds the buildings and towns of many primitive societies but he notes that there is no hope of a return to this &quot;unselfconscious&quot; state. Therefore, modern people must develop a new design process to reach the same end. But what is this end that Alexander is trying to achieve? Alexander states his aim negatively in _Notes on the Synthesis of Form_ as &quot;the absence of misfits between a form and its context&quot;. An [apophatic](https://en.wikipedia.org/wiki/Apophasis) statement might be good enough for mystics but, for someone like Alexander who was concerned with precision, a positive statement was necessary. His positive statement wouldn&#39;t come until 1979 with the publication of _A Timeless Way of Building_.
25−
26−In 1975, Alexander would begin publishing his most famous book series which included _The Timeless Way of Building_ and _A Pattern Language_. In these works Alexander took a more holistic approach to creative production and placed less emphasis on design models. This new approach cemented the importance of culture as the substrate that supports a people&#39;s inherited &quot;pattern language&quot;. Just like a spoken language, a pattern language is developed incrementally over time by people who adapt to the same local environment. Alexander wrote that &quot;a pattern language gives each person who uses it, the power to create an infinite variety of new and unique buildings, just as his ordinary language gives him the power to create an infinite variety of sentences&quot;. _A Pattern Language_ is an attempt to create a new language from observing the dialects of buildings around the world. Alexander recognized that there were large-scale patterns between people and the buildings they found beautiful—a productive tension between specificity and more general patterns common to all human beings. Alexander&#39;s pattern language is therefore more general than historically generated languages. The &quot;pattern language&quot; approach is now native to many software developers: seeing solutions as complexes of layered and interconnected systems.
27−
28−_A Pattern Language_ is the book that is closest to an instruction manual. It is meant to take the prospective builder all the way through the process of designing and constructing a building, neighborhood, or city. Alexander writes about the macro-patterns of cities and the micro-patterns of buildings, from road design to doorknobs. Alexander wanted to enumerate patterns that interlock and produce beauty at different scales while still being as precise and actionable as possible. In _Notes on the Synthesis of Form_, Alexander was concerned with how to best model reality in order to solve a problem, while _A Pattern Language_ focused on the production of a vernacular that would allow people to produce beautiful buildings.
29−
30−![](https://media.urbit.org/site/posts/essays/patternlanguageexamples.png)
31−
32−Underlying these different pattern languages is a deep, precise, and objective appreciation of an important quality of human existence—what Alexander calls &quot;the quality without a name&quot;. This &quot;quality&quot; is the ultimate goal of Alexander&#39;s work. Greater efficiency and instrumentality cannot be ends in themselves. For Alexander, it is a moral imperative to save the world from ugliness and to make human culture match the natural world in beauty, complexity, and aliveness. It is described in _The Timeless Way of Building_ as &quot;the root criterion of life and spirit in a man, a town, a building, or a wilderness. This quality is objective and precise, but it cannot be named&quot;. The &quot;quality&quot; cannot be named not because it is a vague or airy concept, but because &quot;the quality is too particular, and words too broad&quot;. Nevertheless, Alexander makes an attempt to circumscribe the concept with the words alive, whole, comfortable, free, exact, egoless, eternal.
33−
34−Alexander would say that a Japanese temple and a German church are both approaching the &quot;quality&quot; from different histories and cultures. They are examples of two vernacular languages developing in parallel. The similarity between two modern cities is an example of how we&#39;ve been severed from our pattern languages and therefore the &quot;quality&quot;; we are forced to design from barren earth. Global homogeneity is a symptom of disconnect from both temporal and spatial order—it is the death of our inherited languages.
35−
36−![](https://media.urbit.org/site/posts/essays/timelesswayexamples.png)
37−
38−_The Nature of Order_ is Alexander&#39;s most recent book series and explores the metaphysical implications of Alexander&#39;s thought. According to Alexander, the failure of the modern built world is because we have learned to view the world as fundamentally dead. Alexander makes an argument that is close to [hylozoism](https://en.wikipedia.org/wiki/Hylozoism) or [IIT](https://en.wikipedia.org/wiki/Integrated_information_theory): all structures have varying amounts of aliveness (an aspect of the &quot;quality&quot;). Because of the modern worldview that sees all structure as dead we have become blind to this deeper aspect. The basic component which makes structures alive are strong and varied centers. Furthermore there are fifteen fundamental attributes of centers which allow them to network and become alive. These fifteen abstract units are what patterns are composed of—patterns that are then woven into languages (this process of formalizing implementations as higher-level abstractions should be familiar to any computer scientist). _The Nature of Order_ is the most philosophical and [spiritual](https://www.firstthings.com/article/2016/02/making-the-garden) of Alexander&#39;s work and ties together his overarching preoccupations: how to solve complex human problems and why the task of making the world beautiful is important.
39−
40−You might be wondering how Christopher Alexander is relevant to Urbit?
41−
42−That depends on who you ask.
43−
44−**Galen (~ravmel-ropdyl)**
45−
46−> I suppose the main thing is that most designers tend to become fixated on the mechanics of what they&#39;re building. Most design theory is about how things are made, not what it&#39;s like to live inside of them or actually rely on them on a daily basis. Alexander is much more concerned with the first-person experience of inhabiting a place or a building. I guess his approach is just much more empathetic which means it&#39;s also more practical. He&#39;s concerned with _how people actually live_ and how their environment evolves alongside them.
47−>
48−> We live, work, and develop on Urbit. We&#39;re often the first people to notice bugs because we are the end users ourselves. Alexander makes the point that old buildings were responsive to feedback because the architect was also the inhabitant. This tight feedback means that the system as a whole is dynamic and alive. We want Urbit to be a house that you live in and make yours, because unlike all the other software you use, your Urbit is actually _yours_.
49−
50−**Josh (~wolref-podlex)**
51−
52−> _The Nature of Order_ has had a big influence on my thinking. At first, the idea of all physical structures being alive sounded like something out of a new age bookstore. But not only do I think that Alexander justifies this claim; it started to make intuitive sense when I looked closely at my experience.
53−>
54−> When I first read _The Nature of Order_ I was living in an industrial neighborhood of San Francisco—the scale of the buildings and streets felt inhuman and everything was made of metal, glass, and concrete. I chose to leave. I moved into a 100+ year-old flat and the difference was immediate and visceral. The space felt like it was designed from experience rather than _ex nihilo_. The apartment was meant to be lived in, surrounded by public spaces where strangers could safely spend time outdoors together.
55−>
56−> If physical objects can have the quality of &quot;aliveness&quot; so too can information objects. Alexander&#39;s book is alive. Many of the software projects I&#39;ve worked on have been cold fish. Keeping this quality in mind is an important part of my decision making. I want Urbit to be a living structure.
57−
58−**Édouard (~fabled-faster)**
59−
60−> I enjoy telling people unfamiliar with Urbit and interface design with respect to Urbit, that the object of our work is essentially that of designing an environment &quot;like a piece of paper&quot;.
61−>
62−> Consider how paper as a constrained environment is one that yet can bear nearly any visual expression imaginable—apart from containing drawings or human-made marks, paper can be used to display photographs, paper can be multiplexed to form lenticular holograms, paper can be folded into a crane, etc.
63−>
64−> The &quot;sheet of paper and its resulting forms&quot; I manifest as a design ideal here is what Alexander might refer to as a &quot;semilattice&quot;. A mathematical term he co-opted to describe an ideal structural relationship between elements in a system, as opposed to a &quot;tree&quot;, which is a top-down structural system that forces elements into rigid categorical constraints. [In his own words](https://www.patternlanguage.com/archive/cityisnotatree.html):
65−>
66−> > _For the human mind, the tree is the easiest vehicle for complex thoughts. But the city is not, cannot and must not be a tree. The city is a receptacle for life. If the receptacle severs the overlap of the strands of life within it, because it is a tree, it will be like a bowl full of razor blades on edge, ready to cut up whatever is entrusted to it. In such a receptacle life will be cut to pieces. If we make cities which are trees, they will cut our life within to pieces._
67−>
68−> A city is a good ideal to maintain for the construction of a new internet and notion of personal computing, but I&#39;ve tended towards my own interpretation of a piece of paper as a semilattice-embodying object due to its accessibility and ability to be imagined by anyone, designer or not. Our object of design is that of a receptacle of life, of deep expression, of multiplexed possibilities. When I imagine an Urbit in the not-so-distant future, I imagine it as a _method_ (to contrast against those who pin software&#39;s expression down to &quot;tools&quot; or &quot;functions&quot;) by which I can become &quot;whole&quot; again in a digital context, in all my complexity.
69−
70−Christopher Alexander wanted to collapse the distinction between those who live in buildings and those who design them. Urbit wants to do the same thing with software—in order to not produce ugliness, we should live in what we build. Although we have personal computers now, all of our data is housed in enormous warehouses that make the industrial computers of the 1950s look tiny. What we think of as “our information” actually belongs to someone else and, more often than not, is weaponized against us. Alexander’s moral imperative can be taken and applied to our digital structures. We need to become close with our software again.
content/blog/pin-the-face-that-launches-a-thousand-ships.mddeleted−146
@@ -1,146 +0,0 @@
1−+++
2−title = "Pin the Face that Launches a Thousand Ships"
3−date = "2023-04-07"
4−description = "A guest post by ~nospex-larsut"
5−[extra]
6−image = "https://storage.googleapis.com/media.urbit.org/blog/6a0120a85dcdae970b016766c94c14970b-800wi.jpg"
7−author = ""
8−ship = "~nospex-larsut"
9−+++
10−_The original article can be found [here](https://nospex-larsut.arvo.network/blog/whyhoon) using [%blog](https://urbit.org/applications/~hanrut-sillet-dachus-tiprel/blog)._
11−
12−![](https://storage.googleapis.com/media.urbit.org/blog/6a0120a85dcdae970b016766c94c14970b-800wi.jpg)
13−
14−## Pin the Face that Launches a Thousand Ships[^1] ##
15−_A short piece addressing some of the standard hesitations to learning Hoon, considered in light of all of the recent exciting network activity._
16−
17−### Setting The Table ###
18−One can draw many distinctions between the Urbit apps that were available this time last year and those released thus far in 2023, but the most important of these may be that the former were apps noticed and used almost exclusively by users already on Urbit, where the latter - notably Pongo, Realm, Tirell Studio, Groups 2, Portal, etc - are apps that are _creating Urbit users_.
19−
20−Prior to the start of 2023, the superficial, yet incomplete, take was something to the effect that much of Urbit’s appeal was largely an affinity with the ideas and principles surrounding the project.
21−
22−People who found their way to Urbit latched on to philosophical entry points, among them values such as calm computing, decentralized/privacy/data-ownership maximalism, or aspirations of replacing a generations-deep legacy computing system that entrenched an ethos of doing things fundamentally inefficiently & incorrectly, in ways that not only hobbled the potential of the internet, but resulted in outright harm to its users through establishing platform models and incentives that consciously sought to manipulate the behavior of those users in countless subtle and not-so-subtle ways.
23−
24−Urbit was a nexus, collecting people from disparate backgrounds & disciplines to something like a spiritual oasis, yes, though one seemingly situated a million miles from anywhere familiar to the outside world; its appeal was more a function of the shared ethos of the community and a shared sense of its potential rather than the existence of new & immediately useful alternatives for day-to-day compute tasks.
25−
26−The energy of Assembly '22 was palpaple; it almost seemed that widespread adoption was around the corner. Inevitably, some of the post-Assembly ‘22 buzz seemed to fizzle as the ensuing months went by; many ships launched during that time went dormant, wondering if the potential hinted at would materialize; the shallow criticisn/meme for getting on to Urbit became, “I’m here… um, now what.”
27−
28−This whole time though, the project was simultaneously also an incredibly busy construction site.
29−
30−Remarkably short-lived, “I’m here… um, now what?’ is unraveling with the realization that this universe has always been accelerating, and this new wave of apps establishes a very visible & powerful reference point for truly appreciating that acceleration and the distance traveled; after what seemed like a brief post-Assembly fizzle, the network is again kinetic and crackling with energy, but in reality it was never slowing down.
31−
32−The latest generation of apps marks an important shift in the trajectory of Urbit adoption. Much of this is possible thanks to the proliferation of hosting options - whether [Native Planet’s](https://nativeplanet.io/) self-hosted solutions or through turnkey models - which collectively have vastly streamlined the Urbit onboarding process such that getting on the network is no longer the equivalent of scaling a forbidding & remote mountain peak, arriving at the threshold of a silent monastery, heaving its heavy door ajar to find it seemingly abandoned only a thin sliver of light to illuminate your path, nobody there to acknowledge your arrival much less offer a tour. The thrill of having finally gotten there dampened by the increasing sense that all of its life is subterranean and the real journey is just beginning.[^2]
33−
34−Single-click onboarding and preloaded apps & groups may not seem like a lot for newcomers, but these things have increased tremendously the ability to get on Urbit compared to just six months ago.
35−
36−And just as a selection of competing hosting providers expanded the number of possible onramps, this new crop of Urbit apps likewise provides a complimentary function as entry points - hidden doors to Urbit embedded in the Apple/Android app stores - in ways that Urbit apps never enjoyed previously, all helping to further reduce the friction of onboarding by orders of magnitude. A user searching for a Telegram alternative stumbles across Pongo; new eyes find Urbit without ever intentionally seeking it out.
37−
38−The animating ideas behind the project, I think, remain as alive as ever - Urbit does not need to jockey to become the ‘current thing’ if it can much more efficiently become the undercurrent thing; without having to waste a single breath converting users at the margin on the necessity or virtue of recreating the web in a decentralized & privacy-oriented manner, new users are able to become advocates for apps that provide practical utility for day-to-day compute, creative, and communication needs - but that also happen to be built on such infrastructure. The yew tree doesn’t propagate itself by trying to convince the bird that it is desirable that there be more yew trees in the world, it just wraps its seed in a tasty & nutritious berry and lets the bird carry it off.
39−
40−Compelling apps, built on continually-improving and innovative infrastructure & development tooling is one piece of the adoption curve. These things bring users, who bring perspectives, feedback, ideas, wants, and needs. It brings their attention to earn it. If they are spending time on Urbit apps, they will also be exposed to whatever else is being shared on Urbit through those apps – what will catch their attention that maybe they are not seeing elsewhere? Suffice to say this is all basically network effects 101, so on to the question of learning Hoon.
41−
42−### Some Grains of Salt ###
43−Perhaps that was a lot of table-setting to get to the original inspiration of this piece, in which I wish to present some arguments to the standard objections or concerns that seem to arise for people thinking of learning Hoon. My aim is not to twist any arms or legs, but only to offer some considerations for those on the fence. Hopefully the preceding bit of history at least reveals some shred of the potential opportunities for Hooners (and other creatives - we absolutely need those as well).
44−
45−But first the grain of salt with which you should take the following:
46−I currently Hoon at something approximating a tenth-grade level. I am by no means a natural born developer, nor am I moving towards a dynamic career switch to full-time Urbit dev. Not by any stretch of the imagination. While I am interested in continuing to learn Hoon for a variety of reasons, none are likely to reverberate very far beyond my own ship.
47−
48−My Hoon education began in the summer/fall ’22 cohort of Hoon School Live. In my early 40’s, I walked into it slightly intimidated by its reputation, and with a personal technical background not much deeper than writing Excel formulas, a little Python, and building simple websites (like, 20 years ago). At the moment, I am much better at reading it than writing it, but thanks to HSL & ASL (and everyone involved with those efforts), it does make sense to me.
49−
50−So despite not exactly practicing what all I am about to preach, the foregoing, combined with having talked to enough people on the fence about learning Hoon, I feel somewhat qualified to at least offer some perspective for those considering the question.
51−
52−### The Standard Hesitations ###
53−The following hesitancies seem to be the recurring ones, and we’ll take them one at a time, although they share a significant degree of overlap.
54−<ol>
55−<li> But I already know languages x, y, z, etc and can build things with them now.</li>
56−<li> I hear Hoon is very difficult / weird / etc.</li>
57−<li> Urbit’s future is uncertain; investing in learning Hoon seems risky.</li>
58−<li> I don’t see many immediate jobs for Hoon devs.</li>
59−</ol>
60−
61−__Hesitancy 1: But I _already know_ languages x, y, z, etc and can build things with them _now_.__
62−
63−A valid contention in that one has invested in skills they are eager to put to use or continue to use. But can you build what you want to build - and where you want to build it? And what is the cost in terms of personal satisfaction to working on something which doesn’t truly excite you?
64−
65−There is something of the sunk-cost fallacy is at work here. It is not always a bad impulse, and opportunity costs are very real. But if there is something compelling about Urbit - and the fact that one is at least seriously considering learning Hoon suggests this is the case - and one is willing to view their existing proficiency in some other language as a demonstration of their capability to learn any programming language, then existing knowledge should not act as a barrier to pursuing new knowledge, particularly if there is a suspicion that working on Urbit may afford more intellectually stimulating and enjoyable opportunities.
66−
67−Consider also that a person working on things that truly animate them, despite maybe being relatively less experienced in the language, nonetheless has much more room to grow in a smaller pool where they may create closer connections, have more access to the perspectives of experienced devs, and get noticed for their contributions faster than those that may exist for a person working on things they are decidedly less passionate about amidst a pool of thousands.
68−
69−Yet another upside of working in Urbit is the sheer amount of projects yet to be built (not all require Hoon, btw); projects that may be intriguing to a developer but which already exist in some other language/product have yet to be built on here, and there is a need for them. The amount of still low-hanging fruit and infrastructure work remaining to be done, let alone potential app and utilities, is substantial, and this is a community that generally speaking, respects anybody who can come in and start contributing with minimal direction or permission.
70−
71−And is time spent learning Hoon really time spent not building things? Are you not building skills, reputation, friendships, problem-solving skills, camaraderie - building a better self - throughout the learning process? One can easily present the argument that the cost in this regard is much less than it may seem at first glance.
72−
73−Since one can only try to subjectively weigh the opportunities open to them with their current skills against the nebulous costs of _not_ pursuing something that has piqued their interest, the dilemma often cannot but remain unanswered until one takes the steps to find out; until then, it remains a persistent, nagging 'what if'?. It may take several months to feel really comfortable writing Hoon, but there is a relatively low cost to spending a few weeks to dive in and see if one has an aptitude or affinity for it.
74−
75−__Hesitancy 2: Hoon is difficult and/or weird.__
76−
77−Recognizing that there are a lot of runes, and that Hoon is odd compared to other languages,
78−
79−- learning just a handful[^3] of them along with the basic families (create cores with | runes, call functions with % runes, conditionals statements are built with ? runes, etc) will get one well on their way. </li>
80−- if Hoon is not your first language, you have already demonstrated a capacity for becoming comfortable working within a framework of structure and syntax that was, relative to your previous inexperience, alien and weird. And while there are additional wrinkles in dealing with a functional language, the majority of CS concepts remain relevant and are transferable.
81−
82−And if Hoon is your first language, it is all uncharted territory anyway and not having anything to compare it to means one is essentially in the same situation as in learning any new language, and in that respect it mirrors almost any endeavor to grasp new modes of problem-solving under a unique set of conditions and constraints. Even if you do not stick with Hoon, the new perspectives in problem-solving experience are valuable, and most of the fundamental concepts will be transferable to other languages.
83−
84−You might also consider how to use Hoon’s reputation for difficulty to your advantage from the standpoint that, if you are firmly convinced that it is or will be unduly difficult, then that should yield a much deeper satisfaction after proving you are in fact capable of learning it.
85−
86−And from a more opportunistic standpoint, realize that others who allow this reputation to dissuade them create outsized opportunities for those who are willing to learn it. One can very usefully calibrate expectations here to use the reputation to provide some cover - if it really is that hard, iit is ok to not get it at first, and you can succeed where others gave up or failed to even try.
87−
88−Speaking from my own experience, the sheer amount of terminology was somewhat overwhelming at first, and this was true of both HSL & ASL (more so the latter, IMO). Many of the names seem arbitrary, but like anything, making it familiar is largely a function of effort.
89−
90−Recognize that Hoon's unique syntax and functional paradigm are integral to its design and purpose. Instead of trying to force parallels between Hoon and other languages or concepts you already know, just immerse yourself in it with an open mind and willingness to grasp its distinct features and the reasoning behind them.
91−
92−<div class="polaroid">
93− <img src="https://storage.googleapis.com/media.urbit.org/docs/userspace/hoon-school/binary-tree-bottom-row-full.png" alt="Tree">
94− <div class="container">
95−
96− <p>See - it's easy!</p>
97− </div>
98−</div>
99−
100−__Hesitancy 3: Urbit’s future is uncertain; investing in learning Hoon seems risky.__
101−
102−Much of the table-setting for this piece was an attempt to frame the potential opportunity for devs of any level. Keeping things in perspective, Urbit is just about to hit [3,000 active ships](https://twitter.com/urbitfoundation/status/1637931937351491584). There are several reasons why recent activity may be much more indicative of even greater future growth than one might assume from looking at the chart:
103−<ul>
104−<li>a. Maybe very obviously, the growth of the last three months is not simply a 1:1 reflection of the work of the last three months, but of the many preceding years of core development that made a significant increase in percentage terms within a very short interval possible. The stage is set for much faster growth.</li>
105−<li>b. Previously mentioned, but all these threads are interconnected in that, the more eyes on Urbit, the more ideas, talent and additional users will be introduced to, and recognize the depth, of the opportunity here. A steadily stabilizing building environment (thanks to a)) that attracts and can support more users should continue to build momentum. </li>
106−</ul>
107−
108−Remaining sober about reality, 3,000 users is not exactly a ton in web 2 terms; for Urbit, it is simultaneously very many and very little. But with better apps providing more reasons to be on Urbit, working in unison with better UX and onboarding, those users have more reason to stay engaged with Urbit once they are on, which means anything an aspiring Hooner or creator can think of to give them compelling reasons to make them even more engaged is an opportunity.
109−
110−Deliberately twisting the fomo screws a little, it is as true for learning Hoon as it is of anything else that the more widely adopted a platform or language becomes, the safer a bet it will be in terms of stability and longevity. With the accretion of that stability however, the window for realizing the benefits of gaining early experience and exposure in a less-crowded space diminishes accordingly as the sense of perceived riskiness in staking ground there decreases. Like any investment, uncertaintly about the future carries the gift of a difficult to quantity but very real species of camaraderie, credibility, and respect that is only available to those willing to get involved at early stages, and which is lost as the project starts to look increasingly like a 'sure thing.' Hard to value, but weigh that aspect when considering if one should begin learning now or wait until things look ‘slightly more certain’ - what is the bar for this certainty? What is ‘certain enough’?
111−
112−Urbit, by (beautiful) design, is a very low-time preference project in some respects, but it is growing quickly. And the longer you’ve been watching Urbit grow, the more perspective you have of how much can happen in a very short time.
113−
114−When there are 10,000, 100,000 active ships it will be a trip in itself to remember that you started learning Hoon back when there were "only" 3,000, and contributed in maybe some non-trivial way to attract some quantity of new ones by building something you were excited about building.
115−
116−__Hesitancy 4: I don’t see many immediate jobs for Hoon devs.__
117−
118−_Not yet you don’t_. Much of the response to Objection 3 is also relevant here.
119−
120−The pool of Urbit companies is not fixed. It is not an insurmountable obstacle to start up a small-scale dev shop with a handful of talented devs.
121−Money flowing into Urbit is being reported with increasing frequency, and this is only the incoming money that you _hear about_. As Urbit grows, money will chase money, bringing more jobs and more opportunities. For better, or worse, of course, money changes things - more money will necessarily mean more discipline, more focus on shipping product, etc. But not having money changes things too. Money comes here in no small part because it sees the energy and intensity with which this community has been building out Urbit - regardless of whether money was flowing in or out of it - it attracted devs because the project itself was an ambitious worthwhile good in itself.
122−
123−There is much opportunity here for bright, motivated developers willing to make the effort to learn. One only has to bump the total current dev headcounts up against the growing momentum of the project to see the opportunity, whether it be in core projects, apps, or novel pairings with creators to determine ways to distribute and produce content on Urbit. The speed of deployment on Urbit compared to other projects and relative exposure to other platforms affords a significant advantage to motivated, talented people in terms of visibility - when an app gets published on Urbit, everyone sees it.
124−
125−### Wrapping Up ###
126−Hopefully the above provides some perspetive on reframing some of the standard hesitancies. None of them are irrational. However, if none of the above sways you, ask what projects or features might materialize on Urbit that would make you wish you started learning Hoon a year ago (which, in the grand scheme, would make you a reasonably well-experienced Hooner) and then consider that you could wait for that thing to materialize, or play an active part in making it a reality that will attract many other users to the network, along with making others feel like they should have started learning Hoon a year ago.
127−
128−And if the Hoon question is indeed a recurrent & nagging one, attempt to replace it with the question, “two months from now (approximately the duration of an HSL cohort), would I rather have tried learning Hoon and discovered that I don’t like it and be done with the question, or still be sitting here wondering if I should learn Hoon?”
129−
130−The resources for learning Hoon are growing:<br>
131−● [Hoon School Live](https://developers.urbit.org/courses/hsl)<br>
132−● [App School Live](https://developers.urbit.org/courses/asl) <br>
133−● [App Workshop Live](https://developers.urbit.org/courses/awl) <br>
134−● An upcoming [Core Dev course](https://developers.urbit.org/courses/csl)<br>
135−● The growing corpus of [documentation](https://developers.urbit.org/reference/hoon/overview)<br>
136−● And of course the most valuable resource of all is all the people on the network who are willing to answer questions and help one learn. Find them in the Hacker House.
137−<p>
138−
139−If something about Urbit is drawing you toward it, if the project resonates with you in a way that other things in tech do not - if you are truly intrigued by it and want to be here - it is reasonable to assert that the process of learning Hoon is not simply a tax with questionable upside, but a productive process in and of itself; that the very process of learning it will embed you deeper into a space you want to be in.
140−
141−So learn Hoon. Not only is it fun, but as an Urbiter, it is something of a cultural heritage, and the conduit between reality and whatever your endless imagination conceives Urbit’s potential to be - space here is wide open, and any of today’s aspiring Hooners has the potential to pin the face that launches a thousand ships.
142−
143−----------------
144−[^1]: To 'pin a face' is to declare a variable in Hoon.
145−[^2]: Maybe some slight dramatization; this aspect also made it fun for those not in need of immediate gratification.
146−[^3]: [See 'Rune Utilization in Hoon'](https://developers.urbit.org/blog/rune-frequency-202212)
content/blog/pki-maze.mddeleted−70
@@ -1,70 +0,0 @@
1−+++
2−title = "Designing a Permanent Personal Identity"
3−date = "2019-11-26"
4−description = "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."
5−
6−[extra]
7−author = "Philip Monk"
8−ship = "~wicdev-wisryt"
9−image = "https://media.urbit.org/site/posts/essays/pki-maze.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/pki-maze.png)
13−
14−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.
15−
16−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.
17−
18−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.
19−
20−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.
21−
22−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.
23−
24−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.
25−
26−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.
27−
28−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.
29−
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−
32−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.
33−
34−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.
35−
36−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.
37−
38−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.
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.[^2]
41−
42−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.
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.[^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−
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−
48−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.
49−
50−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.
51−
52−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.
53−
54−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.
55−
56−To create a sane network, we require global consistency for all our names. There are three other properties; pick any two:
57−
58−- Comets are impermanent, self sovereign, and plentiful.
59−
60−- Planets are permanent, self sovereign, and not plentiful.
61−
62−- Moons are permanent, not self sovereign, and plentiful.
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.[^5]
65−
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−[^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−[^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−[^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−[^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.mddeleted−50
@@ -1,50 +0,0 @@
1−+++
2−title = "Platform Decay, Decentralized Marketplaces, and Urbit"
3−date = "2020-05-07"
4−description = "Urbit is calm computing. Calm commerce follows naturally. "
5−
6−[extra]
7−author = "Nicholas Simmons"
8−ship = "~simfur-ritwed"
9−image = "https://media.urbit.org/site/posts/essays/platform-decay-preview.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/platform-decay.png)
13−
14−## Platform decay, decentralized marketplaces, and Urbit
15−
16−The current model followed by almost all social media services is one of easy and free participation in exchange for advertising and data collection. If you’re a fan of decentralized projects like Urbit, or just someone who pays attention to the ongoing debate over social media incentives, you’re likely to be familiar by now with a central critique of this model. There are historical reasons for why we ended up here: ad-serving and user-tracking technology outpaced subscription and micro-payment models because of recalcitrance by banks and regulatory hassles that prevented ‘real money’ from easily integrating into websites. Instead, we pay in eyeballs and analytical data.
17−
18−When we take a moment to think about possible alternatives, we usually fixate on that original bad bargain—’free’ in exchange for ads—before lamenting that first-mover advantage, critical masses of users, and sophisticated algorithms have made it very hard to see successful challenges to the reign of sites like Facebook and Twitter. We’d be happy to pay a few pennies to have an ad-free, data-secure alternative. But this critique misses something larger. There are, in fact, plenty of colossal Internet businesses that actually do charge people money to participate: e-commerce platforms. Some of these enable the sale of virtual goods and content (Steam, Patreon, Spotify), some physical goods (eBay, Etsy), and some both (Amazon, Kickstarter). Because these commercial platforms had to figure out how to make online payments easy and secure for mass audiences for their core business to work, they avoided the total dependency on ad revenue that social media sites have always had. Unfortunately, several factors have conspired to push e-commerce platforms closer and closer to a social media–style business model—by manipulating user behavior and prioritizing ad revenue and branding deals over providing a fair marketplace for ordinary buyers and sellers.
19−
20−E-commerce platforms, as generally perceived by the public, operate on a simple ‘deal’: users (small or large, individual or corporate) can buy and sell goods and services on the platform, facilitated by search engines and payment processors, and augmented by reputation systems and safeguards for buyers and sellers. In exchange, the platform takes a small cut of the revenue that passes through. E-commerce platforms were a key part of the genuinely revolutionary effects of ‘Web 2.0’. As software ate the world, it uncovered siloed value that had been previously inaccessible. This was particularly true for items with a high potential value, but a small market-base. Just as social connection technologies—from Usenet to Facebook—enabled people with niche interests to find each other, mass-platform e-commerce sites allowed buyers and sellers of niche goods—physical or virtual—to find each other and transact, thus granting those goods actual value, and their owners revenue.
21−
22−The ‘deal’ that eBay, Amazon, and the others made with millions of buyers and sellers was a great business proposition for over twenty years. They could take advantage of centuries worth of asymmetrically siloed value, now searchable worldwide, and take a ~10% cut. Their moat was in sophisticated search algorithms, network effects, and, as time went on, finding ways to make online payments as easy and secure as possible—the road not taken by early social media companies like Myspace that decided in favor of reliance on ad revenues. Crowdfunding sites like GoFundMe and Kickstarter reduced friction in online fundraising in exchange for a cut. Patreon applied a similar approach to regular support of individual content creators; Spotify, Soundcloud, and Pandora made it easier to legally stream music. All took advantage of the same ability to extract value from widely distributed niche products. All offered their vendor-users a version of the same deal: facilitation of niche broadcasting in exchange for a visibility and transaction fee.
23−
24−The problem is that the deal is now decaying rapidly, without any prospect of recovery. The behavior of every mature e-commerce vendor platform clearly shows an accelerating trend towards exploiting user data, serving ads, pushing exploitative auxiliary services like high-interest loans, and taking advantage of vendor lock-in and near monopolies on customer attention to warp marketplaces for the benefit of large brands. In other words, they’re all double-dipping.
25−
26−Clicking through normal transactions on PayPal, for example, invariably produces ads for subprime credit cards; similarly, Patreon users can now borrow against their (expected) future earnings. Spotify has reinvented pay-to-play for artists and labels; eBay has leaned hard on promoted listings, with extra fees, in order for vendor offerings to show up in search results. Amazon has increasingly ‘gated’ third-party offerings in categories and brands in which not only their own ‘store brand’ products, but those of large brands with which they have struck external deals, compete. A growing number of consumer products have essentially been prevented from being resold on Amazon or eBay by the threat of spurious, but expensive, anti-counterfeiting lawsuits by major brands, thus buoying new sales by effectively eliminating resale value.
27−
28−There are several key reasons for this. One is simply that as the initial burst of siloed value being accessed, revalued, and bought and sold subsides, the number of transactions plateaus and e-commerce platform revenue with it. The traditional model of venture capital funding for platform businesses, however, demands an exponential growth in profits; the exploitation of customers and vendors becomes irresistible in order to maintain these profit trajectories. Another reason is that as e-commerce platforms accrued large userbases of both buyers and sellers, they began to act like other online platform businesses—distorting marketplaces and shaping user behavior to maximize retention and profit, rather than offering a straightforward service.
29−
30−Platforms exploit user data because they can. Their ownership of your data is baked into the client–server architecture on which their businesses run, and the system cannot correct itself. Chris Dixon, in his prescient [essay](https://onezero.medium.com/why-decentralization-matters-5e3f79f7638e) about the future of decentralized commercial protocols, presents an S-curve whereby a platform business transitions between serving its users in order to grow and achieve market dominance, and eventually exploiting those users once it has achieved that dominance. In particular, early-stage e-commerce platforms do anything they can to benefit vendors willing to sell on their platform. Vendor presence is vital to attracting customers, but once those customers have been captured, the vendors become the [competition](https://www.wsj.com/articles/amazon-scooped-up-data-from-its-own-sellers-to-launch-competing-products-11587650015?mod=searchresults&page=1&pos=1). Customer eyeballs and dollars are a finite resource, and platforms carefully calculate the potential profit to be made from showing customers one product or another. The lack of platform-agnostic reputation systems also aids vendor capture by platforms. Rather than optimize for a system in which any buyer or seller with good external credibility (measured by, for example, credit scores or relevant business licenses) can use their platforms as a commercial intermediary, eBay and Amazon use seniority and internal transaction records to determine vendor permissions. Since sui generis internal reputation scores can’t be taken to other platforms, these policies create a sunk cost of effort and reputation which traps vendors within specific marketplaces, without an easy exit.
31−
32−Market consolidation and bureaucratic pressures for legibility also work against maintaining a square deal with vendors and users. The midpoint on Dixon’s S-curve, when exploitation of vendors begins to occur, can also be seen as the point where a customer base is solid enough to be marketed to advertisers and major brands who can pay for favorable search placement. Such large, legible deals are easier to negotiate, easier for individual executives to take credit for, and are useful in meeting arbitrary investor benchmarks and buoying quarterly revenue statistics; but they privilege larger brands with larger ad budgets over ordinary sellers in a niche. Another major downside of large, centralized e-commerce platforms is that, like any large bureaucracy, they have PR and regulatory concerns that provide an attack surface for regulators, activists, litigious brands, and monopolists seeking to crush competition—almost invariably at the expense of vendors and customers.
33−
34−Even more subtle and worrying effects come when e-commerce platforms realize that the actual products being shown do not have equal chances of being purchased, therefore delivering revenue to the platform itself. This applies even when the products being compared have nothing in common: apples to oranges; cat food to hiking boots. Accuracy of internal search engine results, and a comprehensive spread of offerings, are regularly sacrificed to the aim of placing a ‘sticky,’ lowest-common-denominator product in front of the customer. I recently ordered vegetable seeds on Amazon; after a few searches for different kinds of seeds, I started having to wade through ‘premium placement’ ads for farmer-themed romance novels before I could view, and choose from, the actual seeds on offer. This deprecation of niche products is ongoing and makes the interface of such platforms less and less navigable. It’s also worth mentioning that, frequently, such deprecation has very little to do with durable consumer interest or a free-market determination of product value. Rather, they come from a ‘thumb on the scale’ of large advertising campaigns that seek to convert a wide range of consumer curiosity into sales for a particular product at a particular time.
35−
36−The manufacturing of consumer desire in this way feels creepy. It’s frustrating to have your tastes dictated to you by whoever has the biggest ad spend. It also spells the end of small business on the Internet—you can spend years mastering knowledge of a profitable niche, but if Amazon profiles your customers and decides they’re more likely to spend their money on the latest Pixar DVD, your listings will be shoved below the fold. Pixar paid for placement and you didn’t; the Pixar ad placement deal made a splash in the quarterly report, your fees didn’t. In cultural terms, this threatens to create a winner-take-all situation that will prevent new and niche artists and thinkers from gaining attention at the expense of explicitly placed, ‘premium’ content.
37−
38−Again, this is all accelerated by the way that ad sales function; platforms like broadly popular content and products because the larger number of customers searching for and purchasing them creates more granular data and increased opportunities for micro-targeting ads. This incentive leads to the increasing invisibility of long-tail, niche content or products whose appeal has less to do with lowest-common-denominator addictive virality, whether it’s the repair manual for your ‘85 Toyota or a copy of Plato’s _Republic_. It also accelerates the stampede toward a ‘sharing’ and ‘renting’ economy; when ad impressions are a sizable part of company revenue, forcing customers to return to ad-infested platforms to continue renting objects or content, rather than making one-time purchases, is a no-brainer.
39−
40−There’s a nightmare scenario here, a kind of hybrid, zombie brainchild of Jean Baudrillard’s concerns about the simulation of common meaning and Peter Thiel’s arguments about the stealthy hollowing-out of industrial capacity. In this nightmare future, financial and legal regulation strangle the viability of anything like a real industry, and we’re left with a handful of incumbent platforms which have concluded that the smartest move is to just sell vaporware ‘content,’ collectible bobbleheads, and sugar water. The supposed niche of any platform business is academic at this level; Amazon, Spotify, and Patreon are simply machines for converting user attention into the highest-margin purchases possible. The ‘high-velocity trash economy’ (h/t Pierre Rochard) increasingly shows itself as a network of funnels by which insider prognostications about government and central bank policy are turned into profits, with the illusion of productive activity serving only as window dressing. This deforming process extends all the way down to the vagaries of the consumer economy. If there is no financial reason for available consumer offerings to be anything we actually need, they can and will be deprecated and displaced; useful goods and services will be sidelined by literal trash that has the ‘financial’ logic of maintaining an unbroken, upward metric by virtue of direct parasitism upon the human brainstem.
41−
42−The implications are obvious: if we can’t make markets obey a representation of factual reality, we won’t be able to build stuff we need in the factual world. The damage which has been done by our replacement of infrastructural capacity with nebulous thematic concerns that happen to feed our dopamine receptors is becoming rapidly apparent to anyone paying attention. If our search results for ‘hammer’ algorithmically default to pro wrestling merchandise, that changes our real, physical lives. Our ability to go out and build things with a hammer is diminished, and so is, implicitly, the importance placed on that act of building by the culture that surrounds us. The physical world of technology, no less than the informational, is a slippery pile of patches and detours. When JPL scientists reestablished contact with an early satellite after decades of inactivity, they relied on vintage computer parts from eBay to communicate with it. In some areas (cars, hand tools, some analog electronics) the present consumer offerings have generally declined, in terms of reliability and user serviceability, from a zenith some twenty or forty years ago. Forty-year-old Toyota trucks often fetch more, in equivalent value, than they did when new, because regulations and planned obsolescence have prevented the ongoing production of trucks that meet the same standards of reliability and fuel economy. The failings of our just-in-time supply chain have likewise been made blatantly obvious by the disruptions of COVID-19. Both argue in the strongest terms against allowing consumer-facing e-commerce to be captured by what are rapidly becoming payola-driven entertainment platforms rather than marketplaces for essential goods, whether car parts, beef jerky, or N95 masks.
43−
44−So what’s the solution? Many prescient observers envision decentralized protocols to safeguard the data of vendors and buyers, and algorithmic representation of their offerings. Any new ‘deal’ between vendors, buyers, and platforms must be rooted in data ownership and neutral code if it is to avoid a repeat of the current paradigm. Personal ownership of browsing, buying, and selling data is necessary so that search results and boosted listings aren’t distorted for each customer in order to ‘nudge’ them into consumptive patterns, and so that value is retained in useful, niche items which don’t lend themselves to dopamine addiction and manipulative marketing campaigns. The hope is that widespread personal control of data would lead to the emergence of protocols and marketplaces which have realistic economic models based on fees; the ‘square deal’ originally promised by ‘Web 2.0’ platforms. Such marketplace businesses wouldn’t be exponential unicorns; they’d be steady, stable infrastructure companies like those that built the foundational technologies of the 20th century and made a secure, middle-class lifestyle possible for millions of people. Data ownership wouldn’t prevent platforms from incorporating advertising, but it would shift the balance of power to an opt-in basis. By reducing the ability to target such ads, it would prevent the lopsided reliance on ad revenue which leads to smaller vendors being neglected. Big companies wouldn’t go away; they’d make their margins by focusing on economies of scale in the real world: logistics, fulfillment, and redundant inventory for commodity goods.
45−
46−We need decentralized, robust reputation systems to combat monopolistic platform lock-in and its attendant abuses, but also so that smaller, more private marketplaces can create their own rules, and still be functional and secure. Right now, reputation data is siloed by the same companies that built large marketplace platforms, which means that anyone who moves outside of their walls loses access to it, and thus loses protection from bad actors. The ability of users to run their own reputation scans, or to pay for a separate layer of reputation data which is marketplace-agnostic, is essential to breaking the hold that large marketplaces currently have on e-commerce. If a local community wanted to trade in homegrown food, for example, they could restrict access, while also making sure that their members didn’t have a previous, external track record of fraud in other markets.
47−
48−Where does Urbit fit into this? We think that the basic infrastructure and alignment of the Urbit system has two major advantages to offer those who will build these new protocols. The first is the simplicity of running one’s personal server of data and locally hosted processes. Any attempt to reimagine privacy-focused e-commerce under current client–server models quickly runs into complexity problems—Web 2.0 platforms require reams of legacy code and armies of SREs to keep them running. The second is the ability to maintain a semi-private but reliable digital identity among different platforms and communities, including commercial ones. Most current conceptions of autonomous marketplaces rightly focus on the potential of cryptocurrency as a decentralized payment system. But wallet and exchange problems, the work-in-progress state of micropayment infrastructure, and price fluctuations among different currencies (crypto or fiat) clearly show the need for a decentralized reputation system which is not simply a crypto wallet address, but is likewise more secure than a PHP forum profile. We think that Urbit ID can provide such a holistic, yet pseudonymous, reputation system without being tied to a particular currency, wallet, or commerce platform.
49−
50−Right now, Urbit is a communication system for communities and individuals. We aim to create spaces where human conversations can take place with a minimum of distractions. We believe that commerce, too, is best achieved in such a space; think of your local hardware store rather than a carnival with barkers at every turn. We also see this as a priority deeply in keeping with the underlying ethos of Urbit. We frequently speak of Urbit as a tool, and reference classic principles of tool design when considering how to expand it. The test of any tool is in its ability to shape the world; if that function isn’t well matched to both the actual world, and the hands and desires of those who will wield it, usability will suffer. Open marketplaces should function as magnifying glasses, to hand buyers and sellers a tool to see the shape of supply and demand, rather than distorting the actual terrain of the marketplace in order to create its own desires. Soon we’ll have BTC integration tied to Urbit ID, and independent security audits of the Urbit system. We want Urbit to become the foundation on which users can build simple, decentralized protocols that enable us to safely and easily buy and sell goods and content that we actually want and need. Urbit is calm computing. Calm commerce follows naturally.
content/blog/precepts-discussion.mddeleted−756
@@ -1,756 +0,0 @@
1−+++
2−title = "Precepts: Discussion"
3−date = "2020-03-17"
4−description = "The precepts aren’t arguments. We discuss and justify them here."
5−
6−[extra]
7−author = "Philip Monk"
8−ship = "~wicdev-wisryt"
9−image = "https://media.urbit.org/site/posts/essays/discuss-01.jpg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/discuss-01.jpg)
13−
14−The 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.
15−
16−We will address these in the same categories presented above:
17−
18−- A: General Design. Principles of engineering that apply in a great
19− many situations. Any piece of code will exhibit at least a few of
20− these.
21−
22−- B: Specific Design. principles of engineering that apply in a few
23− specific situations. What these lack in general applicability they
24− make up in specific guidance.
25−
26−- C: Attitude. Good code is the result of people approaching the act of
27− engineering with the right attitude.
28−
29−- D: Theory. The eternal tension between theory and practice must not
30− simply be acknowledged but dealt with.
31−
32−- E: Text Style. Code form matters.
33−
34−- F: Real Software. Not all software matters. Any software which
35− wouldn't exist on Mars isn't real.
36−
37−![](https://media.urbit.org/site/posts/essays/discuss-02.jpg)
38−
39−### A: General Design
40−
41−These are principles of engineering that apply in a great many
42−situations. Any significant piece of code will exhibit at least a few
43−of these.
44−
45−### Simplicity
46−
47−> A20: One hundred lines of simplicity is better than twenty lines of
48−> complexity.
49−
50−> A21: Prefer mechanical simplicity to mathematical simplicity.
51−
52−At Urbit's root is a strong opinion on what constitutes simplicity. We take a semi-subjective view of simplicity. Specifically, we say that the sort of simplicity that matters is the sort that makes it easy to reason about stuff. We call this "mechanical simplicity".
53−
54−A competing view of simplicity says that it can be measured objectively by metrics such as the number of moving parts, the number of kinds of moving parts, the orthogonality of concepts, or cyclomatic complexity. We believe these are important metrics because they are good approximations of mechanical simplicity, but they don't tell the whole story.
55−
56−In acoustics, we use decibels of sound pressure to measure objective volume of sound. However, the Fletcher-Munson curves (equal-loudness contours) describe how loud sounds are perceived to be relative to their frequency. For example, a 75 dB sound at 4kHz sounds equally loud to a 90 dB sound at 10 kHz, even though the latter is over 20 times the sound pressure.
57−
58−Similarly, some sorts of complexity are much easier for humans to deal with than others. For example, humans are much better at learning languages compared to even simple mathematics. Even those who are "good at math" are objectively much better at languages, in terms of how much complexity they can absorb. Humans are also built to understand some
59−social dynamics and structures, even very complex and nuanced ones, without even consciously knowing the rules to them.
60−
61−Some examples of things that are objectively quite simple but subjectively hard for people to learn:
62−
63−- Pointers. Once you've properly learned them, it becomes hard to
64− sympathize with your past self that found them difficult, but in
65− practice these are a stumbling block for many people. Some think
66− they're a "weed-out" concept, meaning they're just a good litmus test
67− to see if you're the type of person who can learn how to program.
68− Even if that's the case, it's still meaningful that they're effective
69− in that.
70−
71−- Recursion. Same as above. Notably, `while` loops do not evoke the
72− same reactions in people.
73−
74−- Monads. A little more complicated than the above, but objectively not
75− that complicated. Certainly much less complicated than the C++
76− standard library, but for some reason many people fail to learn monads
77− after giving it an honest attempt, while that's rarely the case for
78− the C++ standard library.
79−
80−- Math in general. The ideas in mathematics are generally pretty clean
81− and small, which is why once you've learned a concept, it seems
82− obvious in retrospect. The C++ standard library doesn't look much
83− more obvious in retrospect than it does on first glance.
84−
85−- Any language that induces a moment where you exclaim to yourself,
86− "This is true programming! Everyone should program this way, it's so
87− obviously better!". People say that often about Lisp, Haskell,
88− Prolog, and Smalltalk. Nobody ever said that about C, Java,
89− Javascript, or Python. And yet, which ones are easier to learn?
90− Which ones are used in real life?
91−
92−I've emphasized learning here, but the same principles apply to using a
93−tool after you've learned it.
94−
95−When evaluating simplicity, presumption should be on the side of "what
96−everybody does when they have a choice" instead of "what's
97−mathematically simpler". Being mathematically simple is a point in your
98−favor, but the burden of proof still falls on you to argue that it will
99−be simpler to learn and use.
100−
101−Adherence to this precept is difficult because you have to decide
102−whether an objectively simpler construction is in fact better. This
103−gives a framework for deciding the question.
104−
105−> A19: Dualities must be faced head-on and analyzed differently at
106−> different layers.
107−
108−A crucial point is that the question of simplicity depends on the facts
109−and circumstances of the case. In deeper layers of the system,
110−mathematical simplicity tends to pay greater dividends. If the features
111−of the base layer are not orthogonal, the interactions between them will
112−only grow more complex as you rise in the stack. If the base layer has
113−many moving parts, the number of moving parts can only increase as you
114−rise in the stack.
115−
116−This isn't the only duality that depends on the layer of the stack.
117−The most important layering of the stack is between "systems" and
118−"applications", where "applications" are those pieces of code on which
119−no other application depends. Many answers that are correct in system
120−code are incorrect in application code, and vice versa. These precepts
121−are an attempt to describe principles that apply at all areas of code,
122−but they're much more important to follow in system code.
123−
124−> A22: The Law of Leaky Abstractions is a lie; abstract airtightly.
125−
126−The Law of Leaky Abstractions says that all non-trivial abstractions are
127−leaky. This is the sort of statement that most engineers will accept
128−immediately and most mathematicians would dismiss out-of-hand. In
129−mathematics, if an abstraction leaks, it's not simply an imperfect
130−abstraction, it's completely wrong and should be thrown away. So they
131−manage to create perfect abstractions. They don't always abstract what
132−you wanted to abstract, but at least they're perfect.
133−
134−If mathematicians can do that, there's no reason programmers shouldn't
135−be able to do it as well. Sure, programmers have to deal with some
136−performance considerations that mathematicians can elide, but that's
137−rarely the reason abstractions leak. They leak most often because the
138−creators are lazy or sloppy. If your abstraction leaks, find a way to
139−either plug the leak or reframe the abstraction to incorporate the
140−"leak" in a coherent way. It's not a leak if it's part of the spec. I
141−call this "turning leaks into decorative fountains".
142−
143−### Conceptual clarity
144−
145−> A6: Represent your data as closely as possible to the essential
146−> structure of the problem.
147−
148−There are times when you need to represent your data in an unnatural
149−format for performance reasons, but this is rare. When possible, keep
150−the structure and location of your data in as natural of a manner as
151−possible. For example, if a function can produce an integer or an
152−error, don't produce a negative number to indicate an error — use an
153−explicit tagged union.
154−
155−An important part of this is to fit your data types to your data
156−skin-tightly. If your data types permit states that you intend to be
157−impossible, this is suboptimal. There are degrees of this (if you need
158−a number between 0 and 1000, a uint32 is probably fine even though it's
159−suboptimal), but it's important to strive for it.
160−
161−As an example, if your program can't respond to requests until it
162−completes an initialization process to fill in some of its state, it's
163−tempting to make nullable all the parts of its state that are filled in
164−during the initialization process, then just check whether they're
165−nullable when you use them. This creates a complex set of representable
166−states of partial initialization, and any bugs in that area will be
167−difficult to track down. A better option is to create a "larval" stage
168−of your program that performs the initialization. If requests come in
169−during this larval stage, queue them up until it's done. When it finishes
170−initialization, it metamorphizes into the full program, where all the
171−fields in its state are not nullable. Then run through its queue of
172−pending requests. This more closely resembles the essential structure
173−of the problem.
174−
175−> A8: When mating different paradigms, build one cleanly on top of the
176−> other.
177−>
178−> A9: Never misuse an abstraction.
179−
180−An abstraction provides a set of tools to solve a problem. Use them in
181−the intended way. If this is awkward, consider that this may be the
182−wrong abstraction to use. If the impedance mismatch is large between the
183−paradigm that your program uses and the paradigm that you're mating it
184−with, consider building an explicit layer whose sole purpose is to
185−convert between the paradigms (see B5).
186−
187−### Correctness
188−
189−> A10: Correctness is more important than performance.
190−>
191−> A12: Correctness is more important than optimality.
192−
193−Sometimes you devise a solution which is fast but slightly incorrect.
194−This is rarely a good idea. Especially at lower layers of the system,
195−incorrectness expands as it bubbles up.
196−
197−Other times, you devise a solution which is correct, but you could
198−probably make it cheaper without sacrificing correctness. Sometimes
199−that's worth doing, other times it's not.
200−
201−Finally, in some cases you find a solution that's "optimal"
202−performance-wise or simplicity-wise, but it doesn't quite handle every
203−situation correctly. Maybe in the real world there are genuine
204−exceptions, and the code is much faster or simpler if you don't handle
205−those exceptions. In these cases, it's more important to handle every
206−case correctly than to "snap" to the nearest elegant formulation.
207−
208−> A11: Be simple and uncompromising in defining what's correct; go crazy
209−> with optimizations.
210−
211−Nock is a great example of this. It contains the character of the
212−virtual machine, but its asymptotics are bad. Add jets to fix the
213−asymptotics.
214−
215−Another example is the ACID nature of Arvo. Arvo is a pure
216−function f(logs) of its event log, so formally Arvo is just a
217−function run against an event log. A naive implementation has
218−very bad asymptotics; processing each new event is O(n) in the
219−number of historical events. Choose the function g(state,log)
220−such that f(logs ++ log) = g(f(logs),log). Then, as long as you
221−keep the state in memory, processing each new event is constant in
222−the number of previous events. This still requires O(n) restart
223−from disk, but you can also periodically (and non-blockingly)
224−write a checkpoint of the state to disk, so that restart from disk
225−is only linear in the number of events since the last checkpoint.
226−
227−This pretty much says it all. Define what's correct in as simple of
228−terms as possible — this will make it easier to implement and reason
229−about. Then don't compromise on it.
230−
231−> A13: If you don't completely understand your code and the semantics of
232−> all the code it depends on, your code is wrong.
233−
234−It's impossible to build correct code on a foundation that you're unsure
235−of. This is different than the problem of building something with
236−strong guarantees on top of something with weak guarantees — for
237−example, delivery guarantees on top of an unreliable transport protocol.
238−In that case, you are sure of the underlying system, it's just that what
239−you're sure of is that you can't rely on it delivering packets in order
240−or at all. So, you formalize what you _are_ sure of, which is that it
241−will eventually get your packets through if you keep sending them
242−forever. And that's something you can build on.
243−
244−This is another reason it's important to have simple and accurate
245−correctness claims. When somebody else relies on your code, they
246−will need to know what exactly you claim to provide. If you're
247−accurate, then they don't have to understand your code, only your
248−guarantees.
249−
250−> A14: Deterministic beats heuristic.
251−
252−Heuristics make it hard to give precise safety guarantees, so you should
253−only use them when you don't guarantee much.
254−
255−> A17: Referential transparency is honesty and stability.
256−
257−A claim of referential transparency is a very strong guarantee, so it's
258−very useful for any code built on top of it. That code doesn't need to
259−know anything about how you produce the value because it can't
260−negatively affect the rest of the system, and it's free to cache
261−indefinitely.
262−
263−> A18: Responsibilities should be clearly separated.
264−
265−A program should be responsible for its own guarantees, though it must
266−rely on other programs to maintain their guarantees. You should avoid
267−guarantees that unduly couple separate programs. Any guarantee that
268−references state in more than one program is suspect.
269−
270−### State management
271−
272−> A1: Data is better than code
273−>
274−> A15: Stateless is better than stateful.
275−>
276−> A16: Explicit state is better than implicit state.
277−
278−Data is better than code, but code is better than state. If you must have state, state that is data is better than state that is code.
279−
280−There are many reasons for this. The most basic one is that humans are better at dealing with nouns than verbs. This is true to such an extent that we subconsciously convert statements of the form "so-and-so does such-and-such" to "so-and-so is a such-and-such-er". It's more challenging to view someone as a composition of their internal motivations such that they'll act in a particular way. It's much easier to see them as simply "friend" or "enemy" or "socialist" or "evil capitalist".
281−
282−Socially, the verb -> noun simplification is often problematic because it doesn't communicate the whole picture as accurately. It's an approximation that fails to capture important nuances. And that's because any nontrivial verb can't be understood in terms of a simple noun.
283−
284−However, the practical implications of this insight are different in code. Socially, people are who they are, so the best we can do is learn to understand them better. In code, though, we have a
285−powerful tool: convert the verbs to actual nouns. We can take advantage of our innate ability to reason about nouns and use that to make code that can more easily be reasoned about.
286−
287−Another way of looking at this is that data is easy to reason about. Code is hard to reason about, because it's much larger. Function types are known as "exponential types" because the number of possible functions between sets of size `m` and `n` is `n^m`. If there's global state of size `s`, this is even worse: `n^(m*s)`. The halting problem says that it's impossible in general to even determine if a piece of code will finish without running it.
288−
289−A final way of seeing this is that it's easier to reason about things that don't change. Data doesn't change, so it's a stable foundation. Pure code changes based on its arguments. Impure code changes based on its arguments and state. Impure code that uses code stored in its state
290−nests this whole complexity within itself.
291−
292−You can't, in general, update code in any way other than replacing it wholesale. This is not true of data, where to upgrade you just need a function from the old data type to the new data type.
293−
294−Sending code over the wire is problematic, because it's either very large or depends directly on what the other person has on their local ship. If you depend on what's on their ship and you're wrong, you may get the wrong result. So you explicitly require certain dependencies, at certain versions, ... this way lies dependency hell. There are ways to tame this, but if you just used data in the first place, those problems wouldn't exist.
295−
296−Of course, we can't always use data, precisely because it's smaller than code. And there are occasionally times when we could use either, but the code is actually easier to reason about than the data. All else equal, data > code > state of data > state of code.
297−
298−A note on laziness: lazily defined data occupies a middle ground. It's harder to reason about than strict data, but you get a lot more guarantees with it. It's probably not worth using as your basic substrate, but it makes some things easy to reason about.
299−
300−### CQRS/pubsub
301−
302−> A2: Everything should be CQRS.
303−>
304−> A3: (Almost) Everything should be pubsub.
305−>
306−> A4: A subscriber shouldn't affect a publisher.
307−>
308−> A5: Communication between nodes should be communication between
309−> independent actors.
310−
311−Fred Brooks pointed out that when you add people to an organization with `n` people, the number of interpersonal connections goes up with `n^2`. This is true of binary interpersonal connections, but if you allow groups of any subset of the people, then the number of total groups goes up with `2^n`.
312−
313−The same is true of entities in a program. A program must speak to many other programs about many things. Occasionally it can treat all others the same, so that the number of things it needs to say is constant in `n`. Sometimes it needs to say something different to each person, making it linear in `n`. Other times, it has a set of things it can speak about, say `m`. Pubsub lets the complexity grow with `m` instead of `n`. This lets the total communications grow with `m * n` instead of `n^2`.
314−
315−It's generally good to have more structure in how you communicate with other entities. If all you have is `send-message`, then you force each entity to define their norms around when messages are to be sent, and how to associate one message with another (eg a request to a response). This also gives the underlying system no visibility into the conversations.
316−
317−In CQRS+pubsub, we get a number of useful guarantees to help us structure our conversations. We know that a command will have no response other than exactly one positive or negative acknowledgment. We know that to request any data, we must have an active subscription, and
318−we know that a subscription may be canceled at any time. We know that a subscriber's failure to process a subscription update can't break the publisher. We know that after the initial subscription update, any subscriber to a path will get the same updates as anyone else on that
319−path.
320−
321−The underlying system can keep track of subscriptions, and can even cancel them automatically in certain circumstances (eg if the subscriber is on another ship and has stopped responding). This is like the nouns and verbs discussion above. Subscriptions are nouns, so we can reason about them better, and so can the underlying system. "Send a message" is a verb, so we have few guarantees about it.
322−
323−From Dijkstra's "Go To Statement Considered Harmful", which may as well have been written about unstructured event passing:
324−
325−> My second remark is that our intellectual powers are rather geared to
326−> master static relations and that our powers to visualize processes
327−> evolving in time are relatively poorly developed. For that reason we
328−> should do (as wise programmers aware of our limitations) our utmost to
329−> shorten the conceptual gap between the static program and the dynamic
330−> process, to make the correspondence between the program (spread out in
331−> text space) and the process (spread out in time) as trivial as
332−> possible.
333−
334−In our case, we make the programs of both the publisher and subscriber simpler by writing in terms of well-known constructs like "subscribe" and "push subscription update". You need to know much less about your counterparty.
335−
336−> A7: A client's representation of data should be as close as possible
337−> to that of the server.
338−
339−This is a natural architecture given pubsub, but it's also worth pursuing in its own right. This blurs the distinction between client and server, which makes the client more full-featured.
340−
341−It reduces communication to syncing, which means offline-mode is just a special case of sync latency, and all the local features are still usable.
342−
343−It also tends to reduce centralization, since you're already used to operating on your own, and you have all the data required to do so. The "server" becomes a commodity, easily moved when desired. Git is a good example of this — central git servers are common, but they're also a commodity, so you're never locked into a particular hosting provider. This is possible because the data structures are exactly the same on the client as on the server.
344−
345−> A23: Some cliches are repeated because they are true; others must be
346−> repeated because they are not.
347−
348−Computer security is an industry built on cliches. An example of the first is "your security is only as strong as your weakest link."
349−
350−An example of the second is "security through obscurity is ineffective". Security through obscurity is in fact the most effective form of security — if nobody cares about you, you will never be hacked. The problem is that you must remain obscure for it to work, and that's hard to explain to people in a precise way. It's effective at protecting precisely when there is nothing worth protecting. So, it's better (for them, their companies, and their users) to tell them a lie.
351−
352−However, 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".
353−
354−![](https://media.urbit.org/site/posts/essays/discuss-03.jpg)
355−
356−## B: Specific Design
357−
358−There are some principles that aren't obviously better than the alternatives, but if you use them consistently you avoid a lot of issues. These are all examples of this.
359−
360−> B1: Always ack a dupe; never ack an ack.
361−>
362−> It's okay to ack a nack as long as you never nack a nack.
363−
364−This is a simple rule, and if you follow it you get various guarantees for free. For example, sending a message will always cause up to a constant number of additional messages to be sent by direct or indirect causality (other than application-level code), so you never have to worry about accidentally causing a loop.
365−
366−Additionally, acking an ack can never take you from imperfect to perfect reliability. Urbit isn't big on heuristics for stuff that's visible to userspace (A14), so don't even go down that road.
367−
368−Following this rule greatly reduces the architecture space for networks. This is very helpful in finding a good architecture.
369−
370−> B2: Never construct or deconstruct a duct.
371−
372−A duct is akin to a first-class call stack. Don't deconstruct that for the same reasons you shouldn't read your own call stack. If you read your own call stack, and do different things based on that, it breaks a lot of assumptions we have about messages. For example, we assume that a vane will handle a task the same way regardless if the initial IO event was a keystroke or a timer. Don't break that.
373−
374−Similarly, don't construct these by hand. This would be like inserting other functions into your own call stack and then returning to them. Powerful, yes, but pretty much always a bad idea because it breaks our assumptions.
375−
376−> B3: Route on wire before sign, never sign before wire.
377−
378−When we send a message to another vane or app, we send it on a wire. When we get a response to that message, we should care first about the wire it was sent on.
379−
380−It's tempting to shortcut that and route based on the type of response. Maybe you only call to `%iris` once in your app, so you feel like you can just route directly on that. But it doesn't scale, because that dimension is orthogonal to the true dimension you care about — which request this response corresponds to. This is essentially a violation of A6.
381−
382−> B4: Only go from statically typed to dynamically typed if you must.
383−
384−Consider the set `U` of all possible programs. Then consider "the program you want to write" to be a set `S` of programs that differ only in aspects you don't care about. For example, maybe one takes a little more time and one takes a little more memory, and maybe you don't care about that. This set has a generating "specification" — any program that meets that specification is in the set.
385−
386−A type system or testing suite can guarantee that a program is in another set `T`. Obviously, both `S` and `T` are in `U`. Hopefully the intersection of `S` and `T` is non-empty — that is the set of programs which typecheck and meet your spec.
387−
388−A perfect static type system can guarantee `T` is a subset of `S` — if it typechecks, then it works. Obviously, if you let `T := {}` (ie no program typechecks), then this is vacuously true. So you want `T` to be as large as possible while still being a subset of `S` — as many programs as possible typecheck without them being incorrect. But it can't make `T == S` — there will always be some programs that do the correct thing in practice, but the type checker can't prove that.
389−
390−Dually, a perfect testing suite can guarantee that `S` is a subset of `T` — no correct program fails the tests. This is vacuously true if you have no tests, for then `T = U`. So you want `T` to be as small as possible while still being a superset of `S` — you don't want to reject valid programs if you can help it. But you can't make `T == S` — there will always be some programs that are invalid but pass your typechecks (at least, if your program requires a Turing machine).
391−
392−(It is possible to create a static type system that has `S` subset `T` property described above for a testing suite — see Erlang's Dialyzerand [related work](http://user.it.uu.se/~tobiasl/publications/contracts.pdf).)
393−
394−A dynamic type system tells you neither of these ahead of time. Instead, you end up with type errors at runtime. Errors at runtime must be handled at runtime, when the programmer is not present. Errors at compile time are handled at compile time, when the programmer is present.
395−
396−There's a hybrid, which is "static type checks at run time". In other words, you load the code and run the type checks at run time. This is better than pure dynamic checking because as long as the code compiles, you get the guarantees of a static type system. But the later in the process that the code is compiled, or the more it's changed before compiling, the less guarantee you have that the type checker will pass. If a static type checker gives an error at a time when the programmer is not present (because it's run at runtime), that's worse than a dynamic type system — at least that would give it a chance of executing correctly!
397−
398−> B5: Anything with business logic speaks one paradigm; anything that
399−> translates paradigms has no business logic.
400−
401−Translating between paradigms with significant impedance mismatch is usually convoluted code. The state machines are often hard to see, and it tends to be quite cluttered.
402−
403−You want your business logic to be as clean and short as possible. This way the interesting algorithms are laid bare.
404−
405−> B6: Functionally enforced semantic rules are better security primitives
406−> than memory access restrictions.
407−
408−Memory access restrictions are blunt tools. Blunt tools are nice in simple systems, and if all you have is nails, then a hammer is perfect. But in practice you punch all sorts of holes in these restrictions, because you need more granularity and flexibility.
409−
410−Better 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.
411−
412−![](https://media.urbit.org/site/posts/essays/discuss-04.jpg)
413−
414−### C: Attitude
415−
416−Good code is the result of people approaching the act of engineering with the right attitude.
417−
418−> C1: Code courageously.
419−
420−If you avoid changing a section of code for fear of awakening the
421−demons therein, you are living in fear. If you stay in the
422−comfortable confines of the small section of the code you wrote or
423−know well, you will never write legendary code. All code was
424−written by humans and can be mastered by humans.
425−
426−It's natural to feel fear of code; however, you must act as though
427−you are able to master and change any part of it. To code
428−courageously is to walk into any abyss, bring light, and make it
429−right.
430−
431−The unix/internet stack is a giant ball of mud. It's so big that when you're standing on it, it looks like a bog, and it's not clear that there is a bottom to it. You know there must be, but it doesn't matter because you learned long ago that the best solution is to not dig too deep. Build a strong structure by spreading out your weight and using strong construction materials. If there's something useful deep in the mud, it's probably not worth diving in to pull it out. That's dangerous and prone to failure, and you know many people who have gotten stuck down there.
432−
433−This is an appropriate reaction to the unix/internet stack. It's also self-perpetuating. The bog is filled — even _composed_ of — countless predecessors who did that same thing. If you ever find yourself on solid ground, protect that with your life. Learn how it works and how to use it well. Then build a strong structure on top of that. Don't let it decompose into a layer of mud.
434−
435−Urbit is small enough that, while there's definitely some construction-related dirt and muck covering it, the solid metallic core is not very deep — not more than waist deep in most places. The feeling of always being in contact with the bottom is very different than flailing about in a bog.
436−
437−This property is worth fighting for. It's the whole reason Urbit was written. New Urbit programmers are instinctively distrustful of anything below them and code defensively and fearfully. They must learn that it's all drastically simpler and more legible than they're used to. It's still hard, but you can actually make progress. To do so, you have to stand up straight, so you can get a firm footing on the ground. Keep your chin up and your shoulders back, and adopt the posture of a conqueror. When something doesn't work right, don't retreat into your shell of safety and control — fix it. The forces of chaos are always lurking, but their victory isn't inevitable. It's all on the line, so code with abandon.
438−
439−> C2: No time for lazy people.
440−
441−If there's clearly a right way to do something and a wrong way, do
442−it the right way. Coding requires incredible discipline. Always
443−follow conventions, and fire anyone who won't. Anything that can
444−be solved by discipline is not a real problem.
445−
446−> "To him who knows to do good and does not do it, to him it is
447−> sin."
448−
449−Preserving the property of solid ground requires perpetual discipline. Once lost, it's often impossible to reacquire. Don't compromise your standards.
450−
451−Call people out when they're being lazy. And when someone calls you out, recognize it and fix it. Sometimes it's just a question on a code review — "why did you do it this way?" Upon reflection, you determine that you did it that way because you couldn't be bothered to do it right. Maybe that was a reasonable choice at the time you were coding so you wouldn't be distracted, but if it's been called out in a code review, now's the time to fix it, not make excuses.
452−
453−> C3: When a smart person makes an obviously stupid suggestion, before
454−> responding take a full 60 seconds to envision how you would implement
455−> it and what the effects would be.
456−
457−Once you've determined that someone understands a situation well, if they earnestly make a suggestion that you haven't thought of, or that you immediately dismissed as impractical, stop and consciously consider it. This is one of the best ways of countering the natural echo chamber
458−of your own mind.
459−
460−This 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?
461−Consider 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.
462−
463−![](https://media.urbit.org/site/posts/essays/discuss-05.jpg)
464−
465−### D: Theory
466−
467−The eternal tension between theory and practice must not simply be acknowledged, but dealt with.
468−
469−> D1: Academia is a succubus.
470−
471−The results from academia are useful to take advantage of, but the process of academia is a deadly sin for a project as ambitious as Urbit.
472−
473−Academia usually gets the right answer, but it's slow, and it often cycles through a large number of wrong answers before it gets to the right one. It's also unconcerned with many things that a real project must consider. For example, it's generally more concerned with mathematical simplicity than mechanical simplicity, contradicting A21.
474−
475−> D3: Not being qualified to solve a problem is no reason not to solve it.
476−>
477−> D4: The best way to get the right answer is to try it the wrong way.
478−>
479−> D6: Everyone must regularly alternate between theory and practice.
480−
481−One common failure mode for academia is to get bogged down in optimally solving a particular part of a problem such that it fails to solve the whole problem.
482−
483−There's a sense of "if I don't know how to do it, I must discover the correct answer before I can do it". This will get you the right answer if it terminates, which is the sort of algorithm mathematicians like. Engineers like algorithms that do in fact terminate.
484−
485−The fastest way to build a good system is to build it as well as you know how, then iterate on it. You have to be disciplined about actually iterating over time as you learn about the problem, but often the way to learn more about the problem is to move beyond it and work on adjacent
486−problems. Hindsight is 20/20, so get the problem in your rearview mirror as fast as possible. Then while you're driving somewhere else, you'll see what you should have done. Then turn around and go do it. This only works if you or someone else is willing to go back and fix it
487−(C2).
488−
489−> D2: Never fear math.
490−
491−You can spend years working on a problem that you're able to solve in a few days with the right theoretical grounding. There's no excuse for being ignorant of theory; or rather, being ignorant of theory is an excuse to learn it.
492−
493−Many engineers fear theory the same way they fear a complex piece of code deep in the stack (C1). But they shouldn't, because theory is rarely muddy. The same characteristics that make theory impractical also make it clean and learnable. It's also pretty permanent, so a one-time investment will pay dividends for a long time.
494−
495−Of course, if you look deep down, you may find laziness is what's keeping you from learning theory. If that's the case, you need to decide how much you want to design good software. Because there's no room for laziness (C2).
496−
497−> D5: Practice tells you that things are good or bad; theory tells you why.
498−
499−You can never tell whether a system is good or bad without using it (see discussion on A21). Theory has great explanatory power, but only limited exploratory power. The best it can do is point out areas of the idea maze you haven't explored and suggest correlations between
500−objective properties and your subjective judgment of the quality of the system.
501−
502−However, 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.
503−
504−![](https://media.urbit.org/site/posts/essays/discuss-06.jpg)
505−
506−### E: Text Style
507−
508−Code form matters. Code that is hard to read is hard to maintain. Code that is inconsistently formatted is hard to read, but consistency isn't the end of the story. Some formats are simply hard to read.
509−
510−Formatting also isn't the end of the story. Naming and commenting conventions are even more important to clarity. The human brain is quite good at taking stuff that's in an unexpected form and interpreting it.
511−
512−This is why the diversity of accents and handwriting rarely causes issues, while the diversity of languages requires specialized translators. For someone used to typing on a QWERTY keyboard, it takes some time to get used to typing on a Dvorak keyboard because you have to rewrite your muscle memory. But it's nothing like how hard it is to learn another language. Russian script is roughly as different from English script as Russian grammar is from English's, but it's drastically easier to learn to read, handwrite, and type Cyrillic than it is to learn Russian grammar.
513−
514−So, uniformity of style is good, but it's not sufficient. The style must be readily readable and writable.
515−
516−### Formatting
517−
518−> E1: No code should extend beyond 80 characters, most within 55.
519−
520−Very wide code is unreadable. Even before you get to the readability threshold, it's useful to keep your code relatively narrow. Too narrow of code, on the other hand, results in too tall of code. What these two have in common is that they make it hard to navigate the code.
521−
522−Code navigability is the ability to find the part of the code you're looking for. This has several inputs:
523−
524−- how far away is what you're looking for?
525−- how many distinct places in the code can you have on screen?
526−- how much code can you have on screen?
527−- how fast can you recognize that you're in the correct place?
528−
529−Some of these are strongly affected by workflows. We can't force a developer to have an effective workflow, but we can support those who do. If your workflow is deficient in one of these areas, consider improving it.
530−
531−One of the primary inputs to code navigability is how much of it you can have on your screen. Code that is too wide limits the number of columns of code. Some people keep only one column on their screen, so they don't see a problem with long lines of code. The most efficient navigation is to already be there (i.e. to only have to move your eyes). If you only have one column of code open, you can only be in one place, which eliminates the best form of navigation.
532−
533−Dually, code that is too narrow limits the number of lines you can have on a screen (this isn't a separate precept simply because we've never had to tell someone to write _wider_ code). This suggests there is some happy medium. This is dependent on the language, but in Hoon we've
534−found that up to 55 columns is a pretty good number for most code. However, there are plenty of legitimate reasons to go a bit longer than that. 70 columns is rare, but not surprising. There is essentially never a reason to extend beyond 80 columns.
535−
536−> E2: Tabs aren't real.
537−
538−Code is a text file, and text files are WYSIWYG. The reader should view the file exactly the same as the author wrote it. This is a low-overhead way of avoiding editor-dependence in code, which is as bad as browser-dependence in javascript. Sure, tabs aren't as big a deal as the hell that front-end devs have to deal with, but there's no reason to give an inch to the forces of platform-dependence.
539−
540−Some argue in favor of "customization". Customization is inconsistency.
541−There can be good reason for inconsistency in some areas, but not in
542−code formatting, which is such an intensely communicative action.
543−
544−> E3: A text file is a series of lines, each ending with a newline
545−
546− character.
547−
548−There are several competing definitions of text files, but most commonly-used software uses this one. It's simple and consistent.
549−
550−Its disadvantage relative to "a text files is a series of characters, possibly including newlines" is that there are some arrangements of characters that are not valid text files (ie non-empty and not ending in a newline). However, some series of characters were already not valid
551−in a text file — eg those including control characters or other nonrepresentable characters.
552−
553−In return, we get the advantage that we can treat a text file as having a more complex and useful structure — a list of lists of characters, rather than simply a list of characters.
554−
555−These are theoretical concerns — the real answer is that it's the way it's always been done, and deviating from that without a good reason is asking for trouble.
556−
557−### Names and comments
558−
559−> E4: One block comment is better than interleaved comments on every line.
560−
561−Interleaved comments are easy to write because you can just paraphrase the code. This is also why they're generally useless. In the micro, code should always be immediately understandable. In the macro, it's often helpful to give context as to the purpose or constraints of the function. Sometimes it's good to even give the algorithm line-by-line in pseudocode, but mixing the pseudocode with the real code obfuscates both.
562−
563−> E5: Don't name anything you don't have to.
564−
565−> E6: If it's the same thing, give it the same name.
566−
567−It is often said that there are two hard things in computer science: cache invalidation and naming things. This is a good aphorism. As often, someone will respond with "There are two hard things in CS: cache invalidation, naming things, and off-by-one errors". This is a weak
568−joke because off-by-one errors are not hard at all. They're mostly a matter of discipline, and there's a couple of conventions that help. If you're looping on a zero-indexed variable, use `i < num_loops`. If you're looping on a one-indexed variable, use `i <= num_loops`.
569−
570−However, cache invalidation and naming things are genuinely hard because they must be solved ad hoc. There is no one-size-fits-all cache invalidation strategy, and possibly there never will be. Similar for naming. So you must actually comprehend and work within each individual
571−context.
572−
573−You shouldn't solve hard problems if you don't need to, so don't name anything you don't have to. Giving unique names to things is tiring, and it reduces readability. A consistent pattern for naming things makes it easy to keep track of what is what and reduces the number of
574−decisions you must make.
575−
576−Examples:
577−
578−- If the only difference between three things is that they're not the
579− same, consider naming them `thing-1`, `thing-2`, and `thing-3`.
580−
581−- Use agglutinative morphology. If `a` is to `b` as `c` is to `d`, then
582− find an affix which describes this distinction (say `-suf`) and rename
583− them to `a`, `a-suf`, `c`, and `c-suf`.
584−
585−- A corollary of the above is that if one variable represents the "same"
586− thing with a different type, that type should be the morpheme added.
587− For example, if `a-set` is a set, then `~(tap in a)` should be called
588− `a-list`.
589−
590−- Don't abbreviate (E8) — everyone abbreviates differently, and bits are
591− cheap. If it takes you a long time to type the name, consider (1)
592− finding a more succinct name (good any time you can do it), (2)
593− becoming a faster typer, or (3) learning autocomplete tools, such as
594− snippets.
595−
596−- Especially don't abbreviate or otherwise change the word when adding
597− affixes. Inflectional morphology is bad in such an ad hoc context as
598− code.
599−
600−> E7: Humans are good at memorizing.
601−
602−We're really good at memorizing sets of things, like runes. We're also good at inferring structure from patterns. We're bad at memorizing structure in apparently unrelated names, though, and once we see a pattern, we assume it's densely populated.
603−
604−So 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.
605−
606−![](https://media.urbit.org/site/posts/essays/discuss-07.jpg)
607−
608−### F: Real Software
609−
610−Not all software matters. Or at least, not all software comes within
611−the scope of "Urbit". Urbit cares about "Martian software".
612−
613−> F9: Timeless software is good software.
614−
615−There's different sorts of software. A lot of software is inherently ephemeral, and can really only be run in one place. A SAAS company runs bespoke software on a particular set of servers, and that software has no future. It will never be run on anyone else's servers, and it will eventually stop being run even there. It won't even have any direct descendents. It's a genetic dead end.
616−
617−However, not all software is this way. Urbit is interested in software that can live forever. This is what we call "real" software.
618−
619−This is the most important passage in all that has ever been written
620−about Urbit:
621−
622−> What is Martian code actually like? There are two possibilities.
623−>
624−> One: since Earth code is fifty years old, and Martian code is fifty
625−> million years old, Martian code has been evolving into a big ball of mud
626−> for a million times longer than Earth software. (And two million times
627−> longer than Windows.)
628−>
629−> This hypothesis strikes me as possible, but implausible. Since the _big
630−> ball of mud_ expands indefinitely, Martian code would therefore be so
631−> large and horrible that, despite its underground installed base, the
632−> server room bulged into space like a termite mound, intercepting
633−> low-flying asteroids and stinking up the solar system all the way to
634−> Pluto. Our latest space telescopes would surely have detected this
635−> abominable structure - if not, in fact, collided with it.
636−>
637−> Two: therefore, at some point in Martian history, some abject fsck of a
638−> Martian code-monkey must have said: _fsck_ this entire fscking ball of
639−> mud. For _lo_, its defects cannot be summarized; for they exceed the
640−> global supply of bullet points; for numerous as the fishes in the sea,
641−> like the fishes in the sea they fsck, making more little fscking fishes.
642−> For lo, it is _fscked_, and a big ball of mud. And there is only one thing
643−> to do with it: _obliterate_ the trunk, _fire_ the developers, and hire a
644−> whole new fscking _army_ of Martian code-monkeys to rewrite the _entire
645−> fscking thing_.
646−>
647−> This is such an obvious and essential response to the _big ball of mud_
648−> pattern that, despite the fact that we know nothing about Mars, we can
649−> deduce that it must have happened on Mars. Probably several times.
650−> Probably several hundred. For each of these attempts but the last, of
651−> course, the result was either (a) abject failure, (b) another _big ball
652−> of mud_, or (c) both.
653−>
654−> But the last, by definition, succeeded. This is the crucial inference we
655−> can draw about Mars: since the Martians had 50 million years to try, in
656−> the end they must have succeeded. The result: Martian code, as we know
657−> it today. Not enormous and horrible — _tiny and diamond-perfect_.
658−> Moreover, because it is tiny and diamond-perfect, it is perfectly stable
659−> and never changes or decays. It neither is a _big ball of mud_, nor tends
660−> to become one. It has achieved its final, permanent and excellent state.
661−
662−We don't know that Urbit will achieve this final form, but Urbit is an attempt to make progress in that direction. Any software that isn't a candidate for "tiny and diamond-perfect" is either a prototype or scaffolding.
663−
664−Here's some characteristics of real software:
665−
666−> F1: If it's not deterministic, it isn't real.
667−
668−If you do the same thing twice, your computer should react the same way. This is comforting. This is also what makes it easy to reason about and use effectively. If you're not sure what your computer will do, you'll be afraid of it and act defensively toward it. This inevitably leads to a big ball of mud.
669−
670−Diamonds are extremely hard, and they wear very slowly. A diamond surface will support you every time; a mud surface will shift out from under you exactly when you put weight on it.
671−
672−> F2: If it's centralized, it isn't real.
673−
674−Code that depends on a central authority or has a single point of failure is fundamentally brittle. No authority lasts forever, no company lasts forever, no server lasts forever. Under certain
675−circumstances, bones and the like can be preserved for a long time — but not alive. The remains of buildings sometimes last for thousands of years, but the cities are gone.
676−
677−The only things that last forever in their useful form are big hunks of rock (like the pyramids at Giza) and ideas, through writing and transcription. So, if you depend on the sun existing, this is
678−acceptable. If you depend on a piece of source code to be kept forever, copied and re-copied, you're fine. If you depend on a 20-year-old company existing and being easily accessible, this is brittle.
679−
680−Another way to look at this is to say that anything that wouldn't work on a spaceship is architecturally flawed. Maybe it requires many sequential round-trips to a central server because it doesn't have all the relevant information. See discussion of A7.
681−
682−> F3: If it's owned by someone else, it isn't yours.
683−>
684−> F4: If it's managed by someone else and you can't change who that is, it
685−> isn't yours.
686−>
687−> F5: If it's not yours, it isn't permanent.
688−>
689−> F6: If it's not permanent, it isn't real.
690−
691−Nobody is as aligned with your values as you are. If you don't control the software, then you can't guarantee you'll always have access to it. Whoever does control the software may destroy it, move away, or simply revoke your access to it.
692−
693−Control has some nuance. If it's physically controlled by a company and you can't get your data and the software that makes it useful, you definitely don't have control. If you have physical control of it, you do have control. But if you're hosting the data and software on a commodity cloud server, you still mostly have control of it. Your privacy has been reduced, sure. However, as long as you keep regular backups of the data and software, if the hosting provider disappears you just need to find another host, or host it yourself. Any particular host is likely to disappear, but the situation where _every_ host disappears and you can't even host it yourself is much less likely. Brands are mortal, commodities are not.
694−
695−Some branded hosts allow you to download a zip file of your data. This gives you a little more control over your data, but it's much closer to "no control" than "total control". This is because your online world is data plus code, and without the code that makes it useful, data is only good for scrapbooking. The scrapbook will remind you of the good old days, but you won't be able to live them again.
696−
697−> F16: Sovereignty necessitates understanding.
698−
699−Not everyone cares to understand the software they're using. But if you want to compute sovereignly, you must understand what your computer is doing. If it regularly surprises you, you're not in control of it. You must tame it. The current paradigm is a wild monster which cannot be tamed by mere humans — only megacorporations even attempt to do so, and it's always temporary. So, your software needs to be simple enough that it can be understood.
700−
701−> F10: System modules should be designed to be frozen permanently;
702−> conversely, Urbit consists of that system software which admits of a
703−> Kelvin version.
704−
705−"Kelvin versioning" is a versioning scheme where your current version is a natural number, and new versions count down. Once you hit version 0, no more changes should be necessary.
706−
707−This is the opposite of the usual way of developing software, where there is no defined endpoint. This paradigm suggests that you're building something specific. Most current software builds higher and higher in a vain attempt to reach the heavens, until all available effort is expended just to keep this tower from falling over. Kelvin versioned software cuts away until you reach a strong bedrock. Not every piece of software should have a Kelvin version, but infrastructure should.
708−
709−> F11: The two procedures for achieving timelessness are distillation and
710−> generalization.
711−
712−When building a timeless system, you start by building whatever you need to make it work. Then as you continue on, you may find some of the features are no longer necessary. Often, they're only needed when you're using them for user-facing work, but you've already moved on to building user-facing stuff somewhere else. You don't need the niceties anymore, so you should remove them.
713−
714−Other times, you find that you want something similar to a feature you already have, but not exactly the same. When this happens often enough with the same feature, you may discover what is the essential nature of the feature and what are simply ornaments of the original use of the feature. Then, you can generalize the feature so that each of the desired use cases is well served.
715−
716−> F13: That which cannot be Kelvin-versioned should update fluidly and
717−> automatically.
718−
719−Not everything should be Kelvin versioned. Much user-facing code is in a continual process of discovery, and it must react to changing userbases and their needs. These should update without user interaction. You should be able to turn off your ship for years at a time, then turn it back on. After a few minutes or hours of catching up, you should be ready to go.
720−
721−This means you need upgrade paths to be permanent, and they must not lose information. Anything that stops being able to upgrade is not permanent, since it will succumb to bit rot.
722−
723−> F14: Humans are interactive and temporal; technology is permanent and
724−> exhaustive.
725−
726−This is why the software humans touch directly should not be Kelvin
727−versioned but the infrastructure that makes it work should be.
728−
729−> F7: The way it is isn't always the way it ought to be.
730−
731−You should presume that there's a good reason for why things are done a certain way because what works best tends to win in a market in the long term, but markets are rarely efficient. Markets become more efficient over time, if they become more liquid, and as they become larger. Software is young, the cost of switching technologies is often large, and the space of software paradigms yet to be explored dwarfs those we've exhausted. So don't be surprised if you find ways to improve the situation drastically.
732−
733−> F8: The way it ought to be isn't always the way it is.
734−
735−On the other hand, sometimes the elegant solution just isn't right. The ultimate test of the quality of software is whether it's useful to humans. Humans don't fit nice equations, so the timeless truths of mathematics are often mismatched with human convenience. Never sacrifice real utility for the sake of making the code more elegant.
736−
737−> F12: Standardization is better than perfection.
738−
739−Coordination problems are some of the most difficult. When given a choice between compatibility and improvement, carefully consider whether the problem solved by the improvement is weightier than the problem caused by the incompatibility.
740−
741−> F15: Communities are autonomous.
742−
743−This is both a positive statement and a normative one. Communities are in fact a thing separate from their platform, but sometimes changes in the platform can kill them. That's bad. It's slightly different from freedom of association, since that's a freedom that applies to individuals, not the communities themselves.
744−
745−Communities are the basic building blocks of society. We are each a member of some number of communities, and most power is held by these communities. Some communities coincide with family ties, some with common goals, beliefs, or interests. Some may be freely joined by just showing up — others are nearly impossible to join without having been born into them.
746−
747−Throughout civilization society has had many forms. Governments have ranged from police states to feudal societies to democracies to informal tribes of people. In each of these, the fundamental unit is the community. Humans don't live on their own, and they don't live in one
748−universal society. They are a part of some communities and not of others.
749−
750−Technology shouldn't force us into a single global community. Discoverability isn't an unmitigated good. Most communities should be closed off from each other — that's what makes them a community. This allows them to develop their own ideas and norms. These bleed into
751−other communities and may spread if they provide some benefit.
752−
753−Many technologies today combine us into a single community, or at least a single set of norms. If many communities are hosted by a single entity, there will be pressure from some of those communities toward the entity to pressure other communities to follow certain of their norms.
754−This crosstalk isn't all bad, but there must be an equilibrium. All too often the lines between the communities are so permeable as to be inconsequential. In this case, the communities will converge in a single large community, at the cost of the memetic diversity of the original communities.
755−
756−Technology should mirror human interaction, and humans interact in communities.
content/blog/precepts.mddeleted−341
@@ -1,341 +0,0 @@
1−+++
2−title = "Precepts"
3−date = "2020-03-17"
4−description = "Technical maxims that define Urbit's approach to engineering."
5−
6−[extra]
7−author = "Philip Monk"
8−ship = "~wicdev-wisryt"
9−image = "https://media.urbit.org/site/posts/essays/pre-01.jpg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/pre-01.jpg)
13−
14−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.
15−
16−Some 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.
17−
18−We’ll start with a brief description of many principles, then we’ll go into a long-form justification.
19−
20−![](https://media.urbit.org/site/posts/essays/pre-02.jpg)
21−
22−### A: General Design
23−
24−1. Data is better than code.
25−
26− Store data in your state, send data over the wire, dispatch based
27− on data.
28−
29−2. Everything should be CQRS.
30−
31−3. (Almost) Everything should be pubsub.
32−
33−4. A subscriber shouldn't affect a publisher.
34−
35−5. Communication between nodes should be communication between
36− independent actors.
37−
38− Each message should do one complete thing, and there shouldn't
39− need to be a sequence of coupled messages.
40−
41−6. Represent your data as closely as possible to the essential structure
42− of the problem.
43−
44−7. A client's representation of data should be as close as possible to
45− that of the server.
46−
47− This blurs the distinction between client and server. It allows
48− offline-mode, reduces communication to syncing, and decentralizes.
49−
50−8. When mating different paradigms, build one cleanly on top of the
51− other.
52−
53− Never try to make them work on some of the same primitives. Never
54− abuse one to make the other work. For example, ducts in
55− themselves are very general - if you want to do pubsub, that can
56− easily be built on top of ducts, but don't pretend that pubsub is
57− a _part_ of the duct system.
58−
59−9. Never misuse an abstraction.
60−
61− An abstraction provides a certain set of tools; use them and only
62− them.
63−
64−10. Correctness is more important than performance.
65−
66−11. Be simple and uncompromising in defining what's correct; go crazy
67− with optimizations.
68−
69− Nock is a great example of this. It contains the character of the
70− virtual machine, but its asymptotics are bad. Add jets to fix the
71− asymptotics.
72−
73− Another example is the ACID nature of Arvo. Arvo is a pure
74− function f(logs) of its event log, so formally Arvo is just a
75− function run against an event log. A naive implementation has
76− very bad asymptotics; processing each new event is O(n) in the
77− number of historical events. Choose the function g(state,log)
78− such that f(logs ++ log) = g(f(logs),log). Then, as long as you
79− keep the state in memory, processing each new event is constant in
80− the number of previous events. This still requires O(n) restart
81− from disk, but you can also periodically (and non-blockingly)
82− write a checkpoint of the state to disk, so that restart from disk
83− is only linear in the number of events since the last checkpoint.
84−
85−12. Correctness is more important than optimality.
86−
87−13. If you don't completely understand your code and the semantics of
88− all the code it depends on, your code is wrong.
89−
90−14. Deterministic beats heuristic.
91−
92− Heuristics are evil and should only be used where determinism is
93− infeasible, such as in cache reclamation.
94−
95−15. Stateless is better than stateful.
96−
97−16. Explicit state is better than implicit state.
98−
99−17. Referential transparency is honesty and stability.
100−
101− Lack of referential transparency and other forms of
102− disingenuousness are some of the world's big problems. Only
103− deviate from referential transparency if absolutely necessary.
104−
105−18. Responsibilities should be clearly separated.
106−
107− This applies from kernel modules through network citizens.
108−
109−19. Dualities must be faced head-on and analyzed differently at
110− different layers.
111−
112− Statically typed vs. dynamically typed, imperative vs. functional,
113− code vs. data, and effectful vs. pure can all be a matter of
114− perspective, and all relevant perspectives must have coherent
115− answers.
116−
117−20. One hundred lines of simplicity is better than twenty lines of
118− complexity.
119−
120− It's not enough for an abstraction to reduce code duplication; it
121− must actually make the code simpler.
122−
123−21. Prefer mechanical simplicity to mathematical simplicity.
124−
125− Often mechanical simplicity and mathematical simplicity go
126− together.
127−
128−22. The Law of Leaky Abstractions is a lie; abstract airtightly.
129−
130− If your abstractions are leaking, it's not due to some law of the
131− universe; you just suck at abstracting. Usually, you didn't
132− specify the abstraction narrowly enough.
133−
134−23. Some cliches are repeated because they are true; others must be
135− repeated because they are not.
136−
137−![](https://media.urbit.org/site/posts/essays/pre-03.jpg)
138−
139−### B: Specific Design
140−
141−1. Always ack a dupe; never ack an ack.
142−
143− It's okay to ack a nack as long as you never nack a nack.
144−
145−2. Never construct or deconstruct a duct.
146−
147−3. Route on wire before sign, never sign before wire.
148−
149−4. Only go from statically typed to dynamically typed if you must.
150−
151− Once you go into a dynamically typed world, it's hard to go back.
152− Statically typed is better than dynamically typed, so if something
153− can be made static, it should be.
154−
155− Each timeless data structure is a brick in the foundation of
156− digital civilization.
157−
158−5. Anything with business logic speaks one paradigm; anything that
159− translates paradigms has no business logic.
160−
161−6. Functionally enforced semantic rules are better security primitives
162− than memory access restrictions.
163−
164− A compiler can use type safety as an effective tool to enforce
165− some classes of security guarantees.
166−
167−![](https://media.urbit.org/site/posts/essays/pre-04.jpg)
168−
169−### C: Attitude
170−
171−1. Code courageously.
172−
173− If you avoid changing a section of code for fear of awakening the
174− demons therein, you are living in fear. If you stay in the
175− comfortable confines of the small section of the code you wrote or
176− know well, you will never write legendary code. All code was
177− written by humans and can be mastered by humans.
178−
179− It's natural to feel fear of code; however, you must act as though
180− you are able to master and change any part of it. To code
181− courageously is to walk into any abyss, bring light, and make it
182− right.
183−
184−2. No time for lazy people.
185−
186− If there's clearly a right way to do something and a wrong way, do
187− it the right way. Coding requires incredible discipline. Always
188− follow conventions, and fire anyone who won't. Anything that can
189− be solved by discipline is not a real problem.
190−
191− > "To him who knows to do good and does not do it, to him it is
192− > sin."
193−
194−3. When a smart person makes an obviously stupid suggestion, before
195− responding take a full 60 seconds to envision how you would implement
196− it and what the effects would be.
197−
198−![](https://media.urbit.org/site/posts/essays/pre-05.jpg)
199−
200−### D: Theory
201−
202−1. Academia is a succubus.
203−
204− Academia has a really high ratio of smart people to useful
205− products. Academia has many genuinely smart and interesting
206− ideas, but always remember that pursuing them whole-heartedly will
207− never result in a useful product.
208−
209−2. Never fear math.
210−
211− Academia is inefficient, but it's also correct. Those people
212− wasted a lot of time finding the right answer, but now that
213− they've done it, you must exploit it. If you don't know the
214− theory, learn it. No excuse for being "bad at math". Most who
215− are "bad at math" are simply lazy or fearful. Be strong and of
216− good courage. If you're truly so bad at math that you cannot
217− learn it, you should not design systems.
218−
219−3. Not being qualified to solve a problem is no reason not to solve it.
220−
221− If you don't know how to do it, do it anyway. "We are too young
222− to realize that certain things are impossible. So, we will do
223− them anyway."
224−
225−4. The best way to get the right answer is to try it the wrong way.
226−
227− You cannot design a good system without spending most of your time
228− in contact with the problem. The bad parts about systems are
229− rarely obvious in theory, but often in practice.
230−
231−5. Practice tells you that things are good or bad; theory tells you why.
232−
233− Never use theory to design a good system from scratch; only
234− practice can tell whether the system is good.
235−
236−6. Everyone must regularly alternate between theory and practice.
237−
238− There is an eternal wheel of system design. Given a system, use
239− practice to discover what is bad, missing, or unnecessary. Then,
240− use theory to fix the bad, add the missing, and remove the
241− unnecessary. Repeat.
242−
243−![](https://media.urbit.org/site/posts/essays/pre-06.jpg)
244−
245−### E: Text Style
246−
247−1. No code should extend beyond 80 characters, most within 55.
248−
249−2. Tabs aren't real.
250−
251−3. A text file is a series of lines, each ending with a newline
252− character.
253−
254− Corollary: all non-empty text files end with a newline (often
255− hidden by editors). An empty text file does not end with a
256− newline.
257−
258−4. One block comment is better than interleaved comments on every line.
259−
260−5. Don't name anything you don't have to.
261−
262− This includes conventional names for variables of particular
263− types. For example, the conventional name for a variable of type
264− `path` is `pax`. You should have a good reason for using any
265− other name for a `path`.
266−
267− A more recent convention that follows the same principle is to
268− give the variable the same name as its type.
269−
270−6. If it's the same thing, give it the same name.
271−
272−7. Humans are good at memorizing.
273−
274−8. Abbreviations aren't worth it.
275−
276−![](https://media.urbit.org/site/posts/essays/pre-07.jpg)
277−
278−### F: Real Software
279−
280−1. If it's not deterministic, it isn't real.
281−
282−2. If it's centralized, it isn't real.
283−
284−3. If it's owned by someone else, it isn't yours.
285−
286−4. If it's managed by someone else and you can't change who that is, it
287− isn't yours.
288−
289−5. If it's not yours, it isn't permanent.
290−
291−6. If it's not permanent, it isn't real.
292−
293−7. The way it is isn't always the way it ought to be.
294−
295− If you can make it the way it ought to be, do so.
296−
297−8. The way it ought to be isn't always the way it is.
298−
299− Some things can't be made more elegant.
300−
301− For every ailment under the sun
302− There is a remedy, or there is none;
303− If there be one, try to find it;
304− If there be none, never mind it.
305−
306−9. Timeless software is good software.
307−
308−10. System modules should be designed to be frozen permanently;
309− conversely, Urbit consists of that system software which admits of a
310− Kelvin version.
311−
312−11. The two procedures for achieving timelessness are distillation and
313− generalization.
314−
315− Every temporary or contingent feature in a system module should
316− eventually either be removed (distillation) or relaxed into
317− timelessness (generalization). For an example of the result of
318− both procedures, consider the abstraction of the core in Nock and
319− Hoon.
320−
321−12. Standardization is better than perfection.
322−
323− Kelvin versioning stops when we run out of versions, not when
324− every defect has been rectified.
325−
326−13. That which cannot be Kelvin-versioned should update fluidly and
327− automatically.
328−
329− All incompatible upgrades should provide permanent and automatic
330− upgrade paths. This is principled permanent backward
331− compatibility.
332−
333−14. Humans are interactive and temporal; technology is permanent and
334− exhaustive.
335−
336−15. Communities are autonomous.
337−
338−16. Sovereignty necessitates understanding.
339−
340− If you don't understand a system you're using, you don't control
341− it. If nobody understands the system, the system is in control.
content/blog/providers.mddeleted−82
@@ -1,82 +0,0 @@
1−+++
2−title = "Providers"
3−date = "2020-08-17"
4−description = "We’ve always assumed that providers would have to come into existence sooner or later. By the look of it, that time is now. Tlon and a few others have provider-like services in the works."
5−
6−[extra]
7−author = "Galen Wolfe-Pauly"
8−ship = "~ravmel-ropdyl"
9−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/providers.png"
10−+++
11−
12−![](https://storage.googleapis.com/media.urbit.org/site/posts/essays/providers.png)
13−
14−We 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.
15−
16−Sounds good—but how does this actually come to pass? Urbit has to be technically robust and have a nice interface. Assuming we can deliver both of those things, your Urbit node also has to be safe, secure, and running somewhere with a network connection.
17−
18−Urbit has been getting nicer to use and more stable every day. We use it constantly, both as a company (Tlon) and for the broader Urbit community. From what we can tell, people are using Urbit to start communities of their own here and there. The problem is: to use our platform, you’ve got to run it yourself. This limits our audience _a lot_. Setting up a VPS and running an Urbit OS node is pretty easy if you’re comfortable in the command line, which makes it completely impossible for most people.
19−
20−We hear from people regularly who want to be able to sign up for Urbit like it was any cloud service. What they want is what we’ve been calling a _provider_: a service to provide easy onboarding and hosting. Given a good provider, we’d be pretty close to our long-term vision: Urbit would feel like a ubiquitous, easily accessible service.
21−
22−We’ve always assumed that providers would have to come into existence sooner or later. By the look of it, that time is now. Tlon and a few others have provider-like services in the works. We’ll talk about the specifics of what Tlon is planning to do in a future post. In this one, we’ll talk about what a provider is, why anyone would start one, and give a few examples of what they might look like.
23−
24−## What is a provider?
25−
26−A provider is anyone (company, DAO, a group of friends) that provides easy onboarding and hosting.
27−
28−From a user perspective, signing up with a provider should be as simple as picking a planet and hosting plan, paying, and getting connected to a running Urbit OS node. This should be able to be done entirely in a browser or a standalone app and feel more or less like signing up for a conventional service.
29−
30−From a technical perspective, this means a provider needs to create an Ethereum wallet for the user (client-side, of course), deliver an Urbit ID to it, and boot an Urbit OS node for them. And, at some point in the process, collect payment.
31−
32−As a user, your provider is somewhere between your ISP and your WordPress host. Your provider both runs the star that sponsors your planet (and provides peer discovery) as well as potentially providing both access to communities and even provider-specific software. We don’t really expect providers to be terribly generic—quite the opposite. Providers are likely to differentiate themselves on price, available software, and available communities. We’ll get into some examples later.
33−
34−The utility that a provider offers involves quite a lot of trust on behalf of the user. While the provider never actually holds the keys to your Urbit ID, they do run your node and, in turn, can access its contents. Unlike giant cloud services, your data isn’t in an easily searchable database. Inspecting your data should be something explicitly protected by a good provider ToS.
35−
36−If a strongly worded ToS isn’t enough for you, you can always host yourself. And, given the way Urbit works, downloading your Urbit from a provider and running it elsewhere should be both really simple and something a provider will _always_ let you do. It’s perfectly fine to run Urbit in your closet—which means that providers are really competing on ease of use and price.
37−
38−Let’s move on and talk a bit about why starting a provider makes sense to begin with.
39−
40−## Why would anyone start a provider?
41−
42−Our aim is to make Urbit OS so obviously nice to use that it’s well worth paying for. Today, a planet goes for about $10–$20 and, once you buy one, you’ve got to figure out how to really put it to use. Which takes some work.
43−
44−Any large holder of address space should immediately see the opportunity here: the more useful Urbit is, the more value can be captured by starting a provider. Providers make it possible to actually capture the value in address space, both by selling it and by operating nodes.
45−
46−Let’s say the base cost of running an Urbit OS node, in a hosted environment, is $10 / node / month. If you can sell hosting for $200 / year, you’re making back the ‘cost’ of the planet when someone signs up. Given that it’s more desirable to buy a planet when you know the star is online and you can put it to good use, this seems like a pretty good proposition: both for the provider and the customer.
47−
48−Starting a provider doesn’t _have_ to be done by address-space holders. You could start a provider with no address space of your own by custodying the address space of others. Then, you could take a cut of the address space sales and all of the hosting revenue. With a market of people looking to use Urbit, the crux of success with this approach is simply whether you can compete on user experience.
49−
50−Providers are, in a way, like the miners of Urbit. They’re incentivized to run fleets of very specific VMs for profit. The profit motive, in Urbit’s case, is just a bit more conventional than a bitcoin miner. An Urbit provider is just offering a service in exchange for money.
51−
52−## What are some examples of providers?
53−
54−If you think of a provider simply as a business, its most basic incentive is to attract as many customers as possible. You can do that by competing on price or performance, or by competing on aesthetics and community—there are lots of ways that providers can compete.
55−
56−As a roughly similar ecosystem, the world of webhosting is a great comparison. There are lots of small webhosts that all have very specific services: Dreamhost, MediaTemple, prgmr.com, and Linode all come to mind. Then there are the more generic, large-scale, performance-oriented options: AWS, GCP, Azure. It’s not quite time for an AWS-scale Urbit provider, but perhaps the AWS of Urbit will start as something much smaller.
57−
58−Let’s walk through a few examples to get a feel for what’s possible:
59−
60−Communities -
61−
62−A provider could easily curate community content like news, events, and discussion that it only delivers to its customers. Think of it as a bit like the days of sharing a server among friends—only in this case it could be hundreds or thousands of people who form a collective to run infrastructure and share information.
63−
64−Custom software -
65−
66−There are so many ways that providers can offer custom software. Urbit isn’t ready for third party software distribution. When it is, subscribers to a specific provider could get unique modules and applications synced directly to their Urbit nodes along with their membership.
67−
68−Aside from Urbit-specific software, providers could provide custom software services to their subscribers. A straightforward example of this could come in the form of Bitcoin or Ethereum nodes for processing transactions. Sign up with a provider and get the ability to send transactions to the chain quickly and reliably.
69−
70−Security -
71−
72−Let’s say our base cost of $10 / month / planet from above is correct (it’s probably high, but it’s a simple number). Would someone pay $100 / month for a planet hosted in a bunker or in the pylon of an abandoned oil rig? Maybe.
73−
74−## What about Tlon?
75−
76−Before there can be an ecosystem of providers, there has to be _one_ provider. While we’ve heard of a few other people working on things, we expect Tlon to be the first to try to really get into the provider business in earnest.
77−
78−I’ll save the details of what we’re going to do for a future post. Launching Tlon as a separate business will be the beginning of the separation of Tlon and Urbit. I’m really quite excited about it. Tlon is only able to consider becoming a business of its own because Urbit is mature enough that we can actually do it.
79−
80−For now, I’ll just say that Tlon will pick the low-hanging fruit first. Our goal is to make onboarding a group into Urbit incredibly simple. We want people to be able to go from email invite to running Urbit in a few minutes without ever knowing anything about Ethereum, Unix, or what a private key is.
81−
82−Once we’ve laid the groundwork with something that _just works_, we plan to open-source some of our components. Scaling up Urbit isn’t going to be easy. We hope that others will help us, and will help explore what’s possible in supporting Urbit users in the future.
content/blog/pseudonymous-reputation.mddeleted−64
@@ -1,64 +0,0 @@
1−+++
2−title = "Building Your DAO with Pseudonymous Reputation on Urbit"
3−date = "2022-07-19"
4−description = "Using Urbit ID’s pseudonymous reputation model, DAO participants know Urbit ID holders’ past behavior before relying on them, and without sacrificing anonymity."
5−
6−[extra]
7−author = "Anthony Arroyo"
8−ship = "~poldec-tonteg"
9−image = "https://storage.googleapis.com/media.urbit.org/blog/2022.7.14..19.19.05-image.jpg"
10−+++
11−
12−![](https://storage.googleapis.com/media.urbit.org/blog/2022.7.14..19.19.05-image.jpg)
13−
14−_This is cross-posted from [The Combine DAO Blog](https://blog.the-combine.org). If you'd like to comment, join the public [Urbit group](https://urbit.org/groups/~famreb-todmec/the-combine-public)._
15−
16−[The Combine DAO](https://blog.the-combine.org/introduction-to-the-combine-dao) is a DAO built on Urbit to invest in promising projects on the network. While building the DAO, we did a survey of the existing identity solutions and found our solution close to home: Urbit ID provided the best balance of trust and anonymity due to the Urbit networks’ pseudonymous reputation. In this post, we’ll discuss the challenges facing DAOs and discuss why Urbit ID presents advantages over current approaches like token gated DAOs.
17−
18−## Trust, Anonymity and Pseudonymous Reputation
19−
20−Anonymity is a core feature of most DAOs. It’s great in theory. No one wants to trust that the humans operating Robinhood will execute trades how and when they say they will (much less know their names.) We’d all prefer if a smart contract handled it for them.
21−
22−The problem is that trust and anonymity don’t mix, and trust is essential to the practical operation of any organization. This is why existing DAOs take shortcuts to establish trust hierarchies—things like delegating multi-sigs to small groups of trusted leaders, or trusted leaders establishing authority via exclusive Discord channels.
23−
24−Put simply, if there’s no human to trust, there’s no human to hold accountable. Lack of accountability is a major hurdle for any organization.
25−
26−We were aware of this fundamental flaw when building Combine DAO on Urbit, and we’ve found a solution in Urbit ID. Urbit ID is the decentralized identity system at the core of the Urbit project. Urbit IDs are the “decentralized IDs” that [DAO builders yearn](https://thmueller.medium.com/decentralized-identity-3-ways-to-build-trust-in-your-dao-4871491903c8) for. They’re endowed with what we call pseudonymous reputations that unlock the ability to run DAOs in ways that more closely resemble successful IRL organizations, while maintaining the automation that makes them so attractive.
27−
28−## What is Urbit ID?
29−
30−Why is your Urbit ID so different from every other online identity you’ve ever had? The substantive answer is simple: it’s a lot more like your IRL identity. It’s permanent and owned by you. And because it’s the same throughout the Urbit network, it can accrue a reputation.
31−
32−You’ve probably seen Urbit IDs like `~ravmel-ropdyl` or `~mogmet-tadnem` in Twitter profiles. Each is a unique NFT that can be transferred and sold like any other cryptographic asset. Your Urbit ID is your username, network address and crypto wallet all in one.
33−
34−Like wallet addresses, Urbit IDs are anonymous. Like Discord, Twitter, or Notion accounts, they are also pseudonymous. Pseudonymity is the kind of anonymity you find in most online communities: a common username that people recognize even if it’s not your “real” name.
35−
36−Your Urbit ID is to your urbit ship what your deed is to your house or your keys to your car. It encrypts all of your ship’s communications and provides access to your online communities, which in this instance are DAOs.
37−
38−Using Urbit ID’s pseudonymous reputation model, DAO participants know Urbit ID holders’ past behavior before relying on them, and without sacrificing anonymity. Why do reputations stick to Urbit IDs? Because, like your physical person, every action you take with your Urbit ID affects your reputation. Urbit maximalists often ask “How high of a ransom would you pay if your Urbit ID were ‘kidnapped?’” That’s because the reputation of your Urbit ID is the result of years of labor. Imagine every social account you’ve ever had in one immutable chain tied to one immutable pseudonym.
39−
40−Thus, unlike an anonymous wallet address, Twitter handles or Discord accounts, there are high incentives for keeping your Urbit ID’s reputation squeaky clean.
41−
42−## Urbit ID for DAOs
43−
44−Many DAOs gate their membership on the ownership of a cryptographic asset like an ERC-721 or an ERC-20 token. Token gating is used to create a flat, anonymous membership. This was initially seen as a good thing. “One member, one voice.” All decisions made anonymously via multi-sigs and voting apps secured via smart contract.
45−
46−Token gating also adds utility to NFTs; it unlocks access to perks like special releases or events apart from the core asset. To get into the Milady Rave you need to buy a Milady NFT. It doesn’t matter who you are, what you’ve done, or how capable you are of participating in the community’s goals, if you buy a Milady, you’re in. You have the same rights and privileges as everyone else.
47−
48−In reality, many DAOs move inexorably back towards a more conventional model of “human trust” simply because organization requires it. That’s why DAO builders have long sought “decentralized IDs” for members. “One member, one voice” doesn’t work for complex, efficient decision making; it risks chaos and endless discussion. It creates the need for offchain governance executed by smaller groups, which is cumbersome, requires a patchwork of Web2 apps (i.e. Google and Notion), and undermines the “trustless” nature of the DAO.
49−
50−To return to a prior example, imagine Robinhood was a DAO of its members. If it was run like DAOs today—e.g. those not built on Urbit—a group of Robinhood “elites” make and execute trade decisions via private Discord channels. DAO members vote to approve, but participation is low. Some DAOs even cold-call members to garner participation. Not only is participation low, it’s also low quality: banter about the issues of the day.
51−
52−Urbit ID mitigates membership participation issues by adding permanent, pseudonymous reputations to the mix. As in: Who are you letting into your DAO? And whose DAO are you joining?
53−
54−As a leader of an organization, you want high quality members. You want to avoid Dumb Money: people passively investing in your DAO because it’s cool, but without the ability to add value. You also want to avoid oversubscription/underparticipation: a dropoff in engagement from most members as they become interested in newer, shinier things.
55−
56−When it came time to recruit members for Combine DAO, we didn’t have to leave Urbit. We only considered those with strong pseudonymous reputations on the network, many of whom were anonymous outside of Urbit. Some of the Urbit IDs in Combine DAO like `~bitmep-faswyn` have been on the network for years. Some like `~timluc-miptev` have created valuable groups and built companies on Urbit. Selection blindness was both unneeded and unnecessary—members were selected not in spite of “who” they were on Urbit, but because of it.
57−
58−Pseudonymous reputations also allow prospective DAO members to better evaluate leaders. Urbit ID reputations subsume the need for patchworks of authority. You know exactly “who” `~mogmet-tadnem` is. You don’t need to google his Twitter handle and figure out, oh maybe he’s also the guy behind this or that DAO or NFT release. Leaders benefit from the past and are held accountable for future actions.
59−
60−Now, the organizing forces behind Combine DAO are `~poldec-tonteg` and `~wolref-podlex`. In this case, their real world identities are known to many, but they needn’t be: their actions on the network speak for themselves. `~poldec-tonteg` is the former CPO of Tlon and `~wolref-podlex` is the Executive Director of the Urbit Foundation. Prospective members of Combine DAO know who they are aligning themselves with.
61−
62−To sum it up, Urbit ID is a solution for the reputational problems faced by DAOs in their current form. While good in theory, the trustless nature of DAOs leads to practical issues around organization, leadership, membership, voting, and participation. This is why DAO builders need ways to give their membership durable reputations that can travel with the members as they participate.
63−
64−Urbit offers just such cryptographic identities with portable reputations in the form of Urbit IDs. We put pseudonymous reputations to the test in building Combine DAO, and discovered they enhanced leadership formation and membership curation, eliminating some of the organizational problems that DAOs struggle with today.
content/blog/rollups.mddeleted−222
@@ -1,222 +0,0 @@
1−+++
2−title = "The Gang Solves the Gas Crisis"
3−date = "2021-05-13"
4−description = "How we're making Urbit ID affordable again"
5−
6−[extra]
7−author = "Jonathan Paprocki"
8−ship = "~datnut-pollen"
9−image = "https://media.urbit.org/site/posts/essays/gas.jpeg"
10−+++
11−
12−![gas station](https://media.urbit.org/site/posts/essays/gas.jpeg)
13−
14−Anybody who has used Ethereum smart contracts recently is aware that it has
15−gotten _expensive_. There are a large quantity of
16−complicated and clever techniques each with their own trade-offs
17−that are collectively referred to as "layer 2 solutions" (see [further
18−resources](#resources) for more information about these). This is in contrast to
19−the base computational layer of Ethereum called "layer 1", which is what constitutes most Ethereum usage and where [Urbit ID](/docs/glossary/azimuth)’s smart contracts currently exist.
20−
21−Tlon has always covered gas costs for Urbit ID up to a set limit, and this was easy a couple of years ago when the cost of transactions required to get a [planet](/docs/glossary/planet) up and running came out to less than a dollar. Unfortunately the ongoing Ethereum gas crisis, along with the rising price of Ethereum itself, has made this impossible. We’ve seen gas costs to set up a planet as high as several hundred US dollars at time of writing!
22−
23−In response to the gas crisis, Tlon has spent the last several months developing
24−a simple, in-house layer 2 solution which we anticipate will reduce typical gas costs by 65x or more.
25−
26−This post is primarily a short non-technical explainer of the end-user experience of our solution aimed at planet and [star](/docs/glossary/star) owners and those in the market for one, as well as a status update on where we're at in development. At [the end](#technical) we give some minimal technical details and resources to help you dig deeper should you wish.
27−This is also primarily aimed at those who currently self-host or plan to self-host their
28−urbit. For anybody utilizing a hosted service, this matter will all be handled
29−by your provider. There is a [separate section](#stars) addressed specifically at star owners, and another [section](#rollers) for those who wish to set up their urbit to accept and submit layer 2 transactions. We’d like to emphasize that this system is 100% opt-in—if you are satisfied with the current experience of Urbit ID, then nothing changes for you whatsoever.
30−
31−Perhaps the most pressing question held by anybody reading this is—when will
32−it be ready? It's not reasonable to give a timeline on difficult engineering
33−work, but rest assured that completing this upgrade is a top priority. Much
34−of the back-end is approaching completion, and we are confident in a release before the end of Q3 and hopefully much sooner.
35−
36−### Naive rollups
37−
38−Our layer 2 solution, designed primarily by Tlon lead engineer `~wicdev-wisryt`,
39−is known as "naive rollups" and we will be using this term interchangeably with
40−"layer 2"—though it is important to note that there are many layer 2 solutions
41−utilized by projects other than Urbit. As we're avoiding technicality here, we’re focusing primarily on the advantages and disadvantages of utilizing our layer 2 solution, and how that affects the management of your [ship](/docs/glossary/ship).
42−
43−Very briefly, a rollup is a way to combine many transactions into one, and we
44−are building infrastructure so that any Urbit ship may be utilized as a "roller". A
45−roller will collect layer 2 Urbit ID transactions, confirm their validity, and
46−post them to the Ethereum blockchain. More detail is given [at the end](#technical). Anybody may set up a
47−ship to [act as a roller](#rollers). Tlon will be launching our own publicly accessible roller, but as Urbit is a decentralized network, by no means will we have a monopoly.
48−
49−#### Pros and cons
50−
51−The primary advantage to using naive rollups is that the gas cost for Urbit
52−ID-related actions will be dramatically reduced. It will be reduced sufficiently that we expect that a few transactions per ship per week (plenty for ordinary usage) submitted to Tlon's roller will not cost the end user anything. There are no gas costs associated with submitting a layer 2 transaction to a roller, and Tlon will bear the gas cost of posting the results to the blockchain. That means that the cost you see for a planet on a market that utilizes Tlon's roller ought to be
53−the final cost.
54−
55−There are a few trade-offs for this, but none of them really sacrifice the core
56−value propositions of Urbit ID.
57−
58−The most substantial one is that ships on layer 2 are essentially completely isolated
59−from the rest of the Ethereum ecosystem. They can no longer interact with smart
60−contracts designed to work with Urbit ID or non-fungible tokens (which are how Urbit IDs are represented) in general. It is also not possible to write new Ethereum smart contracts that work with layer 2 ships.
61−
62−Compounding that factor, the journey to layer 2 is one-way only—at
63−least for now. There are theoretical ways a ship may be moved back to layer 1, but they do not yet exist, and we cannot promise that such a thing will be available in a timely manner. Anybody moving a ship to layer 2, or buying a ship on layer 2, should assume that they will
64−remain on layer 2 for the foreseeable future. We do not expect this to be
65−permanent, but it is perhaps the most significant drawback for the time being.
66−
67−Another one is that transactions may no longer be "instant". Effectively, this
68−was already the case on layer 1—unless you paid a lot of gas, you could wait
69−hours or even days for your transaction to clear. But the way we are saving on
70−gas is essentially by "bundling" or "rolling up" many transactions into one, and
71−submitting them as a single transaction. The more transactions in the rollup,
72−the better the savings. This bundling is not the only factor at play here
73−though—costs are reduced other ways, but this is a technical detail
74−[discussed later in this post](#technical). It is possible to use layer 2 to submit single
75−transactions (and this will still save on gas costs!), so utilization of layer 2
76−should not incur any delay over layer 1 when utilized in this fashion.
77−
78−Tlon has not finalized the details on how our roller will work, but it will
79−probably involve waiting until a sufficient backlog of transactions have been
80−submitted to make it economical to bundle them up, or just submitting every set
81−time period, whichever arrives first. We do not see this as a big issue—we
82−view Urbit ID as "digital land", and a few hours to acquire land, or waiting for
83−your new personal computer to be delivered, is still lightning fast in
84−comparison to the real world. We also have ideas on methods that will allow you to get on the network before the transfer has been confirmed, but that is outside of the scope of this article.
85−
86−Our layer 2 preserves the main value proposition of Urbit ID, which is that your ship
87−belongs to you forever, and that this is assured by very strong cryptographic methods and
88−game-theoretic arguments comparable to the ones that exist on layer 1. We
89−consider this principle to be uncompromisable, and maintaining ultimate
90−sovereignty over your ship was totally central in choosing our solution.
91−We summarize the new security model [below](#technical), and `~wicdev-wisryt`
92−goes into greater detail in the [resources](#resources).
93−
94−### Changes to User Experience
95−
96−The primary way one manages their Urbit ID, namely performing tasks such as
97−transferring ships, setting networking keys, or setting
98−[proxies](/docs/glossary/proxies), is with a web interface called
99−[Bridge](/docs/glossary/bridge) found at
100−[bridge.urbit.org](https://bridge.urbit.org). If you already own a planet,
101−you've probably used Bridge before - perhaps only a single time.
102−
103−Bridge will be getting a facelift to enable easy interfacing with layer 2,
104−including loud warnings about what is being gained and lost by doing so. From
105−here you will be able to transfer your ship to layer 2, and once there,
106−perform all the usual actions you can on layer 1.
107−
108−The main difference for layer 2 transactions on Bridge will be the additional
109−choice of a roller to submit transactions to. Tlon's will be free for ordinary, non-time-sensitive usage.
110−You could use your own ship for a fast single transaction for a little more gas. We expect that planet markets and stars may wish to set up their own rollers as well.
111−
112−Every planet has a sponsor star, which distributes [OTA
113−updates](/docs/glossary/ota-updates) to their sponsored planets and assists with peer discovery. Both layer 1 and layer 2 planets will be able to be
114−sponsored by either layer 1 or layer 2 stars, meaning that nothing will change
115−in terms of how sponsorship works.
116−
117−When you buy a ship, any reputable seller will inform you whether or not it is
118−on layer 1 or layer 2. Anyone running an urbit will be able to verify this information, and we expect for tools to exist to make this information publicly available (see [this grant](https://grants.urbit.org/bounties/1101665172-network-explorer-data-pipeline-http-api)).
119−
120−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
122−[technical details](#technical), read on.
123−
124−### Changes to stars {% #stars %}
125−
126−Both planets and stars will be able to move to layer 2.
127−[Galaxies](/docs/glossary/galaxy) must remain on layer 1 for technical
128−reasons, and [moons](/docs/glossary/moon) and
129−[comets](/docs/glossary/comet) never interacted with Ethereum anyways, so
130−they are completely out of the picture.
131−
132−Stars will be able to remain on layer 1 with no action required. For star owners
133−that wish to take advantage of the cheaper gas costs, there are two possible
134−modes: ownership of the star on layer 2, or setting the spawn proxy to layer 2
135−with ownership remaining on layer 1.
136−
137−The first mode—a star which is owned on layer 2—has the same advantages and
138−disadvantages as a layer 2 planet. Planets spawned by a layer 2 star will also
139−necessarily be on layer 2 - there is no way to spawn a layer 1 planet from a
140−layer 2 star, though any planets which were spawned on layer 1 before the
141−star migrated to layer 2 will remain on layer 1.
142−
143−The second mode—ownership on layer 1, with spawn proxy on layer 2—is only slightly more complicated. Such a star will change its networking keys, transfer
144−between wallets, and set its management proxy all on layer 1, with the
145−corresponding higher gas cost. However, it will be able to spawn planets on
146−layer 2—and _only_ on layer 2—with the corresponding layer 2 tradeoffs. Like
147−moving ownership to layer 2, this will be a one-way journey for now. Planets
148−spawned before moving the spawn proxy to layer 2 will remain on layer 1, but
149−from 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−
151−### Creating a roller {% #rollers %}
152−
153−![gasprices](https://media.urbit.org/site/posts/essays/gasprices.jpeg)
154−
155−Rollers are urbit nodes which users submit transactions to to be "rolled up"
156−into a bundle to be submitted to the Ethereum blockchain. The business logic for
157−a roller runs on the urbit node itself. Thus, anybody with an urbit ship may set
158−it up to act as a roller. While the details of how rollers work are still being
159−hammered out, one should expect that one can either set transactions to be
160−submitted at regular intervals, once a sufficient number of transactions have
161−been received (as more transactions means greater savings), manually, or some
162−combination of the above.
163−
164−Tlon plans to release documentation on how to set up your own roller concurrently with
165−the release of our layer 2 solution.
166−
167−Malicious rollers could potentially exist, but the worst they ought to be able
168−to do is simply not submit your transaction. The security factors for rollers
169−are briefly addressed [below](#technical), and elaborated upon in the
170−[resources](#resources), but you can expect full technical documentation on
171−these factors to be included in the roller documentation.
172−
173−### Changes to Azimuth
174−
175−[Azimuth](/docs/glossary/azimuth) is the set of Ethereum smart contracts
176−governing Urbit ID. They will require a few changes to accommodate the new
177−system. Some of this has been implicit above, but to be clear, we will only be
178−making a couple minor alterations:
179−
180−- Once a star's spawn proxy is set to the layer 2 address, it can't be switched
181− back, and they can no longer spawn layer 1 planets.
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.
184−
185−### Technical details {% #technical %}
186−
187−What'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−
189−In layer 1, the [Ethereum Virtual Machine (EVM)](https://ethereum.org/en/developers/docs/evm/) guarantees the validity of state transitions, while for layer 2 transactions, each Urbit node guarantees the validity of the state transitions.
190−
191−Changes to the state of Urbit ID on layer 1 works as follows:
192−
193−1. A transaction is posted to the Ethereum blockchain.
194−2. The EVM calculates the resulting state transition and checks its validity, then updates the state.
195−3. Your urbit downloads the new state from an Ethereum node.
196−4. Your urbit makes the final decision on whether the new state is valid.
197−
198−In practice, the fourth step is never used in layer 1. The primary change to our
199−security model is that we are cutting out step 2 and beefing up step 4. Your
200−ship will now perform validation of the transactions posted to the Ethereum
201−blockchain, rather than the EVM.
202−
203−Since [Urbit OS](/docs/glossary/arvo) is deterministic, and Hoon has some nice formal
204−properties, 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−
206−#### Further Resources {% #resources %}
207−
208−We want to keep this post brief and non-technical, so that's all we'll say about
209−it for now. To find out more, you have a few directions to go on. We held a
210−[Developer Call](/events/2021-03-04-developer-call-scaling-azimuth) where
211−`~wicdev-wisryt` outlines the design in much more technical detail, and also
212−explains why we decided to utilize our own design rather than other known layer
213−2 solutions such as [Optimistic
214−rollups](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/optimistic_rollups/),
215−[ZK-rollups](https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/),
216−etc, or other blockchains. He also plans to do a more technical walkthrough video sometime before release. For those who would rather read, see
217−`~wicdev-wisryt`'s [RFC: Naive rollup for cheaper Urbit ID
218−transactions](https://groups.google.com/a/urbit.org/g/dev/c/p6rP_WsxLS0/m/hQBX0modAwAJ)
219−post on the `urbit-dev` mailing list. Lastly, the primary working branch on
220−Github for the Urbit side of naive rollups is
221−[here](https://github.com/urbit/urbit/tree/philip/naive), though it is not the
222−only place code is accumulating.
content/blog/security-and-continuity.mddeleted−60
@@ -1,60 +0,0 @@
1−+++
2−title = "Security and Continuity"
3−description = "An update on our primary infrastructure milestones for 2020."
4−date = "2020-11-30"
5−
6−[extra]
7−author = "Galen Wolfe-Pauly"
8−ship = "~ravmel-ropdyl"
9−image = "https://media.urbit.org/site/posts/essays/land4.jpg"
10−+++
11−
12−![Security and Continuity](https://media.urbit.org/site/posts/essays/land4.jpg)
13−
14−## Security and Continuity
15−
16−In 2018, when we launched the Urbit ID contracts (also called ‘Azimuth’), we committed to yearly infrastructure goals for 2019 and 2020. This wasn’t an informal commitment — it’s part of the contracts that were published to the blockchain, which you can read [here](https://raw.githubusercontent.com/urbit/azimuth/edf68b8da04806dd5b95994daf14cf1e7e226829/proposals/0xcb1f81e42b5e75f000f94fc71a3ea70cab4bfc6f236b91e717f1b9516e5596b5.txt). At the end of each year, we ratify our accomplishment of these goals with a galaxy vote.
17−
18−Since the year is coming close to an end, and this year’s vote is on the horizon, it’s time for an update on our progress.
19−
20−For this year, we committed to completing two things: passing a third-party security audit of our networking protocol (Ames) and getting Urbit OS (both Arvo and the interpreter) to the point where we can reasonably expect the Urbit network to continue without any hard forks (which we call ‘breaches’). A world with no network breaches is one where the network should be able to run indefinitely without any interruption. We also call this ‘continuity’.
21−
22−We’ve been steadily making progress on these two fronts, and I’m happy to report both are nearly complete. We’ll walk through some of the details here and then follow up in another post soon to report on how the final work turned out.
23−
24−## Ames Audit
25−
26−Urbit OS is an ‘overlay OS’: it runs on top of (pretty much) any flavor of Unix. Each Urbit OS node communicates with other nodes over UDP using Ames, the Urbit-specific networking protocol.
27−
28−There are two things worth worrying about when it comes to Urbit OS security: someone breaking into Urbit from the machine it’s running on, and someone compromising the network protocol itself. As to the first, there are probably ways that we can harden the OS sandbox, but if the machine it’s running on is secure we can feel reasonably safe. Since there’s lots of prior art on how to secure a Unix machine, we can leave hardening the runtime for later and simply encourage everyone to secure the boxes they run their Urbit nodes on.
29−
30−Assuming each node on the network can run on a locked-down machine, it’s really important that the protocol for communicating between these nodes is secure. Also, since Ames uses other Urbit nodes for peer discovery, we want to make sure no ‘relay node’ can inspect data not meant for them.
31−
32−The question “Is Ames secure?” is too vague for an auditor, of course. The audit was scoped to determine that the following three criteria are met:
33−
34−- No one can impersonate another ship on the network
35−- No one (including relays) can intercept and decrypt messages not meant for them
36−- Ames messages don’t leak keys that could endanger the sender’s data
37−
38−Our goal with this scope is to focus exclusively on the design and implementation of Ames itself. Basically, the crypto should be correct and there should be no flaws in either the protocol design or its implementation. Our interpreter can still be hardened against other potential attacks, which is work we’ll undertake in the future. We asked our auditors to flag all of these potential issues, so we know what needs to be addressed in the future.
39−
40−The good thing about an audit scoped in this way is that we can trust the protocol to authenticate people and shuttle packets back and forth safely. We’ve always been reasonably confident about Ames, but having an external stamp of approval will be great.
41−
42−As of the end of November 2020, the audit is very nearly complete, and we’ve handled all the important issues that were brought up. We’ll post the results and talk about our mitigation strategies in a future writeup.
43−
44−## Continuity
45−
46−Urbit is designed to last a long time. What’s the use of a personal computer if it’s gonna disappear along with all the data you put in it? Ideally, you can put your Urbit on a USB stick, forget about it for ten years and have it work again when you plug it in. It’ll need to update for a while, but once our work on continuity is complete, your urbit should be able to upgrade itself through ten years of updates, all over the air.
47−
48−While Urbit is designed to upgrade seamlessly over the network we have occasionally run into issues that have caused us to reboot the entire network. Most of the time this is when some incompatibility between the interpreter and the kernel means we have to force everyone to do a hard reset to ensure compatibility between the two. Our current work on continuity addresses this. Soon, your urbit will tell you when your interpreter needs to be upgraded. At first this won’t be that different from an application notifying you to download an update. Eventually, we think we can make this a lot smoother.
49−
50−A network reboot isn’t the only way that we can break continuity. Urbit is a general-purpose computer — which means you’re free to attempt to destroy it. If, for any reason, you do manage to screw the system up we want you to be able to get your data out and effectively reset continuity on a single node. We built the affordance for that a while ago, but before the end of the year we’ll also distribute tooling to migrate userspace data between hard resets.
51−
52−The combination of version negotiation and data migration should afford us the ability to run the network indefinitely into the future. Unfortunately, to get this change in, we’ll need to reset the network. We’re optimistic that this will be the last time we ever do it. And, given our data migration tooling, this breach won’t involve losing data.
53−
54−## Status + conclusion
55−
56−We have been working with auditors since this summer and should have a report ready to publish in the next few weeks. Both version negotiation and data migration are in testing and are ready to be deployed.
57−
58−Our goal is to have all of this work complete by `~2020.12.10`. This means we should be able to start a galaxy vote right around that time. Galaxy votes (as specified in the contracts) run for a month, which should have this whole process ending on `~2021.1.10`.
59−
60−It's going to be an exciting couple of weeks!
content/blog/security-audit.mddeleted−153
@@ -1,153 +0,0 @@
1−+++
2−title = "Ames Security Audit and the Future of the Protocol"
3−description = "Ames’ design has unparalleled potential to deter, mitigate, and recover from attacks, since every packet is authenticated and encrypted and backed by a stable, decentralized PKI."
4−date = "2020-12-17"
5−
6−[extra]
7−author = "Ted Blackman + Anthony Arroyo"
8−ship = "~rovnys-ricfer + ~poldec-tonteg"
9−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/20201218-audit.png"
10−+++
11−
12−![audit](https://storage.googleapis.com/media.urbit.org/site/posts/essays/20201218-audit.png)
13−
14−The 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.
15−
16−I'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."
17−
18−This means Ames uses cryptography in a mathematically sound manner that protects your privacy, keeps your secrets secret, and ensures nobody else will be able to impersonate you on the network. Since this was an architectural audit, it’s possible there are still vulnerabilities in the runtime implementation. Until the runtime has been hardened, Tlon continues to recommend against storing valuables in your ship.
19−
20−Aside from a couple of minor issues that have already been resolved, there are three general classes of problem highlighted in their report that future work will need to address:
21−
22−- Forward secrecy
23−- Protection against denial of service attacks
24−- Enforcement of social boundaries
25−
26−Ames’ design allows for versioning of the protocol, which means that the proposed changes below can be deployed as over-the-air updates as they become more pressing concerns. This feature gives us confidence that we can address future security issues as they arise.
27−
28−We will need to improve all of these over the next couple of years, as independent lines of work. As the network grows: better forward secrecy will decrease the damage from a key getting compromised; resistance against denial of service attacks will make the Urbit network resilient to increasingly determined saboteurs; and stricter enforcement of social boundaries will let Urbit’s social networks remain safe and friendly despite potentially increasingly large numbers of bad actors and increasingly complex app ecosystems.
29−
30−## Forward Secrecy
31−
32−A protocol is said to have forward secrecy if compromising a key used in a recent message doesn’t also compromise all previous messages. Similarly, a protocol is said to have backward secrecy -- also called future secrecy -- if compromising a key used in a previous message fails to compromise all future messages. Ames has some degree of both, but more would be better, to decrease the damage an attacker could inflict by compromising a key.
33−
34−As it stands, an Urbit user can change their Ames keys whenever they want, by conducting an Ethereum transaction to update the Ames public key listed in the Azimuth contract, which implements Urbit’s PKI on Ethereum. Compromise of one Ames private key does not compromise earlier or later keys, so this has both forward and backward secrecy. The main drawback is that Ethereum transactions can be expensive, so key rotation is likely to be infrequent, and an attacker might be able to gain access to a long stretch of time by compromising a single key.
35−
36−Various key rotation “ratchet” schemes could be added to Ames to establish varying degrees of forward and backward secrecy, and other kinds of cryptographic protections beyond basic soundness, such as break-in recovery.
37−
38−Right now, changing a key through Azimuth is a manual process. It could be automated, possibly as one of a suite of services that an Urbit Provider will offer. Unfortunately, each key rotation costs the user money, so automating rotation could get prohibitively expensive.
39−Existing protocols, such as the Signal app's encrypted messaging protocol, the Noise protocol framework, and the Wireguard VPN protocol, use ephemeral Diffie-Hellman key exchange and KDF chaining to achieve forward and backward secrecy and self-healing.
40−
41−Ames could be upgraded to use one of these existing ratchet algorithms, or we might create an Urbit-specific variant optimized for the Urbit network. This is work that should be done, but fortunately it will not require any novel research or drastic changes to Ames’s architecture.
42−
43−While Urbit’s cryptographic protections don’t yet match those of Signal or a few other privacy-focused apps, Ames is cryptographically sound, and since Urbit updates itself over-the-air and is backed by a stable, decentralized PKI, I’m confident that the level of sophistication of Urbit’s cryptography has the potential to be world-class with just a bit more work.
44−
45−## Denial of Service
46−
47−A denial of service (DoS) attack against an Urbit ship is an attempt to overwhelm it remotely by sending it network data in such a way as to interfere with the ship’s ability to communicate with other ships or process other events -- usually by hogging its resources (computational power, memory, or bandwidth) until normal operation slows down or ceases entirely. Since the promise of Urbit is that everyone can run their own server, that server needs to be able to defend itself against DoS attacks. This is in fact one of the main impediments to running your own server in the modern world.
48−
49−Right now, Urbit has no protection. Soon, it will need to at least be able to resist a simple attack carried out by an individual. Eventually, it should be able to resist a determined Distributed Denial of Service (“DDoS”) attack, which is more difficult.
50−
51−There are two categories of DoS attacks in Urbit: authenticated and unauthenticated. An authenticated attack requires access to a ship's private key to construct valid Ames packets intended to overwhelm a target. All authenticated attacks will be handled primarily through enforcement of social boundaries, as discussed in the next section.
52−
53−An unauthenticated DoS attack constructs packets that eventually fail to authenticate and decrypt but still overwhelm the target by causing it to waste resources (CPU, memory, disk, bandwidth) in such a way that it can't keep up with legitimate communications.
54−
55−An unauthenticated DoS attack relies on the lack of Sybil resistance of IP networks: it's possible to generate new IP addresses rapidly, and a determined attacker might also be able to spoof its sender IP address. This is best considered an IP-layer attack that must be handled mostly at the IP layer itself, by maintaining state about which IP addresses can be trusted and which can't, determined empirically and heuristically by the Urbit runtime. The best any higher-level protocol, such as Ames or TCP, can do is make it as cheap as possible for a DoS target to reject a bad packet.
56−
57−The overall strategy that Ames can take, as a protocol layering over the IP protocol, is to add an authentication procedure to each packet that can quickly identify bad packets, which an implementation will then use to mark that IP address as suspect and to refrain from adding the sender IP to a list of known-good IPs.
58−
59−Currently, Ames handles this by attempting to decrypt a message and rejecting the message on failure. This may be a more costly solution than other methods, such as attaching a signature or a MAC to each message. The way to mitigate unauthenticated attacks is to make bad packets fail faster by augmenting each packet with a signature or MAC to each packet, since those are faster to validate than encryption.
60−
61−So far, we have identified three approaches that could be taken here. Of these three, Leviathan recommended the end-to-end HMAC solution, since that would not impose additional CPU requirements on packet-relay nodes, such as stars.
62−
63−- Sign each packet, and any relay or final recipient could validate the signature
64−- Wrap each packet in an HMAC, validated by the final receiver
65−- Wrap each packet in a HMAC for each hop in a relay chain; each relay would validate and strip the previous HMAC and add a new one for the next hop
66−
67−Any of these solutions would be attempts to increase the rate at which the network could discard invalid packets, with different tradeoffs. I'll back up a bit to provide some context, and then I'll compare the approaches.
68−
69−In any DoS solution, a planet will want to block or throttle IPs that have been sending it packets that fail to authenticate and decrypt. Ideally, a star will help protect planets for whom it’s relaying, too. Many different arrangements among galaxy, star, and planet are imaginable here, from an open policy to a policy wherein each packet has to come from a known-good IP. This sort of paranoid, closed-off arrangement might still not be enough to withstand a determined DDoS, but it's difficult for me to imagine doing better than that without launching Urbit-specific ISPs. Ames packets are cryptographically authenticated, so an Urbit ISP would actually be feasible.
70−
71−This brings us back to the three possible ways of mitigating DoS from within the Ames protocol. They all involve adding a piece of authenticating information to each packet that can be verified more quickly than waiting for the cyphertext to fail to decrypt — Ames's symmetric encryption is authenticated, so it's not a cryptographic soundness issue, but the performance impact of trying to decrypt could be significant enough to make it hard to prevent a DoS.
72−
73−As-is, an Ames packet is basically `[protocol-version checksum sndr rcvr (nullable origin) cyphertext]` (visit [this PR](https://github.com/urbit/urbit/pull/4051#issue-530369627) for a full specification). Let’s walk through the construction of the packet and how it can be upgraded to offer different DOS mitigations.
74−
75−### DoS Mitigation Approach 1: Signature
76−
77−The first approach to DoS protection would be to add a signature to the packet. The signature would cover everything except the checksum and the origin, since those need to be swapped out by relays. The signature would probably obviate the need for the (20-bit) checksum, although we could also leave it in there if we can't figure out what else to do with those header bits.
78−
79−#### Advantages of a signature over other approaches
80−
81−- It can be validated by anyone on the network. Relays would not need to modify it. This might also give it symmetry with the upcoming remote scry protocol, which might also sign every packet. I'm not quite sure this is an important property, actually, but it might theoretically make launching an Urbit ISP or internet backbone easier one day.
82−- It would be signed directly by the key listed on Ethereum, not something that might get ratcheted at some point for better forward secrecy — this could eventually lower the rate at which intermediate validators need their key caches invalidated, although this is a bit of a theoretical concern.
83−
84−#### Disadvantages of a signature over other approaches
85−
86−- Generating and validating a signature is significantly slower than generating and validating an HMAC.
87−- An ECDSA signature is 64 bytes, which is ~6% of a packet payload. As far as I can tell, it can't be compressed.
88−- Since the signature could be validated by anyone, it doesn't attest to a specific communication channel, so it might not help as much with IP filtering.
89−
90−### DoS Mitigation Approach 2: End-to-End HMAC
91−
92−The second approach would be to use an HMAC instead of a signature, validated by the eventual receiver. This HMAC would also cover everything except the mug and origin. I'm calling this the "end-to-end HMAC" design. An HMAC requires a shared secret, for which we could use the same symmetric key that Ames uses.
93−
94−#### Advantages of end-to-end HMAC
95−
96−- It's simple in some sense; relays don't need to do anything cryptographic.
97−- HMACs are much faster to create and validate than signatures.
98−- HMACs, since they're hashes, can be truncated arbitrarily and still maintain some security — to find hash collisions, you'd still have to guess what packet||shared-secret would hash to; it would just be a smaller search space. Since Ames's encryption already guarantees authentication and we'd just be using this as a performance optimization, I suspect we could get away with using one that's significantly smaller than a signature — I'm not sure how small, but if 4 bytes would be enough in practice, that would take up less than 0.5% of the space in a packet.
99−
100−#### Disadvantages of end-to-end HMAC
101−
102−- Only the recipient can validate. This means the authentication couldn't be used by relays to discard invalid packets. The recipient could provide back-pressure out-of-band to a relay to ask the relay to discard packets from an IP with an invalid HMAC, but this is indirect and might need to filter backward through multiple relays to work properly.
103−
104−### DoS Mitigation Approach 3: Point-to-Point HMAC
105−
106−The third approach, which is what I would build unless convinced otherwise, is what I'm calling "point-to-point HMAC". This design would include a different HMAC for each hop in a relay chain, instead of (or maybe in addition to) including one end-to-end HMAC.
107−
108−We have a couple different options for how to construct the shared secret for each hop. I would intuitively construct it using a Diffie-Hellman of my private signing key and your public signing key — the "networking keys" on Ethereum include a currently unused signing key in addition to the encryption key that Ames uses. This way even if we add more forward secrecy to Ames, changing the symmetric key used for encryption, relays wouldn't have to have their caches invalidated as often; the state required to perform relaying wouldn't be as tied to the state required to receive a message.
109−
110−#### Advantages of point-to-point HMAC
111−
112−- A star could perform some validation on every packet it's asked to relay. This makes it more difficult for an attacker to route a ton of packets to a planet through a star, or even through many relays. Signatures also have this property, but they're slower to verify. This approach and the signature approach, but not the end-to-end HMACs, force an attacker to use an (at least partially) authenticated attack in order to use a relay as a way to get to a planet.
113−- A planet could quickly validate that a relayed packet actually came from its star, not an attacker who's managed to spoof the star's IP address.
114−
115−#### Disadvantages of point-to-point HMAC
116−
117−- Not everyone on the network can validate a packet, unlike a signature.
118−- Each relay needs to validate and strip off the previous HMAC and create a new one before sending it. This should be quite fast, since an HMAC is just a hash, but it's still some CPU, and potentially creates an imbalance where an attacker could induce the relay to spend more CPU in validation than the attacker spent in constructing the packets.
119−- By itself, it doesn't validate the cyphertext in an end-to-end way. I suspect we might want to include both a per-route HMAC and an end-to-end one, especially if we use truncated HMACs — although per-route might be enough on its own, since if the receiver fails to validate a bunch of packets whose HMACs were validated by the relay, the receiver can ask the relay to block that whole Urbit address regardless of IP, so it shouldn't be possible to sustain that kind of attack for long.
120−
121−#### An Aside About Cryptographic Performance
122−
123−I'm not sure exactly how much faster HMAC is. According to DJB (https://ed25519.cr.yp.to/ed25519-20110705.pdf), an ECDSA signature can be created in around 30 microseconds and verified in around 100 microseconds. This source (https://www.jacksondunstan.com/articles/3206) suggests about 21 microseconds for HMAC-SHA256, so about a 1.5x improvement in generation speed and 5x in validation speed. We should verify these numbers for ourselves before making a decision.
124−
125−### DoS Protection Strategy and Timeline
126−
127−Tlon is not currently pursuing adding any of the extra cryptographic authentication on Ames packets described above. Since this is ultimately a performance issue, there are other more pressing performance issues that we could improve upon before decryption will become the limiting factor in how many packets can be processed by a ship. We will revisit this authentication performance question once some of the low-hanging fruit has been done, perhaps roughly a year from now.
128−
129−Since the audit, we’ve already improved the Ames packet format to allow faster parsing, faster validation of basic fields, and faster relaying; in the future, increases in performance of Nock execution and inter-process communication between Urbit's I/O process and Nock worker would allow Urbit to absorb somewhat more punishment before service can be effectively denied.
130−
131−## Enforcement of Social Boundaries
132−
133−While Urbit needs to rely largely on its runtime to mitigate unauthenticated attacks, any attack conducted from an Urbit ship needs to be handled inside Arvo itself, not just by IP filtering in the runtime. Just like in any DoS, an attacker ship might try to induce you to use too much memory, CPU, or disk space in order to sabotage normal operation. An authenticated attack is harder to define than an unauthenticated attack, because it depends on what social relationship the attacker and target have, and it involves valid, authenticated Ames packets; once discovered, though, it’s easier to mitigate, because it can use Urbit’s permanent identity system to enforce social consequences, i.e. stop listening to that Urbit address and possibly encourage others to do so as well.
134−
135−There are a couple of different kinds of authenticated attack: attempts to exploit vulnerabilities in the Nock worker (the interpreter, allocator, and jets) by causing particular Nock code to run, and attempts to induce the target to exhaust various computational resources.
136−
137−Protecting against attempts to break out of the sandbox and hijack or otherwise interfere with the Unix process running Nock will require a process of hardening, fuzzing, and likely further security audits specifically evaluating the security of that boundary. This is largely out of scope of the Ames protocol itself, which was the subject of this audit.
138−
139−This leaves us with the latter case: resource exhaustion attacks. A peer could try to get my ship to use too much RAM, disk, CPU, or bandwidth by sending it valid Ames packets. This represents a social problem: a person on the network is trying to interfere with me. It's what's known in blockchain circles as an "attributable fault": once the attack is detected, it's trivial to determine the identity of the culprit.
140−
141−Once the attacker’s Urbit address is known, Urbit will fall back on the Sybil resistance of its identity system: there are a finite number of identities, each of which costs some money. Because Urbit identities are relatively permanent, they can be blocked permanently. As long as the expected value of an authenticated attack is less than the cost of the identity, the attacks won't happen very much — they'll cost money to sustain, instead of being self-perpetuating.
142−
143−Attacks like this are best thought of as attempts to violate social boundaries. I don't want you using up too many of my resources; that's a social boundary, and an attempt to force my ship to spend its resources on your behalf constitutes a violation of this boundary. The strategy for mitigating these attacks is to impose social and, indirectly, economic consequences on the perpetrators. The main social consequence is other ships refusing to communicate with you anymore.
144−
145−Some of this mitigation will take place in the Arvo kernel, and some will need to be application-specific. To protect the system from attackers, the kernel needs to be able to free space (Urbit is a single-level store, so there's no distinction between disk and RAM from Arvo's perspective) taken up by unfinished messages sent by peers. This can be done by allowing an application to ask Ames to delete partially received messages from a peer, generally replacing the received packets with an intent to nack (negative acknowledgment) to indicate that the transaction the peer wanted me to perform has been rejected.
146−
147−Applications should also be able to set resource usage policies that the Arvo kernel will enforce. For example, a chat application should configure Ames to reject any chat messages larger than, say, two hundred kilobytes. A file-sharing application would need a much larger per-message limit (ideally no per-message limit), but it might need to place a cap on its bandwidth usage to make sure lower-latency communications aren't swamped by a large file transfer. This kernel/application interface starts to resemble a permissioning or capabilities system, and it could be built as part of the crucial larger project of providing for configurable application permissions.
148−
149−To close the loop on enforcing social boundaries, reputation information should be shared across ships. This will likely be done by building one or more applications that share statistics and block operations. Some forms of reputation are likely to be globally shared, whereas others are likely to be multipolar, i.e. some people like you and some don’t. Generally, the lower the layer of the attack, the more global the reputation effect will be; the higher the layer, the more multipolar. An attempt to spam the network with millions of malicious packets will cause most people not to want to talk to you; sending me a movie I found mediocre is probably not even information worth sharing with anyone else.
150−
151−## Conclusion
152−
153−Ames’ design has unparalleled potential to deter, mitigate, and recover from attacks, since every packet is authenticated and encrypted and backed by a stable, decentralized PKI. It feels good to have our design for encryption and authentication be confirmed by a third party as cryptographically sound, and we know more or less what we need to build to reach the full security potential of the platform, including the steps outlined here.
content/blog/simple-durable-yours.mddeleted−48
@@ -1,48 +0,0 @@
1−+++
2−title = "Simple, Durable, Yours"
3−date = "2019-10-16"
4−description = "We built Urbit from scratch to be a system that’s simple, durable, and yours. Everything that computing today is not — but should be."
5−extra = { }
6−+++
7−
8−We live in a world dense with digital services. We see the world through them, we depend on them completely, and they’re not going away. They’re only becoming more ubiquitous.
9−
10−But computers are a mess.
11−
12−![](https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-notifications.svg)
13−
14−We 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−
16−If 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−
18−![](https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-rock%402x.png)
19−
20−We built Urbit from scratch to be a system that’s simple, durable, and yours. Everything that computing today is not — but should be.
21−
22−What do we mean by simple, durable, and yours? Let’s walk through it one by one.
23−
24−<br /><br />
25−
26−## Simple
27−
28−Urbit is designed to be incredibly simple for ordinary users. Your data, applications, and connections all live in a single, unified operating system that belongs to you. Your Urbit requires no system administration and gets all its updates over the air. For developers, Urbit is incredibly compact and efficient. It’s about 50K lines of code — smaller than your average webapp. The entire OS can be understood by a single person and is designed to make building decentralized apps straightforward.
29−
30−<br /><br />
31−
32−## Durable
33−
34−Your Urbit is designed to be durable: both to store your data across generations and to be resilient against crashes. You can't really trust a computer that could disappear or become obsolete. We’ve become accustomed to this distrust, but it’s not the way things should be. Your Urbit is meant to be a permanent digital home. At its foundation, Urbit is designed a bit like a blockchain — making reliability and permanence a priority for the individual.
35−
36−<br /><br />
37−
38−## Yours
39−
40−Finally, 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−
42−![](https://media.urbit.org/site/understanding-urbit/simple-durable-yours/simple-durable-yours-evolution.svg)
43−
44−Urbit 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−
46−Over time we’ve quietly evolved Urbit into a carefully engineered, compact system. Urbit isn’t done — but it’s well on its way. The network has been live since 2013 and the interface is coming along nicely. You can own a piece of Urbit today if you can find an invite from a friend, or by buying an Urbit ID. We’re ready for people to begin homesteading this new territory we created with new communities and new software.
47−
48−We think it’s possible to leave today’s technology behind and build something better. Something more humane, calm, and collectively owned. Our vision of the future isn’t one where technology intrudes in every corner of our lives. It’s one where technology is mostly invisible.
content/blog/smart-home-of-the-future.mddeleted−60
@@ -1,60 +0,0 @@
1−+++
2−title = "The Smart Home of the Future"
3−date = "2022-08-04"
4−description = "Homes are getting smarter. A smart home is no longer just a collection of smart devices but a superorganism of data-collecting objects. These people and devices who use and inhabit these homes form a complex socio-technical system. What is the future of the smart home and how will Urbit fit into it?"
5−[extra]
6−author = ""
7−ship = "~pilwyc-fastec"
8−image = "https://storage.googleapis.com/media.urbit.org/blog/484f30d6e2d5aa86840a662a8b57bdd5.jpg"
9−+++
10−
11−![The Smart Home of the Future](https://storage.googleapis.com/media.urbit.org/blog/484f30d6e2d5aa86840a662a8b57bdd5.jpg)
12−
13−During the last couple months I’ve worked on learning what makes smart homes tick for Urbit users through a [grant by the Urbit Foundation](https://urbit.org/grants/communal-computing). What I’ve found (and [published in the final whitepaper](https://pilwyc-fastec-public.s3.us-west-2.amazonaws.com/Communal-Computing-for-Urbit-whitepaper.pdf)) is that people have a complicated relationship with the technologies in their homes while the number of devices are continuously increasing.
14−
15−It is further complexified by the fact that for every additional person in the household there is an expanding total number of interactions because of connections individuals form as groups. For example, I may generate one type of data sitting in a room by myself listening to music and a very different set of data sitting with my whole household watching a video together (while also browsing our own personal devices).
16−
17−The relationships you have with everyone that lives and visits your home (even the people that are not supposed to be there) are how we start to define our identity inside those spaces.
18−
19−During the study, I also learned about some important distinctions of Urbit's identity and (current lack of) digital reputation compared to other computing platforms.
20−
21−[Lunar Urbit and the Internet of Things](https://urbit.org/blog/iot) brings up key questions about the perfect paradigm for computing in the Urbit smart home. In that post [~datnut-pollen](https://urbit.org/ids/~datnut-pollen) articulates a problem with smart home devices:
22−
23−
24−> The Internet of Things is much maligned by technologists as a privacy, security, and maintenance nightmare. These products usually depend on phoning home to perform their service, which is inevitably a funnel by which personal data is harvested, an attack surface for hackers to gain access to your home network, and a single point of failure which may render the device useless, all in one!
25−
26−There are a range of needs and preferences regarding a person’s identity, the data they create in the home, and how data would be used. About half of the people thought of themselves as a singular online identity and had fewer concerns with sharing their data with 3rd parties. The other half of people that saw themselves segmented into different identities (e.g. home vs. work vs. online) were concerned with all of the data being sent to 3rd parties from their smart home.
27−
28−This is likely because people’s identities are split based on the relationships they have in their lives. This is related to how they consider what is a violation of privacy based on how their information is used. A framework in the practice of privacy is [Contextual Integrity](https://en.wikipedia.org/wiki/Contextual_integrity) first proposed by Helen Nissenbaum in [Privacy In Context: Technology, Policy, and the Integrity of Social Life](https://www.amazon.com/Privacy-Context-Technology-Policy-Integrity/dp/0804752370). It outlines a model that is based on norms and expectations by people of how they control the flow of their data rather than a false dichotomy of private vs. public. Mismatches between where a person expects their data to go and where it actually goes causes privacy violations. For more ways this is linked to the Urbit privacy models see the [white paper](https://pilwyc-fastec-public.s3.us-west-2.amazonaws.com/Communal-Computing-for-Urbit-whitepaper.pdf).
29−
30−Through these interviews I also found that Urbit’s identity doesn’t, by default, include strong reputational considerations for people. It started in an early conversation I had with [~wolref-podlex](https://urbit.org/ids/~wolref-podlex) about how communal computing would make sense in the Urbit world of strong identity and was confirmed through the discussions we had. The only information that shows up in Urbit communities today are your ID and sigil. Your reputation is then built in every human’s head based on the interactions they have with you through the community. This is a departure from what many technology platforms do today by encoding reputation in stars, likes, and other reputational markers.
31−
32−Lack of reputation legibility is valuable because “snapping to” a set of reputations doesn’t account for all of the different identities that form through the relationships you have. This is especially true for households where there are multiple people or multiple generations. It isn’t so much that they need to be illegible but that having anything other than a human decide what is appropriate will lead to incorrect assessments.
33−
34−In a recent post [Soulbinding Like a State](https://subconscious.substack.com/p/soulbinding-like-a-state), Gordon Brander makes some important points on how the requirement to be legible with identity systems is hazardous for people, especially at the scale of the internet. Client-server models that have proliferated with smart home technologies require that identities need to be legible to the 3rd party services. This is because we are mistaking the need for access with evaluations of those people. Confusing those creates circumstances that will overconstrain the possibilities of a people with the needs of the system.
35−
36−An Urbit smart home could deliver a more realistic identity model, communal experiences, and match the expectations of privacy by letting people relate as humans rather than identities or accounts. It doesn’t stop with only people physically in the household. Households can be joined across space and time. Think about those households intermediated by technology like a shared photo stream that shows up in two different household’s picture frames.
37−
38−For Urbit to be a better part of the home it needs to continue to focus on access through its peer-to-peer network rather than creating complex schemes for the person’s reputation. The reputation within a household is through the interpretations of those that are there in the household. There are many different relational identities like being a parent, a spouse, part of a parent-teacher association, table-top gaming group, and a backyard BBQ crew which is all part of your identity. The norms of how people deal with each other in the home will evolve over time including what should be shared within that context. Who is allowed in a room or not is something set by the expectations of norms that are negotiated between people. This includes photos that should be shown (or not) on the shared picture frame.
39−
40−[Stewart Brand](https://en.wikipedia.org/wiki/Stewart_Brand)’s book [How Buildings Learn](https://en.wikipedia.org/wiki/How_Buildings_Learn) points to how building are in a constant state of flux:
41−
42−> A building is not something you finish. A building is something you start.
43−
44−We should assume that when we add technologies to the household with connected devices this isn’t any different. How we build these devices to respect the privacy, identity, and relationships of people will be key.
45−
46−The next step is to take this work forward and show how the Urbit platform could be used for smart home control. Due to the way the most smart home devices are built today we won’t be able to completely stop the sharing of data in the home with 3rd parties but we can somewhat obfuscate a person’s identity behind their Urbit identity that the device maker won’t understand. In my next [grant proposal](https://pilwyc-fastec-public.s3.us-west-2.amazonaws.com/Communal-Computing-for-Urbit-whitepaper.pdf#page=11&zoom=100,96,96) we will be looking to build a prototype of Gall app to control the most commonly used smart home device: the smart light bulb.
47−
48−The future of Urbit in the smart home will depend on its ability to integrate with many different device manufacturers. As these devices are installed, upgraded, and generally maintained they need to persist the identities of people in the home and configuration over time whereas most today require a relogin. The people in the home should maintain control over the systems automatically and perpetually rather than having to keep reasserting it through password resets. When they decide to leave the home they should be able to easily transfer that ownership to the next occupant like they would a set of keys.
49−
50−Another quote by Stewart Brand on buildings:
51−
52−> All buildings are predictions. All predictions are wrong.
53−
54−Our guesses as to what the people in a smart home of the future needs will be incorrect. What we can do is start to build around the doctrine of Urbit focused on personal data ownership, simplified identity, and leaving reputation to humans.
55−
56−The future of computing in the home will be one that is ubiquitous, contextual, and communal. Urbit needs to embrace the strong identity it already has without forcing legible reputational systems that are meant to be all-encompassing. The ownership over data and what happens to an Urbit ship will be a huge benefit when considering the growing distrust in 3rd party, client-server architectures. Urbit has a real opportunity to provide the home of the future with a platform for computing that let’s people be themselves and feel their home’s data, like their home, is really theirs.
57−
58−–
59−
60−*[~pilwyc-fastec](https://urbit.org/ids/~pilwyc-fastec) is a smart home pragmatist and Urbit enthusiast. While he enjoys the chaos of children using smart home devices he wishes it didn’t wreck his music recommendations so much. He can be found in the [Communal Computing for Urbit community](https://pilwyc-fastec.tlon.network/apps/landscape/~landscape/ship/~pilwyc-fastec/communal-computing-for-urbit/resource/chat/ship/~pilwyc-fastec/discussion-7484) if you want to get in touch.*
content/blog/stable-arvo.mddeleted−93
@@ -1,93 +0,0 @@
1−+++
2−title = "Stable Arvo"
3−date = "2019-11-19"
4−description = "This year we set out to get Arvo to a point that we can credibly call ‘stable.' "
5−
6−[extra]
7−author = "Anthony Arroyo"
8−ship = "~poldec-tonteg"
9−image = "https://media.urbit.org/site/posts/essays/stable-arvo.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/stable-arvo.png)
13−
14−### A contract by which Arvo evolves
15−
16−We want your Urbit to last forever. We want an ordinary Urbit user to never worry about their Urbit breaking, going away or failing unexpectedly. We don’t just want this — we think this is one of the most incredible things Urbit can actually deliver.
17−
18−In order to get closer to an Urbit that can last forever, we set for ourselves the goal of getting Arvo (the kernel of what we’ve been calling ‘Urbit OS’) to a point that we can credibly call ‘stable’ by the end of 2019.
19−
20−But what do we mean exactly by ‘stable’? For something meant to last far into the future, stability really means _resilience_. Arvo has to both run and upgrade itself without ever breaking or falling into an unrecoverable state.
21−
22−Getting Arvo to this point doesn’t quite achieve the user-level goal we’re hoping to achieve. But if you’re comfortable doing a bit of system administration, Arvo itself should need almost no maintenance.
23−
24−To achieve stability in practice Arvo needs three things:
25−
26−- The Arvo network (Ames) has to be stable
27−- Arvo can’t easily fall into an unrecoverable state
28−- Arvo has to have a clear and formalized upgrade mechanic
29−
30−All of these are actively being worked on, and are mostly near completion. Let’s walk through them one by one.
31−
32−### A new Ames
33−
34−To ensure that Arvo can upgrade itself forever, it needs a network to deliver the updates. Toward this end we’ve put a lot of work into making Ames, the Urbit networking protocol, as reliable as possible.
35−
36−Ames is a big part of what makes Urbit Urbit. It guarantees exactly once message delivery, it’s encrypted and authenticated. The original Ames design is pretty good. But it’s also incredibly difficult to maintain and had a few really painful edge case bugs. When the network has fallen over in the past, it has been far too hard to debug the original Ames code.
37−
38−We managed to update this original Ames code to use Ethereum as the source of truth for keys and key updates. We also made significant changes by introducing a new version of Jael, our kernel module for managing keys and signing inside of Urbit. While this change was significant, Ames still had some pretty nasty occasional bugs related to subscriptions and subscription updates. In order to get Ames to be truly reliable, it needed a rewrite.
39−
40−We’ve been working on that rewrite, codenamed Alef, for a few months now. Alef doesn’t aim to add any new functionality — it’s simply a drop-in replacement that’s cleaner and more reliable. We currently have Alef running on a testnet and sending packets with an industry-standard congestion control algorithm. There’s still some work to do, but it’s coming along nicely. Some early tests even show it to be faster, which is great.
41−
42−We expect to switch to Alef in a continuity breach (network reset) during this quarter. This will be a huge step toward resilience. A networking protocol we can trust to deliver updates is essential for a computer that will last a long time.
43−
44−### Recoverability
45−
46−Another barrier to stability with existing Urbit is that a ship can, under specific conditions, fall into a terminal state. If part of your ship’s state relies on event in the future and this event crashes, then that part of the state can become unrecoverable. Consider, for example, an event that is set to be triggered by a timer. If this timer crashes, that event will never happen. This is a huge problem.
47−
48−In order to understand the difficulties with error handling and how we’re dealing with it, we have to understand the Arvo operating system. Arvo is responsible for coordinating messages being sent from the outside world (Unix in our case) and messages sent from one vane, or kernel module, to another. Both Arvo and the vanes are explicit state machines, meaning that they must specify every possible state and the transitions between them. These properties make it possible for the system to be fully updated (we’ll discuss such upgrades below).
49−
50−This architecture means that errors have to be considered not simply as an exception, but as a possible state in the explicit state machine. In practice, we have to account for both deterministic errors like semantically invalid formulas and non-deterministic errors like running out of memory or a plug getting pulled.
51−
52−Deterministic errors are currently handled within the virtual interpreter, Mock, and result in a “bail: exit.” They can be handled “within” Arvo and are never written to the event log. The real difficulty lies with non-deterministic errors, specifically ones can potentially cause other events.
53−
54−An obvious case of causally-connected events is a timer; any code that sets a timer eventually suspends itself, waiting to be awoken. And yet, if the subsequent timer event were to crash, the state machine awaiting it would remain suspended, expecting a transition that can and will not
55−occur.
56−
57−We believe that we have a general scheme that accounts for both classes of error. We’ve formalized this and will use it going forward to avoid falling into inconsistent states.
58−
59−Our solution to this problem is simple: if Arvo or one of its vanes crashes while processing an event, the fact of the failed event itself becomes a new event. The runtime injects an error notification in the event log, named, as is befitting of a failed event: %crud.
60−
61−In the case of a failed timer event, the error notification is routed back to the code that set the timer and communicates the following: you were expecting to be woken up, but, when you were, you crashed. The code in question could then consider the logical operation of which the timer was a part to have failed, or perhaps it could try again. In any case, it must not crash when handling the error notification, and it must not continue to expect to be woken up.
62−
63−This quarter, building on previous work, we’ve built on the %crud pattern and mapped the protocols between the vanes and between arvo and vere. This allows us to make sure that %cruds are all handled (so as to avoid the crash discussed above) and, in future iterations of the vanes, know what conditions need to be accommodated to avoid introducing regressions.
64−
65−By adopting this pattern and virtualizing userspace, we can make completely sure that code running in the kernel or an app can’t cause your ship to get into an inconsistent state.
66−
67−### Telescoping Kelvins
68−
69−Finally, in order for a ship to reliably receive and apply upgrades, we need to formalize and enforce a versioning scheme inside the system.
70−
71−Most software simply increases its version number on each release. Nock (our VM spec) and Hoon, on the other hand, uses kelvin versioning. Kelvin versioning doesn’t infinitely increase version numbers. Instead, we decrease the version number on each significant change in the hope that our software will eventually not need to change at all. Infrastructure, if it’s going to be truly reliable, should eventually reach absolute zero.
72−
73−Nock is already nearly frozen at 4K. A change to Nock is a major event.
74−
75−At the level of the kernel (including Arvo proper, Zuse, and the Vanes), we’ve never fully followed a kelvin versioning scheme. The bottom of the stack always had to freeze first. But now the system is starting to stabilize such that we need a path toward a ‘cool’ system all the way up in the vanes. Versioning the kernel is a different challenge than the VM or language since the vanes interoperate with one another.
76−
77−We have a formalized scheme for how we think kelvin versioning should work at the Arvo level in process now. This year we’ll start tagging each version of the kernel with an appropriate kelvin. This scheme means not only applying a version tag to each kernel, but also making sure there are transition functions written between versions. Additionally, it will include a versioning mechanism for the interface between the kernel and the runtime.
78−
79−Let’s dive into the details, but just a bit:
80−
81−The mechanism for the kernel is pretty simple. In short, we’ll enforce that everything above a particular layer must ‘cool’ (or upgrade, by shedding a version number) when something underneath drops a version number. This ensures that the system can’t fall into an incorrect state due to simple incompatibility. For example, if Hoon changes, all of the Arvo kernel must similarly drop a kelvin to ensure compatibility.
82−
83−The versioning scheme between the runtime and Arvo is similarly straightforward. We’ll build in an affordance for notifying the user if we need them to manually upgrade the interpreter. This ensures that API changes between interpreter and kernel can always be non-breaking. Someday interpreter changes can be done over the air (like your browser downloading its own upgrades), but we’re not there yet.
84−
85−What’s important about these two things is that they let us take continuity seriously. "Continuity" or "permanence" is arguably Urbit's killer feature: you start your ship, it just works, forever. Back it up on a USB drive, throw it in a drawer for forty years, and upon reconnecting to the network in 2059 (and pulling down all the updates you've missed) you're back in the game.
86−
87−With the recent 0.9.0 release we’ve gotten to the point where we can make almost all our upgrades over the air. Even the language is now upgradeable over the wire.
88−
89−But — in order for that scene in 2059 to actually work, these upgrade mechanisms have to be in place. As your ship upgrades itself, the system needs a way to ensure that each upgrade gets applied in a compatible way. Right now we’re careful about deploying over the air updates such that they don’t break, but that’s obviously not sustainable.
90−
91−Once this versioning scheme gets released later this year, there’s nothing technically preventing you from starting a late-2019 Urbit in 2039. We hope you’ll use it a lot in the interim — but this is an essential feature for a decentralized system that claims to upgrade itself. We’re really excited to get it implemented.
92−
93−These three areas of work are all due to complete later this quarter. This gets us something that’s much more resilient than what we’ve ever had before. Given a stable system, we can actually start to put some serious weight on it.
content/blog/state-of-urbit.mddeleted−95
@@ -1,95 +0,0 @@
1−+++
2−title = "State of Urbit"
3−date = "2021-08-24"
4−description = "A year in review"
5−[extra]
6−author = "Galen Wolfe-Pauly"
7−ship = "~ravmel-ropdyl"
8−image = "https://media.urbit.org/site/posts/essays/cities-6.jpg"
9−+++
10−
11−![](https://media.urbit.org/site/posts/essays/cities-6.jpg)
12−
13−In the past year, as Urbit has become more reliable and easier to use, we find that we&#39;re spending almost all of our time on the network. We&#39;ve disappeared into the system we&#39;ve been building, and it&#39;s a pleasure to be on Urbit. There&#39;s nowhere else we&#39;d rather be.
14−
15−If you&#39;re on the network with us you can see the system being built and getting better in real time. Bug fixes and new features appear on your ship constantly. The community is actively planning the future of the system _using the system itself_. At Tlon, we have the unparalleled pleasure of working on the system, _on the system_. This feels great, but for those of you who aren&#39;t on the network, it can look as if we&#39;ve disappeared.
16−
17−Right now, Urbit is not for my non-technical friends. But everyone can tell that mainstream apps are getting worse and most feel a desire for change. We want Urbit to be as easy to use as a conventional service. Or, at least as easy to use as Signal. And we&#39;re getting pretty close to that.
18−
19−In this post I&#39;ll cover the progress we&#39;ve made since releasing OS 1 so those who aren&#39;t on the network can get a sense of what we&#39;ve been up to and where we&#39;re going. We&#39;ve built a great communication tool called Landscape, we are improving Urbit&#39;s ease of onboarding, and we&#39;re launching an entire software distribution system. We have a lot of work on our plate.
20−
21−Okay, let&#39;s talk about where we currently stand and where we&#39;re heading.
22−
23−**Arc**
24−
25−Let&#39;s start at the top: we&#39;re working to build a new network and operating system for everyday cloud computing. We think everyone deserves to control and shape the tools they use to communicate and collaborate.
26−
27−Or, to put it another way: the apps and services we have today are confusing, annoying, and overly complicated. The only way out is to start at the foundation by building a new software stack. Once we have a cloud computing stack that an individual can own and completely control, the old hope that computers can be tools of freedom will return. We haven&#39;t forgotten the original vision of software as a fun, free, flexible everyday tool.
28−
29−This is a hilariously ambitious thing to try to do, we know. This is what makes it fun. So far, we just try to move step-by-step without overhyping what we&#39;re doing. Building a new platform for networked computing is both a technical and social problem. The technology has to work exceptionally well and the community has to care for it and move it forward.
30−
31−Our first step was simply to build a prototype, then to refine it into something that could plausibly work. Then, most recently, take that plausible prototype and build a user experience we liked enough to depend on it from day-to-day.
32−
33−In the last eighteen months we&#39;ve done exactly that. We depend on Urbit day-to-day and have shipped a tool that has become a home for numerous cultures and communities who are invested in moving the system forward. We first called that tool OS 1 but now it&#39;s known as Landscape.
34−
35−First, let&#39;s talk about the general arc of OS 1 → Landscape, both the successes and challenges. Then we&#39;ll talk about our next step, which is to create an independent and community supported software ecosystem.
36−
37−**OS 1 → Landscape**
38−
39−The tools we use shape the way we think. So how could we build better tools with old broken ones? We needed to cut our reliance on old tools that couldn&#39;t care less about how people actually work and live. The only thing they maximized was distraction and dependence. We needed something that was fundamentally private, durable, and flexible. Above all, we needed something that actually belonged to us.
40−
41−Building Urbit involves a lot of communication and collaboration. In order to move Urbit forward we knew that we needed a place to converse and connect, and we knew that place had to be on Urbit itself. We didn&#39;t need a Slack or a Discord or a Google Drive or a Reddit. We needed all of those things, in one place, that actually belonged to us.
42−
43−We experimented, built things, threw them away, and then eventually built and [launched OS 1](https://www.youtube.com/watch?v=71ViyftPkGk).
44−
45−OS 1, now Landscape, is a simple tool for bringing groups together to communicate and stay connected. When a real physical community goes online they immediately become fragmented between various apps. Perhaps a Slack channel coupled with some Notion notebooks and a Telegram channel works for some people. It&#39;s easy to imagine other permutations, and you probably are already in at least two or three. These duct-taped stacks are not only ugly and confusing, but your day to day computing is spread thin and remains in the control of companies—not you.
46−
47−Urbit is a decentralized network but Landscape is for re-centralizing your communication. Users can form groups which share a set of channels; each channel can be either a chat, a notebook or a collection of links. This means groups can communicate flexibly, exactly how they want. And since Landscape is built on Urbit, each group is private and peer to peer; data is only shared between people in the group; each community on Landscape is completely independent. Communities own their data and last as long as they need to.
48−
49−This combination of a flexible unified interface on a decentralized platform you can trust feels really good.
50−
51−When OS 1 was first released, it was slow, buggy, and frustrating—but we loved it and wanted it to be better. We spent the next nine months making sweeping changes to take it from releasable prototype to pretty-nice first version. We rewrote the frontend completely, massively improved the performance of Urbit OS itself, and overhauled the interface. It was an enormous collective effort.
52−
53−By the end of 2020 we had renamed OS 1 to Landscape and the user experience was far better. We [announced our hosting service](https://www.youtube.com/watch?v=w3qKe_WZr50) and onboarded close friends to help us test the system. I [wrote a little](<[https://tlon.io/news/landscape-now/](https://tlon.io/news/landscape-now/)>) about using Landscape from day-to-day around that time.
54−
55−Landscape wasn&#39;t just a useful tool for us, but it was something that other communities were starting to use in earnest. It seemed like Landscape could be a great place for people to grow new private communities, so long as we could onboard new users effectively. Hosting is a huge piece of the puzzle, since we need non-technical people to be able to use this wonderful platform as easily as its mainstream competitors.
56−
57−At this point (early this year), we encountered some pretty serious hurdles.
58−
59−To use Urbit, you need an Urbit ID. Each one of these is an NFT (something that no one cared about when we first launched Urbit ID). The basic idea is that an ID should cost something so that they aren&#39;t used abusively. But, in late 2020 the combination of a crypto bull market and congestion on the Ethereum network caused the transaction fee for buying an Urbit ID to increase from ~$1-2 to ~$100. An Urbit ID should cost _something_, but \&gt;$100 is too much of a barrier for entry. We knew that this could happen and started researching solutions late last year, ultimately deciding to [implement a solution ourselves](https://urbit.org/blog/rollups/).
60−
61−The tough part about having an identity verified on the blockchain is that you become vulnerable to unpredictable volatility. We saw a period of painfully high prices, followed by a dip, followed by another stretch of extremely high prices. We opted to continue releasing Landscape updates and moving the system forward despite the fact that it became prohibitively expensive to onboard people. Luckily, our solution to this problem should go live this summer, and will reduce the cost of onboarding about 60x. The best part is that it is a permanent solution so we&#39;ll never have to face this problem again.
62−
63−The other challenge to scaling the onboarding process is hosting.
64−
65−We have a functional hosting structure but we want it to be fully automated and featured. We&#39;ve been able to onboard friends and enthusiasts which has taught us a lot about how the system should work. But hosting has to be easy for anyone to join and get online quickly. Without an automated invite flow and it&#39;s not ready for prime time.
66−
67−We&#39;ve made great progress on this front. We are currently testing improvements internally and aim to have a final version ready simultaneously with lower planet fees. Then, at long last, we can comfortably invite friends to get on the network without ever leaving the browser.
68−
69−It&#39;s worth mentioning that hosting is very much a Tlon Corporation project. Urbit is a platform owned, maintained, and developed by the people that use it (along with the nascent Urbit Foundation). Tlon, while also contributing to the Urbit project, ultimately wants to produce applications and services on Urbit. Hosting is one of those projects. Hosting makes Urbit easy, approachable, and usable without the compromises involved in using a conventional service. Since we&#39;ll be one of many Urbit-related providers, Tlon won&#39;t be the only host. There are already a few others (like [UrbitHost](https://urbithost.com/)) getting off the ground, which is fantastic.
70−
71−**Landscape → Grid**
72−
73−As the world has become more physically distributed we rely on our digital tools to keep our communities connected. The rise of DAOs, collectives, squads, and alternative community governance structures underscores the importance of tools like Landscape that communities can actually own and control.
74−
75−Our first goal was to find out if we could build something really good on top of Urbit. We did that. And we&#39;re continuing to lower the barrier to entry. We&#39;ve also got an Urbit &#39;messenger&#39; iOS app in the works that&#39;s really nice.
76−
77−Landscape is great, but in the long run Urbit is meant to be a platform for anyone to build on top of. Urbit is a computer, not just a single communications app like Landscape. The whole point of Urbit is to make it easy for an individual to run their own general-purpose computer in the cloud. Your Urbit isn&#39;t just meant to run Landscape it&#39;s meant to run any sort of application. And that&#39;s where we&#39;re going next.
78−
79−Grid is a holistic interface for interacting with your Urbit node. Landscape, as it&#39;s known today, will become one of many apps that can be launched. Perhaps most importantly, Grid will have peer-to-peer software distribution over the network. This means you can, as a developer, build something, let a friend sync it over the network, and never have to run a dedicated distribution server. Or, as an everyday user, you can run software on your private Urbit node without the developer ever being involved.
80−
81−Urbit isn&#39;t an OS in the traditional sense—it&#39;s an &#39;overlay&#39; OS. It has to run on top of something else. But Urbit _is_ an OS in the sense that it&#39;s general-purpose. And our goal in building interfaces for Urbit is to deliver that feeling of openness and flexibility to the user. Grid is a major step toward that goal.
82−
83−Not only should a community own their communication tools, they should be able to run and host their own cloud software. They shouldn&#39;t need to rely on providers to store their data, run the application, and determine how their digital life will function.
84−
85−Grid will surely go through the same process that Landscape did. It&#39;ll start as a working first version that will inspire us to refine and make it better. But, unlike Landscape, Grid opens up an entirely new frontier for what can be done on Urbit.
86−
87−We&#39;re putting together our first conference on Oct 15-17th to inaugurate Urbit as an integrated platform and distribution system for new applications. [Tickets for Assembly 2021 are already available](https://checkout.eventcreate.com/assembly2021/select-buy). Tlon is going to Austin!
88−
89−**Closing**
90−
91−Urbit is a deeply optimistic project. Although the digital world seems more broken than ever, we&#39;re confident that something else is possible. We have already created software that people use everyday. We want everyone to have the experience that we do, and we want that experience to continue to get better. Beautiful, reliable infrastructure that communities can build on will have a significant impact on the world. The end game of connected computers doesn&#39;t have to be dystopian.
92−
93−For those of you who aren&#39;t directly involved with the project, I hope this gives you a snapshot of where we are. If we were on an Antarctic expedition the postcard would read something like &#39;Team is well-fed, healthy and motivated. Making great progress.&#39;
94−
95−With that, I&#39;ll get back to work.
content/blog/the-missing-middle.mddeleted−50
@@ -1,50 +0,0 @@
1−+++
2−title = "The Missing Middle"
3−date = "2020-05-25"
4−description = "Urbit stars can facilitate a flexible continuum of community norms."
5−
6−[extra]
7−author = "Nicholas Simmons"
8−ship = "~simfur-ritwed"
9−image = "https://media.urbit.org/site/posts/essays/missing-middle.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/missing-middle.png)
13−
14−The 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.
15−
16−The wilder-eyed, utopian end of early computing drew greatly from this promise; such unprecedented connection could bring about world peace, intellectual serendipity, higher consciousness. We didn’t get world peace, but we did get a genuine revolution in collaborative information-sharing and rapid communication. That ability to refactor our social preferences gave birth to an uncountable universe of online communities and subcultures that would be unimaginable to anyone who didn’t see it happen.
17−
18−We didn’t get a million friends either. Dunbar’s number, which posits an upper bound of ~150 trusted relationships per person, put the lie to dreams of a ‘global community.’ Better social tools give us more choice in who to fill those slots with, but not the ability to expand the personal spheres where we actually spend most of our time and forge most of our familiarity and trust with others.
19−
20−We know this, and the social networks know it. To combat a slump in user activity, Facebook jettisoned promises of boundless discovery and started promoting Groups. The success of Discord and Slack happened precisely because they promised tools for gated communities, not open commons.
21−
22−One of those early promises came true in spades, though: while we still live in Dunbar communities, we’ve sped up the sorting process. We can find people like us at astonishing speed, and the diversity of options for what ‘people like us’ means has expanded exponentially. The ‘Big Sort’ of modern society is rapid, unprecedented, and utterly reliant on social technology. The problem is that for all of our freedom to find each other and make mutual agreements, the underlying technologies used for all of this sorting and trusting don’t actually reflect the diversity of expectations, norms, or approaches we might want to try. One major reason for this status quo is the underlying structure of the client-server Internet. Unlike in the physical world, where cities, religious groups, and professional associations both own real assets and collectively determine rules and norms, there is no median level of civic compromise on the Internet; just massive technical providers and platform companies, and dispossessed Dunbar communities and individuals unable to determine such rules and norms for themselves.
23−
24−Both internal norms (‘how do we act’) and external perceptions (‘who are we?’) get yanked around by the dictates of platform owners, routing infrastructure providers, and the societal consensus that governs both, at levels far above our Dunbar phyles. Privacy is contradicted by the need to surveil internal activity in order to target ads. The current model of social connection technology sets the bar for self-determination so high as to prevent it from adapting to external circumstances. The technical realities of the situation are due to client-server technology and its institutional history. The social aspect is a holdover from the 20th-century media paradigm of mass consensus cultures.
25−
26−The ‘long 20th century’ of mass institutions and broad consensus realities is over. Contrary to impressions, it was not the inevitable or final result of moral and civil progress. Rather, it arose from pragmatic external incentives of mass advertising and great-power ideological rivalries.
27−
28−The assumption that we must inevitably play by the same rules of discourse, given the autonomy granted by wealth, technology, and knowledge, is rapidly degrading. This status quo is a leftover from a time when mass education prepared workers for mass jobs, where mass communication hammered the same messages over the factory loudspeaker and advertised the same small number of products over the few television channels available. Yet we still assume that the shape and function of the tools and spaces for dialogue we inherited from that era are immutable and inevitable; this outdated belief cuts us off from new methods of choice and collaboration.
29−
30−Without the external political and economic pressures which created our mass culture, inclusion in or acceptance by it becomes just another sinecure for sale, the outcome of a zero-sum auction to benefit from and utilize for further gain, the power accumulated by the legacy institutions safeguarding it. The ‘objective’ model has become a straightjacket on human ingenuity and community self-determination. The fact that it is ‘supposed to exist’ means that it is the ultimate prize. Inclusion in the mainstream Discourse grants scalable exploitation of any idea and prestige to its proponents. But it is a booby prize. No serious and nuanced idea, no dedicated community can withstand its flattening effects or the ways that it commercializes and cargo-cults its subject into an artificial shape. The resulting conversations are lackluster in form as well as subject.
31−
32−The stiffer the Discourse is; the less input it deems useful, the more fragile it becomes. The inside becomes a stultifying garden party of outdated, anodyne official narratives; the outside a stew of paranoid, enraged rump factions shut out of any path to respectability or good-faith engagement with their perspective.
33−
34−The same dynamic wreaks havoc inside Dunbar groups as well; when there are fewer gradations of acceptable difference, internal schisms take on a stark tinge of zero-sum loyalty versus betrayal, rather than consensual drift. Savvy users, knowing the stakes, migrate quickly, leaving behind wastelands of the obstinate and clueless, who are in turn preyed upon by grifters and demagogues. Only when external events force a ‘tectonic shift’ in official understanding do these standards change. The problem is that the usual result of a ‘tectonic shift’ is a sudden, destructive earthquake. If networked culture is going to survive dramatic events out in the real world, we’re going to need a middle structural layer that allows norms and agreements to shift and negotiate based on observed reality and the wishes of ordinary participants.
35−
36−This omission of a ‘middle layer’ of technical governance directly informs our vision for the Urbit network. In an Urbit-based world, we envision stars will be consensus hubs. There are 256 Urbit galaxies, each able to spawn 255 stars for a total of 65,280 potential stars. Each star, in turn, can spawn 65,535 planets—far above the Dunbar number of an intimate community, but also far below the ratios of authoritarian control under which current platform regimes operate. Stars and galaxies perform the essential routing and peer discovery functions of the Urbit network; planets represent distinct individual identities.
37−
38−Although every star is spawned by a particular galaxy, it can move to any other galaxy which agrees to host it. Similarly, planets may migrate between stars. Many imagine the extreme ramifications of such a system, projecting a Darwinian competition of starkly diverse political models encoded in governance. When we think about the future of Urbit, though, we don’t see a chaotic universe of iconoclastic outposts. We don’t doubt there will be diversity among stars (driven by the wishes of their owners and resident planet users/customers), but the real value is in the antifragility allowed by far more subtle gradations of difference in rules and structures decided upon by stars. Each star will have much, but not all, in common with its immediate neighbors, across a constellation which contains a great overall diversity of norms. Changes in policy or alignment will resemble ripples across a pond more than a buildup of tectonic force against a brittle fault.
39−
40−Stars are Schelling points for such gradations precisely because they are discrete cogs in the overall technical infrastructure of Urbit. Technical responsibility and any bounds of ownership will always mark such points. Their designation in the case of Urbit or any other system is necessarily somewhat arbitrary. Our vision is orders of magnitude less centralized than the status quo, but not devolved so far towards the individual that community formation demands massive amounts of _individual_ technical knowledge and maintenance tasks. There will always be a need for routing infrastructure, ergo power (the power to set community norms and external relations) will always accrue to the points of control over that infrastructure.
41−
42−Urbit simplifies much of this infrastructure but, just as importantly, it makes those technical locations, and the conditions of ownership and control, explicit. It allows for them to be owned and controlled by anyone who purchases them, rather than controlled by network-level overlords and unelected government regulators. Stars are somewhere between ISPs and consumer hosting platforms (like Geocities an eon ago, or Wordpress today); independent enough to set their own policies, but generally subject to the realities of running a profitable business. The decisions made by service providers inevitably have a great influence on the norms of any network, and Urbit is no different. The advantage of the Urbit model is that there are far more stars than ISPs, they are easier to run, they are fungible properties with clear ownership, and they are not burdened with technical and regulatory debt which ties them to the status quo. These qualities allow them to be purchased and maintained by a far wider range of people than might be able to control an ISP today; the massive decentralization of routing infrastructure also seems a likely antidote to the current state of regulatory overreach and centralized snooping which ISPs are subject to.
43−
44−The Internet gave us an unprecedented flowering of diverse cultures; it gave communities the option to pursue a vast number of paths and goals. And we _should_ have the ability, granted by wealth, free time, and communications technology, to arrange the rules of our collaboration as we wish. The structural design of the Urbit network is an effort to provide that power, encoded in a digital asset with private keys that can be held both by individuals and (via multisig arrangements) by groups. The lower price and complexity of stars compared to current ISPs also makes a lot more room for innovation in business models; star owners can make their own judgments about how to prioritize commercial revenue versus cooperative ownership, anonymity versus identity, short-term versus long-term contracts.
45−
46−We see stars as an opportunity to incubate community hubs, to plant a flag in the wilderness, declare values and alignments, and see who shows up. This process can be varied; some stars might advertise widely, others might quietly and slowly invite other communities on board. That’s the point. There’s a nice juxtaposition between first mover-effect and overall availability here; early adopters will have an opportunity to shape discourse, but the supply is not so constrained that they’ll capture all of it. Early adopters will likely have an immense and permanent value of voice, infrastructural ownership, and ongoing revenue over their shorter-term speculative one.
47−
48−The diversity and non-discoverability of Urbit are already showing themselves: we hear whisperings of insular communities that we not only _don’t_ know about but by our express intentions _can’t_ know about unless they make themselves known.
49−
50−Regardless of whether we or anyone else know about them, star owners already possess legible chunks of the ‘missing middle’’—large enough to affect the map of the Urbit universe, small enough to allow a wide array of voices—in a way that the ownership models of the current Internet can’t come anywhere close to providing. Not every neighborhood poker club needs an Urbit star. But the institution-founders, tastemakers, and social connectors of today and tomorrow, those who want to build opera houses on the digital prairie, should consider the advantages of building on a star.
content/blog/the-shape-of-dao-governance-to-come.mddeleted−103
@@ -1,103 +0,0 @@
1−+++
2−title = "The Shape of DAO Governance to Come"
3−date = "2022-08-17"
4−description = "When building the Combine DAO, we conducted a survey of DAO governance and tooling and came to the conclusion that the many theoretical approaches to the problem of governance were tied to the implementation details of the DAO stack. Since we were building everything on Urbit—as opposed to through the typical combination of Solidity contracts, Web2 tools and Snapshot—we realized that we’d have to do some rethinking. A new approach for a new stack."
5−
6−[extra]
7−author = "Anthony Arroyo"
8−ship = "~poldec-tonteg"
9−image = "https://storage.googleapis.com/media.urbit.org/blog/2022.7.29..17.14.22-image.jpg"
10−+++
11−
12−![Image](https://storage.googleapis.com/media.urbit.org/blog/2022.7.29..17.14.22-image.jpg)
13−
14−On Urbit, the risk of a governance attack is reduced because the Combine DAO’s founding team was selected based on their on-Urbit track records. All participants had skin in the game. This allowed us to focus on workaday consensus building, which forms the bulk of any organization’s activities. We use Holium’s Ballot app, which integrates with all aspects of Urbit OS and gives complete flexibility for automating the execution of a winning proposal via [Custom Actions](https://docs.holium.com/ballot/custom-actions/intro).
15−
16−Let’s walk through the thought process that led us to adopt an Urbit-centric approach to DAO governance.
17−
18−## Reputation’s Effect on DAO Governance
19−
20−In our last blog, we discussed how Urbit’s pseudonymous reputation model frees DAOs from the constraints of “trustless” systems. Urbit IDs also mitigate the inflexibility that plagues DAO governance. Here’s what we mean.
21−
22−One of the primary objectives of DAO governance systems is to prevent governance attacks. A governance attack occurs when one or more actors changes the internal processes to benefit themselves, for example transfering the entire treasury to himself.
23−
24−The risk of governance attacks means DAO governance is either 1) very rigid or 2) vulnerable. The vast majority of DAOs, Moloch for example, opt for the former. Thus the rules around upgrading smart contracts are constrained. Once systems are in place, they can’t be changed. On-chain activity is limited. Voting procedures are either distilled or taken off-chain (and usually onto Web2.) This leaves DAOs inflexible.
25−
26−Here’s an example of said inflexibility gone wrong. In March of this year, the DAO that runs the Ethereum Name Service [held a vote](https://www.coindesk.com/layer2/2022/03/07/ens-and-the-limitations-of-dao-governance/) to oust its director Brantly Millegan. Brantly had recently been canceled for 2016 tweets dug up by an anonymous DAO member, fired from his role as director of operations at ENS’ non-DAO corporate parent True Names Limited. ENS iself, however, was governed by a typical 1 share: 1 vote system (plus delegates). Unsurprisingly, Millegan owned or controlled a large block of votes, and was able to overcome the ouster vote 1.6 million tokens to 1.4 million, with holders of roughly one third of the tokens abstaining or not participating.
27−
28−Now, this is indeed a DAO working as it should, a democratic decision unswayed by the influence of insiders or elites. At the same time, the natural functioning of the DAO was derailed by mass distraction. Instead of focusing on ENS, for nearly a year the DAO’s function was to address a controversy raised by an anonymous member who, if we’re being honest, most likely intended to disrupt its active functioning from the start.
29−
30−We arrive back again at the inflexibility inherent to anonymity—if just anyone can buy a token, bad actors will buy them. Yet currently most DAOs intentionally eschew reputation. The incentives for good behaviors are thus only economic.
31−
32−[Pseudonymous reputation](https://urbit.org/blog/pseudonymous-reputation) changes this calculus, adding incentives beyond money for both security and participation. This means when built on Urbit, DAOs are less susceptible to governance attacks, and more flexible. Having a baseline of trust allows DAOs to experiment with different governance tools and structures.
33−
34−In order to understand how DAOs are more free to experiment on Urbit and what they can experiment with, it’s first important to understand the history of DAO governance, why it developed the way they did, and where it’s at currently.
35−
36−
37−## A Little DAO Governance History Lesson
38−
39−The first DAO, The DAO, was also the most disastrous. A recursive calls flaw in the governance code led to the only hack-related hard fork in Ethereum History.
40−
41−Recursive call weaknesses in DAO code are somewhat like endlessly automated micro-pyramid schemes. An attacker can call a transaction, mark its benefit, then initiate another transaction before the original transaction is completed, over and over until the block limit is reached. Bernie Madoff paid off old investments with new investments while marking fake gains, took out fees, then reinvested before the prior investments could be properly marked. Both schemes work when automated governance fails.
42−
43−While The DAO’s shoddy governance was its downfall, it was Ethereum’s good governance that saved ETH. Ethereum leadership proposed a hard fork and 97% of holders voted in favor. The transaction was undone. Money returned. Ethereum Classic was born.
44−
45−While The DAO failed, its happy ending paved the way for the DAO boom of today. DAO creators learned the security lesson: there hasn’t been a major DAO hack since 2016. They built better governance—a combination of visionary leadership, trustless voting, and vigorous participation—that steered the ETH ship to calmer waters.
46−
47−
48−## Birth of the Ragequit
49−
50−Moloch DAO was born in the shadow of The DAO fiasco; its governance was expressly designed in response to it. Unlike The DAO, Moloch is a charity; it exists only to give money away to Ethereum infrastructure projects. Its on-chain governance is extremely_ _simple. Members can do only one of two things.
51−
52−The first thing is submitting and voting on proposals for new members. Votes are majority rule with one vote per Moloch share. Only an existing member can propose a new member, so prospective members must convince an existing one to nominate them.
53−
54−New member proposals double as funding proposals, a clever wrinkle which demonstrates just how much can be done on-chain with a single function. Every proposal must include a fundable ETH infrastructure project and a fundee to execute it. If approved, Moloch accepts the fundee as a new member and grants them a number of Moloch shares exchangeable 1:1 for ETH.
55−
56−![Moloch DAO](https://storage.googleapis.com/media.urbit.org/blog/moloch-dao.png)
57−
58−How the fundee exchanges the shares for ETH brings us to the second thing Moloch members can do: ragequitting.
59−
60−Ragequitting is a smart contract function that allows members to rescind their shares—and thus their membership—during a seven day waiting period between approval of new members and disbursement of their funds. Its primary purpose is to allow members to opt out of the DAO if they don’t like a new member or proposal. If they ragequit, they automatically receive ETH equal to their shares.
61−
62−Ragequitting thus provides a major safeguard against the kinds of attack that took down The DAO. Members can simply ragequit en masse to invalidate any harmful action, thereby looting their own DAO and stopping bad actors in their tracks. Ragequitting is Moloch’s “ultimate safety net for malicious attacks.”
63−
64−Like member voting, ragequitting also has a dual purpose. In order to receive their funding, new fundees must ragequit, discharging their shares, receiving ETH, and thereby immediately becoming non-members. Thus, the only time someone becomes a permanent member is if they are granted more shares than they ragequit, which usually happens for non-fundee members, i.e. philanthropic members, not fundees.
65−
66−This is all to say that Moloch, a very successful DAO, has reduced its governance to the simplest imaginable framework. Members can take one of two actions—that’s it. While it makes for a functional secure on-chain charity, the ragequit process isn’t exactly dynamic governance. It’s too low-res for the vast majority of organizations.
67−
68−## Ouroboros
69−
70−In a way, ragequitting uses pyramid scheme logic to its advantage. The only thing members can do is add other members or quit; and it’s through these cyclical actions that the DAO gains members, disburses funds, and maintains security. But it also opens up new problems. For example, what happens if a disgruntled member intentionally votes yes on a harmful proposal, only to ragequit their shares just after the proposal passes? You might call it a murder suicide problem.
71−
72−DAOs supposedly solve the Principal Agent Dilemma; an ancient problem faced by all resource-distributing organizations where an agent’s self-interest inevitably runs counter to principles’ assets. The most common example is a non-shareholding manager of a company (agent) versus its shareholders (principal). The manager is in charge of spending shareholders’ money, but doesn’t suffer the financial consequences from her decisions. Theoretically, DAO principles and DAO agents are indistinguishable—everyone is both investor and employee—which solves the dilemma.
73−
74−But anonymous shareholders often act badly, or they don’t act at all. Even the [DAOs with the highest participation](https://www.businessofbusiness.com/articles/ranking-daos-we-computed-their-net-community-score-to-see-how-they-stack-up/) top out around 75%, and that’s rare. A DAO with low voter participation can become either paralyzed, if a quorum is required, or oligarchical if one isn’t. On-chain voting requires high gas fees and time spend, prohibitively high when it comes to the many technical decisions that need to be made. This is why every successful DAO has naturally developed sets of working groups who make decisions off-chain with the blessing of the body politic. The vast majority of these “governance forums” use a patchwork of Web2 apps.
75−
76−For the bigger decisions, avoiding high gas fees and low participation can mean voting with literal Discord emojis, then having small groups of trusted “delegates” enter on-chain decisions via multi-sigs. This is both sloppy and defeats the purpose of the DAO.
77−
78−More serious solutions make up the primary class L2 products. “Dynamic governance” adds granularity to voting systems, allowing for more complex on-chain voting with different rights for different member classes. “Holographic consensus” gamifies participation by appending a prediction market to every vote. Some are even trying “[Meta Governance](https://indexcoop.com/blog/early-2022-survey-of-metagovernance)”—DAOs governing DAOs. L2 decisions are even further analyzed by deep risk analyzers like Gauntlet that stress test decisions via simulated protocols before they’re executed on-chain.
79−
80−The simple solution is conducting votes using decentralized apps that verify shareholder status. Snapshot is an IPFS voting app that holds votes off-chain, weighing and verifying member votes by reading members’ wallets. It’s a quick and secure way to stage off-chain votes, but it’s still pretty limited. Snapshot is called that because all it really does is take a picture of the result of a vote. All the activity resulting from said vote must still be manually undertaken by DAO operators.
81−
82−Traditional DAOs suffer from what we like to call the Self-Enforcement Problem. Smart contracts enforce themselves, a stark difference from traditional corporations where bylaws and operating rules are met by employees using the best tools for the job. With DAOs, the bylaws and the tools that enforce them are one and the same. This adds up to yet another layer on inflexibility: traditional orgs can adopt new tools for old problems, DAOs cannot.
83−
84−
85−## The Right Tool for the Job
86−
87−This all brings us finally back to Urbit. In the Urbit OS using Urbit IDs, DAOs can integrate every governance solution discussed above without touching Web2. Tailor DAO governance to your own precise needs. Download someone else’s voting app, or spin up your own. Using Urbit blurs the boundaries between on-chain and off-chain actions, eliminating the need for ad hoc fixes then fixes to fix those fixes. It all occurs in one landscape, and can pivot with new information
88−
89−One Urbit app is called Ballot. Ballot most closely resembles Snapshot. It’s like a decentralized version of Snapshot that works without the need for Discord—everything is on the Urbit OS—that can also be modified to execute custom off-chain actions after a vote is held.
90−
91−![Ballot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/ballot.png)
92−
93−Ballot allows for this sort of dynamic governance enhancement, or what we call Custom Actions. In a way, Custom Actions make the dream of smart contracts a reality: instead of being constrained to ragequitting or not ragequitting, you can create automated granular responses to Ballot votes. In other words, smart contracts that are actually smart. One action could be “tweet something” or “ping someone” once a vote is recorded in Ballot. You can write any if-then you want on the outcomes of a vote. For example, instead of relegating membership to simplistic on-chain democracy, a la ragequitting, Ballot has a function for inviting or kicking members via Urbit native logic. Imagine if Snapshot could both conduct a Moloch-style membership vote, and then automatically add or kick the member depending on the result. That’s Ballot.
94−
95−What about the small technical decisions, like the ones that took down The DAO, like booting someone from a chat or paying a contractor through treasury? All of those actions are programmatic, irreversible, and immutable on Urbit, eliminating concerns about gas fees and participation.
96−
97−If Ballot doesn’t suit your DAO’s needs, it’s easy to use Urbit’s primitives to write a custom voting application. Since Urbit has ring signature support built in, you can build a simple, anonymous voting app in just 15 minutes, following [this tutorial](https://developers.urbit.org/guides/quickstart/voting-guide). The combination of cryptographic identity and an append-only event log means that you are free to experiment with different tools to support whatever governance process your DAO adheres to.
98−
99−The Combine DAO uses Ballot for voting on proposals as it integrates cleanly with Urbit ID and provides flexibility for setting different quora for votes and Custom Actions to automate outcomes. There is thus no need to distinguish between the tool used for a “real vote” such as deploying Stars in exchange for tokens and the tool used for a “fun vote” like choosing a date for a meetup.This flexibility and interoperability is a hallmark to the burgeoning supply of [applications](https://urbit.org/ecosystem?type=applications) being built for Urbit.
100−
101−—
102−
103−*Anthony Arroyo is the Director of [The Combine DAO](https://blog.the-combine.org/introduction-to-the-combine-dao)*
content/blog/the-understanding-urbit-podcast.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "The Understanding Urbit Podcast"
3−date = "2020-04-02"
4−description = "An interview-based podcast series about the Urbit project, as told by those working on it."
5−
6−[extra]
7−author = "Arthur Falls"
8−ship = "~satsyt-sogleb"
9−image = "https://media.urbit.org/site/posts/essays/uu-podcast.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/uu-podcast.png)
13−
14−At 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.
15−
16−Over the course of seven episodes, the interviews explore subjects ranging from the philosophy of technology to the performance optimization of Nock execution. Most are non-technical, but even the technical ones will be understandable and entertaining to a non-technical audience. That latter fact is the result of just how much fun the Tlon team is to be around.
17−
18−The series can be found on iTunes, Spotify, and most other streaming platforms.
19−
20−<iframe style="border: none" src="//html5-player.libsyn.com/embed/episode/id/13669184/height/90/theme/custom/thumbnail/yes/direction/backward/render-playlist/no/custom-color/000000/" height="90" width="100%" scrolling="no" allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen></iframe>
21−
22−We begin our journey with Urbit veteran Galen Wolfe-Pauly, who introduces the project and its design principles while reflecting on the collective Stockholm syndrome we suffer in the grasp of existing computing models. We learn a bit about Galen’s background in architecture, and the importance of invisible technology.
content/blog/tools-of-our-own.mddeleted−66
@@ -1,66 +0,0 @@
1−+++
2−title = "Tools of Our Own"
3−date = "2020-05-12"
4−description = "What is a digital environment? What does it mean to shape your own digital environment?"
5−
6−[extra]
7−author = "Matilde Park"
8−ship = "~haddef-sigwen"
9−image = "https://media.urbit.org/site/posts/essays/tools-of-our-own-1.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/tools-of-our-own-1.png)
13−
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.
15−>
16−> **Ivan Illich, *Tools for Conviviality***
17−
18−One 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?"
19−
20−After all, we think of our slate of tools as our entire toolbox. This makes sense for physical tools. And for a lot of people in the real world (at least, I think), their tools remain physical notebooks and paper. I, however, left those tools behind ages ago, and found myself in a world that used my habits, my memory, to loosely organize a wide array of online tools, that were themselves shaped according to the values of their creators.
21−
22−The [Rube Goldberg machine](https://en.wikipedia.org/wiki/Rube_Goldberg_machine) made out of aligning these tools in increasingly virtuosic, but also increasingly restrained and mechanical ways, felt like constructing an exoskeleton out of prefab parts. The person in my social group closest to constructing the full range of human movement became a legend. But let's be honest: none of us came even close.
23−
24−And 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.
25−
26−![](https://media.urbit.org/site/posts/essays/tools-of-our-own-2.png)
27−
28−### Systems as masters
29−
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.
31−>
32−> **Philip Monk, [Precepts](https://urbit.org/blog/precepts/)**
33−
34−If 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.
35−
36−We just want to be where our friends are, to see who knows whom, to see a new friend vouched for by our common connections.
37−
38−Why is the social graph even a consideration when choosing a tool? Why do I have to know who has accounts where, how they choose to assemble their digital body, so that I can see that it exists?
39−
40−For a tool like a microblog—a bunch of entries in a database with metadata, usually threaded—the attachment of the social graph capture becomes not only an underlying appeal to us when choosing to use it, but also to the tool’s creators when trying to justify its existence.
41−
42−In this example, you could say that every social Internet product is trying to make up for its missing ability to connect coherent identities underneath. The battle becomes a matter between the stagnant empire of who owns the graph versus the various attempts to create a secure identity primitive as a layer of the Internet.
43−
44−But this is crazy: for decades, an aspect of the Internet stack that necessitated the creation of platforms—the ability to talk to other computers directly and to, privately, opt in, organize an array of devices as belonging to an identity—has driven not only the financial incentives of every product, but the use case for every person in the equation. A practically unrelated problem emerged that was too hard to wrangle and solve, and so it became the master.
45−
46−And for productivity tools—for the personal activities we do every day—the same problem ultimately applies. Either you wrangle more and more single-use "products" into a framework, wrangling combinatorial explosion, or you punt the problem to the user's brain, remembering the relation between tools.
47−
48−This 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.
49−
50−![](https://media.urbit.org/site/posts/essays/tools-of-our-own-3.png)
51−
52−### The collective body
53−
54−> “Autonomy” means that we make the **worlds that we are** grow.
55−>
56−> **Tiqqun, *The Cybernetic Hypothesis*
57−
58−So 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.
59−
60−You have to ask yourself, "Why are we doing this again?"
61−
62−These days I find myself away from broadcast tools and more in the insular channels of my friend groups. What I want from technology is to share life with my friends; to be given the opportunity, and the power, to share that life, and all it includes… showing them care, or sharing the bits of knowledge that seem important to us as a group.
63−
64−To reinforce the fulfilment of collective potential in whatever direction our groups take off in. Some of my friends watch stuff together; some of my friends remark on goings-on; some of my friends research together; all communicate entirely differently. Not all of them belong on "IRC, but for gamers," or "IRC, but for highly productive and extremely important teams." And yet, that's where we are.
65−
66−Forget the prefab parts: a proper exoskeleton for our collective body evaporates; and we face the sunlight in whatever direction we choose. The ability to extend our shared spaces collectively, with each of our groups of friends and collaborators, using our own computers: that's Urbit.
content/blog/urbit-and-bitcoin.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "Urbit and Bitcoin"
3−description = "A sound money deserves a sound computer."
4−date = "2019-10-16"
5−tags = ["bitcoin"]
6−[extra]
7−author = "Christian Langalis"
8−ship = "~pindet-timmut"
9−+++
10−
11−Sound money deserves a sound computer.
12−
13−Urbit imagines a new model for an OS that – among other changes – includes money as a native service. Developers within the Urbit ecosystem will be able to securely use money in their applications as easily as they might use file systems or networking protocols. Creating a new sound currency, however is not our goal; Bitcoin has already done that.
14−
15−Running a Bitcoin node is very much like running a single purpose personal server (one that hosts the Bitcoin blockchain and verifies transactions). Urbit is designed to be the _final_ personal server, so this week we launched several grants to incorporate Bitcoin into our development cycle. The first of these are directed towards interacting with Bitcoin nodes directly from Urbit.
16−
17−Bitcoin and Urbit are complementary systems. Sound digital money requires sound computing to be used safely and effectively. Urbit’s OS is strictly-typed and entirely functional, and as a result, it’s orders of magnitude more secure than the Unix ecosystem when fully implemented.
18−
19−Urbit and Bitcoin converge along the realization that the Virtual is subsuming the Real. In other words, the locus of control over your life is no longer embodied in the physical, but the digital. For example, what worries you more: a pickpocket or a sim-swapper? The bogeymen of today don’t target our physical selves; they target our private keys, our searches, and our data. The client-server computing paradigm is falling in upon itself, and cannot protect us in this new reality. Without peer-to-peer tools like Urbit and Bitcoin, our property and lives lie vulnerable to control by platforms.
20−
21−To integrate Bitcoin with Urbit, we’re starting with the basics: a Bitcoin wallet and a Bitcoin node solution for Urbit. These tools will bring Urbit’s Bitcoin functionality from 0 to 1, and will serve as building blocks for our upcoming push from 1 to `n`. We’ll be sharing more about this in the coming weeks and months. If this excites you, please feel free to get involved with some of our current Bitcoin bounties, found [here](https://grants.urbit.org/bounties).
content/blog/urbit-creator-daos.mddeleted−74
@@ -1,74 +0,0 @@
1−+++
2−title = "Urbit + Creator DAOs with Justin Murphy"
3−date = "2022-10-05"
4−description = "Creator DAOs are blank slates, new foundational cryptographic patterns just beginning to take shape. Justin Murphy thinks Urbit is the most obvious place to start building one."
5−
6−[extra]
7−author = "Isaac Simpson"
8−ship = "~mogmet-tadnem"
9−image = "https://storage.googleapis.com/media.urbit.org/blog/creatordao-3.jpg"
10−+++
11−
12−![Image](https://storage.googleapis.com/media.urbit.org/blog/creatordao-3.jpg)
13−<div style="font-size:13px; text-align: center; color: #999">Photo by <a href="https://unsplash.com/@nathynmasters
14−">Nathyn Masters</a></div>
15−
16−# Other Life: Proto Creator DAO
17−
18−Justin Murphy runs a creator network. As a thinker, writer, and podcaster, he works to grow value within this network in order to stay independent. No ads. No branded content. Just varying degrees of membership, with members enjoying private channels and cohort-based courses all under the header “Philosophy and technology for the ungovernable.”
19−
20−Murphy’s “personal media company,” called Other Life, is composed of a newsletter, podcast, Youtube channel. It also extends to Urbit; [Other Life](https://urbit.org/groups/~hatryx-lastud/other-life) is one of the largest groups on the network. Followers and friends of Other Life create and share their own work within the network, aided by a catalog of courses. Murphy’s next logical step is building what we’re calling a Creator DAO: all the same stuff, but instead of a la carte memberships you secure your spot via ERC-20 tokens. In exchange, you get access to all levels of his community and content and attain the rights and responsibilities inherent to any DAO member.
21−
22−![Image](https://storage.googleapis.com/media.urbit.org/blog/otherlife.png)
23−
24−Since Creator DAOs are blank slates, primordial cryptographic objects just beginning to take shape, Murphy thinks Urbit is the most obvious place to start building one. Urbit lets creators spin up flexible DAOs to find, manage, keep members engaged in entirely new ways.
25−
26−
27−# Democratized Publishing
28−
29−In contrast to centralized programs like Discord, Urbit offers creators far more flexibility in interacting with their fanbases. Say, for example, you want to set up a trustless contribution program for guest writers. The Urbit app [Straw](https://urbit.org/applications/~pocwet/straw) supports group curation with voting on proposed articles. To increase guest engagement and expand participation while also maintaining quality control, Murphy can use Straw to initiate votes on his own pieces or potential guest pieces, which automates publication to the clear web when a vote passes.
30−
31−“Imagine I want to publish to the [Studio](https://urbit.org/applications/~tirrel/studio) newsletter, and when I go to click publish it first gets sent as a proposal to Straw, and it only actually gets published if a majority of the group agree that it passes the quality bar. As Straw develops, you can imagine that if the proposal is passed, two things happen. One: the post in the Urbit notebook gets sent to the email newsletter through Studio. Two: money is transferred.”
32−
33−Indeed, future functionality will enable automated payments after publication.
34−
35−![Image](https://storage.googleapis.com/media.urbit.org/blog/straw.jpg)
36−<div style="font-size:13px; text-align: center; color: #999;">The Straw App</div>
37−
38−“I’ll offer bounties, making a list of topics that I want people in the group to write about,” says Murphy. “They can publish permissionlessly to the group blog, through Studio and anyone in the group could potentially publish on any set of topics, kind of replicating a multi-author magazine.”
39−
40−Straw opens up a whole new way to decide what—and who—creators publish next. We’re the last to advocate art-by-democracy, but the potential is huge.
41−
42−# Decentralized Kicking and Adding
43−
44−Urbit also offers a novel solution with regards to vetting group members and weeding out bad ones. As Murphy points out, Holium’s Urbit app Ballot—which works like a decentralized [Snapshot](https://snapshot.org/#/) for Urbit Groups—allows creators to decentralize the expulsion process. A shift which many who run creator networks would much prefer.
45−
46−> If someone makes a proposal in [Ballot](https://urbit.org/applications/~lomder-librun/ballot), and maybe the owner gets to decide the threshold where if a certain amount of people want to kick someone out, they're kicked. It's actually a really annoying burden, in some ways, to know who to kick out. How bad does someone have to bet? You can have all the rules and regulations you want and try to be as objective as possible, but ultimately the owners and the admins have to use their judgment to decide. I would frankly much rather not have that responsibility. I would love for it to be hardwired such that only a super majority, or something like that, could do it. You can imagine that as a custom action on Ballot.
47−
48−One can imagine this custom action with a combination of Ballot and the [Forms](/applications/~donpub-datdux/forms) app. Since the form data is all on Urbit, it would be a simple matter for an app like Ballot to automatically access that information. With a few forms to vote on membership, this would make adding members equally simple, automated, and trustless as kicking them.
49−
50−“I think the Forms App is cool. You can use it on certain channels where if you want to get in, you fill out a form, then it's evaluated by Ballot. So the content of a form submission gets plugged into a proposal. People vote on the information supplied in the form and if the vote is approved, then the person gets added to the channel or group.”
51−
52−# An Owned Space
53−
54−These use cases help with DAO flexibility, usability, and decentralized automation. But another important reason to build a DAO on Urbit is that you’re building your network on P2P “real estate.” On Urbit, both creators and their communities own the address space and every action taken in it—it can’t be canceled or deleted or made inoperable, a far cry from other platforms where you can be suspended for arbitrary Terms of Service violations.
55−
56−“The main positive is you and your community getting to own the real estate that you operate on,” says Murphy. No other app, even dapps like Agora or Snapshot, allows for a genuinely P2P offchain operating environment. Your Urbit ID is self-owned and portable, and you build your community P2P. Your creations are yours and you can continue building them without corporate middlemen ripping your canvas out from under you, or changing your tools or access without notice.
57−
58−![Image](https://storage.googleapis.com/media.urbit.org/blog/otherlifegroup.png)
59−<div style="font-size:13px; text-align: center; color: #999">~hatryx-lastud/other-life</div>
60−
61−Furthermore, the more work you put into building your Creator DAO on Urbit, the more valuable the Urbit address space becomes. When you use Facebook, you’re relegated to the role of a content serf. The more you produce, the more Facebook grows in value. On Urbit, the more your produce, the more Urbit grows in value—and you are an owner of Urbit.
62−
63−![Image](https://storage.googleapis.com/media.urbit.org/blog/justinmurphy.jpg)
64−<div style="font-size:13px; text-align: center; color: #999">Murphy already offers his members access to the Other Life urbit group.</div>
65−
66−Finally, Murphy cites Urbit’s durability.
67−
68−> The second most important Urbit trait after ownership is durability. The creator economy tools change all the time. Every time you try to move your people from one new app to another app, you lose a lot, right? You want to be an influencer, you want to be an important thinker and speaker. All of a sudden, you’ve got to be on Clubhouse! This means telling the people on your newsletter, telling your Patreon subscribers, telling the people on your podcast, hey, download this cool new app called Clubhouse and find me there. It's going to be awesome. It's so cringe and corny and only a small number of them will even make it over there. Then all of a sudden, no one's on Clubhouse and no one wants to use Clubhouse anymore. This is a major problem for people navigating the creator economy. I think one of the big selling points of Urbit is—this is the one place that I’ll always be. I (will have) been working on my Urbit for over 10 years. This thing is going to be the nuclear bunker of the internet.
69−
70−Creator DAOs are perhaps the smallest, most nimble type of DAO—a creator, his followers, and the content they share between them. For that reason, they’ve been underplayed as archetypal DAOs. But their small size and flexibility may make them the perfect candidate to realize the possibilities of immensely improved DAO experiences.
71−
72−—
73−
74−*Isaac Simpson is a Los Angeles based writer and the founder of the marketing agency [WILL](https://willtheagency.com/). You can read his work on his substack [The Carousel](https://thecarousel.substack.com/).*
content/blog/urbit-for-creators.mddeleted−47
@@ -1,47 +0,0 @@
1−+++
2−title = "Urbit Is for Creators"
3−date = "2021-12-09"
4−description = "Urbit is for creators who are ready to wake up from this bad dream."
5−[extra]
6−author = "Noah Kumin"
7−ship = "~librex-dozryc"
8−image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/romi%20creators%20blog.jpeg"
9−+++
10−
11−![](https://storage.googleapis.com/media.urbit.org/site/posts/essays/romi%20creators%20blog.jpeg)
12−
13−It’s no secret that there are huge problems with the way content is distributed on the internet today. Even five years ago these issues hadn’t quite hit the mainstream: the ability of platforms to capriciously alter their terms of service, the corrosive effects of algorithms designed to siphon off as much of our attention as possible, the uncanny effects of a world where tech companies arbitrate truth with behind-the-scenes moderation policies. Although they’re now discussed pretty openly, the horrid effects of this system actually tend to be _understated._ “If you’re not paying for it, you’re not the customer, you’re the product” has become a truism. And yet, as _You Are Not a Gadget_ author Jaron Lanier puts it, it’s not quite specific enough to say that _you_ are the product. Rather, “it’s the gradual, slight, imperceptible change in your own behavior and perception that is the product.”
14−
15−This product is selling very well, and it has seeped its way fully into the world of content creation, or what might once have been called the arts. Although it’s not so widely publicized, [Tik Tok basically runs the popular music industry at this point](https://www.browndailyherald.com/article/2021/09/for-better-or-worse-tiktok-is-driving-the-music-industry). Meanwhile, platforms like Spotify or YouTube filter what we see by deprecating the “long tails” of content. That is, if you’re searching for a tune on Spotify, it brings Spotify more profit, on average, to design a search feature that will automatically bring you to the most popular songs, even if you were really looking for less popular ones. The same goes for books, which are now purchased mostly according to the algorithm, and not according to what a person might stumble upon in a bookshop. (The upshot: expect more [cookbooks from Snoop Dogg](https://www.nytimes.com/2021/04/18/books/book-sales-publishing-pandemic-coronavirus.html), and fewer titles from authors who are not already celebrities.) Products such as Tik Tok, Spotify, YouTube, and Amazon like for you to think that they’re mere distributors of content. But actually they’re _producers_, and they’re producing the smarmy, anodyne style that has homogenized the globe.
16−
17−Urbit is for creators who are ready to wake up from this bad dream.
18−
19−The vibe of today’s internet applications—manipulative, erratic, overcomplicated, overbearing, and highly detrimental to society—is in contrast to the mechanics of the creator economy itself, which can actually be blissfully simple. In 2008 Kevin Kelley made famous the concept of “[1000 true fans](https://kk.org/thetechnium/1000-true-fans/).” That is, to make a living as a creator, you only need 1,000 fans who are interested enough to buy whatever you produce. Even $6.00 or $7.00 a month from such true fans is a boon for a creator—assuming not too much of that cash gets taken away by middlemen, and that fans can discover work from outside the corporate monoculture in the first place.
20−
21−In a limited sense, this 1,000 true fans model is already working. Creators with fanbases of the size Kelly imagined are able to use Patreon or YouTube or what-have-you to monetize their content. But the problem is, those platforms are not really peer-to-peer. Your fans aren’t your own: they belong to the platform. And with the big tech platforms running the show, we end up with the problems described above.
22−
23−To those of us who are interested in seeing a thriving culture of artists, musicians, podcasters and writers which is human-centered via a p2p network, rather than being brokered, managed, and manipulated, by the most venal and tasteless of data collectors and profiteers, it likely seems like the world of the arts has gone bottom-up. Urbit is for any creators who are ready to put it back on its feet again.
24−
25−Urbit is a peer-to-peer network designed to serve as simple, durable neutral infrastructure for whoever wants to build something on it. Like everything else on Urbit, creator content goes directly to the people it’s supposed to go to. No middlemen, no MEGACORP data mining, no capricious terms of service, no obscure algorithms determining what gets seen and what doesn’t. This is the zero-to-one shift that makes Urbit the natural destination for creators who want to both _own_ their work and share it.
26−
27−Urbit has already seen several communities get excited about the ways Urbit could help them fulfill their goals. Here are just a few examples:
28−
29−[HOLDERSLAND](https://twitter.com/holdersland), founded by Haleek Maul, a musician, music label owner, and NFT creator based in Barbados. Maul recently [sold](https://urbit.holders.land) a set of customized Urbit NFT artwork, which came bundled with actual Urbit IDs.
30−
31−[Other Life](https://www.otherlife.co), a community of philosophers and creators founded by the entrepreneurial Justin Murphy.
32−
33−[The Stack](https://orbisledger.news/), an entertaining and informative podcast with a decidedly Urbit flavor, hosted by Josh and Andy.
34−
35−[door.link](https://www.door.link), a vibey and idiosyncratic music collective.
36−
37−[Wet Brain](https://www.patreon.com/wetbrain), a numinous, post-everything New York podcast, hosted by Honor and Walt.
38−
39−Internet Weirdness Task Force, which has no legacy internet site to link to, so you’ll just have to get on Urbit to scope it out.
40−
41−Over the last ten years, we’ve already had a taste of what blockchains can do: they’re great so far for distributing a financial ledger so that payments are no longer centralized. But for online communities to go truly peer-to-peer and escape the grip of corporations, they’re going to need something like Urbit. As HOLDERSLAND founder Haleek Maul [puts it](https://urbit.org/blog/haleek-maul-interview) in a recent Q&A, decentralized technologies like blockchain or Urbit “allow . . . new financial relationships and funding structures to emerge. Rather than have a few people contribute $20k, you can have hundreds of people contribute $100.” In such a system, recording artists no longer need to hunt for a deal from sharky impresarios; their communities can comprise both the talent _and_ the executives. They no longer need to pay fealty to streaming services; they can sell their wares peer-to-peer, with the old-fashioned connoisseurship of a cool record shop, except that this record shop is available to anyone across the globe.
42−
43−Urbit makes this dream a real possibility. In an Urbit future, utilizing your own personalized payments system, which could take either fiat or crypto, should be as easy as sending or receiving money on apps like Venmo or Cash App is today. If _anyone_ can make a direct peer-to-peer payment to anyone else on the network, if _anyone_ can send a piece of writing or audio or video clip in a peer-to-peer way to anyone else on the network, then you’ve truly laid the groundwork for autonomous organizations of creators.
44−
45−Beyond that, Urbit is one of the very few platforms looking, with seriousness and deep technical consideration, into the distant future. Whereas no one can say whether a mainstream platform like Facebook or Twitter will even _exist_ in ten years (think just how much writing will disappear if those servers do shut down), Urbit is built with maximum durability in mind: one way to think of your urbit computer is as a [100-year computer](https://urbit.org/blog/the-100-year-computer). Whereas most software today is designed to break quickly and be replaced quickly, due to the instability of all of modern computing’s complex interlocking parts, Urbit was built as an overlay operating system, so that it can work no matter what’s running underneath, and thus serve as a resilient, permanent home for your digital world.
46−
47−Computers can still be used as magical tools for creative individuals, instead of as attention-draining machines—if that is indeed the future we want. For creators, the solution to the ever-growing problems of the internet is not in the hands of any national government, or some new application that mimics the architecture of old applications, or through some impracticable system of reduced screen time. The solution to these problems is, and always has been, to build a whole new system that works _for_ the people instead of against them. That’s what Urbit is here to do.
content/blog/urbit-for-normies.mddeleted−175
@@ -1,175 +0,0 @@
1−+++
2−title = "Urbit for Normies"
3−date = "2020-02-11"
4−description = "A layperson’s guide to the coming new internet."
5−
6−[extra]
7−author = "Erik Newton"
8−ship = "~patnes-rigtyn"
9−image = "https://media.urbit.org/site/posts/essays/normies-2.png"
10−+++
11−
12−Urbit is a challenging project to fully describe because, rather than a single product, it’s an entire system. Often when I talk about one of the individual elements of the system, someone will tell me that another company is already building that — and they’re usually right. What sets Urbit apart is that we’re building all these elements at once to work together seamlessly.
13−
14−For that reason, this overview is long. I wanted to explain, at a very high level, as much of the system as possible, to share an image of the entire forest rather than spending too much time on any of the trees.
15−
16−My own path to Urbit was not predictable, so it turns out I’m a useful ambassador to describe what the heck we’re doing to my fellow normies.
17−
18−I refer to myself as a normie because I’m a lawyer by training, not the typical code-savvy early Urbit adopter. I ran a law firm and, after retiring, founded a podcast and magazine about relationship dynamics. During that time I came to believe that humanity was in desperate need of better ways to relate. I didn’t know how, but I knew that my podcast about romance wasn’t going to move the needle. I began to look for a bigger project. I wanted something I truly could invest myself in; something that could have a real impact on this problem.
19−
20−That’s when a friend introduced me to Urbit. Saying it was the most credible project he’d seen in years, he described it as “an open-source decentralized internet project,” and that it “would give control of computing back to regular people.” That sparked my interest, but I didn’t totally understand it. After looking over the website and watching a couple of obscure descriptive videos on YouTube my response was threefold:
21−
22−1. **This is huge** — if it actually works, it’s the future.
23−2. **This is real** — It’s got working code, dozens of engineers, and a very unorthodox solution.
24−3. **I don’t truly understand this** — I can’t read the code, and I can barely comprehend the paradigm shift.
25−
26−So of course I asked for an intro.
27−
28−Fast forward: I ended up becoming COO at Tlon, the primary developer of Urbit. Urbit is exactly the sort of project I was looking for — one that represents an important promise for humanity. But, boy, did I have to fake my way through the technical elements of my new job those first few months.
29−
30−What I eventually came to realize is that if Urbit is only accessible to programmers, it’s dead on arrival. In order to be useful, Urbit has to be understandable by the non-technical user. Like me. And maybe like you.
31−
32−I understand as well as anyone how complicated Urbit can appear. But, fundamentally, Urbit is quite simple and it promises a critical upgrade to human interaction. That might sound like hyperbole but it’s the reason I work here. This is my attempt to explain to fellow normies the scope and scale of this world-changing project called Urbit.
33−
34−## What is Urbit?
35−
36−Let’s take this one step at a time and start with the most basic definition:
37−
38−Urbit is a peer-to-peer internet being built from scratch to be more private, secure, and durable than the current internet.
39−
40−At its most basic level, an Urbit is:
41−
42−1. A super-private computer, combined with
43−2. an ID, which is
44−3. connected peer-to-peer with other Urbit computers.
45−
46−Taking that a half-step deeper, each Urbit user gets a permanent identity, which allows them to access their personal computer in the cloud, and then talk to directly with other Urbit computers (i.e. other people) on the network, all without using an intermediary.
47−
48−When I say “computer” I’m not talking about a physical device, but rather the software that computes. Urbit is a virtual computer, not a hardware device. Today that means you can access your Urbit computer from anywhere, on just about any device with a web browser. Eventually you won’t even need the web browser.
49−
50−By “intermediary” I’m talking about all those centralized servers that we use every day to do our computing. Servers owned by Google, Facebook, YouTube, Instagram, Twitter, Slack, Amazon, Nest, Apple, and so on. All of these companies and products keep close tabs on our activity and use that information to sell us things and influence our opinions. Everything we do online is watched and recorded.
51−
52−Urbit will fundamentally change that — more about the privacy implications later.
53−
54−![](https://media.urbit.org/site/posts/essays/normies-1.png)
55−
56−## What it looks like
57−
58−Another way of explaining Urbit is to describe how it feels and looks. Visually, Urbit belongs to a genre often called “calm computing.” Urbit is designed to be simple, basic, and non-addictive. You won’t find any flashy-blinky lights here; no zany colors; no wacky branding. Just calm, functional, purpose-built tools for people to connect and work together. (One of my favorite examples of calm computing is the [light phone](https://www.thelightphone.com/).)
59−
60−Today Urbit’s interface looks like a tab in your web browser that has some limited functionality (chat, a weather app, a notebook, link sharing). Soon, you won’t even need the web browser — you’ll be able to access or run Urbit directly in its own window. Inside will be a super clean interface with all the functionality you might want from your computer, in one place and with one login (think document creation, email, social media access, accounting) — but it will run on your virtual Urbit computer, so it will be safe from corporate prying and data leaks, available on any device, and all inside one simple interface.
61−
62−## What it’s for
63−
64−Fundamentally, Urbit is neutral open-source infrastructure, so it can be for many things. From our highest level perspective Urbit is computing for real communities and normal people, not for corporations. To make that real, Urbit focuses on delivering a computing experience that is secure, private, durable, and calm.
65−
66−For me, Urbit’s core purpose is to give us all back our privacy and our autonomy. It’s time for humanity to control its tools rather than the other way around.
67−
68−## Key elements
69−
70−One potential barrier to understanding Urbit is that we’re building out multiple layers of this new internet simultaneously, and each has its own explanations and value propositions. Remember, what sets Urbit apart is that we’re building of all these elements at once to work together as a system.
71−
72−I’ll try to explain the most important of these without straying too deep into the technical weeds.
73−
74−1. **A peer-to-peer network**
75−
76− Peer-to-peer networking is a really big deal. On the current internet, essentially all of our communications and activities go through centralized servers owned by corporations (Facebook, Google, etc.) — and those corporations can’t help but use all that information to make money. They’re capitalists, after all, and so we get constant privacy violations and interfaces built for maximum dopamine addiction.
77−
78− In an Urbit world, all those communications go directly between users (i.e. peer-to-peer) with nobody in the middle. That means there’s no data capture by any megacorp, less intrusion into your life online, and communications go back to the semi-private one-to-one or small group format that is most comfortable for humans. It’s more like real life.
79−
80−2. **Your own server**
81−
82− Servers are complicated. Too complicated. Have you ever tried to use a command line? Exactly. It’s a terrible way to work, and that’s just a hint at how complex servers are to operate. To hide that complexity, we let corporations run our servers for us — they can afford teams of engineers. The problem is that today most of our computing is handled by these corporate servers — and that means we’re giving up control because of complexity.
83−
84− As an example, every time you use Siri, your message is sent to Apple’s servers, where it is processed, and the response is sent back to you (which is admittedly amazing). Unfortunately that’s why it never works if you’re offline, and it’s also why Apple knows what you’re saying to Siri. And this applies to all the apps we use: The actual computing happens on corporate servers. The problem is that we consumers aren’t in control and, again, the corporate entities watch, record, and gate-keep all of our activity.
85−
86− Fundamentally, Urbit is a super simple server. That means Urbit can run those computations and hold all that data for you, eliminating the need for a corporate intermediary.
87−
88−3. **Permanent, personal ownership of your digital identity and all your data**
89−
90− Urbit IDs are permanently ownable — and that ownership is backed by cryptography, not some corporate database. Once you take possession of your Urbit ID, no central authority can ever take it away from you. Sure, if you start spamming people on the network, word could get around and you might get blocked by other users, but none of them can prevent you from using your ID or accessing your Urbit computer. Compare that to the current internet where Facebook owns your Facebook profile, Google owns your Gmail account, Twitter owns your Twitter handle, etc. At any time and for any reason, those services can arbitrarily shut off your access, and you have little to no recourse — all that data, all those followers, and all that reputation is wiped out instantly. Your Urbit, on the other hand — both the identity, and all the data inside your Urbit computer — is yours permanently, so long as you know your secret key.
91−
92− A secure decentralized identity system like the one we’ve built leads to some very interesting use cases that are otherwise insurmountable. For example: decentralized Uber, decentralized delivery services, and a solid solution to the problem of fake reviews. To build any of these services, the problem of permanent identity needs to be solved first, and we’ve done that as part of our overall system. I’ll spend more time on use cases below.
93−
94− It’s worth noting that this problem has never been solved before. All of our communication channels on the internet today rely on someone else to authenticate our identity. Urbit is — to my knowledge — the first practical application of a decentralized ID system that actually works.
95−
96−4. **An incentive for good behavior**
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^32^ to be exact). Scarcity creates value. That scarcity, combined with reputation accrual, means there's an incentive for good behavior.
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.
101−
102−5. **Tools anyone can learn and use**
103−
104− Urbit is a system that anyone with patience can understand completely from top to bottom, from the integers of byte code to the complete OS and everything in between. Urbit in its entirety is just over 50,000 lines of code. That is tiny. Compare that to Linux (the open-source OS that most modern computing is built upon), which is tens of millions of lines of code, and you start to see how important this is for efficiency. Apple’s and Windows’ codebases are similarly massive. In our current computing system, nobody can understand the entire thing completely, and that means there are innumerable security holes. With Urbit, while it may demand something of you, any reasonably intelligent developer can grasp the whole thing. We’ve worked very hard to keep our system simple at each level. That makes it more efficient, more durable, and much more secure.
105−
106−6. **Lessons from the last half century**
107−
108− Bear with me — this is where some jargon kicks in. In many ways, Urbit is an attempt to apply lessons learned from the failures of 20th century computer development. From an engineer’s perspective, Urbit solves a series of problems that we end users rarely notice, but which cause extraordinary amounts of complexity and waste. The list of applied lessons is long, but rather than bullet them all, I’ll explain the one that surprised me the most.
109−
110− Urbit is deterministic. That is, a given sequence of inputs always produces the same output. When I first heard that, I thought, “Wait, isn’t that what all operating systems do? Give you the same result every time?” Weirdly, the answer is no. Normal operating systems don’t work this way. Normal modern operating systems actually get varying results when they compute things. This is a deep problem that causes programmers countless hours of frustration. The most common implication of this that you’ve probably experienced is having to reboot your computer — either because it’s locked up, or because it simply won’t do something that it was totally doing a second ago. What’s annoying to a regular user, though, is absolutely crazy-making to developers.
111−
112− This determinism makes programming on an Urbit immensely more efficient than other environments.
113−
114− Urbit applies this and a whole list of other lessons from the past half-century of systems software to increase reliability and security in everything from file storage to networking to user-facing apps. All this adds up to more security and reliability and less service-lock-in with Urbit than with our current systems.
115−
116−7. **Private, human-sized, and efficient**
117−
118− Because Urbit isn’t centralized or owned by any one company, there’s no incentive for it to dominate your life. Your Urbit isn’t designed to spy on you, get you addicted to clicking its buttons, manipulate your emotions to gain attention, or nudge you to buy something. Your Urbit is a simple, customizable, permanent place for you to do all your computer-based tasks with your friends in absolute privacy.
119−
120− This is so much the case, in fact, that it presents a bit of a problem for Tlon. We don’t know how many people use Urbit every day, who they talk to, or what they’re doing. While we think this is how things should be, it puts us in a bind when a VC wants to know about our user base; we can only make educated guesses. That said, we think this is the right problem to have.
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.
123−
124−
125−![](https://media.urbit.org/site/posts/essays/normies-2.png)
126−
127−## How it compares
128−
129−A final way to understand Urbit is to make comparisons between Urbit and current products we use today. This is limited, because ultimately Urbit will grow in directions we can’t predict, but comparisons are a useful starting place.
130−
131−Again, on the current internet, we all access megacorp software using our web browsers and app interfaces. This means that we each exist as a line in a megacorp database, and those megacorps use that data to make money, which results in rampant privacy violations and addictive interfaces. Urbit is the alternative to all that: it’s decentralized, private, and secure. And it’s yours.
132−
133−Let’s get to some real-world examples.
134−
135−## Urbit vs. Reddit
136−
137−Imagine you’d like to discuss a certain research topic with a group of friends. Say, Canadian small cap equities or the best cookie recipes. You’ll need a chat interface for live discussion, a notebook to record concepts, and a way to share links for discussion. You can do this in the default web if you want: use Reddit for the links (but make sure it’s a private group), use Google Docs for the notebook (but make sure everyone has Gmail), and use iMessage for the chat (but everyone needs a Mac). And don’t forget, each service has their own login and security holes, and they’re all mining your data.
138−
139−The alternative is spin up a group on Urbit. All of that functionality is available today in one clean, simple interface. It’s private, you own the data, there’s only one login, and you can even learn to build apps for your group.
140−
141−## Urbit vs. Facebook, Twitter, etc.
142−
143−Or let’s say you want to share pictures with your friends, post micro-messages to the world, write a blog, or share a podcast. There’s simply no reason you should use some centralized company (one that then owns your content) to broadcast any of those things. Instead, send it out from your Urbit. You’ll own the content, you’ll control the data, no company will spy on you, and nobody can ever take your ID from you. With Urbit we all finally own the tools, and that means we own the data by default.
144−
145−## Urbit vs. Nest
146−
147−Imagine, as I do, that you want a connected video camera in your house, but don’t want the Nest corporation (which is now owned by Google) to be able to spy on you. Or perhaps you just don’t want to have to sign up for yet another duplicative service in order to use the camera you just bought. If any of that is the case, you can run your camera through your Urbit instead. The video feed will never leave your control, because it no longer has to live on Nest’s servers. Your camera will talk over a secure channel only to your Urbit. Your Urbit is the server.
148−
149−You can apply this same concept to smart speakers, a Ring doorbell, connected baby monitor, smart fridge, or any of the innumerable connected devices that give someone else access to your personal life. Why should anyone else have access to that information?
150−
151−## Urbit vs. Google Docs
152−
153−Imagine you want to write a screenplay with a small group of friends, but you don’t want Google mining the content of your shared doc for advertising keywords, and you won’t want to use multiple services for chat, document sharing, email, etc. In that case, simply create an Urbit group with your friends and write together using Urbit’s writing tools. Your content will stay completely private to the team until you decide to release it to the world, and you’ll communicate using one simple interface. Even better, the archive of your multimodal work lives in one place, so looking back at your process doesn’t require reconstructing it from dozens of different apps. And everything is stored on your respective Urbit computers, not Google’s servers.
154−
155−## Urbit for your protected health information
156−
157−Imagine, as is already becoming the case, that it becomes highly valuable to have your genome sequenced in order to make good healthcare decisions. In that scenario, most of us would want our health care providers to be able to make precise assessments of parts of our genome, but we wouldn’t want insurance companies or other third parties to have access without our permission. In the current paradigm, once you share the information, it’s out there and can be leaked or sold. So much so that we all sort of assume that leaks are the default. In the Urbit paradigm, that information lives on your Urbit computer and nowhere else, and any software necessary to process it can be run on your Urbit as well. In other words, there’s never any need to share the raw data with anyone; instead, you can download a small program, run it on your Urbit, and share the final analyses only without ever exposing your data.
158−
159−Some of these cases are, admittedly, a bit speculative since we haven’t built all the functionality yet. But it’s coming, and quite soon.
160−
161−For now, if you like the way this sounds you can [get yourself an Urbit ID](https://urbit.org/getting-started/#id) and start learning about how to safely store cryptographic keys (it’s really not that hard, and we give you suggestions). If you’re feeling technical or adventurous, you can try booting our beta OS interface to see what it looks like. It’s fussy, but it exists. Soon it will be less fussy. You can check out our [roadmap](https://urbit.org/understanding-urbit/roadmap/) if you’d like to know when.
162−
163−## Why we need Urbit
164−
165−We humans haven’t evolved enough to manage the firehose of information that modern technology blasts us with. There’s too much news, too many connections, too many opinions, and more agendas out there than any of us can mindfully comprehend. We’re designed for much smaller communities, one-to-one connections, and slower idea assimilation than our modern infrastructure allows. The pace of change is increasing, and we don’t know how to manage it.
166−
167−We’re scared, and to manage that fear we’re becoming more insular, more entrenched. Layer on top of all that the incentives that big business and big politics have to manipulate our emotions, and we’re headed in a very dangerous direction.
168−
169−We can’t turn back the technological clock; humanity can only ever press onward. This is where Urbit comes in. Urbit is a forward-looking solution to this particular set of problems around human-scale computing and personal autonomy. Urbit provides a means by which groups can live peacefully in parallel.
170−
171−Urbit is a computing environment that allows humans to do everything they want on computers, but in communities of their choosing, in a way that feels direct and natural, and in a way that allows true personal freedom. Urbit is calm, secure, and private in its most fundamental architecture. No spying corporations. No manipulative politicians.
172−
173−And that is what we need. Humans need a way to at once take advantage of our vast technological advances but not be dominated by them. Urbit is an open-source tool that we all own, that anyone can understand down to its roots, that’s fully under its user’s control. It is human-scale computing for human-scale communities. Simple, durable, yours.
174−
175−For me, this first iteration of Urbit is more than enough, and it’s exactly the sort of peaceful future I want to work towards.
content/blog/urbit-is-for-communities.mddeleted−92
@@ -1,92 +0,0 @@
1−+++
2−title = "Urbit is for Communities"
3−date = "2020-03-22"
4−description = "Urbit is for giving communities the tools to shape their own environments; for us all to feel a sense of life and self-directedness in the digital world."
5−
6−[extra]
7−author = "Galen Wolfe-Pauly"
8−ship = "~ravmel-ropdyl"
9−image = "https://media.urbit.org/site/posts/essays/urbit-is-for-communities.jpg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/urbit-is-for-communities.jpg)
13−
14−## Generated, not fabricated
15−
16−What is it that makes high trust communities take shape?
17−
18−When I think of the places in the physical world where people seem to feel the most at home, they’re places that have evolved over long periods of time and are owned by the communities that inhabit them. Communes in rural California, Rome, rural Japan, and villages in Indonesia all come to mind.
19−
20−These are places that aren’t designed in one go. They’re the product of lots of different contributors working in loose collaboration, often over long periods of time.
21−
22−Places that grow under the care of the people who live in them seem, somehow, to become much more alive and engaged. The strength of connection in these communities is palpable. You can feel the difference.
23−
24−There’s nothing even remotely like this in the digital world. The digital world is totally fabricated, stamped out, and controlled.
25−
26−It’s not just the surveillance, lack of privacy, or interfaces optimized for addiction — those are all downstream from the root problem: our software can’t evolve with us. It’s designed and controlled by the people that make it. We don’t participate in shaping it directly at all.
27−
28−And since our software can’t evolve with us, our connection to it remains thin. The digital world of today is low-trust by design. We live in a digital world controlled by other people. Nothing about it belongs to us.
29−
30−It’d be great if we felt a deep appreciation for and connection to our digital communities the same way we do in the physical world. Digital communities should feel alive and engaged with their surroundings. They should feel as vibrant as a city on a summer night, cozy like a family dinner in an old ranch house.
31−
32−We don’t often talk about it explicitly, but this is what Urbit is for. Urbit is for giving communities the tools to evolve their own environments; for us all to feel a sense of life and self-directedness in the digital world.
33−
34−It’s not any single specific technical feature of Urbit that makes it well-suited for communities to homestead and develop. It’s the combination of the technology under the hood and the interfaces we build on top. Let’s talk about both.
35−
36−## Technically capable
37−
38−I love [this tweet](https://twitter.com/devonzuegel/status/1221804267083718656) about becoming a ‘digital prepper’. It feels like it has already happened to me, too. I’ve seen enough centralized services shut down and disappear (often with my data) that I’m reluctant to try new ones. No matter how friendly and cozy their branding.
39−
40−I find myself vetting every new app or service to figure out whether they have the potential to survive far into the future. The giant services I’ve become dependent on all seem somewhat worrisome. How long can these free services possibly stick around? Certainly not forever.
41−
42−The incentives in the current structure are totally misaligned. Let’s walk through them:
43−
44−I want to keep my data forever, but most companies are beholden to growth. If they can’t produce that growth and die, my data either disappears or becomes unusable without their software.
45−I don’t want my data to be sold or for anyone to spy on me, but ad-funded companies have to engage in these practices to stay alive.
46−I don’t want a piece of software to go away if a company dies, but apps and services require maintenance that’s complicated and expensive to do. Without the company around, their software is useless.
47−
48−The simple fact is, I let companies run my software because it’s too much work for me to run it myself. Most people can’t be their own sysadmin — and those that can have other things to do.
49−
50−This is more or less the entire technical value proposition of Urbit: to build a system that’s simple enough that it requires almost no maintenance. Our approach to building software makes all of the above problems easily solvable.
51−
52−Perhaps more importantly, we have a direct incentive to solve these problems. Tlon funds Urbit’s development by selling addresses and providing hosting. And the only reason anyone pays us for these things is because we make Urbit as directly useful for you as possible.
53−
54−That means we have to solve the problems inherent to the legacy internet. There can’t be any sense of suspicion or uncertainty in our new system. Your Urbit has to be something you can really trust and attach to. This is why your Urbit lets you run or write whatever code you like, and why we’re focused on making sure the data you put into your Urbit lasts forever: it won’t disappear when some company dies.
55−
56−But even with a system that fixes all of these issues by default, it only matters if the system is usable and understandable. What we really want is a digital world that’s generated by the communities that inhabit it — which means it has to be generated by people with no technical knowledge.
57−
58−## Communities are built by people
59−
60−In the physical world, you can arrange the furniture in your house, or go to Ikea, or build your own furniture, or figure out how to build a house from scratch. By taking your preferred approach to design, you contribute to the shape of your city. The world around us is a wonderfully loose collaboration between the more technically oriented architects and planners, and the everyday homeowners and residents.
61−
62−The digital world is, of course, nothing like this. Even software developers are stuck with the current system. None of our existing apps or services can connect to one another, so whether you’re a user or a developer, you’re faced with the daunting task of replacing everything all at once if you want a better system. But nobody can do that.
63−
64−Urbit provides an experience with less distance between ordinary use and total customization. To start, we’ve created Ikea-like, Lego-like and woodshop-like levels of usability. What we’ve built isn’t nearly as complex as the physical world, of course, but it’s a start.
65−
66−For most people, customizing your Urbit should be a matter of picking from an available suite of modules. Not unlike going to Ikea. For some people, recombining interfaces and data sources within Ubit should feel like playing with Legos. And for others, who want to dive in and write code, it’s the same as going into a shop full of high-quality tools.
67−
68−We’re not quite to this level of sophistication, but we’re on the path. Let’s talk about where we are and where we’re going.
69−
70−## OS 1
71−
72−Our rough attempt to satisfy this goal is hovering on the horizon. We call it OS 1.
73−
74−In OS 1, you bring a group of people together to share a set of channels. A channel can be a chat, a notebook, or a collection of links. We built an interface for doing this, but you could just as well build your own. Inside OS1, data and interface aren’t stuck together like they are with apps in the default web. Nor are the people you’re connected with locked into any given Urbit app. App, data, and social graph are always separate in Urbit; they’re modular and always under your control.
75−
76−OS 1 is designed to make it easy to start a group. Everyone in the group runs their own instance — so everything is only shared with the people you’re connecting with. Light customization of this experience is easy for an ordinary user.
77−
78−If you want to go deeper, anyone can build a new protocol for storing data and transferring it around Urbit without too much difficulty, but you do have to write some code. If you really want to dive all the way in, you can modify the system all the way through to the kernel.
79−
80−Currently, our Ikea experience is pretty limited, there are only a few Legos to play with, and the shop is still quite rudimentary — but it’s a good start and, for the first time, it exists as one complete system.
81−
82−The system is ripe for experimentation, customization, and exploration. It’s ready for earnest homesteading. Come build.
83−
84−## → N
85−
86−OS 1 is really just the beginning. There are so many more modules and means of communicating and collaborating to add. There is so much we can do to make the system more customizable.
87−
88−But OS 1 actually passes the bar of being both usable and futureproof. Urbit is something you can put energy into, in earnest, even as a digital prepper. It’s both safe enough and customizable enough that high trust communities can begin to take root. Urbit isn’t ready for you to build Rome — but it is ready for you to start a commune, salon, or reading group.
89−
90−The point, in the long term, is to let the technology fade into the background. We want people not to be ruled by their software, but the opposite: for our software to grow to suit us. Our hope is for Urbit to be as invisible, calm, and reliable as possible — and for people to be at the center, in control.
91−
92−If you want to explore this new world with us, let us know. We’re going to give away a limited number of hosted OS 1 communities.
content/blog/urbithost-interview.mddeleted−116
@@ -1,116 +0,0 @@
1−+++
2−title = "An Interview with UrbitHost"
3−date = "2021-08-19"
4−description = "Interview with the founder of UrbitHost ~lavlyn-litmeg"
5−[extra]
6−author = "Matt"
7−ship = "~tirwyd-sarmes"
8−image = "https://media.urbit.org/site/posts/essays/nasa-star-cluster.jpg"
9−+++
10−
11−![](https://media.urbit.org/site/posts/essays/nasa-star-cluster.jpg)
12−
13−**An Interview with UrbitHost**
14−
15−Urbit has been making great strides to become accessible to those who are non-technical. Port enables a user to launch their Urbit ID from their personal computer without any knowledge of the command line. However, you only have access while you are running Port, which means you can&#39;t do things like check your DMs while on the move.
16−
17−Hosting your Urbit means that your Urbit is always on and available. All that is required to access the network is visiting a URL and logging in.That means you can access Urbit from your phone, laptop, or any device with a browser.
18−
19−The downside is that running your own server can be a complex and difficult process. Third-party hosting allows an expert to do that work for you. The hosting provider gets paid, and you get 24/7 access to your ship.
20−
21−[UrbitHost](https://urbithost.com) is one of the latest [hosting providers](https://subject.network/planet-sales/) to enter the market. As of now, it is one of the fastest and easiest ways onto the network. You pay the fee, and you get sent a link that you use to access Landscape. It&#39;s that easy.
22−
23−At least, it&#39;s that easy for the end user. For the guy running the operations, ~lavlyn-litmeg, it can be quite a complex operation. I sat down with him to find out about what it&#39;s like being a commercial developer on Urbit. We also talked about technology, the developer ecosystem, and the future of Urbit.
24−
25−If you want to get in touch you can reach him at ~lavlyn-litmeg, the ~sardys/uh group, or [urbithost.com](https://urbithost.com).
26−
27−---
28−
29−**Tell us a bit about yourself and your history with Urbit?**
30−
31−I&#39;m a software engineer who is currently working at one of the larger crypto currency companies. My history with Urbit goes back quite a long time. I saw one of those early demos by Curtis where he had two dojos running, sending messages back and forth, and I thought it looked interesting. Since then, I often checked in on the project, but I stayed at the sidelines because it felt not quite ready; there were constant breaches and so on. What kept me close by was that I believed in the vision of Urbit.
32−
33−I think the open internet only has a future if people retain control of their digital identities, which means that, in addition to a cryptographic identity, they need to be able to keep control over their data. This not only includes their social graph, but they also must be able to run computations on that data. Urbit checks all those boxes. The people behind Urbit and all the other contributors have been steadily marching towards these goals with incredible stamina. I&#39;m inspired by that. And, since the release of OS1, Urbit is very much usable, and I find myself spending more and more time on it instead of other corners of the internet.
34−
35−**Why did you decide to work on hosting rather than another Urbit project? If you weren&#39;t working on UrbitHost what would you be working on within the Urbit ecosystem?**
36−
37−I want my non-tech friends to be able to join Urbit. Most people I know can&#39;t be bothered with executing a blockchain transaction, many feel uncomfortable installing an app they don&#39;t understand, and almost all would shy away from the command line. For the vast majority of people, getting onto Urbit must be as easy as signing up for Gmail or Twitter, otherwise they won&#39;t come.
38−
39−I thought about how I could contribute to Urbit and decided that now is a good time to build a hosting provider. It&#39;s still early, but a non-technical person can actually spend time on the network and be productive. I think we are just now seeing a shift where we need community builders as much as we need engineers working on the internals of Urbit. It is important that those community builders have no barrier to entry for themselves or their communities.
40−
41−That is why ease of access has been my goal from the beginning. I wanted the site to be fully automated, meaning someone could sign up and be on Urbit within minutes. It was also important to me that users be able to choose their own Urbit ID. As far as I know, there was no offering like that yet, so I decided to build it—but I know that others are working on this too.
42−
43−If I was working on something else, it would be Urbit apps. We&#39;re waiting for the new release for it to be easier to distribute and access apps; there are a few tools I would really like to see. But other than that, I would like to spend more time community building.
44−
45−**Can you tell us about how you&#39;re implementing UrbitHost? You beat Tlon to the punch of having immediate hosted access to the Urbit network -- what&#39;re you doing differently? How will your implementation change when programmatic access becomes available via Khan (the new vane to replace Herb)?**
46−
47−UrbitHost runs on Kubernetes, which is a tool to orchestrate containers. What that means, concretely, is that each ship runs inside a Docker container, and Kubernetes makes sure that each container is running and has enough resources. For example, if a server goes down, Kubernetes will automatically move the ships that were on that server to a new server that is available. No data is lost and there should be very little down-time.
48−
49−People think Kubernetes should only be used for services that can be scaled horizontally, meaning there are multiple instances running of the same services. Scaling like this is obviously not an option for Urbit, because a ship must only run as a single instance. But in the last few years, Kubernetes has added many features to run single and stable instances of a container, for example a database. UrbitHost is making use of these features—permanent volumes, stateful sets, and so on—to provide a high-availability hosting for Urbit. It also scales well. I surmise, we could host thousands of ships, we would only have to add compute nodes.
50−
51−As for beating Tlon, I&#39;m not sure if it is a fair comparison. UrbitHost, as it is currently, is a minimal viable product. I tried to realize a simple goal: automated hosting. Tlon is hosting many more planets, not to speak of all the stars and galaxies that make up the network. As far as I can tell, Tlon and UrbitHost are doing things quite similarly. For example, I knew that Tlon is also hosting on Kubernetes, which gave me much more confidence that we could do it too.
52−
53−UrbitHost&#39;s programmatic interaction with hosted ships is quite minimal once it is booted. We use airlock to retrieve the access code and do a few more maintenance things, and we are using it for some upcoming features like automatic S3 configuration. But from what I can tell, Khan looks like a really important step forward, because interacting with the hosted ships via airlock is one of the most brittle areas, and I&#39;m looking forward to making it more robust once Khan is out.
54−
55−**What is most needed within the Urbit ecosystem — any particular apps or services? Which projects are you most excited about?**
56−
57−The ability to publish content directly from a planet to the regular internet would be cool. I would really love to see some bigger blogs being hosted on Urbit. The basic idea would be this: everyone can read the blog, but to join the conversation one would have to join Urbit and the group associated with that blog. Of course, a planet could publish other content too, possibly a mix of free and premium content. Either way, it would pull a lot of people into the gravity well of Urbit.
58−
59−Publishing could also be a good value proposition for Urbit hosting providers. If public content is hosted on a ship, then all the profit from new customers who are brought to the provider could somehow be split between the host and content producer. What is nice, though, is that a content producer can take his Urbit-native community anywhere, anytime, without disrupting the community much. The portability of Urbit at every level would really shine here as communities grow.
60−
61−There are incredible projects happening on every front. The Bitcoin integration is very exciting, it is being realized in a truly Urbit-native way and could prove to be a great catalyst for the ecosystem. However, as a hosting provider, the constant lower-level improvements are exciting too.
62−
63−**What will be the effect of two upcoming changes to Urbit:**
64−
65−1. **Built in software distribution and management**
66−2. **Layer 2 and the new &quot;Khan&quot; vane**
67−
68−**For #1, how would you pitch developers on the benefits of building on Urbit?**
69−
70−**With regard to #2, I think there is about to be an explosion of hosting providers. Will this unleash an Eternal September effect or does Urbit&#39;s &quot;walled garden&quot; style of communication make it more resilient? Urbit is not a single silo like Facebook, after all.**
71−
72−I think that once software distribution is as simple and easy as the iOS app store it will be a watershed moment for Urbit. Put bluntly, it will give users something to do on Urbit besides chat. There are several interesting apps out there already, but they are not easy to discover and install.
73−
74−Developers want reach. The most important pitch to developers will be that on Urbit they have access to a substantial audience. I remember developing for the iPhone in the early days. Objective-C was really a tough pill to swallow, but because the platform was interesting and promised to reach a large audience, I kept going with it. I think Urbit is an interesting platform for the various reasons already mentioned. But learning to develop for Urbit is really a time investment—I myself am still a novice Hoon developer —and for it to be worth it, there has to be a clear pay-off. For some, this is making system-level contributions, but for most it will be having that app show up in some centrally visible place and seeing people engage with it. Once this exists, it will be much easier to pitch Urbit to developers.
75−
76−The layer 2 solution which will make spawning planets much cheaper is an important next step, especially for hosting providers. Layer 2 will help us immensely because spawning and keying planets is very expensive right now, and it puts a damper on how much we are actively pursuing growth.
77−
78−If new hosting providers come online, it will not necessarily mean a huge influx of users. In my experience, building a provider is hard and takes time to mature. However, I would love to see fast user growth.
79−
80−I honestly don&#39;t think having our own Urbit Eternal September would be that bad. I would just see it as growing pains. If we enter a time of sustained growth and rapid user onboarding, the fact that some Urbit groups will get overwhelmed with all the new people will be a small price to pay. The current setup, with a few central groups that act like hubs and discovery points—for example, the fantastic Urbit Index—would have to change. People would need to be funneled into their own Urbit universes that might not overlap much with other areas on Urbit. The nice thing is that all this is accounted for in the Urbit infrastructure.
81−
82−If a certain hosting provider ends up bringing thousands upon thousands of users to Urbit, like AOL did back then with Usenet, then it will be the provider&#39;s responsibility to onboard those users sensibly and not just dump them on the existing groups. In other words, providers, in my opinion, also have a community building responsibility. Of course, this does not mean that providers should be overbearing parents, allowing only this or that, but simply that they should have sensible defaults that don&#39;t overwhelm or destroy the network.
83−
84−**What is the role of commercial providers in the open-source ecosystem?**
85−
86−Commercial providers will be incredibly important to make Urbit succeed. I think if Urbit attracts a large number of users, many, if not most, will run their ship via a hosting provider. It is the easiest way to get started.
87−
88−However, using a hosting provider to get onto Urbit might at first seem antithetical to the spirit of the project. If someone is trying to get away from mega-corporations, why would they go right back to another company and give them their data?
89−
90−Well, because it&#39;s a completely different relationship. The relationship between us, the provider, and you, the customer, is transparently straight forward. You are not the product. We have a more traditional provider-customer relationship where we just do the dev ops work. It is in our interest to keep your data private and keep your ship running. We give you an Urbit ID, which you can keep forever, and host your ship as long as you wish. When you want to leave, you can download your pier and Urbit ID and use it with a different provider or on your own computer in minutes. On the other hand, you cannot leave Facebook and run your profile off of your laptop. Basically, we cannot count on customer lock-in, we must provide good and honest service. Again, the portability promise of Urbit is essential here and ensures that we are on an equal footing.
91−
92−**Once the Urbit payment ecosystem gets built out more, would you consider accepting payments over the Urbit network?**
93−
94−Of course. Having an Urbit-native economy would be a key marker of success, and I would love to participate in it. Moreover, we are planning to offer a Bitcoin node to our customers soon.
95−
96−**Are you coming to Assembly 2021?**
97−
98−Yes. At least, I&#39;m planning to! I would love to meet all the people behind Urbit in real life.
99−
100−**I know you are a Christopher Alexander fan, how has he influenced your work?**
101−
102−I&#39;ve been interested in Christopher Alexander for quite a long time. When I realized that many of the people building Urbit are also inspired by him, I understood why much of the Urbit vibe resonated with me. Critics of Urbit either focus on the technical details or on Curtis Yarvin&#39;s writings, sometimes conflating the two. That&#39;s fine and perhaps a valid point to start, but what they don&#39;t understand is that so many other ideas and ideals have since become driving forces behind the project. This is at least what I observe as an outsider.
103−
104−Alexander&#39;s ideas are all about how to build beautiful houses. He wants us to inhabit places that feel life-giving, places that make us more fully human. The same should be asked of the technology we use. So much of the current internet is the equivalent of a fluorescent-lit cubicle, a brutalist government building, or a flashy central square. It might be interesting to travel through these places, but they do not make good homes.
105−
106−To explore what makes a building beautiful, Alexander had to wade into metaphysics, because he wanted to give a much more objective account of how beauty is present in physical artifacts, which led him to treat beauty as a universal. I think to build more meaningful technology we need to do the same. We do not have a good metaphysics of technology, and this is something I&#39;m really interested in.
107−
108−**Give me a brief summary about your personal philosophy of technology. Do all tools fall under the umbrella of &quot;technology&quot;? Or do some tools hit an inflection point where they acquire radically different characteristics (compare a shovel and a computer)? It seems to me that the philosophy of technology often boils down to trying to define what &quot;technology&quot; actually is. What do you make of all this?**
109−
110−Yeah, I definitely think there is an inflection point once technology becomes digital, but I believe there is something all technology has in common. My approach here is classical. Artifacts have to be distinguished from living things because human made things have their origin outside themselves, meaning they are manufactured (in Aristotelian terms, and stated somewhat simplistically, artifacts have an efficient cause outside themselves, whereas biological things have an innate efficient cause). We are often tempted to think of living organisms simply as elaborate self-replicating machines, but that is putting the cart before the horse. We should rather look to the world of living things to be inspired to build our artifacts.
111−
112−The question of inspiration becomes even more pressing when discussing modern technology, and you put your finger on it with the inflection point. There is no tradition to fall back on when we are building digital technologies. Someone like Christopher Alexander, who is working on architecture, has thousands of years of architecture to look at. He can read the past and see what worked and what did not. On the other hand, when we build things like Urbit, we must look for inspiration in other places because there is no corpus of, say, thousands of years of constructing digital social networks where we can simply choose the best parts. So far, we have mostly bad examples, how not to do it. And considering how new the internet is, most of it is still a blank slate. So while I&#39;m definitely interested in the ontology of technology, I think it is an even more pressing question to learn the principles of the living world around us in order to build digital places that feel organic and life-giving.
113−
114−**Thanks for chatting!**
115−
116−See you on the network!
content/blog/using-urbit-in-2023.mddeleted−55
@@ -1,55 +0,0 @@
1−+++
2−title = "Using Urbit in 2023"
3−date = "2023-02-06"
4−description = "There are more ways to run Urbit than ever, and more options coming soon."
5−[extra]
6−image = "https://storage.googleapis.com/media.urbit.org/blog/usingurbit-2023.jpg"
7−author = "Josh Lehman"
8−ship = "~wolref-podlex"
9−+++
10−
11−![](https://storage.googleapis.com/media.urbit.org/blog/usingurbit-2023.jpg)
12−
13−Recent years have seen several iterations on ways to run an Urbit node and join the network. [Port](https://github.com/latterbolden/port) and support for running Urbit from Windows were added a couple of years ago and have previously been recommended ways of running Urbit. We no longer recommend these options for the vast majority of users in favor of better options that are now available.
14−
15−Read on to learn about the background underpinning these decisions and your options for joining the network going forward.
16−
17−
18−
19−# Background
20−
21−With the introduction of Landscape in 2020 the demand for being on the network rose substantially from what it had been, yet the only way of running Urbit was through the command line, which was a significant barrier for entry.
22−
23−In 2021 Port and a native Windows binary were both introduced via contributions from the open source community: Port was built via our [grants](https://urbit.org/grants/cross-platform-desktop-urbit-app) [program](https://urbit.org/grants), and the Windows binary was contributed via a [pull request](https://github.com/urbit/urbit/pull/4675). Together, these two projects enabled users to run Urbit locally without requiring command-line knowledge. Port was summarily added as an officially recommended way to run Urbit.
24−
25−Over the course of 2022 it became clear that, while often useful for trying Urbit out, the experience of running Urbit locally via Port was fundamentally limited: Urbit runs best as a server, and laptops provide neither a stable running environment nor consistent web-based access from other devices.
26−
27−Windows presented further challenges, particularly around maintenance: our team of runtime engineers has had their progress stymied by the need to support Windows, which has substantially different requirements from macOS and Linux. It’s ultimately much more important to our team that we make progress on the versions of the runtime that run well in a server environment, which is the best way to use Urbit, than for local installations.
28−
29−Going forward we no longer recommend Port as an officially supported option for joining the network, and have dropped support for the native Windows binary as of version [1.16](https://groups.google.com/a/urbit.org/g/dev/c/3S6A8Qf8Qzg) of the runtime. That said, it’s worth noting that Port *is not deprecated*! It is still actively [maintained here](https://github.com/latterbolden/port) by the same people that have been maintaining it since the beginning.
30−
31−Let’s move on and talk about your options for getting on the network going forward.
32−
33−
34−# Joining the Network Today
35−
36−Over the course of 2022 many companies emerged and built products that will get you on Urbit, and their teams are constantly working to provide you with a great experience.
37−
38−If you’re not comfortable at the command line you should use a [hosting provider](https://urbit.org/getting-started/hosted). Hosting providers run your Urbit for you and take care of any ongoing maintenance required. If you eventually want to transition to running Urbit yourself, they’ll let you pack up your node and run it however you want: whether that’s at a different hosting provider or your own infrastructure. Learn about [recommended hosting providers in our getting started guide.](https://urbit.org/getting-started/hosting-providers)
39−
40−For more technical users the [command line](https://urbit.org/getting-started/cli) is still a reliable option. For casual testing you can boot a planet or comet on your local macOS or Linux-based machine, and for more serious usage you should refer to our [cloud hosting guide](https://urbit.org/getting-started/cloud-hosting) to get set up on a VPS. A newer option for self-hosting is [Native Planet’s](https://nativeplanet.io) suite of [software](https://www.nativeplanet.io/software) for turning a local computer into an Urbit server complete with DNS.
41−
42−
43−# Coming soon
44−
45−New options for joining Urbit are just around the corner.
46−
47−Word has it that [Tlon](https://tlon.io/hosting) will soon allow you to invite your friends to groups directly from within their [suite of applications](https://tlon.io/landscape), with onboarding handled seamlessly through their hosting service.
48−
49−[Holium’s Realm app](https://www.youtube.com/watch?v=gdu4QtFR-Bs), a collaborative desktop computing environment available on macOS (for now), allows users to sign up with an existing Urbit or brand new hosted one — all seamlessly surfaced through Realm’s signup flow. You can sign up for the private alpha [here](https://holium.com).
50−
51−Tirrel’s [Scene](https://planet.one/scene) is a desktop application with built-in hosting, like Realm, that works on macOS, Windows and Linux, and it’s available now. Hosting is powered by their [Planet One](https://planet.one) service.
52−
53−For the self-hosting enthusiasts out there Native Planet has created [purpose-built Urbit home servers](https://www.nativeplanet.io/hardware) that [make self-hosting easy](https://twitter.com/jmrphy/status/1616196970384887808) and look great doing it.
54−
55−Joining Urbit has never been easier, and it’s constantly getting easier. See you on the network!
content/blog/value-of-address-space-pt1.mddeleted−144
@@ -1,144 +0,0 @@
1−+++
2−title = "The Value of Urbit Address Space (1 of 3)"
3−date = "2020-04-06"
4−description = "An expansion of our position on Urbit's address space value."
5−
6−[extra]
7−author = "Erik Newton + Galen Wolfe-Pauly"
8−ship = "~patnes-rigtyn + ~ravmel-ropdyl"
9−image = "https://media.urbit.org/site/posts/essays/value-of-address-space-pt1.jpg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt1.jpg)
13−
14−_This is the first in a series of three posts on Urbit address space. See also [part 2](https://urbit.org/blog/value-of-address-space-pt2/) and [part 3](https://urbit.org/blog/value-of-address-space-pt3/)._
15−
16−## Part One – What/why, a history, and some analogies
17−
18−Does Urbit address space have value?
19−
20−The short — but perhaps not very useful — answer to this question is that yes, the market appears to believe that it does have value. This series of posts digs a bit deeper into why.
21−
22−As developers, we at Tlon tend to focus on building functionality rather than valuation models – possibly to our detriment. When we discuss Urbit address space, it’s typically about the technical elements, or the use cases.
23−
24−Now that people are using Urbit on a daily basis, we want to make sure that Urbit IDs (collectively “Urbit address space”) are well-understood. We thought it would be useful to explain our thinking about value, and to provide some of the building blocks that others can use to create their own valuation models.
25−
26−There’s a lot to discuss, so we’re breaking this discussion into three posts. The first explores what Urbit ID is, shares some history, and provides a few analogies that can help in understanding value on the network. The second looks at scarcity, utility, liquidity, and network effect. The third post explains lockups and availability.
27−
28−For a refresher about what we’re doing, check out our [introductory materials](https://urbit.org/understanding-urbit/) or [Urbit for Normies](https://urbit.org/blog/urbit-for-normies/).
29−
30−## Urbit ID basics
31−
32−In order to explore why Urbit IDs have value, we’ll start by explaining the basics of how they function.
33−
34−From one perspective, Urbit ID is simply a means of logging into Urbit OS. From another, Urbit IDs represent a new class of digital asset.
35−
36−From the standpoint of an ordinary Urbit user, Urbit ID is designed to be simple: it’s a login system for a new OS, but with one or two unusual qualities. Under the hood, your Urbit ID is your network address, your username, and a digital asset wallet. Anyone can use your Urbit ID to locate you on the network, and then send you messages (i.e. packets), or digital assets.
37−
38−We say that Urbit IDs represent a new form of digital asset for three reasons.
39−
40−1. Urbit ID is designed such that the user actually _owns_ their name. This means that Urbit IDs are transferable and tradeable. Conventional username and password schemes are merely claims to a bit of data on another party’s server. An Urbit ID, on the other hand, is a piece of cryptographic property on a public key infrastructure.
41−2. Urbit IDs have utility: they’re currently useful in the Urbit ecosystem, but beyond that they’re vastly extensible and they can be used for many more purposes. Owning an Urbit ID is a bit like holding a self-authenticating property title. If Bitcoin is money and smart contracts are law, Urbit ID is land.
42−3. Urbit IDs are scarce in order to discourage spam and abuse.
43−
44−We’ve often said that Urbit IDs have value because they’re useful and scarce. The fact that they’re being traded on platforms independent of Tlon seems to bear this out.
45−
46−## Urbit network structure
47−
48−The network of IDs is structured as a sponsorship tree consisting of 256 galaxies, ~65,000 stars, ~4B planets.
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^8^) stars to spawn.
51−
52−Stars similarly provide packet-routing and peer-discovery services, and spawn planets. Each unbooted star contains ~65,000 planets (2^16^).
53−
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−
56−Stars 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−
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−
60−The 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−
62−Today, Urbit ID is live and deployed. Each Urbit ID is represented by an ERC-721 non-fungible token. People buy and sell Urbit IDs every day and the number of transactions has been steadily increasing.
63−
64−So, fundamentally, Urbit ID is just a finite set of names and a system for assigning them. We’ve left out a few technical details here, but if you’re curious you can read our [introductory](https://urbit.org/understanding-urbit/urbit-id/) materials or, to go deeper, read the [docs](https://urbit.org/docs/) or the [source](https://github.com/urbit/azimuth).
65−
66−## Why we need a new address space
67−
68−In our view, the short history of the Internet has been a lesson in centralization and consolidation. DNS is a cabal of root servers. IP is essentially controlled by a single entity. All of our naming schemes have been more or less centralized. Certificate-signing is a mess of competing authorities. Search is Google. Hosting is AWS. And don’t even get us started on social networks.
69−
70−Centralization on its own isn’t bad, but it certainly has some negative implications, privacy being the most obvious. Beyond that, the naming schemes we have on the Internet today aren’t _personal;_ they’re not controlled by their users.
71−
72−Simultaneously working against this trend are a variety of decentralized web projects, various digital currencies, and dozens of protocols that are all focused on individual use and distributed ownership. But how do any of those actually surface to the mainstream? How do people identify themselves in this new digital world? Where do they call home? Where’s the Schelling point when they want to connect and work together?
73−
74−Urbit ID is the missing piece. It’s the minimally viable substrate for the digital world that’s been sketched out by Bitcoin, Ethereum, and all of their decentralized kin. From our perspective, the kit of decentralized technologies that exist today is designed for a world that’s only just coming into existence. That new world shouldn’t be owned by any one entity; it should be distributed. We believe that Urbit OS and Urbit ID are the right foundation for interacting in that world.
75−
76−The ownership structure of a new territory has a huge impact on its future shape. While most of Urbit ID remains an uninhabited grid, we see it as most likely to become a varied array of neighborhoods and cities. Not because this is a nice outcome, but because it’s the most economically likely one. More on the concept of neighborhoods below.
77−
78−## History and distribution
79−
80−So how did these ~4B names get initialized and distributed? Urbit address space was created _ex nihilo_ — from nothing but an idea — and then distributed directly to project contributors who helped develop the system.
81−
82−Now that the system is up and running, Urbit address space has steadily become more distributed. This arguably follows the distribution patterns of the Bitcoin UTXO set, and even historical distribution patterns of physical land.
83−
84−Let’s take a look at how this came to be.
85−
86−Urbit was originally an experimental personal project. The original Urbit address space registry was just a text file in the source code at that time. At the very beginning, all of the address space was owned by Curtis — its creator — and it was all pretty much worthless. In the years leading up to 2013, Curtis gave away galaxies to anyone who would help or contribute to the project, and to several people who were simply in the right place at the right time.
87−
88−Once Urbit became a working prototype, in mid 2013, a company (Tlon) got off the ground to help develop Urbit and a number of other developers joined. At this point, Tlon bought half the address space from Curtis for what now looks like an exceptionally good deal. Then Curtis and Tlon each earmarked a significant chunk of address space for infrastructure and community development — we refer to this as the urbit.org address space, and it’s held by Tlon.
89−
90−From 2014-2018 Tlon and Curtis both gave away address space to individual contributors who were helping with the project. In 2016 and 2017, Tlon sold some of its address space in two crowdsales to fund the development of Urbit (which formatted the Urbit address space as a user-facing system). These sales were focused on getting address space into the custody of users with an interest in the technology and developing the network.
91−
92−It was then decided that a public key infrastructure was the most logical way to instantiate ownership of Urbit address space. Thus, after much [consideration](https://urbit.org/blog/urbit-and-the-blockchain/), Urbit ID was deployed to Ethereum in January 2019 under a set of contracts called Azimuth. At this point, there were about 2000 star holders and around 80 galaxy holders. We can’t be sure how many independent holders there are now — the address space is entirely out of our hands — but the distribution has been steadily increasing. Addresses trade regularly on urbit.live and Opensea, and are sold by a few other smaller outlets like planet.market and Urbit Marketplace, all of which are independent of Tlon.
93−
94−## Analogues and the intrinsic value of address space
95−
96−We’ve often said that Urbit address space, particularly stars and galaxies, have intrinsic value that should be understood beyond simply the price of the planets they contain. Another way of putting this is that, because stars and galaxies are infrastructure nodes, they’re uniquely positioned to generate cash flow from activities on the network beyond simply selling their planets.
97−
98−This cash flow won't likely come from passive activity, but from actively working to develop businesses located on stars and galaxies. Let’s dig a bit deeper into these activities through the lens of some analogues to the existing world.
99−
100−### DNS
101−
102−We’ve often compared Urbit ID to the IPv4 and IPv6 systems. In this scheme, galaxies are much like [/8 blocks](https://en.wikipedia.org/wiki/List_of_assigned_/8_IPv4_address_blocks) of IPv4 addresses, while planets are much like individual IP addresses. The difference is that IP addresses are rarely owned by end users, and they’re typically assigned dynamically, so they tend to change. This is why IP addresses can’t be used to accrue reputation for end users or to prevent spam. It’s worth noting that while most of us don’t own our IP addresses; they are currently [traded](https://auctions.ipv4.global/) on the open market. As of the time of this writing, individual addresses are selling for ~$20. /8 blocks are extremely valuable, and none are currently on the market.
103−
104−### ISPs
105−
106−Another analogy that we often use is that of ISPs (Internet service providers). Stars in the Urbit network are the closest approximation here in that they help planets connect to the network. Ultimately, connections on Urbit are peer-to-peer, but stars provide initial connections, distribute software updates, and route packets when peer-to-peer connections don’t yet exist. These services all represent a cost, and we believe they’ll eventually be metered and priced.
107−
108−### CDNs
109−
110−CDNs (content delivery networks) are another useful comparison. Stars are perfectly positioned to play this role in the Urbit ecosystem. Because stars are designed as packet-routing infrastructure, they’re able to easily spin up greater bandwidth to service high-demand content, or to aggregate content. Stars can also act as content curators and providers, or as content filters for those who want a more narrow range of access. On the other end of that spectrum, stars could easily function as something similar to VPNs (virtual private networks) for any type of content.
111−
112−### Software distribution
113−
114−An infrastructure innovation that’s relevant here is that Urbit OS is specifically designed to make over-the-air (OTA) updates to the system — meaning software and updates are distributed automatically with no effort on the part of the end user. By default, planets and stars get their system updates from their sponsors. As the system evolves, we expect stars and galaxies to not only provide core system (kernel) updates, but also to act as software distribution hubs. Stars will distinguish themselves from one another by the quality of their service. Some might focus on speed of distrubtion; others on assesing the quality of the code they distribute. All of this represents effort on behalf of the star, and could act as a profit center for the star operator.
115−
116−### Payments and transactions
117−
118−On top of routing and software distribution, there are likely other worthwhile services for stars and galaxies to provide. A payments-focused star could run Bitcoin, Lightning or Ethereum nodes exclusively for sponsored planets. A trading-focused star could run a 0x relayer and provide an order book for sponsored planets. It’s easy to imagine machine learning or compute services being offered as a service; for example, a star could bolt on a TensorFlow chip and allow its sponsored planets to run computer functions for a fee.
119−
120−### Land
121−
122−We often use land as an analogy to describe Urbit address space. This is not simply because Urbit address space is finite or because IDs act as addresses on the network. It’s because Urbit is designed to be extremely extensible. Once you take possession of your Urbit — whether it’s a galaxy, star, or planet — you have immense flexibility: you can use it as-is out of the box, you can rearrange your environment, or you can go as far as writing code to create new functionality. Urbit address space is meant to be used productively. Urbit is very much territory for homesteaders.
123−
124−We expect that certain groups of Urbit IDs will be more valuable than other groups. There is no unit price for physical land — rather, price depends on location and a host of other factors. Similarly, we expect a range of prices to develop for Urbit IDs. We’ve already seen price variation around specific names and [sigil](https://urbit.org/blog/creating-sigils/) shapes.
125−
126−In the long term, the real value of an infrastructure node (a star or galaxy) is not simply in trading on the unit price of planets, but in developing and improving the real estate.
127−
128−### Dealer-operators
129−
130−Another approach to developing the value of address space that is already emerging is that of the dealer-operator. The most convenient way for an ordinary person to use Urbit is to have a planet hosted in the cloud so they can log in from any device. Because the long-term value of a star or galaxy is in providing services, and because most planets and stars need to be hosted, providers of these services have begun to emerge.
131−
132−These providers sell users a planet, host it for them, and deliver related services through their stars and galaxies. This means that with a couple of clicks an ordinary user could buy a planet, sign up for a hosting/routing bundle, get access to a set of services, and be immediately ready to interact with the community of their choice.
133−
134−There are plenty of other examples that we haven’t even imagined yet. The important thing is that stars will likely distinguish themselves through the services they provide. Since planets and stars can always change sponsors, a large part of the long-term monetization of a star or galaxy lies in the quality of service that a given star operator provides.
135−
136−This independent ecosystem has a secondary benefit of creating a varied tapestry of digital environments on Urbit, since every community and every dealer-operator can customize as they see fit. That variety will make the landscape much more interesting and ripe for exploration than anything we might create with the top-down approach found on centralized services. That variety will also likely cause a range of values for planets depending on their sponsor or “location”.
137−
138−This ecosystem has already begun to emerge. Both Tlon and urbit.live are working on developing services along these lines, and we’ve heard from several other entrepreneurs considering similar offerings. This is emerging not simply because it serves a user need, but because it’s the directional flow of the system. In other words, it’s the simplest way to monetize address space while avoiding the oligarchic, surveillance-based, advertising-oriented systems we’re stuck with today.
139−
140−To summarize, our view is that Urbit address space is valuable because it’s useful and it’s scarce (and it has network effect, but more on that later). What’s more, while the use case has already begun to take shape, it will grow in directions we can’t yet imagine because the system is designed to be extensible — Urbit is a homestead, not a hotel.
141−
142−We’re looking forward to seeing what the world builds with Urbit.
143−
144−In the next post in this series, we’ll explore the issues of scarcity, utility, liquidity, and network effect.
content/blog/value-of-address-space-pt2.mddeleted−141
@@ -1,141 +0,0 @@
1−+++
2−title = "The Value of Urbit Address Space (2 of 3)"
3−date = "2020-04-12"
4−description = "Scarcity, utility, liquidity, and network effect."
5−
6−[extra]
7−author = "Erik Newton + Galen Wolfe-Pauly"
8−ship = "~patnes-rigtyn + ~ravmel-ropdyl"
9−image = "https://media.urbit.org/site/posts/essays/value-of-address-space-pt2.jpg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt2.jpg)
13−
14−_This is the second 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 3](https://urbit.org/blog/value-of-address-space-pt3/)._
15−
16−## Measuring value
17−
18−Value and price are distinct concepts that often get conflated. In our view, Urbit address space has value for four fundamental reasons: it’s scarce; it has utility; it has some limited liquidity; and it has network effect. Price, on the other hand, is always a function of supply and demand, and it's not something we – as builders – concern ourselves with very much. Let’s take a look at these fundamentals within the Urbit ecosystem.
19−
20−## Scarcity
21−
22−256 galaxies, ~65,000 stars, ~4B planets.
23−
24−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt2a.svg)
25−
26−A foundational design principle of the Urbit network is that the address space is limited. This rarity helps qualify Urbit as a [collectible](https://nakamotoinstitute.org/shelling-out/), and thus creates a non-zero acquisition cost for an address. This cost discourages abuses like spam and bot-net attacks. Traditionally, these attacks are made with quasi-unlimited access to IP addresses. The unit economics of acquiring planets for these nefarious purposes is a strong deterrent.
27−
28−There are 256 galaxies on the network. Each galaxy is initialized with ownership of 255 stars. Galaxies act as root nodes for peer discovery and packet routing within the Urbit network, and they are each also entitled to vote on updates to the smart contracts which govern the network. To date, galaxies trade primarily on OTC (over the counter) desks, and rarely appear on the open market.
29−
30−There are 65,280 total stars on the network. In turn, each star is initialized with ownership of 65,535 planets. Stars currently trade on platforms independent of Tlon, such as [urbit.live](https://urbit.live/) and [opensea.io](https://opensea.io/). The current price range can easily be ascertained on those sites, but as of the time of this writing, stars are selling at a price that greatly discounts their planet holdings.
31−
32−One 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−
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−
36−That 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−
38−While an increase in the supply of Urbit address space is a technical possibility, it would run counter to the economic incentives of Urbit address space owners. This is why we view a galaxy vote to dilute address space as improbable.
39−
40−Scarcity may be sufficient alone to drive value, but it’s much more impactful when the unit has some underlying purpose, which brings us to utility.
41−
42−## Utility
43−
44−Utility (i.e. what Urbit addresses can be used for) has largely been addressed in the previous installation of this series. Briefly, our view is that stars and galaxies are useful for more than simply selling their subsidiary address space. Their use value encompasses their unique functionality on the network and the business models that functionality represents.
45−
46−As a refresher, this use value falls in five broad categories.
47−
48−1. Authentication technology is broadly useful. All Urbit identities — planets, stars, and galaxies — can be used for authenticating one’s Urbit computer, and for authentication in general. Urbit ID was designed for Urbit-specific authentication, but a lot of general functionality can be built on top of this infrastructure. Urbit ID is simple, extensible, and easy to use, making PGP style claims much more useful than they are today.
49−2. Network infrastructure services represent a potential revenue stream. Stars and galaxies specifically should be understood as providing their owners the opportunity to develop and use network infrastructure. We anticipate that stars and galaxies will eventually charge for infrastructure related services, like hosting and packet routing, and will distinguish themselves on quality and service.
50−3. Stars and galaxies are well positioned to offer additional services. Because of their role as high level network nodes, stars and galaxies are uniquely positioned to offer additional services, including content delivery networks (CDNs), Bitcoin and other blockchain-related nodes, 0x relays, and Tor exit nodes.
51−4. Schelling points have value. Because stars and galaxies hold a certain authority on the network (by dint of their relationship to their subsidiary nodes), they act as [Schelling points](https://nav.al/schelling-point), or default hubs, for various activities that will arise as the network grows. Already various groups and communities are beginning to collect around stars. This gravity has value and will eventually be priced.
52−5. Voting has value. Galaxies exclusively hold a vote on the network. This voting right can be separated from the galaxy itself and transferred, and we anticipate that this will happen eventually. The value of this right has not and may never be priced into the market, though as Urbit adoption grows, the value of a vote may emerge.
53−
54−Utility is only one component of a value calculation. To further develop the inquiry into value, let’s move on to trading factors.
55−
56−## Trading, volume, and liquidity
57−
58−Urbit IDs are individually represented by non-fungible ERC-721 tokens, and can therefore be sold by any platform that supports this token standard. Currently there are three known Urbit-exclusive sales platforms and one generalized ERC-721 platform that list Urbit IDs. Prices for stars and planets are readily available. Volume is low, as no effort has been made to promote the fact of availability, yet the number of [total transactions](https://azimuth.network/stats/events.txt) has increased steadily since the network was launched to Ethereum in 2019, even absent public messaging.
59−
60−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt2-tps.svg)
61−
62−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt2-tss.svg)
63−
64−Buying non-fungible tokens like Urbit IDs is rather different than trading quasi-fungible tokens like Bitcoin (even setting aside the issue of volume). Each Urbit ID is unique, and so they tend to be purchased by end users for their specific characteristics, rather than generically. As an example, the planet `~parret-barret` sold for about $1,000 at a time when most planets were selling for $10-20, perhaps due to its rhyming name. Planets with circular sigils also often sell for significantly more than other planets — we’re not entirely sure why this is the case.
65−
66−## Planet Sales
67−
68−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt2e-price-eth.svg)
69−
70−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt2e-price-btc.svg)
71−
72−## Star Sales
73−
74−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt2e-price-btc-usd.svg)
75−
76−This ID-specific trading pattern is generally appropriate in our view: Urbit ID isn’t designed to be rapidly traded at high volume. Urbit is more like a house than a fungible good like a currency.
77−
78−For the time being buying and selling of Urbit IDs happens through auctions on specific platforms, and via person-to-person transactions, because each transaction is for a _specific_ Urbit ID. Again, Urbit ID is designed in the spirit of property titles, rather than currencies, so this makes sense.
79−
80−Strictly speaking, liquidity is a measure of the degree to which a given asset will change in value due to a given transaction. In that sense, Urbit address space is likely fairly illiquid. But liquidity can’t be properly understood without volume. As noted above, the volume of transactions on the network has been steadily increasing since inception, and yet the price has remained fairly constant. This seems to indicate a healthy ratio.
81−
82−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt2b.svg)
83−
84−A further impact on liquidity and volume is that of available supply. At present, the majority of Urbit address space is locked by smart contracts. These lockups began to release at varying linear rates in January 2019. All address space will be completely unlocked and tradeable by January 2025. Eventually as both understanding and demand increase, we anticipate that planets will find an equilibrium price, and stars will be repriced accordingly.
85−
86−We’ll discuss lockups and spawning limits in more detail in the third installment of this series.
87−
88−In our view, this combination of scarcity, utility, and the above trading factors is a useful description of existing market dynamics for Urbit address space. A further description of why Urbit has value lies not just in its trading characteristics, but in the utility of human interaction. This brings us to network effect.
89−
90−## Network effect
91−
92−Much is made of the concept of network effect and its impact on network valuations generally. The concept is fairly straightforward so long as numbers aren’t applied. Broadly speaking, networks are interconnected systems of people or things. Network effects are mechanisms wherein every new user of a given system makes the system more valuable to every other user.
93−
94−Urbit is a network of networks, and it’s designed specifically for communities — for communication and collaboration. The more people who use Urbit, the more communities get started by design. The more communities there are, the more likely outsiders get pulled in to join them, and so the virtuous network effect cycle continues.
95−
96−Digging deeper, Urbit is unusual as a network for the following interrelated reasons:
97−
98−1. Urbit is a platform in the true sense; wherein
99−2. connections are peer-to-peer;
100−3. privacy is high;
101−4. discoverability is low;
102−5. customization and autonomy are nearly limitless; and yet
103−6. the number of possible groups and node connections is essentially unbounded.
104−
105−The upshot is that Urbit can serve as the meta-network for many different kinds of individual networks, each with their own value. Urbit is much more akin to the internet itself than it is to, say, Facebook. Reed’s and Metcalf’s laws therefore apply to Urbit in some very interesting ways.
106−
107−## Network laws
108−
109−Before diving into a discussion of network effect, it's worth noting that although individual tokens and users of those tokens benefit in various ways from a thriving network, the structure of the Urbit network does not grant token holders any rights to profits or losses "generated by the network" as a whole. In fact the very notion is counter to the intent of Urbit's ethos of decentralization. Individuals on the network may profit by their own activities, but there is no central authority profiting off activity in the aggregate; there is no ownership of the network as a whole, and so there are no centralized profits and losses to share. Address space tokens represent one's ownership of their own parcel of land as it were.
110−
111−That said, an entire continent may have aggregate value even though it is distributed. To explore this notion with regards to Urbit, it's worth reviewing the three laws typically cited to express the value of a network as a whole:
112−
113−- Sarnoff’s law states that the value of a network increases proportionally to its size. This is widely understood to understate the value of most modern networks.
114−- Metcalf’s law states that the value of a network is the square of the number of users (n^2).
115−- Reed’s law states that the value of a network increases with the number of groups that can be built on the network. This is expressed as 2^n, where n is the number of groups.
116−
117−Reed’s law captures the notion that groups vastly increase the density of connections on a network and so scale value more quickly.
118−
119−Urbit is a network of networks, and so is best described by Reed’s law.
120−
121−Urbit’s unique approach to groups also helps resolve two other problems which lead to value loss in many networks: Urbit’s design significantly reduces both network pollution (i.e. irrelevant feeds) and network congestion (clogged bandwidth), as individual clusters can easily separate their activity from other networks on the platform.
122−
123−## Urbit is a platform network
124−
125−It’s important to note that Urbit has utility absent the network, as Urbit OS is in fact a Turing-complete virtual computer. Though the system is designed around communities, individuals can use Urbit to create personal documents, archive data, and write code for the system. This is how Urbit’s total network size can be relatively small and still provide value for individual users and clusters. However, Urbit already has users, and for many of these, critical mass — the point at which the network is more valuable than its cost — has already been reached. In addition, as each of these individual clusters writes code for the platform, positive indirect network effects increase (more utility arises from these individual development efforts).
126−
127−This combination of effects makes Urbit significantly more robust than non-platform networks which can’t rely on this intrinsic utility.
128−
129−That said, we do not intend to ever rely simply on this individuated computing utility alone. Urbit is for communities, and Tlon’s primary focus is to increase adoption of the system as a whole, including the network. To this end we’re working steadily to increase functionality of the system, improve messaging, and actively onboard communities.
130−
131−## Network identity
132−
133−Another distinguishing characteristic of Urbit is that identities are pseudonymous but can easily be de-pseudonymized by users at will (though not by outside authorities). This flexibility combined with identity reputation accrual means people can behave in different ways depending on the social context. People can communicate privately, publicly, or in small groups, and they can do it anonymously or otherwise. This natural and extensible approach to social engagement results in personal comfort and drives adoption.
134−
135−## Extensibility
136−
137−Because Urbit is vastly customizable, and because it’s a network platform for other networks, it can and should grow in ways we can’t predict. Each new use case that develops creates a new market, new communities, and new hubs. Each of these contributes to the diversity of the overall ecosystem, making it vastly more interesting and diverse than anything we might create alone. We expect this extensibility to contribute greatly to retention as users are able to build the world they want to inhabit.
138−
139−Urbit is a deeply extensible platform for communities: it’s a network of networks. Users join to be part of communities, then launch communities of their own, further driving growth and engagement in a virtuous cycle.
140−
141−In the next installment of this series, we’ll describe lockups and availability in more detail and will share the data we’ve managed to compile about address space distribution.
content/blog/value-of-address-space-pt3.mddeleted−117
@@ -1,117 +0,0 @@
1−+++
2−title = "The Value of Urbit Address Space (3 of 3)"
3−date = "2020-07-09"
4−description = ""
5−
6−[extra]
7−author = "Erik Newton + Galen Wolfe-Pauly"
8−ship = "~patnes-rigtyn + ~ravmel-ropdyl"
9−image = "https://media.urbit.org/site/posts/essays/value-of-address-space-pt3.jpg"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/value-of-address-space-pt3.jpg)
13−
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/)._
15−
16−It has been some time since we revisited this series of posts, so let’s start with a summary.
17−
18−Our framework for understanding the value of Urbit address space is that it’s useful, it’s rare, it’s easy to exchange, and the more that people use it, the more useful it becomes. Let’s briefly review each concept in a little more detail.
19−
20−First, utility. Urbit address space was designed for logging into Urbit OS, but Urbit ID can be used as an identity primitive for any internet service. That means it’s vastly extensible. Perhaps more importantly, because Urbit IDs at the star and galaxy level represent network infrastructure for the Urbit network, users have already begun to build a range of business models upon them, from hosting providers to community hubs. We explored several of these possibilities in detail in the [first post](https://urbit.org/blog/value-of-address-space-pt1/) in the series, and we also provide a primer on Urbit ID itself.
21−
22−Second, Urbit address space is finite, and that means it’s scarce. This design, which we explained in more detail in the [second post](https://urbit.org/blog/value-of-address-space-pt2/) in the series, was intended to promote good behavior and to limit spam. So far, that has worked. Scarcity is also impacted by availability of supply, which we’ll explore in this post.
23−
24−Third, network effects, also described in the second post in this series, have the potential to build upon themselves quite rapidly within the Urbit ecosystem. Urbit is essentially a network of other networks, each owned and controlled by their individual users. For this reason, Urbit’s network effect is best described by Reed’s law, which argues that the value of a network increases with the number of groups that can be built on the network. In Urbit’s case, this number is essentially bounded only by the amount of data that can be stored in Urbit itself, which today is 2GB. That size is already enough to support vastly more groups than anyone has tried to launch, and we plan to grow beyond that limit in the coming year.
25−
26−Also in Part 2, we explored trading of Urbit address space. We look at the current price of stars and planets as denominated in both BTC, and USD, and we see that the price of Urbit address space has remained fairly constant since its launch on-chain, while volume has been steadily increasing. The market is continually developing, with more ways to buy and sell Urbit address space cropping up.
27−
28−So, to recap: our view is that the value of Urbit address space is a function of its utility, scarcity, network effects, and ease of trade.
29−
30−In this post, we don’t expand that framework, but rather explore two elements that are important to actually using the framework. We’ll explain lockups, since they impact scarcity, and we’ll discuss usage metrics — including why we don’t (and in most cases can’t) track them.
31−
32−## Lockups and spawning limits
33−
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.
35−
36−Booted and Unbooted Addresses –
37−
38−A booted address is one that has actually been used to boot Urbit OS. By convention, booted addresses are expected to have some existing reputation outside of their name alone, since they’ve been used on the network. Reputation, good and bad, comes in many forms. Did the address operate any useful infrastructure? Did it get placed on any blacklists for spam or abuse? Did it simply send and receive messages? The ability to programatically track reputation is still in its infancy, but we expect the tooling to develop as Urbit grows.
39−
40−Unbooted addresses, on the other hand, have no reputation. Both booted and unbooted addresses can be transferred between owners, but booted addresses will likely vary widely in price depending on the reputation each of them has acquired, and how they’ve been used.
41−
42−For the purposes of this discussion, we’re primarily referring to unbooted addresses, as they have no reputation, and so are more similar to one another. We anticipate that booted addresses will trade infrequently — and likely via broker or auction, since users will prefer to control the reputation of the ID they’ve developed, rather than transfer that reputation to another.
43−
44−Locked vs. Unlocked Addresses –
45−
46−At present, the majority of Urbit address space is locked by smart contracts. When Urbit address space was first registered on the Ethereum blockchain, this unlocking mechanism was put in place to prevent the network from being flooded with users. A young Urbit network in which all of the address space had been unlocked would be exposed to attacks by bots and spammers. Scarcity, on the other hand, encourages good behavior as it increases the cost to spam.
47−
48−A locked star is held in a contract and can neither be booted nor issue planets. The lockup contracts can be examined on [GitHub](https://github.com/urbit/azimuth).
49−
50−In practice, the only Urbit IDs that are ‘locked’ are stars. A galaxy that is said to be locked is simply a galaxy whose stars are currently held by a lockup contract. A locked galaxy can be transferred (i.e. sold or simply moved to a new key) and booted (importantly, any galaxy—booted or not—can vote), but it can’t issue stars until the lockup contract expires.
51−
52−![Star Unlocking Schedule](https://media.urbit.org/site/posts/essays/value-of-address-space-pt3-graph1.png)
53−
54−![Total Urbit IDs Spawned and Activated](https://media.urbit.org/site/posts/essays/value-of-address-space-pt3-graph2.png)
55−
56−These lockups all began to release at varying linear rates in January 2019 (specifically on Tue Jan 08 23:34:41 2019 UTC).
57−
58−The various linear unlocking schedules are grouped as follows:
59−
60−- The urbit.org addresses, and early prize winners unlock linearly from 2019-2021.
61−- Tlon, its founders, employees, and most purchasers from Tlon were frozen for a year, and now unlock linearly from 2020-2024.
62−- 2018 private buyers were frozen for a year, and then began to unlock linearly over the course of one or three years, depending on the terms of their respective contracts.
63−- Earlier private buyer addresses—including those in our first two crowdsales—were unlocked right away.
64−
65−As of January 2020, 17,283 stars were unlocked and tradeable. By January 2021, 33,355 will be available. On January 9, 2024, all 65,536 stars will be unlocked and available for trading.
66−
67−Being unlocked does not necessarily mean that a star can spawn all of its planets. For that calculation, we must turn to spawning limits.
68−
69−Spawning Limits –
70−
71−Unlocked stars are further gated by the number of planets they’re able to spawn. Every unlocked star was immediately able to spawn 1024 planets from the moment Urbit went live on the blockchain in January 2019—we wanted everyone to be able to invite some friends to their communities right away. From that date forward, the spawnable amount doubles every year (365 days), maxing out at 65,535 spawnable planets after 6 years.
72−
73−![Total Spawnable Planets and Spawnable Planets per Star](https://media.urbit.org/site/posts/essays/value-of-address-space-pt3-graph3.png)
74−
75−When we layer the spawning limits over the various lockup contracts, we find that all Urbit address space is both unlocked and spawnable by January 9, 2025.
76−
77−## Address space distribution
78−
79−Address space has continued to change hands since we put Urbit on-chain in January 2019. At that time, we had a fairly granular understanding of who owned what. Today we only have precise numbers for the Tlon and urbit.org owned address space. Galaxies change hands quite infrequently, so we know more about that ownership than stars and planets. We know next to nothing about the distribution of planets.
80−
81−We consider the opacity of our understanding about transactions on the network to be a privacy feature rather than a bug. To be specific about the information we can collect here: first, we don’t know anything about users beyond their ETH address, and second, we can’t tell the difference between a transfer of an address, and the re-keying of an address. This means we’re never entirely sure if a transfer has in fact occurred; we only know that the address has changed.
82−
83−The chart below is an estimate (as of January 2020) based on our general understanding of how galaxies are distributed. Much of this is anecdotal, and it’s largely based on the very few transactions we’ve observed within the galaxy table since Urbit went on chain in 2019. This chart should therefore be understood as incomplete, and an estimate only.
84−
85−![Estimated Galaxy Distribution](https://media.urbit.org/site/posts/essays/value-of-address-space-pt3-graph4.png)
86−
87−Address space distribution is best understood in terms of galaxies and stars independently, as they’re distinct assets. The chart above only illustrates galaxy distribution, but describes Tlon’s “naked” galaxy holdings, which are galaxies empty of their stars. These galaxies are empty because the stars they once contained have been distributed, primarily to Tlon contractors, employees, and to certain private buyers.
88−
89−We believe that wide distribution is important to the health of the network and the growth of Urbit as a whole. Our own distribution efforts are focused on disbursing Urbit address space ownership as broadly as possible to those interested in using and developing the network.
90−
91−We intend to further distribute Tlon’s address space over the coming years through private sales, employee compensation, grants, bounties, and gifts. It’s worth noting that the grants and bounties program specifically is set to increase in coming years. We’re very much interested in putting address space in the hands of people interested in helping develop the network; we see grants as the perfect mechanism for doing so.
92−
93−## Usage data and composition
94−
95−Usage data is an obvious missing piece of the puzzle in this discussion. We understand this, and yet we don’t actively capture usage data, for two important reasons: it’s premature, and Urbit is privacy-focused by design.
96−
97−First, it’s too early. Urbit’s current users are a fanbase of pioneers who are willing to put up with the challenges of a young network. This fanbase grows on its own, but Tlon doesn’t actively encourage that growth yet. For the vast majority of potential users, the barriers to entry are still high enough that an invitation would risk losing them permanently. You can think of Urbit today as being a developer alpha.
98−
99−We’re laying the groundwork so that we can, in earnest, invite our friends and communities to a network they will love. That means we’re designing smooth onboarding, an elegant user interface, and increasing the stability of both the system and network. Tlon’s forthcoming hosting services will vastly reduce barriers to entry, and will be our first major push into the public sphere.
100−
101−Second, and perhaps more importantly, capturing data about traction on the network is difficult by design. Due to Urbit's privacy-forward architecture, there’s quite a lot we will never know. Once an Urbit ID is up and running, we don’t know how often it operates, where it’s hosted, or what it’s doing. This makes capturing usage metrics challenging, but we think this is the right problem to have.
102−
103−The Network Explorer –
104−
105−In the next several months we plan to roll out the first iteration of a network explorer that will allow users to visualize the structure and composition of the network as well as some basic activity data. Our first version of the network explorer will include representations of how the various layers of address space fit together, the finiteness of address space, historical uptime for nodes, and the various unlocking schedules.
106−The network explorer will also allow users to zoom in on various nodes to learn more about them and what they offer.
107−Urbit’s privacy-forward design makes collection of data appropriately impossible in many cases. That said, the network explorer should begin to collect all the elements of the value framework we’ve laid out here in one dynamic visualization.
108−
109−Closing –
110−
111−We have long said that Urbit address space had value because it was both useful and scarce. Taking a deeper look, we found that some limited liquidity, and network effect also play an important role in the value framework.
112−
113−All of the factors that make up our framework are, in turn, impacted by availability of supply and by user growth. In the Urbit ecosystem, supply is effectively gated—as described above—in order to prevent flooding of the network.
114−
115−User growth, on the other hand, is something we simply have not yet pursued in earnest. Instead, our development efforts have been focused on enhancing usability and stability of the platform. Our focus on user growth will begin as we roll out hosting. Once that happens, usage metrics will become both more interesting and more relevant.
116−
117−This concludes the final installment of our series on the value of Urbit address space. Though the explanation was long, the framework is quite simple: value in Urbit is derived from its use, scarcity, some liquidity, and network effect. Let us know if you’d like us to dig deeper into any of these elements—we’re always happy to opine about Urbit.
content/blog/why-hoon.mddeleted−274
@@ -1,274 +0,0 @@
1−+++
2−title = "Why Hoon?"
3−date = "2019-11-13"
4−description = "The promise of Urbit lies in its reimagination of the digital world using components that are as constrained and limited as possible."
5−
6−[extra]
7−author = "Ted Blackman"
8−ship = "~rovnys-ricfer"
9−image = "https://media.urbit.org/site/posts/essays/hoon.png"
10−+++
11−
12−![](https://media.urbit.org/site/posts/essays/hoon.png)
13−
14−### What can Hoon do that other languages can't?
15−
16−The short answer is: implement a purely functional operating system.
17−Try to do this in a principled way in Haskell, and the problems you'll
18−run into will make design decisions in Hoon and Nock make a lot more
19−sense.
20−
21−In particular, the problems Hoon solves that aren't solved by other
22−functional languages are:
23−
24−- Compile and run other code in a typesafe manner at full speed,
25−- Typesafe metaprogramming, and
26−- Hot code reload and online data migration.
27−
28−### What is Hoon good at?
29−
30−Hoon is mostly good at compiling and running other Hoon code. Urbit
31−consists of many layers of bootstrapping. Several of these layers lean
32−heavily on this feature, including the Gall application runner, the Ford
33−build system, the Dojo shell, and the Arvo kernel itself. Even Urbit's
34−chat application lets you run Hoon expressions and share the results
35−with your friends.
36−
37−### Why did we write the OS in Hoon?
38−
39−The chain of reasoning goes something like this:
40−
41−Software complexity leads to monopolies and lack of individual digital
42−sovereignty, in addition to bugs and security vulnerabilities. One of
43−the best ways to reduce software complexity is to restrict oneself to
44−pure mathematical functions — no side effects, no implicit arguments.
45−This makes the system deterministic. So we want a deterministic,
46−functional operating system for individuals to run.
47−
48−This operating system should also be axiomatic; we don't want it to
49−depend on various idiosyncrasies of whatever the current hardware is
50−like. Hardware changes over time, and we want people to be able to pass
51−their computers on to their grandchildren, so we should have a virtual
52−machine that runs this functional operating system.
53−
54−As hardware changes, people need to move their virtual machines to new
55−hosts. This means there needs to be a standard way to serialize and
56−deserialize the VM state at any time. The easiest way to do this is by
57−storing an event log, just like a database, and writing each event to
58−that before emitting effects caused by it. Since we also need state
59−snapshots, every piece of data in the system, including runtime state,
60−needs to be serializable to a standardized format.
61−
62−Because the VM will likely move from host to host many times, it needs
63−to be tractable to actually implement a VM correctly. This means the
64−system specification needs to be simple enough that it's clear whether a
65−VM is in fact correct. The x86_64 instruction set that runs most
66−servers has somewhere between 1300 and 4000 opcodes, depending on how
67−you count. Nock has 12.
68−
69−Since Urbit is an operating system, its main purpose is to load and run
70−programs on behalf of the user. This means the system needs to be
71−really good at hot code reloading, self-hosting, metacircularity, and
72−virtualization.
73−
74−There aren't any other languages out there that are purely functional,
75−purely axiomatic, performant enough for practical personal use,
76−universally serializable, and good at runtime metaprogramming. Nock is
77−Urbit's solution to these design constraints. Some Lisps come close to
78−meeting these criteria — and Nock is very Lisp-like — but no practical
79−Lisp dialects are nearly as pure or axiomatic as Nock.
80−
81−### What is special about Hoon?
82−
83−It's a purely functional systems language. Calling it a functional
84−analog of C is not too far off in several ways. Almost all code
85−throughout Urbit's kernelspace and userspace is written in Hoon.
86−
87−### What properties does Hoon have? What type of language is it?
88−
89−Hoon is a statically typed, purely functional, strictly evaluated
90−programming language.
91−
92−Hoon and Nock have several unusual properties:
93−
94−- **Axiomatic**. Nock is a fully axiomatic computing system — no
95− dependencies, no builtins, no hardware dependence — just pure math.
96− The jet system gives this a practical level of performance.
97−
98−- **Layered**. Nock is machine code designed for machines to run; Hoon is a
99− programming language designed for people to use. Hoon layers over
100− Nock in a very similar way to how C layers over machine code. Nock
101− has no symbols; all programmer-facing variable names live in Hoon
102− types. You can use raw Nock from Hoon, much like dropping down to
103− assembly from within C. Hoon compiles to Nock with no "runtime
104− system" — aside from subtree lookups, you could pretty easily compile
105− most Hoon expressions by hand.
106−
107−- **Minimal**. Urbit is ruthlessly minimalistic throughout the stack. Nock
108− has only twelve opcodes, and Hoon's semantics are a very thin layer
109− over Nock's. The only fundamental datatype in Urbit is the noun:
110− either an arbitrarily large natural number, called an atom, or a pair
111− of nouns, called a cell. This forms a binary tree with atoms at the
112− leaves. Lists, sets, maps, queues, executable code, closures, ASTs,
113− buffers, strings, floating-point numbers, and everything else in the
114− whole programming environment are represented using just this data
115− structure.
116−
117−- **Acyclic**. There are no cycles in nouns, since they're always trees, so
118− there are no cycles in Nock's memory model. Pointer equality is not
119− exposed to the programmer. In practical Nock implementations, all
120− data structures are what are elsewhere called "functional" or
121− "persistent" data structures, meaning they're immutable and share
122− structure wherever possible.
123−
124−- **Homoiconic**. Code and data are represented the same way and can be
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
127− environment are just Nock trees. We even have a statically typed
128− metacircular interpreter called `+mule`. We run userspace code
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,
131− eval is a first-class feature.
132−
133−- **Universally serializable**. There's one serialization format, called
134− "jam", for any piece of code or data in the system. This makes it so
135− that deserialization has just one function, a few hundred lines of C,
136− as its security attack surface. It also facilitates portability of
137− the virtual machine state, since this function can be called on the
138− top-level VM state itself to generate a portable snapshot.
139−
140−- **Jetted**. A jet is a piece of code that the Nock interpreter has that
141− reimplements a Nock function in some other, faster language. The `+dec`
142− decrement function in Hoon's standard library is defined axiomatically
143− using recursion, but is run as a jet written in C that makes use of
144− the processor's ALU for performance. When calling a Nock function, if
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
147− considering it's a minimal, dynamic, axiomatic language.
148−
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
151− executed directly but might never run at all due to being jetted.
152− Cryptographic functions, for example, should all have jets with
153− constant-time implementations to prevent timing attacks. Most jets,
154− though, just take advantage of hardware acceleration for things like
155− floating point arithmetic.
156−
157−- The amount of Hoon syntax is unusually large, but also **unusually
158− regular**. Hoon is a "runic" language, meaning expressions generally
159− begin with a digraph "rune" corresponding to the type of expression.
160− Runes are used in place of keywords and Lisp's "special forms".
161− Hoon's syntax makes better use of screen real estate than Haskell or
162− Lisp by having a mostly vertical "backbone" of runes that prevents
163− long functions from indenting repeatedly and helps quickly identify
164− control flow. Hoon does not allow syntactic abstraction, so you
165− always know exactly what you're looking at when reading Hoon. The
166− similarity of Hoon's syntax to its abstract syntax tree makes
167− metaprogramming easier and can be thought of as another layer of
168− homoiconicity on top of Nock's.
169−
170−- **Subject-oriented**. There is no implicit environment; a Hoon expression
171− compiles down to a Nock formula, which is interpreted as a function
172− that runs with the "subject" as the argument. The subject can be any
173− Nock tree, but it contains everything that's in scope. It usually
174− consists of the Hoon compiler and standard library as a stack of
175− cores, along with whatever functions and variables have been defined
176− in the lexical scope.
177−
178−- **Cores**. A core is a pair of code and data. The core is the underlying
179− representation of a function (a lambda with implicit fixed point), a
180− library or module, an OOP-style object, and an OOP-style "interface"
181− or "protocol". The code consists of a set of Nock formulas that can
182− each be run against the whole core as a subject. This means there's
183− always an implicit fixed point when running a function, and mutual
184− recursion can occur among a core's formulas. A core's data usually
185− consists of the standard library (itself a stack of cores), and
186− possibly a "sample" (function argument).
187−
188−- **The type system has several unusual features**. It's intensional, in
189− the sense that all constructs are first-class and can be up-cast to
190− `noun`, Hoon's "any" or "top" type that matches all Nock nouns. Types
191− are also used as scopes, so they store all of Hoon's variable names
192− and docstrings. The type system uses an unusual macro-like feature
193− called "wetness" to implement parametric polymorphism. The type
194− system can also auto-generate coercion functions that validate and
195− lift raw nouns into structural types, such as lists or cells. This is
196− used to validate untrusted data, such as from the network.
197−
198−- **Reflective**. The type of type is just a normal datatype in Hoon, and a
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
201− produce something called a "vase": a pair of type and data, similar to
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
204− to implement something akin to a dynamically typed language using
205− Hoon. This allows for type-safe dynamic program loading, program
206− execution, and data migration.
207−
208−- **Inert**. Because Nock is purely functional, Hoon compiles to it so
209− directly, everything is homoiconic, and Hoon is intensional, there's a
210− very nice feeling that everything is just a stationary tree. There
211− are no special objects that can't be manipulated; everything in your
212− environment is just a subtree, and you could grab it and print it out
213− if you wanted to. There's nothing like a "database handle",
214− "websocket connection object", or other mystical constructs. The
215− calmness of working with such inert building blocks is addictive, as
216− many Hoon programmers will attest.
217−
218−### Why is Hoon the way it is?
219−
220−Minimalism, mostly.
221−
222−Urbit's principled minimalism simplifies all kinds of things at many
223−layers of the stack; for example, Urbit's linker, which is part of the
224−Ford build system, just conses together multiple libraries into a tuple
225−to form the compile-time environment for a source file. Universal
226−serialization means we can safely send arbitrary pieces of data to apps
227−on other ships without any more work than sending them to a local app.
228−Using an app called Aquarium that's about three hundred lines of code,
229−Arvo can run a whole fleet of other Arvos inside itself at full speed,
230−just like Docker, and perform a suite of deterministic end-to-end tests
231−on the OS as a whole.
232−
233−Even Hoon's seemingly baroque syntax is extremely regular and an
234−unusually thin layer over the abstract syntax tree. It's designed to be
235−a power tool; learning the syntax takes some time, but you only have to
236−learn it once, and then it's not hard to read. It's like an English
237−speaker learning Hiragana or Cyrillic. This heaping spoonful of syntactic sugar
238−(along with jets for performance) is enough to take Nock from a Turing
239−tarpit to a practical, ergonomic programming tool.
240−
241−Subject orientation in Nock and Hoon stems partly from minimalism
242−(there's just one subject, which serves as state, lexical scope,
243−environment, and function argument), partly from a desire to simplify
244−compilation (the type of the subject is a full specification of the
245−compile-time environment for a source file), and partly in order to give
246−the language a more imperative feel.
247−
248−You program Hoon as if you have a mutable environment, but you're
249−embedded in a purely functional, immutable context. While Hoon is a
250−purely functional language, many of its runes create a mutant copy of
251−the subject for manipulation by future runes (similar to Forth's stack
252−operations), which makes it feel more like an expression is "doing
253−something" rather than just calculating something.
254−
255−Everything about a scope, including name bindings, aliases, and
256−docstrings, is stored in the subject's type. This allows Hoon's
257−compilation discipline to be similarly minimal: the compiler is a
258−function from subject type and Hoon source to product type and compiled
259−Nock. Running this Nock against a value of the subject type produces a
260−vase of the result. It's hard to imagine a more streamlined formalism for compilation.
261−
262−The compilation discipline gets applied recursively to build the layers
263−of the Arvo stack. The Arvo kernel is compiled using the Hoon compiler
264−as subject, the Zuse standard library is compiled using the Arvo kernel
265−as the subject, and apps and vanes (kernel modules) are compiled using
266−Zuse as the subject.
267−
268−The promise of Urbit lies in its reimagination of the digital world
269−using components that are as constrained and limited as possible. By
270−adhering firmly to principle and doubling down on minimalism at every
271−turn, we get an OS that provides far stronger guarantees than Unix with
272−a thousand times less code. Given the complexity of modern software,
273−this is what's required to put personal computing back into the hands of
274−people.
content/blog/your-last-computer.mddeleted−36
@@ -1,36 +0,0 @@
1−+++
2−title = "Your Last Computer"
3−date = "2019-10-16"
4−description = "Your 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."
5−
6−[extra]
7−image = "https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-waves%402x.png"
8−+++
9−
10−This whole ‘simple, durable, yours’ thing may sound good, but what does it add up to? What does it feel like?
11−
12−First, let’s talk about what it should feel like in the future.
13−
14−![](https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-waves%402x.png)
15−
16−Imagine 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−
18−You 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−
20−![](https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-is-rock%402x.png)
21−
22−We’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−
24−The stripped-down Urbit – Urbit OS 1 – starts out as a new kind of social network.
25−
26−Today, each of our social tools does one thing. And so each of our communities ends up spanning multiple services. Urbit OS 1 gives you the tools to bring these together into one place.
27−
28−In Urbit OS 1, a community shares a set of modules. (Think of a module like an app without the data lock-in.) One community may choose to chat and share a forum. Another may choose to chat and watch the crypto markets. And yet another may chat, share links, ebooks, and a to-do list. Anyone can develop a module, and anyone can create a community.
29−
30−It’s a simple system for intentional digital communities. A first step away from the ill-formed digital world of today. We like to call it ‘social computing’ — on the surface it feels like a new kind of app, but under the hood it’s an OS. It’s customizable all the way down.
31−
32−We 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−
34−![](https://media.urbit.org/site/understanding-urbit/your-last-computer/your-last-computer-ocean%402x.png)
35−
36−Your 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/bounties.mddeleted−54
@@ -1,54 +0,0 @@
1−+++
2−title = "Guide to Bounties"
3−date = "2023-01-04"
4−weight = 1
5−description = "A guide to posting and claiming bounties"
6−+++
7−
8−Bounties are opportunities to do work on Urbit in exchange for address space or other funding. Bounties can be provided by companies, DAOs or individuals ("sponsors") in the Urbit universe. To the extent that they benefit the rest of the universe, the Urbit Foundation will [chip in on funding](#funding).
9−
10−For **workers**, bounties offer substantial funding opportunities and, compared to [apprenticeships](/grants/apprenticeships), are a way to take on larger challenges in a more autonomous manner. Learn how to [work on a bounty here](#work-on-a-bounty).
11−
12−For **sponsors**, bounties allow you to scale your workforce through the Urbit community, get critical tools built, or just fund cool projects that you want to see exist. Learn how to [post a bounty here](#post-a-bounty).
13−
14−## Work on a Bounty
15−
16−You can see [open bounties here](/grants?program=bounty&open=true&wip=false&completed=false#view-grants), which can claimed by filling out the form on each individual bounty.
17−
18−### How it works
19−
20−After applying, the Urbit Foundation will circulate the details of your application to the sponsor and schedule a follow-up interview to see if you would be a good fit for the project. Should your application be accepted, you will undergo a quick KYC process and recieve a contract for signature. Some bounties may also entail additional direct compensation from the sponsor for which the Urbit Foundation is not responsible for managing; please discuss these parameters directly with your sponsor.
21−
22−The sponsor of the bounty is ultimately responsible for signing off on completed work. They'll also be the primary point of contact while work is underway, although the Urbit Foundation may assign personnel to assist on bounties that it is particularly invested in.
23−
24−Sponsors are vetted by the Urbit Foundation as trustworthy to ensure their ability to fund the work that they post. The Urbit Foundation also collaborates heavily with sponsors to ensure that the bounty is [well-specified](#well-specified-bounties), which ensures that your project is both properly scoped and technically viable.
25−
26−### Getting Paid
27−
28−After you've finished your work on a given milestone, you will need to get signoff from your sponsor. To do this, contact your sponsor with the details of the milestone completed, any relevant instructions, github repos, or app download links, and solicit review from your sponsor. They can submit their approval to the Foundation by contacting `~marfun-pacpet`, at which point you are ready to [submit an invoice](https://airtable.com/shrXXCs1uaxtNSBcg). Once the Urbit Foudnation receives approval from your sponsor and an invoice for the amount agreed upon in your grant or milestone, the Foundation will pay your star allocation to the Ethereum address you have provided.
29−
30−We approve and issue payments within 30 days of invoice receipt and approval, although often payment is made more quickly. If you have any questions regarding getting paid or submitting an invoice, please contact `~marfun-pacpet` for assistance.
31−
32−## Post a Bounty
33−
34−To get started posting a new bounty, [submit it via this form](https://airtable.com/shr6ky4yshlhhqSm0).
35−
36−We at the Urbit Foundation will work with you to ensure that all bounties have [clear specifications](#well-specified-bounties) &mdash; this ensures that they get what you pay for. If your bounty submission is missing details or could be otherwise improved, we'll provide that feedback and work with you to refine your bounty.
37−
38−### Well-specified Bounties
39−
40−A well-specified bounty generally has these elements:
41−
42−- **Overview**: A clear description of what the worker will do to complete this bounty. It's a good idea to include a problem statement or rationale for the work.
43−- **Project Requirements**: An articulation of what constitutes complete work. User stories, Figma designs, interface specifications, and other technical constraints are all examples of requirements. It is recommended to reference any specific requirements &mdash; such as key user stories &mdash; on a milestone level to ensure clarity in which requirements need to be met at each stage of the project.
44−- **Worker Requirements**: A description of the skills and/or qualifications required of a prospective worker. Technologies or skills known, years of experience, work schedule (e.g. time availability), and demonstrable accomplishments are all examples of this.
45−- **Milestones**: Logical segments of work that can be considered done on their own. Breaking the project up into smaller pieces will help a new worker pick up the work should that be necessary, keeps the worker motivated with incremental achievement and remuneration, and is generally a sign of a clear specification. Milestones don't always make sense; sometimes there's only one.
46−- **Timeline**: If you're trying hit a certain deadline, make sure to specify absolute dates on the milestones. Otherwise, use relative dates (e.g. _two months_) to give the worker an idea of how long each milestone will take. This helps form an agreement between the sponsor and worker on volume of work, and grounds to seek other arrangements should schedules be missed.
47−
48−The more detail in the bounty's specification, the better the results and the smoother your working relationship will be with a contributor. Once a contributor has been selected, parameters such as absolute dates or other open ended questions will be updated prior to contract to ensure there are clear expectations for all parties involved
49−
50−### Funding
51−
52−You're free to fund your bounty with as much of your own capital as you'd like. You can also request funding from the Urbit Foundation.
53−
54−We fund projects based on their benefit to the whole network. If your bounty is for contributions to Urbit itself, or other technical infrastructure, we might fund all of it. If the bounty is to build or contribute to your company's product, we'll be open to funding less of it.
content/bounty.mdnew file+11
@@ -0,0 +1,11 @@
1++++
2+title = "Bug Bounties"
3++++
4+
5+We are in the process of designing our Bug Bounty Program. In the meantime, if you believe you have discovered a bug or vulnerability in our code, please report it to [security@tlon.io](mailto:security@tlon.io).
6+
7+We'll review the issue, and a member of our dev team will get back to you ASAP. If your bug has merit, we'll work with you to fix it, and award a bounty based on the severity of the bug. We determine severity using the [CVSS](https://www.first.org/cvss/calculator/3.0) model.
8+
9+Once the fix is complete, we'll publish a full retrospective in the interests of transparency. If the bug leaks prior to the retrospective being published, the bounty is void.
10+
11+We look forward to working with you.
content/campus/_index.mddeleted−37
@@ -1,37 +0,0 @@
1−+++
2−title = "Software Developers"
3−slug = "software-developers"
4−description = "Getting started as a software developer on Urbit"
5−sort_by = "weight"
6−+++
7−
8−
9−Urbit offers foundational primitives that make it easy to build decentralized applications. This means developers can focus on creativity and application logic instead of operations to make sure the server or database doesn't go down.
10−
11−
12−Here are a few links to resources for developers:
13−
14−
15−### [Urbit Developers Overview](https://developers.urbit.org/)
16−An overview of using Urbit for development.
17−
18−### [Lightning Tutorials](https://developers.urbit.org/guides/quickstart/intro)
19−Get a feel for the process of making and deploying an Urbit app in half an hour, no previous experience required.
20−
21−### [Core Curriculum](https://developers.urbit.org/guides/core)
22−Learn the Urbit stack at your own pace.
23−
24−The Foundation also regularly runs a series of cohort-based live courses that go over the core curriculum, free and open to all. One lesson per week over the course of about eight weeks.
25−
26−### [Live Courses](https://developers.urbit.org/courses)
27−Learn the Urbit stack as part of a group.
28−
29−### [New Hooniverse](https://urbit.org/groups/~hiddev-dannut/new-hooniverse)
30−Discussion group for learning the Urbit stack. Open to beginner, intermediate, and advanced developers.
31−
32−
33−### [TomeDB](https://holium.gitbook.io/tomedb/)
34−A framework for building Urbit apps solely with Javascript.
35−
36−### [Grants](https://urbit.org/grants)
37−Build on Urbit and take ownership of the network in the process.
content/campus/blockchain-enthusiasts.mddeleted−35
@@ -1,35 +0,0 @@
1−+++
2−title = "Blockchain Enthusiasts"
3−slug = "blockchain-enthusiasts"
4−description = "Learn how sound computing and sound money fit together"
5−weight = 4
6−[extra]
7−flatten_pagination = "true"
8−hide_next_title = "true"
9−hide_previous_title = "true"
10−image = "https://media.urbit.org/site/understanding-urbit/urbit-id/urbit-id-cards%402x.png"
11−+++
12−
13−We have yet to see the promised Cambrian explosion of general-purpose decentralized applications promised by blockchains. What happened?
14−
15−While blockchains are good for some problems, there remain others where a more general purpose computing solution is more useful. This is precisely what Urbit is for. Urbit’s vision of sound, easy-to-use, decentralized computing dovetails neatly with that of sound, easy-to-use, decentralized money.
16−
17−Learn more on how Urbit and blockchains work together:
18−
19−### [Bitcoin on Urbit: The Sovereign Stack](https://urbit.org/bitcoin)
20−How Urbit and Bitcoin fit together
21−
22−### [Azimuth](https://developers.urbit.org/reference/azimuth/azimuth)
23−Urbit’s PKI system on Ethereum
24−
25−### [Uqbar](https://uqbar.network)
26−The Urbit-native blockchain
27−
28−The leader in this space is Uqbar, an Urbit-native layer 2 blockchain that settles on Ethereum.
29−
30−From their [clearpaper](https://uqbar-network.gitbook.io/uqbar-clearpaper/uqbar-clearpaper/uqbar-clearpaper):
31−
32−>Leveraging Urbit’s peer-to-peer infrastructure, Uqbar provides a blockchain-native decentralized operating system uniquely positioned to deliver the composable primitives necessary to build a rich, functional distributed application layer. It fuses the trusted settlement of Ethereum with the decentralization, security, and interoperability benefits of full-scale peer-to-peer networking, unlocking the latent power of programmable blockchains.
33−
34−
35−
content/campus/creatives.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "Creatives"
3−slug = "creatives"
4−description = "Urbit for everyone"
5−weight = 5
6−[extra]
7−+++
8−
9−Urbit offers creatives the means to truly own the distribution of their work. An application becomes a tool you own rather than a service whose terms can change overnight. And with digital ownership on a decentralized network, the incentives of advertising based centralized services and an attention economy no longer apply.
10−
11−What would the world look like with more decentralized digital ownership? Check out the links below for a preview.
12−
13−### [Tirrel Studio](https://urbit.studio)
14−
15−Host, publish, and earn on Urbit. See the [Mars Review of Books.](https://marsreview.org/)
16−
17−
18−### [Meetup Grant](https://urbit.org/grants/community-meetups)
19−
20−Through our Grants program, the foundation rewards community-builders who
21−host regular meetups and help people learn about the project.
content/coinmarketcap.mddeleted−8
@@ -1,8 +0,0 @@
1−+++
2−title = "CoinMarketCap"
3−[extra]
4−hidetitle = "true"
5−index = "true"
6−+++
7−
8−The ticket number for CoinMarketCap verification is 429809.
content/communities/urbit-austin.mddeleted−11
@@ -1,11 +0,0 @@
1−+++
2−title = "Urbit Austin"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-austin.png"
5−+++
6−
7−Curious about Urbit? Questions about Hoon syntax? Fed up with the current state of the internet? Join us to talk about the internet's future.
8−
9−––
10−
11−[Meetup page](https://www.meetup.com/Urbit-Austin/)
content/communities/urbit-berlin.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "Urbit Berlin"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-berlin.png"
5−+++
6−
7−If you are sick of the current state of the web, of handing over your data and entire online presence to a handful of American corporations, of a web fueled with ads, then Urbit might be for you.
8−
9−Are you curious about Urbit and want to try it? Are you an Urbit OG looking to find to find others? Do you want to build your own peer-to-peer apps and leave the centralized web behind?
10−
11−We meet regularly in Berlin, and we try to have a theme or presentation for each meetup.
12−
13−
14−––
15−
16−[Meetup page](https://www.meetup.com/urbit-berlin/)
content/communities/urbit-christchurch.mddeleted−13
@@ -1,13 +0,0 @@
1−+++
2−title = "Urbit Christchurch"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-christchurch.jpg"
5−+++
6−
7−Curious about Urbit? Questions about Hoon syntax? Fed up with the current state of the internet? Join us to talk about the internet's future.
8−
9−––
10−
11−[Eventbrite](https://chchurbit.eventbrite.com)
12−
13−[Telegram](https://t.me/chchurbit)
content/communities/urbit-cph.mddeleted−11
@@ -1,11 +0,0 @@
1−+++
2−title = "Urbit København"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-cph.png"
5−+++
6−
7−~norsyr-torryn/nordics
8−
9−––
10−
11−[Twitter](https://twitter.com/UrbitCPH)
content/communities/urbit-dc.mddeleted−19
@@ -1,19 +0,0 @@
1−+++
2−title = "DC Metro Urbit Meetup Group"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-dc.png"
5−+++
6−
7−This is a DC/Northern Virginia/Southern Maryland Urbit discussion group.
8−
9−It is for Urbit users or the urbit-curious or people who like to think and talk about decentralization, independence, and freedom on the internet.
10−
11−We will socialize, discuss urbit and related topics, and support lab and learning activities.
12−
13−Find us on urbit chat at ~tillys-fasryp/nova-urbit-meetup-lobby-3347
14−
15−––
16−
17−[Meetup page](https://www.meetup.com/dc-urbit-meetup-group/)
18−
19−[Twitter](https://twitter.com/dcurbit)
content/communities/urbit-denver.mddeleted−19
@@ -1,19 +0,0 @@
1−+++
2−title = "Urbit Denver"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-denver.png"
5−+++
6−
7−While Urbit is the animating force behind this group, people of all interest levels & familiarity with the project - be they long-time users, or newcomers simply wondering what the heck Urbit is - are welcome & encouraged to attend these meet-ups. The conversations are lively and span a wide variety of topics, ranging from Urbit to philosophy, tech, crypto, the arts, health and well-being, and much more.
8−
9−Our goal is simply to build a community of people interested in the project and the future it envisions, in which members can freely connect and discuss the project and the various ideas & values adjacent to it.
10−
11−And for those wondering what the heck is Urbit? Urbit is an ambitious reimagining of what the internet can be; it is a virtual computer and peer-to-peer network, built on a philosophy of human-scale computing, where you own all your data and identity. Urbit strives to once again make the computer a useful tool under the control of the user, and not vice versa. Still confused? Stop by and we'll (try to) explain it.
12−
13−––
14−
15−~nospex-larsut/mile-high-mars
16−
17−[Meetup page](https://www.meetup.com/mile-high-mars-denver-urbit-group/)
18−
19−[Organizer's Twitter](https://twitter.com/OnAPersonaLevel)
content/communities/urbit-london.mddeleted−15
@@ -1,15 +0,0 @@
1−+++
2−title = "Urbit London"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-london.jpg"
5−+++
6−
7−Urbit London is a monthly, occasionally biweekly, meet-up series aiming to establish a long-lasting community within the London tech and cultural scene.
8−
9−––
10−
11−~tichus-holnet/urblon
12−
13−[Twitter](https://twitter.com/urblon)
14−
15−[Telegram](https://t.me/urblon)
content/communities/urbit-mst.mddeleted−13
@@ -1,13 +0,0 @@
1−+++
2−title = "Urbit MST (Utah)"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-utah.png"
5−+++
6−
7−Are you looking for more than the options presented to you?
8−
9−Come to our Urbit (MST) meetup. All are welcome. Bring a computer and we can onboard you with a planet and hosting for free on site. Whether you are new to Urbit or fluent in Hoon, come and meet others in Utah interested in Urbit.
10−
11−––
12−
13−[Website](https://urbitmst.org/)
content/communities/urbit-ny.mddeleted−11
@@ -1,11 +0,0 @@
1−+++
2−title = "Urbit NY"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-ny.png"
5−+++
6−
7−We love experimenting with Urbit & tinkering with Arvo, Hoon, & Nock
8−
9−––
10−
11−[Meetup page](https://www.meetup.com/Urbit-New-York/)
content/communities/urbit-paris.mddeleted−23
@@ -1,23 +0,0 @@
1−+++
2−title = "Urbit Paris"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbitparis.png"
5−+++
6−
7−Join us for our monthly Urbit meetups in Paris!
8−
9−Whether you're a tech enthusiast, an established Urbit aficionado, or a newcomer to the scene, our community is meant to welcome and engage everyone.
10−
11−If you're confused about what Urbit is, no worries, most people are at first. Drop by and we'll give you our best explanations of what Urbit is and how it's going to change the internet as we know it.
12−
13−We'll introduce Urbit, help you boot your own ship, and make sure you go back home all set!
14−
15−See you there!
16−
17−––
18−
19−~solsup-soplyd/urbit-paris
20−
21−[Twitter](https://twitter.com/urbitparis)
22−
23−[Meetup](https://www.meetup.com/urbit-paris/)
content/communities/urbit-seattle.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Urbit Seattle"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-seattle.png"
5−+++
6−
7−Urbit is a simple, durable computer that you own 100% and forever. In this group, we'll discuss ongoing project developments, technical details, and how to use Urbit. With occasional speakers that will present on various topics.
8−
9−
10−––
11−
12−[Meetup page](https://www.meetup.com/urbit-seattle/)
13−
14−[Twitter](https://twitter.com/SeattleUrbit)
content/communities/urbit-sf.mddeleted−15
@@ -1,15 +0,0 @@
1−+++
2−title = "Urbit SF"
3−description = ""
4−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-sf.png"
5−+++
6−
7−Want to own and control the server side? Your digital identity, data and computation?
8−
9−So do we — so we're building Urbit. We set this group up for anyone excited about this kind of stuff, even those who think we're totally crazy.
10−
11−Come join us to talk about what the future of the internet might look like.
12−
13−––
14−
15−[Meetup page](https://www.meetup.com/urbit-sf/)
content/docsnew file+1

Submodule changed.

content/ecosystem/spotlight/2022-august.mddeleted−44
@@ -1,44 +0,0 @@
1−+++
2−title = "August 2022"
3−date = "2022-07-27"
4−
5−[featured-1]
6−title = "Software as Soulcraft and the Metaphysics of Engineering with Neal Davis"
7−description = "Professor Neal Davis Discusses why Urbit computers have souls, Shinto philosophy, and more"
8−image=""
9−content = """
10−Urbit Foundation’s Director of Developer Experience Neal Davis discusses the philosophy of development on Urbit in a wide ranging conversation that covers everything from the spirit of objects and why it’s not obvious that nuclear fusion would be of benefit to mankind.
11−
12−{% iframe height="220" src="https://www.youtube.com/embed/8f8vk1BhlDo" title="YouTube video player" width="100%" /%}
13−
14−
15−"""
16−
17−[featured-2]
18−title = "Studio"
19−description = "Need a personal website, fast? Studio can set one up in under a minute."
20−content = """
21−Studio is an application from [Tirrel](/organizations/tirrel) which enables Urbit users to turn a Groups notebook into a public blog with just a few clicks.
22−
23−One can enable comments, multiple templates, and even integrate with Sendgrid to send new posts as email updates.
24−
25−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/studio.png)
26−
27−
28−Tirrel has announced on their blog that Studio’s next release will include USD payments integration, allowing individuals to use Urbit to make a storefront and accept USD.
29−
30−While most Urbit applications are focused on activity within the Urbit universe, Studio is unique in its focus on connecting the fiat and clearweb worlds to Urbit.
31−
32−"""
33−
34−[featured-3]
35−title = "The Mars Review of Books"
36−description = "The Mars Review of Books is a magazine in print and on Urbit covering both contemporary arts and culture as well as global sociopolitical issues."
37−content = """
38−
39−The Mars Review of Books is the first literary publication hosted on Urbit. Its inaugural issue includes an article on nuclear fusion from Urbit Foundation's [Neal Davis](https://urbit.org/ids/~lagrev-nocfep), book reviews from writer and man-about-town [Christian Lorentzen](https://twitter.com/xlorentzen), and reflections on millennial romance from Twitter personality [Default Friend](https://twitter.com/default_friend). The MRB can be purchased in [physical form](https://store.marsreview.org) or [read online](https://marsreview.org).
40−
41−![Mars Review in Print](https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/marsreview-issue1.jpg)
42−
43−"""
44−+++
content/ecosystem/spotlight/2022-december.mddeleted−40
@@ -1,40 +0,0 @@
1−+++
2−title = "December 2022"
3−date = "2022-11-29"
4−
5−[featured-1]
6−title = "UF Public"
7−description = "The best place to get the latest updates from the team at the Urbit Foundation."
8−image="https://interstellar.nyc3.digitaloceanspaces.com/battus-datsun/2022.11.07..19.39.22-Sig.png"
9−content = """
10−Join the new and improved Urbit Foundation group to get updates from the Urbit Foundation spanning infrastructure development, developer activity, ecosystem news, announcements, and ways to get involved.
11−
12−
13−"""
14−
15−[featured-2]
16−title = "Groups"
17−description = "The new Groups application from Tlon is officially available."
18−content = """
19−
20−Test drive the future of Urbit now with Tlon's initial release of of Groups. This version features improved discoverability with features like searching by nickname, and creating public, private, or secret groups.
21−
22−Groups is part of the new Landscape suite of applications, and integrates seamlessly with Talk, Gallery, and Notes.
23−
24−Join the [Tlon group](/groups/~nibset-napwyn/tlon-public) for more information.
25−
26−![](https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/groups.jpg)
27−
28−"""
29−
30−[featured-3]
31−
32−title = "Scene"
33−image=""
34−description = "Explore Urbit with tirrel's desktop app, Scene."
35−content = """
36−
37−Tirrel is developing an outside-the-browser Urbit experience geared towards content creators. Check out their vision for Urbit as a desktop application.
38−
39−"""
40−+++
content/ecosystem/spotlight/2022-november.mddeleted−42
@@ -1,42 +0,0 @@
1−+++
2−title = "November 2022"
3−date = "2022-10-28"
4−
5−[featured-1]
6−title = "radio"
7−description = "Join or create shared environments for chatting and DJing with YouTube."
8−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/radio-card.jpg"
9−content = """
10−Assembly Capital recently released radio, an app that lets you create or tune into rooms where you can collaboratively DJ with other users on the network.
11−
12−Radio turns the algorithm-driven institution that is Youtube into an experience that's more like watching an old TV with just a few channels with your friends.
13−
14−Developer ~nodmyn-dosrux writes "Radio is the first urbit app with presence built in. Accurate presence data creates a socially charged experience ... Presence gives people reason to engage with each other. Our natural social impulses disincentivize “lurking”, but this doesn’t work when software makes us invisible."
15−
16−
17−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/radio.png)
18−
19−"""
20−
21−[featured-2]
22−title = "Three Things #40: October 23, 2022"
23−description = "What the heck is Urbit?"
24−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/articles/3things40.jpg"
25−content = """
26−
27−Lane Rettig takes on the challenge of defining Urbit.
28−
29−
30−"""
31−
32−[featured-3]
33−
34−title = "E12 - The Gang Does an Urbit Maxi Episode"
35−image=""
36−description = "Ted Blackman joins the Uqbar crew to discuss Assembly 2022, composability and the future of Urbit."
37−content = """
38−
39−This episode of [Uqbar](/organizations/uqbar)'s podcast asks important questions like "How do we evaluate Urbit?" and "Is Urbit ready for outside investment?" in this unique episode with long-time Urbit core developer Ted Blackman.
40−
41−"""
42−+++
content/ecosystem/spotlight/2022-october.mddeleted−41
@@ -1,41 +0,0 @@
1−+++
2−title = "October 2022"
3−date = "2022-10-03"
4−
5−[featured-1]
6−title = "Uqbar Development Suite"
7−description = "Write smart contracts and blockchain applications in an integrated development suite."
8−image=""
9−content = """
10−At Assembly 2022 Uqbar debuted their brand new developer toolkit: Ziggurat. Ziggurat provides a unified development interface where programmers can write contracts, receive compiler feedback, and test on a fake chain. This promises a huge improvement on the developer experience for smart contracts and blockchain application development alike. Note: As Ziggurat is in active development and undergoing frequent updates, Uqbar recommends installing Ziggurat on a moon rather than your primary ship.
11−
12−
13−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/uqbar-code.png)
14−
15−"""
16−
17−[featured-2]
18−title = "Tlon"
19−description = "The organization that created Urbit is now focused on building the best possible foundational user experiences on Urbit."
20−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/tlonlogos.png"
21−content = """
22−
23−Tlon is the organization responsible for the genesis of Urbit and now focused on creating lasting and effective tools for Urbit. Formerly rather quiet about its development activity, Tlon has recently launched a [beautiful public website](https://tlon.io) and is sharing more of its process in the new [Tlon public group](/groups/~nibset-napwyn/tlon-public).
24−
25−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/tlonio.png)
26−
27−
28−"""
29−
30−[featured-3]
31−
32−title = "The Dream of Digital Homesteading"
33−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/compact-thumb2.png"
34−description = "Compact Magazine's managing editor Geoff Shullenberger attended Assembly 2022 and tuned into both the event vibes and Urbit's technical aspirations."
35−content = """
36−
37−Compact Magazine provides a clear-eyed view of both the social and technical visions of the Urbit community as well as the literary milieu around it.
38−![](https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/thedreamofdigitalhomesteading.png)
39−
40−"""
41−+++
content/ecosystem/spotlight/2022-september.mddeleted−45
@@ -1,45 +0,0 @@
1−+++
2−title = "September 2022"
3−date = "2022-08-29"
4−
5−[featured-1]
6−title = "sphinx"
7−description = "Browse your urbit network with Urbit's first submission and search engine."
8−image=""
9−content = """
10−Sphinx is Urbit’s first search engine. Unlike traditional web search engines, sphinx uses a gossip mechanism originally found in ~paldev’s rumors, so that anything you and your pals post is shared to your pals, as well as pals of pals.
11−
12−You can currently submit and search for applications, groups, and content (notebooks and collections), as well as browse by tag.
13−
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/sphinx2.png)
15−
16−"""
17−
18−[featured-2]
19−title = "peat"
20−description = "Back up your urbit with peat, Urbit's first backup utility."
21−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/peat-thumb.png"
22−content = """
23−
24−Peat is Urbit’s first backup utility. Prior to Peat, there was no easy way to backup content from groups from your ship aside from copying your entire urbit. Peat makes it easy to export all your data from Groups, which uses the graph-store data structure, and in the future will provide support for the new structure in Tlon’s upcoming Groups revamp.
25−
26−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/peat.png)
27−
28−
29−"""
30−
31−[featured-3]
32−
33−title = "Josh Lehman: Urbit – The Peer-to-Peer Network Re-Decentralizing the Internet"
34−description = "Urbit Foundation Executive Director Josh Lehman and Epicenter host Brian Crain have a wide ranging discussion on Urbit's history and future."
35−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/epicenterjoshthumb.jpg"
36−
37−content = """
38−
39−In this podcast Urbit Foundation Executive Director Josh Lehman provides a broad overview of that state of Urbit as of 2022, and what people can expecture in the near future and beyond.
40−
41−{% iframe height="150" src="https://www.youtube.com/embed/DqqUM-L_-2s" title="YouTube video player" width="100%" /%}
42−
43−
44−"""
45−+++
content/ecosystem/spotlight/2023-february.mddeleted−48
@@ -1,48 +0,0 @@
1−+++
2−title = "February 2023"
3−date = "2023-02-01"
4−
5−[featured-1]
6−title = "Realm"
7−description = "Realm is a desktop Urbit interface from that offers a variety of integrated features."
8−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/realm-hero.png"
9−content = """
10−
11−Realm proposes an Urbit experience that is outside the browser, running as a full-screen cross-platform native application. It offers features like shared application suites, built-in audio chatrooms, an integrated crypto wallet, as well as its own web browser.
12−
13−![](https://media.urbit.org/site/featured/realm-screenshot.jpg)
14−
15−Realm is the flagship product of Holium, who are also building out several collaboration tools akin to a cloud productivity suite for Urbit and Realm. These applications can be bundled together into unique spaces – desktop environments that have been configured for communities and teams.
16−
17−![](https:///media.urbit.org/site/ecosystem/applications/app-suite.png)
18−
19−Realm is currently in private alpha. Visit [holium.com](https://holium.com) to sign up for the invitation waitlist. In the meantime, you can also enjoy an [entertaining podcast](/podcasts/2023-01-24_reject-triviality) in which Holium founder `~lomder-librun` talks about his vision for Realm, amongst many other interesting topics.
20−
21−"""
22−
23−[featured-2]
24−title = "Native Planet"
25−description = "Native Planet is building Urbit-native hardware as well software which enables standalone Urbit home servers."
26−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/native-planet-thumb.jpg"
27−content = """
28−
29−Native Planet is Urbit's first dedicated hardware company. Their first product, the [Tellurian](https://www.nativeplanet.io/hardware), is a turnkey Urbit computer that you can run at home and access anywhere thanks to Native Planet's open-source [software](https://www.nativeplanet.io/software).
30−
31−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/getting-started/native-planet.jpg)
32−
33−What's the point of having a physical Urbit computer, besides the fact that they look very cool?
34−
35−You get the best of both worlds: the accessibility of cloud hosting, with the ownership of running Urbit locally. Groundseg and Startram make your Urbit accessible to any networked device without the need to trust any cloud service provider.
36−
37−
38−"""
39−
40−[featured-3]
41−title = "Urbit for Idiots | Galen Wolfe-Pauly, Tlon Corporation"
42−description = "Tlon CEO Galen Wolfe-Pauly talks to the Boys Club ladies and expounds on the fundamentals of Urbit."
43−image=""
44−content = """
45−
46−Is Urbit a computer? Is owning 'space' on the internet valuable? What is Urbit? How is it different from the the existing internet? Galen and Boys Club get to the bottom of these evergreen topics.
47−"""
48−+++
content/ecosystem/spotlight/2023-june.mddeleted−40
@@ -1,40 +0,0 @@
1−+++
2−title = "June 2023"
3−date = "2023-06-05"
4−
5−[featured-1]
6−title = "Labyrinth DAO"
7−description = ""
8−image=""
9−content = """
10−
11−Labyrinth DAO is a new decentralized autonomous organization for investing in Urbit projects. Supported by [Tribute Labs](https://tributelabs.xyz/), Labyrinth DAO will foster the growth and development of Urbit as it paves the way for the new internet. Find Labyrinth DAO on [Twitter](https://twitter.com/labyrinth_dao) or connect at labyrinthdao.io to get involved.
12−
13−
14−"""
15−
16−[featured-2]
17−title = "Osmosis"
18−description = ""
19−image=""
20−content = """
21−
22−Holium’s AJ LaMarc (~larryx-woldyr) has built Urbit front-ends for Uniswap, Osmosis, and Safe. This means that you can now swap or hold tokens and access your multi-sig from the comfort of your Urbit. You don’t have to rely on centralized services to provide interfaces for your favorite web3 platforms. You can download these apps on your Urbit today.
23−
24−Get
25−[Osmosis](/applications/~larryx-woldyr/osmosis) |
26−[Uniswap](/applications/~larryx-woldyr/uniswap) |
27−[Safe](/applications/~larryx-woldyr/safe)
28−
29−"""
30−
31−[featured-3]
32−title = "Zorp"
33−description = ""
34−image=""
35−content = """
36−
37−Zorp has built a secure-by-design zero-knowledge virtual machine (zkVM) with a uniquely minimal software supply chain which utilizes Nock as its instruction set. Nock, Urbit’s low-level language, is a famously simple instruction set. That property aligns itself well with what you might create if you were designing a language from first principles to do zero-knowledge proofs. Zorp’s zkVM could unlock new possibilities for crypto and more. Check back at Zorp’s [website](https://zorp.io/) and [Twitter](https://twitter.com/ZorpZK) for more info.
38−
39−"""
40−+++
content/ecosystem/spotlight/2023-may.mddeleted−50
@@ -1,50 +0,0 @@
1−+++
2−title = "May 2023"
3−date = "2023-05-01"
4−
5−[featured-1]
6−title = "The Mars Review of Books"
7−description = "The Mars Review of Books is a magazine in print and on Urbit. The third issue is now available in print and on online."
8−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/mrb3-thumb.png"
9−content = """
10−
11−The *Mars Review of Books*, a magazine in print and on Urbit, recently put out its third issue — with pieces from Sean Thor Conroe, Marc Hochstein, Miles Routledge, Peter Nimitz and more. And now for the first time, the *MRB* is selling digital and print subscriptions exclusively through Urbit.
12−
13−![Mars Review in Print](https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/mrb3.png)
14−
15−Using payment rails from [Studio](http://localhost:3000/applications/~tirrel/studio) by [Tirrel](https://tirrel.io/), you can now plug in your credit card and subscribe directly to content hosted on an Urbit owned and operated by the people producing the content (in this case, the ~bidbel star).
16−
17−Visit marsreview.org to subscribe to the magazine, buy a print copy of Issue 3, or read selected unpaywalled pieces online.
18−
19−
20−"""
21−
22−[featured-2]
23−title = "Portal"
24−description = "Find and curate Urbit apps, groups, and media from fellow Urbit users"
25−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/portal.svg"
26−content = """
27−
28−Portal is a lot like this ecosystem section of the Urbit website, except *on Urbit*. It’s a great place to find Urbit apps, Urbit groups, and recent media about your favorite Urbit developers and community members.
29−
30−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/portal-screenshot.png)
31−
32−Because Portal is on Urbit, networking among peers is built in. Anyone using Portal can curate their own list of apps and groups, and display that to other Portal users. It’s a great proof of concept for the way decentralized curation can work, a lot of fun to use, and the perfect place to start for anyone trying out Urbit for the first time.
33−
34−You’ll have to check it out on Urbit at ~worpet-bildet/portal
35−
36−"""
37−
38−[featured-3]
39−title = "%blog"
40−description = "Host a blog on your urbit with this application from ~dachus-tiprel."
41−image="https://storage.googleapis.com/media.urbit.org/site/ecosystem/spotlight/blog-thumb.png"
42−content = """
43−
44−Blog is just what it sounds like. A new tool from Uqbar, the app lets anyone on Urbit spin up and customize a blog that displays to the net at an auto-generated URL. Nothing could be breezier. Plus it’s got payments through Uqbar and group-blogging settings on the roadmap. Find out more about it on its [creator's blog](https://dachus-tiprel.tlon.network/blog/introducing-blog).
45−
46−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/ecosystem/applications/blog.png)
47−
48−Download it at ~hanrut-sillet-dachus-tiprel/blog and let the world know what’s on your mind. Bonus feature: a simple command allows you to automatically publish the URL of your latest blog entry to the notorious [Rumors](applications/~paldev/rumors) app.
49−"""
50−+++
content/events/2017-08-11-after-hours-bootstrapping-urbit-from-the-ethereum-blockchain.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "After hours: Bootstrapping Urbit from the Ethereum blockchain"
3−ends = "2017-08-12T19:00:00.000-07:00"
4−pinned = false
5−location = "Urbit Office"
6−image = ""
7−registration_url = "https://www.meetup.com/urbit-sf/events/242295411/"
8−description = "This time we'll be opening up the office, opening up a few cold ones, and talking about Urbit + Ethereum."
9−guests = ""
10−timezone = "America/Los_Angeles"
11−starts = "2017-08-12T16:00:00.000-07:00"
12−
13−[[hosts]]
14−name = "Urbit"
15−+++
16−
17−One thing that's been keeping us busy over the past month is designing the relationship between Urbit and the Ethereum blockchain.  We'll present our current design for this (from ~8:30 - 9) for people to comment on and ask questions about.
18−
19−Otherwise, as usual, there will be plenty of time to hang out and chat with other Urbit people.
20−
21−The backyard is really nice in the evening!  Feel free to bring friends"
content/events/2017-09-22-after-hours-fun-with-arvo-the-urbit-os.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "After hours: Fun with %arvo (the Urbit OS)"
3−ends = "2017-09-23T19:00:00.000-07:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/243213975/"
7−description = "Same as usual: cold drinks in the backyard with the hoons.  Come meet other people crazy enough to want to replace the internet."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2017-09-23T16:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−Ted, the newest addition to our team, has been working on making changes to %arvo all over the place.  He'll give a short talk about some of his adventures in the Urbit OS and how they're going to make Urbit faster and easier to use.
17−
18−That, and discussing why Equifax should have never been holding all that customer data in the first place.
19−
20−Oh yeah, and we just got a fresh batch of Nock shirts!"
content/events/2017-10-26-after-hours-designing-robust-human-systems.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "After hours: Designing robust human systems"
3−ends = "2017-10-27T19:00:00.000-07:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/244316080/"
7−description = "The office will be open and the beer will be cold.  Come hang out and talk about all things Urbit and Urbit related.  Cryptoeconomics, protocols, architecture, Japanese poetry, ancient aqueducts.  You get the idea."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2017-10-27T16:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−Galen is going to give a short (~20m) talk on designing robust human systems.  No code, no math, no time in the terminal.  This is a completely non-technical talk about design principles.  It was originally given at the IDEO Blueprint event a few weeks ago.
17−
18−Above all, these meetups are for meeting other people crazy enough to think the internet can be replaced.
19−
20−Feel free to bring friends!
content/events/2017-11-16-after-hours-visiting-contributors.mddeleted−17
@@ -1,17 +0,0 @@
1−+++
2−title = "After hours: Visiting contributors"
3−ends = "2017-11-17T19:00:00.000-08:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/245090392/"
7−description = "We've moved! Come check out our new digs, have a beer and hear about what people have been working on."
8−timezone = "America/Los_Angeles"
9−starts = "2017-11-17T16:00:00.000-08:00"
10−
11−[[hosts]]
12−name = "Urbit"
13−+++
14−
15−This week we have ~mastyr-morzod, ~littel-ponnys and ~mastyr-harlud visiting the office. They've all been contributing great stuff from afar, so we figured out how to get them all in the same room to hack on Urbit for the week. On Thursday evening they'll talk about what they've been coming up with.
16−
17−We'll also spend plenty of time just hanging around and talking about Parity, BCH, and everything else crypto-related. Feel free to bring friends!"
content/events/2018-01-26-urbit-irl-20181.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit IRL ~2018.1"
3−ends = "2018-01-27T18:00:00.000-08:00"
4−location = "Urbit office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/246972285/"
7−description = "Happy New Year!"
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-01-27T16:00:00.000-08:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−Turns out that just getting Urbit fans in one room is pretty fun — so come join. No demos or talks this time. Just some time to hang, listen to music and meet up IRL. The room is full of desks and the internet is pretty fast. So impromptu demos and tutorials are the norm. Bring your laptop and we'll install Urbit for you.
17−
18−Feel free to bring friends!"
content/events/2018-02-23-urbit-irl-20182.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit IRL ~2018.2"
3−ends = "2018-02-24T19:00:00.000-08:00"
4−location = "Urbit office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/247797527/"
7−description = "Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have something to drink."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-02-24T16:00:00.000-08:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−No demos or talks. Just some time to hang, listen to music and meet up IRL. The room is full of desks and the internet is pretty fast. So impromptu demos and tutorials are the norm. Bring your laptop and we'll install Urbit for you. Or just relax and talk to people.
17−
18−Feel free to bring friends!"
content/events/2018-03-11-20183-hoon-school.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "~2018.3 Hoon School"
3−ends = "2018-03-12T19:00:00.000-07:00"
4−location = "Urbit office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/248416276/"
7−description = "Come, bring your laptop, and we'll get you started building things in Urbit's language — Hoon."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-03-12T16:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−There's no lesson per-se, think of it more like an 'independent projects' class. A few of us will be around to help you get started working on whatever you're interested in. It's completely fine if you're new to the language. We're going to start with only 10 spots so we can help everyone individually.
content/events/2018-03-23-urbit-irl-20183.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit IRL ~2018.3"
3−ends = "2018-03-24T19:00:00.000-07:00"
4−location = "Urbit office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/248852261/"
7−description = "Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have a beer."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-03-24T16:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−No demos or talks. Just some time to hang, listen to music and meet up IRL. The room is full of desks and the internet is pretty fast. So impromptu demos and tutorials are the norm. Bring your laptop and we'll install Urbit for you. Or just relax and talk to the weird array of people who also want to replace the internet.
17−
18−Feel free to bring friends!
content/events/2018-04-08-20184-hoon-school.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "~2018.4 Hoon School"
3−ends = "2018-04-09T00:00:00.000-07:00"
4−location = "Urbit office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/249019207/"
7−description = "Come, bring your laptop, and we'll get you started building things in Urbit's language — Hoon."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-04-08T21:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−There's no lesson per-se, think of it more like an 'independent projects' class. A few of us will be around to help you get started working on whatever you're interested in. It's completely fine if you're new to the language. We're going to start with 20 spots so we can help everyone individually.
content/events/2018-05-25-urbit-irl-20185.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit IRL ~2018.5"
3−ends = "2018-05-26T19:00:00.000-07:00"
4−location = "Urbit office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/250889557/"
7−description = "Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have a beer (or wine)."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-05-26T16:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−Ted will give a quick update on Urbit's new build system, ford. Then it's time to hang, listen to music (our friend Grayson will be playing records) and meet up IRL. The room is full of desks and the internet is pretty fast. Impromptu demos and tutorials are the norm. Bring your laptop and we'll install Urbit for you. Or just relax and talk to the weird array of people who also want to replace the internet.
17−
18−Feel free to bring friends!
content/events/2018-08-03-after-hours-decentralized-web-summit.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "After hours 'decentralized web summit'"
3−ends = "2018-08-04T15:00:00.000-07:00"
4−location = "Orbit Room"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/253423219/"
7−description = "We’re hosting a last minute happy hour for our friends in town for the Decentralized Web Summit. All are welcome to join us tomorrow, Friday, August 3 at the Orbit Room from 5-7PM."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-08-04T13:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
content/events/2018-08-17-urbit-irl-20188.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit IRL ~2018.8"
3−ends = "2018-08-18T18:00:00.000-07:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/253292678/"
7−description = "UPDATE: Hey Everyone! Due to a conflict, we are rescheduling our gathering to the following Friday, August 17."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-08-18T16:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have a beer.
17−
18−No demos or talks this time, but we will be hosting Hoon School again soon. Just some time to hang, listen to music and meet up IRL. The room is full of desks and the internet is pretty fast. So impromptu demos and tutorials are the norm. Bring your laptop and we'll install Urbit for you. Or just relax and talk to the weird array of people who also want to replace the internet.
19−
20−Feel free to bring friends!
content/events/2018-09-21-urbit-irl-20189.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit IRL ~2018.9"
3−ends = "2018-09-22T19:00:00.000-07:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/254602025/"
7−description = "Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have a beer (or wine)."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-09-22T16:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−Gavin will give an update on Urbit design at 8:30. Then it's time to hang, listen to music and meet up IRL. The room has tables and the internet is pretty fast. Impromptu demos and tutorials are the norm. Bring your laptop and we'll install Urbit for you. Or just relax and talk to the weird array of people who also want to replace the internet.
17−
18−Feel free to bring friends!
content/events/2018-10-10-urbit-zcash-blockchain-week.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Urbit + Zcash: 'Blockchain Week'"
3−ends = "2018-10-11T18:00:00.000-07:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/255001807/"
7−description = "We're all full and looking forward to seeing you tonight. After you check-in at the front door please come up to floor 2, room 222."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-10-11T15:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−~Schedule
17−
18−7 - 8: Come on time for hot pizza!
19−
20−8 - 8:30: Alejandro Machado, researcher, advocate, and member of the Zcash community will speak
21−
22−8:30 - 9: Galen Wolfe-Pauly will tell you things about Urbit and our wallet
23−
24−9 - 10: Hangout
content/events/2018-12-20-after-hours-its-just-a-party-man.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "After hours: It's just a party, man"
3−ends = "2018-12-21T18:00:00.000-08:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/256732938/"
7−description = "We had a busy and productive 2018. This time around, we're just going to play music and relax."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2018-12-21T15:00:00.000-08:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−Come have a beer, connect with Urbit developers, fans and friends IRL, and ask questions about the address space going on-chain (if you have them).
17−
18−Feel free to bring friends!
content/events/2019-03-01-after-hours-ask-galen-anything.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "After hours: Ask Galen Anything"
3−ends = "2019-03-02T06:30:00.000-08:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/259144802/"
7−description = "We thought we'd try something new this month. Come hang out and ask Galen questions about Azimuth, Arvo, or any part of Urbit."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2019-03-02T15:30:00.000-08:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−8:00-9:00pm: AMA
17−
18−Afterwards, have a beer, connect with Urbit developers, fans, and friends IRL.
19−
20−Feel free to bring friends and share the primer. [https://urbit.org/primer](https://urbit.org/primer)
content/events/2019-03-08-urbit-irl-austin-tx.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "Urbit IRL: Austin, TX"
3−ends = "2019-03-09T15:00:00.000-08:00"
4−location = "Garage"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/259307805/"
7−description = "We're coming to Austin, TX! It turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have a drink on us. Feel free to bring friends and come early for Urbit shirts."
8−guests = ""
9−timezone = "America/Chicago"
10−starts = "2019-03-09T13:00:00.000-08:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−Thank you to our friends over at Garage for hosting us. We'll be there from 5-7 PM.
content/events/2019-04-19-urbit-irl-20194.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit IRL ~2019.4"
3−ends = "2019-04-20T18:00:00.000-07:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/260326318/"
7−description = "Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have a beer (or wine)."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2019-04-20T15:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−By popular demand: we'll try to keep this one QUIET so everybody can talk.
17−
18−Come for a quick update on what we're working on. Stay to relax and talk to a weird array of people who also want to replace the internet.
19−
20−Feel free to bring friends!
content/events/2019-05-17-urbit-irl-20195.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit IRL ~2019.5"
3−ends = "2019-05-18T18:00:00.000-07:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/261110620/"
7−description = "Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have a beer, or wine."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2019-05-18T15:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−This time we'll give a brief update on what we've been up to around 8pm. Turning the music down worked well, so we'll do that again. And if you want help installing Urbit, bring a laptop.
17−
18−Feel free to bring friends!
content/events/2019-06-21-urbit-irl-20196.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit IRL ~2019.6"
3−ends = "2019-06-22T18:00:00.000-07:00"
4−location = "Urbit Office"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/262079477/"
7−description = "Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and have some beer and pizza."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2019-06-22T15:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Urbit"
14−+++
15−
16−This time we'll give a brief update on what we've been up to around 8pm. Turning the music down worked well, so we'll do that again. And if you want help installing Urbit, bring a laptop.
17−
18−Feel free to bring friends!
content/events/2019-07-19-urbit-irl-20197.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit IRL ~2019.7"
3−ends = "2019-07-20T18:00:00.000-07:00"
4−location = "Urbit Office"
5−image = "https://secure.meetupstatic.com/photos/event/e/0/5/b/600_482817435.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/262858100/"
7−description = "Turns out that just getting Urbit fans in one room is pretty fun — so come hang out and chat with old and new friends over a beer."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2019-07-20T15:00:00.000-07:00"
11−dark = "true"
12−darken_image = "true"
13−
14−[[hosts]]
15−name = "Urbit"
16−+++
17−
18−Turning the music down has worked well, so we'll continue doing that. And if you want help installing Urbit, bring a laptop.
19−
20−Feel free to bring friends!
content/events/2019-08-29-urbit-austin-20198.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit Austin ~2019.8"
3−ends = "2019-08-30T16:00:00.000-07:00"
4−location = "Garage"
5−image = "https://secure.meetupstatic.com/photos/event/a/8/d/4/600_483643220.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/263655974/"
7−description = "Thanks to our friends over at Garage for offering to host another meetup in Austin, Texas."
8−guests = ""
9−timezone = "America/Chicago"
10−starts = "2019-08-30T14:00:00.000-07:00"
11−dark = "true"
12−darken_image = "true"
13−
14−[[hosts]]
15−name = "Urbit"
16−+++
17−
18−Come have a drink on us, and bring friends! We'll be there 6–8pm.
content/events/2019-10-04-urbit-irl-201910.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit IRL ~2019.10"
3−ends = "2019-10-05T18:00:00.000-07:00"
4−location = "Urbit Office"
5−image = "https://secure.meetupstatic.com/photos/event/e/1/c/5/600_485217797.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/265165676/"
7−description = "Lately, Urbit has been having dangerous amounts of fun online. So we got thinking, 'Wouldn't it be smart to try having fun offline as well?' Thus, we invented something totally new: an offline chatroom."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2019-10-05T15:00:00.000-07:00"
11−dark = "true"
12−darken_image = "true"
13−
14−[[hosts]]
15−name = "Urbit"
16−+++
17−
18−We're calling it Urbit IRL. You can use it to see your friends face-to-face, converse about Urbit, even to share a beer. And we're trying it out Friday, October 4.
19−
20−We hope to see you there! If you want help installing Urbit, bring a laptop. And bring a friend, especially if they are interested in replacing the internet.
content/events/2019-11-15-urbit-irl-201911.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit IRL ~2019.11"
3−ends = "2019-11-16T18:00:00.000-08:00"
4−location = "Urbit Office"
5−image = "https://secure.meetupstatic.com/photos/event/4/c/e/6/600_486379686.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/266146513/"
7−description = "Lately, Urbit has been having dangerous amounts of fun online. So we got thinking, 'Wouldn't it be smart to try having fun offline as well?' Thus, we invented something totally new: an offline chatroom."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2019-11-16T15:00:00.000-08:00"
11−dark = "true"
12−darken_image = "true"
13−
14−[[hosts]]
15−name = "Urbit"
16−+++
17−
18−We're calling it Urbit IRL. You can use it to see your friends face-to-face, converse about Urbit, even to share a beer. And we're trying it out Friday, November 15.
19−
20−We hope to see you there! If you want help installing Urbit, bring a laptop. And bring a friend, especially if they are interested in replacing the internet.
content/events/2019-12-13-urbit-irl-201912.mddeleted−28
@@ -1,28 +0,0 @@
1−+++
2−title = "Urbit IRL ~2019.12"
3−ends = "2019-12-14T17:00:00.000-08:00"
4−location = "Urbit Office"
5−image = "https://secure.meetupstatic.com/photos/event/6/a/8/8/600_487107272.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/266904108/"
7−description = "Come celebrate, friends! Urbit has had quite the decade, transforming from an intercepted interstellar transmission to a functional operating system, which also functions."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2019-12-14T15:00:00.000-08:00"
11−dark = "true"
12−darken_image = "true"
13−
14−[[hosts]]
15−name = "Urbit"
16−+++
17−
18−We're getting together to savor the moment and get hype about what the next decade holds (the whole replacing the internet thing).
19−
20−We hope to see you there!
21−
22−Things to bring:
23−
24−-A friend
25−
26−-A laptop, if you want help installing Urbit
27−
28−-Good cheer
content/events/2020-01-24-urbit-irl-20201.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Urbit IRL ~2020.1"
3−ends = "2020-01-25T18:00:00.000-08:00"
4−location = "Urbit Office"
5−image = "https://secure.meetupstatic.com/photos/event/2/1/7/6/600_487988566.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/267753862/"
7−description = "Neo-Urbit arrives from the future."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2020-01-25T15:00:00.000-08:00"
11−dark = "true"
12−darken_image = "true"
13−
14−[[hosts]]
15−name = "Urbit"
16−+++
17−
18−It's 2020 and Urbit is accelerating. We've got a lot going live this year.
19−
20−Replacing the internet is a thing to behold. Come by the offices to hang out, have a drink, and hear the latest.
21−
22−Bring a laptop if you want help installing Urbit.
23−
24−And as always, bring a friend!
content/events/2020-02-28-urbit-irl-20202.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "Urbit IRL ~2020.2"
3−ends = "2020-02-29T18:00:00.000-08:00"
4−location = "Urbit Office"
5−image = "https://secure.meetupstatic.com/photos/event/8/5/e/b/600_488794283.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/268519069/"
7−description = "Urbit is a wilderness right now. A vast continent of possibility. We're gonna head out there and hack around. Join us."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2020-02-29T15:00:00.000-08:00"
11−dark = "true"
12−darken_image = "true"
13−
14−[[hosts]]
15−name = "Urbit"
16−+++
17−
18−Before we go headlong into that unknown region, we're gonna have a party at basecamp (aka the office). Come hang out and have a drink with your fellow Urbit explorers.
19−
20−Bring your laptop if you want to install Urbit.
21−
22−And as always, drag a friend!
content/events/2020-04-03-urbit-os1-launch-party.mddeleted−49
@@ -1,49 +0,0 @@
1−+++
2−title = "Urbit OS1 Launch Party"
3−ends = "2020-04-04T18:00:00.000-07:00"
4−location = "Online event"
5−image = "https://secure.meetupstatic.com/photos/event/1/f/8/b/600_489548075.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/268519156/"
7−youtube = "71ViyftPkGk"
8−description = "Join us as we launch Urbit OS1!"
9−guests = ""
10−timezone = "America/Los_Angeles"
11−starts = "2020-04-04T15:00:00.000-07:00"
12−dark = "true"
13−darken_image = "true"
14−
15−[[hosts]]
16−name = "Urbit"
17−+++
18−
19−The presentation will begin at 7pm Pacific.
20−
21−Join the live conversation on Urbit itself: `~/~dopzod/os1-premiere`
22−
23−[There is also a VR viewing party for this event, hosted by `~naltyc-wornes`](https://account.altvr.com/events/1435581121923383472).
24−
25−To receive the event merch, RSVP on this event page by midnight!
26−
27−Ready to launch OS1? Check out our install guide:
28−
29−[https://urbit.org/using/install/](https://urbit.org/using/install/)
30−
31−Want address space for your friends? Apply for an Urbit Community Grant:
32−
33−[https://urbit.org/community/community-grants/](https://urbit.org/community/community-grants/)
34−
35−Interested in contributing to Urbit? Sign up for Hoon School:
36−
37−[https://urbit.org/community/hoonschool/](https://urbit.org/community/hoonschool/)
38−
39−Get the latest on Urbit:
40−
41−Blog: [https://urbit.org/blog/](https://urbit.org/blog/)
42−
43−Urbit Twitter: [https://twitter.com/urbit](https://twitter.com/urbit)
44−
45−Urbit Github: [https://github.com/urbit](https://github.com/urbit)
46−
47−Still confused about what Urbit is?
48−
49−[https://urbit.org/understanding-urbit/](https://urbit.org/understanding-urbit/)
content/events/2020-10-09-urbit-hosting-launch-event.mddeleted−38
@@ -1,38 +0,0 @@
1−+++
2−title = "Urbit Hosting Launch Event"
3−ends = "2020-10-10T15:00:00.000-07:00"
4−location = "Online event"
5−image = "https://secure.meetupstatic.com/photos/event/8/600_492480008.jpeg"
6−registration_url = "https://www.meetup.com/urbit-sf/events/273439025/"
7−youtube = "w3qKe_WZr50"
8−description = ""
9−guests = ""
10−timezone = "America/Los_Angeles"
11−starts = "2020-10-10T13:00:00.000-07:00"
12−dark = "true"
13−darken_image = "true"
14−[[hosts]]
15−name = "Urbit"
16−+++
17−
18−We've been busy building, testing and refining — and now it's time to show off what we've been up to.
19−
20−We're going to do a live demo of Tlon's Urbit hosting solution, check out some of the new features of Landscape and generally catch up on what both we (at Tlon) and the community have been up to.
21−
22−Since 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.
23−
24−Join the waitlist for hosting here: [https://tlon.io/](https://tlon.io/)
25−
26−---
27−
28−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/)
29−
30−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)
31−
32−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)
33−
34−[https://github.com/urbit](https://github.com/urbit)
35−
36−[https://urbit.org/blog/](https://urbit.org/blog)
37−
38−And if you're still confused about what Urbit is, try these: [https://urbit.org/understanding-urbit/](https://urbit.org/understanding-urbit/)
content/events/2020-11-05-developer-call-graph-store.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Developer Call: Graph Store"
3−ends = "2020-11-05T18:30:00.000-08:00"
4−location = "Online event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/274279522/"
7−youtube = "E4DFuAZQ32Y"
8−description = ""
9−guests = ""
10−timezone = "America/Los_Angeles"
11−starts = "2020-11-05T17:00:00.000-08:00"
12−
13−[[hosts]]
14−name = "Lane R."
15−
16−[[hosts]]
17−name = "Urbit"
18−+++
19−
20−Developer calls are focused on the technologies that underpin Urbit, from the top of the stack to the very bottom. They’re an opportunity for the people developing and contributing to Urbit to share their knowledge and expertise, including things that typically don’t make it into the docs, such as how and why Urbit works the way it does.
21−
22−This call will feature a discussion by Tlon engineer Logan Allen about graph-store, the general-purpose store that is gradually replacing the bespoke stores behind Chat, Publish and Links.
23−
24−You can join the event by clicking the gotowebinar.com link posted here. Details for joining the conversation were also emailed to all registered attendees, and will be sent again shortly before the event starts. Please check your email inbox for a message from Meetup.com.
content/events/2020-11-19-developer-call-bittorrent-tracking-on-urbit.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "Developer Call: BitTorrent tracking on Urbit"
3−ends = "2020-11-19T18:30:00.000-08:00"
4−location = "Online event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/274650693/"
7−youtube = "cvx2UV6TJ5I"
8−description = "Developer calls are focused on the technologies that underpin Urbit, from the top of the stack to the very bottom. They’re an opportunity for the people developing and contributing to Urbit to share their knowledge and expertise, including things that typically don’t make it into the docs, such as how and why Urbit works the way it does."
9−guests = ""
10−timezone = "America/Los_Angeles"
11−starts = "2020-11-19T17:00:00.000-08:00"
12−
13−[[hosts]]
14−name = "Lane R."
15−
16−[[hosts]]
17−name = "Urbit"
18−+++
19−
20−This call will feature a discussion by Tlon engineer Mark Staarink, also known as ~palfun-foslup, about writing an HTTP BitTorrent tracker and command line app in 1500 lines of code.
21−
22−The livestream will be held on YouTube, and a group video call will be made available via Google Meet after the talk for casual discussion and in-person conversation.
content/events/2020-12-10-developer-call-injecting-external-services-into-urbit.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Developer Call: Injecting External Services into Urbit"
3−ends = "2020-12-10T18:30:00.000-08:00"
4−location = "Online event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/275051926/"
7−youtube = "LaWNHMmxQag"
8−description = ""
9−guests = ""
10−timezone = "America/Los_Angeles"
11−starts = "2020-12-10T17:00:00.000-08:00"
12−
13−[[hosts]]
14−name = "Lane R."
15−
16−[[hosts]]
17−name = "Urbit"
18−+++
19−
20−This call will feature a discussion by well-known developer in the Urbit community, ~timluc-miptev. ~timluc will be discussing the work he's been doing to provide access to a Bitcoin full node, which will enable Urbit ships to make Bitcoin payments to other ships. More generally, he'll be discussing the patterns that he's using to manage an Urbit ship's connection to externally-running infrastructure, and how access to that infrastructure can be provided to other Urbit nodes.
21−
22−Developer calls are focused on the technologies that underpin Urbit, from the top of the stack to the very bottom. They’re an opportunity for the people developing and contributing to Urbit to share their knowledge and expertise, including things that typically don’t make it into the docs, such as how and why Urbit works the way it does.
23−
24−The livestream will be held on YouTube, and a group video call will be made available via Google Meet after the talk for casual discussion and in-person conversation.
content/events/2021-02-04-developer-call-architectural-idea-maze.mddeleted−23
@@ -1,23 +0,0 @@
1−+++
2−title = "Developer Call: Architectural Idea Maze"
3−ends = "2021-02-04T18:30:00.000-08:00"
4−location = "Online event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/275992798/"
7−description = ""
8−guests = ""
9−timezone = "America/Los_Angeles"
10−starts = "2021-02-04T17:00:00.000-08:00"
11−
12−[[hosts]]
13−name = "Lane R."
14−
15−[[hosts]]
16−name = "Urbit"
17−+++
18−
19−Tlon Engineer Philip Monk is interviewed by Poprox in an "Architectural Idea Maze" discussion, where Phil will discuss the choices made, and possibly more importantly, the choices _not_ made in the design of a component of Urbit. In this discussion, Phil will be focusing on subscriptions in all their forms throughout Urbit.
20−
21−Developer calls are focused on the technologies that underpin Urbit, from the top of the stack to the very bottom. They’re an opportunity for the people developing and contributing to Urbit to share their knowledge and expertise, including things that typically don’t make it into the docs, such as how and why Urbit works the way it does.
22−
23−The livestream will be held on YouTube, and a group video call will be made available via Google Meet after the talk for casual discussion and in-person conversation.
content/events/2021-03-04-developer-call-scaling-azimuth.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Developer Call: Scaling Azimuth"
3−ends = "2021-03-04T18:30:00.000-08:00"
4−location = "Online event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/276692816/"
7−youtube = "CKuHXrdkIw0"
8−description = ""
9−guests = ""
10−timezone = "America/Los_Angeles"
11−starts = "2021-03-04T17:00:00.000-08:00"
12−
13−[[hosts]]
14−name = "Urbit"
15−+++
16−
17−Urbit engineer Philip Monk will be discussing the solution space to scaling Azimuth, the infrastructure for Urbit ID that's built on Ethereum.
18−
19−Unless you're living under a rock, you know that Ethereum is thoroughly congested and, as a result the cost of working with it is quite high. Most pertinently for Urbit, this means that the cost of bringing new planets onto the network is unacceptably high.
20−
21−Phil has been doing a ton of research for the past few months on different approaches to scaling Azimuth. In this talk, he'll lay out the what's been explored so far, the relevant considerations for Urbit, and the emerging solutions that are being pursued.
22−
23−As usual, this talk will feature a presentation, a Q&amp;A period and a follow-up video call that anyone from the audience can join.
24−
25−See you there!
content/events/2021-03-18-developer-call-pressure-and-protolith.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Developer Call: Pressure and Protolith"
3−ends = "2021-03-18T18:30:00.000-08:00"
4−location = "Online event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/276898246/"
7−description = "Matilde Park, Landscape team lead, talks about the distinctions between the Landscape product and basic Urbit development, and the significance of building Landscape for Tlon."
8−youtube = "XjIDZQUZZtE"
9−timezone = "America/Los_Angeles"
10−starts = "2021-03-18T17:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Josh Lehman"
14−patp = "~wolref-podlex)"
15−
16−[[guests]]
17−name = "Matilde Park"
18−patp = "~haddef-sigwen"
19−+++
20−
21−Landscape was an experiment. Now it’s Tlon's flagship client for the Urbit project: a product, a full-stack application, spread across a variety of Gall agents and libraries, lighting the way forward against the dwindling unknowns in the reality of Urbit userspace development and distribution.
22−
23−Matilde Park, Landscape team lead, talks about the distinctions between the Landscape product and basic Urbit development, and the significance of building Landscape for Tlon — the role of “high-pressure experiments” in forcing our computer toward something rock-hard, diamond-perfect. With a few examples of ongoing deployments, she also outlines the problems being solved right now and the ones still a touch further out.
24−
25−As usual, join us after the talk on the call to ask questions and hang out.
content/events/2021-04-01-developer-call-javascript-apps-on-urbit.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Developer Call: JavaScript Apps on Urbit"
3−ends = "2021-04-01T18:30:00.000-07:00"
4−location = "Online Event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/277261928/"
7−description = "In this talk, Tyler Brown Cifu Shuster (~radbur-sivmus) explains how to use Javascript tools to develop a client for Urbit."
8−youtube = "avLSSdb2VLM"
9−timezone = "America/Los_Angeles"
10−starts = "2021-04-01T17:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Mike Osborne"
14−patp = "~taller-ravnut"
15−
16−[[guests]]
17−name = "Tyler Brown Cifu Shuster"
18−patp = "~radbur-sivmus"
19−+++
20−
21−Urbit provides a powerful and extensible platform for all kinds of app development. It can serve as a general-purpose datastore, decentralized network, and identity solution for a variety of front-end applications. The client that ships with Urbit, Landscape, provides one example of the kind of applications that can be built on the platform. However, other developers can use the same tools used to create Landscape to power their own interfaces and clients for Urbit.
22−
23−Tyler Brown Cifu Shuster (~radbur-sivmus) has worked with the Landscape team over the past few months to extract these tools into reusable Javascript packages. In this talk, he will explain how to use them to develop a client for Urbit independent of Landscape. He will cover the basic lifecycle of a client and explain how Javascript interface and state frameworks pair with Urbit's data model.
24−
25−This talk should enable anyone familiar with modern Javascript development and HTTP grammar to build an application on top of Urbit without writing any back-end code.
content/events/2021-04-15-developer-call-software-distribution.mddeleted−34
@@ -1,34 +0,0 @@
1−+++
2−title = "Developer Call: 3rd Party Software Distribution"
3−ends = "2021-04-15T18:00:00.000-07:00"
4−location = "Online Event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/277474491/"
7−description = "Some exciting work has been going on behind the scenes to provide the foundation for 3rd party software distribution."
8−youtube = "XwICC6Its1E"
9−timezone = "America/Los_Angeles"
10−starts = "2021-04-15T17:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Josh Lehman"
14−patp = "~wolref-podlex"
15−
16−[[guests]]
17−name = "Raghu"
18−patp = "~sovmep-ripsum"
19−
20−[[guests]]
21−name = " Philip Monk"
22−patp = "~wicdev-wisryt"
23−+++
24−
25−Some exciting work has been going on behind the scenes to provide the foundation for 3rd party software distribution. In this talk Phil (~wicdev-wisryt) and Raghu (~sovmep-ripsum) will discuss the work they've been doing to clay to provide "virtual desks"—an integral part of the infrastructure needed to have safe, generic software distribution.
26−
27−Raghu is a software engineer at Hudson River Trading who is perhaps best known for his work on ucal, the Urbit calendar application. The work he's doing with Phil on virtual desks is being done through our Scholarships program, in which community developers pair up with Tlon infrastructure engineers to work on infrastructure projects. We'll spend some time at the beginning of the call to introduce Raghu and hear about his experience working on the Urbit kernel.
28−
29−As usual, there'll be an opportunity to jump on the call with us afterward to ask questions and hang out.
30−
31−## Resources
32−
33−- [Original mailing list discussion of 3rd party software distribution](https://groups.google.com/a/urbit.org)
34−- [ucal](https://github.com/taalhavras/ucal)
content/events/2021-04-27-bitcoin-launch.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Bitcoin Launch"
3−ends = "2021-04-27T21:30:00.000-07:00"
4−location = "Online Event"
5−image = "https://media.urbit.org/site/events/bitcoin-launch-event.png"
6−registration_url = "https://www.meetup.com/urbit-sf/events/276741426/"
7−youtube = "_aRnfacZPto"
8−description = "Bitcoin is coming to Urbit! With the upcoming release of the Bitcoin Wallet, you will be able to pay Urbit ships directly with BTC."
9−timezone = "America/Los_Angeles"
10−starts = "2021-04-27T20:00:00.000-07:00"
11−dark = true
12−tags = ["bitcoin"]
13−
14−[[hosts]]
15−name = "Urbit Foundation"
16−
17−[[guests]]
18−name = "Marty Bent"
19−+++
20−
21−Bitcoin is coming to Urbit! With the upcoming release of the Bitcoin Wallet, you will be able to pay Urbit ships directly with BTC.
22−
23−We’d like to take a moment to show it off, and discuss the future of commerce on Urbit. First, Christian and Josh will demo the wallet, then, our good friend Marty Bent will moderate a panel with Christian, Tim, and Ed. We will have time at the end for questions.
24−
25−The event will have a live stream on Youtube, and a live-chat on Urbit, links to come.
26−
27−Join the Bitcoin dev conversation in the Urbitcoiners group: [~pindet-timmut/urbitcoin-cash](web+urbitgraph://group/~pindet-timmut/urbitcoiners)
content/events/2021-04-29-developer-call-real-time-communications-on-urbit.mddeleted−30
@@ -1,30 +0,0 @@
1−+++
2−title = "Developer Call: Real-Time Communication on Urbit"
3−ends = "2021-04-29T18:00:00.000-07:00"
4−location = "Online Event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/277674273/"
7−description = "Video chat on Urbit? It's nearly here with WebRTC."
8−youtube = "XFct6JZHPC0"
9−timezone = "America/Los_Angeles"
10−starts = "2021-04-29T17:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Josh Lehman"
14−patp = "~wolref-podlex"
15−
16−[[guests]]
17−name = "Edward Amsden"
18−patp = "~ritpub-sipsyl"
19−+++
20−
21−Video chat on Urbit? It's nearly here using the WebRTC protocol. Edward Amsden (`~ritpub-sipsyl`) will be giving us a look at the WebRTC Airlock library that he has developed that handles all the hard parts of WebRTC. This will allow developers to simply call or answer calls by ship or app name. Edward will also be giving us a live text-based demo of WebRTC on urbit. Please join us for an exciting presentation.
22−
23−Edward is a software developer and the principal of Black River Software LLC. He has several years experience building both backend and IoT software in Haskell, and in particular building IoT control and software deployment infrastructure. He also has academic background in programming language research.
24−
25−As usual, there'll be an opportunity to jump on the call with us afterward to ask questions and hang out.
26−
27−## Resources
28−
29−- [Urbit WebRTC on GitHub](https://github.com/black-river-software/urbit-webrtc)
30−- Check out WebRTC progress reports on `~ritpub-sipsyl/webrtc-on-urbit`
content/events/2021-05-13-developer-call-versioned-networking.mddeleted−26
@@ -1,26 +0,0 @@
1−+++
2−title = "Developer Call: P2P Versioned Networking"
3−ends = "2021-05-14T13:00:00.000-07:00"
4−location = "Online Event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/278052029/"
7−description = "Versioned Networking for Application Developers"
8−youtube = "BhQ1vk4jGsk"
9−timezone = "America/Los_Angeles"
10−starts = "2021-05-14T00:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Josh Lehman"
14−patp = "~wolref-podlex"
15−
16−[[guests]]
17−name = "Liam Fitzgerald"
18−patp = "~hastuc-dibtux"
19−+++
20−
21−Building solid networking infrastructure has been a major focus of the Urbit project since its inception. There's a lot going on under the hood
22−that ensures our servers reliably stay connected. Liam Fitzgerald (~hastuc-dibtux) will be explaining how Urbit is able to deploy changes without breaking the network. Anyone designing userspace applications will be interested in the approach he has designed.
23−
24−Liam is an Interface Engineer working at Tlon working on the Landscape team. He will be discussing networking userspace applications in depth and going into detail about the new versioning system.
25−
26−As usual, there will be an opportunity to jump on the call with us afterward to ask questions and hang out.
content/events/2021-05-27-town-hall.mddeleted−54
@@ -1,54 +0,0 @@
1−+++
2−title = "Town Hall"
3−ends = "2021-05-27T23:30"
4−location = "Online Event"
5−image = "https://media.urbit.org/site/events/URBIT-TOWN-HALL.png"
6−registration_url = "https://www.meetup.com/urbit-sf/events/278188361/"
7−description = "A virtual mini-conference for the Urbit community featuring a special keynote talk from our friend Justin Murphy."
8−youtube = "8YSwt0vDPj0"
9−dark = true
10−timezone = "America/Los_Angeles"
11−starts = "2021-05-27T20:00"
12−
13−[[hosts]]
14−name = "Josh Lehman"
15−patp = "~wolref-podlex"
16−
17−[[guests]]
18−name = "Hunter Miller"
19−patp = "~nocsyx-lassul"
20−
21−[[guests]]
22−name = "Justin Murphy"
23−patp = "~hatryx-lastud"
24−+++
25−
26−The Urbit community has grown at a rapid clip throughout 2021. There are so many exciting things going on that it's hard to convey them all, even with Developer Calls happening every two weeks. This event will function as a virtual "mini-conference" where we'll give a series of important and exciting announcements, including both formal and informal talks from many members of our community.
27−
28−Here's a rundown of what we'll be discussing:
29−
30−## Introduction: State of the Network
31−
32−_12:00 PDT, Josh Lehman_
33−
34−Urbit is under heavy, active development by both Tlon and a wide range of contributors. Josh Lehman will discuss some of the most important areas of work being undertaken, provide a picture of where Tlon and community efforts are going in the future, and even has a few exciting announcements to make.
35−
36−## Taisho, Urbit's Port City
37−
38−_~12:20 PDT, Hunter Miller_
39−
40−Piloting an Urbit ship requires expertise that many lack. To achieve the rich and prosperous ecosystem we've all envisioned requires making that journey easier. In this talk, Hunter Miller introduces a new way for users to join the network with minimal effort.
41−
42−## Keynote: The Revenge of Teleology
43−
44−_~13:00 PDT, Justin Murphy_
45−
46−Teleology—or inquiry into ultimate ends—has been out of fashion since the seventeenth century, when Francis Bacon said that, “like a virgin consecrated to God,” it “produces nothing.” I argue that the digital revolution is inverting Bacon’s claim. Baconian instrumentalism is now suffering from diminishing returns—it is what the youth today call a Boomer Ideology. Rather, the greatest gains are going to individuals and communities with teleological attitudes. This talk will observe some examples and present a model consistent with the observations. Bitcoin inquires after the telos of money, the most winning independent “content creators” inquire after the telos of media, and Urbit inquires after the telos of personal computing.
47−
48−## Lightning Talks
49−
50−_14:00 PDT, you?_
51−
52−After the scheduled talks we'll break out into a series of 30 minute talks led by community members. There will be up to three talks given in parallel at each of 14:00 PDT, 14:30 PDT and 15:00 PDT (so nine talks total).
53−
54−If you'd like to give a talk, please use [this form to sign up](https://airtable.com/shr0Xmqcv1HSy47EP). You can see the full list of [proposed talks here](https://airtable.com/shreGQ4kCU8RA5GJS/tblTZxCpqedJBwSkE), and if you'd like to voice your support for any of these specifically, [cast a vote using this form](https://airtable.com/shrhNRUAGCqZ38VXA).
content/events/2021-07-01-developer-call-runtime-future.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Developer Call: The Urbit Runtime and its Future"
3−ends = "2021-07-01T18:00:00.000-07:00"
4−location = "Online Event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/279137337/"
7−description = "The current and future thinking about the Urbit runtime"
8−youtube = "z0grAh_yhE8"
9−timezone = "America/Los_Angeles"
10−starts = "2021-07-01T17:00:00.000-07:00"
11−
12−[[hosts]]
13−name = "Ted Blackman"
14−patp = "~rovnys-ricfer"
15−
16−[[guests]]
17−name = "Joe Bryan"
18−patp = "~master-morzod"
19−+++
20−
21−Please join us for a look behind the curtain at the Urbit Runtime. Host Ted Blackman (~rovnys-ricfer) will be interviewing Joe Bryan (~master-morzod). Topics will include event log truncation, plans for storing more than 2GB, multithreading implementation, and much more.
22−
23−Ted Blackman (~rovnys-ricfer) has worked on Urbit since 2017, mostly on the kernel, with forays into the runtime and userspace. Before Urbit, he worked in sensor fusion, robotics, web development, distributed systems, and data engineering. He has a degree in physics from MIT.
24−
25−As always, join us for happy hour after the talk.
content/events/2021-07-15-developer-call-yakshaving.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Developer Call: Urbit Yakshaving"
3−ends = "2021-07-15T18:00"
4−location = "Online Event"
5−image = ""
6−registration_url = "https://www.meetup.com/urbit-sf/events/279349114/"
7−description = "A look at ~littel-wolfer's Hoon development setup"
8−youtube = "AG6IPaXbiiY"
9−timezone = "America/Los_Angeles"
10−starts = "2021-07-15T17:00"
11−
12−[[hosts]]
13−name = "Josh Lehman"
14−patp = "~wolref-podlex"
15−
16−[[guests]]
17−name = "Jake Miller"
18−patp = "~littel-wolfur"
19−+++
20−
21−This week Jake Miller (~littel-wolfer) will be giving us a look at his development process, walking through his "urbit-emacs" setup and how he uses org-mode and tmux for hoon development. He'll also be giving us a quick demo of his work-in-progress Roam importer.
22−
23−Jake considers himself a recovering Fintech engineer currently working at Tlon. He is interested in building learning systems and tools in Urbit.
24−
25−Please join us for Happy Hour after the talk to ensure all your burning yakshaving questions get answered.
content/events/2021-09-02-21q3-dc-meetup.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "Urbit DC Meetup Q3 2021"
3−ends = ""
4−location = "Room 1213, 1730 Rhode Island Ave NW, Washington, DC"
5−image = ""
6−registration_url = "https://www.meetup.com/DC-Urbit-Meetup-Group/events/279885879/"
7−description = "Urbit Meetup in DC"
8−timezone = "America/New_York"
9−starts = "2021-09-02T17:30:00"
10−
11−[[hosts]]
12−patp = "~tillys-fasryp"
13−
14−[[hosts]]
15−name = "Robert Sherwood"
16−+++
17−
18−Come on out to the Urbit Meetup! Whether you are an OG Martian or just curious about the decentralized internet, come say hello and hang out with us! There will be a brief presentation on Urbit followed by a socializing and drinks nearby.
19−
20−**Please note that the meetup takes place on September 2nd at 5:30. The date above is incorrect.**
21−
22−[Please RSVP](https://www.meetup.com/DC-Urbit-Meetup-Group/events/279885879/)
content/events/2021-09-16-developer-call-azimuth-scaled.mddeleted−46
@@ -1,46 +0,0 @@
1−+++
2−title = "Developer Call: Azimuth, Scaled"
3−starts = "2021-09-16T09:00:00"
4−ends = "2021-09-16T10:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/280697973/"
9−description = "Discussion of Layer 2 Architecture and Implementation"
10−dark = false
11−youtube = "UScbZ6n7H-4"
12−
13−[[hosts]]
14−name = "Philip Monk"
15−patp = "~wicdev-wisryt"
16−
17−[[guests]]
18−name = "Jimmy Young"
19−patp = "~fallyn-balfus"
20−
21−[[guests]]
22−name = " Jose Cisneros"
23−patp = "~norsyr-torryn"
24−
25−[[guests]]
26−name = " Tom Holford"
27−patp = "~datder-sonnet"
28−
29−[[guests]]
30−name = " Mark"
31−patp = "~palfun-foslup"
32−
33−[[guests]]
34−name = " Poprox"
35−patp = "~datnut-pollen"
36−
37−[[guests]]
38−name = " Will Galebach"
39−patp = "~fabnev-hinmur"
40−
41−
42−+++
43−
44−ETH Gas prices are too high! The growth of Urbit has been greatly hampered this year by the cost of activating planets. Join Philip Monk (`~wicdev-wisryt`) and the entire L2 team as they present the work completed to date to implement Layer 2 naive rollups. Come see a demo of the new Bridge front end, first migrating a star and spawning some planets, then activating a planet, all on L2.
45−
46−This call will be a great opportunity for galaxy owners to get their questions answered for the upcoming vote on Layer 2 implementation. It will also be good for anyone in the community that wants a comprehensive look at how naive rollups will work to bring down planet activation costs. If you're technically inclined, be sure to check out [Philip's walkthrough](https://www.youtube.com/watch?v=lQdqCwYIBoU) of the naive rollup code ahead of time so you can ask questions.
content/events/2021-09-24-urbit-outside.mddeleted−23
@@ -1,23 +0,0 @@
1−+++
2−title = "Urbit Outside"
3−starts = "2021-09-24T15:00:00"
4−ends = "2021-09-24T19:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Sibley Staging Area, 6800 Skyline Blvd. Oakland, CA"
7−image = "https://secure.meetupstatic.com/photos/event/3/0/5/7/clean_498732375.jpeg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/280696590/?isFirstPublish=true"
9−description = "Urbit but outside"
10−dark = true
11−+++
12−
13−![](https://secure.meetupstatic.com/photos/event/3/0/5/7/clean_498732375.jpeg)
14−
15−For our second post-Covid Urbit IRL, we're heading to the East Bay!
16−
17−Please join us at Sibley Preserve for a hangout and (optional) hike.
18−
19−We'll meet at the Sibley Staging Area at 3:00PM, and leave for a casual walk to the caldera and labyrinth at 4:00PM.
20−
21−Hiking shoes, snacks, water, and picnic blankets/chairs are encouraged! There are restrooms and water at the Staging Area.
22−
23−Please join the channel 'Urbit Outside ~[masked]' in ~bitbet-bolbel/urbit-community to get in touch with the gang.
content/events/2021-10-07-developer-call-visor.mddeleted−38
@@ -1,38 +0,0 @@
1−+++
2−title = "Developer Call: Urbit Visor - Transforming the Web Browser Into an Urbit Client"
3−starts = "2021-10-07T09:00:00"
4−ends = "2021-10-07T10:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/281103063"
9−description = "Urbit Visor transforms your browser into a first-class Urbit client"
10−dark = false
11−youtube = "g98ns7Enge4"
12−
13−[[hosts]]
14−name = "Josh Lehman"
15−patp = "~wolref-podlex"
16−
17−[[guests]]
18−name = "Robert Kornacki"
19−patp = "~mocrux-nomdep"
20−
21−
22−+++
23−
24−Please join us for a deep dive into Urbit Visor, a brand new web extension which transforms your browser into a first class Urbit client. Robert Kornacki from dcSpark will be taking viewers step-by-step through the history of how Urbit Visor came to be, starting off with his initial work on the Rust airlock implementation, moving into Login With Urbit, and finally arriving at the final product of Urbit Visor that we have today.
25−
26−From there Robert will hit on many topics including:
27−
28−- Live demonstration of how Urbit Visor works
29−- How Urbit Visor improves and increases the security of the Landscape login experience
30−- An overview of the first Urbit Web App: Urbit Dashboard
31−- Ship hot-swapping
32−- Streamlining the developer experience for any JS/TS dev to jump into the ecosystem and start building immediately
33−- UV Extensions and how they will allow Urbit and the current web to integrate seamlessly
34−- The long term goals and vision of Urbit Visor
35−
36−Robert Kornacki (~mocrux-nomdep) is CSO at dcSpark and has been in the Urbit ecosystem since 2019. Robert has significant experience working in the crypto industry over the past several years, developing tooling and smart contract protocols which hold millions of dollars of assets to this day.
37−
38−Hosted by Josh Lehman, the Director of the Urbit Foundation.
content/events/2021-10-15-assembly.mddeleted−26
@@ -1,26 +0,0 @@
1−+++
2−title = "Assembly"
3−starts = "2021-10-15T15:30:00"
4−ends = "2021-10-17T18:00:00"
5−timezone = "America/Chicago"
6−location = "Distribution Hall, 1500 East 4th St. Austin, TX"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/assembly-image.png"
8−registration_url = "http://assembly.urbit.org/"
9−description = "Grow a new internet"
10−dark = true
11−+++
12−
13−![](https://storage.googleapis.com/media.urbit.org/site/events/assembly-event-image.png)
14−
15−Assembly 2021 marks a pivotal moment in Urbit: software distribution. Yes, Urbit is ready to be built upon. We’ll spend three days together doing just that.
16−
17−- Learn about building applications on Urbit (it’s easy).
18−- Find out how to work and create on a platform that is fully owned by you.
19−- Meet with the growing ecosystem of communities and businesses built on Urbit.
20−
21−If you’re simply into calm computing, well, there will be plenty of that too.
22−
23−You’ll choose between two tracks:
24−
25−- Assembly: Assemble software or work together on projects in small groups
26−- Workshop: A two day workshop taught by Neal Davis, Urbit for Developers
content/events/2021-10-16-assembly-keynote.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Assembly Keynote Live Stream"
3−starts = "2021-10-16T10:00:00"
4−ends = "2021-10-16T12:00:00"
5−timezone = "America/Chicago"
6−location = "Online Event"
7−image = ""
8−registration_url = ""
9−description = "Assembly Keynotes Live Stream"
10−dark = false
11−youtube = "ywj36TUtbS4"
12−+++
13−
14−Join us for the Assembly 2021 introduction, keynote and demos on Saturday, October 16th. You'll hear from Galen Wolfe-Pauly, Josh Lehman, Edouard Urcades, Jake Miller and Ted Blackman for five separate talks spanning roughly two hours.
content/events/2021-10-16-assembly-sw-dist-qa.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Assembly Software Distribution Q&A Live Stream"
3−starts = "2021-10-16T13:00:00"
4−ends = "2021-10-16T14:00:00"
5−timezone = "America/Chicago"
6−location = "Online Event"
7−image = ""
8−registration_url = ""
9−description = "Assembly Software Distribution Q&A Live Stream"
10−dark = false
11−youtube = "MA8sqFi8Bd8"
12−+++
13−
14−We wish we could get everyone together at once for Assembly, but travel still isn't as easy as we wish it was. For those that can't make it to Assembly, join Urbit Foundation Director and Tlon CPO Josh Lehman for an online-only AMA about Urbit's new software distribution capabilities.
content/events/2021-10-28-developer-call-hosting.mddeleted−33
@@ -1,33 +0,0 @@
1−+++
2−title = "Developer Call: Running a Hosting Provider"
3−starts = "2021-10-28T09:00:00"
4−ends = "2021-10-28T10:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/281658268"
9−description = "Urbit hosting discussion"
10−dark = false
11−youtube = "B6UCTv9AX0c"
12−
13−[[hosts]]
14−name = "Josh Lehman"
15−patp = "~wolref-podlex"
16−
17−[[guests]]
18−name = "Brendan Hay"
19−patp = "~laclug-pagwyd"
20−
21−[[guests]]
22−name = "Lukas Bühler"
23−patp = "~lavlyn-litmeg"
24−
25−+++
26−
27−As many of you know, Urbit runs best when hosted, seeing that it's a server and all. The problem of course is that hosting an Urbit ship isn't the easiest of things to do for most people. Hosting Urbit ships in production is actually pretty tough though—doing it right requires wrangling the complexity of traditional "Earth" infrastructure in addition to a strong sense of how Urbit works.
28−
29−In this call we're joined by Brendan Hay, the lead behind Tlon Hosting, and Lukas Bühler of UrbitHost, in what's sure to be an entertaining and informative conversation. Bren and Lukas have both been the masterminds behind their respective hosting architectures, and were somewhat surprised to learn that they'd independently settled on highly similar architectures.
30−
31−This will be an unscripted conversation that's sure to span a gamut of topics including, but not limited to: the unique technical challenges of hosting Urbit ships, the upcoming %khan vane, Kubernetes operators, product roadmaps, custodianship of (or plans to do away with) private keys, and probably a ton more.
32−
33−Hosted by Josh Lehman, the Director of the Urbit Foundation.
content/events/2021-11-26-meetup-brisbane.mddeleted−30
@@ -1,30 +0,0 @@
1−+++
2−title = "Meetup: Brisbane Australia"
3−starts = "2021-11-26T18:00:00"
4−ends = "2021-11-26T20:00:00"
5−timezone = "Australia/Brisbane"
6−location = "Secret Venue - TBA"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-brisbane/events/282240664/"
9−description = "What is Urbit?"
10−dark = false
11−
12−[[hosts]]
13−name = "Morg R"
14−patp = "~haldul-navsyr"
15−
16−
17−
18−+++
19−
20−What is the Urbit??
21−
22−Philosophers, mathematicians and other timewasters have pondered this tough question for aeons. Many went mad, others grew long beards or even buried themselves alive, thinking the riddle unsolvable. So did we... until now.
23−
24−Urbit Brisbane are proud to announce that we finally have found an answer: yes, we have figured out what is the Urbit!!
25−
26−We'd like to share this important knowledge with you, so join us among the fair hills of St Lucia this Friday night. The Secret Venue will be announced on Friday arvo. RSVP and stay tuned to the event page so you don't end up walking around Guyatt Park accosting joggers for clues.
27−
28−Come along and learn about the Urbit with us. You will gain access to an eldritch power far beyond the frail grasp of worldly things. If that isn't enough to tempt you, we also have beers and pizza with your name on them.\*
29−
30−\*If your name is Asahi or Godfather Supreme.
content/events/2022-01-21-meetup-austin.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "Meetup: Austin"
3−starts = "2022-01-21T18:30:00"
4−ends = "2022-01-21T20:30:00"
5−timezone = "America/Chicago"
6−location = "Distribution Hall, 1500 East 4th St. Austin, TX"
7−image = ""
8−registration_url = "https://www.meetup.com/Urbit-Austin/events/282723542/"
9−description = "The Combine"
10−dark = false
11−
12−+++
13−
14−Austin, Texas martians - come hangout and talk Urbit Friday, January 21st at 6:30 pm at Distribution Hall. We will be joined by ~poldec-tonteg, the director of The Combine (the-combine.org), which is the Urbit Foundation's incubator that invests in teams building on Urbit. He will give a presentation around 8pm on The Combine, its purpose and how to get involved as an entrepreneur. It will be followed by a more technical presentation by Edward Amsden (~ritpub-sipsyl), an Urbit kernel developer who is currently rewriting Vere, the Nock run-time environment and Urbit's virtual machine. Team members from many Urbit companies will be in attendance including ~Tirrel, dcSpark, Tlon.io, Urbit Live, Wexpert Systems, Native Planet, and Holium. Hosted by Assembly Capital and the Urbit Foundation.
15−
16−If you haven't joined the network yet, bring a computer and we will help you get set up. Other than that we'll have some food, beverages and a fire, but be sure to bring a jacket too. See you there!
content/events/2022-02-17-developer-call-building-developers.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Developer Call: Building the Next Developers on Mars"
3−starts = "2022-02-17T09:00:00"
4−ends = "2022-02-17T10:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/283834522"
9−description = "Neal Davis discusses Urbit education and the upcoming Hoon School Live"
10−dark = false
11−youtube = "4XcW2u_q9b0"
12−
13−[[hosts]]
14−name = "Josh Lehman"
15−patp = "~wolref-podlex"
16−
17−[[guests]]
18−name = "Neal Davis"
19−patp = "~lagrev-nocfep"
20−
21−+++
22−
23−We'll discuss mapping out the current Urbit technology complex, how to promote ongoing developer engagement and cultivation, and the upcoming Hoon School Live reboot.
24−
25−Neal Davis has taught computer science at the University of Illinois since 2015. Trained as a nuclear engineer, he moved through high-performance computing into training engineers to use computers well. He has joined the Urbit Foundation to work on all aspects of our developer experience.
26−
27−[Sign up for Hoon School Live here](https://hooniversity.org/enroll/).
content/events/2022-03-24-developer-call-urbit-three-ways-with-quartus.mddeleted−26
@@ -1,26 +0,0 @@
1−+++
2−title = "Developer Call: Urbit Three Ways with Quartus"
3−starts = "2022-03-24T09:00:00"
4−ends = "2022-03-24T10:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/284662498/"
9−description = ""
10−dark = false
11−youtube = "qdrQ6xhoE7A"
12−
13−[[hosts]]
14−name = "Neal Davis"
15−patp = "~lagrev-nocfep"
16−
17−[[guests]]
18−patp = "~rabsef-bicrym"
19−
20−+++
21−
22−Quartus Corp's ~rabsef-bicrym will join Neal Davis to discuss his ongoing endeavours to make useful software on Urbit. ~rabsef will explain three visions Quartus has for Urbit’s use - Urbit as Personal Data Assistant, Urbit as Building a Better Syllogism, and Urbit as STEAM Toy.
23−
24−~rabsef-bicrym is a long-standing member of the ~dalten Collective. His path to Urbit development is non-traditional, coming from the world of the practice of law prior to working on Urbit. Quartus’s products on Urbit include `%gora` and `%crow`. They’ve also submitted several updates to the main code base including, most recently, an update to the ring signature library.
25−
26−If you’d like to know more about the work Quartus is doing, join their group at ~mister-hilper-dozzod-dalten/quartus.
content/events/2022-04-05-urbit-meetup-stockholm.mddeleted−30
@@ -1,30 +0,0 @@
1−+++
2−title = "Urbit Meet-Up Stockholm"
3−starts = "2022-04-05T18:00:00"
4−ends = "2022-04-05T21:00:00"
5−timezone = "Europe/Stockholm"
6−location = "Drottning Victorias Örlogshem, Teatergatan 3, 111 48 Stockholm"
7−image = ""
8−registration_url = "https://urbit.nu/meetup2/"
9−description = "Second Urbit meet-up in Sweden"
10−dark = false
11−
12−
13−[[hosts]]
14−patp = "~wicrum-wicrun"
15−
16−[[guests]]
17−name = "Martin"
18−patp = "~millyt-dorsen"
19−
20−+++
21−
22−On April 5th it’s time for the second Swedish Urbit-meetup! The plan for this time is to look a bit more closely at the technical details with ~millyt-dorsen (Founder of Ursverige and urbit.nu) and ~wicrum-wicrun (Dalten Collective and Quartus), as well as reviewing what’s happened online since the last meetup.
23−
24−**Time and date:** 18:00, 2022-04-05
25−
26−**Place:** Drottning Victorias Örlogshem, Teatergatan 3, 111 48 Stockholm
27−
28−No registration is necessary, but if you want to receive emails about any changes as well as future events you can sign up [here](https://docs.google.com/forms/d/e/1FAIpQLSci5wzl1nPK9pe3QOKzc37jrdV7UZp0AT-CBMIyEfhbgZ0VqQ/viewform) (this is not necessary if you have signed up previously). You can also DM ~wicrum-wicrun your email address.
29−
30−Välkomna / Welcome!
content/events/2022-04-21-developer-call-uqbar-and-urbits-first-blockchain.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Developer Call: Uqbar and Urbit’s first Blockchain"
3−starts = "2022-04-21T09:00:00"
4−ends = "2022-04-21T10:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/285206697/"
9−description = ""
10−dark = false
11−youtube = "XZD0ob1XTKE"
12−
13−[[hosts]]
14−name = "Neal Davis"
15−patp = "~lagrev-nocfep"
16−
17−[[guests]]
18−patp = "~hodzod-walrus"
19−
20−+++
21−
22−This time Uqbar’s ~hodzod-walrus will join Neal Davis to discuss Uqbar’s latest developments in building what will be the first Blockchain on Urbit. ~hodzod-walrus will go into Uqbar’s basic outline and how they will make their plans reality. Why their ZK interpreter, Zock, is the perfect form for smart contract integration on Urbit. How they will execute parallel smart contract on Hoon and the endeavours with uHoon.
23−
24−~hodzod-walrus is a programmer working on Uqbar. Previously he built Pokur as an Urbit Foundation apprenticeship grant. He’s quickly become a Hoon evangelist and hopes to showcase its strengths in the world of smart contracts.
content/events/2022-04-26-urbit-foundation-meetup-kingsnight-amsterdam.mddeleted−23
@@ -1,23 +0,0 @@
1−+++
2−title = "Urbit Foundation Meetup - Kingsnight"
3−starts = "2022-04-26T18:00:00"
4−ends = "2022-04-26T21:30:00"
5−timezone = "Europe/Amsterdam"
6−location = "Hortus Botanicus, Plantage Middenlaan 2a, 1018 DD Amsterdam, Netherlands"
7−image = "https://i.imgur.com/g75pj4M.png"
8−registration_url = "https://www.meetup.com/urbit-sf/events/285233312/"
9−description = "The Martian way of P2P social computing"
10−dark = false
11−
12−[[hosts]]
13−name = "Thomas"
14−patp = "~dalweb-donfun"
15−
16−[[hosts]]
17−patp = "~palfun-foslup"
18−
19−+++
20−
21−On the 26th of April the Urbit Foundation is coming to Kingsnight in Amsterdam, we will host you all in one of the oldest Botanical Gardens in the world. A short series of talks will introduce you to the technical background of Urbit, the vision on social computing by ~palfun-foslup from Tlon and an introduction to the first Urbit blockchain by Uqbar.
22−
23−Bring your orange Tee and we will sort the drinks and lots of cool people, come join us from 18:00 at the Hortus Botanicus in Amsterdam.
content/events/2022-05-06-urbit-weekend-kansas.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit No-Coast Weekend Meetup"
3−starts = "2022-05-06"
4−ends = "2022-05-07"
5−timezone = "America/Chicago"
6−location = "1317 Union Ave. Kansas City, Mo. 64101"
7−image = ""
8−registration_url = "https://forms.gle/TXMrLPsnSURrXpGm6"
9−description = "A Two-Day Event in Kansas City"
10−dark = false
11−
12−
13−[[hosts]]
14−patp = "~ribben-donnyl"
15−
16−+++
17−
18−The theme of this event is “Urbit: the Past and the Future” ~ribben-donnyl will give a talk about the history of Urbit from its accidental leak up to today. We will also discuss visions for the future of Urbit, and how we’d like to get there. If you have an idea on writing code for Urbit (or if you just want to talk Urbit runtime), we’ll have seasoned veterans on hand.
19−
20−Join the group to discuss logistics, coordinate travel, and whatever’s on your mind: ~ribben-donnyl/no-coast-assembly-22
content/events/2022-06-16-developer-call-urbits-new-terminal-stack-tlon copy.mddeleted−23
@@ -1,23 +0,0 @@
1−+++
2−title = "Developer Call: Urbit’s improved Terminal Stack"
3−starts = "2022-06-16T09:00:00"
4−ends = "2022-06-16T10:30:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/286426447/"
9−description = ""
10−dark = false
11−youtube = "E-6E-l1SxFw"
12−
13−[[hosts]]
14−name = "Neal Davis"
15−patp = "~lagrev-nocfep"
16−
17−[[guests]]
18−patp = "~palfun-foslup"
19−+++
20−
21−This time Tlon’s ~palfun-foslup will join Neal Davis to discuss Urbit’s current terminal stack and the improvements he is building for it. Multiple sessions and apparently a mouse has been spotted in the upcoming release. All in all some very exciting terminal improvements are coming up shortly. For the long-term ~palfun-foslup is aiming towards native UI which he will describe as well. Be sure to join the hangout after the Developer Call to ask ~palfun-foslup everything you want to know.
22−
23−~palfun-foslup has been part of Tlon for over 4 years and works in the Infrastructure team.
content/events/2022-06-16-developer-call-urbits-new-terminal-stack-tlon.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Developer Call: Urbit’s improved Terminal Stack"
3−starts = "2022-06-16T09:00:00"
4−ends = "2022-06-16T10:30:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/286426447/"
9−description = ""
10−dark = false
11−youtube = "E-6E-l1SxFw"
12−
13−[[hosts]]
14−name = "Neal Davis"
15−patp = "~lagrev-nocfep"
16−
17−[[guests]]
18−patp = "~palfun-foslup"
19−
20−+++
21−
22−This time Tlon’s ~palfun-foslup will join Neal Davis to discuss Urbit’s current terminal stack and the improvements he is building for it. Multiple sessions and apparently a mouse has been spotted in the upcoming release. All in all some very exciting terminal improvements are coming up shortly. For the long-term ~palfun-foslup is aiming towards native UI which he will describe as well. Be sure to join the hangout after the Developer Call to ask ~palfun-foslup everything you want to know.
23−
24−~palfun-foslup has been part of Tlon for over 4 years and works in the Infrastructure team.
content/events/2022-07-07-hackathon-hackfs.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Hackathon: HackFS with ETH Global"
3−starts = "2022-07-06T11:00:00"
4−ends = "2022-07-27T11:00:00"
5−timezone = "America/Chicago"
6−location = "Online Event"
7−image = ""
8−registration_url = "https://ethglobal.com/auth?use_redirect=events/hackfs2022/apply"
9−description = ""
10−dark = false
11−+++
12−
13−The Urbit Foundation is sponsoring a prize in the [HackFS](https://fs.ethglobal.com/) competition with the [InterPlanetary File System (IPFS)](https://ipfs.io/) and [Filecoin](https://filecoin.io/) communities.
14−
15−IPFS and Filecoin are distributed data storage and access solutions for a decentralized Web. Building Urbit compatibility tools will lead to new ways of decentralizing file storage and distribution.
16−
17−- [Urbit challenge](https://ethglobal.com/events/hackfs2022/prizes#urbit)
18−- [Apply for Hack FS](https://ethglobal.com/auth?use_redirect=events/hackfs2022/apply)
content/events/2022-07-08-urbit-fireside-chat-1.mddeleted−19
@@ -1,19 +0,0 @@
1−+++
2−title = "Urbit Fireside Chat #1"
3−starts = "2022-07-08T10:00:00"
4−ends = "2022-07-08T11:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/fireside-chat-1.jpg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/286771848/"
9−description = ""
10−dark = true
11−youtube = "3un5Otz6h3I"
12−
13−[[hosts]]
14−name = "Josh Lehman"
15−patp = "~wolref-podlex"
16−
17−+++
18−
19−~wolref-podlex of the Urbit Foundation will be holding monthly “Fireside Chats” to share what’s going on at the Urbit Foundation and network more broadly, and take questions from the community. If you have a suggestion for a topic or already have a question in mind you can ask it [here](https://airtable.com/shrAH7d8CAPtp62IA).
content/events/2022-07-21-developer-holium-community-os.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Developer Call: Holium's Community OS"
3−starts = "2022-07-21T09:00:00"
4−ends = "2022-07-21T10:30:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = "https://i.imgur.com/wyrrLO9.png"
8−registration_url = "https://www.meetup.com/urbit-sf/events/287063223/"
9−description = ""
10−dark = false
11−youtube = "dHyzH09QaZQ"
12−
13−[[hosts]]
14−name = "Neal Davis"
15−patp = "~lagrev-nocfep"
16−
17−[[guests]]
18−name = "Trent"
19−patp = "~lomder-librun"
20−
21−+++
22−
23−Holium is one of the rising stars in the Urbit Community. Earlier this year they launched the Ballot app and will have much more to show at [Assembly 2022](https://assembly.urbit.org). Holium is focused on building a full OS experience around communities and DAOs, where the software that the community runs on — think chat, calendar, files, voice and video calls — are integrated in the computing environment like never before. Developers and especially fresh Hoon School grads should keep their eyes on Holium's roadmap, as opportunities to work with them are dropping regularly. On this call, Trent (~lomder-librun) will tell us all about their plans, their roadmap, and how you can help out.
24−
25−Trent has worked in software for almost a decade. He spent his first 3 years in the corporate world before building various startups. A recent Urbit convert, he believes in a pro-human future and is fighting for humanity to keep its soul as we enter the neon age.
content/events/2022-07-21-ethcc-paris-22-meetup.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "Urbit Meetup Paris"
3−starts = "2022-07-21T20:00:00"
4−ends = "2022-07-21T23:00:00"
5−timezone = "Europe/Paris"
6−location = "Le Comptoir Général, 84 Quai de Jemmapes, 75010 Paris"
7−registration_url = "https://www.meetup.com/urbit-sf/events/287209849/"
8−description = "ETHCC Urbit Meetup Paris"
9−dark = false
10−
11−[[hosts]]
12−patp = "~patnes-rigtyn"
13−
14−[[hosts]]
15−patp = "~riprud-tidmel"
16−
17−[[hosts]]
18−patp = "~dalweb-donfun"
19−+++
20−
21−Tlon and the Urbit Foundation are hosting a meetup at Le Comptoir Général. RSVP on the meetup page and come by on Thursday, we will be ready with snacks and a drink.
content/events/2022-07-22-urbit-outside-alta-plaza.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "Urbit Outside: Alta Plaza Park"
3−starts = "2022-07-23T13:00:00"
4−ends = "2022-07-23T19:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Alta Plaza Park, San Francisco, CA"
7−image = "https://media.urbit.org/meetups/FWW0KPAVsAAuhYs.jpg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/286763342/"
9−description = "Urbit Outside in San Francisco"
10−dark = true
11−
12−
13−+++
14−
15−![Urbit Outside](https://media.urbit.org/meetups/FWW0KPAVsAAuhYs.jpg)
16−
17−Please join us for a park meetup (picnic optional!) at Alta Plaza Park in Pacific Heights, SF, on Saturday, 7/23. We'll meet at 1:00PM and stay as long as people want to chat. Bring a jacket and your choice of food/drink.
18−Interested friends and the Urbit-curious are always welcome!
19−
20−**Time and date:** 13:00, 2022-07-2022
21−
22−**Place:** Alta Plaza Park, San Francisco, CA
content/events/2022-07-28-urbit-meetup-milano-22.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "Urbit Meetup Milano"
3−starts = "2022-07-28T19:30:00"
4−ends = "2022-07-28T23:00:00"
5−timezone = "Europe/Paris"
6−location = "LùBar, Via Palestro, 16, 20121 Milano MI"
7−image = "https://flawless.life/wp-content/uploads/2020/02/Lubar_milano_07.jpg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/287394327/"
9−description = "Urbit Meetup Milano"
10−dark = true
11−darken_image = "true"
12−
13−[[hosts]]
14−patp = "~timluc-miptev"
15−
16−[[hosts]]
17−patp = "~dalweb-donfun"
18−+++
19−
20−This week the Urbit Foundation and Uqbar are meeting at the iconic LùBar in Milano! Come by for a drink on Thursday at 19:30 CET. Make sure to RSVP to Thomas if you plan to come to the meetup, let him know via: thomas@urbit.org or ~dalweb-donfun. The spots are limited.
21−
22−Ci vediamo tutti giovedì!
content/events/2022-08-04-reassembly.mddeleted−31
@@ -1,31 +0,0 @@
1−+++
2−title = "Reassembly: an unofficial urbit conference"
3−starts = "2022-08-04T09:00:00"
4−ends = "2022-08-06T18:00:00"
5−timezone = "America/Phoenix"
6−location = "In Person Event"
7−image = "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F306416609%2F547708747059%2F1%2Foriginal.20220621-150252?w=800&auto=format%2Ccompress&q=75&sharp=10&rect=0%2C0%2C2160%2C1080&s=bcc27600d308fc2a4c126b8179498145"
8−registration_url = "https://www.eventbrite.com/e/365968420397"
9−description = "Join us this August 4-6, as we launch into the Urbit universe in Cheyenne, Wyoming!"
10−dark = true
11−darken_image = "true"
12−
13−[[hosts]]
14−name = "Tacen Inc."
15−patp = "~mister-todteg"
16−
17−+++
18−
19−Join us this August 4-6, as we launch into the Urbit universe in Cheyenne, Wyoming! Taking place in the historic Colony Building, we are gathering individuals from around the world; community members, projects, and yourself, to learn and discuss what a clean-slate OS & network for the 21st century is all about. Whether you just launched a ship, never heard of urbit or even own a galaxy, we invite all to attend! Food, snacks, drinks and swag will be available for attendees.
20−
21−## Accommodations
22−
23−We've partnered with the Microtel Inn & Suites by Wyndham for group rate of $109/night.
24−
25−Located at 1400 West Lincolnway, Cheyenne, WY, 82001 a 5 minute drive to the event. To take advantage of this rate, please call to make your reservations at +1-307-274-4593 and mention 'urbit' as the group name.
26−
27−## Websites
28−
29−Urbit: https://www.urbit.org
30−Tacen: https://www.tacen.com
31−
content/events/2022-08-12-urbit-fireside-chat-2.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit Fireside Chat #2 – Assembly 2022"
3−starts = "2022-08-19T10:00:00"
4−ends = "2022-08-19T11:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = "https://i.imgur.com/o7DMLN3.png"
8−registration_url = "https://www.meetup.com/urbit-sf/events/287471323/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = "k5zM9xGdyS8"
13−
14−[[hosts]]
15−name = "Josh Lehman"
16−patp = "~wolref-podlex"
17−
18−+++
19−
20−This month ~wolref-podlex of the Urbit Foundation is back with another Fireside Chat. This time to update you on Assembly 2022. Make sure to list your questions upfront via [this form](https://airtable.com/shrAH7d8CAPtp62IA) or ask them during the stream. See you there.
content/events/2022-08-27-urbit-outside-alta-plaza.mddeleted−17
@@ -1,17 +0,0 @@
1−+++
2−title = "Urbit Outside: Alta Plaza Park"
3−starts = "2022-08-27T13:00:00"
4−ends = "2022-08-27T19:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Alta Plaza Park, San Francisco, CA"
7−image = ""
8−registration_url = "https://www.meetup.com/urbit-sf/events/287769170/"
9−description = "Urbit Outside in San Francisco"
10−+++
11−
12−Please join us for a park meetup (picnic optional!) at Alta Plaza Park in Pacific Heights, SF, on Saturday, 8/27. We'll meet at 1:00PM and stay as long as people want to chat. Bring a jacket and your choice of food/drink.
13−Interested friends and the Urbit-curious are always welcome!
14−
15−**Time and date:** 1:00PM, August 27th, 2022
16−
17−**Place:** Alta Plaza Park, San Francisco, CA
content/events/2022-09-08-developer-call-future-of-khan.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Developer Call: The Future of %khan"
3−starts = "2022-09-08T09:00:00"
4−ends = "2022-09-08T10:30:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/2022-09-08-Developer-Call.jpg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/287886460/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = "cdSFvFNFqpI"
13−
14−[[hosts]]
15−name = "Neal Davis"
16−patp = "~lagrev-nocfep"
17−
18−[[guests]]
19−patp = "~littel-wolfur"
20−
21−+++
22−
23−~littel-wolfur will be talking about the history and state of %khan, a new thread orchestrator vane in Urbit. He will go over its usage in apps like the discord bot by ~midsum-salrux, how it makes thread interaction much easier, and how future %khan clients will make native noun communication possible. There will be a simple demo of a naive client at the end of the talk.
24−
25−~littel-wolfur is a longtime Urbit contributor currently working on devex for smart contracts at Uqbar.
content/events/2022-09-15-developer-call-IoT.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Developer Call: Sovereign smart home"
3−starts = "2022-09-15T09:00:00"
4−ends = "2022-09-15T10:30:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/%202022-09-15-Developer-Call.jpg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/288072398"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = "TKfcdF43cak"
13−
14−[[hosts]]
15−name = "Neal Davis"
16−patp = "~lagrev-nocfep"
17−
18−[[guests]]
19−patp = "~pilwyc-fastec"
20−
21−+++
22−
23−Join us on September 15th to talk to ~pilwyc-fastec about Communal Computing and the Internet of Things (IoT). ~pilwyc-fastec has been studying how Urbit and Internet of Things (IoT) devices can complement each other securely. Connected devices open up new frontiers of integration and automation, but have tradeoffs in security and control worth considering as users and developers.
24−
25−~pilwyc-fastec is an IoT hobbyist, smart home enthusiast, Alexa skill builder, and most recently was product manager for the identity platform, biometric recognition machine learning, and voice assistant integration for Facebook’s Portal. He recently published [a blog post on Communal Computing](https://urbit.org/blog/smart-home-of-the-future).
26−
27−We'll discuss how Urbit and Communal Computing ideas complement each other, and where work remains to be done. The smartest home is one you still control yourself.
content/events/2022-09-19-rabbit-hole-talk.mddeleted−19
@@ -1,19 +0,0 @@
1−+++
2−title = "CoinFund x Urbit – Rabbit Hole Talk"
3−starts = "2022-09-19T18:30:00"
4−ends = "2022-09-19T20:00:00"
5−timezone = "America/New_York"
6−location = "The LAB Miami, 400 NW 26th St, Miami, FL 33127, United States"
7−registration_url = "https://00rf5q21xy2.typeform.com/urbit?typeform-source=www.coinfund.io"
8−description = "Urbits and bobs"
9−dark = false
10−
11−[[hosts]]
12−name = "CoinFund"
13−
14−[[guests]]
15−name = "Josh Lehman"
16−patp = "~wolref-podlex"
17−+++
18−
19−Josh Lehman, Executive Director of the Urbit Foundation and CoinFund discuss web3 leadership, the importance of community, and what reimagining the internet means for all of us.
content/events/2022-09-22-assembly.mddeleted−14
@@ -1,14 +0,0 @@
1−+++
2−title = "Assembly 2022"
3−starts = "2022-09-22T09:00:00"
4−ends = "2022-09-25T19:00:00"
5−timezone = "America/New_York"
6−location = "In Person Event"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/2022-09-24-Assembly.jpg"
8−description = "Urbit Assembly 2022 is the second ever Urbit confluence coming to you this year from Miami Beach."
9−
10−+++
11−
12−Last year we showcased the release of software distribution which enabled other developers to use Urbit as infrastructure for their creations. This year we’ll be showcasing an entire ecosystem of New World Energy.
13−
14−Visit assembly.urbit.org for information on speakers, scheduling, and registration.
content/events/2022-10-13-devcon-bogotá-urbit-meetup-22.mddeleted−36
@@ -1,36 +0,0 @@
1−+++
2−title = "Devcon Bogotá: Urbit Meetup Colombia"
3−starts = "2022-10-13T20:00:00"
4−ends = "2022-10-13T23:00:00"
5−timezone = "America/Bogota"
6−location = "Cra. 8 #66-18 Carrera 8 #66-18 · Bogotá"
7−registration_url = "https://www.meetup.com/urbit-sf/events/288827515/"
8−description = "Devcon Urbit Meetup"
9−dark = false
10−
11−[[hosts]]
12−patp = "~wolref-podlex"
13−
14−[[hosts]]
15−patp = "~riprud-tidmel"
16−
17−[[hosts]]
18−patp = "~lagrev-nocfep"
19−
20−[[hosts]]
21−patp = "~rovnys-ricfer"
22−
23−[[hosts]]
24−patp = "~datder-sonnet"
25−
26−[[hosts]]
27−patp = "~lasnup-fabful"
28−
29−[[hosts]]
30−patp = "~dinleb-rambep"
31−
32−[[hosts]]
33−patp = "~dalweb-donfun"
34−+++
35−
36−Urbit Foundation and Tlon invite you to an evening at [Bar Continental](https://www.google.com/maps/place//data=!4m2!3m1!1s0x8e3f9b3980826eb5:0x66696deb3877b7b?source=g.page.share) in Bogotá, Colombia. We’ll meet at 8pm for snacks and drinks, and maybe a cigar in the lounge upstairs. Interested friends and the Urbit-curious are always welcome!
content/events/2022-11-01-developer-week.mddeleted−75
@@ -1,75 +0,0 @@
1−+++
2−title = "Urbit Developer Week"
3−starts = "2022-11-14T09:00:00"
4−ends = "2022-11-18T17:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/developer-week.jpg"
8−registration_url = "https://www.meetup.com/urbit-sf/"
9−description = ""
10−
11−+++
12−
13−It's been almost two months since Assembly and the last cohort of Hoon School Live has just finished. The year is drawing to a close and the Urbit developer community is getting bigger every day. This calls for a celebration.
14−
15−From the 14th through the 18th of November the Urbit Foundation is organizing a week full of announcements, thoughtful conversations, launches, and more.
16−
17−## Schedule
18−| Date – Time* | What | Meetup | Youtube |
19−|---------------|-------------------------------|-----------------------------------------------------------|------------------------------------------------------|
20−| 11/14 – 10:00 | Urbit Foundation | [here](https://www.meetup.com/urbit-sf/events/289623363/) | [here](https://www.youtube.com/watch?v=xCxHvkS9o8g ) |
21−| 11/15 – 10:00 | The Network State's Ministry of Education| [here](https://www.meetup.com/urbit-sf/events/289629398/) | [here](https://www.youtube.com/watch?v=dTpw2DG6WBc) |
22−| 11/15 – 13:00 | Volcano Summit | [here](https://www.meetup.com/urbit-sf/events/289629419/) | [here](https://www.youtube.com/watch?v=ckFsPr-DXNE) |
23−| 11/16 – 08:00 | Encode Club x Urbit Hackathon | [here](https://www.meetup.com/urbit-sf/events/289646836) | [here](https://www.youtube.com/watch?v=Mn_kGE9Ndbw) |
24−| 11/16 – 10:00 | Speed Hooning | [here](https://www.meetup.com/urbit-sf/events/289629435/) | [here](https://www.youtube.com/watch?v=eRz3s9dQZe8) |
25−| 11/17 – 12:00 | Core Roadmap | [here](https://www.meetup.com/urbit-sf/events/289629450/) | [here](https://www.youtube.com/watch?v=BJaRloyA02Y) |
26−| 11/17 – 13:00 | Core Dev AMA | [here](https://www.meetup.com/urbit-sf/events/289629467/) | [here](https://www.youtube.com/watch?v=SI_B7H8tSRE) |
27−| 11/18 – 10:00 | So you want to work on Urbit? | [here](https://www.meetup.com/urbit-sf/events/289629483/) | [here](https://www.youtube.com/watch?v=j96Gb6dXaNs) |
28−| 11/18 – 12:00 | Engine Pattern | [here](https://www.meetup.com/urbit-sf/events/289629506/) | [here](https://www.youtube.com/watch?v=T4VyW72zX0w) |
29−
30−**times are in Pacific Time*
31−
32−### Developer Week: Urbit Foundation
33−Want to know what’s new at the Urbit Foundation? On Monday Josh Lehman and Ted Blackman will kick-off Urbit Developer Week with a look back at the first year of the Urbit Foundation’s existence and share some exciting news with you. Make sure to tune in and ask your questions.
34−
35−[Meetup](https://www.meetup.com/urbit-sf/events/289623363/) | [Youtube](https://www.youtube.com/watch?v=xCxHvkS9o8g )
36−
37−### Developer Week: The Network State's Ministry of Education
38−In the last year Hoon Education has taken-off and hundreds of people have gone through Hoon School including Dr. Murphy himself. Tune in to watch the two post-academics talk about education on Urbit, opportunities for developers, and what the future has in store for new Hooners.
39−
40−[Meetup](https://www.meetup.com/urbit-sf/events/289629398/) | [Youtube](https://www.youtube.com/watch?v=dTpw2DG6WBc)
41−
42−### Developer Week: Volcano Summit
43−Assembly is barely two months out and there is already a new event waiting for us. The Urbit Foundation and Tlon have teamed up with AlephDAO to organize a new developer summit. Writing runes in magma has never been so comfortable.
44−
45−[Meetup](https://www.meetup.com/urbit-sf/events/289629419/) | [Youtube](https://www.youtube.com/watch?v=ckFsPr-DXNE)
46−
47−### Developer Week: Encode Club x Urbit Hackathon
48−A new Hackathon for developers is being launched in just a few weeks. If you haven’t signed up for it yet, make sure to do so quickly. During this event we will let you know all the ins and outs about the Encode Club x Urbit Hackathon so you are ready to sign up and start preparing. More information about the hackathon can be found [here](https://www.encode.club/urbit-hackathon).
49−
50−[Meetup](https://www.meetup.com/urbit-sf/events/289646836) | [Youtube](https://www.youtube.com/watch?v=Mn_kGE9Ndbw)
51−
52−### Developer Week: Speed Hooning with Quartus
53−Nobody is quicker than Quartus. In this workshop ~rabsef-bicrym will build a reminder application from scratch that integrates with the new %homestead and show you how you can do it as well. Are you up for the challenge?
54−
55−[Meetup](https://www.meetup.com/urbit-sf/events/289629435/) | [Youtube](https://www.youtube.com/watch?v=eRz3s9dQZe8)
56−
57−### Developer Week: Core Roadmap
58−Urbit Core Development is opening up to the world. Want to see where it is going? Join Philip Monk and Ted Blackman to listen to the new vision on core development, their plans for the future and what is in the pipeline already.
59−
60−[Meetup](https://www.meetup.com/urbit-sf/events/289629450/) | [Youtube](https://www.youtube.com/watch?v=BJaRloyA02Y)
61−
62−### Developer Week: Core Dev AMA
63−Have a burning question for the core developers of Urbit about what's going on or where things are going? Urbit’s core developers will be available to answer any questions you have. Join ~rovnys-ricfer, ~wicdev-wisryt, ~palfun-foslup & ~master-morzod on Thursday right after the Roadmap presentation.
64−
65−[Meetup](https://www.meetup.com/urbit-sf/events/289629467/) | [Youtube](https://www.youtube.com/watch?v=SI_B7H8tSRE)
66−
67−### Developer Week: So you want to work on Urbit?
68−Just finished Hoon School? Or always wanted to work for an Urbit company but don’t know where to start? In this session ~poldec-tonteg will lead a panel with several Urbit companies about their open positions, hiring strategies, and explain how you can join them.
69−
70−[Meetup](https://www.meetup.com/urbit-sf/events/289629483/) | [Youtube](https://www.youtube.com/watch?v=j96Gb6dXaNs)
71−
72−### Developer Week: Engine Pattern
73−The "engine pattern" in Hoon programs is a newer design pattern that extends working with cores to higher-level domain-specific abstractions. Join Neal Davis and Ted Blackman in their conversation about this little-known piece of magic.
74−
75−[Meetup](https://www.meetup.com/urbit-sf/events/289629506/) | [Youtube](https://www.youtube.com/watch?v=T4VyW72zX0w)
content/events/2022-11-19-urbit-irl.mddeleted−18
@@ -1,18 +0,0 @@
1−+++
2−title = "Urbit SF Meetup ~2022.11"
3−starts = "2022-11-19T13:00:00"
4−ends = "2022-11-19T17:00:00"
5−location = "Alamo Square Park"
6−registration_url = "https://www.meetup.com/urbit-sf/events/289653432/"
7−description = "Please join us for a park meetup (picnic optional!) at Alamo Square Park in San Francisco, on Saturday, 11/19."
8−guests = ""
9−timezone = "America/Los_Angeles"
10−
11−[[hosts]]
12−name = "Tlon"
13−+++
14−
15−Please join us for a park meetup (picnic optional!) at Alamo Square Park in San Francisco, on Saturday, 11/19. We'll meet at 1:00PM and stay as long as people want to chat. Bring a jacket and your choice of food/drink.
16−Interested friends and the Urbit-curious are always welcome!
17−
18−We'll meet in the SW corner of the park, on Hayes St near the dog area.
content/events/2022-19-10-developer-call-herd-dependency.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Developer Call: herd – dependency management"
3−starts = "2022-10-19T09:00:00"
4−ends = "2022-10-19T10:30:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/devcall-web1.jpg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/288936277"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = "xtlF7ME0Xws"
13−
14−[[hosts]]
15−name = "Neal Davis"
16−patp = "~lagrev-nocfep"
17−
18−[[guests]]
19−patp = "~midsum-salrux"
20−
21−+++
22−
23−The big winner of our Hackathon will show off herd in this month's developer call. Herd is a dependency management tool for hoon. With herd, you don't have to include all the libraries you use on your application desk; instead, you get them from other desks on your ship. This talk is a walkthrough of creating a desk with herd, adding new dependencies, and running and distributing your application.
24−
25−~midsum-salrux is a full-stack hoon developer. In addition to herd, he has written tendiebot (a chatbot that fetches stock and crypto prices), faux (a bridge between urbit groups and discord) and tracks (an upcoming dashboard app).
content/events/2023-01-28-urbit-meetup-christchurch.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "Urbit Meetup - Christchurch"
3−starts = "2023-01-28T10:30:00"
4−ends = "2023-01-28T12:00:00"
5−timezone = "Pacific/Auckland"
6−location = "363 St Asaph Street, Christchurch"
7−image = "https://silo.sgp1.digitaloceanspaces.com/silo/dinnul-namrud/2023.1.20..04.41.17-kishan-modi-9Pq4o76GpAo-unsplash.jpg"
8−registration_url = "https://chchurbit.eventbrite.com"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~dinnul-namrud"
16−
17−+++
18−
19−The first meetup in Christchurch is at The Lotus Heart on the 28th January at 10:30am. Stick around afterwards for a drink and bite to eat if you desire.
20−
21−Please RSVP to the Meetup. Friends are most welcome!
content/events/2023-01-31-urbit-meetup-krakow.mddeleted−26
@@ -1,26 +0,0 @@
1−+++
2−title = "Urbit Meetup - Kraków"
3−starts = "2023-01-31T19:00:00"
4−ends = "2023-01-31T22:00:00"
5−timezone = "Europe/Amsterdam"
6−location = "HEVRE - Beera Meiselsa 18, 31-058 Kraków, Poland"
7−image = "https://kongres-magazine.eu/wp-content/uploads/2021/11/hevre_krakow-1.png"
8−registration_url = "https://www.meetup.com/urbit-sf/events/291029359?utm_medium=referral&utm_campaign=share-btn_savedevents_share_modal&utm_source=link"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~dalweb-donfun"
16−
17−[[hosts]]
18−patp = "~wistec-bisrum"
19−
20−+++
21−
22−The first meetup in Poland will be in Kraków on Tuesday the 31st of January. You are welcome to join ~dalweb-donfun and ~wistec-bisrum at the Hevre bar from 19:00 for some drinks and good Urbit discussions. Wether you are new to Urbit or already a full-time Hooner be welcome and bring some friends.
23−
24−Please RSVP to the Meetup.
25−
26−There is a planet waiting for you at Hevre.
content/events/2023-02-23-urbit-meetup-berlin.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Urbit Meetup - Berlin"
3−starts = "2023-02-23T20:00:00"
4−ends = "2023-02-23T23:00:00"
5−timezone = "Europe/Amsterdam"
6−location = "c-base - Rungestraße 20 · Berlin, Deutschland"
7−image = "https://upload.wikimedia.org/wikipedia/commons/6/60/Dr._MeTaMiNd_robolab_c-base_spacestation_hackerspace_Berlin_%2812933669604%29.jpg"
8−registration_url = "https://www.meetup.com/urbit-berlin/events/291660889/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~bithex-topnym"
16−
17−+++
18−
19−The first Urbit Berlin meetup at our new location: c-base!
20−
21−If you are new to Urbit, this is a great time and place to learn more.
22−
23−For this first meetup we will simply meet, mingle and discuss new and exciting things happening on the network, like: App School Live, Uqbar, Scene, Native Planet, and the upcoming Volcano Summit in El Salvador.
24−
25−The vibe at c-base is great and retro-technological, there is an bar and we have a table booked just for us. There will be other Meetups on various technological and futuristic topics happening at the same time if you like to mingle around.
26−
27−Please RSVP to the Meetup.
content/events/2023-03-05-meetup-el-salvador.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Urbit Meetup – El Salvador"
3−starts = "2023-03-05T19:00:00"
4−ends = "2023-03-05T22:00:00"
5−timezone = "America/El_Salvador"
6−location = "Urbit Mansion - San Salvador"
7−image = "https://elsalvador.travel/img/slide04.jpg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/290917526"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~nilrun-mardux"
16−
17−[[hosts]]
18−patp = "~rovnys-ricfer"
19−
20−+++
21−
22−Just before we all gather for the [Urbit Volcano Summit](https://summit.urbit.org) we are inviting all Urbit people that are already in town and curious locals to an Urbit meetup at the Urbit Mansion in San Salvador. The exact location will be shared with the registered attendees a few days before.
23−
24−Drinks will be provided. See you there.
content/events/2023-03-25-urbit-meetup-christchurch.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "Urbit Meetup - Christchurch"
3−starts = "2023-03-25T10:30:00"
4−ends = "2023-03-25T12:00:00"
5−timezone = "Pacific/Auckland"
6−location = "363 St Asaph Street, Christchurch"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-christchurch.jpg"
8−registration_url = "https://chchurbit.eventbrite.com"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~dinnul-namrud"
16−
17−+++
18−
19−The next meetup in Christchurch is at The Lotus Heart on the 25th March at 10:30am. Stick around afterwards for a drink and bite to eat if you desire.
20−
21−Please RSVP to the Meetup. Friends are most welcome!
content/events/2023-04-18-urbit-lisbon.mddeleted−19
@@ -1,19 +0,0 @@
1−+++
2−title = "Urbit Meetup - Lisbon"
3−starts = "2023-04-20T19:00:00"
4−ends = "2023-04-20T22:00:00"
5−timezone = "Europe/Lisbon"
6−location = "Quiosque São Paulo – Praça São Paulo, 1200-194 Lisboa"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/lisbon.jpeg"
8−registration_url = "https://www.meetup.com/urbit-sf/events/292978187"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~dalweb-donfun"
16−
17−+++
18−
19−Around in Lisbon this Thursday? ~dalweb-donfun will be hosting a meetup at 7pm. Come by for a drink with other urbiters. RSVP to the meetup event or send ~dalweb-donfun a message on the network. See you on Thursday!
content/events/2023-04-27-urbit-meetup-berlin.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Urbit Meetup - Berlin"
3−starts = "2023-04-27T20:00:00"
4−ends = "2023-04-27T22:00:00"
5−timezone = "Europe/Amsterdam"
6−location = "MUTED HORN – Flughafenstraße 49, 12053 Berlin"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/DSCF1208_09_10.jpg"
8−registration_url = "https://www.meetup.com/urbit-berlin/events/293050078/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~bithex-topnym"
16−
17−+++
18−
19−If you are new to Urbit, this is a great time and place to learn more.
20−
21−Topic: open grants – what do they say about the future of Urbit and what kind of knowledge do you need to start building on them?
22−
23−As always, we are also helping new people get on Urbit to try it out, answer technical questions and discuss philosophical questions around Urbit.
24−
25−We have temporarily changed locations to Muted Horn, one of the best craft beer pubs in Northern Europe. It is also possible to order food from nearby restaurants and eat there. If the weather is great we will be sitting outside.
26−
27−Please RSVP to the Meetup.
content/events/2023-04-27_urbit-austin-meetup-consensus.mddeleted−16
@@ -1,16 +0,0 @@
1−+++
2−title = "Urbit Austin – Consensus 2023"
3−starts = "2023-04-27T18:30:00"
4−ends = "2023-04-27T20:00:00"
5−timezone = "America/Chicago"
6−location = "Garage – 503 Colorado St · Austin, TX"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/garage-austin.jpg"
8−registration_url = "https://www.meetup.com/urbit-austin/events/293135783"
9−description = "Urbit Austin meetup @ Consensus 2023 presented by the Urbit Foundation"
10−dark = true
11−
12−+++
13−
14−Come hangout, drink cocktails at our open bar and talk Urbit during Consensus 2023. We will most likely have a short presentation or two from leaders of the top projects being built. We expect attendance from the Urbit Foundation, Tlon, Zorp, Uqbar, Holium, Assembly Capital and more. Rumor has it there might be free Urbit hats too.
15−
16−If you haven't joined the network yet, bring a computer and we will help you get set up. Other than that we'll have some food and good tunes as well. See you there!
content/events/2023-05-10_urbit-meetup-berlin.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Urbit Meetup - Berlin"
3−starts = "2023-05-10T20:00:00"
4−ends = "2023-05-10T22:00:00"
5−timezone = "Europe/Amsterdam"
6−location = "MUTED HORN – Flughafenstraße 49, 12053 Berlin"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/DSCF1208_09_10.jpg"
8−registration_url = "https://www.meetup.com/urbit-berlin/events/293192363/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~bithex-topnym"
16−
17−+++
18−
19−We didn't get to cover all we wanted last time and there were lots of outstanding questions, so let's do another extra meetup, rather than wait another month!
20−
21−Tentative topic: Urbit identity, art, and culture. What kind of expression is Urbit uniquely suited for? What would be some cool grants we could apply for?
22−
23−We have temporarily changed locations to Muted Horn, one of the best craft beer pubs in Northern Europe with a cozy vibe. It is also possible to order food from nearby restaurants and eat there. If the weather is great we will be sitting outside.
24−
25−Please RSVP to the Meetup.
content/events/2023-05-14_urbit-meetup-london.mddeleted−23
@@ -1,23 +0,0 @@
1−+++
2−title = "Urbit Meetup - London"
3−starts = "2023-05-14T18:00:00"
4−ends = "2023-05-14T20:00:00"
5−timezone = "Europe/London"
6−location = "Cleopatra's Needle – London"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-london.jpg"
8−registration_url = ""
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~tichus-holnet"
16−[[hosts]]
17−patp = "~dalweb-donfun"
18−
19−+++
20−
21−This Sunday we'll be doing a meeting up at cleopatra's needle. You'll recognise us by Urbit caps and citing Hoon outloud. See you all on Sunday, byob. Rach out to us on Urbit in case you can't find us.
22−
23−![Picture](https://storage.googleapis.com/media.urbit.org/site/events/2023-05-11%2011.45.27.jpg)
content/events/2023-05-18_urbit-denver-meetup.mddeleted−19
@@ -1,19 +0,0 @@
1−+++
2−title = "Urbit Meetup - Denver"
3−starts = "2023-05-18T18:30:00"
4−ends = "2023-05-18T20:30:00"
5−timezone = "US/Mountain"
6−location = "Avanti Food & Beverage - 3200 N. Pecos St, Denver, CO"
7−image = "https://urbits3bucket.fra1.digitaloceanspaces.com/UrbMeet6.jpg"
8−registration_url = "https://www.meetup.com/mile-high-mars-denver-urbit-group/events/293433336/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~nospex-larsut"
16−
17−+++
18−Group will meet at the upstairs tables towards the rear of the venue - just take a left when you get to the top of the stairs. Message on the meetup app or through Urbit/Pongo (~nospex-larsut) if unsure.
19−Please RSVP to the Meetup.
content/events/2023-05-18_urbit-miami-meetup.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit Meetup - Miami"
3−starts = "2023-05-18T21:00:00"
4−ends = "2023-05-19T03:00:00"
5−timezone = "America/New_York"
6−location = "Eagle Room @ The Broken Shaker 9PM - 3AM"
7−image = "https://i.imgur.com/8x7hpNv.jpg"
8−registration_url = "https://www.meetup.com/urbit-miami/events/293537002/"
9−description = "Miamese Martian congregation parties all night long. Drinks, Food, DJ. Semi-formal attire."
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~wolfun-batrex"
16−
17−+++
18−Group will meet in the Eagle Room. Ask the hostess for directions. Event Space Aesthetic is Spectral South-Beach. DJ comes at 10PM. Bring proof of planet for Miamese Martians.
19−
20−Please RSVP to the Meetup page by clicking the RSVP button above.
content/events/2023-05-27_urbit-meetup-london.mddeleted−21
@@ -1,21 +0,0 @@
1−+++
2−title = "Urbit London x Giga"
3−starts = "2023-05-27T19:00:00"
4−ends = "2023-05-27T00:00:00"
5−timezone = "Europe/London"
6−location = "HAMPTON TOWER - CANARY WHARF"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/Screenshot%202023-05-26%20at%2007.14.48.png"
8−registration_url = "https://lu.ma/a2ksogr8"
9−description = "urbLon × giga present: Water Wellness Retreat"
10−dark = true
11−darken_image = "true"
12−
13−
14−[[hosts]]
15−patp = "~tichus-holnet"
16−[[hosts]]
17−patp = "~narpel-machul"
18−
19−+++
20−
21−Next Saturday, make your way to Hampton Tower in Canary Wharf. You will be escorted to the Giga Corp premises, in which the 7th Urbit London meet-up will take place. Expect drinks, discussion, and much more. https://t.me/urblon
content/events/2023-05-27_urbit-meetup-mst.mddeleted−20
@@ -1,20 +0,0 @@
1−+++
2−title = "Urbit Meetup - Utah MST"
3−starts = "2023-05-28T17:00:00"
4−ends = "2023-05-28T19:00:00"
5−timezone = "America/Phoenix"
6−location = "LION'S PARK – 950 W 1280 N ST, PROVO, UTAH"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-utah.png"
8−registration_url = "https://urbitmst.org/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−
13−[[hosts]]
14−patp = "~sonmeg-tomdex"
15−
16−+++
17−
18−Are you looking for more than the options presented to you?
19−
20−Come to our Urbit (MST) meetup. All are welcome. Bring a computer and we can onboard you with a planet and hosting for free on site. Whether you are new to Urbit or fluent in Hoon, come and meet others in Utah interested in Urbit.
content/events/2023-06-03-urbit-meetup-christchurch.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Urbit Meetup - Christchurch"
3−starts = "2023-06-03T10:30:00"
4−ends = "2023-06-03T12:00:00"
5−timezone = "Pacific/Auckland"
6−location = "363 St Asaph Street, Christchurch"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-christchurch.jpg"
8−registration_url = "https://www.meetup.com/urbit-christchurch/events/293265373"
9−description = ""
10−dark = true
11−darken_image = "true"
12−
13−[[hosts]]
14−patp = "~dinnul-namrud"
15−
16−+++
17−
18−The next meetup in Christchurch is at The Lotus Heart on the 3rd June at 10:30am. Stick around afterwards for a drink and bite to eat if you desire.
19−
20−Please [RSVP](https://www.meetup.com/urbit-christchurch/events/293265373) to the Meetup. Friends are most welcome!
21−
22−
23−
24−
content/events/2023-06-08_urbit-meetup-berlin.mddeleted−25
@@ -1,25 +0,0 @@
1−+++
2−title = "Urbit Meetup - Berlin"
3−starts = "2023-06-08T20:00:00"
4−ends = "2023-06-08T22:00:00"
5−timezone = "Europe/Amsterdam"
6−location = "MUTED HORN – Flughafenstraße 49, 12053 Berlin"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/DSCF1208_09_10.jpg"
8−registration_url = "https://www.meetup.com/urbit-berlin/events/293860274/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~bithex-topnym"
16−
17−+++
18−
19−If you are new to Urbit, this is a great time and place to learn more.
20−
21−Topic: App building
22−
23−We are at Muted Horn, one of the best craft beer pubs in Northern Europe with a cozy vibe. It is also possible to order food from nearby restaurants and eat there. If the weather is great we will be sitting outside.
24−
25−Please RSVP to the Meetup.
content/events/2023-06-08_urbit-meetup-prague.mddeleted−39
@@ -1,39 +0,0 @@
1−+++
2−title = "Urbit Meetup Prague"
3−starts = "2023-06-08T14:00:00"
4−ends = "2023-06-08T18:00:00"
5−timezone = "Europe/Amsterdam"
6−location = "loftbubny – U Papírny, 170 00 Praha 7-Holešovice, Czechia"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/59f4fabd-ac53-4c0d-b578-04d2fe6d4b09.webp"
8−registration_url = "https://lu.ma/urbitprague"
9−description = "Urbit Meetup during Prague Blockchain Week at L2Loft"
10−dark = true
11−darken_image = "true"
12−
13−[[hosts]]
14−name = "Owen Barnes"
15−patp = "~locruc-fonmec"
16−
17−+++
18−Urbit - A clean-slate OS and network for the 21st century.
19−
20−​The meetup takes place as part of the [L2Loft](https://lu.ma/l2loft) initiative.
21−
22−​Date: Thursday 8 June, 2023
23−Expected time: 14:00 - 16:00 (it may change!)
24−
25−**​Schedule:**
26−
27−[​Owen Barnes ](https://twitter.com/temporalwave) (~locruc-fonmec) - The Future of Apps
28−
29−​*More TBA*
30−
31−​Register for the event and stay tuned for more information! You can also join the L2Loft [Telegram group](https://t.me/l2loft) or follow [@L2Loft on Twitter](https://twitter.com/L2Loft).
32−
33−​---
34−
35−Urbit is a new kind of computer that you can own completely in ways that matter: networking, identity, & data.
36−
37−​We realized that in order to fix the internet, we had to build a new computer from scratch. Good thing we started over a decade ago.
38−
39−​Today, Urbit is a real system with thousands of users that are building all kinds of communities, software, DAOs, and more. And it’s getting better every day.
content/events/2023-06-12-developer-week.mddeleted−95
@@ -1,95 +0,0 @@
1−+++
2−title = "Urbit Developer Week"
3−starts = "2023-06-12T09:00:00"
4−ends = "2023-06-16T17:00:00"
5−timezone = "America/Los_Angeles"
6−location = "Online Event"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/dev-week-gif.gif"
8−registration_url = "https://www.meetup.com/urbit-sf/"
9−description = "2nd Dev-Week – full of talks, blogs and announcements"
10−dark = true
11−
12−+++
13−
14−After the success of our last developer week, we’re hosting another one this year from June 12th to June 16th. This will be a week of online only conversations, build parties, AMAs, blog posts, and other content.
15−
16−There will be watch parties for all streams in the Hacker House on gather.town. Instructions for joining can be found in the [Urbit Foundation group](/groups/~halbex-palheb/uf-public).
17−
18−## Schedule
19−### Kicking Off Developer Week
20−*Time:* Monday June 12th – 9am Pacifc | 6pm CEST
21−
22−We will kick off Urbit developer week with an introduction by ~wolref-podlex, ~lagrev-nocfep & ~dalweb-donfun. They will give you a sneak peek into what's awaiting you at Assembly this year, give you an update about the Foundation and tell you all about how to get involved with Urbit right now. Some very exciting announcements are waiting for you here.
23−
24−[Meetup](https://www.meetup.com/urbit-sf/events/293888554/) | [Youtube](https://www.youtube.com/watch?v=38K2RfaScL8)
25−
26−### %Lick by ~mopfel-winrux
27−*Time:* Monday June 12th – noon Pacifc | 9pm CEST
28−
29−~mopfel-winrux, lead developer at [Native Planet](/organizations/nativeplanet), has taken it upon himself to build a hardware vane that lets your Urbit directly communicate with the machine it's running on. This opens up an array of new possibilities. In this talk ~lagrev-nocfep will interview ~mopfel-winrux about his progress, and we might even see a demo.
30−
31−[Meetup](https://www.meetup.com/urbit-sf/events/294013274/) | [Youtube](https://www.youtube.com/watch?v=TDROdmVW7_0)
32−
33−### Core Roadmap
34−*Time:* Tuesday June 13th – 9am Pacifc | 6pm CEST
35−
36−In this talk our CTO ~rovnys-ricfer, together with ~master-morzod & ~wolref-podlex, will give an update on the Roadmap and talk about other news concerning Urbit’s core development. There are some exciting announcements coming up.
37−
38−[Meetup](https://www.meetup.com/urbit-sf/events/293893446/) | [Youtube](https://www.youtube.com/watch?v=vmqn36RtnBk)
39−
40−### Core Developers AMA
41−*Time:* Tuesday June 13th – 10am Pacifc | 7pm CEST
42−
43−Always wanted to ask the core developers something? In this AMA they will be available to answer any questions you have. Join ~rovnys-ricfer, ~wicdev-wisryt, ~palfun-foslup & ~master-morzod on Tuesday right after the Roadmap presentation.
44−
45−[Meetup](https://www.meetup.com/urbit-sf/events/293893486/) | [Youtube](https://www.youtube.com/watch?v=BolurhVR6N4)
46−
47−### Portal
48−*Time:* Tuesday June 13th – noon Pacifc | 9pm CEST
49−
50−In this talk ~foddur-hodler and ~dilryd-mopreg from [Portal](/applications/~worpet-bildet/portal) will update you on their latest developments. They are excited to share their experiences using solid state subscriptions, to present their ideas on what they're calling *the everything graph*, and to explain why they're "composability-maxxing."
51−
52−[Meetup](https://www.meetup.com/urbit-sf/events/294013283/) | [Youtube](https://www.youtube.com/watch?v=6J8-jlqz2r4)
53−
54−### Core School Preview: Jetting
55−*Time:* Wednesday June 14th – 9am Pacifc | 6pm CEST
56−
57−Core School approacheth. To whet your appetite for the inner mysteries of the kernel, we will discuss how jet-accelerated code works and how to write jets for arms. Join ~lagrev-nocfep & ~rovnys-ricfer at a preview of Core School content. And make sure to check out our [CSL page](https://developers.urbit.org/courses/csl) for more details.
58−
59−[Meetup](https://www.meetup.com/urbit-sf/events/294013289/) | [Youtube](https://www.youtube.com/watch?v=i1GRoY3QDdU)
60−
61−### %Eyre by ~palfun-foslup
62−*Time:* Wednesday June 14th – noon Pacifc | 9pm CEST
63−
64−Urbit solves a lot of problems with digital identity. But its HTTP server, Eyre, hasn't gotten the memo yet. Two new Eyre features will make identifying incoming HTTP requests much nicer, letting developers deliver richer experiences, even on publicly accessible web pages. Join ~palfun-foslup at this session about %Eyre.
65−
66−[Meetup](https://www.meetup.com/urbit-sf/events/294013295/) | [Youtube](https://www.youtube.com/watch?v=eN_oh_orCcg)
67−
68−### Native UI
69−*Time:* Thursday June 15th – 9am Pacifc | 6pm CEST
70−
71−Using JavaScript on Urbit has always felt a bit off. ~hastuc-dibtux is going to change this with his Urbit Native UI project. Rendering Hoon as a frontend? Piece of cake.
72−In this talk ~palfun-foslup will interview ~hastuc-dibtux about his project. Don’t miss the future of UIs.
73−
74−[Meetup](https://www.meetup.com/urbit-sf/events/293893568/) | [Youtube](https://www.youtube.com/watch?v=1l9dnppQO1U)
75−
76−### Integrating Uqbar Transactions
77−*Time:* Thursday June 15th – noon Pacifc | 9pm CEST
78−
79−Want to know how to integrate Uqbar smart contracts with your app? In this presentation Uqbar's lead developer ~hodzod-walrus will walk you through what it takes to integrate your app with Uqbar's smart contracts. It's easier than you think.
80−
81−[Meetup](https://www.meetup.com/urbit-sf/events/294013302/) | [Youtube](https://www.youtube.com/watch?v=Q-aZZabT6_M)
82−
83−### Vaporware
84−*Time:* Friday June 16th – 9am Pacifc | 6pm CEST
85−
86−In this talk ~harden-hardys will prove that [Vaporware](https://vaporware.network) is not actually vaporware. Get to know what he and his team are up to and you might even see a glimpse or more of their first public project, *Tharsis*.
87−
88−[Meetup](https://www.meetup.com/urbit-sf/events/294013311/) | [Youtube](https://www.youtube.com/watch?v=bh5U5q9Qp_k)
89−
90−### What to Build on Urbit and Why
91−*Time:* Friday June 16th – noon Pacifc | 9pm CEST
92−
93−AJ or ~larryx-woldyr recently launched a suite of Urbit-hosted front-ends for [Osmosis](/applications/~larryx-woldyr/osmosis), [Uniswap](/applications/~larryx-woldyr/uniswap) and [Safe](/applications/~larryx-woldyr/safe). In this talk he'll dive into why he thinks you should build on Urbit and what you should build on it. Tune in to his closing talk of Developer Week on Friday.
94−
95−[Meetup](https://www.meetup.com/urbit-sf/events/294013323/) | [Youtube](https://www.youtube.com/watch?v=AARwK5cGavw)
content/events/2023-06-15_urbit-denver-meetup.mddeleted−19
@@ -1,19 +0,0 @@
1−+++
2−title = "Urbit Meetup - Denver"
3−starts = "2023-06-15T18:30:00"
4−ends = "2023-06-15T20:30:00"
5−timezone = "US/Mountain"
6−location = "Federal Bar & Grill - 2544 Federal Blvd, Denver, CO"
7−image = "https://urbits3bucket.fra1.digitaloceanspaces.com/UrbMeet7.jpg"
8−registration_url = "https://www.meetup.com/mile-high-mars-denver-urbit-group/events/293937089/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−youtube = ""
13−
14−[[hosts]]
15−patp = "~nospex-larsut"
16−
17−+++
18−Will have a table reseerved to accommodate number of RSVPs; just ask for Adam.
19−Please RSVP to the Meetup.
content/events/2023-06-24-urbit-meetup-christchurch.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Urbit Meetup - Christchurch"
3−starts = "2023-06-24T10:30:00"
4−ends = "2023-06-24T12:00:00"
5−timezone = "Pacific/Auckland"
6−location = "363 St Asaph Street, Christchurch"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-christchurch.jpg"
8−registration_url = "https://www.meetup.com/urbit-christchurch/events/294172584/"
9−description = ""
10−dark = true
11−darken_image = "true"
12−
13−[[hosts]]
14−patp = "~dinnul-namrud"
15−
16−+++
17−
18−The next meetup in Christchurch is at The Lotus Heart on the 24th June at 10:30am. Stick around afterwards for a drink and bite to eat if you desire.
19−
20−Please [RSVP](https://www.meetup.com/urbit-christchurch/events/294172584/) to the Meetup. Friends are most welcome!
21−
22−
23−
24−
content/events/2023-06-29-Urbit-Paris-Meetup-1.mddeleted−30
@@ -1,30 +0,0 @@
1−+++
2−title = "Urbit Meetup in Paris"
3−starts = "2023-06-29T18:30:00"
4−ends = "2023-06-29T21:30:00"
5−timezone = "Europe/Amsterdam"
6−location = "La Fièvre, 108 Rue Oberkampf, 75011 Paris"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/urbitParis-meetup-1.png"
8−registration_url = "https://www.meetup.com/urbit-paris/events/293962806/"
9−description = "Urbit Paris - Meetup #1"
10−dark = true
11−darken_image = "true"
12−
13−[[hosts]]
14−name = ""
15−patp = "~solsup-soplyd"
16−
17−+++
18−Curious what the future of the Internet looks like?
19−
20−Join us on June 29th in Paris!
21−
22−Whether you're a tech enthusiast, an established Urbit aficionado, or a newcomer to the scene, our community is meant to welcome and engage everyone.
23−
24−If you're confused about what Urbit is, no worries, most people are at first. Drop by and we'll give you our best explanations of what Urbit is and how it's going to change the internet as we know it.
25−
26−We'll introduce Urbit, help you boot your own ship and make sure you go back home all set!
27−
28−In the meantime, you can join us on [Twitter](https://wwww.twitter.com/urbitparis)!
29−
30−See you there!
content/events/2023-07-01_urbit-meetup-mst.mddeleted−23
@@ -1,23 +0,0 @@
1−+++
2−title = "Urbit Meetup - Utah MST"
3−starts = "2023-07-01T10:00:00"
4−ends = "2023-07-01T11:00:00"
5−timezone = "America/Phoenix"
6−location = "Maeser Park – 451 E 600 S, Provo, UT 84606"
7−image = "https://storage.googleapis.com/media.urbit.org/site/ecosystem/communities/urbit-utah.png"
8−registration_url = "https://urbitmst.org/"
9−description = "Our third meetup in Utah"
10−dark = true
11−darken_image = "true"
12−
13−[[hosts]]
14−name = "Lyman"
15−patp = "~sonmeg-tomdex"
16−
17−+++
18−
19−Are you looking for more than the options presented to you?
20−
21−Come to our Urbit (MST) meetup. All are welcome. Bring a computer and we can onboard you with a planet and hosting for free on site. Whether you are new to Urbit or fluent in Hoon, come and meet others in Utah interested in Urbit.
22−
23−This will be our first morning meetup, we will have donuts. Bring your friends. You are invited.
content/events/2023-07-20-Urbit-Paris-Meetup-ethcc.mddeleted−53
@@ -1,53 +0,0 @@
1−+++
2−title = "𝓣𝓱𝓮 𝓢𝓾𝓶𝓶𝓮𝓻 𝓢𝓸𝓲𝓻𝓮𝓮 - Paris ETHCC"
3−starts = "2023-07-20T19:00:00"
4−ends = "2023-07-21T1:00:00"
5−timezone = "Europe/Amsterdam"
6−location = "Le Comptoir Général"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/parisian-tweet-v2.gif"
8−registration_url = "https://lu.ma/parissoiree"
9−description = "Urbit Summer Soiree Paris @ETHCC"
10−dark = true
11−darken_image = "false"
12−
13−[[hosts]]
14−name = "Thomas"
15−patp = "~dalweb-donfun"
16−
17−[[hosts]]
18−name = "Ted"
19−patp = "~rovnys-ricfer"
20−
21−[[hosts]]
22−name = "Sam"
23−patp = "~tidren-nosryg"
24−
25−[[hosts]]
26−name = "Shad (giga)"
27−
28−[[guests]]
29−name = "Illia (co-founder Near)"
30−
31−+++
32−Presented by Urbit | giga | NEAR
33−​An evening of salacious chatter and good friends under the night sky and the peering eye of the tower.
34−
35−​Join us on July 20th with other like minds as we manifest the reality around us, drinking and eating till we can no more.
36−
37−​At 19:30 we will record a live episode of the [ZeroK podcast](https://www.youtube.com/@zero-k-podcast/videos) between [Ted Blackman](https://twitter.com/rovnys) (CTO Urbit Foundation) & [Illia Polosukhin](https://twitter.com/ilblackdragon) (CEO Near).
38−
39−​RSVP necessary.
40−
41−*​NB. Due to high demand, please [signup](https://lu.ma/parissoiree) early and consider coming before 19:45 to avoid any disappointment.*
42−
43−![Foto](https://storage.googleapis.com/media.urbit.org/site/events/luma-parisian-event.jpg)
44−
45−​“In the parties which she gave, since I could not imagine the guests as having any bodies, any moustaches, any boots, as making any utterances that were commonplace, or even original in a human and rational way, this whirlpool of names, introducing less material substance than would a phantom banquet or a spectral ball, round that statuette in Dresden china which was Madame de Guermantes, kept for her palace of glass the transparence of a showcase.
46−
47−​Then, after Saint-Loup had told me various anecdotes about his cousin’s chaplain, her gardener, and the rest, the Hôtel de Guermantes had become—as the Louvre might have been in days gone by—a kind of castle, surrounded, in the very heart of Paris, by its own domains, acquired by inheritance, by virtue of an ancient right that had quaintly survived, over which she still enjoyed feudal privileges.”
48−
49−[​Urbit](https://urbit.org/) is a new kind of computer that you can own completely in ways that matter: networking, identity, & data. It's a clean-slate operating system, p2p network and persistent identity.
50−
51−[​giga](https://gigaver.se/) is a hardcore marketing and ecosystem firm bringing projects and networks to the spotlight. Email us today to learn how we take projects from the deep dark depths and put them on a pedestal.
52−
53−[​NEAR](https://near.org/) allows you to effortlessly create and distribute innovative decentralized apps across any blockchain, while helping build a more open web, with the NEAR Blockchain Operating System (BOS).
content/events/2023-08-16_reassembly.mddeleted−22
@@ -1,22 +0,0 @@
1−+++
2−title = "Reassembly 2023"
3−starts = "2023-08-16T09:00:00"
4−ends = "2023-08-18T19:00:00"
5−timezone = "America/Phoenix"
6−location = "The Colony Building 211 West 19th Street Cheyenne, WY 82001 United States"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/https___cdn.evbuc.com_images_517157329_547708747059_1_original.jpeg"
8−registration_url = "https://www.eventbrite.com/e/reassembly-2023-tickets-637686015037"
9−description = "Reassembly 2023, hosted by Tacen, features focused discussions on clean-slate OS, next-generation networks, and the future of computing."
10−dark = true
11−darken_image = "true"
12−
13−+++
14−Tacen is proud to host Reassembly 2023 in Cheyenne, WY! Join us August 16-18 for focused discussions and exciting presentations on clean-slate OS, next-generation networks, and the future of modern computing.
15−
16−We will be bringing world-class experts to present their big ideas and new breakthroughs regarding all things related to the Urbit universe. Don’t miss this one-of-a-kind chance to see everyone gathered all in one place.
17−
18−Breakfast, lunch and refreshments provided for attendees. Details on accommodations group rates, schedules, and online viewership to follow.
19−
20−Confirmed speakers: [~hodzod-walrus](https://urbit.org/ids/~hodzod-walrus), [~harden-hardys](https://urbit.org/ids/~harden-hardys), [~littel-wolfur](https://urbit.org/ids/~littel-wolfur), [~dachus-tiprel](https://urbit.org/ids/~dachus-tiprel), [~nomryg-nilref](https://urbit.org/ids/~nomryg-nilref) and more to come!
21−
22−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/events/FwSOS1vXsAIgmZc.jpeg)
content/events/2023-10-28_urbit-assembly-lisboa.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Urbit Assembly Lisboa 2023"
3−starts = "2023-10-28T10:00:00"
4−ends = "2023-10-29T20:00:00"
5−timezone = "Europe/Lisbon"
6−location = "Lisbon – Portugal"
7−image = "https://storage.googleapis.com/media.urbit.org/site/events/urb01_assembly23_std_1-1.png"
8−registration_url = ""
9−description = "The third Urbit Assembly & first one outside of the US"
10−dark = true
11−darken_image = "true"
12−
13−+++
14−![Screenshot](https://storage.googleapis.com/media.urbit.org/site/events/urb01_assembly23_std_16-9.png)
15−
16−Urbit is coming to Europe! Save the date for Urbit Assembly 2023 & Urbit Week in Lisbon this year.
17−
18−Early-bird tickets are going live by the end of may in the [UF Public Group](/groups/~halbex-palheb/uf-public).
19−
20−We’re changing up the format this year: the first two days will be more “conference-like” with launches, presentations and panels from the Urbit ecosystem.
21−
22−Afterwards we’ll have a week of side events hosted by the community throughout Lisbon.
23−
24−Don't miss it.
content/faq.md+229−136
@@ -1,267 +1,360 @@
1+++
1+++
2title = "FAQ"
2title = "FAQ"
3−template = "page_indiced.html"
4−[extra]
5−hidetitle = "true"
6−index = "true"
7+++
3+++
8
4
9−### What is Urbit? {% #what-is-urbit %}
5+## Contents
10
6
11−Urbit 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.
7+<details><summary>The Urbit Project</summary>
12
8
13−Combining a deterministic operating system ([Urbit OS](#what-is-arvo) / Arvo) and a secure, global identity layer ([Urbit ID](#what-is-urbit-id) / [Azimuth](#what-is-azimuth)), the Urbit project has created something that’s never existed before: an encrypted [Sybil resistant](https://en.wikipedia.org/wiki/Sybil_attack) peer-to-peer network where you can be sure that messages are never tampered with or surveilled.
9+- [Why Urbit?](#urbit-project-1)
10+- [How secure is Urbit right now?](#urbit-project-2)
11+- [How can I contribute to Urbit?](#urbit-project-3)
12+- [What is Tlon?](#urbit-project-4)
13+- [Who works at Tlon?](#urbit-project-5)
14
14
15−The 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.
15+</details>
16
16
17−### How can I contribute to Urbit? {% #contribute %}
18
17
19−We 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.
18+<details><summary>Azimuth</summary>
20
19
21−### Who is building Urbit? {% #who-builds-urbit %}
20+- [What is Azimuth?](#azimuth-1)
21+- [What are stars, galaxies, and planets?](#azimuth-2)
22+- [How many planets, stars, and galaxies are active?](#azimuth-3)
23+- [What are comets and moons?](#azimuth-4)
24+- [What is a `@p`? Why is my username generated for me?](#azimuth-5)
25+- [Can I change my `@p`?](#azimuth-6)
26+- [How do I get an identity?](#azimuth-7)
27+- [How do I send an identity to someone else?](#azimuth-8)
28+- [What is the best way to access Azimuth?](#azimuth-9)
22
29
23−[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).
30+</details>
24
31
25−## Urbit ID
32+<details><summary>Urbit HD Wallet</summary>
26
33
27−### What is Urbit ID? {% #what-is-urbit-id %}
34+- [What is the Urbit HD Wallet?](#wallet-1)
35+- [What is a master ticket?](#wallet-2)
36+- [What is an ownership address?](#wallet-3)
37+- [What are proxies?](#wallet-4)
38+- [What are seeds?](#wallet-5)
39+- [What does it mean to “set public keys”?](#wallet-6)
40+- [What do I do if I want to own multiple points?](#wallet-7)
41+- [How should I take care of my Urbit HD Wallet?](#wallet-8)
42+- [I have a galaxy or star with lockup conditions. How does this work?](#wallet-9)
28
43
29−Urbit 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.
44+</details>
30
45
31−### What are stars, galaxies, and planets? {% #stars-galaxies-planets %}
46+<details><summary>Arvo</summary>
32
47
33−Urbit 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`).
48+- [What is Arvo?](#arvo-1)
49+- [What is unique about Arvo?](#arvo-2)
50+- [How is Arvo connected to Ethereum?](#arvo-3)
51+- [Will the Arvo network survive if Ethereum dies?](#arvo-4)
52+- [How do I install Arvo?](#arvo-5)
53+- [How do I use Arvo?](#arvo-6)
54+- [How do over-the-air updates work?](#arvo-7)
55+- [What is Landscape?](#arvo-8)
56+- [I have a point, now what?](#arvo-9)
34
57
35−Planets 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.
58+</details>
36
59
37−### How can I spend less to get a planet? {% #gas-prices %}
60+<details><summary>Grants</summary>
38
61
39−Using 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.
62+- [What are the different types of grants?](#grants-1)
63+- [How do I get a gift?](#grants-2)
64+- [How often are gifts awarded?](#grants-3)
65+- [What happens if a user does not complete a proposal but meets some milestones?](#grants-4)
66+- [Do I have to pay taxes on stars?](#grants-5)
67+- [Can I create a bounty?](#grants-6)
68+- [How are proposals approved?](#grants-7)
69+- [If I win a proposal, do I have an exclusive claim on the project?](#grants-8)
70+- [Will milestones be embedded in a smart contract?](#grants-9)
71+- [Does reputation play a role in the assessment of grants?](#grants-10)
72+- [I completed a proposal. When will I receive payment?](#grants-11)
73+- [Can I see the proposals of others that have been accepted?](#grants-12)
74+- [How do I safely store my stars?](#grants-13)
75+- [Can I delegate a bounty or proposal to someone else?](#grants-14)
40
76
41−### What is Azimuth? {% #what-is-azimuth %}
77+</details>
42
78
43−[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.
79+## The Urbit project
44
80
45−It's also kind of a [cool astronomical concept](https://en.wikipedia.org/wiki/Azimuth).
81+### Why Urbit? {#urbit-project-1}
46
82
47−### How many planets, stars, and galaxies are active? {% #how-many-planets-stars-galaxies %}
83+The internet began as a friendly, peer-to-peer network: friendly because the people with the ability to use such a thing were the same sort of nerds, and peer-to-peer because those nerds knew how to run their own servers. But, as the internet’s appeal spread to everyday people in the 90s, it was unrealistic for everyone to be the administrators of their own complex machines. So this peer-to-peer network was divided into clients (people) and servers (large corporations), a relationship that’s been solidifying ever since.
48
84
49−The 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.
85+But one intervening development presents hope. Platforms like Amazon Web Services turn previously heterogeneous networking infrastructure into commodities. Now anyone can use it almost as easily as a faucet.
50
86
51−You can also inspect and execute functions in the [azimuth.eth](https://etherscan.io/address/azimuth.eth#code) contract on Etherscan.
87+What’s missing, however, is a peer-to-peer software stack that everyone can use. That’s what Urbit is. We’re reimagining the internet as a peer-to-peer network that is designed to stay that way, even at a large scale, which is something that’s never been done before. All previous attempts to re-decentralize the internet have only attempted to solve certain corners of the problem, and thus have failed. Only a technical upheaval of the entire stack can bring back this dream. Urbit does just that, and already exists in a working state.
52
88
53−### What are comets and moons? {% #comets-moons %}
89+In combining the determinism of Arvo, our OS, and the security of identity of Azimuth, our identity layer, we’ve done something that’s never been done before: we’ve created an encrypted peer-to-peer network where you can be sure that your message is secure: not tampered with, and sent exactly once.
54
90
55−In 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.
91+The internet anticipated by Urbit is a much friendlier one. You’re always “logged in” to your online services, without the need to remember usernames or passwords. Problems that are unsolvable in our current internet -- spam, fake reviews, malware-spreading, harassment -- are made uneconomical, since there’s a limited number of Urbit identities that function as reputation primitives.
56
92
57−[Moons](/docs/glossary/moon) are 64 bits, issued by [planets](/docs/glossary/planet), and have names like `~doznec-salfun-naptul-habrys`. Moons are meant for connected devices: phones, desktops, smart TVs, digital thermostats, and other IoT devices. Moons are subordinate to their parent planet. A strong analogy here is that ordinary social media sites are somewhat like planets, and your account on them is a moon. Urbit elevates everybody to the level of planet.
93+### How secure is Urbit right now? {#urbit-project-2}
58
94
59−[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`.
95+Azimuth, the Urbit identity layer, is ready for serious use. Its contracts have been audited by trustworthy third parties. We encourage everyone to use Azimuth as an identity solution, and to build software projects on top of it.
60
96
61−### What is a `@p`? Why is my username generated for me? {% #what-is-patp %}
97+The rest of the Urbit project is still in research-mode. Arvo is a fun operating system to play with, but it’s not yet a safe place to store sensitive data.
62
98
63−A `@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.
99+### How can I contribute to Urbit? {#urbit-project-3}
64
100
65−These names map directly to a corresponding number in the Urbit ID address space. Galaxies occupy the 8-bit address space, so any galaxy is actually a number between zero and 255. Stars occupy the 16-bit address space, and planets occupy the 32-bit address space.
101+We encourage outside contributors to become a part of the project. The best way to do this is to check out [the Urbit GitHub](https://github.com/urbit) and look at the pinned repositories. Feel free to open issues and make pull requests.
66
102
67−Your name is generated for you as a solution to [Zooko's triangle](https://en.wikipedia.org/wiki/Zooko%27s_triangle), which roughly states that names on a network protocol can only be two of (i) human-meaningful, (ii) secure, and (iii) decentralized. Urbit chooses (ii) and (iii), while something like DNS chooses (i) and (ii).
103+You’re also invited to join the [urbit-dev](https://groups.google.com/a/urbit.org/forum/#!forum/dev) Google group and public mailing list.
68
104
69−Regardless, 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.
105+### What is Tlon? {#urbit-project-4}
70
106
71−### Can I change my `@p`? {% #change-my-patp %}
107+Tlon is the San Francisco-based company that develops Urbit. Tlon doesn’t own Urbit, since Urbit is an open-source project with decentralized ownership.
72
108
73−Nope. 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.
109+### Who works at Tlon? {#urbit-project-5}
74
110
75−### How do I get an identity? {% #get-an-identity %}
111+You can see who we are at [tlon.io](https://tlon.io/).
76
112
77−The 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.
113+## Azimuth
78
114
79−Or, 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.
115+### What is Azimuth? {#azimuth-1}
80
116
81−### How do I transfer an identity to someone else? {% #transfer-identity %}
117+Azimuth is a general-purpose identity system. It is the Urbit identity base-layer. This system is implemented as a suite of smart contracts on the Ethereum blockchain, and it determines which Ethereum addresses own which Urbit identities, called points. There is a fixed number of possible points, and they exist in three classes. Urbit uses it in Arvo, the Urbit OS.
82
118
83−Access the Ethereum address that holds the identity you wish to transfer via [Bridge](https://bridge.urbit.org).
119+### What are stars, galaxies, and planets? {#azimuth-2}
84
120
85−### What is the best way to access my Urbit ID? {% #access-azimuth %}
121+Points come in three classes: galaxies, stars, and planets. The length of a point’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`).
86
122
87−We 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.
123+Planets are intended for everyday use by an adult human, and there are 4.3 billion of them (2 to the 32nd power). Stars and galaxies, on the other hand, are meant to act as network infrastructure: on the Arvo network they provide routing and are responsible for distributing software updates.
88
124
89−Be careful about using online versions of Bridge not hosted on urbit.org. Since Bridge touches your private keys, it can also steal them.
125+### How many planets, stars, and galaxies are active? {#azimuth-3}
90
126
91−### Why aren't there more planets? {% #more-planets %}
127+The raw data on most Azimuth events that have occurred can be found [here](https://azimuth.network/stats/events.txt). We’re currently working on generalized tooling for viewing these events.
92
128
93−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.
129+### What are comets and moons? {#azimuth-4}
94
130
95−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.
131+In addition to the three classes of Azimuth points mentioned above, there are two other kinds of Urbit identities that are not registered on Azimuth.
96
132
97−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.
133+Moons are 64 bits, are issued by planets, and have names like `~doznec-salfun-naptul-habrys`. Moons are meant for connected devices: phones, desktops, smart TVs, digital thermostats. Moons are subordinated to their parent planet.
98
134
99−The 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.
135+Comets are 128 bits and have no parents. They can be launched by anyone. They are temporary, disposable identities. Being disposable and essentially unlimited, they will likely not be trusted by default by others on the Arvo network. They have long, hard-to-memorize names, like `~racmus-mollen-fallyt-linpex--watres-sibbur-modlux-rinmex`.
100
136
101−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>.
137+### What is a `@p`? Why is my username generated for me? {#azimuth-5}
102
138
103−(For more background on why Urbit ID is the way it is, read [this](/understanding-urbit/urbit-id/).)
139+A `@p` (pronounced *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 ships with special duties on the Arvo network ([stars and galaxies](@/docs/concepts/galaxies-stars-and-planets.md), respectively. Longer names like `~palfun-foslup` are identities for typical users.
104
140
105−### I have a galaxy or star with lockup conditions. How does this work? {% #lockup-conditions %}
141+These names are pre-generated because they map directly to a number in the urbit address space. Galaxies occupy the 8-bit address space, so any galaxy is actually a number between zero to 255. Stars occupy the 16-bit address space, and planets occupy the 32-bit address space.
106
142
107−There are two kinds of release schemes for locked up assets: linear and conditional.
143+### Can I change my `@p`? {#azimuth-6}
108
144
109−In either scheme, you start out being able to take one star out of lockup, regardless of the terms set around the lockup as a whole. This way, you get to participate with a star right away. Go do something cool!
145+Unfortunately not, there is a 1:1 mapping between name and point.
110
146
111−If your lockup involved a [galaxy](/docs/glossary/galaxy), all of its [stars](/docs/glossary/star) will be locked up, but you will have immediate, lock-free control of the galaxy. You will likely need it to use that star.
147+### How do I get an identity? {#azimuth-7}
112
148
113−Note that the "releasing" of stars just means that they become available for you to claim. They don't automatically get transferred to you; you have to withdraw them from the appropriate lockup contract.
149+Find someone to give you one. This will probably involve purchasing one and having it transferred to an Ethereum address that you own. We recommend using our [Bridge](https://github.com/urbit/bridge/releases) software to access the address that the point is transferred to.
114
150
115−Linear release is the simplest: your stars will be released linearly over a period of time. Most often this is a period of four years. If you have four stars in lockup, that means you will be able to withdraw one star per year. In many cases, there is also an initial windup period which has to pass before linear releasing begins, typically one year. Since Azimuth launched in January 2019, the linear release will begin in January 2020.
151+### How do I send an identity to someone else? {#azimuth-8}
116
152
117−Conditional 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.
153+Access the Ethereum address that holds the point you wish to transfer via [Bridge](https://github.com/urbit/bridge/releases).
118
154
119−### How secure is Urbit right now? {% #how-secure-is-urbit %}
155+### What is the best way to access Azimuth? {#azimuth-9}
120
156
121−We 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).
157+We recommended using [Bridge](https://github.com/urbit/bridge/releases) for all Azimuth-related operations. It’s great for managing your points, as well as for viewing information about points you don’t own. We have seen publicly hosted versions of Bridge online and we do not recommend using these websites for security and privacy reasons.
122
158
123−[Urbit ID](#what-is-urbit-id) / [Azimuth](#what-is-azimuth), Urbit's identity layer, is live on the Ethereum blockchain and has been audited by Open Zeppelin, Blockchain at Berkeley, and Bloctrax.
159+## Urbit HD Wallet
124
160
125−In late 2020, Urbit's [Ames](/docs/glossary/ames) networking protocol was audited by [Leviathan Security](https://www.leviathansecurity.com/). You can read about this milestone [here](/blog/security-and-continuity).
161+### What is the Urbit HD Wallet? {#wallet-1}
126
162
127−The security of the runtime, [Vere](/docs/vere/), has not yet been adequately assessed or systematically hardened.
163+The Urbit Hierarchical Deterministic (HD) Wallet is a system that uses public-key cryptography to secure the ownership of Urbit assets. This means that the wallet system uses public/private key-pairs to make sure that only you have access to it. Such a key-pair has two components: a public key that may be disseminated widely, and a private key that only the owner should know. The former should be treated like a login, and the latter should be treated like a password.
128
164
129−All communication on Urbit is end-to-end encrypted. However, the [event log](/docs/glossary/eventlog) is not encrypted at rest but we plan to give users that option in the future.
165+The Urbit HD Wallet is different from cryptocurrency wallets that you may be familiar with. The Urbit HD Wallet is not a single Ethereum key-pair that holds full power over its assets, but a system of many related Ethereum key-pairs that have distinct powers. To learn about the specifics, check out our [HD Wallet documentation](@/docs/concepts/azimuth.md#the-urbit-hd-wallet).
130
166
131−Tlon keeps a quantum computing expert on staff and understands that post-quantum cryptographic methods must be implemented sooner than later, since any data not already encrypted using these methods is at risk of being collected and decrypted once sufficiently powerful quantum computers exist. [NIST](https://www.nist.gov/) anticipates the release of their preliminary findings on [post-quantum cryptography standards](https://csrc.nist.gov/projects/post-quantum-cryptography) around the end of 2021, with full guidelines following in 2024. Tlon will develop a strategy for post-quantum encryption for Urbit following their recommendations.
167+### What is a master ticket? {#wallet-2}
132
168
133−Thus, while Urbit is probably more secure and private than most digital communication channels, we cannot yet consider it impervious to a dedicated attacker. If you are a cybersecurity expert looking for work, please drop us a line at `apply@tlon.io`.
169+In the context of the Urbit HD Wallet, master ticket is the entropy seed from which all of your other keys are derived. It should be treated like a master password: **you should never share it with anyone, and you must store it very securely (see our practices below).** This ticket can derive your ownership address and all of your proxy keys. You’ll have a ticket if you used the Urbit Wallet Generator or claimed a ship on our hosted version of Bridge.
134
170
135−## Urbit Grants
171+### What is an ownership address? {#wallet-3}
136
172
137−### What are the different types of grants? {% #grants-1 %}
173+An ownership address is an Ethereum address that has full rights over points assigned to it. It can transfer points to other people, meaning that it’s very important to secure its associated private key.
138
174
139−There are three ways to receive a [grant of stars](https://grants.urbit.org/) for your contribution to the Urbit ecosystem.
175+### What are proxies? {#wallet-4}
140
176
141−- You can submit a **Proposal** if you’re interested in working on a project of your own creation for a number of stars that you pitch.
177+Proxies are Ethereum addresses that can be thought of as sibling sub-wallets of your ownership address. They are meant to be used much more often than the ownership address, and have more restrictive, less valuable rights than the ownership address. These rights include spawning child points, voting, and setting networking keys.
142−- 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.
178+- Management Proxy: Can configure or set Arvo networking keys and conduct sponsorship related operations.
143−- 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.
179+- Voting Proxy: Galaxies only. Galaxies are the part of the galactic senate, and this means they can cast votes on new proposals including changes to the Ecliptic.
180+- Spawn Proxy: For stars and galaxies only. Can create new child points.
144
181
145−### How do I get a gift? {% #grants-2 %}
182+### What are seeds? {#wallet-5}
146
183
147−Make 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).
184+All Ethereum key-pairs in the Urbit wallet system, including proxies, are produced by 128-bit values called seeds. These seeds are yours alone. An ownership key key-pair is derived from an ownership seed. Also derived from the ownership seed are various proxy seeds, which proxy key-pairs are themselves derived from.
148
185
149−### How often are gifts awarded? {% #grants-3 %}
186+### What does it mean to “set public keys”? {#wallet-6}
150
187
151−Gifts are awarded semiannually.
188+This means registering the public keys of your point's encryption and authentication keys (together known as "networking keys") with Azimuth, so that others can discover them. The corresponding private keys can then be used to, for example, run a ship on the Arvo network.
152
189
153−### Do gifts follow a set size? {% #grants-31 %}
190+You want to reset these keys if they are compromised, and periodically for maximum security.
154
191
155−Gifts 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)
192+### What do I do if I want to own multiple points? {#wallet-7}
156
193
157−### What happens if a user does not complete a proposal but meets some milestones? {% #grants-4 %}
194+We recommend using different HD Wallets for each point. You are able to assign any number of points to a single Ethereum address, however.
158
195
159−You 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.
196+### How should I take care of my Urbit HD Wallet? {#wallet-8}
160
197
161−However, 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.
198+Urbit points have accompanying security realities that must be taken seriously. Cryptographic assets are unique among things of value, because all of the responsibility for keeping those assets safe rests with the party that owns them.
162
199
163−### Do star rewards from grants have lockup conditions? {% #grant-5 %}
200+But the nature of decentralization means that there is no authority that has the power to restore any lost or stolen wallet. Neither can anyone force you to follow good security practices. At most, they can give you recommendations. **Remember:** if critical items, such as your ownership key, are lost or compromised, your assets are likely gone forever.
164
201
165−No.
202+Below we list some good practices for storing keys, strictest first. Higher-value assets should be secured with stricter measures.
166
203
167−### Do I have to pay taxes on stars? {% #grant-6 %}
204+**Security Tier 1: Cold Storage**
168
205
169−Yes. 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.
206+Cold storage refers to any method in which secrets are stored in a way that is not accessible to any network. Cold-stored keys should only ever be generated offline.
170
207
171−### Can I create a bounty? {% #grants-7 %}
208+Cold storage media options:
209+- Printing the secret on a piece of paper. However, paper wallets are vulnerable to various forms of physical damage, such as rot, water damage, smoke, or fire. Laminating the paper can mitigate some of these risks, but the lamination can potentially trap moisture. Make sure that you trust the printer: some have memory and network connections.
210+- Storing the secret on a brand-new USB stick or hardware wallet that is never connected to a networked machine.
211+- Engraving the secret on a strip of stainless steel. This medium is resistant to both water damage and fire damage.
172
212
173−No. 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.
213+Places to store your cold-storage media:
214+- A hidden safe in your home.
215+- A safe-deposit box at a bank.
174
216
175−### How are proposals approved? {% #grants-8 %}
217+It’s a good idea to store your keys redundantly; for example, on both a USB stick and a piece of paper in the safe, in case one of those methods fails. If you deem a key to be valuable enough, you can **shard** it into thirds (or other splits) and store each third in secure, geographically distributed locations.
176
218
177−The 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.
219+**Security Tier 2: Hardware Wallet**
178
220
179−### If I win a proposal, do I have an exclusive claim on the project? {% #grants-9 %}
221+A hardware wallet is a digital storage device that’s purpose-built to store cryptographic secrets. They are unaffected by typical key-stealing malware, and have built-in security mechanisms that other digital devices lack. Do research and make sure that you are buying an authentic device manufactured by trustworthy, technically competent security experts with a good reputation. Trezor and Ledger are two popular brands of hardware wallets.
180
222
181−You 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.
223+At this tier, it’s permissible to connect a hardware wallet to your networked machine.
182
224
183−### Will milestones be embedded in a smart contract? {% #grants-10 %}
225+**Security Tier 3: On Your Computer**
184
226
185−No.
227+This tier includes any method where secrets are stored on an everyday computing platform. Some such methods are:
186
228
187−### Does reputation play a role in the assessment of grants? {% #grants-11 %}
229+- Encrypted PDFs containing a secret on your desktop’s drive.
230+- Storing secrets on a cloud account protected by multi-factor authentication.
188
231
189−Yes. We consider this to be a feature.
232+This method is risky for a number of reasons. Networked computers can contain malware. Computers that see common use are also prone to crashes and data loss. Storing secrets on cloud accounts mitigates the risk of data destruction, but it exposes a much larger attack surface to malicious actors.
190
233
191−### I completed a proposal. When will I receive payment? {% #grants-12 %}
234+For all of these reasons, make sure that you only use Tier 3 methods for the storage of low-value secrets.
192
235
193−We will pay you within a 30-day window.
236+### I have a galaxy or star with lockup conditions. How does this work? {#wallet-9}
194
237
195−### Can I see the proposals of others that have been accepted? {% #grants-13 %}
238+There are two kinds of release schemes for locked up assets: linear and conditional.
196
239
197−Yes. Check out our [proposals page.](https://grants.urbit.org/proposals)
240+In either scheme, you start out being able to take one star out of lockup, regardless of the terms set around the lockup as a whole. This way, you get to participate with a star right away. Become useful!Go do something cool!
241+
242+If your lockup involved a galaxy, all its stars will be locked up, but you will have immediate, lock-free control of the galaxy. You will likely need it to use that star.
243+
244+Note that the "releasing" of stars just means that they become available for you to claim. They don't automatically get transferred to you, you have to withdraw them from the appropriate lockup contract.
198
245
199−### How do I safely store my stars? {% #grants-14 %}
246+Linear release is the simplest, and does exactly what it sounds like. Your stars will be released linearly over a period of time. Most commonly, this is a period of four years. If you have four stars in lockup, that means you will be able to withdraw one star per year. In many cases, there is also an initial windup period, which has to pass before the linear releasing begins. Usually, this is one year. Since Azimuth launched in January 2019, this means the linear release will begin in January 2020.
200
247
201−We 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!
248+Conditional 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, we instead have the Galactic Senate verify 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.
202
249
203−### Can I delegate a bounty or proposal to someone else? {% #grants-15 %}
250+## Arvo
204
251
205−No, not unless explicitly authorized by Tlon.
252+### What is Arvo? {#arvo-1}
206
253
207−### Do I need to sign a contract? {% #grants-16 %}
254+Arvo is the Urbit operating system. Unlike conventional operating systems, it’s functional and deterministic. Arvo is written in Hoon, our purely functional programming language.
208
255
209−After 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.
256+Instances of the Arvo operating system, called ships, communicate as peers on what we refer to as “the Arvo network.” The Arvo network succeeds where other peer-to-peer networks have failed. Using Azimuth, Arvo ships can prove their identities to one another.
210
257
211−Here are a few important points from the bounty and proposal contracts:
258+### What is unique about Arvo? {#arvo-2}
212
259
213−- **Intellectual property:** You agree to commit all intellectual property you create in connection with the relevant bounty or proposal. You agree that you won’t incorporate any IP that is licensed in a conflicting way.
260+Arvo is much different from other operating systems because of its determinism. Processing in the system happens in a unique way: when an event happens, a transition function takes that event and the old state of Arvo, and then produces an effect and a new state of Arvo. To visualize:
214
261
215−- **No conflicts:** You agree that you are not subject to any restrictions that would interfere with your ability to complete the bounty or proposal.
262+[event, old state] -> [effects, new state]
216
263
217−- **No employment relationship:** You agree that being approved for the grant or bounty does not imply any employment relationship with Tlon.
264+Thus, all events are permanently logged in the system, and you can always go back and see the state of the system at any point in time.
218
265
219−- **Termination:** Either party (you or Tlon) can terminate the agreement on seven days' written notice. If that happens, you may be compensated _pro rata_ for the amount of work you've completed, but this compensation is at the sole discretion of Tlon.
266+### How is Arvo connected to Ethereum? {#arvo-3}
220
267
221−- **Governing law:** The agreement is governed by the laws of the State of California.
268+When an Arvo ship (instance) is started for the first time, you must use a key-file containing the private keys for your Azimuth point's networking keys. Azimuth uses the Ethereum blockchain as its decentralized ledger.
222
269
223−Note that these paraphrased points are just for summarization purposes. The language in contract that you receive and sign is the only source of authority for the grant agreement.
270+See our [Getting Started](@/docs/getting-started/_index.md) guide to learn how to get your ship onto the Arvo network.
224
271
225−## Miscellaneous
272+### Will the Arvo network survive if Ethereum dies? {#arvo-4}
226
273
227−### Who is Curtis? {% #who-is-curtis %}
274+Yes. It would be annoying, but Azimuth would be ported to another kind of decentralized ledger.
228
275
229−Urbit 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’.
276+### How do I install Arvo? {#arvo-5}
230
277
231−In early 2019, Curtis left Tlon and the Urbit project. He gave Tlon all of his
278+Check out our guides [here](@/docs/getting-started/_index.md).
232−voting interest in the network (his galaxies), and he no longer owns any Tlon
233−stock. He retains a non-voting, minority interest in the address space — but is not involved in the day-to-day development or operations.
234
279
235−Curtis laid the foundation for Urbit by delivering its first prototype but, since 2013, it has been refined and almost entirely rewritten by a community of developers. No one working on Urbit today had anything to do with Curtis’s writing. For the most part, we couldn’t be less interested in it.
280+### How do I use Arvo? {#arvo-6}
236
281
237−The 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.
282+The [Using](@/docs/using/_index.md) section of the documentation will help you out.
238
283
239−### Why do you use Ethereum? {% #why-eth %}
284+### How do over-the-air updates work? {#arvo-7}
240
285
241−In 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.
286+Your sponsor, a star or galaxy that your ship “lives” under, may send you new source code for your system. When you receive new source code from your sponsor, your system recompiles itself using that code, performs any necessary data migrations, and keeps running. Ideally this happens seamlessly without the user even noticing, although there is sometimes a slowdown while rebuilding the system from source.
242
287
243−One 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.
288+### What is Landscape? {#arvo-8}
244
289
245−### Why is Hoon so weird? {% #why-hoon %}
290+Landscape is an experimental Arvo web interface that includes social functions such as chat and publishing. You can access Landscape by navigating to http://localhost:8080 or https://your-planet.arvo.network, where `your-planet` is your running ship, connected to the Arvo network.
246
291
247−There 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](https://developers.urbit.org/reference/hoon/overview).
292+### I have a point, now what? {#arvo-9}
248
293
249−The runes are, once you get the hang of them, pretty nice. Your mileage may vary, of course, but many talented engineers have spent many, many hours writing Hoon. It’s a simple, practical language. But the learning curve can be a bit high.
294+Follow our guide on how to boot a ship [here](@/docs/getting-started/booting-a-ship.md).
250
295
251−The standard library and naming is something we’ve discussed changing, and it could happen. It’s definitely up for debate whether or not the four-letter naming convention works well. The vanes (kernel modules) have largely moved away from this convention.
296+Get on the [mailing list](/../#mc_embed_signup). Learn [Hoon](@/docs/learn/hoon/_index.md).
252
297
253−The right way to think about Hoon is as the ‘C of Urbit’. It’s a bare bones language that gets you pretty close to Nock. Eventually, we’ll probably implement more expressive languages that compile to Urbit. But for now, satisfy your curiosity and [sign up for Hooniversity](https://hooniversity.org/), a community led Hoon educational organization.
298+## Grants
254
299
255−Another 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.
300+### What are the different types of grants? {#grants-1}
301+
302+There are three ways to receive a grant of stars for your contribution to the Urbit ecosystem.
303+- You can submit a **Proposal** if you’re interested in working on a project of your own creation for a number of stars that you pitch.
304+- 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.
305+- 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.
306+
307+### How do I get a gift? {#grants-2}
308+
309+Make 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)
310+
311+### How often are gifts awarded? {#grants-3}
312+
313+Gifts are awarded semiannually.
256
314
257−### What is the point of Nock? {% #why-nock %}
315+### What happens if a user does not complete a proposal but meets some milestones? {#grants-4}
258
316
259−The 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.
317+You 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.
318+
319+However, 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.
320+
321+### Do I have to pay taxes on stars? {#grant-5}
322+
323+Yes. If you are American, we need your W-9 before we can pay you 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.
324+
325+### Can I create a bounty? {#grants-6}
326+
327+No. 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.
328+
329+### How are proposals approved? {#grants-7}
330+
331+The 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.
332+
333+### If I win a proposal, do I have an exclusive claim on the project? {#grants-8}
334+
335+You 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.
336+
337+### Will milestones be embedded in a smart contract? {#grants-9}
338+
339+No.
340+
341+### Does reputation play a role in the assessment of grants? {#grants-10}
342+
343+Yes. We consider this to be a feature.
344+
345+### I completed a proposal. When will I receive payment? {#grants-11}
346+
347+We will pay you within a 30-day window.
348+
349+### Can I see the proposals of others that have been accepted? {#grants-12}
350+
351+Yes. Check out our [proposals page.](https://grants.urbit.org/proposals)
260
352
261−It’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.
353+### How do I safely store my stars? {#grants-13}
262
354
263−### Can I host my Urbit with someone else? {% #why-hosting %}
355+We recommend storing each star in its own 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!
264
356
265−Yes, [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.
357+### Can I delegate a bounty or proposal to someone else? {#grants-14}
266
358
267−Should you one day wish to run your Urbit yourself, any hosting provider ought to offer you the ability to download your [ship](/docs/glossary/ship)'s [pier](/docs/glossary/pier) to your own device and do so. This is a very low friction process thanks to Urbit's deterministic design.
359+No. Not unless explicitly authorized by Tlon.
360+[Make stuff](@/docs/getting-started/contributing.md).
content/getting-started/_index.mddeleted−28
@@ -1,28 +0,0 @@
1−+++
2−title = "Introduction"
3−weight = 0
4−description = ""
5−+++
6−
7−The goal of Urbit is to make peer-to-peer software easy for developers to write
8−and for users to run on their own. The code is [completely open
9−source](https://github.com/urbit), [actively
10−maintained](https://github.com/urbit/urbit/graphs/code-frequency), supported by
11−a [growing ecosystem](https://urbit.org/ecosystem), and [used daily by
12−thousands](https://network.urbit.org).
13−
14−Urbit consists of two high-level components: an operating
15−system (Urbit OS) and an identity system (Urbit ID). Urbit OS enables its user to communicate directly with others using Urbit OS via their Urbit ID's. You can think of these like phone numbers &mdash; meaningless
16−but memorizable, and likely to identify the same person reliably through time.
17−
18−Using Urbit requires having access to a running **ship**: an Urbit OS running
19−with a supplied Urbit ID. You can run Urbit yourself if you're comfortable at a
20−command-line or willing to learn. Otherwise you should probably use a hosting
21−provider &mdash; that is, someone that provides you with an Urbit as a service.
22−
23−## Next steps
24−
25−- [Run Urbit yourself](/getting-started/self-host) or select a [hosting provider](/getting-started/hosted)
26−- Meet friendly people by [joining groups](/getting-started/joining-groups)
27−- [Install apps](/getting-started/installing-applications) to experiment with
28−- Explore [interfaces](/getting-started/interfaces) for Urbit
content/getting-started/cli.mddeleted−290
@@ -1,290 +0,0 @@
1−+++
2−title = "Command-line install"
3−weight = 3
4−description = "Installation instructions for technical users"
5−tag = "selfhost"
6−+++
7−
8−This guide covers running the Urbit runtime (Vere) using the command line. This
9−can be run on your local machine or a server in the cloud, we just cover the
10−local case here. The runtime is what interprets the Urbit kernel code (Arvo)
11−into commands your specific machine (macOS or Linux) understands.
12−
13−Note there is a much more comprehensive [cloud hosting
14−guide](/getting-started/cloud-hosting) which walks through setting up Urbit on a
15−[Digital Ocean](https://www.digitalocean.com/) VPS.
16−
17−### 1. System Requirements {% #about-swap-space %}
18−
19−- **Processor**: 1 core
20−- **Memory**: 2GB
21−- **Storage**: At least a few GB, 40-50GB preferable
22−- **Network**: Any
23−
24−**A note on memory**: By default, the Urbit runtime needs 2GB of free memory,
25−and will fail to boot without it. Urbit usually only uses a portion of this, so
26−it's possible to use a swap file to makeup for a shortfall without degrading
27−performance. For instructions on how to configure a swap file on Linux, see
28−[this linuxize.com guide](https://linuxize.com/post/create-a-linux-swap-file/).
29−
30−**A note on storage**: Urbit saves every event it processes to its [Event
31−Log](https://developers.urbit.org/reference/glossary/eventlog). This means its
32−disk usage slowly grows over time. Until event log truncation is implemented,
33−it's advisable to have 40 or 50GB of disk space available, so you don't have to
34−worry about running out for a long time. If you don't have that much, your ship
35−will still run fine, but you may run out of space some months down the line.
36−
37−### 2. Install Urbit
38−
39−Choose your operating system and run the given command in your terminal to
40−download the Urbit runtime, this command downloads the latest build, unpacks
41−it, and runs the binary with no arguments to show you the help output:
42−
43−{% tabs %}
44−
45−{% tab label="Linux x86_64" %}
46−
47−```shell
48−curl -L https://urbit.org/install/linux-x86_64/latest | tar xzk --transform='s/.*/urbit/g' && ./urbit
49−```
50−
51−{% /tab %}
52−
53−{% tab label="Linux AArch64" %}
54−
55−```shell
56−curl -L https://urbit.org/install/linux-aarch64/latest | tar xzk --transform='s/.*/urbit/g' && ./urbit
57−```
58−
59−{% /tab %}
60−
61−{% tab label="macOS x86_64" %}
62−
63−```bash
64−curl -L https://urbit.org/install/macos-x86_64/latest | tar xzk -s '/.*/urbit/' && ./urbit
65−```
66−
67−{% /tab %}
68−
69−{% tab label="macOS AArch64" %}
70−
71−```bash
72−curl -L https://urbit.org/install/macos-aarch64/latest | tar xzk -s '/.*/urbit/' && ./urbit
73−```
74−
75−{% /tab %}
76−
77−{% /tabs %}
78−
79−If successful, you will see a block of output beginning with the line:
80−
81−```
82−Urbit: a personal server operating function
83−```
84−
85−### 3. Boot Urbit
86−
87−An Urbit instance is intrinsically tied to a unique identity called an **Urbit
88−ID**. There are five classes of Urbit ID, but we will consider two here: comets
89−and planets.
90−
91−- **Comet:** A comet is an identity which anyone can generate themselves, for
92− free. It's a good option to try out Urbit. Comets are limited by the fact they
93− cannot be "factory reset", meaning if your urbit somehow becomes broken or
94− corrupted then you'll have to start again with a new identity. In that sense,
95− they are impermanent.
96−
97−- **Planet:** A planet is a permanent identity which you own forever. Planets
98− are the class intended for individuals. While there are essentially an
99− unlimited number of comets, planets are more scarce (preventing spamming,
100− among other things). This scarcity means they usually aren't free (though
101− sometimes nice people give them away). This guide will assume you've already
102− acquired a planet. If you haven't, you can refer to the ["Get an Urbit ID"
103− guide](/getting-started/get-id) before continuing.
104−
105−Follow the instructions for your case:
106−
107−{% tabs %}
108−
109−{% tab label="Boot a Comet" %}
110−
111−In the terminal, with the `urbit` binary you installed in the previous step, a
112−comet can be booted with the `-c` option:
113−
114−```bash
115−./urbit -c mycomet
116−```
117−
118−> `mycomet` will be the name given to the folder it will create.
119−> You can choose any name you like.
120−
121−It may take a while to initialize the comet (usually only a couple of minutes,
122−but it could take longer). When it's done, it'll take you to the dojo prompt
123−(the dojo is Urbit's shell):
124−
125−```
126−ames: live on 31337
127−http: web interface live on http://localhost:8080
128−http: loopback live on http://localhost:12321
129−~sampel_marzod:dojo>
130−```
131−
132−You can shut down the comet again by typing `|exit` in the dojo or hitting
133−`Ctrl+D`. When it's first shut down, the runtime will be copied inside the data
134−folder, so you can start it up again by doing:
135−
136−```bash
137−./mycomet/.run
138−```
139−> Linux users need to run this command in another terminal window to access
140−> your urbit on port 80 every time you upgrade your runtime (otherwise it'll
141−> default to port 8080):
142−>
143−> ```shell
144−> sudo apt-get install libcap2-bin
145−> sudo setcap 'cap_net_bind_service=+ep' <pier>/.run
146−> ```
147−
148−Since comets are often used temporarily and then discarded, kernel updates are
149−not enabled by default. If you plan to use your comet for a while, it's a good
150−idea to enable updates with the following command in the dojo:
151−
152−```
153−|ota (sein:title our now our)
154−```
155−
156−Lastly most people use their urbit via Landscape, the browser-based UI. In order
157−to access Landscape, you need your web login code. You can get this by running
158−the following command in the dojo:
159−
160−```
161−+code
162−```
163−
164−It'll spit out a code that'll look something like `lidlut-tabwed-pillex-ridrup`.
165−Copy the code it gives you to the clipboard.
166−
167−{% /tab %}
168−
169−{% tab label="Boot a Planet" %}
170−
171−In order to boot a planet, you need a copy of its private keys. If you got your
172−planet via a claim link, the passport backup `.zip` file you downloaded will
173−contain a file called something like `sampel-palnet-1.key`. If you don't have
174−the passport backup or you got your planet by another method, you can instead
175−login to [Bridge](https://bridge.urbit.org/), select your planet, go to the OS
176−section, and hit the "Download Keyfile" button.
177−
178−Back in the terminal, with the `urbit` binary you installed in the previous
179−step, you can boot your planet with the following command (replacing
180−`sampel-palnet` with your own planet and pointing to the location of your
181−keyfile):
182−
183−```bash
184−./urbit -w sampel-palnet -k sampel-palnet-1.key
185−```
186−
187−This will create a folder with the name of your planet and begin booting.
188−It may take a while to initialize the planet (usually only a couple of minutes,
189−but it could take longer). When it's done, it'll take you to the dojo prompt
190−(the dojo is Urbit's shell):
191−
192−```
193−ames: live on 31337
194−http: web interface live on http://localhost:8080
195−http: loopback live on http://localhost:12321
196−~sampel-palnet:dojo>
197−```
198−
199−You can shut down the planet again by typing `|exit` in the dojo or hitting
200−`Ctrl+D`. When it's first shut down, the runtime will be copied inside the data
201−folder, so you can start it up again by doing:
202−
203−```bash
204−./sampel-palnet/.run
205−```
206−> Linux users need to run this command in another terminal window to access
207−> your urbit on port 80 every time you upgrade your runtime (otherwise it'll
208−> default to port 8080):
209−>
210−> ```shell
211−> sudo apt-get install libcap2-bin
212−> sudo setcap 'cap_net_bind_service=+ep' <pier>/.run
213−> ```
214−
215−Most people use their urbit via Landscape, the browser-based UI.
216−In order to access Landscape, you need your web login code.
217−You can get this by running the following command in the dojo:
218−
219−```
220−+code
221−```
222−
223−It'll spit out a code that'll look something like `lidlut-tabwed-pillex-ridrup`
224−(note this is a separate code to your master ticket). Copy the code it gives you
225−to the clipboard.
226−
227−One last thing: The `sampel-palnet-1.key` keyfile is only needed once, when you
228−first boot your planet. **Now that it's booted, it's good security practice to
229−delete that keyfile.**
230−
231−{% /tab %}
232−
233−{% /tabs %}
234−
235−### 4. Login
236−
237−While your urbit is running, the web interface called *Landscape* can be
238−accessed in the browser. Its URL will usually be either `localhost` or
239−`localhost:8080`, depending on your platform. To check the address, you can look
240−at the boot messages in the terminal. You should see a line like:
241−
242−```
243−http: web interface live on http://localhost:8080
244−```
245−
246−Whichever address and port it says there is the one to open in the browser.
247−
248−Once open, you'll be presented with the login screen. Paste in the web login
249−code you copied from the dojo in the previous step and hit "continue". You'll
250−now be taken to your homescreen, with tiles for the default apps such as Groups,
251−Talk, and Terminal.
252−
253−### 5. Runtime Upgrades
254−
255−When new versions of the Urbit runtime (Vere) are available, you'll have to
256−shutdown your urbit and then run the `next` command in order to upgrade.
257−```
258−:dojo> |exit
259−<pier>/.run next
260−```
261−Note that `<pier>` in this case is the folder that was created when you first booted
262−your urbit. When you run this command your urbit will download the latest binary
263−and place it inside the `.bin` directory inside your pier folder. You can then
264−start your ship with the following and you'll be on the latest runtime version:
265−```
266−<pier>/.run
267−```
268−> Linux users need to run this command in another terminal window to access
269−> your urbit on port 80 every time you upgrade your runtime (otherwise it'll
270−> default to port 8080):
271−>
272−> ```shell
273−> sudo apt-get install libcap2-bin
274−> sudo setcap 'cap_net_bind_service=+ep' <pier>/.run
275−> ```
276−
277−If you've been running Urbit for a while (from before runtime version 1.9)
278−and these `.run` commands don't work for you, it probably means you need to
279−[dock](https://operators.urbit.org/manual/running/vere#dock) your pier.
280−You can do this with the following command:
281−```
282−./urbit dock <pier>
283−```
284−Then `.run` should work as expected and future runtime upgrades can be done via
285−`next`.
286−
287−## Next steps
288−
289−Learn how to [get around your
290−urbit](/getting-started/getting-around).
content/getting-started/cloud-hosting.mddeleted−468
@@ -1,468 +0,0 @@
1−+++
2−title = "Cloud hosting"
3−weight = 4
4−description = "How to host your ship in the cloud so you can access it from any device"
5−tag = "selfhost"
6−+++
7−
8−The goal of this guide is to have clear and easy to follow best practices for
9−deploying an Urbit node to a server you control in the cloud. Deploying in the
10−cloud allows you to access your Urbit from any device.
11−
12−Most Urbit users start out running their ship locally on one machine in order to
13−play with it, but this means when your machine is offline your Urbit node is
14−offline too (and can't get updates). You can also only access your Urbit from
15−that one machine.
16−
17−This guide uses Digital Ocean as the cloud provider, but others can be used. If
18−using another provider, the setup script provided and other server configuration
19−instructions may need to be modified or done manually.
20−
21−## 1. Create a Droplet
22−
23−Create an account on [Digital Ocean](https://digitalocean.com). Once you make an
24−account, choose "Deploy a virtual machine".
25−
26−You should see the page below where you can create your Droplet, aka Virtual Machine:
27−
28−![do screenshot](https://media.urbit.org/operators/manual/running/hosting/do-screenshot.png)
29−
30−Fill out the options like so:
31−
32−#### Image
33−
34−Ubuntu 22.04 x64
35−
36−#### Plan
37−
38−- Shared CPU: Basic
39−- CPU options: Regular with SSD
40−- 2GB / 1 CPU ($12/mo)
41−
42−You can choose a more powerful option if you'd like but the $12 option should be
43−sufficient. Note Urbit needs 2GB of memory; it's possible to choose a cheaper
44−option and run it with less memory by using swap but it will impact performance.
45−
46−#### Add block storage
47−
48−The $12 plan includes 50GB which should be sufficient for quite some time, so
49−you can skip this.
50−
51−#### Datacenter region
52−
53−Choose the region closest to you.
54−
55−#### VPC Network
56−
57−Leave this as default.
58−
59−#### Authentication
60−
61−In the "Authentication" field, select "SSH keys" and hit "New SSH Key". Run the
62−following command in the terminal on your local machine, replacing
63−`riclen-tinlyr` with the name of your ship (sans the leading `~`):
64−
65−```bash {% copy=true %}
66−SHIP="riclen-tinlyr" bash -c 'ssh-keygen -q -N "" -C $SHIP -f ~/.ssh/$SHIP && cat ~/.ssh/$SHIP.pub'
67−```
68−
69−It should spit out a long string of letters and numbers beginning with `ssh-rsa`
70−and ending with your ship name. Copy the whole thing and paste it into the "SSH
71−key content" field on Digital Ocean. In the "Name" field, enter your ship name.
72−
73−#### Additional options
74−
75−Click "+Advanced Options" check the box for "Add Initialization scripts (free)" and paste the script below into the field provided. This
76−will automatically configure the server and install necessary software.
77−
78−```bash {% copy=true %}
79−#!/bin/bash
80−
81−# configure swap
82−fallocate -l 2G /swapfile
83−chmod 600 /swapfile
84−mkswap /swapfile
85−swapon /swapfile
86−echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
87−
88−# setup firewall
89−ufw allow OpenSSH
90−ufw allow www
91−ufw allow https
92−ufw allow 34543/udp
93−ufw enable
94−
95−# create and configure user
96−useradd -s /bin/bash -d /home/urbit -m -G sudo urbit
97−passwd -d urbit
98−echo "urbit ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
99−
100−# configure ssh keys for user
101−mkdir -p /home/urbit/.ssh
102−chmod 700 /home/urbit/.ssh
103−cp /root/.ssh/authorized_keys /home/urbit/.ssh/authorized_keys
104−chmod 600 /home/urbit/.ssh/authorized_keys
105−chown -R urbit:urbit /home/urbit/.ssh
106−
107−# configure sshd
108−mkdir -p /etc/ssh/sshd_config.d
109−cat > /etc/ssh/sshd_config.d/override.conf <<EOF
110−PermitRootLogin no
111−PubkeyAuthentication yes
112−PasswordAuthentication no
113−EOF
114−
115−# fetch and extract urbit binary
116−curl -L https://urbit.org/install/linux-x86_64/latest | tar xzk --transform='s/.*/urbit/g' -C /home/urbit/
117−chown urbit:urbit /home/urbit/urbit
118−
119−# install tmux
120−apt -y update
121−apt install -y tmux
122−
123−# reboot
124−systemctl reboot
125−```
126−
127−#### How many Droplets?
128−
129−1
130−
131−#### Choose a hostname
132−
133−This will be the name the server calls itself locally, you can put in whatever
134−you want. Your planet name is a good choice.
135−
136−#### Add tags
137−
138−Leave empty.
139−
140−#### Select project
141−
142−Leave as the default.
143−
144−#### Create Droplet
145−
146−Hit this button to create the droplet.
147−
148−## 2. Prepare for upload
149−
150−{% callout %}
151−
152−**Note**
153−
154−This step is necessary if you already have a ship running locally and want to
155−move it to the cloud. If you don't, you can skip this step.
156−
157−{% /callout %}
158−
159−In the Dojo, use either `"CTRL + D"` or `|exit` to shut down your ship.
160−
161−Archive your pier by running `tar cvzf riclen-tinlyr.tar.gz ~/path/to/your/pier`
162−(substitute your own ship name and pier location).
163−
164−## 3. Connect to the server
165−
166−To make connecting simple, you can add an alias to `~/.ssh/config` on your local
167−machine. Open `~/.ssh/config` in an editor (you may need to create it if the
168−file doesn't exist), and add the following to the bottom of the file (replacing
169−the ship name with your own and the IP address with that of your droplet):
170−
171−``` {% copy=true %}
172−Host riclen-tinlyr
173− HostName 161.35.148.247
174− User urbit
175− IdentityFile ~/.ssh/riclen-tinlyr
176− IdentitiesOnly yes
177−```
178−
179−{% tabs %}
180−
181−{% tab label="If you have an existing pier" %}
182−
183−
184−Copy the archived pier to the server with the following (substituting your ship
185−name and Host):
186−
187−```bash {% copy=true %}
188−scp riclen-tinlyr.tar.gz riclen-tinlyr:
189−```
190−
191−It may take a while to upload if your pier is large and/or your internet is
192−slow.
193−
194−{% /tab %}
195−
196−{% tab label="If you have a key file" %}
197−
198−If you have obtained a planet and want to boot it for the first time, you'll
199−need to upload its key file to the server. These instructions assume you've
200−received an invite. If you've got a planet by another method, you can also login
201−to [Bridge](https://bridge.urbit.org) and download the key file from there.
202−
203−If you've received a planet invite via email or a claim link like
204−`https://bridge.urbit.org/#labfur-batteg-dapnex-binsup-riclen-tinlyr`, open it
205−in a browser and you should see a page like the following:
206−
207−![claim planet screenshot](https://media.urbit.org/operators/manual/running/hosting/claim-planet.png)
208−
209−If you hit "Claim", it'll bring you here:
210−
211−![download passport
212−screenshot](https://media.urbit.org/operators/manual/running/hosting/download-passport.png)
213−
214−Hit "Download Backup (Passport)" and it'll have you download a file named like
215−`riclen-tinlyr-passport.zip`.
216−
217−Unzip the file with:
218−
219−```bash {% copy=true %}
220−unzip ~/path/to/download/folder/riclen-tinlyr-passport.zip
221−```
222−
223−It'll create a folder called `riclen-tinlyr-passport` which will contain three files:
224−
225−- `riclen-tinlyr-1.key`
226−- `riclen-tinlyr-Management Proxy.png`
227−- `riclen-tinlyr-Master Ticket.png`
228−
229−You can physically print out the two `.png` files and store them in a safe and
230−secure location. Importantly, you should ensure the *master ticket* (which will
231−look something like `~tarnes-pilryd-dassed-sogsul`) is securely and safely
232−stored. If anyone gains access to the master ticket they'll have ownership and
233−control of your Urbit ID, and if you lose it you'll irreversibly lose ownership
234−and control of your Urbit ID.
235−
236−The next screen on the claim page will ask you to re-enter the master ticket to
237−ensure you've recorded it accurately, and then the claim process is complete.
238−Once you've securely, physically backed up the master ticket and the `.png`
239−passports, it's a good idea to delete the `riclen-tinlyr-passport.zip` file and
240−the two `.png` files, so if someone gains access to your computer, your Urbit ID
241−will be safe.
242−
243−This will leave only the `riclen-tinlyr-1.key` file. The key file contains your
244−planet's private keys, which are necessary to boot it up for the first time.
245−You'll need to copy that file to the server with the following command (again,
246−replacing `riclen-tinlyr` with your own ship and Host):
247−
248−```bash {% copy=true %}
249−scp riclen-tinlyr-passport/riclen-tinlyr-1.key riclen-tinlyr:
250−```
251−
252−Note: you should keep the `riclen-tinlyr-1.key` until you've completed this
253−guide and your ship is booted to be sure it was copied successfully, but
254−afterwards you should also delete that file for security.
255−
256−{% /tab %}
257−
258−{% /tabs %}
259−
260−Once you've either uploaded your pier or uploaded your key file as the case may
261−be, you can connect to your server:
262−
263−```bash {% copy=true %}
264−ssh riclen-tinlyr
265−```
266−You'll be taken to the shell on your server.
267−
268−## 5. Boot your ship
269−
270−{% tabs %}
271−
272−{% tab label="If you have an existing pier" %}
273−
274−In the previous section you ssh'd into the server. In the same ssh session,
275−extract the pier archive you previously uploaded, then delete the archive:
276−
277−```bash {% copy=true %}
278−tar xvzf riclen-tinlyr.tar.gz && rm riclen-tinlyr.tar.gz
279−```
280−
281−You'll now have a folder called `riclen-tinlyr`, which is your pier. Urbit is
282−best run in a tmux or screen session so it's easy to keep it running when
283−you disconnect. In this case we'll use tmux, which has already been installed
284−by the setup script.
285−
286−Run tmux:
287−
288−```bash {% copy=true %}
289−tmux
290−```
291−
292−You should now be in tmux. First, dock your ship:
293−
294−```bash {% copy=true %}
295−./urbit dock riclen-tinlyr
296−```
297−
298−That will copy the `urbit` runtime inside the pier, so you can now delete the
299−separate binary:
300−
301−```bash {% copy=true %}
302−rm urbit
303−```
304−
305−{% /tab %}
306−
307−{% tab label="If you have a key file" %}
308−
309−In the previous section you ssh'd into the server. In the same ssh session,
310−start tmux:
311−
312−```bash {% copy=true}
313−tmux
314−```
315−
316−You should now be in tmux. Boot a new ship with the following command,
317−specifying the ship name and key file, as well as the Ames port that was
318−previously opened in the firewall by the setup script:
319−
320−```bash {% copy=true %}
321−./urbit -w riclen-tinlyr -k riclen-tinlyr-1.key -p 34543
322−```
323−
324−It may take several minutes to boot the new ship. Eventually, it'll take you to
325−the Dojo (Urbit's shell) and show a prompt like `~riclen-tinlyr:dojo>`. Once
326−booted, shut the ship down again by typing `|exit` in the Dojo. After it quits,
327−it should print something like "docked successfully", which means the binary has
328−been copied inside the pier. This means you can delete the separate binary:
329−
330−```bash {% copy=true %}
331−rm urbit
332−```
333−
334−The key file is only needed when you first boot the ship, so it's good practice
335−to delete it after first boot:
336−
337−```bash {% copy=true %}
338−rm riclen-tinlyr-1.key
339−```
340−
341−{% /tab %}
342−
343−{% /tabs %}
344−
345−Run the following to allow the runtime to bind ports 80 and 443:
346−
347−```bash {% copy=true %}
348−sudo setcap 'cap_net_bind_service=+ep' riclen-tinlyr/.run
349−```
350−
351−Now you can start your ship up with the following:
352−
353−```bash {% copy=true %}
354−./riclen-tinlyr/.run -p 34543
355−```
356−
357−After a few moments it'll show the Dojo prompt like `~riclen-tinlyr:dojo>`.
358−
359−## 6. Get a domain
360−
361−To make accessing the web interface convenient, you should request an
362−`arvo.network` domain name. To do so, run the following command in the Dojo,
363−replacing the IP address with your droplet's:
364−
365−``` {% copy=true %}
366−-dns-address [%if .161.35.148.247]
367−```
368−
369−This will request a subdomain of your ship like `riclen-tinlyr.arvo.network`.
370−
371−The domain should be registered almost instantly, but sometimes it takes a while
372−for it to propagate to other DNS servers. You might therefore see the following:
373−
374−```
375−> -dns-address [%if .161.35.148.247]
376−dns: request for DNS sent to ~deg
377−dns: awaiting response from ~deg
378−http: fail (13, 504): unknown node or service
379−http: fail (14, 504): unknown node or service
380−http: fail (15, 504): unknown node or service
381−http: fail (16, 504): unknown node or service
382−http: fail (17, 504): unknown node or service
383−dns: unable to access via riclen-tinlyr.arvo.network
384−XX confirm port 80
385−XX check via nslookup
386−0
387−```
388−
389−If that happens, wait five or ten minutes and then try again. You should
390−eventually see:
391−
392−```
393−> -dns-address [%if .161.35.148.247]
394−dns: request for DNS sent to ~deg
395−dns: awaiting response from ~deg
396−[%key iter=0 width=2.047]
397−[%key iter=1 width=2.047]
398−[%key iter=2 width=2.047]
399−[%key iter=3 width=2.047]
400−acme: requesting an https certificate for riclen-tinlyr.arvo.network
401−dns: confirmed access via riclen-tinlyr.arvo.network
402−0
403−acme: received https certificate for riclen-tinlyr.arvo.network
404−http: restarting servers to apply configuration
405−http: web interface live on https://localhost:443
406−http: web interface live on http://localhost:80
407−http: loopback live on http://localhost:12321
408−```
409−
410−That means the domain has been registered and an SSL certificate has been
411−installed, so you can access the web interface securely with HTTPS.
412−
413−## 7. Log in to Landscape
414−
415−In order to login to the web interface, you need to get the web login code. Run
416−the following in the Dojo:
417−
418−``` {% copy=true %}
419−+code
420−```
421−
422−It'll spit out something like `ropnys-batwyd-nossyt-mapwet`. That's your web
423−login code, you can copy that and save it in a password manager or similar. Note
424−that the web login code is separate from the master ticket.
425−
426−The server configuration should now be complete, and you can access Landscape in
427−the browser. Navigate to the domain you configured previously, in this case
428−`riclen-tinlyr.arvo.network`. You should see the Landscape login screen:
429−
430−![landscape login screen](https://media.urbit.org/operators/manual/running/hosting/landscape-login.png)
431−
432−Enter the web login code and you'll be taken to your ship's homescreen. Your
433−ship is now running in the cloud, and you can access it from any device by
434−visiting its URL.
435−
436−## 8. Disconnect
437−
438−You can now disconnect from the tmux session by hitting `CTRL+b d` (that is, you
439−hit `CTRL+b`, release it, and then hit `d`). You'll be taken back to the
440−ordinary shell, but the ship will still be running in the background. If you
441−want to get back to the Dojo again, you can reattach the tmux session with:
442−
443−```bash {% copy=true %}
444−tmux a
445−```
446−
447−Finally, you can disconnect from the ssh session completely by hitting `CTRL+d`.
448−
449−## 9. Cleanup
450−
451−If you booted a new ship by uploading a key file, it's a good idea to now delete
452−the key file on your local machine.
453−
454−If you uploaded an existing pier, you should delete the old copy of both the
455−pier directory and the `.tar.gz` archive on your local machine. You might be
456−tempted to keep one of these as a backup, but note that **you must never again
457−boot the old copy on the live network**. Doing so will create unfixable
458−networking problems and require you to perform a factory reset through Bridge,
459−wiping your ship's data. We therefore don't recommend you keep duplicates of
460−your pier lying around.
461−
462−
463−## Next steps
464−
465−- Kep your Urbit runtime up-to-date to take advantage of the latest Landscape and Application over-the-air updates. See [Step #5 in the CLI guide](/getting-started/cli#5-runtime-upgrades) to update your runtime.
466−
467−- Learn how to [get around your
468−urbit](/getting-started/getting-around).
content/getting-started/desktop.mddeleted−11
@@ -1,11 +0,0 @@
1−+++
2−title = "Desktop app"
3−weight = 4
4−description = ""
5−+++
6−
7−In the past we recommended [Port](https://github.com/urbit/port/releases), a desktop Urbit client.
8−
9−We now recommend that users that are not comfortable with the [CLI interface](/getting-started/cli) run Urbit with a [hosting service](/getting-started/hosted) or an Urbit-native computer like [Native Planet](https://www.nativeplanet.io/).
10−
11−Whichever way you run your urbit, you can also now use it with a desktop interface such as [Scene](https://tirrel.io/scene/index.html), or the soon-to-be released [Realm](https://www.holium.com/) application.
content/getting-started/get-id.mddeleted−113
@@ -1,113 +0,0 @@
1−+++
2−title = "Get an Urbit ID"
3−weight = 2
4−description = "How to acquire an Urbit ID"
5−tag = "selfhost"
6−+++
7−
8−### Types of ID
9−
10−There are [five different
11−types](https://operators.urbit.org/guides/which-id-should-i-buy) of Urbit ID, but here we'll just be discussing two types called comets and planets.
12−
13−**Comets** are free, temporary identities that you can issue yourself and are best-suited for
14−short-term usage. **Planets** are permanent identities that are suitable for long-term use.
15−
16−![](https://storage.googleapis.com/media.urbit.org/site/getting-started/comet-planet.png)
17−
18−Planets have a unique, four syllable phonetic name and a [sigil](https://urbit.org/blog/creating-sigils), a visual representation of the name.
19−
20−
21−
22−### Where to get a planet
23−
24−There are a few ways to get your own planet:
25−
26−- Receiving one from a friend
27−- Asking on Twitter (if you're lucky)
28−- Booting a comet and being friendly in [Urbit Community](https://urbit.org/groups/~bitbet-bolbel/urbit-community)
29−- Purchasing one from a marketplace
30−
31−This guide will cover the last case and what to do after receiving one.
32−
33−### Buying a planet
34−
35−There are many places to buy a planet using either crypto or fiat currency.
36−
37−Layer 1 planets are the most available through marketplaces, however they can be expensive due to Ethereum gas fees. You will need an Ethereum wallet such as Metamask to purchase planets, and will later need to sign in to Bridge with your wallet to configure your planet.
38−
39−Layer 2 planets do not require any crypto wallet management, but are only available on specific marketplaces.
40−
41−There is no difference between Layer 1 or Layer 2 in the quality of experience
42−when using Urbit.
43−
44−Here are a few of the places where you can buy planets:
45−{% table .w-full .my-4 %}
46−* L1 Planet Markets
47−* L2 Planet Markets
48−---
49−*
50− - [Urbitex](https://urbitex.io)
51− - [Urbit.live](https://urbit.live)
52− - [Urbit.me](https://urbit.me)
53−*
54− - [azimuth.shop](https://azimuth.shop)
55− - [lanlyd](https://lanlyd.net/)
56− - [~mocbel house](https://mocbel.house)
57− - [\_networked subject](https://subject.network)
58− - [Planet Market](https://planet.market)
59− - [Wexpert Systems](https://wexpert.systems)
60−{% /table %}
61−
62−{% callout %}
63−
64−**Layer 2 for planets**
65−
66−Learn more about [layer 2 for planets](https://operators.urbit.org/manual/id/layer-2-for-planets) in the User's Manual page on the topic.
67−
68−{% /callout %}
69−
70−
71−### Claiming your planet
72−
73−An invitation to claim your planet comes in one of two forms.
74−
75−The first is an email invitation with an Urbit ID and a Master Ticket.
76−
77−The second, made available through our [L2 solution](https://operators.urbit.org/manual/id/layer-2-for-planets), is an activation code or a link to activate on [Bridge](https://bridge.urbit.org), the Urbit ID management tool.
78−
79−![](https://media.urbit.org/site/getting-started/Server-setup-1.jpg)
80−
81−Clicking 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.
82−
83−{% callout %}
84−
85−**Claiming L1 planets**
86−
87−If 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.
88−
89−{% /callout %}
90−
91−
92−### Using Bridge to get your keyfile
93−
94−Now 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.
95−
96−- **Claimed L2 planets**
97− If you’ve claimed your L2 Planet then you should already have downloaded your Passport, which contains your Master Ticket and keyfile.
98−
99−- **Master Ticket holders**
100− If you haven’t downloaded your Passport but have a Master Ticket, then you can simply log in with Bridge using the Master Ticket option with your planet name and Master Ticket password. Click the ID box near the bottom of the page to open the ID page, then click the **Download Passport** button, which contains your keyfile.
101−
102−- **L1 Planet Purchasers**
103− Log in to Bridge with your Ethereum wallet using Metamask or the wallet of your choice with WalletConnect. Click the “OS” box on the bottom of the page to open the OS page, and then click the **Download Keyfile** button.
104−
105−### Next steps
106−
107−Now that you have a keyfile let's move on to booting the Urbit OS.
108−
109−- [CLI instructions](/getting-started/cli) – Set up Vere, the Urbit runtime, using the command line.
110−
111−- [Install on the cloud](/getting-started/cloud-hosting) – A step-by-step guide to setting up Urbit on a VPS.
112−
113−- [Set up a home server](/getting-started/home-servers) – Explore options for running your own dedicated physical Urbit computer.
content/getting-started/getting-around.mddeleted−55
@@ -1,55 +0,0 @@
1−+++
2−title = "Overview"
3−description = "Getting around your urbit"
4−tag = "around"
5−weight = 0
6−+++
7−
8−### 1. Get oriented
9−
10−After you've logged into your Urbit for the first time, you'll have an interface called Landscape – a way interact with the network and applications. You'll also see a few pre-installed applications: Terminal, Groups, and Talk. More on them in a moment.
11−
12−![](https://storage.googleapis.com/media.urbit.org/site/getting-started/get-oriented.png)
13−
14−Above those are buttons to view System Preferences and check out notifications for messages and application activity. The search bar helps you surface applications you already have installed, or discover developers and applications across the Urbit network.
15−
16−![](https://storage.googleapis.com/media.urbit.org/site/getting-started/about-system.png)
17−
18−You'll likely want to focus on finding and joining new communities, which you can do with the **Groups** app.
19−
20−### 2. Join a few groups
21−
22−Joining public groups is simple – just search for the group host's Urbit ID, and click join. Check out a walk-through of this process in the [Joining groups](/getting-started/joining-groups) guide.
23−
24−### 3. Install some applications
25−
26−Groups are great, but Urbit goes way deeper with apps that are developed specifically for Urbit and use P2P networking for everything.
27−
28−Check out the [Installing apps](/getting-started/installing-applications) guide for a walk-through on the process of installing Urbit applications.
29−
30−
31−### 4. Explore interfaces
32−
33−The default Urbit experience is using Landscape in the browser, but Urbit is also available on native mobile and desktop applications through alternative interfaces. [Learn more about Urbit interfaces](/getting-started/interfaces).
34−
35−
36−### 5. Getting help
37−
38−If you need help getting around Urbit, the best place to go is the official Urbit community: [`~bitbet-bolbel/urbit-community`](/groups/~bitbet-bolbel/urbit-community). Those in the Help channel are willing to troubleshoot or provide links to resources to help you get out of a jam. Note that Urbit Community can take a long time to join due to its size.
39−
40−If your question involves an app, you're better served reaching out to the developer. Many [developers](/ecosystem?type=organizations) have dedicated groups on the network explicitly for this purpose.
41−
42−If you're having trouble with your planet or the hosting provider that's running your ship, try their support, as they'll have more context and resources to help solve your issue. And you can always email support@urbit.org if you're having trouble getting onto the network.
43−
44−
45−
46−### 6. Next steps
47−
48−
49−**Learn more**: Check out the [Operators Site](https://operators.urbit.org/) to learn more about running your own Urbit and how the network functions.
50−
51−**Stay updated**: [Subscribe](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&id=be143888d2) to the Urbit Newsletter for news, blog posts, and upcoming events.
52−
53−**Meet up**: Many of the organizations and people behind Urbit host virtual and in-person events on a regular basis — check out the latest on our [Events feed](/events/), or a local [Meetup group](/ecosystem?type=communities).
54−
55−**Build**: If you're the kind of person who wants to build applications directly for discerning communities with built-in identity and networking primitives, or even jump into the Urbit kernel's core, visit [Urbit Developers](https://developers.urbit.org/) to learn more.
content/getting-started/home-servers.mddeleted−27
@@ -1,27 +0,0 @@
1−+++
2−title = "Home servers"
3−weight = 5
4−description = "Options for hosting with a home server"
5−tag = "selfhost"
6−+++
7−
8−There are a variety of tools that make running Urbit at home straightforward on dedicated hardware. If your enjoy hardware ownership and full embracing the spirit of decentralization, then these tools are for you.
9−
10−
11−## Native Planet
12−
13−[![Native Planet Tellurian](https://storage.googleapis.com/media.urbit.org/site/getting-started/native-planet.jpg)](https://www.nativeplanet.io/hardware)
14−
15−Purchase a [computer designed to run Urbit](https://www.nativeplanet.io/hardware), out of the box.
16−
17−## Groundseg & Startram
18−
19−[![Groundseg UI](https://storage.googleapis.com/media.urbit.org/site/getting-started/groundseg.png)](https://www.nativeplanet.io/software)
20−
21−Install these [Native Planet software packages](https://www.nativeplanet.io/software) to turn a Linux computer into an urbit that's accessible from anywhere in the world.
22−
23−## Umbrel
24−
25−[![Umbrel Screenshot](https://storage.googleapis.com/media.urbit.org/site/getting-started/umbrel.png)](https://umbrel.com/)
26−
27−Install the [Urbit application](https://subject.network/posts/urbit-apps-umbrel/) on a Raspberry Pi running [Umbrel](https://umbrel.com/).
content/getting-started/hosted.mddeleted−30
@@ -1,30 +0,0 @@
1−+++
2−title = "Overview"
3−weight = 0
4−description = "Running Urbit with a hosting provider"
5−tag = "hostprov"
6−+++
7−
8−Hosting providers are companies that offer "Urbit as a Service". They do the work of setting up your urbit in the cloud and making sure it's up to date and you don't have perform any technical steps or maintenance.
9−
10−![Hosting Providers](https://storage.googleapis.com/media.urbit.org/site/getting-started/hosting-providers.png)
11−
12−Generally, you'll get an Urbit ID by signing up with a hosting provider, but some allow you to bring your own Urbit ID, or even your pier (all your urbit data.)
13−
14−While hosting providers offer convenience and customer support, hosting does
15−mean trusting your provider with your data, just as you would any internet
16−service company. Unlike typical internet services however, Urbit makes it
17−possible to leave a hosting provider with your Urbit ID, which you can then use
18−to switch hosting provider or self-host.
19−
20−The two important points one should remember about hosting providers:
21−
22−- Because the provider has access to the resources that run your Urbit
23− experience, you must trust them with your data.
24−- Urbit is designed to be portable, so your hosting provider will allow you to
25− export all your data and boot up elsewhere if you choose.
26−
27−
28−## Next steps
29−
30−[Explore Hosting Providers -&gt;](/getting-started/hosting-providers)
content/getting-started/hosting-providers.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Hosting Providers"
3−weight = 2
4−description = "Companies that provide Urbit hosting as a service"
5−tag = "hostprov"
6−+++
7−
8−
9−## Tlon
10−[Tlon](https://tlon.io) is the company responsible for creating Urbit, Landscape, Groups and Talk. [Tlon](https://tlon.io) offers Urbit hosting for free, which includes a planet of your choice.
11−
12−[![Tlon](https://storage.googleapis.com/media.urbit.org/site/ecosystem/organizations/tlon-hosting-provider.png)](https://tlon.io/)
13−
14−## Planet One
15−
16−[Planet One](https://planet.one), a [Tirrel](https://urbit.org/organizations/tirrel) service, offers Urbit hosting for $15/month. You can also obtain hosting through their native Desktop application, [Scene](https://planet.one/scene).
17−
18−[![Planet One Hosting](https://storage.googleapis.com/media.urbit.org/site/ecosystem/organizations/planetone-hosting.png)](https://planet.one/)
19−
20−## Third Earth
21−
22−[ThirdEarth](https://third.earth) offers hosting for $11.99/month. Third Earth is the only hosting provider that allows you to join with an existing Urbit ID and pier, i.e. a planet that you have already booted elsewhere. If you don't have a planet yet, they can also provide you with one.
23−
24−[![Third Earth Hosting](https://storage.googleapis.com/media.urbit.org/site/ecosystem/organizations/thirdearth-hosting.png)](https://third.earth/)
content/getting-started/installing-applications.mddeleted−39
@@ -1,39 +0,0 @@
1−+++
2−title = "Installing apps"
3−tag = "around"
4−weight = 3
5−+++
6−
7−Installing Urbit applications is simple. Search for the developer and download the application directly from them. We'll walk you through it.
8−
9−### 1. Finding applications
10−
11−To install an application, you'll need to know the ship it is distributed from, which is often its developer's Urbit ID, *e.g.* `~paldev` or `~dister-fabnev-hinmur`. If you know the application, you can enter the full shortcode, e.g. `~paldev/pals`.
12−
13−You can find a [public directory of applications](/ecosystem?type=applications) in the Ecosystem section of urbit.org.
14−
15−Not all applications are listed on urbit.org, so you’ll discover more by actively using Urbit and meeting people.
16−
17−However, we can get started by using a simple app from Urbit developer [`~paldev`](/ids/~paldev).
18−
19−### 2. Search for a Developer
20−
21−Once you’re on the network, you’ll see a large tiled interface with a few applications and a search bar on the top of the page.
22−
23−Click and the search bar and search for the software provider’s Urbit ID.
24−
25−For example, to install the pals application, search for `~paldev` and then click on the result for `~paldev` to show the applications.
26−
27−![](https://media.urbit.org/site/getting-started/install-apps-1.png)
28−
29−![](https://media.urbit.org/site/getting-started/install-apps-2.png)
30−
31−### 3. Get the Application
32−
33−Select the pals app, and a modal window will open that shows some information about the application. Go ahead and click the “Get App” button, and confirm the following modal window to begin the installation process.
34−
35−![](https://media.urbit.org/site/getting-started/install-apps-3.png)
36−
37−Soon you’ll have a new application tile on your home screen. Now you can add people you know on the network as your pals just by entering their Urbit ID.
38−
39−![](https://media.urbit.org/site/getting-started/install-apps-4.png)
content/getting-started/interfaces.mddeleted−10
@@ -1,10 +0,0 @@
1−+++
2−title = "Interfaces"
3−weight = 4
4−description = "Ways to interact with Urbit"
5−tag = "around"
6−+++
7−
8−Urbit ships by default with Landscape by [Tlon](https://tlon.io), a web-based interface for managing your ship and the software installed on it, and launching other web-based applications. However, there are many ways to interact with your Urbit.
9−
10−There's [EScape](https://urbit.org/applications/~fabnev-hinmur/escape), a fork of Groups that also has an accompanying mobile application. [Scene](https://tirrel.io/scene/index.html) and the (soon to be released) [Realm](https://www.holium.com/) offer native desktop window managers for your urbit. Lastly, there's the [Dojo](https://developers.urbit.org/overview/dojo) CLI interface for developers
content/getting-started/joining-groups.mddeleted−54
@@ -1,54 +0,0 @@
1−+++
2−title = "Joining groups"
3−tag = "around"
4−weight = 2
5−+++
6−
7−Joining public groups is straightforward: search for the group host's Urbit ID, and join. Some groups are private, so you'll need approval to join.
8−
9−And still other groups are secret! Which means you can't find them, and you'll need to be invited to join.
10−
11−Let's walk through the process of finding and joining a public group.
12−
13−
14−### 1. Open the Groups app
15−
16−Once you’re on the network, you’ll see Landscape, which is filled with large applications tiles: Talk, Terminal, and Groups. Click on Groups.
17−
18−![](https://storage.googleapis.com/media.urbit.org/site/getting-started/get-oriented.png)
19−
20−### 2. Enter the group shortcode
21−
22−To join a group, you'll need to know its host Urbit ID (e.g. `~bitbet-bolbel`) or its full Urbit address, also called a shortcode (e.g. `~bitbet-bolbel/urbit-community`) .
23−
24−Check out some public groups in the [urbit.org groups directory](/ecosystem?type=groups)
25−
26−As an example, we’ll start by joining [UF Public](/groups/~halbex-palheb/uf-public), the Urbit Foundation's official group.
27−
28−In the Groups app, click on "Find Groups" in the left column and enter `~halbex-palheb/uf-public`
29−
30−Then click on the "Join" button once the group appears.
31−
32−![](https://media.urbit.org/site/additional-guides/groups-2.png)
33−
34−
35−### 3. Join channels
36−
37−After a few moments the default channels will load. For groups with a large backlog, such as Urbit Community (~bitbet-bolbel/urbit-community), this may take a few minutes.
38−
39−![](https://media.urbit.org/site/additional-guides/groups-3.png)
40−
41−
42−We can join more channels in the group by clicking on the "All Channels" link in the left column.
43−
44−![](https://media.urbit.org/site/additional-guides/groups-5.png)
45−
46−
47−
48−### 4. Chat and post on the network
49−
50−In addition to posting text, you can now react, start threads, and reference messages by hovering over chat messages. And you can leave comments in notebooks if they are enabled.
51−
52−Remember to be nice, and have fun.
53−
54−![](https://media.urbit.org/site/additional-guides/groups-4.png)
content/getting-started/self-host.mddeleted−33
@@ -1,33 +0,0 @@
1−+++
2−title = "Overview"
3−weight = 1
4−description = "Running your own urbit"
5−tag = "selfhost"
6−+++
7−
8−
9−To run Urbit on your own you need to be comfortable using a command line
10−interface (CLI), and should have a basic understanding of how to interact with
11−the Ethereum blockchain.
12−
13−Urbit OS is comprised of a virtual operating system (Arvo) and a runtime called
14−(Vere). The runtime has official versions targeting Linux and macOS, although
15−workarounds exist for Windows.
16−
17−Running Urbit locally is good for experimentation, but in the long term you'll
18−want to run it as a server — always on and accessible from anywhere. The nice
19−thing about Urbit is that's easy to start local, and later move to cloud hosting
20−or a home server. Or you can start with the latter options.
21−
22−**Remember, never run your Urbit in more than one place!** Doing so will necessitate
23−a [factory reset](https://operators.urbit.org/manual/id/guide-to-resets).
24−
25−## Next Steps
26−
27−- [Get an Urbit ID](/getting-started/get-id) – Get a planet, a permanent Urbit ID, for the best networked experience.
28−
29−- [CLI instructions](/getting-started/cli) – Set up Vere, the Urbit runtime, using the command line.
30−
31−- [Install on the cloud](/getting-started/cloud-hosting) – A step-by-step guide to setting up Urbit on a VPS.
32−
33−- [Set up a home server](/getting-started/home-servers) – Explore options for running your own dedicated physical Urbit computer.
content/gifts/sample.mddeleted−6
@@ -1,6 +0,0 @@
1−+++
2−name = "Matilde Park"
3−planet = "~haddef-sigwen"
4−date = "2021-07-27"
5−link = "https://urbit.org"
6−+++
content/grants/2019/bitcoin-node-json-rpc-api-part-1.mddeleted−54
@@ -1,54 +0,0 @@
1−+++
2−title = "Bitcoin Node JSON RPC API (Part 1)"
3−date = "2019-11-14"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Write a Remote Procedure Call library for a Bitcoin Gall app -- part one."
12−reward = "1 star"
13−assignee = ["yosoyubik"]
14−id = "649469235"
15−completed = true
16−link = "~pindet-timmut/urbitcoiners"
17−deliverable = "~mister-dister-dozzod-dozzod/bitcoin"
18−+++
19−
20−#### Background
21−
22−To expand Urbit’s Bitcoin-related capabilities, we are building a Gall app which can comprehensively control a Bitcoin Core full node via the JSON RPC API. The app is contained in [this branch](https://github.com/urbit/urbit/tree/btc-node-grant) of the Urbit repo, and the original conception of this idea is discussed [here](https://github.com/urbit/arvo/pull/1052). Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a "money primitive" for future Gall apps.
23−
24−Bitcoin Core is the reference implementation for Bitcoin nodes, which can be run as _bitcoind_ or _bitcoin-qt_.
25−
26−#### Bounty Description
27−
28−This bounty is to create a portion of the Gall app library for Remote Procedure Calls to a Bitcoin Core full node, written in Hoon. The other portions are covered in these grants: [Two](https://grants.urbit.org/bounties/1577544668-bitcoin-node-json-rpc-api-part-2), [Three](https://grants.urbit.org/bounties/312452925-bitcoin-node-json-rpc-api-part-3), [Four](https://grants.urbit.org/bounties/87854308-bitcoin-node-json-rpc-api-part-4).
29−
30−- Specifically, this bounty is to create types and JSON conversions for commands and responses of the first section of the [Bitcoin Core API reference](https://bitcoincore.org/en/doc/0.18.0/), titled “Blockchain”:
31−- Create type definitions in Hoon for structuring commands and responses. Specify poke-action types that map to each command. Use logic specified in Bitcoin Core API resource and the template contained in the guidelines, and fill in this code where appropriate in [`pkg/arvo/lib/btc-node-json.hoon`](https://github.com/urbit/urbit/blob/9bb9b20c71a0a46edc6c52dd869017d3a51ede30/pkg/arvo/lib/btc-node-json.hoon).
32−- The application will be structured as two Gall agents: one “Store” and one “Hook”. The store should act as a data store for data received from the Bitcoin full node, and the Hook should send commands to the node as well as parsing the responses and poking them into the Store. A [template branch](https://github.com/urbit/urbit/tree/btc-node-grant) has been created to set up skeletons of these files to make your work easier.
33−
34−#### Resources
35−
36−- [Store/Hook proposal for userspace architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?usp=sharing)
37−- [Urbit Gall App documentation](https://urbit.org/docs/learn/arvo/gall/)
38−- Bitcoin Core API reference documentation: [Here](https://bitcoincore.org/en/doc/0.18.0/), [here](https://en.bitcoin.it/wiki/API_reference_(JSON-RPC), and [here](https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs).
39−- Distinctions between _bitcoind_ and _bitcoin-qt_: Differences between them discussed [here](https://bitcoin.stackexchange.com/questions/13368/whats-the-difference-between-bitcoind-and-bitcoin-qt-different-commands)
40−- [JSON RPC API standards](https://www.jsonrpc.org/specification)
41−
42−#### Contribution Guidelines
43−
44−- 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.
45−- Base your work off of the [btc-node-grant branch](https://github.com/urbit/urbit/tree/btc-node-grant). Follow Boilerplate. Look for `TODO`s.
46−- Submit your code as a PR to the [btc-node-grant](https://github.com/urbit/urbit/tree/btc-node-grant) branch of the `urbit` repo in form of a `.hoon` file.
47−- You have 45 days from the time of approval to complete this bounty.
48−
49−## Milestones
50−
51−### Your PR is merged
52−
53−1 stars
54−Your PR containing all the relevant code updates is accepted and merged.
content/grants/2019/bitcoin-node-json-rpc-api-part-2.mddeleted−54
@@ -1,54 +0,0 @@
1−+++
2−title = "Bitcoin Node JSON RPC API (Part 2)"
3−date = "2019-09-30"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Write a Remote Procedure Call library for a Bitcoin Gall app -- part two."
12−reward = "1 star"
13−assignee = ["pkova"]
14−id = "1577544668"
15−completed = true
16−link = "~pindet-timmut/urbitcoiners"
17−deliverable = "~mister-dister-dozzod-dozzod/bitcoin"
18−+++
19−
20−#### Background
21−
22−To expand Urbit’s Bitcoin-related capabilities, we are building a Gall app which can comprehensively control a Bitcoin Core full node via the JSON RPC API. The app is contained in [this branch](https://github.com/urbit/urbit/tree/btc-node-grant) of the Urbit repo, and the original conception of this idea is discussed [here](https://github.com/urbit/arvo/pull/1052). Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a "money primitive" for future Gall apps.
23−
24−Bitcoin Core is the reference implementation for Bitcoin nodes, which can be run as _bitcoind_ or _bitcoin-qt_.
25−
26−#### Bounty Description
27−
28−This bounty is to create a portion of the Gall app library for Remote Procedure Calls to a Bitcoin Core full node, written in Hoon. The other portions are covered in these grants: [One](https://grants.urbit.org/bounties/1507085808-bitcoin-node-json-rpc-api-part-1), [Three](https://grants.urbit.org/bounties/312452925-bitcoin-node-json-rpc-api-part-3), [Four](https://grants.urbit.org/bounties/87854308-bitcoin-node-json-rpc-api-part-4).
29−
30−- Specifically, this bounty is to create types and JSON conversions for commands and responses of the sections of the [Bitcoin Core API reference](https://bitcoincore.org/en/doc/0.18.0/), titled **“Control”**, **“Generating”**, **“Mining”**, and **“Network”**:
31−- Create type definitions in Hoon for structuring commands and responses. Specify poke-action types that map to each command. Use logic specified in Bitcoin Core API resource and the template contained in the guidelines, and fill in this code where appropriate in [`pkg/arvo/lib/btc-node-json.hoon`](https://github.com/urbit/urbit/blob/9bb9b20c71a0a46edc6c52dd869017d3a51ede30/pkg/arvo/lib/btc-node-json.hoon).
32−- The application will be structured as two Gall agents: one “Store” and one “Hook”. The store should act as a data store for data received from the Bitcoin full node, and the Hook should send commands to the node as well as parsing the responses and poking them into the Store. A [template branch](https://github.com/urbit/urbit/tree/btc-node-grant) has been created to set up skeletons of these files to make your work easier.
33−
34−#### Resources
35−
36−- [Store/Hook proposal for userspace architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?usp=sharing)
37−- [Urbit Gall App documentation](https://urbit.org/docs/learn/arvo/gall/)
38−- Bitcoin Core API reference documentation: [Here](https://bitcoincore.org/en/doc/0.18.0/), [here](https://en.bitcoin.it/wiki/API_reference_(JSON-RPC), and [here](https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs).
39−- Distinctions between _bitcoind_ and _bitcoin-qt_: Differences between them discussed [here](https://bitcoin.stackexchange.com/questions/13368/whats-the-difference-between-bitcoind-and-bitcoin-qt-different-commands)
40−- [JSON RPC API standards](https://www.jsonrpc.org/specification)
41−
42−#### Contribution Guidelines
43−
44−- 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.
45−- Base your work off of the [btc-node-grant branch](https://github.com/urbit/urbit/tree/btc-node-grant). Follow Boilerplate. Look for `TODO`s.
46−- Submit your code as a PR to the [btc-node-grant](https://github.com/urbit/urbit/tree/btc-node-grant) branch of the `urbit` repo in form of a `.hoon` file.
47−- You have 45 days from the time of approval to complete this bounty.
48−
49−## Milestones
50−
51−### Your PR is merged
52−
53−1 stars
54−Your PR containing all the relevant code updates is accepted and merged.
content/grants/2019/bitcoin-node-json-rpc-api-part-3.mddeleted−54
@@ -1,54 +0,0 @@
1−+++
2−title = "Bitcoin Node JSON RPC API (Part 3)"
3−date = "2019-09-30"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Write a Remote Procedure Call library for a Bitcoin Gall app -- part three."
12−reward = "1 star"
13−assignee = ["yosoyubik"]
14−id = "312452925"
15−completed = true
16−link = "~pindet-timmut/urbitcoiners"
17−deliverable = "~mister-dister-dozzod-dozzod/bitcoin"
18−+++
19−
20−#### Background
21−
22−To expand Urbit’s Bitcoin-related capabilities, we are building a Gall app which can comprehensively control a Bitcoin Core full node via the JSON RPC API. The app is contained in [this branch](https://github.com/urbit/urbit/tree/btc-node-grant) of the Urbit repo, and the original conception of this idea is discussed [here](https://github.com/urbit/arvo/pull/1052). Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a "money primitive" for future Gall apps.
23−
24−Bitcoin Core is the reference implementation for Bitcoin nodes, which can be run as _bitcoind_ or _bitcoin-qt_.
25−
26−#### Bounty Description
27−
28−This bounty is to create a portion of the Gall app library for Remote Procedure Calls to a Bitcoin Core full node, written in Hoon. The other portions are covered in these grants: [One](https://grants.urbit.org/bounties/1507085808-bitcoin-node-json-rpc-api-part-1), [Two](https://grants.urbit.org/bounties/1577544668-bitcoin-node-json-rpc-api-part-2), [Four](https://grants.urbit.org/bounties/87854308-bitcoin-node-json-rpc-api-part-4).
29−
30−- Specifically, this bounty is to create types and JSON conversions for commands and responses of the sections of the [Bitcoin Core API reference](https://bitcoincore.org/en/doc/0.18.0/) titled **"Raw Transactions"** and **"Util"**
31−- Create type definitions in Hoon for structuring commands and responses. Specify poke-action types that map to each command. Use logic specified in Bitcoin Core API resource and the template contained in the guidelines, and fill in this code where appropriate in [`pkg/arvo/lib/btc-node-json.hoon`](https://github.com/urbit/urbit/blob/9bb9b20c71a0a46edc6c52dd869017d3a51ede30/pkg/arvo/lib/btc-node-json.hoon).
32−- The application will be structured as two Gall agents: one “Store” and one “Hook”. The store should act as a data store for data received from the Bitcoin full node, and the Hook should send commands to the node as well as parsing the responses and poking them into the Store. A [template branch](https://github.com/urbit/urbit/tree/btc-node-grant) has been created to set up skeletons of these files to make your work easier.
33−
34−#### Resources
35−
36−- [Store/Hook proposal for userspace architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?usp=sharing)
37−- [Urbit Gall App documentation](https://urbit.org/docs/learn/arvo/gall/)
38−- Bitcoin Core API reference documentation: [Here](https://bitcoincore.org/en/doc/0.18.0/), [here](https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs).
39−- Distinctions between _bitcoind_ and _bitcoin-qt_: Differences between them discussed [here](https://bitcoin.stackexchange.com/questions/13368/whats-the-difference-between-bitcoind-and-bitcoin-qt-different-commands)
40−- [JSON RPC API standards](https://www.jsonrpc.org/specification)
41−
42−#### Contribution Guidelines
43−
44−- 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.
45−- Base your work off of the [btc-node-grant branch](https://github.com/urbit/urbit/tree/btc-node-grant). Follow Boilerplate. Look for `TODO`s.
46−- Submit your code as a PR to the [btc-node-grant](https://github.com/urbit/urbit/tree/btc-node-grant) branch of the `urbit` repo in form of a `.hoon` file.
47−- You have 45 days from the time of approval to complete this bounty.
48−
49−## Milestones
50−
51−### Your PR is merged
52−
53−1 stars
54−Your PR containing all the relevant code updates is accepted and merged.
content/grants/2019/bitcoin-node-json-rpc-api-part-4.mddeleted−54
@@ -1,54 +0,0 @@
1−+++
2−title = "Bitcoin Node JSON RPC API (Part 4)"
3−date = "2019-09-30"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Write a Remote Procedure Call library for a Bitcoin Gall app -- part four."
12−reward = "2 stars"
13−assignee = ["yosoyubik"]
14−id = "87854308"
15−completed = true
16−link = "~pindet-timmut/urbitcoiners"
17−deliverable = "~mister-dister-dozzod-dozzod/bitcoin"
18−+++
19−
20−#### Background
21−
22−To expand Urbit’s Bitcoin-related capabilities, we are building a Gall app which can comprehensively control a Bitcoin Core full node via the JSON RPC API. The app is contained in [this branch](https://github.com/urbit/urbit/tree/btc-node-grant) of the Urbit repo, and the original conception of this idea is discussed [here](https://github.com/urbit/arvo/pull/1052). Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a "money primitive" for future Gall apps.
23−
24−Bitcoin Core is the reference implementation for Bitcoin nodes, which can be run as _bitcoind_ or _bitcoin-qt_.
25−
26−#### Bounty Description
27−
28−This bounty is to create a portion of the Gall app library for Remote Procedure Calls to a Bitcoin Core full node, written in Hoon. The other portions are covered in these grants: [One](https://grants.urbit.org/bounties/1507085808-bitcoin-node-json-rpc-api-part-1), [Two](https://grants.urbit.org/bounties/1577544668-bitcoin-node-json-rpc-api-part-2), [Three](https://grants.urbit.org/bounties/312452925-bitcoin-node-json-rpc-api-part-3).
29−
30−- Specifically, this bounty is to create types and JSON conversions for commands and responses of the sections of the [Bitcoin Core API reference](https://bitcoincore.org/en/doc/0.18.0/) titled **"Wallet"** and **"ZMQ"**.
31−- Create type definitions in Hoon for structuring commands and responses. Specify poke-action types that map to each command. Use logic specified in Bitcoin Core API resource and the template contained in the guidelines, and fill in this code where appropriate in [`pkg/arvo/lib/btc-node-json.hoon`](https://github.com/urbit/urbit/blob/9bb9b20c71a0a46edc6c52dd869017d3a51ede30/pkg/arvo/lib/btc-node-json.hoon).
32−- The application will be structured as two Gall agents: one “Store” and one “Hook”. The store should act as a data store for data received from the Bitcoin full node, and the Hook should send commands to the node as well as parsing the responses and poking them into the Store. A [template branch](https://github.com/urbit/urbit/tree/btc-node-grant) has been created to set up skeletons of these files to make your work easier.
33−
34−#### Resources
35−
36−- [Store/Hook proposal for userspace architecture](https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?usp=sharing)
37−- [Urbit Gall App documentation](https://urbit.org/docs/learn/arvo/gall/)
38−- Bitcoin Core API reference documentation: [Here](https://bitcoincore.org/en/doc/0.18.0/), [here](https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs).
39−- Distinctions between _bitcoind_ and _bitcoin-qt_: Differences between them discussed [here](https://bitcoin.stackexchange.com/questions/13368/whats-the-difference-between-bitcoind-and-bitcoin-qt-different-commands)
40−- [JSON RPC API standards](https://www.jsonrpc.org/specification)
41−
42−#### Contribution Guidelines
43−
44−- 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.
45−- Base your work off of the [btc-node-grant branch](https://github.com/urbit/urbit/tree/btc-node-grant). Follow Boilerplate. Look for `TODO`s.
46−- Submit your code as a PR to the [btc-node-grant](https://github.com/urbit/urbit/tree/btc-node-grant) branch of the `urbit` repo in form of a `.hoon` file.
47−- You have 90 days from the time of approval to complete this bounty.
48−
49−## Milestones
50−
51−### Your PR is merged
52−
53−2 stars
54−Your PR containing all the relevant code updates is accepted and merged.
content/grants/2019/bitcoin-wallet-on-bridge.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Bitcoin Wallet on Bridge"
3−date = "2019-12-08"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Azimuth" ]
8−
9−[extra]
10−image = ""
11−description = "Add Bitcoin support to the Bridge interface. "
12−reward = "1 star"
13−assignee = ["yosoyubik"]
14−id = "273059635"
15−completed = false
16−canceled = true
17−link = "~pindet-timmut/urbitcoiners"
18−deliverable = "~mister-dister-dozzod-dozzod/bitcoin"
19−+++
20−
21−### Background
22−
23−To expand Urbit’s Bitcoin-related capabilities, this bounty is to add Bitcoin support to the Urbit wallet on bridge.urbit.org. Our ultimate goal is to create Bitcoin libraries for Urbit, enabling Bitcoin to serve as a ‘money primitive’ for future Gall apps.
24−
25−### Bounty Description
26−
27−Create an SPV (simple payment verification) Bitcoin wallet within [Bridge](https://bridge.urbit.org). Bridge is written in React; please conform to the code style Bridge has thus far been written in.
28−
29−A completed wallet should:
30−
31−- Use the bitcoinjs-lib library for generating transactions and interfacing with Bitcoin
32−- Display Bitcoin balance (display as individual UTXOs)
33−- Generate new addresses to receive Bitcoin
34−- Support transaction signing and ability to broadcast to a full node specified by the node’s domain name
35−- Reuse login credentials to generate Bitcoin wallets / derivation path
36−- When logged in with a master ticket, use the ownership mnemonic.
37−- When logged in with a BIP 39 mnemonic, use that as-is.
38−- Then, proceed as per BIP32
39−
40−### Resources
41−
42−- [Bitcoin Core SPV wallet reference](https://bitcoin.org/en/operating-modes-guide#simplified-payment-verification-spv)
43−- [JS Library to interact with SPV wallet](https://github.com/bitcoinjs/bitcoinjs-lib)
44−- [The Bridge repository](https://github.com/urbit/bridge)
45−- [Urbit Wallet Reference](https://github.com/urbit/fora-posts/blob/master/proposals/posts/~2018.11.8..19.31.59..ba77~)
46−- [Urbit Wallet Key Generation](https://github.com/urbit/urbit-key-generation]
47−- [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
48−- [BIP 39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki)
49−
50−### Contribution Guidelines
51−
52−- 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.
53−- Bounty claimant should have a good working knowledge of React and Bitcoin transactions.
54−- Submit your code as a PR to the [Bridge](https://github.com/urbit/bridge) repository.
55−- You have 45 days from the time of approval to complete this bounty.
56−
57−## Milestones
58−
59−### Pull request is accepted
60−
61−1 stars
62−Your pull request containing all of the relevant code has been merged.
content/grants/2019/escape.mddeleted−46
@@ -1,46 +0,0 @@
1−+++
2−title = "Escape"
3−date = "2019-12-03"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "A reputation agent for Stars."
12−reward = "4 stars"
13−assignee = ["yosoyubik"]
14−id = "1146667285"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−"How much _Escape_ does `~marzod` have?"
21−
22−When a planet is newly booted into the Urbit Network there is a fundamental service that its sponsor needs to provide: peer discovery. In order to do this the sponsor needs to be up and running, with a stable internet connection. The Urbit Network is still young but there has been several instances where planets discovered that, right after a first boot, they can't communicate with anybody in the network due to their sponsor not been active.
23−
24−These planets need to quickly escape, that is, leave their sponsor star and find a new one that provides a good service. A simple way to assess the likelihood of the sponsor being a good actor in the network is to look at on-chain data from the Azimuth contract, in particular, _Escapes_. If a sponsor has a low Escape score (planets that leave), one could use this as a proxy and say that the sponsor will keep behaving in the same way as the past data indicates. More over, if a planet attracts more planets, that signals more strongly the good quality of the provided service.
25−
26−This proposal addresses this problem by using the Beta Reputation to create a Landscape app that will show the score of a planet's sponsor based on data from Azimuth, in particular the number of planets spawned, and the number of planets that have escaped. [The Beta Reputation](https://www.csee.umbc.edu/~msmith27/readings/public/josang-2002a.pdf) uses the Beta Distribution to calculate the score (e.g. successful/unsuccessful events over the total number of interactions) as the expected value of a probability distribution. More data available (high number of booted planets) will narrow down the confidence of the probability (if a star has only booted a planet that didn't escape, the confidence of that score `(1-0.67=33%)` is smaller than the one of a star that has booted 200 planets and only two have escaped `(1-0.87=13%)`)
27−
28−A full reputation system for stars is out of scope for this proposal, but some ideas would be to include network uptime or other, more subjective metrics, ideally agreed by the children of each star.
29−
30−The aim of this proposal is not to create a perfect reputation system but rather, to introduce in the minds of the users that there is a sponsor that they need to pay attention to, that is providing a service, not only to them but to others in the network, and that the likelihood of that operator's behavior can be attested since the data is publicly available and in a blockchain.
31−
32−The Beta Reputation is a system that is very easy to understand to non-technical users but has a statistical background behind it. Nevertheless this is just one of the many reputation systems that are out there like [Regret](https://dl.acm.org/doi/pdf/10.1145/375735.376110), [Fire](https://eprints.soton.ac.uk/259559/1/dong-ecai2004.pdf) or [Travos](https://idp.springer.com/authorize/casa?redirect_uri=https://link.springer.com/content/pdf/10.1007/s10458-006-5952-x.pdf&casa_token=M38itGxqsu0AAAAA:lAUgQUvbc4dZFhrNs4SSPWrQ9PzUj05pzmU5zkvPkytDOfgFOIxVP0a8Tzk_VkRi37J1bRHPJ2IhTD8C). I envision this work as a starting point for introducing reputation systems in Urbit as libraries that can be used by the community for experimentation.
33−
34−With this is mind the Beta library (`/lib/beta.hoon`) can be used with any app that has a well defined data structure that comprises a list of timestamped events with a certain score, weighted, if desired, for a specific dimension. The ability to tag each event with a weighted dimension allows for complex reputations where different data points can be aggregated together.
35−
36−## Milestones
37−
38−### Gall Agent and Beta Reputation Library
39−
40−2 stars
41−Delivery of the agent and library for the Beta reputation that's able to poke Azimuth for the Blockchain data, calculate the reputation score, and store it on the agent.
42−
43−### Escape UI
44−
45−2 stars
46−Delivery of the UI interface that will show the Reputation Score to the user, with the ability to search for specific sponsors and filter the results accordingly.
content/grants/2019/gall-api-documentation.mddeleted−53
@@ -1,53 +0,0 @@
1−+++
2−title = "Gall API documentation"
3−date = "2019-07-21"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Documentation" ]
8−
9−[extra]
10−image = ""
11−description = "Write reference documentation for using the API for developing Gall apps."
12−reward = "1 star"
13−assignee = ["Liam Fitzgerald", "borlyt-salnus"]
14−id = "1251133389"
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Gall is the Arvo kernel module that controls userspace applications. Understanding its API is required for developing applications on Arvo.
22−
23−#### Bounty Description
24−
25−Write a reference-style document that lists each arm name that could be used in a Gall app and describes what those arms are for. Each arm should also have a short example.
26−
27−Developers should be able to use this document as a template for writing their Gall app. Arms documented should include: `+poke`, `+coup`, `+peer`, `+reap`, `+quit`, `+peek`, `+prep`,`+scry`, and `+wake`.
28−
29−#### Resources
30−
31−- Read the existing [Gall documentation](https://urbit.org/docs/learn/arvo/gall/).
32−- Familiarize yourself with `gall.hoon`, which is in the `/sys/vane` directory.
33−- Familiarize yourself with the style of [reference documentation](https://urbit.org/docs/reference/).
34−
35−#### Contribution Guidelines
36−
37−- You have 30 days from the time of approval to complete this bounty.
38−- Do not begin work until your request to claim this bounty is accepted.
39−- Your document should be written in Markdown.
40−- Submit your document in the form of a pull-request to the [Docs repo](https://github.com/urbit/docs). This file should live under the reference directory.
41−- Expect to receive requests for changes to your document.
42−
43−## Milestones
44−
45−### First draft is submitted
46−
47−0 stars
48−Your first draft is submitted as a pull request to the Docs repository.
49−
50−### Final draft is merged
51−
52−1 stars
53−Your edits are satisfactory, and your PR is merged to master.
content/grants/2019/host-two-urbit-meetups-1.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (1)"
3−date = "2019-11-18"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Host two Urbit meetups in your city."
12−reward = "1 star"
13−assignee = ["~sitful-hatred"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is held
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is held
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-1.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-1.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-1.md
content/grants/2019/host-two-urbit-meetups-10.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (10)"
3−date = "2019-11-25"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing."
12−reward = "1 star"
13−assignee = ["jpt4"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com)
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is help
49−
50−0 stars
51−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is help
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-10.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-10.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-10.md
content/grants/2019/host-two-urbit-meetups-2.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (2)"
3−date = "2019-11-18"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Host two Urbit meetups in your city."
12−reward = "1 star"
13−assignee = ["~mastyr-bottec", "nforbes6"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is held
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is held
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-2.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-2.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-2.md
content/grants/2019/host-two-urbit-meetups-3.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (3)"
3−date = "2019-11-18"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Host two Urbit meetups in your city."
12−reward = "1 star"
13−assignee = ["yosoyubik"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is held
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The first meetup is held
54−
55−1 stars
56−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-3.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-3.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-3.md
content/grants/2019/host-two-urbit-meetups-4.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (4)"
3−date = "2019-11-18"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Host two Urbit meetups in your city."
12−reward = "1 star"
13−assignee = ["~forfel-norfel"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is held
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is held
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-4.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-4.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-4.md
content/grants/2019/host-two-urbit-meetups-5.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (5)"
3−date = "2019-11-18"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Host two Urbit meetups in your city."
12−reward = "1 star"
13−assignee = ["NHL"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is held
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is held
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-5.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-5.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-5.md
content/grants/2019/host-two-urbit-meetups-6.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (6)"
3−date = "2019-11-20"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Host two Urbit meetups in your city."
12−reward = "1 star"
13−assignee = ["~dilled-fastyd"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check it out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is held
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is held
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-6.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-6.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-6.md
content/grants/2019/host-two-urbit-meetups-7.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (7)"
3−date = "2019-11-20"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Host two Urbit meetups in your city."
12−reward = "1 star"
13−assignee = ["nrhtr, ~hocdep-labtel, sunmaid", "jackw"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is held
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is held
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-7.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-7.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-7.md
content/grants/2019/host-two-urbit-meetups-8.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (8)"
3−date = "2019-11-21"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing."
12−reward = "1 star"
13−assignee = ["~winter-paches", "~fonnyx-nopmer"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com)
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is held
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is held
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-8.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-8.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-8.md
content/grants/2019/host-two-urbit-meetups-9.mddeleted−62
@@ -1,62 +0,0 @@
1−+++
2−title = "Host Two Urbit Meetups (9)"
3−date = "2019-11-25"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing."
12−reward = "1 star"
13−assignee = ["juaningan"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
22−
23−#### Bounty Description
24−
25−This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
26−
27−- The meetup must be public, and there must be a public web link for joining (like meetup.com)
28−- The meetup must have a presentation or talk about Urbit.
29−- The presentation or talk must be recorded and posted publicly online.
30−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
31−- You must host at least two meetups.
32−
33−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your city’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
34−
35−#### Resources
36−
37−Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
38−
39−#### Contribution Guidelines
40−
41−- Do not begin work until your request to claim this bounty is accepted.
42−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
43−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@tlon.io.
44−- You have 100 days from the time of approval to complete this bounty.
45−
46−## Milestones
47−
48−### The first meetup is help
49−
50−0 stars
51−The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
52−
53−### The second meetup is help
54−
55−1 stars
56−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
57−<<<<<<< HEAD:content/grants/host-two-urbit-meetups-9.md
58−||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-9.md
59−
60−=======
61−
62−> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-9.md
content/grants/2019/ragnarok-online-on-urbit.mddeleted−53
@@ -1,53 +0,0 @@
1−+++
2−title = "Ragnarok Online on Urbit"
3−date = "2019-08-29"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "App Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Landscape app that supports registering an urbit ID with an RO server, exposing various account management actions and guild / channel chats"
12−reward = "3 stars"
13−assignee = ["~littel-wolfur"]
14−id = "2084005955"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−# Ragnarok Online on Urbit
21−
22−This is a Landscape / Gall app proposal for registering an urbit ID with an account in an MMORPG, with initial support for Ragnarok Online and exposing various actions like inventory management, friend lists, guild / main chat, and in-game market tools. Most importantly, account state will be persisted on your ship and can be transferred between supported servers.
23−
24−RO has a large but fragmented private server community. Both the server and game clients are heavily customizable, and there are open source tools that can manipulate the server state through the browser (create accounts, browse in-game player shops, etc).
25−
26−Since these servers are usually run by individuals, there is a very high turnover rate, with some servers not even lasting a couple months. This is very frustrating for players and is one of the main reasons people stick with the official servers, even though they are plagued with gold sellers and bots.
27−
28−But if your character state is linked to your urbit, this frustration is mitigated - you can just move to another server that will accept you. You could even register that character with another game, provided that there is some sort of mapping for acceptable character states.
29−
30−I see this as an ideal test bed for demonstrating the practical value of urbit ideals like persistence (never regret the grind again!), digital ownership (virtual items tied to your urbit id), and networked computing (automatic guild <-> group mappings, persisted friend lists). It could also be a way to get a sizeable and dedicated gaming community onto urbit. Custom quests / areas where players can learn about urbit could easily be implemented.
31−
32−Other potential outcomes:
33−
34−- In game chat channels can be mapped to urbit chats, or to urbit itself, meaning you can get in-game code evaluation. Ad-hoc addons for boss fights, guild events, and market trading maybe?
35−- An emergent reputation system - players won't want to join servers that have corrupt GMs or excessive botting, since those servers will likely be blacklisted and your character won't be transferable. Servers might also identify stars that sell planets to gold sellers and ban planets under them.
36−- Patreon-esque donation system when we get bitcoin wallet support.
37−
38−## Milestones
39−
40−### Gall app
41−
42−1 stars
43−A gall app that handles updates to all linked character states and relevant game state. The data model should be constructed with an eye towards supporting multiple games and permissioning
44−
45−### Frontend UI
46−
47−1 stars
48−Character and game state display. Should be able to view various server and character stats as well as read chat channels. Character creation and account deletion as well.
49−
50−### Working connection to RO server
51−
52−1 stars
53−A customized urbit RO server that only accepts @p logins and a documented communication pattern with the gall app.
content/grants/2019/udon-syntax-highlighter.mddeleted−43
@@ -1,43 +0,0 @@
1−+++
2−title = "Udon syntax highlighter"
3−date = "2019-07-18"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Dev Tool" ]
8−
9−[extra]
10−image = ""
11−description = "Write a syntax highlighter for the Udon markup language."
12−reward = "1 star"
13−assignee = ["~dirwex-dosrev"]
14−id = "981084186"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−#### Background
21−
22−Udon is a minimalist markup language for creating and rendering text documents, with a Markdown-inspired syntax. It’s used as the native language for publishing on Modulo, Urbit’s web interface.
23−
24−#### Bounty Description
25−
26−Write a CodeMirror language-mode file that results in correct syntax highlighting for the Udon markup language. Use Markdown syntax highlighting as inspiration, and follow it closely.
27−
28−#### Resources
29−
30−- Read the [Udon guide](https://urbit.org/docs/using/sail-and-udon/)
31−- Familiarize yourself with the Udon parser under the `+cram` arm, at lines 15,310 through 15,538 in `hoon.hoon`.
32−- Familiarize yourself with the Udon compiler in the `cram.hoon` file under `/lib`.
33−
34−#### Contribution Guidelines
35−
36−- Your submission should come in the form of a single JavaScript file. Email the submission to grants@urbit.org
37−
38−## Milestones
39−
40−### The highlighter is complete
41−
42−1 stars
43−The highlighter has been finished and tested, and the language-mode file is finished.
content/grants/2019/unit-tests-for-json-parsing.mddeleted−49
@@ -1,49 +0,0 @@
1−+++
2−title = "Unit tests for JSON parsing"
3−date = "2019-11-14"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Core Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Write unit tests for JSON-parsing arms of the zuse.hoon standard library."
12−reward = "2 stars"
13−assignee = ["courajs"]
14−id = "905205498"
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Zuse is a part of the Hoon standard library. We want to make sure the JSON-parsing functions contained in Zuse do what they are supposed to do.
22−
23−#### Bounty Description
24−
25−Write unit tests which confirm that **every** function under the `+format` ([lines 5644 to 6113](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/zuse.hoon#L5644-L6113)) arm behaves as intended. These functions include, but are not limited to, `+enjs`, `+dejs`, and `+dejs-soft`. They turn nouns into JSON, and vice-versa. `+format` is located in `/sys/zuse.hoon`.
26−
27−Also write unit tests which confirm that the functions `+en-json` ([lines 6351 to 6403](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/zuse.hoon#L6351-L6403)) and `+de-json` ([lines 6404 to 6422](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/zuse.hoon#L6404-L6422)) behave as intended. These functions turn JSON text into JSON noun and back. They are located under the `+html` arm in `/sys/zuse.hoon.`
28−
29−Save the test files in the `/tests/sys/hoon` directory in Arvo. Use the same framework as the files that already exist in `/tests`.
30−
31−#### Resources
32−
33−- Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
34−- [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
35−
36−#### Contribution Guidelines
37−
38−- You have 45 days from the time of approval to complete this bounty.
39−- Do not begin work until your request to claim this bounty is accepted.
40−- Your tests should be written as two files: one file for `+format` functions and one file for `+html` functions.
41−- Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
42−- Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
43−
44−## Milestones
45−
46−### Test files are merged
47−
48−2 stars
49−Your test files are accepted and merged on GitHub.
content/grants/2019/unit-tests-for-pure-algorithms.mddeleted−60
@@ -1,60 +0,0 @@
1−+++
2−title = "Unit tests for pure algorithms"
3−date = "2019-07-24"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Core Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Write unit tests for +in, +by, +to, and +diff."
12−reward = "1 star"
13−assignee = ["yosoyubik"]
14−id = "1322185260"
15−completed = true
16−link = ""
17−+++
18−
19−#### Bounty Description
20−
21−Write unit tests which confirm that every function under the `+in` (sets), `by` (maps), and `+to` (queues) arms behaves as intended. These functions can be found in sections [2h](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/hoon.hoon#L1142-L1368), [2i](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/hoon.hoon#L1370-L1679), and [2k](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/hoon.hoon#L1734-L1813) of the Hoon standard library, respectively. They are located in `/sys/hoon.hoon`.
22−
23−Also write unit tests for the functions under the `+differ` arm [in `/sys/zuse.hoon`](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L6117-L6271). These functions are a suite of Hunt-McIlroy `diff` and `merge` algorithms.
24−
25−Save the test files in the `/tests/sys/hoon` directory in Arvo. Use the same framework as the files that already exist in `/tests`.
26−
27−#### Resources
28−
29−- Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
30−- Read the documentation on [sets](https://urbit.org/docs/reference/library/2h/), [maps](https://urbit.org/docs/reference/library/2i/), and [queues](https://urbit.org/docs/reference/library/2k/).
31−- [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
32−
33−#### Contribution Guidelines
34−
35−- Do not begin work until your request to claim this bounty is accepted.
36−- Your tests should be written as four files, with one for each core (`+in`, `+by`, `+to`, and `+differ`).
37−- Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
38−- Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
39−- You have 30 days from the time of approval to complete this bounty.
40−
41−#### Resources
42−
43−- Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
44−- Read the documentation on [sets](https://urbit.org/docs/reference/library/2h/), [maps](https://urbit.org/docs/reference/library/2i/), and [queues](https://urbit.org/docs/reference/library/2k/).
45−- [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
46−
47−#### Contribution Guidelines
48−
49−- Do not begin work until your request to claim this bounty is accepted.
50−- Your tests should be written as four files, with one for each arm (`+in`, `+by`, `+to`, and `+differ`).
51−- Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
52−- Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
53−- You have 30 days from the time of approval to complete this bounty.
54−
55−## Milestones
56−
57−### Test files are merged
58−
59−1 stars
60−Your test files are accepted and merged on GitHub.
content/grants/2019/unit-tests-for-sha-functions.mddeleted−50
@@ -1,50 +0,0 @@
1−+++
2−title = "Unit tests for SHA functions"
3−date = "2019-07-24"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Core Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Write unit tests for SHA cryptographic functions of the Hoon standard library."
12−reward = "1 star"
13−assignee = ["Ken Meier"]
14−id = "179152973"
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Urbit relies on Hoon cryptographic functions. We want to make sure that these functions are correct.
22−
23−#### Bounty Description
24−
25−Write unit tests which confirm that the functions in section 3d of `hoon.hoon` ([lines 3245 to 3665)](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon#L3245-L3665) behave as intended.
26−
27−For each function, pull a list of standard input-output pairs from an authoritative source on the algorithm. Look at specifications requests for comment for the relevant algorithms. Other testing functionality is welcome.
28−
29−Save the test file in the `/tests/sys/hoon` directory in Arvo. Use the same framework as the files that already exist in `/tests`.
30−
31−#### Resources
32−
33−- Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
34−- Read the [documentation](https://urbit.org/docs/reference/library/3d/) for section 3d.
35−- [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
36−
37−#### Contribution Guidelines
38−
39−- Do not begin work until your request to claim this bounty is accepted.
40−- You have 45 days from approval to complete the bounty.
41−- Your tests should be written as one file.
42−- Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
43−- Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
44−
45−## Milestones
46−
47−### Your test file is merged
48−
49−1 stars
50−Your test file for all the relevant functions is accepted and merged.
content/grants/2019/unit-tests-for-zuse-cryptographic-functions.mddeleted−52
@@ -1,52 +0,0 @@
1−+++
2−title = "Unit tests for Zuse cryptographic functions"
3−date = "2019-07-24"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Dev Tool" ]
8−
9−[extra]
10−image = ""
11−description = "Write unit tests for cryptographic functions of the Zuse library."
12−reward = "1 star"
13−assignee = ["~watter-parter"]
14−id = "1097913361"
15−completed = true
16−link = ""
17−+++
18−
19−#### Background
20−
21−Urbit relies on Hoon cryptographic functions for its security. We want to take steps towards being confident that these functions are reliable.
22−
23−#### Bounty Description
24−
25−Write unit tests which assert that every function under the `+crypto` ([lines 2819 to 6113 of `zuse.hoon`](https://github.com/urbit/urbit/blob/0b0766b32b82a294b81f8f405548eb9f16d8c318/pkg/arvo/sys/zuse.hoon#L5644-L6113)) arm behaves as intended. These functions include, but are not limited to, `+enjs`, `+dejs`, and `+dejs-soft`. `+crypto` is located in `/sys/zuse.hoon`, in section 2b.
26−
27−These tests should:
28−
29−Confirm that Zuse functions match output from industry-standard implementations. For example, NaCl, secp256k1, openssl, and so on.
30−Use recommended test vectors where appropriate. For example, [RFC 231](https://tools.ietf.org/html/rfc4231) provides recommended test vectors for the HMAC SHA family.
31−
32−Save the test files in the `tests/sys/zuse/crypto` directory in Arvo. Use the same framework as the files that already exist in `/tests`.
33−
34−#### Resources
35−
36−- Read the [guide](https://github.com/urbit/urbit/blob/master/pkg/arvo/TESTING.udon) to writing unit tests in Hoon.
37−- Read the guide to [contributing](https://github.com/urbit/urbit/blob/master/CONTRIBUTING).
38−- [Here](https://github.com/urbit/urbit/blob/alef2/pkg/arvo/tests/sys/zuse/ordered-map.hoon) is an example test file for the new Ames. Your tests should be similar to it.
39−
40−#### Contribution Guidelines
41−
42−- Do not begin work until your request to claim this bounty is accepted.
43−- You have 60 days from acceptance to complete this bounty.
44−- Write the appropriate number of unit tests per function. Some arms will only need one test, but some arms may or may not require more. An insufficient number of tests for arms may result in your submission being rejected.
45−- Submit your tests as a PR to the [“urbit” repository](https://github.com/urbit/urbit). Your test file should be under `pkg/arvo/tests/sys/hoon` within the repository. Link this bounty in the PR’s description.
46−
47−## Milestones
48−
49−### Your test file is merged
50−
51−1 stars
52−Your test file for all the relevant functions is accepted and merged.
content/grants/2020/a-book-about-urbit.mddeleted−84
@@ -1,84 +0,0 @@
1−+++
2−title = "A book about Urbit"
3−date = "2020-07-22"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "A short book about Urbit, on Urbit, including Urbit-centric sections about the wider world of computing"
12−reward = "12 stars"
13−assignee = ["librex-dozryc"]
14−id = "1590647060"
15−completed = false
16−link = ""
17−+++
18−
19−I'm writing a book-length history of Urbit. I'll also write, in an Urbit-centric way, about the the wider world of computing. Chapters will be posted on Urbit, beginning October 21st, in the Notebooks section of the group ~librex-dozryc/AUC . Right now I see the piece as going something like this:
20−
21−1. Preface. A short story about the year 2050. Introduction to the concept of Urbit.
22−2. Laundry list of the things wrong with the current internet, only more dramatic than a laundry list
23−3. Laundry list of the things wrong with the current internet, only more dramatic than a laundry list, continued.
24−4. Social history of computers
25−5. Social history of computers, continued
26−6. Technical explanation of Urbit, only more dramatic than a technical explanation
27−7. Technical explanation of Urbit, only more dramatic than a technical explanation, continued
28−8. Social history of Urbit
29−9. Social history of Urbit, continued
30−10. Summing up
31−
32−I'm a novelist and essayist who has written about tech, politics, and literature. My plan, so far, for any received stars, is to spawn planets for interesting individuals and communities who might like Urbit, and to research what might go into creating a hosted star-based community.
33−
34−## Milestones
35−
36−### First Chapter
37−
38−1 stars
39−Ch1. Actually completed 10/21, not 10/29
40−
41−### Second Chapter
42−
43−1 stars
44−Ch2
45−
46−### Third Chapter
47−
48−1 stars
49−Ch3
50−
51−### Fourth Chapter
52−
53−1 stars
54−Ch4
55−
56−### Fifth Chapter
57−
58−1 stars
59−Ch5
60−
61−### Sixth Chapter
62−
63−1 stars
64−Ch6
65−
66−### Seventh Chapter
67−
68−1 stars
69−Ch7
70−
71−### Eighth Chapter
72−
73−1 stars
74−Ch8
75−
76−### Ninth Chapter
77−
78−1 stars
79−Ch9
80−
81−### Tenth Chapter
82−
83−3 stars
84−Ch10. Contract is for disbursal of 12 stars at 1 star per chapter until completion; if projected is completed in fewer than 12 chapters, then remaining stars (12 - x) are to be disbursed at completion
content/grants/2020/a-network-enabled-spatial-database-and-demonstration-app.mddeleted−94
@@ -1,94 +0,0 @@
1−+++
2−title = "A network enabled spatial database and demonstration app for Urbit"
3−date = "2020-09-02"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "App Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Allow small scale spatial data to be stored and retrieved in Urbit, for use in landscape and external applications, and shared across ships."
12−reward = "4 stars"
13−assignee = ["~lomped-firser"]
14−id = "634393623"
15−completed = true
16−link = ""
17−+++
18−
19−# A network enabled spatial database and demonstration app for Urbit
20−
21−##### Goal
22−
23−Allow small scale spatial data to be stored and retrieved in Urbit, for use in landscape and external applications, and shared across ships.
24−
25−##### Background/Motivation
26−
27−This proposal has grown out of a previous bounty which called for Open Street Map data to be ingested into Urbit. Through discussion it was decided that as OSM already provides a free, open and widely available base map and street network, a more useful system for Urbit would provide a method of storing spatial documents, which can overlay upon existing spatial data such as Open Street Map tiles, be collected together for use in landscape apps, ...and poast .... A spatial document, for the purpose of this proposal, is a single valid GeoJSON[^1] document. A spatial document could contain a single geometry, a feature (geometry with associated properties), or a collection of features (a GeoJSON 'featurecollection'). The fridge store is a collection of poastcards, both those stored locally and those shared from other ships.
28−
29−##### Overview
30−
31−- The proposed system will follow the Urbit store-hook-view pattern as described here https://docs.google.com/document/d/1hS_UuResG1S4j49_H-aSshoTOROKBnGoJAaRgOipf54/edit?ts=5d533e42
32−
33−- The system will be implemented in two milestones. The first milestone will implement simple spatial types and a spatial document store, demonstrate input and output of spatial data, and provide a minimal landscape app for creating and editing spatial documents, but limited to the local ship. The second milestone will build on the first and provide a network enabled store and web application for sharing 'poastcards'; spatial documents with text and an image, which can be shared with other ships and viewed through the web application ('Poast').
34−
35−#### Milestone 1 - A spatial store, spatial types, simple demo app
36−
37−##### Spatial Document Store and Tools
38−
39−- A storage system for the GeoJSON[^1] format and following the GeoJSON feature model.
40−- The store will accept GeoJSON, validate and store, my intention is to use 'enjs' and/or 'de-json:html' existing hoon libraries to parse JSON. It will not perform any spatial indexing[^2]
41−- Implement spatial types/structures - geometry, position, point, polygon, linestring, multipoint, multipolygon, geometrycollection upon which can be built the geojson geometry and feature model.
42−- Implement a generator which can read a GeoJSON document in to the store, and can write a constructed document out of the store.
43−- Implement a test suite based around GeoJSON specification and the above generator.
44−
45−##### Hook, View and (not Landscape) App
46−
47−- Implement the hook and view components of store-hook-view pattern atop the spatial data store.
48−- In this milestone the system will only allow data to be viewed/edited on the local ship.
49−- Integrating spatial information with Landscape apps (which can render vector features using available javascript libraries/clients such as Openlayers and Leaflet).
50−- Overall, somewhat like 'urlayers' hackathon project (github.com/gusmacaulay/urlayers), but with a sane data store and following the store-hook-view pattern.
51−
52−#### Milestone 2 - A networked spatial store, and full fledged demo app
53−
54−##### Network enabled store ('Fridge')
55−
56−- Expands on the Stage 1 architecture with an enhanced store ('Fridge') and an app ('Poast').
57−- The enhanced store (a 'Fridge'), which will house 'Poastcards'. Poastcards consist of an image,text, a geometry. A poastcard can be represented in a geojson feature, making heavy use of the the feature properties (a key value object, part of the geojson specification) to store the non-spatial information.
58−- It may be that the Urbit graph store is the appropriate way to share/link Poastcards, exploring using graph store vs a custom Fridge store will be undertaken as part of Stage 2.
59−- 'Poast' is a PoastCard viewing and sharing app, for landscape. We will implement a mvp/polished demo for this milestone.
60−- 'Poast' will be made available through the upcoming software distribution system as part of this milestone.
61−
62−##### Rich demonstration App ('Poast')
63−
64−- A hook/view/landscape app which allows for displaying and interacting with Poastcards/Fridge store;
65− - Editing/Creation of Poastcards via a web ui.
66− - Sharing of Poastcards; a Poastcard is a resource owned by a ship, once create they can be shared read-only with others.
67−- The overall concept of the Poast app can be likened to the experience of sending postcards and personal letters in the pre internet era. Unlike most present day social media, Poast will not have a feed.
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.
70−
71−
72−##### About Me
73−
74−I am a beef farmer and software engineer (geospatial web applications). I work with tools/frameworks such as Openlayers, Leaflet, Geoserver, Postgresql/PostGIS etc. and I code predominantly in Java, Javascript, SQL, Clojure, and Python. I have completed the original Hoon 101 course, half the 201 course, and the recent hackathon. My hackathon entry was a very primitive geojson editor gall/landscape app (https://github.com/gusmacaulay/urlayers).
75−
76−~lomped-firser
77−
78−## Milestones
79−
80−### Milestone 1
81−
82−2 stars
83−A spatial store, spatial types, simple demo landscape app
84−
85−### Milestone 2
86−
87−2 stars
88−A network enabled spatial store, for sharing spatial data in urbit.
89−A 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/2020/antechamber.mddeleted−106
@@ -1,106 +0,0 @@
1−+++
2−title = "Antechamber"
3−date = "2020-11-16"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Antechamber is an initiative to provide a group within Landscape that is restricted to only galaxies and delegates of galaxies."
12−reward = "4 stars"
13−assignee = ["xiphiness"]
14−id = "523261174"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−## Background
21−
22−Galaxy owners have an important place within the Urbit ecosystem: they're expected to [vote on important matters](https://urbit.org/docs/glossary/senate/) related to Urbit's future. We think that galaxies should both a) be able to assemble and communicate with one another, and b) that communication should be undertaken through Urbit itselth. Urbit galaxies, like stars, predominantly fulfill an infrastructural capacity, meaning that galaxy owners will likely interact with Urbit through their personal planet (further, due to the high value of galaxies, it is often the case that their ownership is shared by multiple individuals or a firm).
23−
24−This bounty proposes the use of a _delegate_ system, whereby a galaxy can designate another, lower-value ship (_e.g._ a planet) as their delegate in such a way that the designation can be freely given and taken away, as well as be publicly verifiable. This enables ships that represent individuals, like planets, to speak on behalf of galaxies.
25−
26−This use-case is exactly what the [Azimuth Claims contract](https://github.com/urbit/azimuth#overview) is meant to enable. Using claims, our workflow would work like this:
27−
28−- galaxy G makes a claim that planet P is their delegate
29−- planet P makes a claim that they are the delegate for galaxy G (this gives the delegation "acceptance" semantics)
30−
31−Going forward, we'll refer to this pair of claims as a **senate delegate claim**.
32−
33−Assuming such a claim can be made, the next step would be to read/watch them from within Urbit, and then use them to restrict membership in a specified group to just those ships that serve as galactic delegates.
34−
35−## Proposed Architecture
36−
37−### Part 1: Extend Bridge to Support Claims
38−
39−The claims contract is one of the few Azimuth contracts that has not yet been given any form of interface within Bridge. This part of the implementation involves providing a comprehensive interface within Bridge for managing claims.
40−
41−Bridge makes use of the [azimuth-js](https://github.com/urbit/azimuth-js) library for interacting with Azimuth contracts. Initial support for the claims contract was added in [this pull request](https://github.com/urbit/azimuth-js/pull/58/files), although key features are missing—your first task will be to extend the `azimuth-js` library with additional operations:
42−
43−- [`removeClaim`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L104): remove the specified claim.
44−- [`clearClaims`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L129): remove all claims.
45−- `getAllClaims`: Produce all claims. _NOTE: There is no contract function for this operation—it'll need to be implemented in terms of `getClaim` per [this comment](https://github.com/urbit/azimuth-js/pull/58#pullrequestreview-369698854)._
46−
47−With the above operations defined, your next task will be to extend Bridge to satisfy the following user stories:
48−
49−#### User Stories
50−
51−(All stories are from the perspective of a point owner, and can be read: "As a point owner, ...")
52−
53−- I can manage Claims by navigating to _ID -> Advanced -> Manage Claims_
54−- I can view all of my claims and their attributes ([`protocol`, `claim` and `dossier`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L42))
55−- I can remove an existing claim
56−- I can see how many claims I have made of the [maximum number allowed (16)](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L14)
57−- I can understand what claims are for by reading help text in the claims management interface
58−- I can add a new claim
59−- I can add a senate delegate claim using a purpose-built UI
60− - As a galaxy, I can set my delegate as a planet
61− - As a planet, I can indicate that I am the delegate of a galaxy
62−
63−### Part 2: Create the `senate-group-hook`
64−
65−This gall agent will make use of the [`eth-watcher` agent](https://github.com/urbit/urbit/blob/master/pkg/arvo/app/eth-watcher.hoon) to watch for [`ClaimAdded`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L27) and [`ClaimRemoved`](https://github.com/urbit/azimuth/blob/27ab0845779f7beba2376a82b0320c3efb39e03e/contracts/Claims.sol#L34) events, filter just the claim events that reference delegate claims, and translate those events into invites to or kicks from a specified group.
66−
67−#### User Stories
68−
69−All stories that refer to a "group admin" below refer to a group admin that is running the `senate-group-hook`.
70−
71−- As a ship, I can point a locally-running `senate-group-hook` to a group I am the admin/owner of, and it will invite all galactic delegates, becoming a group admin with a senate-hooked group (wordy, I know)
72−- As a group admin, new delegates will be added when senate delegate claims are added
73−- As a group admin, new delegates will be removed when senate delegate claims are removed
74−- As a group admin, all galaxies can also be invited to the group
75−
76−#### Implementation Notes
77−
78−- `eth-watcher` accepts a [`config`](https://github.com/urbit/urbit/blob/6621661460c3073195ac2500df46df67af722cb2/pkg/arvo/sur/eth-watcher.hoon#L5-L21) that tells it which events to watch, among other configuration parameters. An example of its usage can be found [here](https://github.com/urbit/urbit/blob/6621661460c3073195ac2500df46df67af722cb2/pkg/arvo/app/azimuth-tracker.hoon#L86-L97).
79−- Azimuth's events can be found [here](https://github.com/urbit/urbit/blob/6621661460c3073195ac2500df46df67af722cb2/pkg/arvo/sys/zuse.hoon#L7943-L8016) in `zuse.hoon`. It's suggested that you represent the Claims contract and events in a similar fashion in a `/lib` file.
80−- There should be a way to monitor only claim events that originate from galaxies
81−
82−## Deliverables
83−
84−Your solution to this bounty should include pull requests against these repositories:
85−
86−- [azimuth-js](https://github.com/urbit/azimuth-js)
87−- [bridge](https://github.com/urbit/bridge/)
88−- [antechamber](https://github.com/urbit/antechamber): The `senate-delegate-hook`-related files should go here.
89−
90−## Expectations
91−
92−You will work closely with the director of urbit.org on this project. This means that regular check-in calls will be held to discuss the project's progress. Additionally, the you are expected to provide regular status updates on the project to the Urbit community via twice-monthly updates on this bounty.
93−
94−The director will ensure that you have access to the necessary resources to complete this project. All prior work done on this project will be explained and made available to you, and should questions arise that require the expertise of engineers at Tlon, time will be made (schedules permitting) for your questions to be answered either in writing or over a call.
95−
96−## Milestones
97−
98−### Part 1: Extend Bridge to Support Claims
99−
100−2 stars
101−Pull requests to azimuth-js and bridge, as specified above, have been merged.
102−
103−### Part 2: Create the senate-group-hook
104−
105−2 stars
106−Pull requests against the antechamber repo mentioned above have been merged.
content/grants/2020/art-by-urbit.mddeleted−31
@@ -1,31 +0,0 @@
1−+++
2−title = "Art by Urbit"
3−date = "2020-08-26"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Art by Urbit will provide a monthly digest of art produced by & for Urbit, on a publicly available website & social media presence."
12−reward = "1 star"
13−assignee = ["nartes-fasrum"]
14−id = "636838408"
15−completed = true
16−canceled = false
17−link = ""
18−+++
19−
20−With the deployment of Art by Urbit, a central platform & location for the dissemination of Urbit art & propaganda will be available for users of the traditional internet. Regular digests of Urbit art will be collected from willing Urbit users & published on the Art by Urbit website & social media to provide visual inspiration for anyone interested, from those who are taking their first steps on the Martian frontier to those who've been sailing their ship for years.
21−
22−For those already homesteading Urbit, part of the regular digest will be a pair of featured artworks to use with the new Landscape background image feature - one for light-themed browsers, and one for dark-themed. For the curious or the new, art promoting a public group, chat, or notebook will be included to help connect them with Urbit's best communities. A potential longer-term goal would be the production of a physical calendar, with a different Urbit themed art piece for each month and various interesting facts, informational tidbits, or helpful tips scattered throughout. Once Urbit ships can host their own content on the open internet, I aim to host the Art by Urbit site from its own ship.
23−
24−I'm qualified to carry out this proposal as I have built a portfolio of prior Urbit-related art (available [here](https://twitter.com/nartesfasrum) ) and have prior experience building & deploying websites & social media promotional campaigns.
25−
26−## Milestones
27−
28−### Six months of regular digests
29−
30−1 stars
31−As described - six months of regular monthly Art by Urbit digests, posted to the Art by Urbit website & promoted on social media.
content/grants/2020/bart-train-tracker-landscape-tile.mddeleted−50
@@ -1,50 +0,0 @@
1−+++
2−title = "BART Train Tracker Landscape Tile"
3−date = "2020-03-04"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "A backend for a BART client on Urbit."
12−reward = "3 stars"
13−assignee = ["~ronreg-ribdev"]
14−id = "1026701722"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−### Bounty Description
21−
22−Create a backend for importing BART (Bay Area Rapid Transit) arrival and departure data and service alerts via the BART public API to Urbit, and design a Landscape tile which will serve as a route planner app inside Urbit.
23−
24−We would like to create a BART information Landscape tile. The backend should access real-time departure and arrival information for the complete list of stations via the BART API, as well as the data feeds for schedule tables, elevator outages, system advisories, and train counts. The tile interface should encompass:
25−
26−- A real-time trip planner using the BART data, similar to the one on the official BART website.
27−- Links for schedule tables for weekday, weekend, holiday service.
28−- The open-source BART map linked below.
29−- A place (possibly a scrolling feed?) for BART service alerts.
30−- A place for BART elevator closure status (this is a separate data channel).
31−
32−Resources:
33−
34−- [BART API Documentation](http://api.bart.gov/docs/overview/index.aspx)
35−- [BART API Developer License Agreement](https://www.bart.gov/schedules/developers/developer-license-agreement)
36−
37−### Contribution Guidelines:
38−
39−- Do not begin work until your request to claim this bounty is accepted.
40−- Submit your work as a pull request to the [urbit/urbit repo](https://github.com/urbit/urbit/pulls)
41−- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
42−- You have 90 days from the time of approval to complete this bounty.
43−- Successful completion of this bounty may result in an invitation to complete other API integration bounties.
44−
45−## Milestones
46−
47−### Your PR is merged
48−
49−3 stars
50−Your code is accepted and merged.
content/grants/2020/bitcoin-full-node-provider-and-wallet.mddeleted−102
@@ -1,102 +0,0 @@
1−+++
2−title = "Bitcoin Full Node Provider and Wallet"
3−date = "2020-09-22"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "This bounty covers the creation of infrastructure (gall agents) required to enable a Bitcoin-based payments system from within Landscape."
12−reward = "6 stars"
13−assignee = ["~timluc-miptev"]
14−id = "2056919898"
15−completed = true
16−link = "~pindet-timmut/urbitcoiners"
17−deliverable = "~mister-dister-dozzod-dozzod/bitcoin"
18−+++
19−
20−## Introduction
21−
22−Creation of a wallet that supports various currencies is the basis for building an economy in Urbit. Bitcoin is a natural starting point due to both 1) the philosophical alignment with the project, 2) the prior art already done towards this end, and 3) its ubiquity.
23−
24−This bounty covers the creation of a wallet that supports the use of Bitcoin and the infrastructure required to connect ships to the Bitcoin network. You will have the support of the Urbit Foundation in the development of this project, and will work closely with its director to refine requirements and test the resulting system.
25−
26−## Background
27−
28−Starting last year, several bounties were released to implement the Bitcoin JSON RPC API. Later another bounty was released to build a Bitcoin wallet. The RPC API work is now (nearly) complete, but the wallet work is not. The first iteration of the wallet ultimately failed due to lack of clear scope, but provided many valuable ideas that can still be leveraged.
29−
30−The Bitcoin RPC API was a huge lift and provides the foundation needed to complete this bounty. There are still ongoing performance issues with a handful of RPC calls, but they're close to completion—most of the RPC API works fine and shouldn't block this project from getting started.
31−
32−### Resources
33−
34−- [Bitcoin RPC API Pull Request](https://github.com/urbit/urbit/pull/1892)
35−- [Bitcoin RPC API Documentation](https://developer.bitcoin.org/reference/rpc/index.html)
36−- [Original Bitcoin Wallet work](https://github.com/urbit/urbit/tree/mp/bitcoin)
37−
38−## Overview
39−
40−The ultimate goal is to have a wallet application within Landscape that ships can use to send payments to one another using a variety of digital currencies, starting with Bitcoin.
41−
42−In order to make our wallet useful, a bridge from Urbit to the Bitcoin network will need to be built that uses the RPC API to communicate with a full node. In an ideal world each ship would run their own full node—practically, this is unrealistic due to the high technical and resource requirements of running a full node. For this reason, the solution to this bounty should provide a mechanism for ships that do not run a full node to connect to the Bitcoin network via other ships that choose to provide access to their node. Care must be taken to minimize the required amount of trust in this instance.
43−
44−The wallet should be able to represent an "account," which correspond to public/private keypairs (representation of multiple Bitcoin accounts would be nice as well). A Bitcoin account can come from a variety of places: a mnemonic seed, hardware wallet, or from an Urbit master ticket, which is possible due to [Urbit's Hierarchical Deterministic wallet](https://github.com/urbit/fora-posts/blob/master/proposals/posts/~2018.11.8..19.31.59..ba77~.md) structure, which is based on BIP32. Regardless of the source of a keypair, Urbit will store only the public half (the extended public key to be specific—more detail is provided below). Transaction signing, which requires a private key, will be handled outside of Urbit to maintain security best practices.
45−
46−From the wallet application, ships should be able to do payments and check the balance and transaction history for each account. The implementation should respect security best-practices by keeping private keys safe and identity secret to the highest extent as is reasonably possible.
47−
48−### Project Requirements
49−
50−- Ships can send payment in Bitcoin to other ships.
51−- Ships can send payment in Bitcoin to addresses.
52−- Ships can connect to full nodes that they run on their own.
53−- Ships can connect to full nodes operated by other ships.
54−- Private keys are never entrusted to any other entity.
55−- Ships can view the transaction history for any Bitcoin account they own.
56−- Ships can view the balance of any Bitcoin account they own.
57−
58−### User Stories
59−
60−The bridge to the Bitcoin network should satisfy the following stories.
61−
62−- As a ship, I can connect to a full node that I control, becoming a host.
63−- As a ship, I can connect to a full node via another ship, becoming a client.
64−- As a host, I can control which other ships can access my full node.
65−- As a host or client, I can check the balance of my Bitcoin addresses.
66−- As a host or client, I can broadcast a signed transaction to the Bitcoin network.
67−- As a host or client, I can obtain a list of transactions for my Bitcoin account(s).
68−
69−The wallet should satisfy these stories:
70−
71−- As a ship, I can see my overall balance for an account.
72−- As a ship, I can see all transactions for a specific account.
73−- As a ship, I can construct an unsigned transaction.
74−- As a ship, I can send Bitcoin to other ships, becoming a payer.
75−- As a payer, I can tell when my payment has succeeded.
76−- As a ship, I can receive bitcoin from other ships, becoming a payee.
77−- As a payee, I can provide a unique address for each transaction.
78−- As a payee, I can tell when I have received payment.
79−
80−### Proposed Architecture
81−
82−A design for a system that satisfies the above requirements has been outlined [here](https://gist.github.com/jalehman/e0c91071427ca4c349c0673f376945cb). It's not a requirement to use this architecture, but it's probably a good starting place, as it's been vetted by a few people within the community. Ideally the architecture will be further refined collaboratively with you, the claimant.
83−
84−### Expectations
85−
86−You will work closely with the director of urbit.org on this project. This means that, at a minimum, weekly check-in calls will be held to discuss the project's progress. Additionally, the worker is expected to provide regular status updates on the project to the Urbit community via twice-monthly updates on this bounty.
87−
88−The director will ensure that you have access to the necessary resources to complete this project. All prior work done on this project will be explained and made available to you, and should questions arise that require the expertise of engineers at Tlon, time will be made (schedules permitting) for your questions to be answered either in writing or over a call.
89−
90−The worker should have a background that either demonstrates experience building Gall agents, or developing on Bitcoin (or similar crypto systems)--both would be even better.
91−
92−## Milestones
93−
94−### Implement the full node bridge/provider
95−
96−3 stars
97−Create a set of gall agents to interface with a Bitcoin full node, access to which can be provided to other ships.
98−
99−### Implement the wallet
100−
101−3 stars
102−Create a set of gall agents to handle extended public keys, address derivation, and facilitate payments between ships.
content/grants/2020/bitcoin-key-derivation.mddeleted−66
@@ -1,66 +0,0 @@
1−+++
2−title = "Bitcoin Key Derivation"
3−date = "2020-10-01"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev" ]
8−
9−[extra]
10−image = ""
11−description = "The Urbit HD Wallet allows for many different keys to be generated from a single master ticket. Your task is to use this mechanism to generate Bitcoin keys and expose ways of interacting with them."
12−reward = "2 stars"
13−assignee = ["pkova"]
14−id = "794126751"
15−completed = true
16−link = "~pindet-timmut/urbitcoiners"
17−deliverable = "~mister-dister-dozzod-dozzod/bitcoin"
18−+++
19−
20−## Overview
21−
22−Our goal is to build a Bitcoin payment experience that allows any ship to use their Urbit ID additionally as an address that can send and receive Bitcoin. Ideally a new ship needs nothing more than Landscape for interacting with the Bitcoin network (see [the Bitcoin Full Node Provider and Wallet bounty](https://grants.urbit.org/bounties/2056919898-bitcoin-full-node-provider-and-wallet)) and their Urbit ID for receiving Bitcoin and signing transactions (this bounty). This provides an easy onramp to working with Bitcoin without compromising on security or privacy.
23−
24−Interacting with Bitcoin private keys, like your Urbit master ticket, requires a secure environment. As long as Urbit remains unaudited, it’s best to not use a master ticket to directly access your Urbit—this is why we built Bridge. [Bridge](https://bridge.urbit.org) is designed to be a secure environment, making it an ideal candidate for handling our sensitive Bitcoin keys.
25−
26−## User Stories
27−
28−This bounty should provide extensions to Bridge that satisfy the following user stories:
29−
30−- As an user, I can obtain my Bitcoin extended public key (xpub).
31−- As an user, I can copy my xpub to the clipboard.
32−- As an user, I can sign a constructed transaction.
33−- As an user, I can copy a signed transaction to the clipboard.
34−
35−For the purposes of this bounty, obtaining an extended public key would consist of copying it to the clipboard for input into Landscape, where the Bitcoin wallet will need it for performing address derivation. Signing a transaction will go in the other direction; a “constructed” transaction (consisting of everything but the signature) will be generated from within Landscape, input into Bridge for signing, and then the signed transaction will be input back to Landscape for broadcasting over the Bitcoin network.
36−
37−While this flow isn’t the most user-friendly, the functionality will ultimately be possible to port into Landscape a) once it runs in a more secure environment (e.g. Electron), and b) once Urbit is receives a thorough security audit.
38−
39−## Deliverables
40−
41−Your solution to this bounty should include pull requests against these repositories:
42−
43−- [urbit-key-generation](https://github.com/urbit/urbit-key-generation): This library is responsible for deriving keys from a master ticket—this is where Bitcoin key generation should occur.
44−- [bridge](https://github.com/urbit/bridge/): Bridge should be extended to include a new top-level “Bitcoin” section, which should provide access to the xpub key and a place for signing transactions.
45−
46−Design mockups will be provided to the worker upon claiming this bounty.
47−
48−## Expectations
49−
50−You will work closely with the director of urbit.org on this project. This means that, at a minimum, weekly check-in calls will be held to discuss the project's progress. Additionally, the worker is expected to provide regular status updates on the project to the Urbit community via twice-monthly updates on this bounty.
51−
52−The director will ensure that you have access to the necessary resources to complete this project. All prior work done on this project will be explained and made available to you, and should questions arise that require the expertise of engineers at Tlon, time will be made (schedules permitting) for your questions to be answered either in writing or over a call.
53−
54−The worker should have a background that demonstrates proficiency with building client-side Javascript applications. Experience working with Bitcoin development is preferred, but not required.
55−
56−### Resources
57−
58−- [Urbit HD Wallet design](https://github.com/urbit/fora-posts/blob/master/proposals/posts/~2018.11.8..19.31.59..ba77~)
59−- [BIP-32 re: extended public keys](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#Extended_keys)
60−
61−## Milestones
62−
63−### Work is Complete
64−
65−2 stars
66−Pull requests to each repository have been submitted, reviewed and merged.
content/grants/2020/boston-t-train-tracker-landscape-tile.mddeleted−53
@@ -1,53 +0,0 @@
1−+++
2−title = "Boston T Train Tracker Landscape Tile"
3−date = "2020-03-23"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Create a landscape tile that tracks the Boston T train."
12−reward = "3 stars"
13−assignee = ["nforbes6"]
14−id = "2039941382"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−### Bounty Description
21−
22−Create a backend for importing MBTA (Massachusetts Bay Transportation Authority) T Train arrival and departure data and service alerts via the MBTA public API to Urbit, and design a Landscape tile which will serve as a route planner app inside Urbit.
23−
24−We would like to create a T Train information Landscape tile. The backend should access real-time departure and arrival information for the complete list of stations via the MBTA API, as well as the data feeds for schedule tables, elevator outages, and customer alerts. The tile interface should encompass:
25−
26−- A real-time trip planner using the MBTA data, similar to the one on the official MBTA website.
27−- Links for schedule tables for weekday, weekend, and holiday service.
28−- A link to the official MBTA L Train map linked below, or an open-source workaround.
29−- A place (possibly a scrolling feed?) for MBTA alerts, using the ‘Alerts’ API stream.
30−- A place for MBTA station facilities closure status information.
31−
32−### Resources:
33−
34−- [MBTA V3 API Feeds](https://www.mbta.com/developers/v3-api)
35−- [MBTA Developer Resources](https://www.mbta.com/developers/resources)
36−- [MDOT API Developer License Agreement](https://www.mass.gov/files/documents/2017/10/27/develop_license_agree_0.pdf)
37−
38−## Contribution Guidelines:
39−
40−- Do not begin work until your request to claim this bounty is accepted.
41−- Do not use copyrighted images, including the MBTA logo or the official route map. Instead, always refer to MBTA in plaintext. You should include an external link to the T Train route map; do not host this map locally (we are open to an open-source, good quality route map which does not include the MBTA logo or other trademarks, however).
42−- Please read the Developer License Agreement carefully and obey their guidelines for application naming and presentation of API data.
43−- Submit your work as a pull request to the [urbit/urbit](https://github.com/urbit/urbit/pulls) repo
44−- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
45−- You have 90 days from the time of approval to complete this bounty.
46−- Successful completion of this bounty may result in an invitation to complete other API integration bounties.
47−
48−## Milestones
49−
50−### Your PR is merged
51−
52−3 stars
53−Your code is accepted and merged.
content/grants/2020/calendar-ui.mddeleted−55
@@ -1,55 +0,0 @@
1−+++
2−title = "Calendar UI"
3−date = "2020-07-15"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Build a Landscape-native calendar UI"
12−reward = "2 stars"
13−assignee = ["finled-bansel"]
14−id = "1555464949"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−# Purpose
21−
22−A calendar is an indispensible personal tool to many people. A [previous proposal](https://grants.urbit.org/proposals/1851255517) has started work on an Urbit-native calendar. This previous proposal seeks to create a parser and a Gall agent to manage the data layer of a calendar app.
23−
24−The current proposal aims to create a Landscape tile and app to improve the accessibility of a Calendar Gall app. The Calendar UI will provide several screens to interact with the calendar. These are a monthly view, a daily view and a page to create new events.
25−
26−# Implementation and deliverables
27−
28−The UI will be backed by the calendar app implementation described in the aforementioned previous proposal. In order to allow the parallel implementation of a UI and the Gall app, this proposal will be executed in two stages.
29−
30−The first stage is the development of working prototypes of the screens that the calendar will initially support. These include:
31−
32−- a monthly view with clickable dates to daily views;
33−- a daily view that lists the events in chronological order with a short description
34−- a form to create new events with fields for the required properties per RFC 5545.
35−
36−The deliverables will be functional web pages that can be integrated with Landscape. The screens will be built entirely with components from the [Indigo-react](https://github.com/urbit/indigo-react) library.
37−The UI will be built with the assumption that event participants are ships.
38−
39−The second stage is to integrate the screens with the Gall agent implemented as part of the first proposal. This takes a dependency on a correctly functioning calendar Gall app. The requisite
40−
41−# Basis for future integration
42−
43−These pages can provide the basis for UX experiments and integrations with other parts of Landscape. One possibility is to integrate notebook posts with the timeline of a calendar, allowing a temporal exploration of the notebook posts a ship has seen.
44−
45−## Milestones
46−
47−### Functional pages
48−
49−1 stars
50−Build the necessary pages that will allow Landscape to interact with a Calendar Gall app
51−
52−### Working integration with Gall app
53−
54−1 stars
55−Fully capable of importing an .ics calendar, creating new events, looking through existing events in the calendar of a ship.
content/grants/2020/calendar.mddeleted−115
@@ -1,115 +0,0 @@
1−+++
2−title = "Calendar"
3−date = "2020-05-18"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "An Arvo calendar agent based on the iCalendar spec."
12−reward = "5 stars"
13−assignee = ["~wolref-podlex", "sovmep-ripsum"]
14−id = "1851255517"
15−completed = true
16−link = ""
17−+++
18−
19−## Purpose
20−
21−Urbit provides a growing set of tools for communication with groups of people, but is sorely missing a native calendar. For those of us looking to get away from big G for managing our schedules (i.e. everyone reading this) a calendar is an indispensable tool to have in Urbit.
22−
23−Calendars are a sizable undertaking both in terms of data management (modeling & persistence) and user interface, so the authors have decided to limit the scope of this proposal to the data layer, leaving a polished user interface for a future proposal.
24−
25−## Deliverables
26−
27−The goal of this proposal is to create a gall agent that can be used to store a calendar of events on a ship, and to expose calendars as an additional pubsub channel in the same vein as chats, links and notebooks. Additionally, we'll provide accompanying generators for creator, importing events from `.ics` files and direct creation of events.
28−
29−## Team
30−
31−Josh Lehman (~wolref-podlex), has been following Urbit since ~2014 when it first began appearing on Hacker News. In the interim he's been working on Starcity, where he leads the software arm of the business. While new(ish) to Hoon, Josh is no stranger to functional programming, having worked in Clojure for the better part of the last six years.
32−
33−Raghu Nimmagadda (~sovmep-ripsum), is a software engineer with a fair amount of FP experience (Racket, Ocaml, some Haskell). While he's fairly new to Urbit, he's interested in learning and building his hoon skills (recently graduated hoon school 101 and is working on a gall app in his free time).
34−
35−## iCalendar
36−
37−### Rationale
38−
39−The goal is to allow import from iCalendar, but not export to it. There's no reason this couldn't be done, but we're trying to drive towards "calendaring within Urbit" moreso than "calendaring between Urbit and Earth tech." We believe this is more in line with an apparent guiding philosophy behind other applications built so far.
40−
41−So, why base anything on iCalendar at all? Two reasons:
42−
43−1. It's prior art on how a calendaring system should work, which by all appearances works pretty well. As neither of us have experience with building a calendar (and wouldn't exactly call ourselves "calendar researchers"), this seems like a good starting point that should provide ample guidance on the domain-specific components.
44−2. A way to import an existing calendar into Urbit would be a cool feature anyways, since many of us (...or at least some people we know) have personal calendars that should really be on a personal server.
45−
46−We expect to create and maintain a useful degree of iCalendar compatibility, and to also make Urbit-specific deviations on an as-needed basis.
47−
48−### Parser Overview
49−
50−The parser will parse `.ics` files containg VEVENTs into hoon data structures. This will not support top level calendar properties, i.e. properties that apply to the entire calendar, but will support the following required component properties for `VEVENT` as per RFC 5545.
51−
52−```
53−UID
54−DTSTAMP
55−DTSTART
56−DTEND
57−DURATION
58−```
59−
60−The following optional component properties will also be supported.
61−
62−```
63−CATEGORIES
64−CLASS
65−COMMENT
66−DESCRIPTION
67−SUMMARY
68−ORGANIZER
69−GEO
70−LOCATION
71−STATUS
72−RRULE
73−RDATE
74−EXDATE
75−```
76−
77−The goal of this step is to have something that can parse a `.ics` like this (example taken from RFC 5545). A full list of component properties can be found [here](https://tools.ietf.org/html/rfc5545#section-3.1).
78−
79−```
80−BEGIN:VCALENDAR
81−VERSION:2.0
82−PRODID:-//hacksw/handcal//NONSGML v1.0//EN
83−BEGIN:VEVENT
84−UID:19970610T172345Z-AF23B2@example.com
85−DTSTAMP:19970610T172345Z
86−DTSTART:19970714T170000Z
87−DTEND:19970715T040000Z
88−SUMMARY:Bastille Day Party
89−END:VEVENT
90−END:VCALENDAR
91−```
92−
93−If time permits, we'd also want to support parsing VALARM components, which correspond to alarms/reminders about events. These components can be nested within VEVENTs, and have three flavors - audio, display, and email (each representing the kind of reminder the component can give you). We aim to support parsing display alarms (displaying some text) initially, as audio is only useful once a UI is built and we don't have email on mars. While handling the alarms is outside the scope of this proposal, by parsing them we hope to make it easy for future proposals to build on them.
94−
95−## Milestones
96−
97−### VEVENT Parser
98−
99−1 stars
100−A generator that can parse `.ics` files from the dojo containing VEVENTs into hoon data structures. This milestone will NOT support top-level calendar properties.
101−
102−### Calendar Gall Agent
103−
104−1 stars
105−Creation of a gall agent that can be used to persist and read events from `.ics` files into a "calendar" on the running ship.
106−
107−### Gall Agent Enrichment
108−
109−1 stars
110−Extend the gall agent to support queries (e.g. within a range), updates and deletes of events, and a generator to create events without use of `.ics` files.
111−
112−### Pubsub/Channel Support
113−
114−2 stars
115−Extend the gall agent to allow pubsub with other ships and integration with Groups to ultimately allow calendars to exist as an additional channel.
content/grants/2020/content-saver.mddeleted−44
@@ -1,44 +0,0 @@
1−+++
2−title = "Content Saver"
3−date = "2020-03-19"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Extract and save content from HTML."
12−reward = "2 stars"
13−assignee = ["lurodrigo (~tirdyr-lagrum)"]
14−id = "1163181298"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−Build an endpoint that enables the extraction of a web-pages content from HTML. The backend functionality of the [Instapaper](https://www.instapaper.com/) app should be the model here, as should the [Reader from Firefox](https://github.com/mozilla/readability).
21−
22−This app should be able to: Copy both a given highlighted block of text, or a discrete page in Urbit’s blog/Publish application, give the user the option of renaming it, and save it in Markdown to the user’s Urbit planet or ship.
23−
24−If you have a web scraper that can go out and fetch web pages for you, like the one indicated in [this bounty](https://grants.urbit.org/bounties/1967189374-web-scraper), you can just poke the Publish app to save it and be able to read it in Publish. (Note: this bounty is not to build a web scraper, but simply the content-extraction component)
25−The file should strip the content out of HTML and save it into the Markdown format.
26−
27−### Resources:
28−
29−- [The Instapaper API](https://www.instapaper.com/api)
30−- [Firefox Readability](https://github.com/mozilla/readability); this implementation can be copied to the extent that you desire.
31−
32−### Contribution Guidelines:
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.
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.
37−- You have 90 days from the time of approval to complete this bounty.
38−
39−## Milestones
40−
41−### PR is merged
42−
43−2 stars
44−Your code is accepted and merged.
content/grants/2020/cta-train-tracker-landscape-tile.mddeleted−52
@@ -1,52 +0,0 @@
1−+++
2−title = "CTA Train Tracker Landscape Tile"
3−date = "2020-03-17"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Build an app to track the schedule of the Chicago Transit Authority."
12−reward = "3 stars"
13−assignee = ["tomnash"]
14−id = "1262889675"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−### Bounty Description
21−
22−Create a backend for importing CTA (Chicago Transit Authority) L Train arrival and departure data and service alerts via the CTA public API to Urbit, and design a Landscape tile which will serve as a route planner app inside Urbit.
23−
24−We would like to create a L Train information Landscape tile. The backend should access real-time departure and arrival information for the complete list of stations via the CTA API, as well as the data feeds for schedule tables, elevator outages, and customer alerts.
25−
26−The tile interface should encompass:
27−
28−- A real-time trip planner using the CTA data, similar to the one on the official CTA website.
29−- Links for schedule tables for weekday, weekend, and holiday service.
30−- A link to the official CTA L Train map linked below, or an open-source workaround.
31−- A place (possibly a scrolling feed?) for CTA alerts, using the ‘Customer Alerts’ API.
32−- A place for CTA station elevator closure status information.
33−
34−### Resources
35−
36−- [CTA Developer Center](https://www.transitchicago.com/developers/)
37−- [CTA Branding Guide for Open API Apps](https://www.transitchicago.com/developers/branding/)
38−- [CTA Developer License Agreement](https://www.transitchicago.com/developers/terms/C)
39−
40−### Contribution Guidelines
41−
42−- Do not begin work until your request to claim this bounty is accepted.
43−- Please note that this bounty is for the CTA Train API and not for the CTA Bus API.
44−- Do not use copyrighted images, including the CTA logo or the official route map. Instead, always refer to CTA in plaintext, and use the provided train image which is detailed in the above Developer License Agreement link. You should include an external link to the CTA L Train route map; do not host this map locally (we are open to an open-source, good quality route map which does not include the CTA logo or other trademarks, however).
45−- Please read the Developer License Agreement and Branding Guide carefully and obey their guidelines for application naming and presentation of API data.
46−
47−## Milestones
48−
49−### Your PR is merged
50−
51−3 stars
52−Your code is accepted and merged.
content/grants/2020/display-eth-data.mddeleted−55
@@ -1,55 +0,0 @@
1−+++
2−title = "Display ETH Data"
3−date = "2020-01-30"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "The Urbit identity system uses a suite of Ethereum contracts as its PKI. As such, a lot of Ethereum-related functionality is available within the system."
12−reward = "1 star"
13−assignee = ["dominic22"]
14−id = "831044524"
15−completed = true
16−link = ""
17−+++
18−
19−### Bounty Description
20−
21−Create a gall application, and a user interface for that application, that are used to view events on any given Ethereum contract. Both components must meet the specifications enumerated below.
22−
23−##### Gall application
24−
25−- Depends upon /app/eth-watcher
26−- Based on contract address and ABI (json), subscribes to all contract events.
27−- Based on contract address, ABI, and event names/parameters, subscribe to specific events.
28−- Set up with just contract address, retrieving ABI from etherscan.io API.
29−- Stores lists of events and relevant details per contract and config, and make them available to the user interface.
30−
31−##### User interface
32−
33−- Allows adding/removing watched contracts per the above app interface.
34−- Displays events, per contract+config or for all watched, in readable format (ie, "Transfer: from: 0xabc, to: 0xdef, value: 123", with block number or timestamp, link to transaction on Etherscan.")
35−- Allows visual filtering of listed events.
36−
37−### Resources
38−
39−- The [eth-watcher](https://github.com/urbit/urbit/blob/master/pkg/arvo/app/eth-watcher.hoon) code.
40−- [Ethereum ABI value decoding stdlib](https://github.com/urbit/urbit/blob/4915ceb96bdd56f5b1f25504d1c68f8d41161540/pkg/arvo/sys/zuse.hoon#L8317)
41−- [Ethereum Contract APIs](https://etherscan.io/apis#contracts)
42−
43−### Contribution Guidelines
44−
45−- Do not begin work until your request to claim this bounty is accepted.
46−- Email your work to grants@urbit.org.
47−- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
48−- You have 90 days from the time of approval to complete this bounty.
49−
50−## Milestones
51−
52−### Work is finished
53−
54−1 stars
55−Your work has been finished and accepted.
content/grants/2020/docker-image-for-cloud-container-orchestration.mddeleted−49
@@ -1,49 +0,0 @@
1−+++
2−title = "Docker image for cloud container orchestration"
3−date = "2020-12-20"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "Dev Tool" ]
8−
9−[extra]
10−image = ""
11−description = "Nix infrastructure to generate Docker images for Urbit releases. Images would be suitable for cloud orchestration in e.g. Amazon ECS"
12−reward = "1 star"
13−assignee = ["Edward Amsden ~ritpub-sipsyl"]
14−id = "626138244"
15−completed = true
16−link = ""
17−+++
18−
19−Many cloud providers offer container orchestration services that abstract away from managing servers or compute instances (e.g. Amazon ECS, Azure Container Instances). A docker image tagged for the latest version of Urbit would drastically simplify the process of deploying urbits to the cloud, which is preferable for planets, stars, and galaxies.
20−
21−# Deliverables
22−
23−- A merged pull request to the urbit/urbit repository, with nix code to generate a docker image
24− - With a volume-mountable path for a ship
25− - With a volume-mountable path for a keyfile
26−- CI integration to release the docker image as a GitHub artifact when version releases of Urbit are cut
27−- CI integration to publish the image on Docker Hub when version releases of Urbit are cut
28−- Documentation:
29− - Reference for volume mounts and controlling the behavior of Urbit in a container
30− - Volume mount points for keyfiles or existing ships
31− - Ports to publish for Landscape and external API access.
32− - Quickstarts for deploying an Urbit ship to
33− - Amazon ECS
34− - Azure Container Instances
35−
36−# Team
37−
38−Edward Amsden ~ritpub-sipsyl is a veteran developer with several years experience using Nix to manage production builds and deployments. He is the principal of Black River Software LLC
39−
40−## Milestones
41−
42−### Merged PR: Nix docker integration
43−
44−1 stars
45−
46−- Nix code to generate an Urbit docker image
47−- CI integration to release docker images on GitHub
48−- CI integration to publish docker images on Docker Hub
49−- Documentation
content/grants/2020/ethereum-abi-parser.mddeleted−56
@@ -1,56 +0,0 @@
1−+++
2−title = "Ethereum ABI Parser"
3−date = "2020-03-09"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Create a Gall app that takes the bytecode for a contract ABI."
12−reward = "2 stars"
13−assignee = ["xiphiness"]
14−id = "1241532070"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−### Background
21−
22−The Contract Application Binary Interface (ABI) is the standard way to interact with contracts in the Ethereum ecosystem, both from outside the blockchain and for contract-to-contract interaction. Data is encoded according to its type, as described in this specification. The encoding is not self-describing and thus requires a schema in order to decode.
23−
24−###Bounty Description
25−
26−Create a Gall app that can output the byte code for a contract ABI.
27−
28−#### Gall application:
29−
30−- Parse ABI into valid byte code
31−
32−##### User interface:
33−
34−- Allow for a user to upload arbitrary ABI
35−- Create a form field based on the ABI
36−- Parse user input into appropriate data types
37−- Return bytecode
38−
39−### Resources:
40−
41−- [ABI Spec](https://solidity.readthedocs.io/en/v0.5.3/abi-spec.html)
42−
43−### Contribution Guidelines:
44−
45−- Do not begin work until your request to claim this bounty is accepted.
46−- Email your work to grants@urbit.org.
47−- Submit your work as a pull request on to the [urbit/urbit github repository](https://github.com/urbit/urbit).
48−- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
49−- You have 90 days from the time of approval to complete this bounty.
50−
51−## Milestones
52−
53−### PR is merged
54−
55−2 stars
56−Your code is accepted and merged.
content/grants/2020/go-airlock-library.mddeleted−44
@@ -1,44 +0,0 @@
1−+++
2−title = "Go Airlock Library"
3−date = "2020-06-24"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Core Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Create a library for the Go language to be used for Airlock, the protocols for interfacing with Urbit."
12−reward = "3 stars"
13−assignee = ["Caio"]
14−id = "764093285"
15−completed = true
16−link = ""
17−+++
18−
19−Create an Airlock library for the Go (aka Golang) programming language. Airlock is the set of HTTP APIs for communicating with an Urbit. This bounty will involve creating a Go library wrapper for the server side event and HTTP API.
20−
21−Additionally, write a one-page explanation for the design choices for this library in the readme. If you have ideas for what Urbit applications would be useful for this library, please also include those suggestions in the readme.
22−
23−### Resources:
24−
25−- https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/vane/eyre.hoon#L493
26−- https://github.com/baudtack/urlock-py
27−- [UrlockPy as an example of an Airlock integration](https://github.com/urbit/docs/pull/892)
28−
29−###Contribution Guidelines:
30−
31−-Do not begin work until your request to claim this bounty is accepted.
32−
33−- Submit your work as a separate github repo, and include a link to it in your submission. Email grants@urbit.org if you have trouble.
34−- Your library should be uploaded and available in a format compatible with the package manager you feel most comfortable maintaining.
35−- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
36−- You have 90 days from the time of approval to complete this bounty.
37−- Successful completion of this bounty may result in an invitation to complete other Airlock library bounties. If you are interested in creating an Airlock library for a language other than the ones currently presented, please contact us at grants@urbit.org ; it’s likely we’ll approve this as a proposal.
38−
39−## Milestones
40−
41−### Work is finished
42−
43−3 stars
44−You have completed your work and pushed it to a Github repo.
content/grants/2020/haskell-airlock-library.mddeleted−43
@@ -1,43 +0,0 @@
1−+++
2−title = "Haskell Airlock Library"
3−date = "2020-06-24"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Core Dev" ]
8−
9−[extra]
10−image = ""
11−description = "Create a library for the Haskell language to be used for Airlock, the API suite for outside communication with Urbit."
12−reward = "3 stars"
13−assignee = ["bsima"]
14−id = "688875191"
15−completed = true
16−link = ""
17−+++
18−
19−Create an Airlock library for the Haskell programming language. Airlock is the set of HTTP APIs for communicating with an Urbit. This bounty will involve creating a Haskell library wrapper for the server side event and HTTP API.
20−
21−Additionally, write a one-page explanation for the design choices for this library in the readme. If you have ideas for what Urbit applications would be useful for this library, please also include those suggestions in the readme.
22−
23−### Resources:
24−
25−- https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/vane/eyre.hoon#L493
26−- https://github.com/baudtack/urlock-py
27−- [UrlockPy as an example of an Airlock integration](https://github.com/urbit/docs/pull/892)
28−
29−### Contribution Guidelines:
30−
31−- Do not begin work until your request to claim this bounty is accepted.
32−- Submit your work as a separate github repo, and include a link to it in your submission. Email grants@urbit.org if you have trouble.
33−- Your library should be uploaded and available in a format compatible with the package manager you feel most comfortable maintaining.
34−- When applying to work on the bounty, tell us a little about yourself and some projects you’ve worked on in the past.
35−- You have 90 days from the time of approval to complete this bounty.
36−- Successful completion of this bounty may result in an invitation to complete other Airlock library bounties. If you are interested in creating an Airlock library for a language other than the ones currently presented, please contact us at grants@urbit.org ; it’s likely we’ll approve this as a proposal.
37−
38−## Milestones
39−
40−### Your work is finished
41−
42−3 stars
43−You have completed your work and pushed it to a Github repo.
content/grants/2020/hoon-001-learner-efficiency-and-early-learner-resources.mddeleted−78
@@ -1,78 +0,0 @@
1−+++
2−title = "Hoon 001: Learner efficiency and early-learner resources"
3−date = "2020-02-09"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "Documentation" ]
8−
9−[extra]
10−image = ""
11−description = "Create Hoon learning resources catered to learner efficiency, with orienting materials for Hoon & coding, learning examples, videos."
12−reward = "3 stars"
13−assignee = ["som, ~risruc-habteb", "~rabsef-bicrym"]
14−id = "471015542"
15−completed = true
16−link = ""
17−+++
18−
19−Hoon 001: A focus on learner experience efficiency and early-learner resources
20−
21−(please note a full-format PDF of this proposal has been provided to Erik Newton)
22−
23−Introduction
24−
25−The problem:
26−
27−We perceive a need for an onboarding/educational experience into Hoon which is particularly tailored to the individual who has little to no experience coding, or for the individual who has a serious interest in learning and using Hoon, but has a heightened need for the educational efficiency (i.e. as much learning possible per amount of time and brainpower spent). This comment, and indeed this project proposal is in no way a dig on the current Tlon educational efforts. In fact, we would like to state outright that the current resources represent a solid work effort and are extraordinarily useful for many types of learners.
28−
29−For these two groups mentioned above, Hoon presents particular learning challenges, including:
30−
31−Extensive and new vocabulary, with no clear distinction between which terms map to general computer science, which are Urbit/Hoon particular, and where the boundaries of definition lie in each case.
32−Sheer volume of new concepts for the beginning programmer, which, when presented at a pace faster than an efficient learning pace, might lead to confusion and less efficient learning.
33−It may be that the new coder or early learner has little mastery of similar concepts. References to introduce new concepts should make use of common prior knowledge, for example, by mapping comparisons to Excel, everyday thinking and, where necessary, mathematical functions.
34−In particular, the new student starts out “lost” by definition and requires many more references as to where one is, where one is going and what lies at the end of each lesson.
35−Additionally, they will benefit from larger-scope references as to where lessons fit into the landscape of Hoon mastery.
36−The non-coder or coder who is learning in order to realize a particular idea with Hoon code might not appreciate purely cerebral exercises. To keep peak interest and engagement, work products should be tangible and feel useful to cultivate enthusiasm to keep learning, even with basic material.
37−
38−Our solution:
39−
40−We aim to create a set of Hoon education modules that are specifically catered to people who have minimal to no coding skills. Our current working title is “Hoon 001.” We envision the product will be a textbook-esque website-based set of content. To achieve this as an excellent-quality & effective work product we plan to utilize the following elements:
41−
42−An appropriately high-level introduction to coding generally, and to Hoon specifically, focusing on the broadest concepts, which a learner should focus on understanding first
43−Definitions of terms which are not open-ended, and which as clearly as possible establish boundaries between what something is and is not and, where possible, include references to readily accessible external concepts
44−Visualization using color, white space and annotations to convey program flow and highlighting key points.
45−Pacing of new and abstract concepts, that is deliberate and steady, ordered as sequentially as possible, with a limited number of new concepts under focus per unit effort/time
46−Linear progression/accumulation of skill with a steady advancement of themes, concepts, knowledge
47−Consistent teaching methodology - Break down complex programs into readily intelligible sections (thereby aiding the user in understanding how the interpreter ‘thinks’), discuss tools required to program these subsections, walk line by line through the resultant code and finally explain how the work can be stitched together to form the complete program.
48−Multi-sensory learning experience - The use of multiple tools to cater to different learning styles, such as text-based walkthrough, annotations (as already indicated) and a video walkthrough for each generator analyzed.
49−
50−Proposed work product/deliverable:
51−
52−We will deliver web page appropriate content format that includes:
53−Introduction to coding in general for the non-coder
54−Why code?
55−Introduction to concepts in programming
56−Assumptions about their skillset (the interface with computers, are quite familiar with Excel, and know some basic skills about working with Unix terminals, have set up a ship that is running and spawned a moon to use for coding - with links to such information in case they do not)
57−Some basics: what is a program, what is computer naivety, how-to programs begin and end
58−A clear description of goals: preemptively answering “what will we learn here?”
59−A few of Hoon’s challenges for the new learner, in-depth and in plain English
60−Auras
61−Types of values
62−Cells
63−Discreteness (the importance of considering data, whenever presented, down to the atom level, as well as the idea that, in subject-oriented programming, given that everything is part of the subject, it is increasing (a) difficult and (b) necessary to exactingly specify 'on what' your program intends to operate)
64−How Hoon programs terminate
65−Two of the types of Hoon programs
66−The naked generator
67−The say generator
68−Some tools we will need (some runes explained)
69−Let’s create! Five generators, from fairly trivial (1-2) to stretching the learner’s skill set with each next generator project. Tasks presented, breaking down the task to what conceptual tools are needed, to going through the code line by line and character by character, again in-depth and in plain English to explain how those elements are written in Hoon and how the computer manages it
70−
71−Expected hours: 125
72−
73−## Milestones
74−
75−### Full Project
76−
77−3 stars
78−Full project delivery, including content, learning materials, generators, walkthroughs, video walkthroughs
content/grants/2020/host-three-college-university-urbit-meetups-1.mddeleted−67
@@ -1,67 +0,0 @@
1−+++
2−title = "Host Three College/University Urbit Meetups (1)"
3−date = "2020-03-01"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Hold a meetup and presentation about Urbit."
12−reward = "1 star"
13−assignee = ["P. Paramo"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−### Background
20−
21−Urbit is a canvas for learning, building, experiments and collaboration. We believe this makes it a natural fit for students and teachers of many disciplines. We encourage faculty, staff, and students at any college or university to conduct meetups to explain Urbit and help new users join.
22−
23−### Bounty Description
24−
25−This bounty is to host an Urbit meetup at your college/university. The meetup should meet the following criteria:
26−
27−- The meetup must be open to all students and faculty, and there must be a public web link for joining (like meetup.com)
28−- You do not need to be a Computer Science student, but we request that you specifically make sure to invite and notify the CS department at your school about the meetups.
29−- The meetup must have a presentation or talk about Urbit.
30−- The presentation or talk must be recorded and posted publicly online.
31−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
32−- You must host at least three meetups.
33−
34−Presentations don't have to be technical, but consider some of these topics to choose from for technical talks:
35−
36−- Nock (Virtual Machines)
37−- Kelvin versioning
38−- Deterministic computing
39−- Binary tree data structures
40−- Azimuth (Urbit identities)
41−- The Ames protocol
42−
43−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your university’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
44−
45−### Resources
46−
47−Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
48−
49−### Contribution Guidelines
50−
51−- Do not begin work until your request to claim this bounty is accepted.
52−- When applying to work on the bounty, tell us a little about yourself and mention which university and location you'd be hosting the meetups in.
53−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
54−- You have 100 days from the time of approval to complete this bounty.
55−
56−## Milestones
57−
58−### Three meetups are held
59−
60−<<<<<<< HEAD:content/grants/host-three-college-university-urbit-meetups-1.md
61−1 stars
62−Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
63−||||||| 7c8c4a5e:content/grants/bounties/host-three-college-university-urbit-meetups-1.md
64−
65−=======
66−
67−> > > > > > > master:content/grants/bounties/host-three-college-university-urbit-meetups-1.md
content/grants/2020/host-three-college-university-urbit-meetups-2.mddeleted−67
@@ -1,67 +0,0 @@
1−+++
2−title = "Host Three College/University Urbit Meetups (2)"
3−date = "2020-03-02"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Hold a meetup and presentation about Urbit."
12−reward = "1 star"
13−assignee = ["kirk-hutchison"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−### Background
20−
21−Urbit is a canvas for learning, building, experiments and collaboration. We believe this makes it a natural fit for students and teachers of many disciplines. We encourage faculty, staff, and students at any college or university to conduct meetups to explain Urbit and help new users join.
22−
23−### Bounty Description
24−
25−This bounty is to host an Urbit meetup at your college/university. The meetup should meet the following criteria:
26−
27−- The meetup must be open to all students and faculty, and there must be a public web link for joining (like meetup.com)
28−- You do not need to be a Computer Science student, but we request that you specifically make sure to invite and notify the CS department at your school about the meetups.
29−- The meetup must have a presentation or talk about Urbit.
30−- The presentation or talk must be recorded and posted publicly online.
31−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
32−- You must host at least three meetups.
33−
34−Presentations don't have to be technical, but consider some of these topics to choose from for technical talks:
35−
36−- Nock (Virtual Machines)
37−- Kelvin versioning
38−- Deterministic computing
39−- Binary tree data structures
40−- Azimuth (Urbit identities)
41−- The Ames protocol
42−
43−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your university’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
44−
45−### Resources
46−
47−Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
48−
49−### Contribution Guidelines
50−
51−- Do not begin work until your request to claim this bounty is accepted.
52−- When applying to work on the bounty, tell us a little about yourself and mention which university and location you'd be hosting the meetups in.
53−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
54−- You have 100 days from the time of approval to complete this bounty.
55−
56−## Milestones
57−
58−### Three meetups are held
59−
60−<<<<<<< HEAD:content/grants/host-three-college-university-urbit-meetups-2.md
61−1 stars
62−Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
63−||||||| 7c8c4a5e:content/grants/bounties/host-three-college-university-urbit-meetups-2.md
64−
65−=======
66−
67−> > > > > > > master:content/grants/bounties/host-three-college-university-urbit-meetups-2.md
content/grants/2020/host-three-college-university-urbit-meetups-3.mddeleted−67
@@ -1,67 +0,0 @@
1−+++
2−title = "Host Three College/University Urbit Meetups (3)"
3−date = "2020-03-02"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "App Dev", "Arvo" ]
8−
9−[extra]
10−image = ""
11−description = "Hold a meetup and presentation about Urbit."
12−reward = "1 star"
13−assignee = ["~sanlyt-modbyt"]
14−id = ""
15−completed = true
16−link = ""
17−+++
18−
19−### Background
20−
21−Urbit is a canvas for learning, building, experiments and collaboration. We believe this makes it a natural fit for students and teachers of many disciplines. We encourage faculty, staff, and students at any college or university to conduct meetups to explain Urbit and help new users join.
22−
23−### Bounty Description
24−
25−This bounty is to host an Urbit meetup at your college/university. The meetup should meet the following criteria:
26−
27−- The meetup must be open to all students and faculty, and there must be a public web link for joining (like meetup.com)
28−- You do not need to be a Computer Science student, but we request that you specifically make sure to invite and notify the CS department at your school about the meetups.
29−- The meetup must have a presentation or talk about Urbit.
30−- The presentation or talk must be recorded and posted publicly online.
31−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
32−- You must host at least three meetups.
33−
34−Presentations don't have to be technical, but consider some of these topics to choose from for technical talks:
35−
36−- Nock (Virtual Machines)
37−- Kelvin versioning
38−- Deterministic computing
39−- Binary tree data structures
40−- Azimuth (Urbit identities)
41−- The Ames protocol
42−
43−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of your university’s Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
44−
45−### Resources
46−
47−Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
48−
49−### Contribution Guidelines
50−
51−- Do not begin work until your request to claim this bounty is accepted.
52−- When applying to work on the bounty, tell us a little about yourself and mention which university and location you'd be hosting the meetups in.
53−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
54−- You have 100 days from the time of approval to complete this bounty.
55−
56−## Milestones
57−
58−### Three meetups are held
59−
60−<<<<<<< HEAD:content/grants/host-three-college-university-urbit-meetups-3.md
61−1 stars
62−Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
63−||||||| 7c8c4a5e:content/grants/bounties/host-three-college-university-urbit-meetups-3.md
64−
65−=======
66−
67−> > > > > > > master:content/grants/bounties/host-three-college-university-urbit-meetups-3.md
content/grants/2020/host-three-virtual-urbit-meetups.mddeleted−52
@@ -1,52 +0,0 @@
1−+++
2−title = "Host Three Virtual Urbit Meetups"
3−date = "2020-03-26"
4−
5−[taxonomies]
6−grant_type = [ "Bounty" ]
7−grant_category = [ "Community" ]
8−
9−[extra]
10−image = ""
11−description = "Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing."
12−reward = "1 star"
13−assignee = ["~naltyc-wornes (dasfeb.industries)"]
14−id = "542719422"
15−completed = false
16−canceled = true
17−link = ""
18−+++
19−
20−#### Background
21−
22−Tlon is not Urbit; Urbit is owned by its community. So we want to decenter the Urbit brand into cities outside of San Francisco, and watch the community’s independent visions of the project take wing.
23−
24−#### Bounty Description
25−
26−It's the time of the Coronavirus, and so everyone is switching to meeting online. Urbit meetups can do this, too! This bounty is to host an Urbit meetup virtually. The meetup should meet the following criteria:
27−
28−- The meetup must be publicly joinable, and there must be a public web link for signing up (like meetup.com)
29−- The meetup must have a presentation or talk about Urbit.
30−- The presentation or talk must be recorded and posted publicly online.
31−- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
32−- You must host at least three virtual meetups.
33−
34−You should go into this bounty with the mindset of creating a regularly scheduled meetup, one that might become the nucleus of a participatory online Urbit community. Also, email support@tlon.io once you've hosted a meetup, and we will add you to your [list of active meetups](https://urbit.org/community/meetups/)!
35−
36−#### Resources
37−
38−Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
39−
40−#### Contribution Guidelines
41−
42−- Do not begin work until your request to claim this bounty is accepted.
43−- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
44−- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
45−- You have 100 days from the time of approval to complete this bounty.
46−
47−## Milestones
48−
49−### The third meetup is help
50−
51−1 stars
52−The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
content/grants/2020/links-in-urbit-reference-docs.mddeleted−31
@@ -1,31 +0,0 @@
1−+++
2−title = "Links in Urbit Reference Docs"
3−date = "2020-06-15"
4−
5−[taxonomies]
6−grant_type = [ "Proposal" ]
7−grant_category = [ "Documentation" ]
8−
9−[extra]
10−image = ""
11−description = "Add links to our reference doc pages so that people can easily discover new concepts"
12−reward = "1 star"
13−assignee = ["~nolrev-motbyr"]
14−id = "45608361"
15−completed = true
16−canceled = false
17−link = ""
18−+++
19−
20−The goal of this proposal is to add links to the Urbit Reference docs (that is, Hoon Expressions, Standard Library, and Vane APIs).
21−
22−Suppose you're browsing [section 2a](https://urbit.org/docs/reference/library/2a/) of the Hoon standard library. You see the word "unit" a bunch of times, but you're not actually sure what it means. You try to click on one of the instances, hoping it'll take you to a page with more information, but nothing happens! That's because the library (and a fair amount of Urbit documentation) lacks links between pages.
23−
24−Consider, for contrast, a [random Python doc page](https://docs.python.org/3/library/os.html). Every concept that has documentation has a link to said documentation. By adding links to the Urbit docs, we'll make the documentation easier to use, and from there make Hoon and Urbit easier to learn.
25−
26−## Milestones
27−
28−### Links added to Reference documentation
29−
30−1 stars
31−Concepts that refer to pages with documentation have links to said documentation.
content/grants/2020/llelogram.mddeleted−55

This diff is too big to show here.

content/grants/2020/matrices-in-hoon.mddeleted−58

This diff is too big to show here.

content/grants/2020/matrixriotim-bridge-bot.mddeleted−42

This diff is too big to show here.

content/grants/2020/open-street-maps-data-importation.mddeleted−52

This diff is too big to show here.

content/grants/2020/staff-the-urbit-help-desk-1.mddeleted−64

This diff is too big to show here.

content/grants/2020/staff-the-urbit-help-desk-2.mddeleted−64

This diff is too big to show here.

content/grants/2020/staff-the-urbit-helpdesk-west.mddeleted−58

This diff is too big to show here.

content/grants/2020/the-complete-guide-to-gall-and-landscape.mddeleted−85

This diff is too big to show here.

content/grants/2020/tor-nodes-relay-search-tile.mddeleted−45

This diff is too big to show here.

content/grants/2020/typescript-airlock-library.mddeleted−43

This diff is too big to show here.

content/grants/2020/up-to-date-hoon-reference-card.mddeleted−30

This diff is too big to show here.

content/grants/2020/urbian-a-customized-linux-distribution-for-urbit-appliances.mddeleted−88

This diff is too big to show here.

content/grants/2020/urbit-event-series.mddeleted−92

This diff is too big to show here.

content/grants/2020/urbit-explainer-video.mddeleted−35

This diff is too big to show here.

content/grants/2020/urbit-http-api-for-kotlin.mddeleted−37

This diff is too big to show here.

content/grants/2020/urbit-http-api-for-rust.mddeleted−55

This diff is too big to show here.

content/grants/2020/urbit-http-interface-java-edition.mddeleted−66

This diff is too big to show here.

content/grants/2020/urbit-http-library-for-ruby.mddeleted−42

This diff is too big to show here.

content/grants/2020/urbit-online-meetup.mddeleted−30

This diff is too big to show here.

content/grants/2020/urbit-ship-and-star-hosting-and-troubleshooting-docs.mddeleted−38

This diff is too big to show here.

content/grants/2020/verifying-urbit-id-on-keybase.mddeleted−76

This diff is too big to show here.

content/grants/2020/web-scraper.mddeleted−45

This diff is too big to show here.

content/grants/2021/analytics-script.mddeleted−54

This diff is too big to show here.

content/grants/2021/authenticate-with-urbit.mddeleted−36

This diff is too big to show here.

content/grants/2021/azimuth-cli.mddeleted−164

This diff is too big to show here.

content/grants/2021/bitcoin-wallet-maintenance.mddeleted−65

This diff is too big to show here.

content/grants/2021/bridge-l2-revamp.mddeleted−57

This diff is too big to show here.

content/grants/2021/clojure-urbit-client.mddeleted−113

This diff is too big to show here.

content/grants/2021/comprehensive-local-server-and-mum-explanation-video.mddeleted−45

This diff is too big to show here.

content/grants/2021/contacts.mddeleted−37

This diff is too big to show here.

content/grants/2021/content-producer.mddeleted−40

This diff is too big to show here.

content/grants/2021/cross-platform-desktop-urbit-app.mddeleted−96

This diff is too big to show here.

content/grants/2021/cypherscope-bot.mddeleted−80

This diff is too big to show here.

content/grants/2021/educational-guide-todomvc-urbit-edition.mddeleted−332

This diff is too big to show here.

content/grants/2021/feed-aggregator.mddeleted−103

This diff is too big to show here.

content/grants/2021/graph-store-documentation-guide.mddeleted−115

This diff is too big to show here.

content/grants/2021/guide-to-s3.mddeleted−35

This diff is too big to show here.

content/grants/2021/host-two-urbit-meetups-11.mddeleted−62

This diff is too big to show here.

content/grants/2021/host-two-urbit-meetups-12.mddeleted−58

This diff is too big to show here.

content/grants/2021/host-two-urbit-meetups-13.mddeleted−59

This diff is too big to show here.

content/grants/2021/host-two-urbit-meetups-14.mddeleted−59

This diff is too big to show here.

content/grants/2021/host-two-urbit-meetups-15.mddeleted−59

This diff is too big to show here.

content/grants/2021/host-two-urbit-meetups-16.mddeleted−59

This diff is too big to show here.

content/grants/2021/json-jet.mddeleted−51

This diff is too big to show here.

content/grants/2021/login-with-urbit.mddeleted−84

This diff is too big to show here.

content/grants/2021/machine-learning.mddeleted−122

This diff is too big to show here.

content/grants/2021/market-interface.mddeleted−62

This diff is too big to show here.

content/grants/2021/meetup-bom.mddeleted−118

This diff is too big to show here.

content/grants/2021/minimal-urbit-os.mddeleted−58

This diff is too big to show here.

content/grants/2021/native-urbit.mddeleted−30

This diff is too big to show here.

content/grants/2021/network-explorer-data-pipeline-http-api.mddeleted−234

This diff is too big to show here.

content/grants/2021/nuck-jet.mddeleted−59

This diff is too big to show here.

content/grants/2021/overhaul-the-urbitorg-website.mddeleted−74

This diff is too big to show here.

content/grants/2021/planet-sales.mddeleted−66

This diff is too big to show here.

content/grants/2021/pokur.mddeleted−90

This diff is too big to show here.

content/grants/2021/ra-debugging-tools.mddeleted−26

This diff is too big to show here.

content/grants/2021/ra-page-tracking.mddeleted−34

This diff is too big to show here.

content/grants/2021/ra-segfaults.mddeleted−32

This diff is too big to show here.

content/grants/2021/ra-stack-overflow.mddeleted−32

This diff is too big to show here.

content/grants/2021/search-in-groups.mddeleted−42

This diff is too big to show here.

content/grants/2021/send-emails-to-a-mailing-list.mddeleted−78

This diff is too big to show here.

content/grants/2021/smol-future-sustained-knowledge-sharing-and-marketing.mddeleted−97

This diff is too big to show here.

content/grants/2021/speech-recognition.mddeleted−78

This diff is too big to show here.

content/grants/2021/staff-the-urbit-helpdesk-east.mddeleted−58

This diff is too big to show here.

content/grants/2021/static-site-generation.mddeleted−80

This diff is too big to show here.

content/grants/2021/thread-documentation.mddeleted−85

This diff is too big to show here.

content/grants/2021/translate-key-parts-of-urbitorg-into-german.mddeleted−31

This diff is too big to show here.

content/grants/2021/translate-key-parts-of-urbitorg-into-korean.mddeleted−31

This diff is too big to show here.

content/grants/2021/translate-key-parts-of-urbitorg-into-norwegian.mddeleted−32

This diff is too big to show here.

content/grants/2021/translate-key-parts-of-urbitorg-into-spanish.mddeleted−31

This diff is too big to show here.

content/grants/2021/try-urbit-website.mddeleted−33

This diff is too big to show here.

content/grants/2021/twitter-uv-extension.mddeleted−67

This diff is too big to show here.

content/grants/2021/ua-collaborative-text-editor.mddeleted−31

This diff is too big to show here.

content/grants/2021/ua-filesharer.mddeleted−30

This diff is too big to show here.

content/grants/2021/ua-heads-up-poker.mddeleted−35

This diff is too big to show here.

content/grants/2021/ua-invoice-system.mddeleted−35

This diff is too big to show here.

content/grants/2021/ua-marketplace.mddeleted−36

This diff is too big to show here.

content/grants/2021/ucal-google-and-outlook-integration.mddeleted−85

This diff is too big to show here.

content/grants/2021/urbit-api-for-elixir.mddeleted−38

This diff is too big to show here.

content/grants/2021/urbit-community-concierge-east-coast-2q2021.mddeleted−36

This diff is too big to show here.

content/grants/2021/urbit-community-concierge-east-coast.mddeleted−36

This diff is too big to show here.

content/grants/2021/urbit-community-concierge-west-coast-2q2021.mddeleted−36

This diff is too big to show here.

content/grants/2021/urbit-community-concierge-west-coast.mddeleted−36

This diff is too big to show here.

content/grants/2021/urbit-http-api-for-emacs-elisp.mddeleted−39

This diff is too big to show here.

content/grants/2021/urbit-http-api-for-python.mddeleted−46

This diff is too big to show here.

content/grants/2021/urbit-irc-bridge.mddeleted−49

This diff is too big to show here.

content/grants/2021/urbit-lfs-filehosting.mddeleted−68

This diff is too big to show here.

content/grants/2021/urbit-notes.mddeleted−102

This diff is too big to show here.

content/grants/2021/urbit-react-cookbook.mddeleted−47

This diff is too big to show here.

content/grants/2021/uturn.mddeleted−38

This diff is too big to show here.

content/grants/2021/uv-extension-library.mddeleted−44

This diff is too big to show here.

content/grants/2021/video-content-manager.mddeleted−61

This diff is too big to show here.

content/grants/2021/volt-lightning-on-urbit.mddeleted−313

This diff is too big to show here.

content/grants/2021/webrtc-gall-agent-and-external-app.mddeleted−81

This diff is too big to show here.

content/grants/2021/~home-urbit.mddeleted−119

This diff is too big to show here.

content/grants/2022/abacus.mddeleted−56

This diff is too big to show here.

content/grants/2022/app-engram.mddeleted−117

This diff is too big to show here.

content/grants/2022/app-openbsd.mddeleted−53

This diff is too big to show here.

content/grants/2022/app-store.mddeleted−159

This diff is too big to show here.

content/grants/2022/app-urvault.mddeleted−41

This diff is too big to show here.

content/grants/2022/app-uv-native-notificatons.mddeleted−42

This diff is too big to show here.

content/grants/2022/apprenticeship-extending-bitcoin.mddeleted−76

This diff is too big to show here.

content/grants/2022/apprenticeship-studio-collections.mddeleted−55

This diff is too big to show here.

content/grants/2022/apprenticeship-studio-email.mddeleted−40

This diff is too big to show here.

content/grants/2022/astrolabe.mddeleted−165

This diff is too big to show here.

content/grants/2022/books-development.mddeleted−44

This diff is too big to show here.

content/grants/2022/books.mddeleted−116

This diff is too big to show here.

content/grants/2022/calendar-holium.mddeleted−53

This diff is too big to show here.

content/grants/2022/chess-bounty.mddeleted−54

This diff is too big to show here.

content/grants/2022/chronicle.mddeleted−63

This diff is too big to show here.

content/grants/2022/communal-computing.mddeleted−130

This diff is too big to show here.

content/grants/2022/cue.mddeleted−60

This diff is too big to show here.

content/grants/2022/desk-import-export.mddeleted−102

This diff is too big to show here.

content/grants/2022/digital-editor-MROB.mddeleted−50

This diff is too big to show here.

content/grants/2022/digital-storefront.mddeleted−73

This diff is too big to show here.

content/grants/2022/dusko-valve.mddeleted−81

This diff is too big to show here.

content/grants/2022/eth-provider.mddeleted−65

This diff is too big to show here.

content/grants/2022/eth-wallet.mddeleted−49

This diff is too big to show here.

content/grants/2022/eyre-scry.mddeleted−72

This diff is too big to show here.

content/grants/2022/faux.mddeleted−58

This diff is too big to show here.

content/grants/2022/filesharer.mddeleted−100

This diff is too big to show here.

content/grants/2022/full-stop.mddeleted−131

This diff is too big to show here.

content/grants/2022/gather.mddeleted−87

This diff is too big to show here.

content/grants/2022/general-web-permissions.mddeleted−36

This diff is too big to show here.

content/grants/2022/gnosis-safe.mddeleted−56

This diff is too big to show here.

content/grants/2022/go-urbit.mddeleted−64

This diff is too big to show here.

content/grants/2022/gora-apprentice.mddeleted−61

This diff is too big to show here.

content/grants/2022/herd.mddeleted−58

This diff is too big to show here.

content/grants/2022/hoon-eval.mddeleted−56

This diff is too big to show here.

content/grants/2022/hoon-markdown-library.mddeleted−52

This diff is too big to show here.

content/grants/2022/http-server-driver.mddeleted−98

This diff is too big to show here.

content/grants/2022/keep.mddeleted−119

This diff is too big to show here.

content/grants/2022/knox.mddeleted−81

This diff is too big to show here.

content/grants/2022/lexicon.mddeleted−69

This diff is too big to show here.

content/grants/2022/lightning-development.mddeleted−201

This diff is too big to show here.

content/grants/2022/loom-pointer-compression.mddeleted−62

This diff is too big to show here.

content/grants/2022/meld-memory.mddeleted−55

This diff is too big to show here.

content/grants/2022/membrane.mddeleted−98

This diff is too big to show here.

content/grants/2022/middleware-apprentice.mddeleted−55

This diff is too big to show here.

content/grants/2022/minesweeper.mddeleted−48

This diff is too big to show here.

content/grants/2022/native-planet-2.mddeleted−90

This diff is too big to show here.

content/grants/2022/nested-goals.mddeleted−162

This diff is too big to show here.

content/grants/2022/notifications-protocol.mddeleted−64

This diff is too big to show here.

content/grants/2022/olif.mddeleted−97

This diff is too big to show here.

content/grants/2022/peat.mddeleted−66

This diff is too big to show here.

content/grants/2022/persistent-memory.mddeleted−157

This diff is too big to show here.

content/grants/2022/plug.mddeleted−165

This diff is too big to show here.

content/grants/2022/pony-bounty.mddeleted−72

This diff is too big to show here.

content/grants/2022/port-maintenance.mddeleted−72

This diff is too big to show here.

content/grants/2022/port-to-hosting.mddeleted−56

This diff is too big to show here.

content/grants/2022/profiling.mddeleted−74

This diff is too big to show here.

content/grants/2022/qr-login.mddeleted−48

This diff is too big to show here.

content/grants/2022/quorum.mddeleted−106

This diff is too big to show here.

content/grants/2022/regex-library.mddeleted−114

This diff is too big to show here.

content/grants/2022/seguro-phase-2.mddeleted−190

This diff is too big to show here.

content/grants/2022/seguro-prototype.mddeleted−66

This diff is too big to show here.

content/grants/2022/serving-the-people.mddeleted−101

This diff is too big to show here.

content/grants/2022/slam.mddeleted−113

This diff is too big to show here.

content/grants/2022/slaw-scot-jets.mddeleted−72

This diff is too big to show here.

content/grants/2022/smart-lightbulb-controller.mddeleted−104

This diff is too big to show here.

content/grants/2022/symmetric-routing.mddeleted−69

This diff is too big to show here.

content/grants/2022/trail.mddeleted−168

This diff is too big to show here.

content/grants/2022/trill-ufa.mddeleted−67

This diff is too big to show here.

content/grants/2022/trove.mddeleted−94

This diff is too big to show here.

content/grants/2022/urbit-forms.mddeleted−250

This diff is too big to show here.

content/grants/2022/urbit-interface-framework.mddeleted−88

This diff is too big to show here.

content/grants/2022/urbitswap.mddeleted−59

This diff is too big to show here.

content/grants/2022/value-articles.mddeleted−54

This diff is too big to show here.

content/grants/2022/volt-ui.mddeleted−54

This diff is too big to show here.

content/grants/2022/whom.mddeleted−70

This diff is too big to show here.

content/grants/2023/aera.mddeleted−50

This diff is too big to show here.

content/grants/2023/app-metrics.mddeleted−74

This diff is too big to show here.

content/grants/2023/blog-updates.mddeleted−64

This diff is too big to show here.

content/grants/2023/bridge-grab-bag.mddeleted−35

This diff is too big to show here.

content/grants/2023/community-meetups.mddeleted−37

This diff is too big to show here.

content/grants/2023/did-rfp.mddeleted−26

This diff is too big to show here.

content/grants/2023/elm.mddeleted−68

This diff is too big to show here.

content/grants/2023/email-stella-fixa-rfp.mddeleted−29

This diff is too big to show here.

content/grants/2023/eyre-noun-channels.mddeleted−42

This diff is too big to show here.

content/grants/2023/generator-doccords.mddeleted−46

This diff is too big to show here.

content/grants/2023/gh-concierge.mddeleted−42

This diff is too big to show here.

content/grants/2023/git-on-clay.mddeleted−42

This diff is too big to show here.

content/grants/2023/goals-2.mddeleted−64

This diff is too big to show here.

content/grants/2023/hoon-linter.mddeleted−30

This diff is too big to show here.

content/grants/2023/hoon-replit.mddeleted−45

This diff is too big to show here.

content/grants/2023/issue-grab-bag.mddeleted−36

This diff is too big to show here.

content/grants/2023/json-parser-suite.mddeleted−170

This diff is too big to show here.

content/grants/2023/kNock-property-testing.mddeleted−71

This diff is too big to show here.

content/grants/2023/lick.mddeleted−82

This diff is too big to show here.

content/grants/2023/mapping-ids.mddeleted−106

This diff is too big to show here.

content/grants/2023/network-weather.mddeleted−24

This diff is too big to show here.

content/grants/2023/oauth2-stella-fixa-rfp.mddeleted−31

This diff is too big to show here.

content/grants/2023/osmosis-client.mddeleted−48

This diff is too big to show here.

content/grants/2023/pastebin-RFP.mddeleted−28

This diff is too big to show here.

content/grants/2023/pastebin-proposal.mddeleted−33

This diff is too big to show here.

content/grants/2023/portal-features-1.mddeleted−82

This diff is too big to show here.

content/grants/2023/privacy-msg.mddeleted−89

This diff is too big to show here.

content/grants/2023/quorum-2.mddeleted−84

This diff is too big to show here.

content/grants/2023/replit.mddeleted−52

This diff is too big to show here.

content/grants/2023/school-support-23q1.mddeleted−43

This diff is too big to show here.

content/grants/2023/splitwise-rfp.mddeleted−26

This diff is too big to show here.

content/grants/2023/splitwise.mddeleted−129

This diff is too big to show here.

content/grants/2023/text-search.mddeleted−24

This diff is too big to show here.

content/grants/2023/tinygrad.mddeleted−24

This diff is too big to show here.

content/grants/2023/treesitter.mddeleted−71

This diff is too big to show here.

content/grants/2023/turf.mddeleted−205

This diff is too big to show here.

content/grants/2023/uc-concierge.mddeleted−42

This diff is too big to show here.

content/grants/2023/update-mass.mddeleted−26

This diff is too big to show here.

content/grants/2023/urbit-ninja-strike-team.mddeleted−38

This diff is too big to show here.

content/grants/2023/urbit-react-docs.mddeleted−124

This diff is too big to show here.

content/grants/2023/vere-eyre-cache.mddeleted−38

This diff is too big to show here.

content/grants/2023/wiki-stella-fixa-rfp.mddeleted−26

This diff is too big to show here.

content/groups/_index.mddeleted−3

This diff is too big to show here.

content/groups/~bitbet-bolbel/urbit-community.mddeleted−14

This diff is too big to show here.

content/groups/~bitdeg/assembly22.mddeleted−10

This diff is too big to show here.

content/groups/~dalten/aera.mddeleted−10

This diff is too big to show here.

content/groups/~dibref-labter/arbit.mddeleted−9

This diff is too big to show here.

content/groups/~dister-dozzod-lapdeg/battery-payload.mddeleted−9

This diff is too big to show here.

content/groups/~fabled-faster/new-york.mddeleted−10

This diff is too big to show here.

content/groups/~fabled-faster/structure.mddeleted−10

This diff is too big to show here.

content/groups/~fabled-faster/wind.mddeleted−10

This diff is too big to show here.

content/groups/~famreb-todmec/the-combine-public.mddeleted−13

This diff is too big to show here.

content/groups/~halbex-palheb/uf-public.mddeleted−10

This diff is too big to show here.

content/groups/~hatryx-lastud/other-life.mddeleted−10

This diff is too big to show here.

content/groups/~hiddev-dannut/new-hooniverse.mddeleted−11

This diff is too big to show here.

content/groups/~hocwyn-tipwex/uqbar-event-horizon-forever.mddeleted−11

This diff is too big to show here.

content/groups/~ladtem-filmyr/urbit-ny-week.mddeleted−193

This diff is too big to show here.

content/groups/~lanlyd/terminal.mddeleted−8

This diff is too big to show here.

content/groups/~lodsum-rilner/emil-graphics.mddeleted−10

This diff is too big to show here.

content/groups/~martyr-sarlev-sarsen/assembly-hackers.mddeleted−10

This diff is too big to show here.

content/groups/~matwet/networked-subject.mddeleted−11

This diff is too big to show here.

content/groups/~middev/the-forge.mddeleted−10

This diff is too big to show here.

content/groups/~mister-hilper-dozzod-dalten/quartus.mddeleted−10

This diff is too big to show here.

content/groups/~napmer-rilnut/wet-brain.mddeleted−10

This diff is too big to show here.

content/groups/~natnex-ronret/door-link.mddeleted−10

This diff is too big to show here.

content/groups/~nibset-napwyn/tlon-public.mddeleted−10

This diff is too big to show here.

content/groups/~poldec-tonteg/the-phantom-tollbooth.mddeleted−12

This diff is too big to show here.

content/groups/~sillus-mallus/toki-pona.mddeleted−12

This diff is too big to show here.

content/groups/~sitbus-dapsup/urstralia.mddeleted−9

This diff is too big to show here.

content/groups/~tirrel/the-marketplace.mddeleted−14

This diff is too big to show here.

content/groups/~todset-partug/urmetica.mddeleted−9

This diff is too big to show here.

content/groups/~wacrep-lossul/encyclosphere.mddeleted−9

This diff is too big to show here.

content/groups/~widbep-faltev/asheville.mddeleted−9

This diff is too big to show here.

content/groups/~winder-dapsym/urchan.mddeleted−29

This diff is too big to show here.

content/groups/~witbep-witbep/embark.mddeleted−11

This diff is too big to show here.

content/highlights/highlight-1.mddeleted−6

This diff is too big to show here.

content/highlights/highlight-2.mddeleted−6

This diff is too big to show here.

content/highlights/highlight-3.mddeleted−6

This diff is too big to show here.

content/hoonschool.mdnew file+23

This diff is too big to show here.

content/ids/ballun-dilsup.mddeleted−7

This diff is too big to show here.

content/ids/battus-datsun.mddeleted−10

This diff is too big to show here.

content/ids/binnus.mddeleted−10

This diff is too big to show here.

content/ids/bintud-bitnev.mddeleted−8

This diff is too big to show here.

content/ids/bitbet-bolbel.mddeleted−4

This diff is too big to show here.

content/ids/botbyn-dolrum.mddeleted−7

This diff is too big to show here.

content/ids/datder-sonnet.mddeleted−13

This diff is too big to show here.

content/ids/datnut-pollen.mddeleted−15

This diff is too big to show here.

content/ids/datryn-ribdun.mddeleted−12

This diff is too big to show here.

content/ids/datsyr-radser.mddeleted−12

This diff is too big to show here.

content/ids/dopbet-larped.mddeleted−7

This diff is too big to show here.

content/ids/fallyn-balfus.mddeleted−8

This diff is too big to show here.

content/ids/finmep-lanteb.mddeleted−29

This diff is too big to show here.

content/ids/forryd-ravtyn.mddeleted−6

This diff is too big to show here.

content/ids/haddef-sigwen.mddeleted−12

This diff is too big to show here.

content/ids/haldul-navsyr.mddeleted−7

This diff is too big to show here.

content/ids/hocmed-lidrev.mddeleted−8

This diff is too big to show here.

content/ids/lagrev-nocfep.mddeleted−8

This diff is too big to show here.

content/ids/lanlyd.mddeleted−8

This diff is too big to show here.

content/ids/mallus-fabres.mddeleted−12

This diff is too big to show here.

content/ids/mastyr-bottec.mddeleted−10

This diff is too big to show here.

content/ids/monnys-riphet.mddeleted−7

This diff is too big to show here.

content/ids/nallux-dozryl.mddeleted−12

This diff is too big to show here.

content/ids/nibtud-bidsyt.mddeleted−17

This diff is too big to show here.

content/ids/panleg-padben.mddeleted−6

This diff is too big to show here.

content/ids/pinsyt-nossub.mddeleted−18

This diff is too big to show here.

content/ids/poldec-tonteg.mddeleted−14

This diff is too big to show here.

content/ids/rabsef-bicrym.mddeleted−14

This diff is too big to show here.

content/ids/ravmel-ropdyl.mddeleted−8

This diff is too big to show here.

content/ids/rilfun-lidlen.mddeleted−8

This diff is too big to show here.

content/ids/sarlev-sarsen.mddeleted−8

This diff is too big to show here.

content/ids/sicdev-pilnup.mddeleted−8

This diff is too big to show here.

content/ids/sitful-hatred.mddeleted−8

This diff is too big to show here.

content/ids/sogrum-savluc.mddeleted−11

This diff is too big to show here.

content/ids/tagdyl-ponwyn.mddeleted−10

This diff is too big to show here.

content/ids/tambes-palped.mddeleted−10

This diff is too big to show here.

content/ids/tiplec-lacnyx.mddeleted−6

This diff is too big to show here.

content/ids/tobrun-tomnet.mddeleted−8

This diff is too big to show here.

content/ids/topfet-parmed.mddeleted−6

This diff is too big to show here.

content/ids/wicrum-wicrun.mddeleted−8

This diff is too big to show here.

content/ids/wolref-podlex.mddeleted−8

This diff is too big to show here.

content/marketplaces/azimuth-shop.mddeleted−11

This diff is too big to show here.

content/marketplaces/lanlyd.mddeleted−19

This diff is too big to show here.

content/marketplaces/mocbel-house.mddeleted−19

This diff is too big to show here.

content/marketplaces/networked-subject.mddeleted−14

This diff is too big to show here.

content/marketplaces/opensea.mddeleted−18

This diff is too big to show here.

content/marketplaces/planet-market.mddeleted−26

This diff is too big to show here.

content/marketplaces/urbit-live.mddeleted−13

This diff is too big to show here.

content/marketplaces/urbitex.mddeleted−11

This diff is too big to show here.

content/marketplaces/urbitme.mddeleted−11

This diff is too big to show here.

content/marketplaces/wexpert-systems.mddeleted−13

This diff is too big to show here.

content/organizations/assemblycapital.mddeleted−10

This diff is too big to show here.

content/organizations/dalten.mddeleted−10

This diff is too big to show here.

content/organizations/holium.mddeleted−10

This diff is too big to show here.

content/organizations/labyrinthdao.mddeleted−10

This diff is too big to show here.

content/organizations/mars-review-of-books.mddeleted−19

This diff is too big to show here.

content/organizations/nativeplanet.mddeleted−10

This diff is too big to show here.

content/organizations/quartus.mddeleted−22

This diff is too big to show here.

content/organizations/reciprocal.mddeleted−13

This diff is too big to show here.

content/organizations/sortug.mddeleted−10

This diff is too big to show here.

content/organizations/third-earth.mddeleted−10

This diff is too big to show here.

content/organizations/tirrel.mddeleted−12

This diff is too big to show here.

content/organizations/tlon.mddeleted−12

This diff is too big to show here.

content/organizations/uqbar.mddeleted−10

This diff is too big to show here.

content/organizations/urbit-foundation.mddeleted−12

This diff is too big to show here.

content/organizations/zorp.mddeleted−10

This diff is too big to show here.

content/overview/_index.mddeleted−64

This diff is too big to show here.

content/overview/interface.mddeleted−42

This diff is too big to show here.

content/overview/people-history.mddeleted−73

This diff is too big to show here.

content/overview/urbit-id.mddeleted−63

This diff is too big to show here.

content/overview/urbit-os.mddeleted−45

This diff is too big to show here.

content/podcasts/2018-11-18_a-digital-republic.mddeleted−19

This diff is too big to show here.

content/podcasts/2019-11-11_urbit.mddeleted−9

This diff is too big to show here.

content/podcasts/2020-03-23_a-new-computing-platform.mddeleted−17

This diff is too big to show here.

content/podcasts/2020-03-23_technology-and-freedom.mddeleted−18

This diff is too big to show here.

content/podcasts/2020-03-23_under-the-hood.mddeleted−15

This diff is too big to show here.

content/podcasts/2020-03-24_urbit-id-and-the-network.mddeleted−13

This diff is too big to show here.

content/podcasts/2020-03-26_built-to-last.mddeleted−21

This diff is too big to show here.

content/podcasts/2020-03-26_urbit-and-bitcoin.mddeleted−15

This diff is too big to show here.

content/podcasts/2020-04-05_tlon-operations.mddeleted−15

This diff is too big to show here.

content/podcasts/2020-11-24_humane-computing.mddeleted−11

This diff is too big to show here.

content/podcasts/2021-02-08_urbit.mddeleted−27

This diff is too big to show here.

content/podcasts/2022-01-21_the-most-beautiful-computer.mddeleted−17

This diff is too big to show here.

content/podcasts/2022-01-26_the-only-dignified-computer.mddeleted−17

This diff is too big to show here.

content/podcasts/2022-02-01_100-year-computer.mddeleted−15

This diff is too big to show here.

content/podcasts/2022-02-15_building-web3-products.mddeleted−20

This diff is too big to show here.

content/podcasts/2022-02-21_most-correct-computer.mddeleted−17

This diff is too big to show here.

content/podcasts/2022-02-27_the-combine.mddeleted−13

This diff is too big to show here.

content/podcasts/2022-03-02_theory-of-the-egirl.mddeleted−17

This diff is too big to show here.

content/podcasts/2022-03-04_nockin.mddeleted−18

This diff is too big to show here.

content/podcasts/2022-03-08_urbit-blockchains.mddeleted−16

This diff is too big to show here.

content/podcasts/2022-03-11_mars-review.mddeleted−12

This diff is too big to show here.

content/podcasts/2022-03-13_alien-invasions.mddeleted−16

This diff is too big to show here.

content/podcasts/2022-03-18_politics-of-urbit-governance.mddeleted−15

This diff is too big to show here.

content/podcasts/2022-03-23_quantum-computing.mddeleted−15

This diff is too big to show here.

content/podcasts/2022-04-07_in-lehmans-terms.mddeleted−12

This diff is too big to show here.

content/podcasts/2022-04-19_robot-opera.mddeleted−11

This diff is too big to show here.

content/podcasts/2022-05-21_diary-of-sam-frank.mddeleted−10

This diff is too big to show here.

content/podcasts/2022-05-22_cincinnati-chili.mddeleted−10

This diff is too big to show here.

content/podcasts/2022-06-04_market-bedshite.mddeleted−10

This diff is too big to show here.

content/podcasts/2022-06-22_software-as-soulcraft.mddeleted−20

This diff is too big to show here.

content/podcasts/2022-06-29_josh-lehman.mddeleted−30

This diff is too big to show here.

content/podcasts/2022-07-04_enable-people-to-run-their-own-servers.mddeleted−116

This diff is too big to show here.

content/podcasts/2022-08-04_middling.mddeleted−10

This diff is too big to show here.

content/podcasts/2022-08-11_probing-questions.mddeleted−14

This diff is too big to show here.

content/podcasts/2022-08-19_the-blind.mddeleted−9

This diff is too big to show here.

content/podcasts/2022-08-26_the-harvard-finance-bro.mddeleted−12

This diff is too big to show here.

content/podcasts/2022-09-14_insanely-bullish-on-urbit.mddeleted−13

This diff is too big to show here.

content/podcasts/2022-09-21_the-worlds-best-crypto-investor.mddeleted−12

This diff is too big to show here.

content/podcasts/2022-09-30-neal-davis-urbit-sentience-daos.mddeleted−33

This diff is too big to show here.

content/podcasts/2022-10-04-reality-maximalism-josh-lehman.mddeleted−9

This diff is too big to show here.

content/podcasts/2022-10-06_urbit-maxi-episode copy.mddeleted−9

This diff is too big to show here.

content/podcasts/2022-12-22_epicenter-ted-blackman-gary-lieberman.mddeleted−11

This diff is too big to show here.

content/podcasts/2023-01-05_lets-get-personal.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-01-19_crypto-metaphysics.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-01-24_reject-triviality.mddeleted−13

This diff is too big to show here.

content/podcasts/2023-01-26_building-future-states-with-nation3.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-01-29_urbit-for-idiots.mddeleted−11

This diff is too big to show here.

content/podcasts/2023-02-09_crypto-narratives-new-and-old.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-02-13_distributed-networked-computing.mddeleted−17

This diff is too big to show here.

content/podcasts/2023-02-23_the-urbit-episode.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-03-09_reclaiming-web-1.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-03-23_how-to-invest-in-web3-like-a-cool-kid.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-03-28_pupusas-volcanoes-and-databases.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-04-03_legacy-internet-new-internet.mddeleted−15

This diff is too big to show here.

content/podcasts/2023-04-06_the-ai-episode.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-04-11_its-urbits-all-the-way-down-with-dachus-tiprel.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-04-14_epicenter-tim-galebach.mddeleted−11

This diff is too big to show here.

content/podcasts/2023-04-20_artificial-qintelligence.mddeleted−9

This diff is too big to show here.

content/podcasts/2023-04-27_hoon-only-legal-ui-with-hastuc-dibtux.mddeleted−11

This diff is too big to show here.

content/podcasts/2023-05-11_full-metal-urbit-with-mopfel-winrux.mddeleted−15

This diff is too big to show here.

content/podcasts/2023-05-18_crypto-takes-flight.mddeleted−11

This diff is too big to show here.

content/updates/2016-10-6-update.md → content/posts/2016-10-6-update.mdrenamed+74−76

This diff is too big to show here.

content/updates/2016-5-16-roadmap.md → content/posts/2016-5-16-roadmap.mdrenamed+67−68

This diff is too big to show here.

content/updates/2016-7-20-update.md → content/posts/2016-7-20-update.mdrenamed+35−37

This diff is too big to show here.

content/updates/2016-8-30-update.md → content/posts/2016-8-30-update.mdrenamed+49−51

This diff is too big to show here.

content/updates/2017-1-30-update.md → content/posts/2017-1-30-update.mdrenamed+125−127

This diff is too big to show here.

content/updates/2017-10-7-update.md → content/posts/2017-10-7-update.mdrenamed+5−7

This diff is too big to show here.

content/updates/2017-11-14-update.md → content/posts/2017-11-14-update.mdrenamed+35−36

This diff is too big to show here.

content/updates/2017-12-16-update.md → content/posts/2017-12-16-update.mdrenamed+11−15

This diff is too big to show here.

content/updates/2017-12-2-update.md → content/posts/2017-12-2-update.mdrenamed+19−20

This diff is too big to show here.

content/updates/2017-12-22-update.md → content/posts/2017-12-22-update.mdrenamed+13−16

This diff is too big to show here.

content/updates/2017-3-1-update.md → content/posts/2017-3-1-update.mdrenamed+42−44

This diff is too big to show here.

content/updates/2017-4-17-update.md → content/posts/2017-4-17-update.mdrenamed+38−40

This diff is too big to show here.

content/updates/2017-5-11-roadmap.md → content/posts/2017-5-11-roadmap.mdrenamed+72−74

This diff is too big to show here.

content/updates/2017-8-11-update.md → content/posts/2017-8-11-update.mdrenamed+34−34

This diff is too big to show here.

content/updates/2017-9-23-update.md → content/posts/2017-9-23-update.mdrenamed+4−6

This diff is too big to show here.

content/updates/2017-9-29-update.md → content/posts/2017-9-29-update.mdrenamed+4−6

This diff is too big to show here.

content/updates/2018-1-13-update.md → content/posts/2018-1-13-update.mdrenamed+4−6

This diff is too big to show here.

content/updates/2018-1-6-update.md → content/posts/2018-1-6-update.mdrenamed+11−13

This diff is too big to show here.

content/updates/2018-10-12-update.md → content/posts/2018-10-12-update.mdrenamed+16−18

This diff is too big to show here.

content/updates/2018-10-24-update.md → content/posts/2018-10-24-update.mdrenamed+10−12

This diff is too big to show here.

content/updates/2018-11-20-update.md → content/posts/2018-11-20-update.mdrenamed+14−16

This diff is too big to show here.

content/updates/2018-11-6-update.md → content/posts/2018-11-6-update.mdrenamed+11−12

This diff is too big to show here.

content/updates/2018-12-18-update.md → content/posts/2018-12-18-update.mdrenamed+11−13

This diff is too big to show here.

content/updates/2018-2-17-update.md → content/posts/2018-2-17-update.mdrenamed+15−21

This diff is too big to show here.

content/updates/2018-2-24-update.md → content/posts/2018-2-24-update.mdrenamed+11−13

This diff is too big to show here.

content/updates/2018-2-5-update.md → content/posts/2018-2-5-update.mdrenamed+13−13

This diff is too big to show here.

content/updates/2018-2-9-update.md → content/posts/2018-2-9-update.mdrenamed+10−12

This diff is too big to show here.

content/updates/2018-3-24-update.md → content/posts/2018-3-24-update.mdrenamed+14−16

This diff is too big to show here.

content/updates/2018-3-5-update.md → content/posts/2018-3-5-update.mdrenamed+9−11

This diff is too big to show here.

content/updates/2018-4-14-update.md → content/posts/2018-4-14-update.mdrenamed+18−20

This diff is too big to show here.

content/updates/2018-4-7-update.md → content/posts/2018-4-7-update.mdrenamed+11−13

This diff is too big to show here.

content/updates/2018-5-16-update.md → content/posts/2018-5-16-update.mdrenamed+17−17

This diff is too big to show here.

content/updates/2018-5-23-update.md → content/posts/2018-5-23-update.mdrenamed+15−16

This diff is too big to show here.

content/updates/2018-5-29-update.md → content/posts/2018-5-29-update.mdrenamed+4−6

This diff is too big to show here.

content/updates/2018-5-30-update.md → content/posts/2018-5-30-update.mdrenamed+13−16

This diff is too big to show here.

content/updates/2018-6-14-update.md → content/posts/2018-6-14-update.mdrenamed+15−15

This diff is too big to show here.

content/updates/2018-6-21-update.md → content/posts/2018-6-21-update.mdrenamed+15−15

This diff is too big to show here.

content/updates/2018-6-6-update.md → content/posts/2018-6-6-update.mdrenamed+14−17

This diff is too big to show here.

content/updates/2018-7-13-update.md → content/posts/2018-7-13-update.mdrenamed+15−16

This diff is too big to show here.

content/updates/2018-7-20-update.md → content/posts/2018-7-20-update.mdrenamed+23−24

This diff is too big to show here.

content/updates/2018-7-3-update.md → content/posts/2018-7-3-update.mdrenamed+16−17

This diff is too big to show here.

content/updates/2018-7-30-update.md → content/posts/2018-7-30-update.mdrenamed+21−22

This diff is too big to show here.

content/updates/2018-8-23-update.md → content/posts/2018-8-23-update.mdrenamed+19−20

This diff is too big to show here.

content/updates/2018-8-30-update.md → content/posts/2018-8-30-update.mdrenamed+14−15

This diff is too big to show here.

content/updates/2018-8-8-update.md → content/posts/2018-8-8-update.mdrenamed+21−22

This diff is too big to show here.

content/updates/2018-9-11-update.md → content/posts/2018-9-11-update.mdrenamed+20−21

This diff is too big to show here.

content/updates/2019-2-11-update.md → content/posts/2019-2-11-update.mdrenamed+11−11

This diff is too big to show here.

content/updates/2019-2-25-update.md → content/posts/2019-2-25-update.mdrenamed+12−12

This diff is too big to show here.

content/updates/2019-2-26-network-update.md → content/posts/2019-2-26-network-update.mdrenamed+8−8

This diff is too big to show here.

content/updates/2019-2-4-update.md → content/posts/2019-2-4-update.mdrenamed+10−12

This diff is too big to show here.

content/updates/2019-3-11-update.md → content/posts/2019-3-11-update.mdrenamed+12−12

This diff is too big to show here.

content/posts/2019-3-27-update.mdnew file+21

This diff is too big to show here.

content/updates/2019-3-4-update.md → content/posts/2019-3-4-update.mdrenamed+11−11

This diff is too big to show here.

content/updates/2019-4-11-update.md → content/posts/2019-4-11-update.mdrenamed+11−11

This diff is too big to show here.

content/updates/2019-5-10-update.md → content/posts/2019-5-10-update.mdrenamed+6−7

This diff is too big to show here.

content/updates/2019-5-17-update.md → content/posts/2019-5-17-update.mdrenamed+6−7

This diff is too big to show here.

content/updates/2019-5-31-update.md → content/posts/2019-5-31-update.mdrenamed+9−10

This diff is too big to show here.

content/blog/2019-5-roadmap.md → content/posts/2019-5-roadmap.mdrenamed+8−8

This diff is too big to show here.

content/updates/2019-6-14-update.md → content/posts/2019-6-14-update.mdrenamed+11−13

This diff is too big to show here.

content/posts/_index.mdnew file+5

This diff is too big to show here.

content/blog/a-founders-farewell.md → content/posts/a-founders-farewell.mdrenamed+36−41

This diff is too big to show here.

content/posts/an-urbit-overview.mdnew file+209

This diff is too big to show here.

content/blog/azimuth-as-multipass.md → content/posts/azimuth-as-multipass.mdrenamed+7−10

This diff is too big to show here.

content/blog/azimuth-is-on-chain.md → content/posts/azimuth-is-on-chain.mdrenamed+13−17

This diff is too big to show here.

content/blog/beliefs-and-principles.md → content/posts/beliefs-and-principles.mdrenamed+28−35

This diff is too big to show here.

content/posts/blockchannel-episode-19-virtual-land-in-the-clouds-with-urbit.mdnew file+11

This diff is too big to show here.

content/posts/blueprint-2017-galen-wolfe-pauly-on-the-distributed-web.mdnew file+11

This diff is too big to show here.

content/blog/bootstrapping-urbit-from-ethereum.md → content/posts/bootstrapping-urbit-from-ethereum.mdrenamed+29−35

This diff is too big to show here.

content/blog/common-objections-to-urbit.md → content/posts/common-objections-to-urbit.mdrenamed+217−224

This diff is too big to show here.

content/posts/epicenter-episode-205-urbit-a-digital-republic-reinventing-the-internet.mdnew file+11

This diff is too big to show here.

content/blog/governance-of-urbit.md → content/posts/governance-of-urbit.mdrenamed+5−10

This diff is too big to show here.

content/posts/governing-the-future-e09-urbit-a-user-owned-internet-on-top-of-the-internet.mdnew file+11

This diff is too big to show here.

content/blog/interim-constitution.md → content/posts/interim-constitution.mdrenamed+33−36

This diff is too big to show here.

content/posts/lambdaconf-2016-curtis-yarvin-urbit-a-clean-slate-functional-operating-stack.mdnew file+11

This diff is too big to show here.

content/posts/lambdaconf-2018-ted-blackman-ford-urbits-build-system.mdnew file+11

This diff is too big to show here.

content/posts/magic.mdnew file+202

This diff is too big to show here.

content/blog/the-100-year-computer.md → content/posts/the-100-year-computer.mdrenamed+13−16

This diff is too big to show here.

content/blog/the-dao-as-a-lesson-in-decentralized-governance.md → content/posts/the-dao-as-a-lesson-in-decentralized-governance.mdrenamed+96−103

This diff is too big to show here.

content/posts/the-ether-review-46-curtis-yarvin-and-galen-wolfe-pauly-on-urbit.mdnew file+11

This diff is too big to show here.

content/posts/the-future-of-precision-agriculture-is-decentralized.mdnew file+10

This diff is too big to show here.

content/blog/the-state-of-landscape.md → content/posts/the-state-of-landscape.mdrenamed+17−20

This diff is too big to show here.

content/blog/the-urbit-address-space.md → content/posts/the-urbit-address-space.mdrenamed+92−98

This diff is too big to show here.

content/blog/toward-a-frozen-operating-system.md → content/posts/toward-a-frozen-operating-system.mdrenamed+86−92

This diff is too big to show here.

content/blog/toward-a-new-clay.md → content/posts/toward-a-new-clay.mdrenamed+230−236

This diff is too big to show here.

content/blog/urbit-and-the-blockchain.md → content/posts/urbit-and-the-blockchain.mdrenamed+87−94

This diff is too big to show here.

content/posts/urbit-and-the-not-so-dark-future-of-the-internet.mdnew file+9

This diff is too big to show here.

content/blog/urbit-grants-and-mid-2019-gifts.md → content/posts/urbit-grants-and-mid-2019-gifts.mdrenamed+8−15

This diff is too big to show here.

content/blog/what-is-urbit-for.md → content/posts/what-is-urbit-for.mdrenamed+65−71

This diff is too big to show here.

content/blog/why-urbit-probably-does-not-need-a-blockchain.md → content/posts/why-urbit-probably-does-not-need-a-blockchain.mdrenamed+158−165

This diff is too big to show here.

content/privacy.md+36−38

This diff is too big to show here.

content/proposals.mddeleted−93

This diff is too big to show here.

content/rfps.mddeleted−40

This diff is too big to show here.

content/terms-of-service.mddeleted−69

This diff is too big to show here.

content/tos.mdnew file+52

This diff is too big to show here.

content/updates/2019-11-06-update.mddeleted−42

This diff is too big to show here.

content/updates/2019-12-06-update.mddeleted−42

This diff is too big to show here.

content/updates/2019-3-27-update.mddeleted−21

This diff is too big to show here.

content/updates/2019-7-25-update.mddeleted−40

This diff is too big to show here.

content/updates/2020-02-06-update.mddeleted−46

This diff is too big to show here.

content/updates/2020-04-04-update.mddeleted−26

This diff is too big to show here.

content/updates/2020-06-15-update.mddeleted−51

This diff is too big to show here.

content/updates/2020-07-27-update.mddeleted−37

This diff is too big to show here.

content/updates/2020-09-30-update.mddeleted−65

This diff is too big to show here.

content/updates/2020-10-29-update.mddeleted−49

This diff is too big to show here.

content/updates/2020-12-01-update.mddeleted−68

This diff is too big to show here.

content/updates/2021-01-15-update.mddeleted−60

This diff is too big to show here.

content/updates/2021-02-19-update.mddeleted−81

This diff is too big to show here.

content/updates/2021-04-01-update.mddeleted−89

This diff is too big to show here.

content/updates/2021-05-05-update.mddeleted−70

This diff is too big to show here.

content/updates/2021-06-16-update.mddeleted−79

This diff is too big to show here.

content/voting-instructions.mddeleted−36

This diff is too big to show here.

gnosis-safe.mddeleted−48

This diff is too big to show here.

lib/buildGlossary.jsdeleted−59

This diff is too big to show here.

lib/buildPageTree.jsdeleted−111

This diff is too big to show here.

lib/cache.jsdeleted−90

This diff is too big to show here.

lib/constants.jsdeleted−129

This diff is too big to show here.

lib/hooks.jsdeleted−71

This diff is too big to show here.

lib/lib.jsdeleted−251

This diff is too big to show here.

lib/rss.jsdeleted−95

This diff is too big to show here.

netlify.tomlnew file+9

This diff is too big to show here.

next.config.jsdeleted−26

This diff is too big to show here.

package-lock.jsondeleted−5276

This diff is too big to show here.

package.jsondeleted−58

This diff is too big to show here.

pages/404.jsdeleted−33

This diff is too big to show here.

pages/[slug].jsdeleted−48

This diff is too big to show here.

pages/_app.jsdeleted−85

This diff is too big to show here.

pages/api/dev-search.jsdeleted−8

This diff is too big to show here.

pages/api/ops-search.jsdeleted−8

This diff is too big to show here.

pages/api/roadmap-search.jsdeleted−8

This diff is too big to show here.

pages/api/search.jsdeleted−45

This diff is too big to show here.

pages/api/sigil.jsdeleted−60

This diff is too big to show here.

pages/api/urbit-org-search.jsdeleted−45

This diff is too big to show here.

pages/applications/[[...application]].jsdeleted−206

This diff is too big to show here.

pages/applications/submit.jsdeleted−143

This diff is too big to show here.

pages/articles/[slug].jsdeleted−84

This diff is too big to show here.

pages/bitcoin.jsdeleted−98

This diff is too big to show here.

pages/blog.jsdeleted−131

This diff is too big to show here.

pages/blog/[slug].jsdeleted−118

This diff is too big to show here.

pages/campus/[[...slug]].jsdeleted−312

This diff is too big to show here.

pages/communities/[slug].jsdeleted−87

This diff is too big to show here.

pages/decentralized-discord.jsdeleted−291

This diff is too big to show here.

pages/ecosystem/index.jsdeleted−416

This diff is too big to show here.

pages/ecosystem/spotlight/[slug].jsdeleted−69

This diff is too big to show here.

pages/events.jsdeleted−181

This diff is too big to show here.

pages/events/[slug].jsdeleted−173

This diff is too big to show here.

pages/getinvolved.jsdeleted−58

This diff is too big to show here.

pages/getting-started/[[...slug]].jsdeleted−314

This diff is too big to show here.

pages/grants.jsdeleted−401

This diff is too big to show here.

pages/grants/[slug].jsdeleted−270

This diff is too big to show here.

pages/grants/apprenticeships.jsdeleted−29

This diff is too big to show here.

pages/grants/bounties.jsdeleted−28

This diff is too big to show here.

pages/grants/proposals.jsdeleted−29

This diff is too big to show here.

pages/grants/rfps.jsdeleted−29

This diff is too big to show here.

pages/groups/[[...group]].jsdeleted−136

This diff is too big to show here.

pages/groups/submit.jsdeleted−152

This diff is too big to show here.

pages/ids/[id].jsdeleted−241

This diff is too big to show here.

pages/ids/submit.jsdeleted−170

This diff is too big to show here.

pages/index.jsdeleted−430

This diff is too big to show here.

pages/marketplaces/[slug].jsdeleted−84

This diff is too big to show here.

pages/organizations/[slug].jsdeleted−179

This diff is too big to show here.

pages/overview/[[...slug]].jsdeleted−147

This diff is too big to show here.

pages/podcasts/[slug].jsdeleted−84

This diff is too big to show here.

pages/trial-over.jsdeleted−35

This diff is too big to show here.

pages/trial.jsdeleted−129

This diff is too big to show here.

pages/updates.jsdeleted−87

This diff is too big to show here.

pages/updates/[slug].jsdeleted−126

This diff is too big to show here.

postcss.config.jsdeleted−6

This diff is too big to show here.

public/images/android-chrome-192x192.pngdeleted

Binary file not shown.

public/images/android-chrome-512x512.pngdeleted

Binary file not shown.

public/images/apple-touch-icon.pngdeleted

Binary file not shown.

public/images/favicon-16x16.pngdeleted

Binary file not shown.

public/images/favicon-32x32.pngdeleted

Binary file not shown.

public/images/favicon.icodeleted

Binary file not shown.

public/images/planet-l2-claim.gifdeleted

Binary file not shown.

public/images/planet-l2-migration.gifdeleted

Binary file not shown.

public/images/planet-l2-transactions.pngdeleted

Binary file not shown.

public/images/sound.svgdeleted−5

This diff is too big to show here.

sass/_main.scssnew file+638

This diff is too big to show here.

sass/_responsive.scssnew file+109

This diff is too big to show here.

sass/indigo.scssnew file+20516

This diff is too big to show here.

sass/primer.scssnew file+16880

This diff is too big to show here.

sass/styles.scssnew file+3

This diff is too big to show here.

scripts/date_to_string_upgrade.jsdeleted−43

This diff is too big to show here.

scripts/event_date_upgrade.jsdeleted−51

This diff is too big to show here.

static/_redirectsnew file+8

This diff is too big to show here.

static/assets/back-arrow.svgnew file+3

This diff is too big to show here.

static/assets/dropdown.svgnew file+1

This diff is too big to show here.

static/assets/menu-close.svgnew file+7

This diff is too big to show here.

static/assets/menu-open.svgnew file+3

This diff is too big to show here.

static/images/aegean-1.pngnew file

Binary file not shown.

static/images/aegean-2.pngnew file

Binary file not shown.

static/images/aegean-3.pngnew file

Binary file not shown.

static/images/aegean.svgnew file+1

This diff is too big to show here.

static/images/arvo-complete.svgnew file+1

This diff is too big to show here.

static/images/arvo-large.svgnew file+84

This diff is too big to show here.

static/images/azimuth.svgnew file+1

This diff is too big to show here.

static/images/blockchain-fade.svgnew file+1

This diff is too big to show here.

static/images/business.svgnew file+1

This diff is too big to show here.

static/images/face.svgnew file+23

This diff is too big to show here.

static/images/faces.svgnew file+88

This diff is too big to show here.

static/images/favicon.iconew file

Binary file not shown.

static/images/file.svgnew file+1

This diff is too big to show here.

static/images/galaxies-old.svgnew file+19

This diff is too big to show here.

static/images/galaxies.svgnew file+1

This diff is too big to show here.

static/images/iot.svgnew file+62

This diff is too big to show here.

static/images/megacorp.svgnew file+1

This diff is too big to show here.

static/images/moons.svgnew file+73

This diff is too big to show here.

static/images/network-diagram.gifnew file

Binary file not shown.

static/images/network-diagram.svgnew file+1240

This diff is too big to show here.

static/images/new-blockchain.svgnew file+1

This diff is too big to show here.

static/images/new-independence.svgnew file+1

This diff is too big to show here.

static/images/offchain.svgnew file+1

This diff is too big to show here.

static/images/passcode.svgnew file+1

This diff is too big to show here.

static/images/personal-blockchain 2.svgnew file+129

This diff is too big to show here.

static/images/personal-blockchain.svgnew file+1

This diff is too big to show here.

static/images/planets-old.svgnew file+43

This diff is too big to show here.

static/images/planets.svgnew file+1

This diff is too big to show here.

static/images/program.svgnew file+1

This diff is too big to show here.

static/images/server.svgnew file+1

This diff is too big to show here.

static/images/single-interface-green.svgnew file+109

This diff is too big to show here.

static/images/single-interface.svgnew file+111

This diff is too big to show here.

static/images/standard-code.svgnew file+1

This diff is too big to show here.

static/images/stars-old.svgnew file+8

This diff is too big to show here.

static/images/stars.svgnew file+1

This diff is too big to show here.

static/images/sticker-1.svgnew file+6

This diff is too big to show here.

static/images/sticker-2.svgnew file+11

This diff is too big to show here.

static/images/technical-problem.svgnew file+1

This diff is too big to show here.

static/images/their-code.svgnew file+1

This diff is too big to show here.

static/images/urbit-complete.svgnew file+1

This diff is too big to show here.

static/images/what-urbit-is.svgnew file+1

This diff is too big to show here.

static/php/airtable/hoonschool.phpnew file+3

This diff is too big to show here.

static/php/airtable/src/Airtable.phpnew file+118

This diff is too big to show here.

static/php/airtable/src/Request.phpnew file+155

This diff is too big to show here.

static/php/airtable/src/Response.phpnew file+246

This diff is too big to show here.

static/primer.jsnew file+61

This diff is too big to show here.

static/scripts.jsnew file+331

This diff is too big to show here.

tailwind.config.jsdeleted−19

This diff is too big to show here.

templates/.gitignorenew file+2

This diff is too big to show here.

templates/404.htmlnew file+25

This diff is too big to show here.

templates/base.htmlnew file+41

This diff is too big to show here.

templates/doc.htmlnew file+28

This diff is too big to show here.

templates/index.htmlnew file+47

This diff is too big to show here.

templates/page.htmlnew file+27

This diff is too big to show here.

templates/partials/footer.htmlnew file+57

This diff is too big to show here.

templates/partials/navigation-docs.htmlnew file+80

This diff is too big to show here.

templates/partials/navigation-special.htmlnew file+60

This diff is too big to show here.

templates/partials/navigation.htmlnew file+60

This diff is too big to show here.

templates/partials/search-overlay.htmlnew file+17

This diff is too big to show here.

templates/partials/top-alert.htmlnew file+9

This diff is too big to show here.

templates/posts/list.htmlnew file+50

This diff is too big to show here.

templates/posts/single.htmlnew file+57

This diff is too big to show here.

templates/primer.htmlnew file+1044

This diff is too big to show here.

templates/robots.txtnew file+1

This diff is too big to show here.

templates/rss.xmlnew file+21

This diff is too big to show here.

templates/sections/docs.htmlnew file+28

This diff is too big to show here.

templates/sections/docs/chapters.htmlnew file+28

This diff is too big to show here.

templates/sections/index.htmlnew file+46

This diff is too big to show here.

templates/shortcodes/soundcloud.htmlnew file+9

This diff is too big to show here.

templates/shortcodes/youtube.htmlnew file+8

This diff is too big to show here.

vercel.jsondeleted−271

This diff is too big to show here.