Composing capability security and conflict-free replicated data types
![]()
Spritely is building the next generation of decentralized networking technology.
We deserve social networks which respect our agency and autonomy. Communities deserve the right to organize, govern, and protect and enrich their members. All of these are natural outgrowths of applying the principles of fundamental human rights to networked systems.
Spritely builds on our experience co-authoring ActivityPub, the largest decentralized social network on the web to date, while applying powerful ideas from object capability security research.
Better worlds await, because better worlds are possible. Let's build a healthier and safer network together!
Follow us: [fediverse] [bluesky]
IRC chat: #spritely on libera.chat
It's hard to build the kind of vision Spritely is envisioning on top of contemporary tech. Because of this, Spritely is taking a multi-layer approach!
Goblins is the foundation of the rest of Spritely's tech and makes building distributed and capability-secure programs easy and fun:

Hoot is Spritely's Scheme-to-WebAssembly compiler and all-around WebAssembly toolkit. Hoot was designed to allow Spritely's tools to run in the browser and reach a wider audience. However Hoot is generally powerful and useful for building Scheme projects on the web.
But that's not all! In addition to being a Scheme-to-WebAssembly compiler, Hoot also features WebAssembly assembler and disassembler tools... and even a WebAssembly interpreter for developers! If you're thinking of making your own custom WebAssembly language or even just want to learn how WebAssembly works, Hoot might be just what you want!
OCapN, the Object Capability Network, is the suite of protocols that gives Goblins its networked programming superpowers. OCapN's CapTP gives fine-grained capability programming over the network, distributed garbage collection, promise pipelining to avoid extra network round-trips, and introductions and smooth communication between peers as appropriate. OCapN's netlayers allow layering OCapN to run on top of a variety of network substrates including Tor Onion Services, libp2p, TCP+TLS, and perhaps some day carrier pigeons wearing encrypted microsd card backpacks.
OCapN's proto-standardization efforts are a joint project between multiple groups such as Spritely, Agoric, Metamask, and Sandstorm. Spritely took leadership in drafting the first versions of OCapN's specifications, extrapolating first from Goblins' implementation of the protocol, then working to bridge across the protocol needs of the participants of the group. OCapN builds on a long history of networked capability research, most prominently from the E programming language.
The Spritely Institute is a 501(c)(3) nonprofit and research institution built to develop new technologies for the decentralized web. All code we release is free and open source software and all papers we write are open access under free cultural licenses.
A primer for the Scheme family of programming lanuages. It was originally written to aid newcomers to technology being developed at The Spritely Institute, but it is designed to be general enough to be readable by anyone who is interested in Scheme.
Formats: html | pdf | orgThis paper details the core technical toolbox provided by Spritely Goblins and how it supplies the necessary features to make building peer-to-peer applications as natural as any other programming model.
Formats: html | scheme pdf | wisp pdf | orgNames must be human-readable in order to be widely used. Unfortunately, while DIDs and Tor .onion addresses are decentralized and globally unique, they are not human readable. How can we build user interfaces that real users might actually use? In this paper we provide an overview of petname systems, a way of mapping human readable names to cryptographically secure names.
Formats: html | pdf | orgIn this paper, which builds off of the Petnames paper, we present our experiences from implementing a petname system for an existing chat application. We introduce the necessary mechanisms to retroactively introduce a petname system, the solutions provided, and future expected work.
Formats: html | pdf | orgThis paper presents an example implementation of a way for programs to describe themselves to each other and to users in a decentralized system. Making use of a simple petname system, content-addressed descriptors and interfaces can allow multiple parties to agree on what a particular term means without prior context. This understanding can be distributed without a centralized naming authority. This paper also describes some of the necessary design considerations when using CADs in a mutually suspicious network.
Formats: html | pdf | org![]()
This year, instead of participating in the Autumn Lisp Game Jam, Spritely decided to make some non-game demos to show off our tech. To that end, I spent the week of November 3rd writing GoblinShare, a secure, peer-to-peer file-sharing utility using the Guile port of Magenc for storage and distribution, relying on Goblins for the peer-to-peer connection abstraction, and delivered over Tor. Thanks to Goblins, this turned out to be super easy to implement. Let me show you how!
We’re excited to announce the release of Spritely Goblins 0.17.0! This release features a new lightning-fast persistence store called Bloblin, improved performance for persistence, and many bug fixes!
Today we're happy to announce the release of Goblins 0.16.1. This is a small patch release for the 0.16.0 release from a few weeks ago. Unfortunately, shortly after releasing it we discovered some issues which prevented using OCapN (the peer-to-peer networking element of Goblins) with Hoot. This release resolves that along with a couple of minor bug fixes.
We are excited to announce Spritely Goblins v0.16.0! This release of Goblins is faster than ever, with two major core speedups benefiting all Goblins-using programs! Furthermore, we have a brand new Unix Domain Socket netlayer, which means our OCapN protocol is now usable for efficient machine-local inter-process communication!
Over the past 6 months, Spritely has been busy bringing our message to new audiences. I thought it might be nice to compile a list for everyone to watch our talks. Christine Lemmer-Webber, the Executive Director of Spritely, has been busy giving most of these presentations, but the entire team has helped as well. The talks cover our technology, our values, our past, and our vision.
For those of us that use the Lisp family of programming languages, we have much appreciation for the humble pair. Using pairs, we can construct singly-linked lists and key/value mappings called association lists. Lists built from pairs have the pleasant property of being immutable (if you abstain from using setters!) and persistent: extending a list with a new element creates a new list that shares all the data from the original list. Adding to a list is a constant time operation, but lookup is linear time. Thus, lists are not appropriate when we need constant time lookup. For that, we need hash tables.