State of Mars: Spring 2021

Introduction

In lieu of a tutorial or interview, I thought it would be useful to write a short summary of some of the developments surrounding Urbit in the last year. 2020-21 has been an eventful period for many reasons, but the pace of development on the Urbit project has been steady, and always in the direction of beauty and utility.

When I polled a chat group about their favorite recent improvements and features, several people mentioned its improved reliability, especially chat. Though I half-fondly recall waiting 5-10 seconds for keystrokes to register into the CLI chat client and posting multiple times on return a few years ago, it is true that the overall stability has improved markedly. I hear about breaches less frequently, and I use my ship throughout the day without experiencing serious problems or errors. The team at Tlon definitely deserves significant credit for wrangling such a novel system not just into working, but being useful.

So, if you are new to Urbit, or haven’t checked in on it in a while, here’s a survey of how things have changed and are anticipated to change soon.

Landscape developments

Urbit has come a long way in since the release of OS1 in April of 2020. OS1 was the first release of most of the major features of Landscape, the web interface for Urbit. If you haven’t dug in much, you could be forgiven for thinking that Landscape was Urbit. If you dipped your toes into Landscape or saw somebody using it a few months ago, you will immediately notice the significant UI tweaks and improvements, as well an ever-incrementing level of UI polish.

One of the big changes under the hood has been the integration and extension of %graph-store as an underpinning for the social apps in landscape (you can read more about the design of %graph-store here). The suite of software running in Landscape has a common underpinning, and all of the data you generate – your posts, comments, essays, etc – are stored as interlinked nodes on a personal graph. This is beginning to bear fruit; a recent update contains native Urbit URIs, and the ability to embed graph content across apps ("graph node transclusion"). You can think of this a bit like embedding a tweet in a webpage, but applied to whatever data is contained in your graph or somebody else’s; you can even reference nodes which contain their own nested nodes.

This feature is young and simple, but to me it feels like a real shift in the possibilities of threaded content – you can, today, create a notebook which contains nested nodes drawn not just from your own posts and messages, but from anybody else’s. Recall that graph content is not bound only to chat messages, but rather that graph semantics can be applied to any data generated by your computing. Graph content is also cryptographically signed by your ship’s keys and can include executable code; this is a truly new combination of features gesturing toward new kinds of social computing. And this feature isn’t even the point of Urbit!

Self-hosting improvements

Using Urbit has gotten significantly easier in the last few months. There are many ways to self-host, but I suspect there are two recent innovations that will prove particularly convenient for people wanting to tinker with a ship for the first time. The first is Docker Desktop on Windows: it is finally possible to run Urbit on Windows without having to do Linux system administration in a command line. Many people are simply allergic to controlling a computer with a CLI – it can be an overwhelming task to jump headlong into an interface you have limited or no experience with. Fortunately, the ability to manage a ship in a GUI opens the doors to many more people who might otherwise be turned away. Docker Desktop can also manage your updates for you, and sands off a few of the rough edges of the WSL experience. If you have a Windows 10 computer, you can boot a comet today in ten minutes without touching a bash shell.

The second development I want to call attention to is Taisho, a minimal Electron interface for launching ships created by ~nocsyx-lassul to fulfill a grant.

Taisho allows you to download and run a GUI desktop app and boot a ship with the click of a mouse. At the moment it’s a proof-of-concept, limited to Mac/Linux and the ability to launch comets, but it will be a fully-featured cross-platform client in the future (including for Windows), eventually intended to be the official client. If you’ve never booted a ship before, this is definitely the slickest way to do it.

Update: Taisho is now known as Port, and has been released as the official Urbit client. Windows support soon!

Hosting

Fully-hosted providers will probably be the way that most ordinary people pilot their ships – generally speaking, people either do not have a computer that they leave turned on 24/7, they do not use Mac or Linux, or they just don’t want to be bothered with managing their own server. If you aren’t really into digital sovereignty, there’s little reason not to pay somebody do this for you.

Thus far, I am aware of three full hosting providers – Tlon, Get Urbit ID, and Escape Pod Store, all of which launched in the last year. Expect more to follow!

Naive rollups

The ongoing crypto bull run has had the predictable effect of making interacting with Azimuth contracts very expensive; the cost of issuing a planet on average is about 10x what it was a year ago. Fortunately, an effort is underway to reduce these costs by orders of magnitude.

The solution Tlon has begun work on is called ‘naive rollups’. In brief, the way Azimuth works involves running computations on Ethereum and having it store the results for nodes on Urbit to reference as a source of truth. Those computations cost money, so the solution is to perform the computations on Urbit, and merely store the resulting data on-chain in batches.

You can see ~wicdev-wisryt discuss the design of this system at length in a developer call, or read the original RFC.

The short version of this is that in a few months, the transaction fees associated with issuing a planet should be cut by at least 65x. In the longer term, a solution involving zero-knowledge rollups may be expected.

Update: You can read a more accessible explanation of the rollup solution here.

Apps

The ecosystem of apps being developed for Urbit has picked up pace; you can see an index of projects on the awesome-urbit Github collection. Here, I will feature two highlights:

- Urbit Chess

While this isn’t the first time chess has been implemented on Urbit, this version is significantly more sophisticated, and can be installed by remotely mounting a desk, effectively letting you install via one-liner. This version also allows you to save and export games, and ~rolsut-rospub also has plans to implement ELO ratings.

- srrs

~littel-wolfur has been working on this app for quite a while, and it shows – the level of polish on this spaced-repetition app is obvious. If you’ve ever used Anki to learn a foreign language or subject, you know that it is a particularly effective mode of study.

srrs allows you to export decks, import existing Anki decks, and subscribe to decks on other ships. It even includes an command-line interface.

Bitcoin

Urbit’s Bitcoin integration is just around the corner, with an official release of April 27 – a day I’ve been excited about for a while.

Much has been written about the philosophical alignment of Bitcoin and Urbit – ‘sound money for sound computing’ and ‘civilization-complete’ spring to mind as slogans – but the day is finally upon us. A robust, distributed social platform with first-class decentralized payment support opens a world of possibility. Besides a convenient and secure social layer for simple cash transactions, there are a lot of business models built around distributing digital content for payment.

Next up is Lightning network integration, in order to facilitate fast, small payments of the kind that would be more suited to access to things like friend-to-friend payments, content subscriptions and media. If you think you have the chops, reach out to ~timluc-miptev.

Update: *Bitcoin support was officially released in May 2021. Read more about using it here.

WebRTC

The next big feature to be expected later this year is WebRTC video and audio chat. WebRTC is an existing collection of methods for peer-to-peer streaming multimedia – you may have used it before in something like Discord’s audio channels.

One of the convenient parts of WebRTC is that a lot of the hard work (e.g. interfacing with hardware) is done by the browser, in line with existing standards. This means that the work needed to implement it on Urbit is mostly a matter of writing software to coordinate peers with each other and perform NAT traversal (STUN/TURN/ICE). This plays to the strengths of Urbit’s design as an overlay OS, and meshes nicely with the existing suite of Landscape agents.

Urbit’s WebRTC implementation is being developed by ~ritpub-sipsyl to fulfill a grant proposal.

(image credit ~fabled-faster)


To end with, I wanted to link a recent discussion on the urbit-dev mailing list (if you’re interested in closely following this project, there is no better way). The OP rightly points out that there seem to be many urbits – the original project, the one that exists, and the one that will exist – and that this can get in the way of understanding what it is. A thoughtful and gracious conversation follows, touching on many different perspectives on the topic. Recommended for weekend reading.


This post is also available on Urbit, where you can post comments. Join ~matwet/networked-subject and open the Networked Subject notebook.