on master help sign in
Merge branch 'master' into urbit.org2
commitf0623c236208280b543a8766c94ac9049691c48d authorMatilde Park <matilde@tlon.io> dateTue 27 Jul 2021, 19:28 (5 years ago) parentd3edaba0e5d721
47 files changed+1679−81
content/Bitcoin-wallet.md+17−10 content/blog/community-spotlight-the-portico.md+8−8 content/blog/first-contract.md+292 content/blog/metaphase.md+15−7 content/blog/on-christopher-alexander.md+69 content/events/2021-07-01-developer-call-runtime-future.md+22 content/events/2021-07-15-developer-call-yakshaving.md+22 content/faq.md+24−7 content/grants/analytics-script.md+1−1 content/grants/bitcoin-wallet-maintenance.md+61 content/grants/bridge-l2-revamp.md+54 content/grants/contacts.md+34 content/grants/content-producer.md+37 content/grants/feed-aggregator.md+100 content/grants/guide-to-s3.md+32 content/grants/host-three-college-university-urbit-meetups-1.md+8−2 content/grants/host-three-college-university-urbit-meetups-2.md+8−2 content/grants/host-three-college-university-urbit-meetups-3.md+8−2 content/grants/host-two-urbit-meetups-1.md+8−2 content/grants/host-two-urbit-meetups-10.md+8−2 content/grants/host-two-urbit-meetups-11.md+8−2 content/grants/host-two-urbit-meetups-12.md+55 content/grants/host-two-urbit-meetups-2.md+8−2 content/grants/host-two-urbit-meetups-3.md+8−2 content/grants/host-two-urbit-meetups-4.md+8−2 content/grants/host-two-urbit-meetups-5.md+8−2 content/grants/host-two-urbit-meetups-6.md+8−2 content/grants/host-two-urbit-meetups-7.md+8−2 content/grants/host-two-urbit-meetups-8.md+8−2 content/grants/host-two-urbit-meetups-9.md+8−2 content/grants/json-jet.md+48 content/grants/login-with-urbit.md+88 content/grants/network-explorer.md+231 content/grants/nuck-jet.md+56 content/grants/ra-page-tracking.md+32 content/grants/ra-segfaults.md+29 content/grants/ra-stack-overflow.md+29 content/grants/slaw-scot-jets.md+69 content/grants/ua-collaborative-text-editor.md+2−2 content/grants/ua-heads-up-poker.md+2−2 content/grants/ua-marketplace.md+1−1 content/grants/ucal-google-and-outlook-integration.md+1−1 content/grants/urbit-irc-bridge.md+46 content/grants/video-content-manager.md+1−1 content/grants/webrtc.md+78 content/understanding-urbit/roadmap.md+1−1 content/using/os/getting-started.md+10−12
content/Bitcoin-wallet.md+17−10
@@ -1,37 +1,44 @@
11+++
2−title = "Bitcoin Wallet Disclaimers"
2+title = "Bitcoin Wallet"
33+++
44
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.
56
7+### Instructions
68
7−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.
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.
812
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)>)).
914
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.
1018
1119### Verify
1220
13−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.md) repo.
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.md) repo.
1422
15−Instructions reproduced here:
23+Instructions reproduced here:
1624
1725To verify your version of the bitcoin wallet, run the following command in the dojo:
1826`> +btc-wallet-check`
1927It should return with the following hash:
2028`0v9t022.n8kv1.5emkt.s2p9i.hvsa9`
2129
30+### Disclaimer Statement
2231
23−### Statement
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:
2433
25−The Urbit Bitcoin Wallet and its related components are experimental pieces of software. You are free to review the open-source code before using:
26−- [Wallet](https://github.com/urbit/urbit/tree/master/pkg/btc-wallet)
34+- [Wallet](https://github.com/urbit/urbit/tree/master/pkg/btc-wallet)
2735- [Full Node Provider Agents](https://github.com/timlucmiptev/btc-agents)
2836
29−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. 
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.
3038
3139You 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.
3240
33−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. 
34−
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.
3542
3643### License
3744
content/blog/community-spotlight-the-portico.md+8−8
@@ -3,14 +3,14 @@ title = "Community Spotlight: The Portico"
33date = 2021-05-04
44description = "Interview with The Portico founder Josh Reagan"
55[extra]
6−author = "~tirwyd-sarmes"
6+author = "Matt"
77ship = "~tirwyd-sarmes"
88image = "https://media.urbit.org/site/posts/essays/orthodoxchurch.jpg"
99+++
1010
1111![](https://media.urbit.org/site/posts/essays/orthodoxchurch.jpg)
1212
13−*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.*
13+_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._
1414
1515For 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.
1616
@@ -26,13 +26,13 @@ I encourage you to take a look. Find The Portico at ~topnup-firber/the-portico.
2626
2727\-\-\-\-
2828
29−**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.**
29+**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.**
3030
31−It’s tough to say with certainty—I’ve never read *The Benedict Option*.
31+It’s tough to say with certainty—I’ve never read _The Benedict Option_.
3232
3333A 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.
3434
35−[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.
35+[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.
3636
3737My 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)?
3838
@@ -62,7 +62,7 @@ None of these options is appealing. Tarski came up with a solution that mostly s
6262
6363Is 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.
6464
65−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.
65+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.
6666
6767Mathematical 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.
6868
@@ -82,7 +82,7 @@ For many ancients, the term “λόγος” meant something like “divine prin
8282
8383We 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.
8484
85−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)).
85+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)>).
8686
8787Thus 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.
8888
@@ -134,4 +134,4 @@ Some people may want to see a little of everything. If atheists want to join our
134134
135135One 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.
136136
137−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.
137+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/first-contract.mdnew file+292
@@ -0,0 +1,292 @@
1++++
2+title = "Azimuth’s First Contract Upgrade"
3+date = 2021-06-05
4+description = "Galactic Senate makes first concrete action"
5+[extra]
6+author = "Jonathan Paprocki and Mark"
7+ship = "~datnut-pollen and ~palfun-foslup"
8+image = "https://media.urbit.org/site/posts/essays/land3.jpg"
9++++
10+
11+<br>
12+
13+![milestone](https://media.urbit.org/site/posts/essays/land3.jpg)
14+
15+<br>
16+
17+Recently, the [first upgrade](https://github.com/urbit/azimuth/pull/35) to the
18+[Azimuth](@/docs/glossary/azimuth.md) smart contracts which make up Urbit ID was
19+put up to an [upgrade proposal vote](@/docs/glossary/upgrade.md) by the
20+[Galactic Senate](@/docs/glossary/senate.md). This vote is still open and will
21+last for 30 days (June 20th) or until an absolute majority is reached. We’d like
22+to take this opportunity to discuss two things. [First](#changelist), what the
23+proposed changes are, and [second](#senate), a review of how Urbit governance
24+works and where we’re at in the decentralization process.
25+
26+Before we dive into what the proposed changes are, let’s review what the Senate
27+is actually capable of changing. Urbit ID is really two sets of smart contracts:
28+Azimuth and [Ecliptic](@/docs/glossary/ecliptic.md). Azimuth is the data of the
29+public key infrastructure - roughly, this is the list of
30+[ships](@/docs/glossary/ship.md) and which Ethereum addresses own them, along
31+with other data such as networking keys and sponsorship status. The Senate has
32+no ability to touch this data directly. This is in direct contrast to all
33+existing centralized services, where your account is always at risk of being
34+taken away from you. What the Senate can change is Ecliptic, which is the
35+“business logic” that decides how you can interact with the data in Azimuth.
36+These are mechanisms such as what powers various
37+[proxies](@/docs/glossary/proxies.md) have, how stars/planets are released over
38+time, and how sponsorship works. Put another way, the data and database format
39+must remain the same, but the rules by which we interact with it may change
40+according to the governance rules we [detail below](#senate).
41+
42+## Changelist {#changelist}
43+
44+The Galactic Senate is voting on the following changes to Ecliptic:
45+
46+- Fixed ERC721 compatibility
47+- Self-modifying proxies
48+- Upgraded Claims contract
49+
50+### Fixed ERC721 compatibility
51+
52+In Ecliptic, the contract includes various functions and events
53+that make it conform to the ERC721 (non-fungible token) standard. However, two
54+events have [ever so slightly
55+non-confirming](https://github.com/urbit/azimuth/issues/8) descriptions. This
56+causes Ethereum explorers like Etherscan to incorrectly recognize Azimuth as
57+ERC20 (fungible token), rather than ERC721.
58+
59+The proposed change simply modifies the event descriptions to accurately match
60+the ERC721 definition. This does not affect any functionality within the
61+contract itself.
62+
63+### Self-modifying proxies
64+
65+Owners of Azimuth assets are allowed to configure "proxy addresses" for those
66+assets: Ethereum addresses allowed to act "as" the owner, but only for a subset
67+of operations. For example, setting the management proxy will let you change
68+your networking keys and sponsor using that address, just like your ownership
69+address can. This is useful for keeping the ownership keys in very cold storage
70+while still letting you perform lower-value operations.
71+
72+Currently, only the ownership address is allowed to change proxy addresses.
73+Fairly early on after Azimuth's deployment, we realized it might be nice for
74+proxies to be able to change themselves.
75+
76+This means that, in addition to being able to configure networking keys and
77+sponsorship, your management proxy would be able to assign a new management
78+proxy. This would allow you, or a trusted third party holding your management proxy,
79+to rotate your proxy keys without needing to take your ownership keys out of cold
80+storage.
81+
82+### Upgraded Claims contract
83+
84+[The Claims
85+contract](https://github.com/urbit/azimuth/blob/master/contracts/Claims.sol)
86+lets asset managers associate various "claims" with their identity. For
87+example, an Ethereum address to send donations to, or proving ownership of a
88+Twitter account.
89+
90+For ease of use by off-chain tools and services, the contract emits events
91+(notifications) whenever any claims are updated. However, the current version of
92+the contract has a bug where it does not emit events when all claims are removed
93+at once (clearClaims()). This "gap" in the event stream makes it much more
94+difficult to write off-chain tools around this contract. Considering Claims has
95+seen [practically no
96+use](https://etherscan.io/address/0xe7e7f69b34d7d9bd8d61fb22c33b22708947971a#events)
97+since it was first deployed, it should not be a problem to simply start over
98+fresh with a new contract that contains [the
99+fix](https://github.com/urbit/azimuth/pull/32) for the described bug.
100+
101+The reason we must do an Ecliptic upgrade to switch to a new Claims contract, is
102+that it is tied in with the logic for transferring an asset. If an asset is
103+flagged for "reset" (common when transferring to/from someone other than
104+yourself), its configured proxies, networking keys and claims are cleared during
105+transfer. As such, Ecliptic will need to know about the address of the new
106+Claims contract.
107+
108+## Urbit Governance {#senate}
109+
110+![geology](https://media.urbit.org/site/posts/essays/b1.jpg)
111+
112+The ultimate goal of Urbit is to become a digital republic manifested as a peer
113+to peer network owned and controlled by its users. The goal of Tlon, then, is to
114+become one of many companies who build products for Urbit rather than being the primary
115+driving force behind its development. We’d like to take this opportunity to
116+spell out our perspective on where we’re at in that process. Here are some previous posts that are relevant, but please note that
117+some of them are several years old and as such may not accurately reflect our
118+current position, but still serve as useful historical markers. We hope to
119+revisit and refresh these documents soon.
120+
121+- [2016.5.16 - Interim
122+ Constitution](@/blog/interim-constitution.md)
123+- [2016.5.16 - The
124+ Urbit Address Space](@/blog/the-urbit-address-space.md)
125+- [2016.6.24 - The DAO as a Lesson in Decentralized
126+ Governance](@/blog/the-dao-as-a-lesson-in-decentralized-governance.md)
127+- [2019.1.11 - Governance of
128+ urbit.org](@/blog/governance-of-urbit.md)
129+
130+### Galactic Senate
131+
132+The Galactic Senate is composed of all [galaxy](@/docs/glossary/galaxy.md)
133+holders, which at present consists of more than 100 individuals and a few
134+organizations, including Tlon and the Urbit Foundation. Using the Azimuth
135+voting contract, the Senate can present and vote on two kinds of proposals:
136+[document proposals](@/docs/glossary/docvote.md) and [upgrade
137+proposals](@/docs/glossary/upgrade.md). Thus far, all matters which the Senate
138+has voted on have been document proposals. The [most recent
139+vote](https://github.com/urbit/azimuth/pull/34) declared the Urbit network as
140+(i) being secure (as confirmed by a [third party
141+audit](@/blog/security-audit.md)) and (ii) having reached continuity (as in, no
142+further [network breaches](@/docs/glossary/breach.md) are expected). Previous votes
143+were to declare that [Azimuth is live](https://github.com/urbit/azimuth/pull/25)
144+and that [Arvo is stable](https://github.com/urbit/azimuth/pull/24).
145+
146+### Address space distribution
147+
148+Perhaps the most informative measure of how decentralized Urbit is in terms of
149+how many independent parties hold address space. By the very nature of Urbit, it
150+is impossible to know this with great accuracy (a common feature of
151+decentralized projects). However, the movement of galaxies is closely watched
152+and thus we have a fairly good idea of how distributed they are.
153+
154+In the beginning, Urbit’s creator Curtis Yarvin was in possession of the entire
155+address space - all 256 galaxies, and everything underneath it. A network of one
156+is no network at all, and so over the last decade Urbit’s development has been
157+primarily driven by selling or giving away these galaxies. On [June 1,
158+2016](@/blog/the-urbit-address-space.md), the allocation was:
159+
160+> 95, to the Tlon Corporation. 50, to urbit.org, the future community
161+> foundation. 40, to Tlon employees and their family members (24 to Curtis, who
162+> started in 2002; 16 to everyone else, who started in 2014). 34, to outside
163+> investors in Tlon. 37, to 33 other individuals, who donated to the project,
164+> contributed code or services, won a contest, or were just in the right place
165+> at the right time.
166+
167+Since then, Tlon has sold a number of
168+its galaxies to fund development and others have changed hands to the point
169+that Tlon and urbit.org no longer possess a majority share of galaxies. In
170+January 2019, [Curtis gave all of his galaxies](@/blog/a-founders-farewell.md) to
171+Tlon when he left the project. In August 2020 we shared an update on the [known
172+distribution of address space](@/blog/value-of-address-space-pt3.md), where
173+Curtis’ galaxies are marked as Tlon’s “naked galaxies”. Shortly thereafter, Tlon
174+disbursed its naked galaxies among the employees that wanted one who did not
175+already possess one, thus removing Tlon and urbit.org’s controlling share of the
176+Senate. Galaxies held by current and former Tlon employees are entirely
177+independent of Tlon Corporation—they may do with them, and vote with them, as
178+they please. `~ravmel-ropdyl` plans to give more color to this decision in the
179+near future.
180+
181+Distribution of stars is much more difficult to know. There is an active market
182+for stars on [OpenSea](https://opensea.io/collection/urbit-id), so we know that
183+they are changing hands frequently, but checking the number of distinct Ethereum
184+addresses that hold stars does not tell you very much information since a single person can control multiple adresses.
185+
186+### Software and smart contracts
187+
188+As was written in [The DAO as a Lesson in Decentralized
189+Governance](https://urbit.org/blog/the-dao-as-a-lesson-in-decentralized-governance/),
190+we are keenly aware of the threat of _decentralization theater_. Urbit has
191+undergone steady progress towards decentralization, and with the developments we
192+outline below, it’s never been more clear that the project is beginning to leave
193+the cradle of Tlon. It’s also important to note that the decentralization of a
194+project is always a movement away from an initial centralized state⁠—you cannot
195+go from A to Z without first traversing every letter in between. While Urbit was
196+centralized at the beginning, the journey towards a network owned and
197+controlled by the users is now well underway.
198+
199+In the past, nearly all Urbit software was written by Tlon. While Tlon is still
200+the only corporation actively updating Urbit’s MIT-licensed open source
201+software, namely [Vere](@/docs/glossary/vere.md) (the runtime),
202+[Arvo](@/docs/glossary/arvo.md) (the kernel),
203+[Landscape](@/docs/glossary/landscape.md) (the client), and
204+[Bridge](@/docs/glossary/bridge.md) (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).
205+
206+The only real power Tlon holds over Urbit is the ability to push [OTA
207+updates](@/docs/glossary/ota-updates.md) via `~zod`, and suggest that people
208+download our binaries. To the best of our knowledge, all extant galaxies
209+retrieve their OTA updates from `~zod`, who forward it to their stars, who
210+forward it to their planets. This software distribution route is merely a
211+convenient default setting. Ships initially retrieve OTA updates from their
212+sponsor, but they have full authority to retrieve updates from whoever they want
213+with the `|ota` command, or even to only install software updates by hand if
214+they so choose.
215+
216+In the future, one can easily imagine many organizations shipping their own
217+distributions of Urbit from their own urbit nodes, somewhat analogously to the
218+large number of Linux distributions which exist today. There is nothing we can
219+do to stop a group from forking Urbit, declaring `~sampel-palnet` the new `~zod`
220+(both for updates and for sponsorship purposes), and retrieving all OTA updates
221+via that route and building their own binaries. This is all by design, and we
222+wouldn’t want it any other way.
223+
224+The use of the Azimuth smart contracts is also somewhat optional. By changing a
225+few lines of code to point their ships at another set of PKI smart contracts,
226+they could rid themselves of hierarchical peer discovery entirely and make use
227+of some other routing strategy such as [Kademlia based DHT
228+routing](https://en.wikipedia.org/wiki/Kademlia). This would likely give rise to
229+an entirely separate network. The fact that the network is fully capable of such
230+a schism helps keep the Senate honest and accountable to the users. If they ever
231+were to vote on a contract modification that greatly angered or upset a portion
232+of the user base, they would be inviting such a schism and be entirely deserving
233+of it. In that sense, the power to control the network is already held by the
234+users, they just have not yet had a reason to make use of it.
235+
236+### Legitimacy
237+
238+The only way by which Tlon and the Senate hold any power is via legitimacy.
239+Vitalik Buterin recently wrote a [very informative
240+article](https://vitalik.ca/general/2021/03/23/legitimacy.html) on the role of
241+legitimacy in decentralized governance, and I do not know of a better source to
242+understand how Tlon and the Senate are kept in check by the users. Besides the
243+DAO split resulting in Ethereum and Ethereum Classic mentioned in the article,
244+perhaps the most prominent example of the power users have over a decentralized
245+network is the saga of [Steem and Justin
246+Sun](https://www.coindesk.com/justin-sun-bought-steemit-steem-moved-to-limit-his-power).
247+The short version of the story is that Justin Sun bought a controlling share of
248+the Steem blockchain and attempted to exert control over it, and the users
249+banded together to fork the blockchain into one called Hive, which was identical
250+to Steem except with Sun’s token balance set to zero. An analogous outcome for
251+Urbit would be that the Senate makes sweeping changes to the PKI and invites a
252+schism like that outlined above.
253+
254+For these reasons, there are strong disincentives for any one organization or
255+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
256+for one party to accumulate as much power as they can manage since the cost to
257+the citizens to overthrow that power is enormous. Thus, only especially
258+egregious displays of power ever result in rebellion. Within the Urbit republic,
259+users need only to change the code they run to leave the Senate powerless, and
260+so the threat of rebellion is much more real. We estimate that within a digital
261+republic like Urbit, the centrifugal forces outweigh the centripetal forces, and
262+that the outcome of this is more stable than the reverse.
263+
264+### Why have governance at all?
265+
266+An important question the reader may still have lingering is: why does Urbit
267+need governance at all? The short answer is: (i) there will always be necessary
268+protocol upgrades that cannot be foreseen, and (ii) a total lack of governance
269+inevitably gives rise to a shadow government with undefined powers that is
270+almost impossible to hold accountable.
271+
272+With (ii), we see this to be the case on many early blockchain projects where
273+power is shared by the developers and the miners, but what each is capable of
274+doing has never been codified, and thus users of the blockchain can never have a
275+great deal of certainty of what changes might occur in the future. This doesn’t
276+guarantee a bad outcome, but it does create more wariness among developers when they cannot know whether they really have a say in
277+the project's direction. Recognizing this issue, many newer blockchain and
278+blockchain-adjacent projects have built-in governance mechanisms that lay out
279+exactly what an individual can expect should they join and contribute to that
280+network.
281+
282+As for (i), with Urbit being a wholly new kind of network, it would take
283+incredible luck to get the PKI exactly right on the very
284+first try without ever needing another modification. Thus, some mechanism was
285+needed to guarantee that the PKI’s logic could be altered. Leaving control of
286+Azimuth in the hands of Tlon would have just granted Tlon dictatorial power, which Tlon nor Urbit users desired. There’s certainly
287+room to argue that the Galactic Senate is not a perfect system: our interim
288+constitution did outline potential roles for stars and planets to play in
289+governance in the future, so there is ample opportunity for the system to evolve
290+in response to the will of the users. As always, it is important to keep in mind
291+the unfinished nature of the Urbit of today and the still moldable clay of the
292+Urbit of tomorrow⁠—nothing yet is set in stone.
content/blog/metaphase.md+15−7
@@ -14,7 +14,15 @@ image = "https://media.urbit.org/site/posts/essays/metaphase.jpg"
1414
1515<br>
1616
17−*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 `|ota ~lomlyx-lopsem-nidsut-tomdun %kids` (you may have to resolve a merge conflict using `|merge %home ~lomlyx-lopsem-nidsut-tomdun %kids, =gem %take-that`). We will surface this option more broadly in a future settings overhaul.*
17+_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:_
18+
19+```
20+|ota ~hanruc-nalfus-nidsut-tomdun %kids
21+|merge %home ~hanruc-nalfus-nidsut-tomdun %kids, =gem %take-that
22+|merge %kids ~hanruc-nalfus-nidsut-tomdun %kids, =gem %take-that
23+```
24+
25+_We will surface this option more broadly in a future settings overhaul._
1826
1927A 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.
2028
@@ -22,7 +30,7 @@ After release, we received some feedback from users on the behaviour and design
2230
2331As 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.
2432
25−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.
33+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.
2634
2735## Landscapers and lifecycles
2836
@@ -38,9 +46,9 @@ We traditionally tended toward solving those problems by writing the simplest po
3846
3947For 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”).
4048
41−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.
49+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.
4250
43−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.
51+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.
4452
4553By 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.
4654
@@ -51,7 +59,7 @@ That said, our userspace infrastructure is maturing, so we could at least organi
5159So now, before we could launch a stable stream, we had some things to do first:
5260
5361- **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.
54−- **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.
62+- **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.
5563- **We wanted to release the notification-store**. After the October 2020 groups release, Landscape simply wouldn’t be complete without it.
5664- 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.
5765
@@ -63,12 +71,12 @@ And for intrepid users, you can opt-in to a development stream and help us find
6371
6472## Mitosis
6573
66−Describing our progress so candidly can feel strange — after all, it sounds so *early*. But to me, it’s exciting. It’s mitosis.
74+Describing our progress so candidly can feel strange — after all, it sounds so _early_. But to me, it’s exciting. It’s mitosis.
6775
6876Take 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.
6977
7078Now, 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.
7179
72−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.
80+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.
7381
7482But this is, after all, how a body forms.
content/blog/on-christopher-alexander.mdnew file+69
@@ -0,0 +1,69 @@
1++++
2+title = "On Christopher Alexander"
3+date = 2021-07-20
4+description = "An overview of his writing and relevance"
5+[extra]
6+author = "Matt"
7+ship = "~tirwyd-sarmes"
8+image = "https://media.urbit.org/site/posts/essays/timelesswaybridge.png"
9++++
10+
11+![](https://media.urbit.org/site/posts/essays/timelesswaybridge.png)
12+
13+_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_
14+
15+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.
16+
17+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.
18+
19+![](https://media.urbit.org/site/posts/essays/villagediagram.png)
20+
21+_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).
22+
23+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_.
24+
25+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.
26+
27+_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.
28+
29+![](https://media.urbit.org/site/posts/essays/patternlanguageexamples.png)
30+
31+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.
32+
33+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.
34+
35+![](https://media.urbit.org/site/posts/essays/timelesswayexamples.png)
36+
37+_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.
38+
39+You might be wondering how Christopher Alexander is relevant to Urbit?
40+
41+That depends on who you ask.
42+
43+**Galen (~ravmel-ropdyl)**
44+
45+> 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.
46+>
47+> 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_.
48+
49+**Josh (~wolref-podlex)**
50+
51+> _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.
52+>
53+> 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.
54+>
55+> 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.
56+
57+**Édouard (~fabled-faster)**
58+
59+> I enjoy telling people unfamiliar with Urbitand 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;.
60+>
61+> 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.
62+>
63+> 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):
64+>
65+> > _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._
66+>
67+> 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.
68+
69+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/events/2021-07-01-developer-call-runtime-future.mdnew file+22
@@ -0,0 +1,22 @@
1++++
2+
3+title = "Developer Call: The Urbit Runtime and its Future"
4+date = 2021-07-01
5+[extra]
6+pinned = false
7+host = "Ted Blackman (~rovnys-ricfer)"
8+guests = "Joe Bryan (~master-morzod)"
9+time = "9:00 PDT"
10+location = "Online Event"
11+image = ""
12+registration_url = "https://www.meetup.com/urbit-sf/events/279137337/"
13+description = "The current and future thinking about the Urbit runtime"
14+youtube = "z0grAh_yhE8"
15+
16++++
17+
18+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.
19+
20+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.
21+
22+As always, join us for happy hour after the talk.
content/events/2021-07-15-developer-call-yakshaving.mdnew file+22
@@ -0,0 +1,22 @@
1++++
2+
3+title = "Developer Call: Urbit Yakshaving"
4+date = 2021-07-15
5+[extra]
6+pinned = false
7+host = "Josh Lehman (~wolref-podlex)"
8+guests = "Jake Miller (~littel-wolfur)"
9+time = "9:00 PDT"
10+location = "Online Event"
11+image = ""
12+registration_url = "https://www.meetup.com/urbit-sf/events/279349114/"
13+description = "A look at ~littel-wolfer's Hoon development setup"
14+youtube = "AG6IPaXbiiY"
15+
16++++
17+
18+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.
19+
20+Jake considers himself a recovering Fintech engineer currently working at Tlon. He is interested in building learning systems and tools in Urbit.
21+
22+Please join us for Happy Hour after the talk to ensure all your burning yakshaving questions get answered.
content/faq.md+24−7
@@ -78,7 +78,7 @@ In addition to the three classes of identities mentioned above, there are two ot
7878
7979### What is a `@p`? Why is my username generated for me? {#what-is-patp}
8080
81−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.
81+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.
8282
8383These 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.
8484
@@ -112,7 +112,7 @@ Urbit is designed to be as simple as possible. The sponsorship tree for Urbit ID
112112
113113This pattern exists because it’s a simple way to enforce the scarcity of addresses and build a friendly network. When a tier of the address space begins to be populated, we start populating the next tier down. When Urbit nears the limit of <span class="mono">2<sup>32</sup> (4B)</span> planets, we’ll figure out a way to populate the <span class="mono">2<sup>64</sup></span> moons. The galaxies that govern the Urbit ID contracts can always vote to upgrade them — and we expect that they will.
114114
115−The problem with populating the moons now is that <span class="mono">2<sup>64</sup></span> is a *really, really big* number. We’ll need some way of differentiating between humans and their devices (to prevent devices turning into rogue botnets). But that’s a hard problem, and we prefer to start with the simplest possible solution before solving hard problems. The current scheme works. Once we need to update it, we’ll figure it out.
115+The problem with populating the moons now is that <span class="mono">2<sup>64</sup></span> is a _really, really big_ number. We’ll need some way of differentiating between humans and their devices (to prevent devices turning into rogue botnets). But that’s a hard problem, and we prefer to start with the simplest possible solution before solving hard problems. The current scheme works. Once we need to update it, we’ll figure it out.
116116
117117The 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.
118118
@@ -120,7 +120,23 @@ It’s also worth noting that, while there are almost 8B people on Earth, there
120120
121121(For more background on why Urbit ID is the way it is, read [this](/understanding-urbit/urbit-id/).)
122122
123−## Urbit HD Wallet
123+## Urbit Security
124+
125+### How secure is Urbit right now? {#how-secure-is-urbit}
126+
127+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.md).
128+
129+[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.
130+
131+In late 2020, Urbit's [Ames](@/docs/glossary/ames.md) networking protocol was audited by [Leviathan Security](https://www.leviathansecurity.com/). You can read about this milestone [here](@/blog/security-and-continuity.md).
132+
133+The security of the runtime, [Vere](@/docs/vere/_index.md), has not yet been adequately assessed or systematically hardened.
134+
135+All communication on Urbit is end-to-end encrypted. However, the [event log](@/docs/glossary/eventlog.md) is not encrypted at rest but we plan to give users that option in the future.
136+
137+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.
138+
139+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`.
124140
125141### What is the Urbit HD Wallet? {#urbit-hd-wallet}
126142
@@ -171,11 +187,12 @@ The nature of decentralization is such that there is no authority that has the p
171187
172188Below we list some good practices for storing keys, strictest first. Higher-value assets should be secured with stricter measures.
173189
174−#### Security Tier 1: Cold storage*
190+#### Security Tier 1: Cold storage\*
175191
176192Cold 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.
177193
178194Cold storage media options:
195+
179196- 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.
180197- Storing the secret on a brand-new USB stick or hard drive that has never been connected to a networked machine.
181198- Storing the secret on a hardware wallet like Ledger or Trezor.
@@ -266,14 +283,14 @@ Your sponsor, a star or galaxy that your ship is connected to, may send you new
266283
267284Follow our guide on how to boot a ship [here](/getting-started/planet).
268285
269−Get on the [mailing list](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&amp;id=be143888d2). Learn [Hoon](/docs/hoon/hoon-school/). Sign up for [Hooniversity](https://hooniversity.org/). [Make stuff](https://grants.urbit.org).
270−
286+Get on the [mailing list](https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&id=be143888d2). Learn [Hoon](/docs/hoon/hoon-school/). Sign up for [Hooniversity](https://hooniversity.org/). [Make stuff](https://grants.urbit.org).
271287
272288## Urbit Grants
273289
274290### What are the different types of grants? {#grants-1}
275291
276292There are three ways to receive a [grant of stars](https://grants.urbit.org/) for your contribution to the Urbit ecosystem.
293+
277294- 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.
278295- 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.
279296- 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.
@@ -352,7 +369,7 @@ Here are a few important points from the bounty and proposal contracts:
352369
353370- **No employment relationship:** You agree that being approved for the grant or bounty does not imply any employment relationship with Tlon.
354371
355−- **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.
372+- **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.
356373
357374- **Governing law:** The agreement is governed by the laws of the State of California.
358375
content/grants/analytics-script.md+1−1
@@ -8,7 +8,7 @@ grant_category = ["App Dev"]
88image = ""
99description = "Write a generator that exports chat data into a CSV."
1010reward = 1
11−assignee = ""
11+assignee = "~hosted-fornet"
1212completed = false
1313work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0015&prefill_Grant+Name=Analytics%20Script"
1414+++
content/grants/bitcoin-wallet-maintenance.mdnew file+61
@@ -0,0 +1,61 @@
1++++
2+title = "Bitcoin Wallet Maintenance"
3+date = 2021-06-17
4+[taxonomies]
5+grant_type = ["Bounty"]
6+grant_category = ["App Dev", "Arvo"]
7+[extra]
8+image = ""
9+description = "Help us maintain the Bitcoin Wallet."
10+reward = 3
11+mentor = "~timluc-miptev"
12+assignee = "~finned-palmer"
13+completed = false
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0032&prefill_Grant+Name=Bitcoin%20Wallet%20Maintenance"
15++++
16+
17+# Overview
18+
19+The Urbit Bitcoin Wallet has been integrated into the core distribution, and its
20+maintenance is now passing back to the community via the Urbit Foundation.
21+
22+Our goal is to maintain this product at a high level of usability and also add
23+significant features to it over time. We want usage to become ubiquitous and
24+easy within Urbit, while integrating with outside wallets/signing devices and
25+internal applications.
26+
27+If you have strong development skills and are looking to make an impact with
28+your Urbit development, this is the project to be on. We'll likely recruit more
29+than one contributor for this role.
30+
31+## Types of work
32+
33+The below is a non-exhaustive list of the types of work we will need:
34+
35+- hardware wallet support
36+- progress meters for wallet scanning
37+- performance improvements for Bitcoin providers
38+- mempool scanning
39+- shoe CLI interface for terminal usage in Urbit
40+- general maintenance as bugs arise
41+
42+## Requirements
43+
44+### Skills
45+
46+- Experience with modern React, or
47+- Hoon experience (for backend maintenance and improvement)
48+
49+Having both skills is great.
50+
51+### Time Commitment
52+
53+- at least 10 hours/week
54+- 2-3 months minimum
55+- weekly check-in meeting with `~timluc-miptev` (Technical Director at Urbit Foundation)
56+
57+## Compensation
58+
59+- 1 star per month initially (assuming ~10 hours/week part-time)
60+- more stars can be negotiated if the developer has greater availability and can
61+ commit more time
content/grants/bridge-l2-revamp.mdnew file+54
@@ -0,0 +1,54 @@
1++++
2+title = "Bridge UI/UX Revamp for Layer 2"
3+date = 2021-06-01
4+[taxonomies]
5+grant_type = ["Bounty"]
6+grant_category = ["Azimuth"]
7+[extra]
8+image = ""
9+description = "Our Layer 2 scaling solution is nearing completion, and the Bridge UI/UX needs to be refactored to take it into account."
10+reward = 5
11+assignee = "~datder-sonnet"
12+completed = false
13+link = ""
14++++
15+
16+## Background
17+
18+The Naive Rollup, our Layer 2 (L2) scaling solution, has been in the works now for
19+many months and is nearing completion; however, the rollup itself is only one
20+part of what's needed to make L2 useful for end-users.
21+
22+The Naive Rollup computes the state of the PKI by:
23+
24+1. Reading from existing Layer 1 transactions, and
25+2. Reading and validating data submitted to a new Layer 1 contract (the _L2
26+ contract_) that corresponds to L2 transaction batches (_rolls_). Rolls are
27+ made up of individual transactions that describe computation to be done,
28+ which are handled by the Naive Rollup.
29+
30+It's the job of another system called the _roller_ to aggregate L2 transactions
31+in batches before ultimately submitting them to the L2 contract&mdash;this is
32+the system that users must interface with in order to interact with L2, which
33+implies that a number of visual changes must be made to Bridge.
34+
35+## Overview
36+
37+Your task is to work with as an engineer embedded within a Tlon team to bring L2
38+scaling through to completion. Your role on the team is to implement designs
39+specified in Figma in Bridge that enable L2 functionality.
40+
41+## Expectations
42+
43+You'll meet twice weekly with the team on Tuesdays and Thursdays to communicate
44+status updates, and will be expected to work regularly with Tlon engineers in
45+pairing sessions to understand and implement the required modifications to
46+Bridge.
47+
48+## Milestones
49+
50+### Bridge is updated to support L2 and deployed in production
51+
52+_Reward_: 5 stars
53+
54+_Target completion_: `~2021.8.18`
content/grants/contacts.mdnew file+34
@@ -0,0 +1,34 @@
1++++
2+title = "Userspace Apprenticeship: Contacts App"
3+date = 2021-06-17
4+[taxonomies]
5+grant_type = ["Apprenticeships"]
6+grant_category = ["App Dev", "Arvo"]
7+[extra]
8+image = ""
9+description = "Contact Management App"
10+reward = 1
11+mentor = "~timluc-miptev"
12+assignee = ""
13+completed = false
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0034&prefill_Grant+Name=Contacts%20App"
15++++
16+
17+### Contacts App
18+
19+Urbit currently has ship metadata, but there is room for alternate products here. It would be useful to be able to attach arbitrary metadata to a user, both in textual format to describe them, graph-store links to materials they've written, automated lists of groups they're in, and programmatically-accessible metadata that can be used for filtering and permissioning.
20+
21+These contact lists could then be shared between ships as a way to jumpstart people into your social network. Alternate interfaces to chats could give read/write access to them. While it's unlikely that this exact product would be what people finally use, it would go a long way towards feeling out the user-metadata design space.
22+
23+This project would be great for someone who wanted to learn more about how Urbit data storage and sharing between apps works, as well as understanding how to interact with `graph-store`.
24+
25+### User Stories
26+
27+As a user I can:
28+
29+- add text data to another user
30+- add permissions/markers to another user
31+- create a collection of `graph-store` links with data about the user
32+- automatically collect known groups the user is in
33+- search the user's written materials in `graph-store` (using `graph-query` or similar).
34+- share metadata about users with other ships, along with ways of merging it.
content/grants/content-producer.mdnew file+37
@@ -0,0 +1,37 @@
1++++
2+title = "Content Producer"
3+date = 2021-07-08
4+[taxonomies]
5+grant_type = ["Proposal"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Work with the content manager in producing content"
10+reward = 3
11+assignee = "~sitful-hatred"
12+id = ""
13+completed = false
14+link = ""
15++++
16+
17+## Vision
18+
19+Work with the content manager in producing specific pieces of content for the Urbit Foundation. These might include blog posts, tutorials, and other assorted writing projects.
20+
21+## Me
22+
23+~sitful-hatred was given this grant due to his [prolific blog](https://subject.network/posts/) where he consistently published high-quality tutorials and content.
24+
25+## Milestones
26+
27+### 4 Completed Projects
28+
29+1 Star
30+
31+### 4 Completed Projects
32+
33+1 Star
34+
35+### 4 Completed Projects
36+
37+1 Star
content/grants/feed-aggregator.mdnew file+100
@@ -0,0 +1,100 @@
1++++
2+title = "Urbit Feed Aggregator"
3+date = 2021-07-16
4+[taxonomies]
5+grant_type = ["Proposal"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "A feed aggregation application"
10+reward = 5
11+assignee = "~mirtyl-wacdec"
12+grant_id = "P0043"
13+completed = false
14+link = ""
15++++
16+
17+## Purpose
18+
19+Urbit as it stands now (June 2021) is a very functional social network, but it's not yet making use of all the strengths of its computing model.
20+As a personal server Urbit is the perfect platform to build a centralized social media consumption application.
21+
22+Urbit TweetDeck (henceforth UTw) is two applications in one. On one side, it's a Microblogging app. A Twitter clone, basically. Users have individual feeds; you can follow, be followed, and keep custom lists of users.
23+Most importantly, though UTw can fetch data from external sources and present them for consumption, and interaction with the Microblogging app.
24+
25+Most internet users subscribe to a variety of data sources. Twitter, Facebook, Reddit, YouTube; this or that internet forum. Maybe some RSS feeds.
26+You will be able to import that data (scraping if public, fetching it if authenticated) and keep it as a column in the interface. You will also be able to share that data on your microblogging feed; "retweeting" or quoting data from any source you're subscribed to.
27+
28+The interface (as of now) follows TweetDeck; a deck of multiple columns, each displaying data from a single source, with vertical scroll.
29+
30+"Alternative frontends" such as Nitter or Invidious exist for many mainstream applications, but they all have one big problem: rate-limiting. Urbit solves this issue by having individual users do their own data fetching. No application can possibly block individual users fetching data for normal, personal use. That is literally a problem that only Urbit is equipped to solve.
31+
32+## Details
33+
34+### Target User
35+
36+Target user is any social media user who wants their data in a single dashboard, most especially people who like microblogging and would enjoy a way of easily sharing or commenting on their own data to their followers.
37+
38+### Plugin Framework
39+
40+A plugin system will allow data fetching and interaction from virtually infinite internet data sources. This achieves one of the earliest goals of Urbit, aggregation of internet data in a single private interface, where data is under your own control. It also essentially kills Twitter; it replicates all its functionality, and then some.
41+
42+## End Products
43+
44+### External Application
45+
46+UTw would be an external application, to be installed as a third-party package once the capability exists.
47+It does not require to be merged into core but it does require to extend the present functionality of graph-store, e.g. a timeline generator (scrying multiple resources at once) would be required, and that capability would be useful, we believe, to merge into core.
48+
49+### Web Application
50+
51+Beta version will be released as an external Elixir web-app that connects to Urbit via Airlock. Final version should be a lansdcape-ish React frontend on a (minimal) hoon backend
52+
53+### Documentation
54+
55+We'll have a tutorial but the app is quite self-explanatory. Documentation for plugin development will be provided.
56+
57+## User Stories
58+
59+### As a normal user, I will be able to:
60+
61+- Set up an Urbit based microblogging feed, where I can post short pieces of text, upload or share (within limits) images, videos or audio files.
62+- Follow other Urbit users who use the app, as they can follow me, and I can keep custom lists of people I follow, generating a Twitter-like timeline of either lists or all people I follow.
63+- Browse Twitter while inside the same app, just adding a new column in the interface.
64+- Have access to all the functionality Twitter has; I can follow people, keep them in lists. That data is stored in my Urbit's settings-store, where nobody can track it.
65+- Quote or "retweet" tweets onto my Urbit feed, allowing me to share data from Twitter while inside Urbit, with a single click.
66+- Share those Urbit Feed posts in other Urbit channels with a couple clicks.
67+- Login to Twitter and use UTw as an alternative Twitter frontend.
68+- Manage my lists and follows and post to Twitter.
69+- Set up automatic crossposting and keep my Urbit and Twitter feeds in sync.
70+- Perform all these actions on Facebook, Instagram, YouTube and Reddit as new plugins are developed. Perhaps even email - the sky is the limit.
71+
72+### As a developer I will be able to:
73+
74+- Make plugins to integrate a data source into UTw. Basically just a custom scraper (a way of telling UTw how to fetch and render the data).
75+
76+## Resources
77+
78+We have been in contact with ~timluc-miptev and ~tacryt-socryp.
79+
80+## Milestones
81+
82+### Basic microblog - 1 star
83+
84+Basic microblog functionality implemented with integrated Twitter client.
85+
86+### Twitter integration - 1 star
87+
88+Twitter Login implemented, enabling cross-posting and import-export of data between Urbit and Twitter.
89+
90+### Graph-Store integration - 1 star
91+
92+Full Urbit graph-store interaction implemented: live DMs, share-to-chat, export-to-notebook and collection.
93+
94+### Email/RSS integration - 1 star
95+
96+Email and RSS feed importing implemented.
97+
98+### Plugin creation - 1 star
99+
100+Plugin system implemented, enabling developers to integrate any data feed into the app.
content/grants/guide-to-s3.mdnew file+32
@@ -0,0 +1,32 @@
1++++
2+title = "Guide to S3"
3+date = 2021-03-18
4+[taxonomies]
5+grant_type = ["Proposal"]
6+grant_category = ["Documentation"]
7+[extra]
8+image = ""
9+description = "Contribute an easy-to-follow guide on self-hosting an S3 storage solution for use with Urbit to urbit.org."
10+reward = 1
11+assignee = "~tomnyr-tirsyr"
12+id = ""
13+completed = false
14+link = ""
15++++
16+
17+The aim of this proposal is to produce, publish and maintain an easy-to-follow guide on self-hosting an S3-compatible storage solution for use with Urbit, with the goal of having it merged into the urbit.org site.
18+
19+Currently most users have to rely on a large cloud provider to manage and host their S3 storage. However I imagine most users of Urbit are the kind of people that do not want to trust these providers with their data, and would much rather host themselves.
20+
21+Unfortunately installing, configuring, securing and hosting this kind of software can be quite fiddly and time-consuming. There are quite a few moving parts (configuring the S3 solution, hosting with Docker, reverse proxying, TLS, DNS…) and debugging issues can be difficult. I work with these technologies on a daily basis at my job, and have plenty of experience troubleshooting them.
22+
23+The process is very similar whether the user opts to host on their own hardware, or with a cloud provider like DigitalOcean - so the guide will cover both options.
24+
25+I have already written a basic guide on hosting MinIO for use with Urbit, and a handful of users have indeed found it useful. However I did not spend long writing it, and it is published on a proprietary platform at a potentially non-static URL. I now plan to re-write and contribute the guide to urbit.org, with the aim of everyone on Urbit having the knowledge they need to self-host this solution should they want to.
26+
27+## Milestones
28+
29+### Guide written
30+
31+1 star
32+The full guide, written up and merged to urbit.org.
content/grants/host-three-college-university-urbit-meetups-1.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Hold a meetup and presentation about Urbit."
1010reward = 1
1111assignee = "P. Paramo"
12−id = "901396717"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -55,5 +55,11 @@ Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best pra
5555
5656### Three meetups are held
5757
58+<<<<<<< HEAD:content/grants/host-three-college-university-urbit-meetups-1.md
58591 stars
5960Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
61+||||||| 7c8c4a5e:content/grants/bounties/host-three-college-university-urbit-meetups-1.md
62+
63+=======
64+
65+> > > > > > > master:content/grants/bounties/host-three-college-university-urbit-meetups-1.md
content/grants/host-three-college-university-urbit-meetups-2.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Hold a meetup and presentation about Urbit."
1010reward = 1
1111assignee = "kirk-hutchison"
12−id = "167729270"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -55,5 +55,11 @@ Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best pra
5555
5656### Three meetups are held
5757
58+<<<<<<< HEAD:content/grants/host-three-college-university-urbit-meetups-2.md
58591 stars
5960Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
61+||||||| 7c8c4a5e:content/grants/bounties/host-three-college-university-urbit-meetups-2.md
62+
63+=======
64+
65+> > > > > > > master:content/grants/bounties/host-three-college-university-urbit-meetups-2.md
content/grants/host-three-college-university-urbit-meetups-3.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Hold a meetup and presentation about Urbit."
1010reward = 1
1111assignee = "~sanlyt-modbyt"
12−id = "372504274"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -55,5 +55,11 @@ Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best pra
5555
5656### Three meetups are held
5757
58+<<<<<<< HEAD:content/grants/host-three-college-university-urbit-meetups-3.md
58591 stars
5960Your three meetups are held, and links to the presentations have been posted and sent to grants@urbit.org.
61+||||||| 7c8c4a5e:content/grants/bounties/host-three-college-university-urbit-meetups-3.md
62+
63+=======
64+
65+> > > > > > > master:content/grants/bounties/host-three-college-university-urbit-meetups-3.md
content/grants/host-two-urbit-meetups-1.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Host two Urbit meetups in your city."
1010reward = 1
1111assignee = "sitful-hatred"
12−id = "2020814292"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-1.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-1.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-1.md
content/grants/host-two-urbit-meetups-10.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "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."
1010reward = 1
1111assignee = "jpt4"
12−id = "278361497"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The second meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-10.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-10.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-10.md
content/grants/host-two-urbit-meetups-11.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Urbit needs champions! The Urbit Foundation is looking for community members to host local or online meetups to spread the word."
1010reward = 1
1111assignee = "Thomas"
12−id = "1314014268"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-11.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-11.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-11.md
content/grants/host-two-urbit-meetups-12.mdnew file+55
@@ -0,0 +1,55 @@
1++++
2+title = "Host Two Urbit Meetups (12)"
3+date = 2021-06-15
4+[taxonomies]
5+grant_type = ["Bounty"]
6+grant_category = ["Community"]
7+[extra]
8+image = ""
9+description = "Urbit needs champions! The Urbit Foundation is looking for community members to host local or online meetups to spread the word."
10+reward = 1
11+assignee = ""
12+id = ""
13+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0031&prefill_Grant+Name=Host%20Two%20Urbit%20Meetups%20%2812%29"
14+completed = false
15+link = ""
16++++
17+
18+#### Background
19+
20+Urbit needs champions! The Urbit Foundation is looking for community members to host local or online meetups to spread the word.
21+
22+#### Bounty Description
23+
24+This bounty is to host an Urbit meetup in your city. The meetup should meet the following criteria:
25+
26+- The meetup must be public, and there must be a public web link for joining (like meetup.com)
27+- The meetup must have a presentation or talk about Urbit.
28+- The presentation or talk must be recorded and posted publicly online.
29+- You must promote the event vigorously; social media, a website, etc. Email support@urbit.org if you want a signal boost.
30+- You must host at least two meetups.
31+
32+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/)!
33+
34+#### Resources
35+
36+Check out our [guide](https://urbit.org/community/hosting-a-meetup/) to best practices for Urbit meetups.
37+
38+#### Contribution Guidelines
39+
40+- Do not begin work until your request to claim this bounty is accepted.
41+- When applying to work on the bounty, tell us a little about yourself and mention which city you'd be hosting the meetups in.
42+- Proof of the meetups happening will be determined by the recordings of the presentations. Email links to these recordings to grants@urbit.org.
43+- You have 100 days from the time of approval to complete this bounty.
44+
45+## Milestones
46+
47+### The first meetup is held
48+
49+0 stars
50+The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
51+
52+### The second meetup is held
53+
54+1 stars
55+The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
content/grants/host-two-urbit-meetups-2.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Host two Urbit meetups in your city."
1010reward = 1
1111assignee = "Matthew Levan, nforbes6"
12−id = "1252614745"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-2.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-2.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-2.md
content/grants/host-two-urbit-meetups-3.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Host two Urbit meetups in your city."
1010reward = 1
1111assignee = "yosoyubik"
12−id = "1574784178"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The first meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-3.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-3.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-3.md
content/grants/host-two-urbit-meetups-4.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Host two Urbit meetups in your city."
1010reward = 1
1111assignee = "~forfel-norfel"
12−id = "1872089827"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-4.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-4.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-4.md
content/grants/host-two-urbit-meetups-5.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Host two Urbit meetups in your city."
1010reward = 1
1111assignee = "NHL"
12−id = "180695644"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-5.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-5.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-5.md
content/grants/host-two-urbit-meetups-6.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Host two Urbit meetups in your city."
1010reward = 1
1111assignee = "~dilled-fastyd"
12−id = "675590864"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-6.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-6.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-6.md
content/grants/host-two-urbit-meetups-7.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "Host two Urbit meetups in your city."
1010reward = 1
1111assignee = "nrhtr, ~hocdep-labtel, sunmaid, jackw"
12−id = "1098941980"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-7.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-7.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-7.md
content/grants/host-two-urbit-meetups-8.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "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."
1010reward = 1
1111assignee = "~winter-paches, ~fonnyx-nopmer"
12−id = "1740918704"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-8.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-8.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-8.md
content/grants/host-two-urbit-meetups-9.md+8−2
@@ -9,8 +9,8 @@ image = ""
99description = "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."
1010reward = 1
1111assignee = "juaningan"
12−id = "1128452733"
13−completed = false
12+id = ""
13+completed = true
1414link = ""
1515+++
1616
@@ -52,3 +52,9 @@ The first meetup is held, and a recording of that meetup's talk or presentation
5252
53531 stars
5454The second meetup is held, and a recording of that meetup's talk or presentation is sent to grants@urbit.org.
55+<<<<<<< HEAD:content/grants/host-two-urbit-meetups-9.md
56+||||||| 7c8c4a5e:content/grants/bounties/host-two-urbit-meetups-9.md
57+
58+=======
59+
60+> > > > > > > master:content/grants/bounties/host-two-urbit-meetups-9.md
content/grants/json-jet.mdnew file+48
@@ -0,0 +1,48 @@
1++++
2+title = "JSON Parsing/Serialization Jet"
3+date = 2021-06-17
4+[taxonomies]
5+grant_type = ["Bounty"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Create high performance JSON parsing/serializing jet."
10+reward = 1
11+mentor = "~timluc-miptev"
12+assignee = ""
13+completed = false
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0036&prefill_Grant+Name=JSON%20Parsing%2FSerialization%20Jet"
15++++
16+
17+## Jet JSON Parsing/Serialization
18+
19+We need to generally speed up common parsing and serialization operations. A large part of Urbit's UX is sending data in and out of Urbit for display in the UI, and the functions inside Urbit that handle this are all significant performance bottlenecks.
20+
21+Urbit serializes JSON frequently when sending data to various frontends, and this would make that much more rapid.
22+
23+Completing this bounty will have an immediate impact on the perceived speed of the system in frontends like Landscape.
24+
25+### Code
26+
27+- [JSON Encoders](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L3263)
28+- [JSON Reparser](https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/zuse.hoon#L3320)
29+
30+### Requirements
31+
32+- Knowledge of C
33+- Experience memory profiling to prevent leaks
34+- Hoon knowledge nice but not necessary
35+
36+### Resources
37+
38+- Tlon engineer explanation/assistance as needed
39+- Check-in with a Foundation director as needed
40+- [Writing Jets Guide](https://urbit.org/docs/vere/jetting/)
41+- [Unofficial Jets Tutorial](https://gist.github.com/sigilante/31cc7941a41b51dca5db6692a756fd64)
42+- [JSON Test Suite](https://github.com/nst/JSONTestSuite)
43+
44+## Milestone: Completion, 1 star
45+
46+- jet is implemented
47+- passes all tests, producing same results in jetted and unjetted mode
48+- Tlon engineer gives final approval on merging jet into core
content/grants/login-with-urbit.mdnew file+88
@@ -0,0 +1,88 @@
1++++
2+title = "Login with Urbit ID"
3+date = 2021-04-27
4+[taxonomies]
5+grant_type = ["Proposal"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "One of the killer pieces of missing functionality in the ecosystem is to seamlessly \"login\" to Urbit web apps at the click of a button."
10+reward = 8
11+assignee = "dcSpark"
12+id = ""
13+completed = false
14+link = ""
15++++
16+
17+As of today, one of the killer pieces of missing functionality for Urbit is the ability for users to seamlessly "login" to websites/web apps thereby exposing the full functionality of their Urbit ship safely at the single click of a button. Even though airlock libraries are currently available, users must either go through a complicated and time consuming process setting up a web app locally or constantly run around copy and pasting their ship url & +code into random sites testing both their patience and luck hoping that none of the sites steal their private data or act maliciously otherwise.
18+
19+This is clearly unsustainable and the ecosystem needs a solution in the near-term for users to experience and understand that Urbit is so much more than just Landscape, while providing developers a trivial way to embed Urbit support within their web apps. The Login With Urbit extension fulfills this exact role.
20+
21+The Login With Urbit browser extension acts as a ship connection credential store, firewall, and messaging channel between web apps and your Urbit ship. In other words, it provides the needed infrastructure to develop secure Urbit Web Apps (UWAs) with standardized and clean UX for end users.
22+
23+Within the extension users will be able to add "accounts" which map onto ship connection credentials (url, +code, @p). Thanks to browser extensions being sandboxed, storing these credentials encrypted within the extension provides quick-access in a safe manner locked behind a password. Whenever the user wishes to access the credentials after they have added an account (for connecting to the Urbit ship via airlock or for sharing the credentials directly with an external trusted application like Landscape), they are simply decrypted at that moment and do not remain stored in clear text after that. Thus users will simply add their credentials once and thenceforth get to enjoy an account-like experience within their web browser for Urbit Web Apps. (Furthermore adding multiple accounts will also be supported, thereby allowing multi-ship operators, infrastructure providers, or even families to take advantage of a smooth and secure password-based login experience just like they are already used to.)
24+
25+The Login With Urbit extension will also offer a full-fledged API for web apps to interact with your Urbit ship. This API will effectively wrap both the connection credential store and the Urbit airlock library together with a single permissioned interface. This can then be used to build all kinds of UWAs, from simple use cases such as adding Urbit identity support to existing web apps, all the way to creating first-class Urbit Web Apps which integrate directly with your Urbit ship as a mechanism for storage, identity, networking, computation, and more.
26+
27+The permission system completes the extension by acting as a user-directed firewall which isolates your ship from the dangers of the wild west of the web. This is another one of the key missing links within the Urbit app ecosystem which will allow for real world use cases such as enterprise to begin taking a more serious look at Urbit (where data security is vital). Rather than giving web apps full access and risking serious data leaks and more, users will instead allow them to obtain specific permissions which get saved and enforced by the extension. Unless the user explicitly permits it, web apps will not even be able to acquire the user's @p, let alone do anything sketchy.
28+
29+Over time as the Urbit app ecosystem matures together with the exposed airlock functionality, this permission system can likewise advance. It will start off with simple permissions such as "Allow Web App X to scry any application", to eventually very fine-grained "Allow Web App X to scry graph-store for resource A and resource B". The current scope of this grant proposal is the former, but the long-term goal is to keep building out the exposed API to support the latter and thereby provide the ideal missing permission system for user-facing Urbit apps in general.
30+
31+Thinking forward into the near future, the Login With Urbit extension also opens up many doors. One could even imagine full stack Urbit apps installed in a single click, wherein the web app interface asks for permission to connect to the user's ship which then automatically syncs a desk from another ship which contains the hoon-related components. This would be a seamless experience for the user, and would allow for them to merely confirm permissions once via the Login With Urbit extension and have everything done for them securely behind the scenes.
32+
33+Other examples of Urbit Web Apps that can be powered by the Login With Urbit extension include:
34+
35+- Urbit Ship Operator Dashboard (GUI control panel that exposes internal data & functionality for troubleshooting ships)
36+- Collaborative Document Editing App (Aka Google Docs, but powered by your Urbit ship)
37+- Urbit Powered Social Media Websites (Decentralized Twitter/Facebook/… where you own your data and connections within your ship, with a simple 1-click login as expected by every day users)
38+- Crypto Urbit Web dApps (Urbit Web Apps which also directly integrate with cryptocurrency dApps via web wallets such as Metamask, thereby using Urbit as the computation/identity/messaging layer tied together into the latest and greatest Blockchain dApps; opening up potential as of yet unseen)
39+- DAO Hubs (DAOs can have first class support for decentralized off-chain messaging for communication between members, off-chain voting, and more without relying on centralized servers as a breaking point. Because Urbit NFTs are on Ethereum, if DAO participants have their Urbit NFT in the same wallet as their governance tokens, the integration can be 100% seamless)
40+- Urbit App Store (a registry which visually displays available apps with an "install" button that syncs a desk from another ship)
41+- Hoon Example Registry (a registry for the dev community to share hoon generators/galls apps they can easily install to test, read the source, and learn from)
42+- And more!
43+
44+The Login With Urbit extension will be a standardized interface for the creation of Urbit Web Apps that offer a seamless and unified UX experience while tackling the user-facing permission problem so that devs will not have to reinvent the wheel every time. There are countless pieces of low-hanging fruit which can be built off of this project past what has already been discussed, and as such we consider this to be a key piece of infrastructure that will increase the pace of growth for the Urbit ecosystem as a whole.
45+
46+## Milestones
47+
48+### Bootstrap & Messaging Channels
49+
50+2 STARS Payout
51+Estimated Date: 06/15/2021
52+
53+Setting up the core extension structure, implementing communication layer between extension and Urbit ship, and implementing communication layer between extension and webpages.
54+
55+### Encrypted Accounts
56+
57+1 STAR
58+Estimated Date: 06/30/2021
59+
60+Implement encrypted accounts/credential store in the extension. Users add accounts by providing their ship url & +code and choose an encryption password.
61+
62+### Injected Urbit API
63+
64+1 STAR
65+Estimated Date: 07/09/2021
66+
67+Implement injection of a core Urbit API for web apps which enables acquiring ship url, ship +code, ship @p, issue pokes/scrys/threads, and creating subscriptions.
68+
69+### Permission System
70+
71+2 STARS
72+Estimated Date: 07/31/2021
73+
74+Build out the first version of the permission system which also exposes user facing UX which displays permission requests via extension pop-up (Metamask-like) and allows users to remove permissions.
75+
76+### Polishing Off The User Interface
77+
78+1 STAR
79+Estimated Date: 08/11/2021
80+
81+Give the extension interface a major revamp from merely being dev-usable to well polished and offering new users a great experience.
82+
83+### Firefox Support
84+
85+1 STAR
86+Estimated Date: 08/25/2021
87+
88+Implement Login With Urbit extension for Firefox.
content/grants/network-explorer.mdnew file+231
@@ -0,0 +1,231 @@
1++++
2+title = "Network Explorer: Data Pipeline and HTTP API"
3+date = 2021-03-12
4+[taxonomies]
5+grant_type = ["Bounty"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Build a public, open HTTP API for exploring metrics about the Urbit network."
10+reward = 5
11+assignee = "Christopher King"
12+id = ""
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+
19+![network explorer screenshot](https://wolref-podlex.s3.us-west-2.amazonaws.com/wolref-podlex/2021.2.23..20.58.30-Screen%20Shot%202021-02-23%20at%209%2C01%2C03%20AM.png)
20+
21+### Goal
22+
23+Build a public, open HTTP API for exploring metrics about the Urbit network.
24+
25+### Background
26+
27+The project known as the **Network Explorer** has been in the works at Tlon for
28+quite some time. The idea is to build a publicly-accessible tool (hosted on
29+https://network.urbit.org) that provides key metrics and insights into the state
30+of the Urbit network. A series of high-fidelity designs have been produced.
31+
32+### Scope
33+
34+This bounty covers the creation of the:
35+
36+- **data pipeline**: we're concerned with data from the PKI (Azimuth) and
37+ the Urbit network itself. These two datasets will need to be aggregated and
38+ indexed for efficient querying.
39+- **HTTP API**: the interface for querying data from a client, like the Network
40+ Explorer.
41+
42+The Network Explorer interface will be covered in a separate bounty.
43+
44+## Implementation
45+
46+### Data Model
47+
48+Let's start with the data model. There are two sources of data that we need:
49+
50+- **PKI (Azimuth)**: The public-key infrastructure, currently known as Azimuth,
51+ is our primary source of data. This information is currently found on Ethereum
52+- **Radar output**: [`radar`](https://github.com/urbit/urbit/blob/2c412d658a74dca3b3f584b92f8b390f38a05ba1/pkg/arvo/app/radar.hoon) is a program run from within an Urbit
53+ ship that pings (`|hi`) every Urbit ship and records the results. This data is exposed in a single JSON file that is added to over time as the script runs.
54+
55+Most of the required information in the Network Explorer will come from Azimuth.
56+It's important to know though that the source of PKI information will likely
57+change in the near future in light of [ongoing work to reduce the
58+cost](https://groups.google.com/a/urbit.org/g/dev/c/p6rP_WsxLS0) of bringing
59+nodes onto the network.
60+
61+The below [entity-relationship
62+diagram](https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model)
63+defines a data model in terms of a relational database:
64+
65+![erd diagram](https://wolref-podlex.s3.us-west-2.amazonaws.com/wolref-podlex/2021.2.23..20.58.39-Network%20Explorer%20ERD.png)
66+
67+Some notes about the above diagram:
68+
69+- The data model should be _agnostic to any particular PKI storage
70+ infrastructure_ to future-proof it against PKI changes.
71+- For non-`ping` data, it should be possible to compute the table of `node` from
72+ a time-ordered traversal of `pki_event` (kind of like Arvo!). This means that
73+ many fields listed on the `node` table could instead be derived from analysis
74+ of the `pki_event` table. The implementer will be responsible for determining
75+ which fields should be represented on the `node` directly and which should be
76+ determined from `pki_event` for performance purposes.
77+- We don't have data for comets or moons, because they're not registered on
78+ Azimuth and `radar` only checks for activity from ships with keys that have
79+ been set on Azimuth. There will likely be a future in which we'll have a way
80+ to provide data about these ship types though.
81+
82+### Data Ingestion
83+
84+Data from Azimuth and `radar` will need to be regularly extracted, parsed, and
85+persisted to the local database for querying.
86+
87+For Azimuth, using a tool like [infura](https://infura.io) should be used.. Tlon
88+currently uses infura, so it should be possible to use a free account for
89+development and Tlon's pre-existing service in production.
90+
91+The output of the `radar` script is saved to a JSON file that can be found
92+[here](http://35.247.74.19:8080/~radar.json). This file is updated as new ping
93+information is obtained, so data ingestion from this service should happen on
94+some regular schedule.
95+
96+### API
97+
98+The following are are necessary API endpoints for the Network Explorer UI to
99+function properly. It's likely that some details have been missed, so apply your
100+own judgement when designing the API.
101+
102+This interface is meant to be agnostic to the API mechanism you choose, which
103+could be either REST or GraphQL.
104+
105+#### get-node
106+
107+Produce the details for a single node.
108+
109+**Parameters**
110+
111+- `urbit_id`: `@p`
112+
113+**Returns**
114+
115+- `urbit_id`: `@p`
116+- `node_type`: `#{galaxy,star,planet,moon,comet}`
117+- `status`: `#{locked,unlocked,spawned,activated,online}`
118+- `continuity`: `int`, current continuity
119+- `key_revision`: `int`, current revision of keys
120+- `num_owners`: `int`, number of owners
121+- `sponsors`: `[node]` (sponsor and sponsor's sponsor, if applicable)
122+- `kids`: `[node]` (nodes sponsored by this one)
123+- `proxy_addresses`:
124+ - `ownership`
125+ - `spawn`
126+ - `transfer`
127+ - `voting`
128+ - `management`
129+
130+#### get-nodes
131+
132+Produce a list of nodes, optionally with parameters. Absence of parameters queries all nodes.
133+
134+**Parameters**
135+
136+- `q`: `string` (optional: query term to search for)
137+- `node_types`: `[node_type]` (optional: produce just events for specific node types)
138+- `limit`: `int` (number of results to return)
139+- `offset`: `int` (number of results to offset by)
140+
141+**Returns**
142+An array of `node` in ascending order by `point`.
143+
144+#### get-pki-events
145+
146+Produce the stream of PKI events for a specific Urbit ID, or globally in descending order of `time`.
147+
148+**Parameters**
149+
150+- `urbit_id`: `@p` (optional: unspecified implies global)
151+- `since`: `timestamp` (optional: unspecified implies all events)
152+- `node_types`: `[node_type]` (optional: produce just events for specific node types)
153+- `limit`: `int` (number of results to return)
154+- `offset`: `int` (number of results to offset by\*\*
155+
156+**Returns**
157+An array of `pki_event` in descending order of `time`.
158+
159+#### get-activity
160+
161+Produce the network activity of a node or nodes.
162+
163+**Parameters**
164+
165+- `urbit_id`: `@p` (optional: specific ship to pull activity for)
166+- `since`: `timestamp` (optional: activity since provided time)
167+- `until`: `timestamp` (optional: activity up until the provided time)
168+
169+If `urbit_id` is unspecified, implies all ships.
170+
171+If `since` and `until` are unspecified, produces all activity for all time. If
172+only `since` is provided, produces activity from `since` to the present. If only
173+`until` is provided, produces activity for all of time up until `until`. If both
174+are provided, queries activity within a range.
175+
176+**Returns**
177+Array of:
178+
179+- `urbit_id`: `@p`
180+- `date`: `date` (no time)
181+- `active`: `boolean` (active or inactive)
182+
183+### Technology Requirements/Guidelines
184+
185+That which is not explicitly specified here is up to the choice of the
186+implementer.
187+
188+- **Database**: PostgreSQL
189+- **Ethereum Interaction**: Infura
190+- **HTTP API methodology**: GraphQL or REST
191+- **ORM**: None. Implementer should be sufficiently familiar with SQL.
192+- **API Hosting**: The API will be hosted on `api.network.urbit.org` or
193+ `network.urbit.org/api`.
194+
195+## Requirements
196+
197+- 2+ years of experience with developing HTTP APIs
198+- 2+ years of experience working with relational databases
199+- Code hosted at https://github.com/urbit/network-api
200+- Attend regular (weekly or bi-weekly) checkin meetings with the director of
201+ urbit.org to provide status updates
202+
203+## Resources
204+
205+- A complete set of high-fidelity designs in Figma will be made available to the
206+ worker.
207+- The director of urbit.org will ensure access to other resources or personnel
208+ as needed.
209+
210+## Milestones
211+
212+### Data ETL
213+
214+2 stars
215+The database has been designed and data from both sources is ingested
216+(extracted, transformed and loaded) on a regular schedule. Analysis can be
217+performed at the database layer.
218+
219+### HTTP API
220+
221+2 stars
222+An HTTP API is written per the above specification and deployed to
223+`https://api.network.urbit.org`.
224+
225+### UI Integration
226+
227+1 star
228+The Network Explorer UI will be a separate proposal, but integration with an
229+interface inevitably surfaces oversights in the original design. An additional
230+star will be awarded for providing ongoing maintenance as-needed during
231+front-end integration.
content/grants/nuck-jet.mdnew file+56
@@ -0,0 +1,56 @@
1++++
2+title = "Nuck Jet"
3+date = 2021-06-17
4+[taxonomies]
5+grant_type = ["Bounty"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Create new high performance string parser jet."
10+reward = 1
11+mentor = "~timluc-miptev"
12+assignee = ""
13+completed = false
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0035&prefill_Grant+Name=Nuck%20Jet"
15++++
16+
17+## jet +nuck
18+
19+We need to generally speed up common parsing and serialization operations. A large part of Urbit's UX is sending data in and out of Urbit for display in the UI, and the functions inside Urbit that handle this are all significant performance bottlenecks.
20+
21+This is a function that parses strings and returns a `@ta` of their aura along with their atom value. This is invoked every time a scry happens, and currently takes 7ms for invocation, so there is potential for large performance gains.
22+
23+Completing this bounty will have an immediate impact on the perceived speed of the system in frontends like Landscape.
24+
25+### Examples
26+
27+Note the `~.p` and `~.ux`--those are the auras.
28+
29+```
30+> (scan "~pillyt" nuck:so)
31+[% p=[p=~.p q=32.819]]
32+> (scan "0x12" nuck:so)
33+[% p=[p=~.ux q=18]]
34+```
35+
36+### Code
37+
38+https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon#L5767
39+
40+### Requirements
41+
42+- Knowledge of C
43+- Experience memory profiling to prevent leaks
44+- Hoon knowledge nice but not necessary
45+
46+### Resources
47+
48+- Tlon engineer explanation/assistance as needed
49+- Check-in with a Foundation director as needed
50+- [Writing Jets Guide](https://urbit.org/docs/vere/jetting/)
51+- [Unofficial Jets Tutorial](https://gist.github.com/sigilante/3f9d13423a48a3d71041c938691d1f33)
52+
53+## Milestone: Completion, 1 star
54+
55+- jet is implemented and passes all tests
56+- Tlon engineer gives final approval on merging jet into core
content/grants/ra-page-tracking.mdnew file+32
@@ -0,0 +1,32 @@
1++++
2+title = "Runtime Apprenticeship: Improve Page Tracking"
3+date = 2021-06-24
4+[taxonomies]
5+grant_type = ["Apprenticeship"]
6+grant_category = ["App Dev", "Arvo"]
7+[extra]
8+image = ""
9+description = "Improve Page Tracking"
10+reward = 2
11+mentor = "~silsyn-wathep"
12+assignee = "~sovmep-ripsum"
13+completed = false
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=A0039&prefill_Grant+Name=Runtime%20Apprenticeship%3A%20Improve%20Page%20Tracking"
15++++
16+
17+### Improve Page Tracking
18+
19+Skill level: competent C programmer.
20+
21+Time estimate: 4-8 weeks, including onboarding, weekly check-ins by video call, and chat check-ins as needed.
22+
23+We track dirty pages uniformly across the loom, regardless of road nesting depth. But we can only use the metadata on the home road. We want to align inner roads to (native) pages, and only protect the home road.
24+
25+potentially related aligment issues:
26+https://github.com/urbit/urbit/issues/979
27+https://github.com/urbit/urbit/pull/983
28+
29+Final work product:
30+
31+- come up with a plan to align inner roads to pages
32+- implement the alignment, only protecting the home road
content/grants/ra-segfaults.mdnew file+29
@@ -0,0 +1,29 @@
1++++
2+title = "Runtime Apprenticeship: Segfaults"
3+date = 2021-06-24
4+[taxonomies]
5+grant_type = ["Apprenticeship"]
6+grant_category = ["App Dev", "Arvo"]
7+[extra]
8+image = ""
9+description = "Segfaults"
10+reward = 2
11+mentor = "~silsyn-wathep"
12+assignee = ""
13+completed = false
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=A0040&prefill_Grant+Name=Runtime%20Apprenticeship%3A%20Segfaults"
15++++
16+
17+### Segfaults
18+
19+Skill level: competent C programmer.
20+
21+Time estimate: 8-12 weeks, including onboarding, weekly check-ins by video call, and chat check-ins as needed.
22+
23+We currently trap segfaults for dirty page tracking using libsigsegv. libsigsegv is a general-purpose but somewhat slow solution; various platforms have their own platform-specific equivalents that are said to be faster.
24+Related to this, it would be useful to find another solution for handling (native) stack overflow.
25+
26+Final work product:
27+
28+- determine best platform-specific replacements for libsigsegv
29+- integrate those replacements
content/grants/ra-stack-overflow.mdnew file+29
@@ -0,0 +1,29 @@
1++++
2+title = "Runtime Apprenticeship: Stack Overflow"
3+date = 2021-06-24
4+[taxonomies]
5+grant_type = ["Apprenticeship"]
6+grant_category = ["App Dev", "Arvo"]
7+[extra]
8+image = ""
9+description = "Stack Overflow"
10+reward = 2
11+mentor = "~silsyn-wathep"
12+assignee = ""
13+completed = false
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0041&prefill_Grant+Name=Runtime%20Apprenticeship%3A%20Stack%20Overflow"
15++++
16+
17+### Stack Overflow Handling
18+
19+Skill level: competent C programmer with a bit more experience; the contributor should have experience in kernel programming.
20+
21+Time estimate: 8-12 weeks, including onboarding, weekly check-ins by video call, and chat check-ins as needed.
22+
23+In some contexts, we don't check for overflows in road-stacks. This project would involve adding those checks, producing more accurate errors, and protecting against heap corruption.
24+A good starting point for this would be to protect a page at the bottom (top) of the road stack, and move it as appropriate.
25+
26+Final work product:
27+
28+- all protection sites identified
29+- overflow checks implemented at those sites
content/grants/slaw-scot-jets.mdnew file+69
@@ -0,0 +1,69 @@
1++++
2+title = "Tune slaw/scot Jets"
3+date = 2021-06-17
4+[taxonomies]
5+grant_type = ["Bounty"]
6+grant_category = ["Core Dev"]
7+[extra]
8+image = ""
9+description = "Tune slaw/scot jets for better perfomance."
10+reward = 1
11+mentor = "~timluc-miptev"
12+assignee = ""
13+completed = false
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0042&prefill_Grant+Name=Tune%20slaw%2Fscot%20jets"
15++++
16+
17+## slaw/scot
18+
19+We need to generally speed up common parsing and serialization operations. A large part of Urbit's UX is sending data in and out of Urbit for display in the UI, and the functions inside Urbit that handle this are all significant performance bottlenecks.
20+
21+`slaw` parses strings to atoms, and `scot` serializes atoms to strings. They both are used heavily throughout the codebase.
22+
23+Completing this bounty will have an immediate impact on the perceived speed of the system in frontends like Landscape.
24+
25+### Examples
26+
27+slaw
28+
29+```
30+> `(unit @p)`(slaw %p '~pillyt')
31+[~ ~pillyt]
32+> `(unit @p)`(slaw %p '~pillam')
33+~
34+> `(unit @ux)`(slaw %ux '0x12')
35+[~ 0x12]
36+> `(unit @ux)`(slaw %ux '0b10')
37+```
38+
39+scot
40+
41+```
42+> `@t`(scot %p ~pillyt)
43+'~pillyt'
44+> (scot %ux 0x12)
45+~.0x12
46+```
47+
48+### Code
49+
50+- slaw https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon#L5913
51+- scot https://github.com/urbit/urbit/blob/master/pkg/arvo/sys/hoon.hoon#L5905
52+
53+### Requirements
54+
55+- Knowledge of C
56+- Experience memory profiling to prevent leaks
57+- Hoon knowledge nice but not necessary
58+
59+### Resources
60+
61+- Tlon engineer explanation/assistance as needed
62+- Check-in with a Foundation director as needed
63+- [Writing Jets Guide](https://urbit.org/docs/vere/jetting/)
64+- [Unofficial Jets Tutorial](https://gist.github.com/sigilante/3f9d13423a48a3d71041c938691d1f33)
65+
66+## Milestone: Completion, 1 star
67+
68+- jet is implemented and passes all tests
69+- Tlon engineer gives final approval on merging jet into core
content/grants/ua-collaborative-text-editor.md+2−2
@@ -1,5 +1,5 @@
11+++
2−title = "Collaborative text editor and annotator"
2+title = "Userspace Apprenticeship: Collaborative text editor and annotator"
33date = 2021-05-27
44[taxonomies]
55grant_type = ["Apprenticeship"]
@@ -11,7 +11,7 @@ reward = 1
1111mentor = "~timluc-miptev"
1212assignee = ""
1313completed = false
14−work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0019&prefill_Grant+Name=Collaborative%20text%20editor%20and%20annotator"
14+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=A0019&prefill_Grant+Name=Collaborative%20text%20editor%20and%20annotator"
1515+++
1616
1717A line-based editor for looking at text and code. Can be organized by projects. Allows multiple people to edit, but can use locking for now.
content/grants/ua-heads-up-poker.md+2−2
@@ -1,5 +1,5 @@
11+++
2−title = "Heads-up poker"
2+title = "Userspace Apprenticeship: Heads-Up Poker"
33date = 2021-05-27
44[taxonomies]
55grant_type = ["Apprenticeship"]
@@ -9,7 +9,7 @@ image = ""
99description = "A fun client app that would be a good way to get acquainted with Urbit's networking and p2p abilities."
1010reward = 1
1111mentor = "~timluc-miptev"
12−assignee = ""
12+assignee = "~bacwyl-samweg, ~hodzod-walrus"
1313completed = false
1414work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0021&prefill_Grant+Name=Heads-up%20poker"
1515+++
content/grants/ua-marketplace.md+1−1
@@ -1,5 +1,5 @@
11+++
2−title = "Marketplace"
2+title = "Userspace Apprenticeship: Marketplace"
33date = 2021-05-27
44[taxonomies]
55grant_type = ["Apprenticeship"]
content/grants/ucal-google-and-outlook-integration.md+1−1
@@ -7,7 +7,7 @@ grant_category = ["App Dev", "Arvo"]
77[extra]
88image = ""
99description = "Extend the Urbit Calendar (ucal) to integrate with other calendaring systems."
10−reward = 1
10+reward = 2
1111assignee = ""
1212id = ""
1313completed = false
content/grants/urbit-irc-bridge.mdnew file+46
@@ -0,0 +1,46 @@
1++++
2+title = "Urbit <-> IRC Bridge"
3+date = 2021-05-14
4+[taxonomies]
5+grant_type = ["Proposal"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Create a bot that that will relay messages between Urbit chatrooms and IRC rooms, allowing users to communicate on a singular platform."
10+reward = 1
11+assignee = "~fitnub-basbud"
12+id = ""
13+completed = false
14+link = ""
15++++
16+
17+What:
18+
19+I would like to create a chat bot written in Python that will allow users to bridge current IRC chatrooms to an Urbit chatroom. Ideally I will work together with ~nartes-fasrum to integrate this project into the current matrix<->urbit bridge project proposal. That way there will be a one stop shop for having a single bot instance connecting and relaying from multiple types of servers.
20+
21+How:
22+
23+Using the Python IRC and Quinnat packages to integrate these components. Quinnat is an Urbit chatbot framework built ontop of Urlock. Configparser to parse a config file that contains information about the Urbit instance as well as IRC server and channels to listen to.
24+
25+Why:
26+
27+I'm quite intrigued by the architecture of Urbit, and believe it has the potential to replace current services we are all reliant on today. In order to ease transition I'd like to create a bot that will bridge the current technology of IRC chat. Creating this bot will allow users to centralize their communication on Urbit and forgoes the need to connect to the IRC server. This eases the burden that we all face on a regular basis when utilizing multiple chatting platforms.
28+
29+User scenario:
30+
31+Jerry has been moving most of his communication to Urbit with his friends that have adopted the platform. Jerry is torn between an IRC server that some of his good friends that haven't adopted the program still regularly frequent. Jerry can easily configure this bot as a bridge between the IRC server and Urbit. By following the uncomplicated documentation All Jerry needs to do is modify the configuration file and run the python program. Now Jerry is happy because he can stay in contact with his IRC friends without dividing his attention between two servers.
32+
33+Limitations
34+
35+The bot in it's first form will probably require a 1-1 mapping for listening channels. That way it will keep the conversations organized. That format makes the most sense to me with the current format of the chat.
36+
37+Qualifications:
38+
39+I have a Bachelors in Cyber Security and took multiple Computer Science courses at community college. I am also currently working as a Junior Software Developer utilizing mainly C and Python. I'm also good friends and went to college with well known community member and aesthetics extraordinaire, ~nartes-fasrum, who has inspired me to spend time contributing to the Urbit community.
40+
41+## Milestones
42+
43+### Bot Complete
44+
45+1 star
46+Bot complete and available for deployment
content/grants/video-content-manager.md+1−1
@@ -8,7 +8,7 @@ grant_category = ["Community"]
88image = ""
99description = "Keep your finger on the pulse of video content produced by the community, and ensure that it's made visible."
1010reward = 3
11−assignee = "~libmud-bonted"
11+assignee = "~wolnyl-pasreg"
1212id = "790269488"
1313completed = false
1414link = ""
content/grants/webrtc.mdnew file+78
@@ -0,0 +1,78 @@
1++++
2+title = "WebRTC Gall Agent and External App"
3+date = 2021-01-12
4+[taxonomies]
5+grant_type = ["Proposal"]
6+grant_category = ["App Dev: Other"]
7+[extra]
8+image = ""
9+description = "Add WebRTC support to Urbit, including call/stream setup and teardown messaging and ICE/STUN/TURN advertisement and authentication."
10+reward = 8
11+assignee = "~ritpub-sipsyl"
12+id = ""
13+completed = false
14+link = ""
15++++
16+
17+## Overview
18+
19+Adding the ability to make encrypted media calls between Urbit ships, using only Urbit as a signalling channel, without a centralized intermediary, would provide real utility and an immediate boost in the excitement in the end user interface.
20+
21+WebRTC provides media device (camera/speaker/microphone) discovery and peer-to-peer encrypted transit of media. It is supported by all major browsers as well as libraries for many major programming languages.
22+
23+WebRTC relies on external signalling, implemented by the application developer, to handle connection negotiation and call setup and teardown.
24+
25+This creates a natural synergy with URbit, as Urbit provides a hierarchical peer-communication system between known addresses with reputation. A WebRTC Gall agent would provide a solution for coordinating real-time media communications between Urbit ships.
26+
27+## Deliverables
28+
29+### WebRTC Gall Agent
30+
31+This will serve as the signalling channel for Urbit WebRTC applications. WebRTC requires an out-of-band channel (in standard usage usually implemented as an HTTP REST API) which can receive connectivity information from peers and distribute it to peers.
32+
33+### WebRTC calling app
34+
35+This would be an external (probably in-browser) app which would provide the initial end-user interface for
36+
37+- making two-way media calls
38+- making n-way media conference calls
39+- streaming media from one peer to many
40+
41+## ICE/STUN/Turn advertising
42+
43+A separate Gall agent would initially allow stars to advertise ICE and STUN servers for use by sponsored planets and their moons. WebRTC depends on ICE and STUN to allow NATed and firewalled peers to negotiate peer-to-peer connections.
44+
45+The last milestone would be to add TURN advertising with authentication to this agent. TURN servers provide relay services for peers which cannot directly connect, thus they are much more expensive, especially in terms of bandwidth, than ICE and and STUN. This should permit stars to specify which planets are authorized to use the TURN server, and, in the planet instantiation of the agent, seamlessly offer this information to WebRTC and other applications using the agent.
46+
47+## Beyond
48+
49+The proposer would eventually like to see media streas themselves propagated via Urbit. To achieve this, however, it would be necessary to:
50+
51+- Create a performant method (likely a vane) for passing network messages which are not retained in the event log
52+- Significantly improve Urbit's NAT traversal and firewall hole-punching abilities to match the state of the art. (this has been discussed with, among others, ~ritfed-tabrg and ~wolref-podlex).
53+
54+## Team
55+
56+E
57+dward Amsden (~ritpub-sipsyl) is a vertan software developer and principal of Black River Software. He has spent the last 5+ years working on industrial IoT solutions in Haskell as a contractor for Plow Technologies.
58+
59+## References
60+
61+[Mozilla Developer Network WebRTC walkthrough Dealing with connectivity](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling)
62+
63+## Milestones
64+
65+### Gall agents (WebRTC, ICE/STUN)
66+
67+2 stars
68+A Gall agent which handles exchanging SDP messages for WebRTC applications Another Gall agent which handles advertising ICE and STUN servers from stars to planets
69+
70+### Standalone WebRTC-via-Urbit-app
71+
72+4 stars
73+Urbit app running in browser and hosted/interfaced via Eyre which provides the three categories of calling functionality described in the body of the proposal
74+
75+### Authenticated TURN advertising
76+
77+2 stars
78+Extension of the ICE/STUN Gall agent to allow stars to advertise an authenticated TURN server to some or all of their sponsored planets. Extension of the WebRTC application to use TURN servers.
content/understanding-urbit/roadmap.md+1−1
@@ -26,7 +26,7 @@ As Urbit matures, other killer digital environments may emerge—but Landscape i
2626
2727<br>
2828
29−![A Landscape](https://storage.googleapis.com/media.urbit.org/tlon/landscape.jpg)
29+![A Landscape](https://storage.googleapis.com/media.urbit.org/tlon/landscape.png)
3030
3131Today, we pour all of our focus into making Landscape a comfortable place for digital communities to call home, starting with our own. This effort forces us to mature the entire stack, from the interpreter to the interface.
3232
content/using/os/getting-started.md+10−12
@@ -1,6 +1,6 @@
11+++
22title = "Getting Started"
3−description = "How to operate your ship, including using your ship's filesystem and messaging applications, starting a moon, or requesting a DNS proxy."
3+description = "How to operate your ship, including using your ship's filesystem and messaging applications, starting a moon, or requesting a DNS entry."
44template = "doc.html"
55weight = 1
66aliases = ["docs/using/messaging/", "docs/using/admin/"]
@@ -80,7 +80,7 @@ In the CLI, Urbit apps can process your input before you hit return. To see this
8080
8181`Ctrl-x` - Switches the prompt between running console apps
8282
83−`Ctrl-c` - Crash current event. Processed at the Unix layer and prints a stack
83+`Ctrl-c` - Crash current event. Processed at the Unix layer and prints a stack
8484trace.
8585
8686`Ctrl-d` - From Chat or Dojo, stops your Urbit process.
@@ -116,6 +116,7 @@ If for some reason (for example, if your sponsor is out of date), you can switch
116116If OTAs are not succeeding, or if you are on an version of Urbit before the `|ota` command was introduced, you can run `|merge %home (sein:title our now our) %kids, =gem %take-that`. **Note:** This will wipe out any custom changes to the base distribution.
117117
118118#### Additional OTA Troubleshooting
119+
119120Please check the Support Wiki for additional OTA troubleshooting, such as:
120121[OTA 1.0.71 failed](https://github.com/urbit/support/wiki/OTA-1.0.71-failed),
121122[Missing OTA](https://github.com/urbit/support/wiki/Missing-OTA),
@@ -125,13 +126,13 @@ and [No content shows in Links page after OTA](https://github.com/urbit/support/
125126
126127### Landscape
127128
128−On startup Urbit tries to bind to `localhost:80`. If you're already running something on port `80` -- such as any other HTTP server, or another urbit -- you'll find the urbit that you just started on `8080`, `8081`, and so on. For planets only, we also proxy web domains through Urbit's own servers. Any planet `~your-urbit` is also at `your-urbit.arvo.network`, but only after you [set up DNS](#dns-proxying).
129+On startup Urbit tries to bind to `localhost:80`. If you're already running something on port `80` -- such as any other HTTP server, or another urbit -- you'll find the urbit that you just started on `8080`, `8081`, and so on. For planets only, we also provide web domains through Urbit's own domain. Any planet `~your-urbit` is also at `your-urbit.arvo.network`, but only after you [set up DNS](#dns-setup).
129130
130131Once running, you can sign into Landscape, your ship’s web interface, from `http://localhost` or `https://your-urbit.arvo.network`. Since our HTTPS isn't audited / battle tested, we just call it "secure" HTTPS. You can find that on `8443`. Or `8444` (and so on) if you're already running something on `8443`.
131132
132133### Moons {#moons}
133134
134−Planets can spawn moons, which are meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
135+Planets can spawn moons, which are meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
135136
136137To generate a random moon from your planet, run:
137138
@@ -195,7 +196,6 @@ To cycle the keys of a moon without breaching, run:
195196|moon-cycle-keys ~sampel-sipnym-wicdev-wisryt
196197```
197198
198−
199199### Escaping A Sponsor {#escape}
200200
201201To use the network as a planet or star, you must be sponsored by an active star
@@ -215,18 +215,17 @@ When this happens, back up any files you'd like to save, shut down your urbit, a
215215### Life and rift number
216216
217217You can check your ship's _life_ and _rift_ number by running `+keys our` in
218−dojo. You can inspect another ship's life and rift number by running `+keys
219−~sampel-palnet`. For information on what life and rift are, see [Life and Rift](/docs/azimuth/life-and-rift).
218+dojo. You can inspect another ship's life and rift number by running `+keys ~sampel-palnet`. For information on what life and rift are, see [Life and Rift](/docs/azimuth/life-and-rift).
220219
221−## DNS proxying {#dns-proxying}
220+## DNS setup {#dns-setup}
222221
223222We have a system that lets you request a domain name for your ship in the form of `ship.arvo.network`, where `ship` is your ship's name minus the `~`. This allows users to access their ships remotely using Landscape, our graphical web interface.
224223
225−Stars and planets follow the same process DNS proxying process, and galaxies have their own requirements. Moons and comets are not supported.
224+Stars and planets follow the same process DNS request process, and galaxies have their own requirements. Moons and comets are not supported.
226225
227226### Planets and Stars
228227
229−For a planet or star's DNS proxying request to be made and fulfilled, they must be hosting their ship someplace with a public IP address, and its HTTP server must be listening on port 80.
228+For a planet or star's DNS request to be made and fulfilled, they must be hosting their ship someplace with a public IP address, and its HTTP server must be listening on port 80.
230229
231230To get `ship.arvo.network` on a planet or star, you must set up DNS routing with its parent ship by starting the `:dns` app.
232231
@@ -272,7 +271,7 @@ Otherwise, `-dns-auto` works the same as `:dns|ip` does with stars and planets:
272271
273272### Ports
274273
275−The built-in logic for listening on port 80 is to try to bind to port 80; if it cannot, it tries 8080, then increments until it can bind a port. Port 80 is available to unprivileged process on recent version of macOS. Otherwise, the process needs to either be run as root, or be given special permission (CAP\_NET_BIND on Linux).
274+The built-in logic for listening on port 80 is to try to bind to port 80; if it cannot, it tries 8080, then increments until it can bind a port. Port 80 is available to unprivileged process on recent version of macOS. Otherwise, the process needs to either be run as root, or be given special permission (CAP_NET_BIND on Linux).
276275
277276### Hoon
278277
@@ -334,4 +333,3 @@ Detailed message output will look something like this:
334333 to ~dopzod/urbit-help
335334let's try selecting this message!
336335```
337−