<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title><![CDATA[Dispatch]]></title>
    <link>https://www.inkandswitch.com/newsletter/</link>
    <description><![CDATA[An occasional update on the lab’s latest findings, appearances, and happenings.]]></description>
    <lastBuildDate>Fri, 17 Apr 2026 19:43:02 GMT</lastBuildDate>
    <atom:link href="https://www.inkandswitch.com/newsletter/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title><![CDATA[Inkstravaganza]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-015/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-015/</guid>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[Recent work from our Programmable Ink research area — visualizable computation, software you can put your hands on, and a grimoire of rune stones and imagination.]]></description>
      <content:encoded><![CDATA[<p>Today we’re shining a bright spotlight on recent work from our Programmable Ink research area — visualizable computation, software you can put your hands on, and a grimoire of rune stones and imagination.</p>
<figure class="wide">
<img src="inkstravaganza.webp" alt="Photo of a desk covered with objects relevant to Programmable Ink research: A small pot of black inklets, a bottle of glowing green flux, pins, dice, stones, a ruler, technical pens, chocolate, and a knife all adorn the edge of the photo. At the center, a coffee-stained draft print of the PlayBook user guide, an open notebook showing sketches of propagators and a cat, and a dithered photo of Martin Kleppmann are spread out across a ruled cutting mat.">
</figure>
<p>For the past few years, we’ve been quietly building a holistic, malleable notebook we call <a href="/project/playbook/">PlayBook</a>. The goal is to make something that feels every bit as good as paper &amp; pencil for sketching and writing in your own hand. But unlike paper, PlayBook is imbued with dynamic behaviour, built out of composable pieces that let you reshape the notebook and add your own augmentations. Members of our team have been using PlayBook continuously for over two years, living inside the tool for their daily note taking, brainstorming, music composition, puzzle solving, collaborative whiteboarding, PDF marking, tutoring, and more. In this newsletter, and throughout the coming year, we’ll share more about how PlayBook was designed, how we built it, and what it now enables us to do.</p>
<h2 id="portemine"><a class="plain" href="#portemine">Portemine</a></h2>
<p>First up: Marcel Goethals is in the midst of an exploration. He suspects that propagator networks will be a useful computational substrate for PlayBook. You can use them to implement SAT and constraint solving, foundational pieces of our <a href="/untangle/">past</a> Ink <a href="/project/inkling/">research</a>. Propagators lend themselves quite naturally to visual/spatial representation, with execution visualized over time. They’d likely work well as a kind of “assembly language” that other visual programming systems could be built atop. As his experiments progress, Marcel has been publishing a series of small lab notes with motivations, findings, video clips, open questions, and other tidbits. Read more about <a href="/ink/notes/portemine">Portemine, an exploration into propagator networks</a>.</p>
<figure>
<img src="temp-converter.png" alt="A temperature convertor built with Portemine, with a loop of nodes performing multiply-add on one side and subtract-divide on the other.">
</figure>
<h2 id="gestures"><a class="plain" href="#gestures">Gestures</a></h2>
<p>Another area of ongoing work in PlayBook is our systems for handling user input. PlayBook is designed to feel like paper. It doesn’t have any on-screen GUI elements that you can accidentally tap with your finger, because paper doesn’t have that. You can comfortably rest your hands anywhere on the screen, or grip the screen with one hand while writing with the other like a clipboard. To switch between tools (such as drawing and selecting), we’ve created a special “firm press” gesture that you perform with the pen. Our focus on designing these gestures, and our desire to rapidly prototype new gestures, has led us to develop our own approach to dispatching and acting on user input events. In a recent lab note, Ivan Reese walked through <a href="/ink/notes/how-playbook-processes-user-input">the technical design of the PlayBook gesture system</a> step by step, with comparisons to other popular approaches.</p>
<h2 id="drawdeck"><a class="plain" href="#drawdeck">DrawDeck</a></h2>
<p>Finally, we have DrawDeck. What is DrawDeck? <em>Why</em> is DrawDeck? Very mysterious. Perhaps there are “rune stones” you could pick up and set down, and scraps of paper you could set the stones beside. Perhaps a computational process would unfold in space and time. You could draw a cat. You could perceive the cat, or not. You might instead reach for other stones. Divination. Imagination. Perhaps the scraps of paper remember something. And from the mouth of Marcel Goethals, I directly quote, “Stones can communicate with each other through ‘dreams’.” For the sake of argument, let’s say you <a href="/ink/notes/drawdeck/">read more about DrawDeck, looked at some videos</a>. Good, good. Now you never know.</p>
<figure>
<img src="you-could-draw-a-cat.png" alt="On the left, a card with a drawing of a cat. In the center, a rune stone surrounded by a puff of smoke. On the right, a card that reads, &quot;Remove the cat's face; keep only the whiskers.&quot;">
</figure>
<h2 id="whats-one-more-open-tab"><a class="plain" href="#whats-one-more-open-tab">What’s one more open tab?</a></h2>
<p>After implementing image dithering for the new <a href="https://automerge.org">Automerge website</a>, Ivan Reese created a little sandbox where you can <a href="/tangents/dither-explorer/">play with error diffusion dither kernels</a> in a way that feels like a board game.</p>
<figure>
<img src="dither.png" alt="A close-up of a dithered photo, with big chunky white pixels on a dark grey background. Below the photo is a grid, with a yellow grid cell at the center surrounded by piles of grey tokens.">
</figure>
<p>Tickets are on sale now for <a href="https://www.localfirstconf.com">Local-First Conf 2026</a>. This year, in addition to two days of conference talks, there will be a special “Lab Day” hosted by Ink &amp; Switch featuring live demos, creative experiments, and community projects — part unconference, part showcase, and shaped by the ideas that animate our community. We hope to see you there!</p>
<p>That brings us to the end of our special Inkstravaganza newsletter. Stay tuned for next time to hear about the flurry of activity happening in <a href="/patchwork/notebook/">Patchwork</a>, and <a href="/connect/">reach out</a> if you’d like to work more closely together.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Introducing GAIOS]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-014/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-014/</guid>
      <pubDate>Thu, 27 Nov 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Our first update about the ARIA Safeguarded AI Programme and project GAIOS, which uses Keyhive. A recap of LIVE 2025. A new lab note from the Beckett team, two new researchers-in-residence, three new staff, and a new Automerge website.]]></description>
      <content:encoded><![CDATA[<p>Hello and welcome to a jam-packed edition of the Ink &amp; Switch Dispatch! It begins with our first public update about the ARIA Safeguarded AI Programme, introducing our project GAIOS and the new lab staff working on it, followed by a report on its implementation of our new local-first auth system Keyhive. We’ll share three presentations from the LIVE 2025 conference, and cue-up a new lab note from the Beckett video game version control project. Finally, we have two new researchers-in-residence in the spotlight, and a fresh coat of yellow paint for the Automerge website. Phew!</p>
<h2 id="gaios"><a class="plain" href="#gaios">GAIOS</a></h2>
<p>In the <a href="https://www.inkandswitch.com/newsletter/dispatch-013/">previous dispatch</a> we announced that Ink &amp; Switch has joined the ARIA Safeguarded AI Programme (SGAI). Put plainly, the programme’s goal is to develop a suite of tools for modelling complex systems to determine how they might be augmented with AI. To that end we are building GAIOS, a malleable, collaborative software platform derived from our <a href="https://www.inkandswitch.com/project/patchwork/">Patchwork</a> project. GAIOS will allow other teams participating in the SGAI programme to unite their modelling and simulation tools, building atop a common foundation with interoperability and version control powered by <a href="https://automerge.org">Automerge</a>.  We’ll share more of GAIOS, including its source code, throughout the coming year.</p>
<figure>
<img src="gaios.webp">
<figcaption>
<p>The GAIOS logo, designed by Todd Matthews.</p>
</figcaption>
</figure>
<p>The team working on GAIOS includes many longtime Ink &amp; Switch researchers, and a few new faces:</p>
<ul>
<li>The mononymous <a href="https://grjte.sh">grjte</a> will lend her expertise in zero-knowledge proofs and programmable cryptography to the GAIOS team. Previously at Bain Capital Crypto, grjte recently shared <a href="https://groundmist.xyz">Groundmist</a>, a series of experiments building local-first tools that leverage the AT Protocol and Automerge.</li>
<li>Maciek Sakrejda worked on Postgres tooling for most of his career but has now seen the local-first light. He’s already an active contributor to <a href="https://github.com/automerge/automerge-repo">Automerge Repo</a>, and since joining the lab has helped land presence indicators for our in-house instance of Patchwork. His full-stack skills will be instrumental as we prepare GAIOS for real-world use.</li>
<li>Fresh from presenting at LIVE 2025, <a href="https://www.orionreed.com">Orion Reed</a> brings his knack for quick-and-compelling prototypes, programmable canvas tools, and malleable substrates to the lab. Orion’s work spans disciplines, leading him to collaborate with varied groups like <a href="https://folkjs.org">FolkJS</a>, the mysterious <a href="https://tentpole.computer">Tentpole Collective</a> (with researcher-in-residence alumni Elliot Evans and Lu Wilson), and the <a href="https://www.libcomp.org">Liberatory Computing</a> collective.</li>
</ul>
<h2 id="keyhive"><a class="plain" href="#keyhive">Keyhive</a></h2>
<p>We’ve accelerated our work on <a href="https://www.inkandswitch.com/project/keyhive/">Keyhive</a>, a capabilities-based auth system specially designed for local-first software, to prepare it for GAIOS. Adding access control is an important step for collaborative systems like GAIOS and Patchwork: it defines who can connect, who can request documents, and lays the groundwork for richer permissions in the future. What follows is a lightly-technical summary of the most recent work on Keyhive, written by Brooklyn Zelenka and John Mumm.</p>
<figure>
<img src="keyhive-poc.png">
<figcaption>
<p>Sharing a document in the Keyhive proof-of-concept.</p>
</figcaption>
</figure>
<h3 id="integration-into-gaios"><a class="plain" href="#integration-into-gaios">Integration into GAIOS</a></h3>
<p><a href="https://github.com/automerge/automerge-repo">Automerge Repo</a> started with no ability to do auth. We added integration points to Automerge Repo for authorization APIs, and then plugged in Keyhive as the auth provider. This gives us a natural point to enforce capabilities whenever a document is accessed while maintaining the existing Automerge Repo APIs. This integration provides the following:</p>
<ul>
<li>All messages sent or received are signed with the local non-extractable signing key</li>
<li>Messages for a particular document are authorized by checking the access rights of the authenticated sender of the message against the local Keyhive instance</li>
<li>Keyhive’s ops are synchronized over the same network stack as the rest of Automerge Repo, but currently with a naive diffing mechanism which we plan to replace with the new sync system (Subduction — more on that below)</li>
</ul>
<p>The end result is that all documents in GAIOS are protected at the network boundary by the Keyhive access control CRDT and GAIOS guest applications are passed an interface to manage this access control state without needing to know about storage or synchronization. This is an initial integration, and ongoing work includes adding E2EE and enforcing revocations on backdated Automerge content.</p>
<h3 id="share-menu-graphical-interface"><a class="plain" href="#share-menu-graphical-interface">“Share Menu” Graphical Interface</a></h3>
<p>In parallel, we began prototyping a “share” (permissions) dialog for users. This menu provides a clear UI to invite collaborators, adjust permissions, and revoke access. The goal is to make capability management feel familiar — more like adding a collaborator in Google Docs, less like managing cryptographic keys. Behind the scenes, these actions map to issuing or revoking Keyhive capabilities. This design aims to connect the user mental model (“sharing a document”) with the technical enforcement layer (capabilities).</p>
<p>We’ve recorded <a href="keyhive-demo.mp4">a short video demonstrating this early UI prototype</a> if you’d like to see it in action.</p>
<h3 id="subduction"><a class="plain" href="#subduction">Subduction</a></h3>
<p>One recurring challenge in CRDT-based systems is synchronization at scale. As more users join, and as documents grow larger, our reference sync server implementation has shown stress points:</p>
<ul>
<li>It maintains a fully materialized version of every document in memory.</li>
<li>It computes hashes and related states eagerly for each request.</li>
<li>Being written in Node.js — which being 32-bit has a 4GB memory limit — it can run into memory pressure.</li>
</ul>
<p>The result: servers sometimes time out under heavy load, particularly when handling large diffs or very active documents.</p>
<p>To address this, we’ve been developing an alternative sync strategy we call Subduction. Instead of materializing entire documents, Subduction deterministically chunks documents and streams only the minimal state needed to reconcile peers.</p>
<figure>
<img src="sedimentree.png">
<figcaption>
<p>An illustration of document chunking.</p>
</figcaption>
</figure>
<p>We believe that this should result in:</p>
<ul>
<li>Improved scalability: less memory overhead, much less CPU use per request.</li>
<li>Better performance: faster diffs, quicker round-trips.</li>
<li>Set us up for E2EE documents since it doesn’t need to know anything about the underlying document other than some hash identifiers.</li>
</ul>
<p>We are finalizing the integration of Subduction with Automerge Repo, and hardening the integration of Keyhive in GAIOS. Subduction and Keyhive are nearly ready for their public debut — after <em>just a little bit more</em> internal testing and dogfooding.</p>
<h2 id="live-2025"><a class="plain" href="#live-2025">LIVE 2025</a></h2>
<p>In September we participated in <a href="https://liveprog.org/live-2025">LIVE 2025</a>, the 11th Workshop on Live Programming. Here are three of the presentations from folks affiliated with the lab.</p>
<figure>
<img src="live.webp">
<figcaption>
<p>Screenshots from the three live presentations, showing a poker game with various statistics and scenarios in Ambsheets, an illustration of Nova’s stacks, and a few strategies for adversarial interoperability.</p>
</figcaption>
</figure>
<h3 id="a-spreadsheet-for-exploring-scenarios"><a class="plain" href="#a-spreadsheet-for-exploring-scenarios">A spreadsheet for exploring scenarios</a></h3>
<p>In <a href="https://www.inkandswitch.com/project/ambsheets/live25/">Ambsheets: A spreadsheet for exploring scenarios</a>, Alex Warth, Geoffrey Litt, and Avi Bryant introduce Ambsheets, a spreadsheet that lets you model uncertainty and explore multiple scenarios simultaneously. The paper builds on their <a href="https://www.inkandswitch.com/ambsheets/notebook/">earlier explorations</a>, discusses limitations they discovered, and presents a new version of the language that addresses those limitations. Also make sure to check out the <a href="https://www.youtube.com/watch?v=EtC2XiGFh7E">video</a>.</p>
<h3 id="nova"><a class="plain" href="#nova">Nova</a></h3>
<p>June Gardner, a researcher-in-residence at the lab, presented her work on <a href="https://nova-lang.net">Nova</a>, a lightweight model of computing that uses rule-based modelling and physical metaphor to bridge the gap between physical media (pen/pencil, notecards/paper) and the programming of digital, electronic computers. <a href="https://www.youtube.com/watch?v=Um_LXirqW1k">The talk</a> covers the basics of Nova as well as its advantages and current development status, as well as some hints at what the future might hold for Nova as a programming language.</p>
<h3 id="live-programming-in-hostile-territory"><a class="plain" href="#live-programming-in-hostile-territory">Live Programming in Hostile Territory</a></h3>
<p>Orion Reed, who recently joined the lab to help build GAIOS, collaborated with Christopher Shank on Live Programming in Hostile Territory. The <a href="https://folkjs.org/live-2025/">paper </a> and <a href="https://www.youtube.com/watch?v=540g_lxcOEg">talk</a> argue that live programming research should broaden its purview from the creation of new environments to the augmenting of existing ones and, through a selection of prototypes, explore three adversarial strategies for introducing programmatic capabilities into existing environments which are unfriendly or antagonistic to modification.</p>
<h2 id="version-control-for-space-and-structure"><a class="plain" href="#version-control-for-space-and-structure">Version Control for Space and Structure</a></h2>
<p>Beckett — our exploration of version control inside the Godot game engine — continues apace. We’re pleased to share that <a href="https://ashlinduncan.com">Lilith Duncan</a> has joined the team. Lilith is a gamedev and toolmaker, most recently at Unity focused on worldbuilding and environment tools. Lilith and the rest of the team were in-person at GodotFest Munich, and they received a glowing response to various demos of their work-in-progress.</p>
<p>Speaking of work-in-progress, we’ve just published the first Beckett lab note, <a href="https://www.inkandswitch.com/project/beckett/notebook/01/">Version Control for Space and Structure</a>. The note describes our latest findings after working to integrate diff visualizations into the Godot editor viewport and handling various structural changes within Godot scene files. These scene files are stored as text, making it <em>possible</em> to track them with traditional version-control systems (like git), but these systems fail to uphold important structural relationships within the files, leading to broken, unopenable projects. Read the lab note to learn how Beckett overcomes these issues.</p>
<h2 id="and-points-beyond"><a class="plain" href="#and-points-beyond">And Points Beyond</a></h2>
<p>We’re also pleased to spotlight two <em>more</em> new people who have joined Ink &amp; Switch as researchers-in-residence. <a href="https://june.codes">June Gardner</a>, as we mentioned above, is the creator of the <a href="https://nova-lang.net">Nova</a> programming language. She plans to spend the residency enhancing Nova and improving the tooling and documentation around it. Previously, June created <a href="https://wiki.xxiivv.com/site/modal">Modal</a> and founded the <a href="https://nouveau.community/">Nouveau</a> creative computing collective.</p>
<p><a href="https://mimireyburn.com/">Mimi Reyburn</a> is a design-focused engineer and AI researcher, currently working at the NHS to improve information for patients and visualizing their needs. A few of her playfully inspiring personal projects are <a href="https://isthetubef.uk">isthetubef.uk</a> and <a href="https://mimireyburn.com/Applied+AI+%26+Maker/%F0%9F%93%85+Inky+Calendar">Inky Calendar</a> (not to be confused with <a href="https://www.inkandswitch.com/ink/notes/sketchy-calendar-project/">Sketchy Calendar</a>).</p>
<p>Finally, after months of internal brainstorming and iteration, we unveiled <a href="https://automerge.org">a brand-new website for Automerge</a> with a striking visual design created by Todd Matthews and a whizzy interactive demo by Ivan Reese. The new website uses punchy language and illustration to nail down a few key points: what Automerge is for, how you can adopt it, and why it’s worth using. Behind the scenes, the website uses a <a href="https://github.com/automerge/automerge.github.io#overview">custom static site generator</a> that Ivan previously created for the Ink &amp; Switch website, designed for rapid iteration and ongoing tailoring to our exact needs. This will increase how quickly and readily we can update the Automerge website and unblock our effort to improve the docs, tutorials, and other resources.</p>
<figure>
<img src="automerge.png">
<figcaption>
<p>The new Automerge website, in vibrant yellow, with an interactive demo on the home page.</p>
</figcaption>
</figure>
<p>That’s all for this mega-sized Ink &amp; Switch Dispatch. If you’d like to collaborate with us or share your thoughts, <a href="https://www.inkandswitch.com/connect/">we’re all ears</a>. See you next time!</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[ARIA Safeguarded AI Programme, new faces, and a splattering of ink lab notes]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-013/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-013/</guid>
      <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Peter, our lab director, will announce a major new initiative. You’ll hear about two researchers who have recently joined our staff. Finally, we’ve got a collection of lab notes about Programmable Ink.]]></description>
      <content:encoded><![CDATA[<p>Hello and welcome! The lab is positively buzzing with energy this month. First, lab director Peter van Hardenberg will announce a major new initiative — this one has been a long time coming. Next, you’ll hear about two researchers who have recently joined our staff. Finally, we’ve got a collection of lab notes about Programmable Ink, to scratch your hardcore engineering itch. So without further ado, here’s Peter!</p>
<h2 id="ink-and-switch-supporting-the-aria-safeguarded-ai-programme"><a class="plain" href="#ink-and-switch-supporting-the-aria-safeguarded-ai-programme">Ink &amp; Switch supporting the ARIA Safeguarded AI Programme</a></h2>
<p>I’m pleased to share that Ink &amp; Switch has joined the <a href="https://www.aria.org.uk/opportunity-spaces/mathematics-for-safe-ai/safeguarded-ai/">ARIA Safeguarded AI Programme</a>. It’s an ambitious research programme dedicated to making it possible to employ AI systems in large-scale safety critical applications, such as optimizing national power grid allocation or developing biomedical supply chains. The programme is funded by the UK Government’s Advanced Research + Innovation Agency.</p>
<p>This might seem far afield from our usual area of work, primarily focused on “tools for thought”, but in fact that’s precisely what we’re offering to the programme. We’ll be working with our fellow Creators in the programme to develop the interfaces that help people and AI agents collaborate on building accurate models of interesting real-world systems.</p>
<p>While it’s still early days for our collaboration, and we don’t want to presume what the best approach for this project will be, our work on <a href="https://www.inkandswitch.com/project/patchwork/">Patchwork</a> is what brought us into the programme, and is a starting point for further exploration.</p>
<p>The SGAI programme is significant, including too many teams to name across many disciplines, but we are joined in our little sub-group by our friends at <a href="https://hash.ai">HASH</a> (who some of you might recognize from the <a href="https://blockprotocol.org">Block Protocol</a>), the <a href="https://www.notion.so/Future-of-Programming-Lab-241d162461a04064ae1fd9ae32bf4cb1">Future of Programming lab</a> building <a href="https://hazel.org">Hazel</a> under Cyrus Omar’s direction at the University of Michigan, and the <a href="https://topos.institute">Topos Institute</a> who are working on <a href="https://github.com/ToposInstitute/CatColab">CatColab</a>.</p>
<figure>
<img src="patchwork_catcolab.png">
<figcaption>
<p>A sneak peek at CatColab running inside Patchwork.</p>
</figcaption>
</figure>
<p>Throughout the next two-and-a-half years, we’ll be spending lots of time in the UK working closely with the research group and with the many people and institutions who might need these tools. We held our first UK-based meetup recently at the <a href="https://tldraw.dev">tldraw</a> offices (thanks to Lu and Steve for hosting us), which featured demos of Patchwork, Hazel, Tonk, <a href="https://dxos.org">DXOS</a>, and Cursor for Canvas.</p>
<p>I’m excited and honored to be a part of an ambitious project like this, and I’m grateful to David Dalrymple and the ARIA team for bringing us on board. We are just one small part of a huge team, but we are delighted at the chance to continue to develop tools for thought in a new context of serious use.</p>
<p>As always, if your organization could use our help, you can always <a href="/connect">reach out</a>. We’re available both informally and in partnership.</p>
<p><em>Oh, one more thing: one of the requirements of the programme is the open-sourcing of all code participating in the project, so we’ll be releasing Patchwork in some form soon. It needs a little more time to bake in the oven before we turn you loose on it but… watch this space.</em></p>
<h2 id="two-new-faces-joining-the-lab"><a class="plain" href="#two-new-faces-joining-the-lab">Two new faces joining the lab</a></h2>
<p>We’re pleased to welcome a pair of new researchers to our team. They’re joining, in part, to lend a hand with our work on the ARIA Safeguarded AI Programme, each bringing a particular area of expertise.</p>
<p>You may remember <a href="https://github.com/jtfmumm">John Mumm</a> (he/him) from his work on <a href="https://www.inkandswitch.com/keyhive/notebook/">Keyhive</a>. After a brief stint away, he’s rejoined the lab to help implement a version of Keyhive suitable for Patchwork, and will also be contributing to Automerge. John also has a knack for cooking up surprising little local-first demos, so don’t be surprised if some of those make an appearance in future Dispatches.</p>
<p>We also have <a href="https://chee.party">chee rabbits</a> (they/them or just chee), who joined just weeks ago and has already rebuilt the core of Patchwork in a much more modular form. While Patchwork started as a research prototype, we’re now using it for much of our collaboration within the lab, and it’ll be up to chee to steadily increase its dependability and malleability.</p>
<h2 id="exploring-ink-deformation"><a class="plain" href="#exploring-ink-deformation">Exploring ink deformation</a></h2>
<p>Several of our projects — <a href="https://www.inkandswitch.com/keyhive/notebook/">Keyhive</a> and <a href="https://www.inkandswitch.com/patchwork/notebook/">Patchwork</a>, for instance — have “notebooks” chronicling their evolution. For Programmable Ink, however, we’re doing something different.</p>
<p>The ink work is fluid, and has been advancing in surges over the life of the lab. In that time we’ve amassed a sizable collection of lab notes internally, but they aren’t organized in any sort of coherent sequence or structure. Lately, we’ve been collecting some of these existing notes, and writing new ones, to grow a <em>wiki</em> (of a sort) tying these notes together.</p>
<p>It’s not meant to be the sort of thing you sit down and read front-to-back, or follow along with as each new entry is added (though if you’d like to, subscribe to our <a href="https://www.inkandswitch.com/index.xml">RSS feed</a>). Rather, we’ll occasionally point you to something new—a good starting point—and let you explore from there. Follow your curiosity.</p>
<figure>
<img src="neatness_dynamism.png">
<figcaption>
<p>The search for handmade drawings imbued with computational power continues!</p>
</figcaption>
</figure>
<p>This month, we’re sharing an exposition of <em>ink deformation</em>. In short, it’s our goal to imbue the ink and paper of your digital notebook with a sense of <em>material physics</em>, behaviour informed by but diverging from their real world analogs. This includes systemic behaviours like undo/redo—naturally—but also more specialized behaviour. In the case of ink, we’re looking for ways to make it bend, stretch, and mold. For instance, if you draw an arrow, you should be able to grab the arrow and point it at something else — yet it should still look like it was drawn by your hand.</p>
<p>To that end, here is <a href="https://www.inkandswitch.com/ink/notes/ink-deformation-review/">Ink Deformation — A Review</a>, and if you’d like to explore deeper, see this growing collection of <a href="https://www.inkandswitch.com/ink/notes/deformation/">all our ink deformation notes</a>.</p>
<h2 id="whats-another-open-tab"><a class="plain" href="#whats-another-open-tab">What’s another open tab?</a></h2>
<ul>
<li>Join us <em>this Wednesday</em> for the <a href="https://luma.com/70fuozje">September Automerge Community Call</a>, featuring updates about the core libraries, a couple demos, and time for Q&amp;A. These community calls are a new monthly opportunity for the Automerge community to share their projects and hear the latest news from the core team. Sign up for the <a href="https://luma.com/automerge">calendar</a>, and simply RSVP if you’d like to attend.</li>
<li>Fans of the Local-first Conf, take note of <a href="https://syncconf.dev">Sync Conf</a> happening on November 12th in San Francisco, brought to you by the same organizing team (and with substantial interest overlap).</li>
</ul>
<p>That’s all for this month. As ever, we’d love to hear your feedback and ideas. Simply reply to this email, or use one of the many other ways to <a href="https://www.inkandswitch.com/connect/">connect with us</a>. See you next time!</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Local-first talks, Automerge 3, and Scribbling on a Google Calendar]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-012/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-012/</guid>
      <pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[A secret master plan, the official launch of Automerge 3, and an update on Sketchy Calendars]]></description>
      <content:encoded><![CDATA[<p>We hope you’re having a great summer! In this newsletter, we’re sharing some recent conference talks, the official launch for Automerge 3, and some reflections on sketchy calendars.</p>
<h2 id="local-first-the-secret-master-plan"><a class="plain" href="#local-first-the-secret-master-plan">Local First: the Secret Master Plan</a></h2>
<p><img src="/newsletter/dispatch-012/local-first-master-plan.webp" alt="A still frame from Peter's talk, showing him at a podium gesturing toward a large screen full of tools and documents created with Patchwork."></p>
<p>The recording is up from lab director Peter van Hardenberg’s talk <a href="https://www.youtube.com/watch?v=9s8OA08ggbM">Local-first: the secret master plan</a>, which he gave at <a href="https://www.localfirstconf.com/">Local-First Conf</a> in May.</p>
<p>In the talk, Peter shares our vision for building collaboration tools on top of local-first infrastructure. You’ll see prototypes of universal version control and malleable software, and some new demos of the Patchwork collaboration environment that we use to do our own work inside the lab.</p>
<h2 id="automerge-3-is-out"><a class="plain" href="#automerge-3-is-out">Automerge 3 is out!</a></h2>
<p><a href="https://automerge.org/">Automerge</a> is a local-first data sync engine that makes it easy to build collaborative apps. Today we’re excited to announce version 3.0 of Automerge.</p>
<p>The main update is a dramatic reduction in memory usage. Automerge stores the full history of documents to facilitate offline collaboration and version control workflows; in previous versions of the library, this could lead to gigabytes of memory usage when working with documents that had long histories. Now, in Automerge 3.0, we’ve cut that down memory usage by over 10x, sometimes dramatically more, making Automerge feasible to use in a much wider range of scenarios.</p>
<p>In addition to the memory usage improvements, we’ve also cleaned up some redundant APIs, particularly around the dealing with text strings.</p>
<p>If you’re using Automerge already, you should upgrade today. Automerge 3.0 uses the same file format as Automerge 2 and the API is nearly fully backwards compatible. See <a href="https://automerge.org/docs/migrating-from-automerge-2-to-automerge-3/">the migration guide</a> for more details. If you’re not using Automerge yet, now’s a great time to take another look, as things have come a long way in performance and reliability.</p>
<p>To learn more about how we achieved these improvements, read <a href="https://automerge.org/blog/automerge-3/">our launch blog post</a>.</p>
<h2 id="safe-in-the-keyhive"><a class="plain" href="#safe-in-the-keyhive">Safe in the Keyhive</a></h2>
<p>For the past year, our Automerge team has also been working on access control and end-to-end encryption. Recently, at Local-First Conf, Brooklyn Zelenka and Alex Good gave live updates on our progress. Check them out:</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=iLp2xBMud10">Safe in the Keyhive: Local-first access control with E2EE and capabilities</a>: Brooklyn Zelenka presented on building end-to-end encrypted access control for local-first applications.</li>
<li><a href="https://www.youtube.com/watch?v=neRuBAPAsE0">Beelay, a (reasonably) generic encrypted sync protocol for CRDTs</a>: Alex Good discussed approaches for synchronizing end-to-end encrypted CRDTs, explaining the Beelay protocol developed as part of the Keyhive project.</li>
</ul>
<h2 id="scribble-on-your-google-calendar"><a class="plain" href="#scribble-on-your-google-calendar">Scribble on your Google Calendar</a></h2>
<p>Here’s an update from our Sketchy Calendar project by Marcel Goethals and Paul Sonnentag. (You can also <a href="/ink/notes/scribble-on-google-calendar/">read this update on our website</a>.)</p>
<p>Calendar apps and physical notebooks have very different vibes. Calendar apps are formal and visually uniform — just colored rectangles with titles that snap to a fixed grid. Notebooks have texture — you can use different pens and highlighters to mark and annotate however you want.</p>
<p>In our first prototype, we tried bringing both worlds together by starting with a digital notebook. We wanted to test whether the expressive freedom of pen and paper could coexist with synced digital events. The approach was to pull in your Google Calendar events as a static background layer, so you could sketch directly on top of them—circling important meetings, drawing arrows between tasks, or blocking out rough time estimates. Our goal was to preserve the iterative, flexible nature of notebook planning while still being able to see your scheduled events.</p>
<figure>
<img src="/newsletter/dispatch-012/sketchy-calendar.png" alt="A weekly plan drawn up in Sketchy Calendar, with handwritten notes like a &quot;Birthday&quot; decorated with balloons, little cards showing an open book and flower pot, and roughly blocked-out spans of time for &quot;programming&quot; and &quot;lunch&quot;.">
<figcaption>
<p>A digital notebook that allows you to scribble on top of your Google Calendar events</p>
</figcaption>
</figure>
<p>Here’s what we learned:</p>
<p><strong>Sketching on your calendar feels liberating.</strong> Calendar apps force everything into uniform colored blocks, making it hard to distinguish critical meetings from your partner’s events that you just need to avoid scheduling over. Pen and highlighter are far more expressive - sketch tentative plans in gray, highlight time blocks, or jot quick notes without popups. When using sketchy calendar we found ourselves adding much more personal detail than in Google Calendar, capturing not just meetings but what we actually spent our time on.</p>
<figure>
<img src="/newsletter/dispatch-012/marks-on-calendar.png" alt="A single day in Sketchy Calendar, with a doodled &quot;very rainy&quot; cloud for the weather, a highlighted block for &quot;WRITING&quot;, a tentative &quot;Meet with Marcel?&quot;, and some other notes scrawled atop more traditional-looking events loaded from Google Calendar.">
<figcaption>
<p>Pens and markers are very expressive: you can block out time, sketch tentative events or annotate meetings.</p>
</figcaption>
</figure>
<p><strong>It’s difficult to translate between the two worlds.</strong> When building this prototype we struggled with how formal events and scribbles should interact. Should sketched events sync back to Google Calendar? Sure, we can use text recognition on handwriting, but you’d lose the implicit meaning of color and style. And how do you translate a roughly sketched time range into a fixed start and end?</p>
<p>The reverse problem is equally tricky — if you draw an arrow pointing to an imported event that gets rescheduled, should the arrow automatically move? A simpler solution might be stopping auto-updates once you’ve drawn on the paper, and just indicating when underlying events have changed so users can update manually.</p>
<p><strong>It’s useful to have a distinction between formal events and rough scribbles.</strong> In our prototype, Google Calendar events and hand-drawn scribbles remain quite separate. Initially we thought this was a problem, but there’s actually value in distinguishing between formal events with fixed times and loose sketchy plans. When meeting others, everyone needs to show up on time. But when planning for yourself, it doesn’t matter if you use personal shorthand that only makes sense to you in the moment. Our current prototype solves this by keeping scheduled events in Google Calendar and personal plans as scribbles. Even in a world everyone had automatically synchronized sketchy calendars, it’d still be useful to have distinction between formal and informal events.</p>
<p><strong>It’s nice to have a dedicated device for daily planning.</strong> Sketchy calendar feels like a notebook open next to your computer — you can see upcoming events alongside daily todos at a single glance. Having that context in your physical space keeps you aware of your priorities without switching away from your work. Unlike a physical notebook, the events stay synced, so when someone reschedules a meeting in Google Calendar, it automatically appears in your sketchy calendar.</p>
<figure>
<img src="/newsletter/dispatch-012/tablet-next-to-laptop.webp" alt="Photo showing an iPad with Sketchy Calendar sitting next to an open laptop on a desk.">
<figcaption>
<p>Sketchy Calendar allows you to keep track of your current task and upcoming events.</p>
</figcaption>
</figure>
<p>Even without solving all the complex interactions between sketches and formal events, keeping them clearly separate proved surprisingly effective. The simple model of importing calendar events as a background layer while keeping all annotations as personal scribbles felt natural and useful. Next, we want to explore how this approach scales—what happens when you need to flip between days, weeks, or plan across an entire year?</p>
<h2 id="whats-another-open-tab"><a class="plain" href="#whats-another-open-tab">What’s another open tab?</a></h2>
<ul>
<li><a href="https://people.csail.mit.edu/rudolph/Teaching/weiser.pdf">Designing Calm Technology</a>: a short, classic read on ubiquitous computing, by Mark Weiser and John Seely Brown</li>
<li><a href="https://www.geoffreylitt.com/2025/07/27/enough-ai-copilots-we-need-ai-huds">Enough AI copilots! We need AI HUDs</a>: lab researcher Geoffrey Litt draws our attention to ambient user interfaces — think spellcheck — and implores us to explore beyond chat-based AI.</li>
<li><a href="https://www.youtube.com/watch?v=5nTVTIE15zA">Practical Local-First Software with Automerge</a>: Lab director Peter van Hardenberg gave some demos of how to use the latest Automerge tools to build local-first software.</li>
</ul>
<p>That’s all for now—until next time.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Automerge 3.0 Beta, Sketchy Calendar, and a lab website refresh]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-011/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-011/</guid>
      <pubDate>Fri, 23 May 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Some major updates to our open-source Automerge library, an introduction to Sketchy Calendars, and a peek at our work on collaborative game development. Also some meta content—a refreshed website, and a talk about how we work.]]></description>
      <content:encoded><![CDATA[<p>This month’s update spans the full range of work we do at Ink &amp; Switch. We have some major updates to our open-source Automerge library, an introduction to Sketchy Calendars, and a peek at our ongoing work on collaboration tools for game development. We’re also excited to share a refreshed website for the lab and a talk by our director about how we work.</p>
<h2 id="new-automerge-releases"><a class="plain" href="#new-automerge-releases">New Automerge releases</a></h2>
<p>We’ve recently released some major updates for <a href="https://automerge.org/">Automerge</a>, the open source CRDT-based data synchronization library that we develop at Ink &amp; Switch.</p>
<p><strong>Automerge 3.0 Beta:</strong> Automerge 3.0 is an architectural overhaul that radically improves performance. Historically, Automerge compressed large histories on disk, but didn’t use the compressed format in memory. For this release, Orion Henry re-implemented Automerge to use the on-disk columnar compression format in memory; the result is memory savings of 100x in some cases, and much faster document load times. We’re seeing huge benefits in our internal deployments!</p>
<p>Alongside the performance improvement, we’ve also taken the opportunity to do a major version bump and fix some awkward parts of the API which were a result of maintaining backwards compatibility.</p>
<p>This is a big change, so we’re rolling it out slowly. We’ve run fuzz tests and have been successfully using it internally; we’ve also been working with the Automerge community to make sure it’s stable and fast in their usage. We’re confident enough now to release a beta. Please <a href="https://github.com/automerge/automerge/blob/e18161834c271800e07d9b0d065db0670f141a40/README.md#30-beta">kick the tires</a> and report back to us!</p>
<p><strong>Automerge Repo 2.0</strong>: We have also released a new major version of Automerge Repo, the networking and storage adapter library for Automerge. We’ve cleaned up APIs to require less boilerplate, improved handling of asynchronous loading states, made progress reporting better, added more convenient helpers for history and diffing, and more. See the <a href="https://automerge.org/blog/2025/05/13/automerge-repo-2/">announcement blog post</a> for more details.</p>
<h2 id="sketchy-calendar"><a class="plain" href="#sketchy-calendar">Sketchy Calendar</a></h2>
<p>When it comes to calendars, you can choose between using a digital calendar app or getting a paper calendar. They both allow you to keep track of things like doctor appointments, work meetings or birthdays, so you can keep a clear head and be sure that you won’t forget anything. But while the two approaches may seem similar on the surface, they’re radically different in the kinds of trade-offs they make.</p>
<p>Lab researchers Marcel Goethals and Paul Sonnentag have begun exploring what it would mean to have a calendar that combines the convenience of a digital calendar with the simplicity and expressivity you get from pen &amp; paper. Find out more in their <a href="https://www.inkandswitch.com/ink/notes/sketchy-calendar/">introductory lab note</a>.</p>
<p><img src="/newsletter/dispatch-011/sketchy-calendar.png" alt="A sneak peek at a Sketchy Calendar"></p>
<h2 id="seeking-godot-game-devs"><a class="plain" href="#seeking-godot-game-devs">Seeking Godot game devs</a></h2>
<p>Over the past few months, we’ve been working with the <a href="https://www.endlessos.org/">Endless Foundation</a> to prototype a new approach to collaboration in game development: live and asynchronous collaboration, with branches and diffs, all built right into the open-source Godot game engine.</p>
<p>Here’s a sneak preview:</p>
<figure>
<video controls playsinline preload src="/newsletter/dispatch-011/godot-sizzle.mp4"></video>
</figure>
<p><strong>We’re now seeking people with Godot game development experience to test out an early prototype</strong>. <a href="https://forms.gle/9MNsGmpifG4WP2JE9">Sign up here</a> if you’re interested. Or, if you know anyone who does Godot development, we’d appreciate you sharing this link with them!</p>
<h2 id="website-updates"><a class="plain" href="#website-updates">Website updates</a></h2>
<p>We recently shipped a major expansion to the <a href="https://www.inkandswitch.com">Ink &amp; Switch website</a>.</p>
<p>In addition to our essays and lab notebooks, you’ll now find landing pages for our four primary research areas—local-first software, programmable ink, malleable software, and universal version control—each sporting a newly designed logo. On these landing pages you can learn more about the ongoing themes present across our work, and then dig deeper into summary pages for each of our projects, some of which are being shared publicly for the first time.</p>
<p><img src="/newsletter/dispatch-011/programmable-ink.png" alt="Each research area like Programmable Ink now has its own landing page."></p>
<p>On our home page, you’ll also find a sampling of upcoming events and appearances by our researchers, and — answering one of our most frequently-asked questions — information about how our research is funded and how you can get involved.</p>
<p>This update goes a bit deeper than just the launch of new pages. We’ve also replaced our old site engine, Hugo, with a new system developed in-house that makes it easier for us to experiment with new ideas for the form and content of the site. Our <a href="https://www.inkandswitch.com/ink/notes/">notebook for Programmable Ink</a>, for instance, is continually evolving as we find new ways to share this work as it unfolds.</p>
<p>So set aside some time to browse around and see what’s new, and subscribe to <a href="https://www.inkandswitch.com/index.xml">our RSS feed</a> to be notified whenever anything is published to the site. Of course, we’ll also keep sharing updates on our work right here in the Dispatch newsletter.</p>
<h2 id="how-to-do-ambitious-research-in-the-modern-era"><a class="plain" href="#how-to-do-ambitious-research-in-the-modern-era">How to Do Ambitious Research in the Modern Era</a></h2>
<p>We don’t often talk about how we work: we try to let our work speak for itself.</p>
<p>Still, if you’re the kind of person who finds the “behind-the-scenes” view of research interesting, you might enjoy this <a href="https://www.youtube.com/watch?v=w7DVlI_Ztq8">talk at the Nemertes [next] conference</a> by our lab director, Peter van Hardenberg. He talks through the mechanics of operating an independent research lab, connecting academia and industry, recruiting, and thinking about research like a revolutionary.</p>
<p>If you’re interested less in the “how” and more in the “what” of cutting edge research, consider starting with Itai Cohen’s talk from the Nemertes conference about his group’s work on <a href="https://www.youtube.com/watch?v=74hT4NUxxAs&amp;list=PLAVYUVo7a3NO23nyHnMndn8S_fvriHEY">Electrically Integrated Autonomous Microscopic Robots</a>.</p>
<p>That’s it for this month—until next time!</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Open-sourcing Keyhive, filtering Ambsheets, and Sketchpad explorations]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-010/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-010/</guid>
      <pubDate>Fri, 14 Mar 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[Some updates from our ongoing work on local-first auth, a new post from our Ambsheets project about filtering scenarios in a spreadsheet, and some explorations of the historic Sketchpad project for constraint-based drawing.]]></description>
      <content:encoded><![CDATA[<p>We hope you’re having a great spring! We are busy with lots of projects over here, including low-level explorations of new algorithms for data synchronization, experiments with new kinds of probabalistic computation, and even recreating a lost historical software system: Ivan Sutherland’s famous Sketchpad.</p>
<h2 id="open-sourcing-our-local-first-access-control-work"><a class="plain" href="#open-sourcing-our-local-first-access-control-work">Open-sourcing our local-first access control work</a></h2>
<p>We’ve previously introduced <a href="https://www.inkandswitch.com/keyhive/notebook/">Keyhive</a>: a project focused on local-first access control. Today we have two exciting updates on that work.</p>
<p>First, we <a href="https://www.inkandswitch.com/keyhive/notebook/04/">have open sourced a pre-alpha version of Keyhive and Beelay</a> for those curious to see the code. Keyhive is the core signing, encryption, and delegation system, and Beelay provides auth-enabled sync over end-to-end encrypted data. This is for interested readers and experimenters, but not for production yet.</p>
<p>We’ve also written a <a href="https://www.inkandswitch.com/keyhive/notebook/05/">lab note</a> about how two peers synchronise their collections of documents. The underlying problem here is one called “set reconciliation” and it is surprisingly common  For example, fetching changes from <code>git</code> has to deal with this. We’ve adopted some exciting new set reconciliation algorithms that make it possible to synchronize very large collections with a small amount of communication, which has become important as we see Automerge-backed applications growing in scale.</p>
<h2 id="filtering-scenarios-in-ambsheets"><a class="plain" href="#filtering-scenarios-in-ambsheets">Filtering scenarios in ambsheets</a></h2>
<p>When you’re choosing from a long list with many options, it’s helpful to have filters to narrow down your search. This is a familiar concept on many websites—for instance, on the flight search website Kayak, you can start with a list of thousands of flights, and then filter down to the ones that meet your needs: “a nonstop flight, leaving before 11am, in economy class”.</p>
<p><img src="/newsletter/dispatch-010/kayak.png" alt=""></p>
<p>What if you could apply this same concept of filtering to any problem in your life? Whether it’s deciding on a budget or planning a project, we all encounter situations where we’re considering a large number of options, and need to narrow down our search.</p>
<p>In our  <a href="https://www.inkandswitch.com/ambsheets/notebook/02/">latest lab note</a> , we show how to do just that, using <em>filters</em> in Ambsheet, our research prototype of a spreadsheet for modeling multiple scenarios. Filters in Ambsheets are powerful because you can filter on any cell, including the <em>outputs</em> of computations with formulas. <a href="https://www.inkandswitch.com/ambsheets/notebook/02/">Read the note</a> for more demos and details.</p>
<p><img src="/newsletter/dispatch-010/filter-outputs.png" alt=""></p>
<h2 id="sneak-peek-reconstructing-sketchpad"><a class="plain" href="#sneak-peek-reconstructing-sketchpad">Sneak peek: Reconstructing Sketchpad</a></h2>
<p>Ivan Sutherland’s Sketchpad is a seminal work in computer science. Besides being one of the first computer graphics systems, it also pioneered the use of objects (via its “masters” and “instances”) and nonprocedural programming (via geometric constraints). It ran on the TX-2, an experimental computer the size of a football field that unfortunately no longer exists.</p>
<p>To give people a chance to experience Sketchpad firsthand, lab researcher Alex Warth has been working on a re-implementation that runs on the iPad. It’s not quite ready for prime time yet, but he has been <a href="https://bsky.app/profile/alexwarth.bsky.social/post/3lgiwduzugk2r">documenting</a> his <a href="https://bsky.app/profile/alexwarth.bsky.social/post/3lfnusyjygc2j">progress</a> on social media.</p>
<figure>
<video controls playsinline preload src="/newsletter/dispatch-010/Sketchpad.mp4"></video>
</figure>
<h2 id="whats-another-open-tab"><a class="plain" href="#whats-another-open-tab">What’s another open tab?</a></h2>
<ul>
<li>We’re admiring these <a href="https://intech.studio/discover/">modular MIDI controllers</a>.</li>
<li>We’re excited about the book <a href="https://wasmgroundup.com/">WASM from the Ground Up</a>, recently published by friends of the lab Mariano Guerra and Patrick Dubroy: “Learn Wasm by building a simple compiler in JavaScript.”</li>
<li>Several lab members are speaking at <a href="https://www.localfirstconf.com/">Local First Conf 2025</a> in Berlin, May 26-28th. See you there?</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Thinking with ink, spreadsheets for exploring scenarios, and a local-first key agreement protocol]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-009/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-009/</guid>
      <pubDate>Wed, 05 Feb 2025 00:00:00 GMT</pubDate>
      <description><![CDATA[A project from our programmable ink track, a spreadsheet for exploring scenarios, and a new algorithm for local-first authorization.]]></description>
      <content:encoded><![CDATA[<p>Happy new year! In this newsletter we have three updates representing the full gamut of research happening at the lab: a project from the programmable ink track, a spreadsheet for exploring scenarios, and a new algorithm for local-first authorization.</p>
<p>First, a couple announcements:</p>
<p>The Automerge team will be hosting <a href="https://discord.gg/GuMwzs4E?event=1336025249569050625">a community call</a> on February 20. Come hear about progress on Automerge 3! A new multi-document sync system, end-to-end encryption, read-only document support, and massive improvements in memory usage and load/save performance.</p>
<p>Local-First Conf is coming back after a successful inaugural event last year. This year’s conference will be May 27-28 in Berlin; <a href="https://www.localfirstconf.com/">tickets are still available</a>.</p>
<h2 id="pulling-the-thread-on-inkling"><a class="plain" href="#pulling-the-thread-on-inkling">Pulling the thread on Inkling</a></h2>
<p><img src="/newsletter/dispatch-009/thumb.jpg" alt=""></p>
<p>There’s an early exploratory stage of every project where ideas are soft, where you’re guided by hunches and reckons. Maybe you have a concrete problem to solve and you’re not sure where to start. Or maybe you’re being pulled along by the desire for how things ought to be. This is a time of loose thinking, where the notes you write are scrawled and the drawings you make are sketchy.</p>
<p>On the ink track, we often find ourselves in this mode — we cherish it. After all, we’re trying to make tools that support this kind of thinking. In the fall of 2023, we spent a few months chasing down some rogue ideas about how this sort of tool ought to feel. We figured out how to build a constraint system powered by relaxation that performed well and wouldn’t blow up in our faces (like all the previous ones had). We figured out how to turn these constraints into tangible things you could touch and toggle and tug at with all your fingers. We revived some old ideas from <a href="/crosscut">Crosscut</a> that felt amenable to relaxation-based computation. This all came together in a little prototype we called Inkling.</p>
<p>In the past few months, Inkling was demoed at the <a href="https://liveprog.org/">LIVE</a> conference and then open-sourced. We’ve now put together a little page on our website — not a polished essay; something more <em>exploratory</em> — that pulls back the curtain on the Inkling project. <a href="/project/inkling">Take a look.</a></p>
<h2 id="ambsheets-spreadsheets-for-exploring-scenarios"><a class="plain" href="#ambsheets-spreadsheets-for-exploring-scenarios">Ambsheets: spreadsheets for exploring scenarios</a></h2>
<p>From calculating monthly budgets to planning dream vacations, spreadsheets are our trusted companions as we navigate life’s complex decisions—a playground for thinking, where possibilities come to life through numbers.</p>
<p>Spreadsheets are particularly useful for thinking through financial models, budgets, or any situation that involves considering lots of possible scenarios. Instead of laboriously redoing a bunch of math, you can quickly ask “what if?” questions and see the effects.</p>
<p>But, as great as spreadsheets already are for this task, we think they could be even better. In our <em>Ambsheets</em> project, we are exploring a small extension to the spreadsheet: <strong>what if a single cell could hold multiple values at once</strong>?</p>
<p>Suppose you’re moving to a new city, and you want to figure out how much you can afford to spend on your car, apartment, and other essentials each month. You start out by making a spreadsheet summing up the various line items.</p>
<p><img src="/newsletter/dispatch-009/ambsheets-0-spreadsheet.jpg" alt=""></p>
<p>Now, you want to consider two scenarios for possible cars you might lease.<strong>How might you compare those scenarios?</strong> In traditional spreadsheets you might need to temporarily try entering different values, or restructure the sheet to accommodate the scenarios.</p>
<p>But in an ambsheet, you can simply enter two possible values for the price of the car:</p>
<p><img src="/newsletter/dispatch-009/amb-value.png" alt=""></p>
<p>The new value of B3, <code>{500,1200}</code>, means <em>either</em> <code>500</code> <em>or</em> <code>1200</code>. We call this an <em>amb value</em>, and it represents one dimension in our possibility space. Amb values flow through the computation just like regular values and don’t require any special treatment in formulas. Cell B7, whose formula is <code>SUM(B3:B5)</code>, now evaluates to <em>either</em> $3,318 or $4,018.</p>
<p>We think this simple idea could make spreadsheets more powerful for thinking through problems that involve multiple scenarios. To learn more about how amb values work and how they compare to existing spreadsheets, check out the lab note introducing the project: <a href="/ambsheets/notebook/01/">A spreadsheet for exploring scenarios</a></p>
<h2 id="a-new-protocol-for-local-first-key-agreement"><a class="plain" href="#a-new-protocol-for-local-first-key-agreement">A new protocol for local-first key agreement</a></h2>
<p>For many documents, you want to collaborate with a trusted group and no others. The default for Automerge today is if someone knows the URL, they can read and write to that document. We needed a way to encrypt documents for groups of collaborators that change over time, and importantly concurrently and without a single source of truth. <strong>How do we transparently keep a group’s read access up to date?</strong></p>
<p>Of course, we only want folks with at least read access to be able to view our documents, but not sync servers and other infrastructure. This means we need a way to encrypt and decrypt our documents, including when they are shared via semi-trusted sync servers. This in turn requires a way for our dynamic group to agree on keys for encryption and decryption over time. If a key is compromised, we also want to limit the amount of past and future data an attacker can gain access to.</p>
<p><img src="/newsletter/dispatch-009/forward-secrecy.png" alt="Forward Secrecy and Post-Compromise Security.png"></p>
<p>Messaging Layer Security (MLS) has an answer for this called <a href="https://inria.hal.science/hal-02425247v1/file/treekem%20%281%29.pdf">TreeKEM</a>. But it’s not a fit for our local-first use case since it requires a central server to order operations and choose winners. There are concurrent solutions that are closer to our requirements, but still not the fit we were looking for.</p>
<p><img src="/newsletter/dispatch-009/beekem-path.png" alt="Beekem Path.png"></p>
<p>To adapt these techniques to our use case, we designed our own variant of TreeKEM called BeeKEM. It’s designed for local-first applications that require end-to-end encryption for groups on the order of thousands of members. Decryption in BeeKEM is very efficient in the case where one device updates at a time, and scales linearly with the number of concurrent updates at any given time. This means that the usual case scales logorithmically like TreeKEM, but gains the ability to merge concurrently updated trees unlike TreeKEM in exchange for some extra computation.</p>
<p>To read more details about the underlying protocol, read our lab note: <a href="/keyhive/notebook/02/">Group Key Agreement with BeeKEM</a></p>
<h2 id="whats-another-open-tab"><a class="plain" href="#whats-another-open-tab">What’s another open tab?</a></h2>
<ul>
<li>
<p>Friend of the lab Alexander Obenauer is writing and publishing a book called Bootstrapping Computing: “a short, technical book for curious, non-technical people, exploring how we built modern computing out of simpler parts.” <a href="https://buddybindery.com/products/bootstrapping-computing">Preorders are available now.</a></p>
</li>
<li>
<p><a href="https://frinklang.org/">Frinklang</a>: a programming language for physical calculations with units.</p>
</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Reflecting on 2024, Droste's Lair, Version control for game dev]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-008/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-008/</guid>
      <pubDate>Mon, 23 Dec 2024 00:00:00 GMT</pubDate>
      <description><![CDATA[A year-end note from our director; a recap of a recent unconf; Droste’s Lair; a sneak preview of version control for game dev.]]></description>
      <content:encoded><![CDATA[<p>We hope you’re having a restful holiday season! In this dispatch we’re sharing a few updates from the end of the year:</p>
<ul>
<li>A year-end note from our director</li>
<li>A recap of a recent unconference in Los Angeles</li>
<li>An unusual programming environment: Droste’s Lair</li>
<li>Sneak preview: version control for game development</li>
</ul>
<h2 id="a-letter-from-our-director"><a class="plain" href="#a-letter-from-our-director">A letter from our director</a></h2>
<p>Ink &amp; Switch’s dream is of computers that help us think, that help us feel more human. We long for tools that support our creativity, instead of encouraging consumption. A decade into our research, we’ve made some meaningful progress. Local-first software has grown from an idea into a global movement.  In service of this goal, we’ve run dozens of projects exploring everything from gestural interfaces to digital ink down to the finer points of merge algorithms for rich text.</p>
<p>Our work has resulted in many more questions than answers, and so much work remains to be done. Of course we cannot do it alone, and I want to thank everyone in this growing community for their kindness and generosity of spirit. Changing the world is a group project, and before we meet our goals we will welcome many more people into the fold: scientists and artists, entrepreneurs and sponsors.</p>
<p>I hope everyone reading this is able to take some time to relax and unwind at the end of a long year. Looking back, we’ve earned a rest: we’ve worked with astronomers on their scientific papers, turned up wrapped in flagger’s tape to talk about programmable ink, and traipsed around the world in search of old friends and new ideas. I won’t try to give a full accounting – looking back at past dispatches will probably give an impression – but I can say that we have a lot more work we’re looking forward to sharing.</p>
<p>And so: thank you. One and all. See you in the New Year.</p>
<p>Peter van Hardenberg</p>
<hr>
<h2 id="2024-unconf-los-angeles"><a class="plain" href="#2024-unconf-los-angeles">2024 Unconf Los Angeles</a></h2>
<p>As part of a recent visit to Los Angeles for a team summit, we hosted an unconference for friends of the lab at the Preserve. It was a great day of meeting people, having inspiring conversations, and experiencing  folks’ projects live and in person. We have assembled a memento that aims to share some of the energy of the experience:</p>
<p><a href="https://inkandswitch.com/events/2024-unconf-losangeles/">Unconf 2024 Los Angeles</a></p>
<p>Thanks to everyone who has contributed notes, recollections, and photos. If you have something to add, please send us a note at <a href="mailto:hello@inkandswitch.com">hello@inkandswitch.com</a>.</p>
<p><img src="/newsletter/dispatch-008/unconf.jpg" alt=""></p>
<h2 id="programming-in-a-dungeon"><a class="plain" href="#programming-in-a-dungeon">Programming in a dungeon</a></h2>
<p>Lab researcher-in-residence Elliott Evans and lab collaborator Josh Horowitz recently embarked on a collaboration to explore their shared interests in visualizing mathematics. Here’s a summary, in their own words:</p>
<blockquote>
<p>Droste’s Lair is an unusual programming environment for building and counting mathematical structures, built in a two-week sprint. In Droste’s Lair, the user manipulates mathematical structures through direct interactions: dropping dominoes on chessboards and dragging items between lists. The system’s power comes from two forms of abstraction on top of this foundation: an “amb” mechanism that allows strands of execution to branch from one another, and a procedure-calling mechanism that enables recursion.</p>
</blockquote>
<p>Intrigued? <a href="https://vezwork.github.io/drostes-lair-post">Descend now into Droste’s Lair.</a></p>
<p><img src="/newsletter/dispatch-008/droste.jpg" alt=""></p>
<h2 id="sneak-preview-version-control-for-game-developers"><a class="plain" href="#sneak-preview-version-control-for-game-developers">Sneak preview: version control for game developers</a></h2>
<p><em>We’re starting a new project next year at the lab about version control for game development. Here’s a sneak preview…</em></p>
<p>Imagine you’re a student building a video game, and you want to collaborate on it with some friends. What’s the first step: diving into designing a level? Coding a script for how a player moves?</p>
<p>Often, the answer is none of the above. Instead, it’s: “learn git”. Before you can even share a single scene or line of code, you need to become fluent with files, CLI commands, pushing and pulling, and managing merge conflicts.</p>
<p>Version control systems like git and Perforce are powerful tools for large teams of professionals. But for hobbyists and kids just getting started, the learning curve can stand in the way of even basic collaboration.</p>
<p>Imagine a different world where none of these barriers get in your way. You start playing your game, and invite your friend to start editing the level. All their changes show up live. No files, no CLI commands—just shared editing:</p>
<p><img src="/newsletter/dispatch-008/godot.jpg" alt="One user edits a game live while another plays it"></p>
<p>Over time, you’ll want to add more sophisticated and formal patterns, like working on separate copies (“branches”) to avoid stepping on each others’ toes. But these patterns should only be there when you want them to be; they shouldn’t get in the way at first.</p>
<p>For the past year, we’ve been exploring tools for achieving exactly this kind of workflow: starting with lightweight synchronous collaboration (“Google Docs” style), and gradually adding more formal workflows: space for private asynchronous work, tools for reviewing suggested changes, and more. We’ve tried dozens of prototypes for this workflow across many use cases: <a href="https://www.inkandswitch.com/patchwork/notebook/">writing Markdown blog posts</a>, <a href="https://www.inkandswitch.com/jacquard/notebook">writing empirical science papers</a>, and <a href="https://www.inkandswitch.com/patchwork/notebook/10/">drawing diagrams</a>. Along the way, we’ve been building up a collaboration platform called Patchwork which bakes in version control as a foundational primitive.</p>
<p>Next up, we’re excited to take this exploration to the domain of game development, which poses a bunch of unique challenges:</p>
<p><strong>Multimedia support:</strong> How can a version control environment support a variety of media types, from art to music to code? What does it look like to review changesets across media types? How do specialists like artists and programmers collaborate in ergonomic ways?</p>
<p><strong>Integrating collaboration:</strong> Today, version control is often a separate system from the main engine or IDE, forcing users to switch tools and also adding more things to learn. What would it look like to make collaboration a more integrated part of the game dev experience?</p>
<p><strong>Working in parallel:</strong> How can different users work together on a game without getting in each others’ way? How might we make it easier to explore different variants of game mechanics in parallel?</p>
<p><strong>History:</strong> How can you visualize the evolution of a game over time?</p>
<p>One context we’re particularly interested in is education. In conversations with educators at the <a href="https://www.endlessos.org/">Endless Foundation</a> (who are sponsoring this work), we’ve heard that introducing kids to files and Git CLI commands before they can do any collaboration is a serious barrier. We wonder if it’s possible to create a smoother ramp that starts simple for students but also scales up to the needs of larger collaborations and even professional game developers.</p>
<p>Concretely, our plan is to extend Godot—an open source game engine used by the Endless Foundation for <a href="https://www.endlessos.org/game-making">their teaching activities</a>—with some of the ideas from Patchwork. The prototype of live collaboration shown above is just one example of the kinds of experiments we’re trying. But we hope that this process will yield general insights into version control that apply beyond just the Godot environment.</p>
<p>If you have experience with the problems of collaboration in game development, we’d love to hear from you! We’re especially interested in hearing from hobbyists or indie game devs using Godot. Please send us a note at <a href="mailto:hello@inkandswitch.com">hello@inkandswitch.com</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Fine-grained provenance, Automerge updates, LIVE workshop]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-007/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-007/</guid>
      <pubDate>Thu, 31 Oct 2024 00:00:00 GMT</pubDate>
      <description><![CDATA[Some explorations of new editor interactions for writing science papers, and a trio of projects advancing the future of Automerge.]]></description>
      <content:encoded><![CDATA[<p>We hope you’re having a great Fall! In this Dispatch we’re sharing explorations of new editor interactions for writing science papers, a trio of projects advancing the future of Automerge, and links to some recent presentations about our work.</p>
<h2 id="fine-grained-provenance"><a class="plain" href="#fine-grained-provenance">Fine-grained provenance</a></h2>
<p>In a prior Dispatch we introduced <a href="https://www.inkandswitch.com/jacquard/notebook/">Jacquard</a>, a project exploring collaborative editing interfaces for authoring science papers.</p>
<p>Lately, we’ve been exploring the theme of <em>fine-grained provenance</em>: connecting specific parts of one file with corresponding parts of another file. We’ve been trying out some new UI interactions that take advantage of this provenance information, such as:</p>
<ul>
<li>mirroring comments between a PDF and source text file</li>
<li>allowing users to edit underlying source text directly from a rendered PDF</li>
<li>using provenance information as a “map” of a project</li>
</ul>
<p>Based on our own tests and some conversations with scientists, we’re feeling that there’s a promising path here towards more fluid editor interactions. We’re also thinking about how it might work to have fine-grained provenance information available as a core primitive in an operating system.</p>
<p>To see some video demos, take a look at <a href="https://www.inkandswitch.com/jacquard/notebook/03/">our lab note on fine-grained provenance</a>.</p>
<p><img src="/newsletter/dispatch-007/provenance.png" alt=""></p>
<h2 id="automerge-updates"><a class="plain" href="#automerge-updates">Automerge updates</a></h2>
<p>It’s been a summer of change for <a href="https://automerge.org">Automerge</a>, the local-first data library developed at Ink &amp; Switch. Recently the team shared updates on three ongoing projects at a community call:</p>
<ul>
<li><strong>Memory usage</strong>: Orion Henry is working on drastically reducing memory usage. He’s taking the columnar encoding already used to store Automerge documents on disk, and using it at runtime. This project is at the correct-but-slow stage right now.</li>
<li><strong>Multi-document sync</strong>: Alex Good is working to build a new sync protocol which doesn’t require the document to be in memory, works over encrypted documents, and enables syncing collections of documents more efficiently.</li>
<li><strong>Auth</strong>: Brooke Zelenka is leading the Beehive project, which implements end-to-end encryption and local first authentication + authorization for Automerge (and hopefully other systems as well).</li>
</ul>
<p>For a deeper dive, you can watch <a href="https://us02web.zoom.us/rec/share/K73oRLjJQUMTP3cA__0A2OL23TEeWhhyg7c9vsxGp6J8-dvSliqRGbxUMx1fRYPN.ts4eAt6v509MkOns">the video recording of the call</a>.</p>
<h2 id="live-2024-presentations"><a class="plain" href="#live-2024-presentations">LIVE 2024 presentations</a></h2>
<p>Last week, many of us attended <a href="https://liveprog.org/">LIVE 2024</a>, one of the main academic workshops focused on live programming environments that make programming feel tangible and concrete. Several lab-affiliated folks presented work there, and you can watch video recordings of their talks:</p>
<ul>
<li>Ivan Reese and Alex Warth presented <a href="https://www.youtube.com/live/4GOeYylCMJI?si=FSHzBlIiXiCxWILy&amp;t=11607">Inkling, Sketching Dynamic Systems</a>, a system for sketching with constraints developed at Ink &amp; Switch together with Marcel Goethals.</li>
<li>Marcel Goethals presented <a href="https://www.youtube.com/live/4GOeYylCMJI?si=i-LH5OanDHkI8gZV&amp;t=9117">Subsequently: Telling stories with pictures makes programs</a>, a visual programming environment inspired by comics.</li>
<li>Researcher-in-residence Elliott Evans presented <a href="https://www.youtube.com/live/4GOeYylCMJI?si=mKHy8PgTdDJ-eHEo&amp;t=23188">Live Programming a Live Programming Environment: An Experience Report</a>, work done together with Philippa Markovics, Martin Kavalar, Andrea Amantini, and Jack Rusher on developing a live programming environment using the Clerk live programming environment.</li>
<li>Researcher-in-residence Lu Wilson presented <a href="https://www.youtube.com/live/4GOeYylCMJI?si=PsDT9vBLD2ajKk77&amp;t=12528">Arroost: Unblocking creation with friends</a>. They’ve also given <a href="https://www.todepond.com/talk/season/">several other talks in the past month</a>; check out <a href="https://www.youtube.com/watch?v=MJzV0CX0q8o">What it means to be open</a> which has been provoking some good discussions about process within the lab.</li>
</ul>
<p>We also recommend the keynote presentation by Jonathan Edwards: <a href="https://www.youtube.com/live/4GOeYylCMJI?si=DdbvjA-u9ZJq4GPS&amp;t=2288">The Meaning of LIVE</a>.</p>
<p>You can see all the talks from LIVE in the <a href="https://www.youtube.com/live/4GOeYylCMJI?si=mKHy8PgTdDJ-eHEo">full video recording of the day</a>. (You may find <a href="https://2024.splashcon.org/home/live-2024#program">the talk schedule</a> helpful for navigation.)</p>
<h2 id="malleable-software-in-the-age-of-ai"><a class="plain" href="#malleable-software-in-the-age-of-ai">Malleable Software in the Age of AI</a></h2>
<p>Lab researcher Geoffrey Litt recently presented <a href="https://www.youtube.com/watch?v=c1Kaip0fezI">Malleable Software in the Age of AI</a> at the Nemertes Next conference, exploring what qualities make software malleable, and how we might thoughtfully incorporate AI.</p>
<p>In addition to demos of the dynamic document environments <a href="https://www.inkandswitch.com/potluck/">Potluck</a> and <a href="https://www.inkandswitch.com/embark/">Embark</a>, the talk includes some more recent findings from <a href="https://www.inkandswitch.com/patchwork/notebook/">Patchwork</a> on using version control to support collaboration on documents—and some early glimpses of applying those same ideas to collaboratively editing the software itself.</p>
<h2 id="whats-a-few-more-open-tabs"><a class="plain" href="#whats-a-few-more-open-tabs">What’s a few more open tabs?</a></h2>
<ul>
<li>We’ve been enjoying digging through the <a href="https://dynamicland.org/archive/">Dynamicland archive</a> from Bret Victor and team.</li>
<li>Jamie Brandon’s <a href="https://www.scattered-thoughts.net/writing/hytradboi-2025/">HYTRADBOI</a> conference is happening again on Feb 28, 2025. We enjoyed the last one!</li>
<li><a href="https://gridfinity.xyz/">Gridfinity</a>: for the organization nerd in your life.</li>
</ul>
<p>That’s it for now — until next time.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Provenance for science papers, local-first access control]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-006/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-006/</guid>
      <pubDate>Tue, 03 Sep 2024 00:00:00 GMT</pubDate>
      <description><![CDATA[In this Dispatch, we’ll introduce you to two new projects at the lab: exploring writing environments for science papers and local-first access control. We also have some updates on WASM packaging for Automerge, and a new researcher-in-residence.]]></description>
      <content:encoded><![CDATA[<p>It’s been a busy summer at Ink &amp; Switch! In this Dispatch, we’ll introduce you to two new projects at the lab: exploring writing environments for science papers and local-first access control. We also have some updates on WASM packaging for Automerge, and a new researcher-in-residence.</p>
<h2 id="jacquard-version-control-and-provenance-for-empirical-research"><a class="plain" href="#jacquard-version-control-and-provenance-for-empirical-research">Jacquard: Version control and provenance for empirical research</a></h2>
<p>We believe one of the most important capabilities in creative tools is version control: helping people collaborate, review suggestions, and see what’s changed, in both synchronous and asynchronous editing situations. Last year we published <a href="https://www.inkandswitch.com/essay-upwelling/upwelling/">Upwelling</a>, a prototype of “draft layers” for asynchronous collaborative writing. Next, <a href="https://www.inkandswitch.com/patchwork/notebook/">Patchwork</a> built on that work to explore “universal version control”: powerful diffing and branching tools built not just for writing, but also drawings, spreadsheets, and other kinds of media.</p>
<p>This summer, <a href="http://paulsonnentag.com/">Paul Sonnentag</a> and <a href="https://www.geoffreylitt.com/">Geoffrey Litt</a> from the Patchwork team have teamed up with <a href="https://joshuahhh.com/">Josh Horowitz</a> to explore universal version control in a new domain: <strong>scientific research papers</strong>.</p>
<p>We’ve heard from scientists in a variety of fields that their digital tools make it cumbersome to collaborate on data analyses and writing papers. One problem is that limited version control makes it difficult to review collaborators’ edits. Another issue is that writing and data analysis are managed in separate environments, which leads to tedious manual work stitching together data across tools.</p>
<figure><img src="/newsletter/dispatch-006/thermal-gs.png" alt="A science paper with text and charts">
  <figcaption>
  A figure from <a href="https://ui.adsabs.harvard.edu/link_gateway/2023MNRAS.522.1394G/EPRINT_PDF">an empirical astronomy paper</a>
  </figcaption>
</figure>
<p>On this project, we’re prototyping Jacquard: a collaborative environment for writing empirical research papers. The goal is to free up researchers to focus more on their core work of science and communication, and less on tedious bookkeeping. (The name “Jacquard” comes from the automated loom that was an important step in the history of computing.)</p>
<p>Our <a href="https://www.inkandswitch.com/jacquard/notebook/02/">first demo</a> of Jacquard shows a collaborative editor that supports editing LaTeX files and Python files. It tracks a full provenance chain in order to help build all the source files needed to build an astronomy paper.</p>
<figure><img src="/newsletter/dispatch-006/build-graph.png" alt="A provenance graph showing the steps involved in compiling an astronomy paper using Python and Latex">
<figcaption>
A provenance graph showing the steps involved in compiling an astronomy paper using Python and Latex
</figcaption>
</figure>
<p>For more details on the demo and our goals for the project, check out the <a href="https://www.inkandswitch.com/jacquard/notebook/">Jacquard lab notebook</a>, where we’ll post further updates. And if you’re a scientist who works with data and struggles with collaboration, we’d love to hear from you—email geoffrey@inkandswitch.com.</p>
<h2 id="beehive-local-first-access-control"><a class="plain" href="#beehive-local-first-access-control">Beehive: Local-first access control</a></h2>
<p>Cloud based services provide excellent access control features allowing users fine grained control over who has read and write access to a document, as well as features like user groups and folders which implicitly grant access to their members and contents respectively. For local-first software to be successful we’ll need to be able to provide similar features without relying on a central server to enforce access control at the network boundary. In fact, we want servers to become simple interchangeable relays which only operate over encrypted data. The goal of the Beehive project is to design and build a production ready instance of such a system which is general enough for most applications.</p>
<p>To date the the local-first ecosystem has mostly used a purely pull-based model,  which is often sufficient for personal projects: each user can manually decide which peers to connect to and which changes should be applied. On the other hand, many production contexts (i.e. corporatations, journalists, or even planning a surprise party) are lower trust, require higher alignment, and are ideally low touch <em>enough</em> so that it’s not up to each person in a large organization to separately and manually infer who to trust.</p>
<p>This naturally leads to questions like:</p>
<ul>
<li>Who should the group members accept new edits from?</li>
<li>What is a specific user able to do to this document?</li>
<li>How to only share documents with some people but not others?</li>
<li>What to do if a previously trusted peer starts behaving badly?</li>
<li>What if an admin’s device is lost or stolen?</li>
</ul>
<p>These are especially challenging in a local-first setting since there is no network boundary or central server to guard reads and writes. By its nature, local-first requires that any access control mechanism used must travel with the data itself and work without a central guard. There are also some tricky edge cases due to causal consistency. What should happen with content that’s later discovered to be malicious but honest ops depend on it causally? What is the best strategy to handle ops from an agent that was revoked concurrently (especially given that “backdating” operations is possible). If a document has exactly two admins (and many non-admin users), what should happen if the admins concurrently revoke each other (for instance, one is malicious)?</p>
<p>Recently, <a href="https://notes.brooklynzelenka.com">Brooklyn Zelenka</a> and <a href="https://www.memoryandthought.me/">Alex Good</a> (with significant input from <a href="https://martin.kleppmann.com/">Martin Kleppmann</a>) have been hard at work building Beehive: a local-first access control system that seeks to address the above concerns.  At a very high level, the current approach in Beehive is composed of three layers:</p>
<ol>
<li><strong>End-to-End Encryption (E2EE):</strong> With post-compromise security (PCS) and key management</li>
<li><strong>A Group Management CRDT:</strong> Self-certifying, concurrent group management complete with coordination-free revocation</li>
<li><strong>Convergent Capabilities:</strong> A new <a href="https://en.wikipedia.org/wiki/Object-capability_model">capability</a> model appropriate for CRDTs, and sits between object- and certificate-capabilities</li>
</ol>
<figure><img src="/newsletter/dispatch-006/delegation.png" alt="A Beehive document in isolation, with a simplified view of its stateful delegation graph">
<figcaption>
A Beehive document in isolation, with a simplified view of its stateful delegation graph
</figcaption>
</figure>
<p>We’ve made substantial progress in designing the core data structures and algorithms, though a few open questions remain. We are currently refining our approach to address revocation edge cases, ensure causal stability under E2EE, balance forward security in operation-based CRDTs, and minimize trust in sync servers. As always, usability, space and performance are also top-of-mind.</p>
<figure><img src="/newsletter/dispatch-006/causal-key-management.png" alt="Causal key management: a strategy for managing E2EE keys based on the causal structure of a document. Similar to a Cryptree, having the key to some encrypted chunk lets you iteratively discover the rest of the keys for that chunk's causal history, but not its parents or siblings.">
  <figcaption>
  Causal key management: a strategy for managing E2EE keys based on the causal structure of a document. Similar to a Cryptree, having the key to some encrypted chunk lets you iteratively discover the rest of the keys for that chunk's causal history, but not its parents or siblings.
  </figcaption>
</figure>
<p>It’s also worth mentioning another ongoing project at the lab focused on data synchronization for peer-to-peer and via sync servers that’s been headed up by Alex Good. We’ve realized that sync and secrecy strongly interact. Broadly speaking, sync protocols benefit from more metadata (to efficiently calculate deltas), whereas cryptographic protocols aim to minimize metadata exposure. This tension extends across related systems, including merging E2EE <a href="https://automerge.org/automerge-binary-format-spec/">compressed chunks</a>, and determining if a peer has already received specific operations when a sync server cannot access them in cleartext.</p>
<p>Fortunately, combining these systems can sometimes result in more than the sum of their parts. For instance, convergent capabilities help facilitate the calculation of which documents are of interest to particular agent, helping the sync system know which documents to send deltas of. For these reasons, we’re treating synchronization and authorization as part of a larger, unified project, even though each will yield distinct artifacts.</p>
<h2 id="automerge-anywhere"><a class="plain" href="#automerge-anywhere">Automerge Anywhere</a></h2>
<p>The <a href="https://automerge.org/">Automerge</a> team has made some big improvements to the WASM packaging setup for the library, which makes it usable in more contexts, including vanilla JS applications with no bundler, in React-Native applications on mobile devices, within cloud services like Cloudflare Workers or Val.town, and more.</p>
<p>For more details, <a href="https://automerge.org/blog/2024/08/23/wasm-packaging/">see the full writeup</a> on the Automerge blog.</p>
<h2 id="researchers-in-residence"><a class="plain" href="#researchers-in-residence">Researchers-in-residence</a></h2>
<p><a href="https://elliot.website">Elliot</a> joined as a researcher-in-residence this month. Elliot is working on researching tools that build bridges between diverse ways of specifying programs, from the esoteric to the mundane. While in residence, Elliot will be working on programming language prototypes to explore variations on concepts like destructuring and evaluation direction. Elliot is here to strengthen his research fundamentals, collaborate, and get feedback.</p>
<p>Lu Wilson published their <a href="https://todepond.com/report/arroost">essay about Arroost</a>, a music-making tool. In the essay, they make the case for tackling <strong>emotional blockers</strong> when building creative tools.</p>
<h2 id="whats-a-few-more-open-tabs"><a class="plain" href="#whats-a-few-more-open-tabs">What’s a few more open tabs?</a></h2>
<ul>
<li>From lab researcher Ivan Reese: <a href="https://github.com/ivanreese/2222">2222</a>, a mysterious programming game</li>
<li>We wrote on the Patchwork notebook about <a href="https://www.inkandswitch.com/patchwork/notebook/11/">Universal Comments</a>: a general abstraction for working with annotations on any kind of document.</li>
<li>You might enjoy this <a href="https://archive.org/details/fsdesign">excellent study on file system design</a> by Dominic Giampaolo, lead creator of Be File System who now works on file systems at Apple.</li>
</ul>
<p>That’s all for now, until next time.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Local-First Conf, Ink Selection with Flux]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-005/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-005/</guid>
      <pubDate>Fri, 12 Jul 2024 00:00:00 GMT</pubDate>
      <description><![CDATA[A report from the inaugural Local-First Conference in Berlin, and a deep dive on a new ink selection model.]]></description>
      <content:encoded><![CDATA[<p>We hope you’re having a wonderful summer. At Ink &amp; Switch, we’re hard at work on several new projects which we’ll share more about soon.</p>
<p>In this Dispatch: we have a report from the inaugural Local-First Conference in Berlin, a deep dive from our ink team on a new selection model, and some updates on our researcher-in-residence program.</p>
<h2 id="trip-report-local-first-conf"><a class="plain" href="#trip-report-local-first-conf">Trip report: Local-First Conf</a></h2>
<p>The first <a href="https://localfirstconf.com">local-first conference</a> was held in Berlin last month and several lab members were in attendance. For those who aren’t up-to-speed on what’s been happening with the local-first movement, Martin Kleppmann gave the opening keynote and described the <a href="https://www.youtube.com/watch?v=NMq0vncHJvU&amp;list=PL4isNRKAwz2O9FxP97_EbOivIWWwSWt5j&amp;index=1">Past, Present, and Future of Local-First</a>, and Alex Good presented on his recent work shipping rich-text support in Automerge. There’s now <a href="https://www.youtube.com/playlist?list=PL4isNRKAwz2O9FxP97_EbOivIWWwSWt5j">a playlist of videos</a> from the event so you can catch up on the talks you missed. We all particularly enjoyed Maggie Appleton’s closing talk introducing the concept of the <a href="https://www.youtube.com/watch?v=qo5m92-9_QI&amp;list=PL4isNRKAwz2O9FxP97_EbOivIWWwSWt5j&amp;index=17">Barefoot Developer.</a></p>
<p>After the main conference there was a second “expo” day of presentations by technology builders:</p>
<ul>
<li><a href="https://jazz.tools/">Jazz.Tools</a></li>
<li><a href="https://www.powersync.com/">PowerSync</a></li>
<li><a href="https://use-fireproof.com/docs/welcome/">Fireproof</a></li>
<li><a href="https://automerge.org">Automerge</a></li>
<li><a href="https://dxos.org/">DXOS</a></li>
<li><a href="https://electric-sql.com/">ElectricSQL</a></li>
<li>and of course, Berlin’s own: <a href="https://yjs.dev/">Yjs</a>.</li>
</ul>
<p>It’s incredible to see a thriving community growing around these ideas. Huge thanks to Johannes Schickling, Adam Wiggins, James Arthur, and the <a href="https://www.sceal-studio.com/">Scéal team</a> for putting on a great show.</p>
<p>One last thing: you don’t need to wait a whole year to jump in with the local-first community. Why not check out Johannes’ <a href="https://localfirst.fm">local-first podcast</a> or join the <a href="https://discord.gg/lofi-so">Local-First Discord</a>?</p>
<h2 id="deep-dive-dynamic-selection-with-flux"><a class="plain" href="#deep-dive-dynamic-selection-with-flux">Deep dive: dynamic selection with flux</a></h2>
<p>Over on the Ink team, we just wrapped up a project designing our next programmable ink system. One of the interesting developments in this project was a new approach to selecting objects on the canvas.</p>
<p>Imagine a typical drawing canvas, like tldraw, Cuttle, or Figma. When you make a selection, you’re always selecting something specific. You might directly click to select a single object. Or you may drag a selection marquee to cover a region of space, selecting the objects that occupy it. The former is incredibly precise. You’re saying “I want this one object”. The latter is ever so slightly more approximate. You’re saying “I want any objects in here.”</p>
<figure><img src="/newsletter/dispatch-005/selection.png" alt="Several shapes on an ink canvas with selection boxes around them">
</figure>
<p>A programmable system allows a wider range of specificity. You might have some deeply nested data, and make a selection by reaching for a known place within the structure: <code>myObject.nested.element.to.select</code>. But you can also create a selection dynamically by matching a pattern, evaluating some criteria, or issuing a query:</p>
<div class="highlight">
<pre class="chroma"><code class="language-js">dotfile = /(^|[\/\\])\../
if filename.match(dotfile) then log(&quot;unix strikes again&quot;)
</code></pre>
</div>
<p>These later approaches make selection very flexible. You empower a program to do the selection for you at some point in the future, rather than selecting something yourself right this instant. You don’t know what exactly will be selected, but you do know some qualities it should possess.</p>
<p>When writing the code to perform a dynamic selection, you might have a few concrete examples to generalize from. But it’s up to you to identify the pattern and express that in programming terms. You have to take a step away from concrete, into the abstract. This is the cost of code — you gain flexibility by sacrificing tangibility. Each of the myriad approaches to dynamism feel different, and offer different tradeoffs at this step.</p>
<p>For our programmable ink system, we want an approach to dynamic selection that feels like a natural progression from the concrete selection of objects on a canvas. Not something like regex or a query DSL, where the way you describe a selection doesn’t much resemble the stuff being selected, especially if that stuff is graphical in nature. If our programs are going to be querying and effecting stuff on a canvas, they should be programmed right on that same canvas using that same stuff.</p>
<p>For a few years now, we’ve been exploring an approach to dynamic selection called <strong>spatial queries</strong>. In <a href="https://www.inkandswitch.com/inkbase/">Inkbase</a>, every object would keep track of the objects around it, so you could for instance ask any object for the things to its right. But “to the right” is a bit vague, and clarifying “50 pixels to the right” feels like coding, not like drawing. It’s also a bit too rigid — “50 pixels to the right” is less sketchy than “the rest of the sentence” or “this entire doodle”, and in our programmable ink system we prize sketchiness.</p>
<p>Over the past few months, while designing our new programmable ink system, we’ve been playing with a new idea for dynamic selection. We call it <strong>flux</strong>. It’s spatial queries as an object you can see and touch.</p>
<p>You draw flux on the canvas just like ink, and then it spreads out from where it was drawn, flowing and pooling like a liquid. It can spread through space, or through ink — your choice. When flux floods the inside of a region encircled by ink, it resists flowing through any small gaps. When it spreads along ink strokes, it can jump across small gaps.</p>
<figure><img src="/newsletter/dispatch-005/flux.gif" alt="A checkbox and the text hello world, with a green shape spreading across">
</figure>
<p>Ink that is engulfed by flux is treated as a selection, just as though you’d selected the ink by hand. And you can use any of these selections (from flux or by hand) as the input to a programmed behaviour.</p>
<p>Flux will continue to flow and retract in reaction to changes in the ink around it. If you pull some flux-covered ink away, the flux withdraws. If you write or draw close to some flux, the flux will spread to encompass your newly made strokes. It’s a dynamic query that you can draw, see, and manipulate right on the canvas. It exists somewhere in between a marquee or lasso, which encompasses a region of space, and a reactive query, which continually feeds values into a computation.</p>
<p>We tried to make the experience of working with flux feel very much like other types of drawing and selection on the canvas. You can even tug some flux to guide how it will spread, which is helpful for selecting (say) all the text to the right of a checkbox.</p>
<p>Behind the scenes, flux works a bit like a hybrid of a particle system and a cellular automata. There are rules governing how the bits of flux relate to their neighbouring bits of flux, and how they react to other elements on the canvas.</p>
<p>We’re still exploring how flux interacts with other parts of our programmable ink system. How exactly should flux confer effects upon the things it selects? Do we want flux to eventually cool into a more static state? Or do we want flux to be even more dynamic, to spread and retract on command by a script? We don’t yet know what exactly flux is, how it works, or what it means, so you can look forward to hearing more about it in the coming months.</p>
<h2 id="researchers-in-residence"><a class="plain" href="#researchers-in-residence">Researchers-in-residence</a></h2>
<p>Alexander Obenauer has wrapped up his term as a researcher-in-residence with the lab. We’re excited to keep following his work on <a href="https://obenauer.com/heron/">personal health informatics</a> and more.</p>
<p>We’re thrilled to welcome a new researcher-in-residence: <a href="https://maggieappleton.com/">Maggie Appleton</a>! She’ll be exploring ideas at the intersection of tools for thought and language models—more details to come in future dispatches.</p>
<h2 id="whats-a-few-more-open-tabs"><a class="plain" href="#whats-a-few-more-open-tabs">What’s a few more open tabs?</a></h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=jvPPXbo87ds">a video by Freya Holmér on the Continuity of Splines</a></li>
<li><a href="https://www.researchgate.net/publication/234820368_The_Scratch_Programming_Language_and_Environment">a 2010 paper on the design of Scratch</a></li>
</ul>
<p>That’s all for now, until next time.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Universal version control and rich text on Automerge]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-004/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-004/</guid>
      <pubDate>Wed, 08 May 2024 00:00:00 GMT</pubDate>
      <description><![CDATA[In this dispatch we’re sharing some updates about our ongoing research on universal version control.]]></description>
      <content:encoded><![CDATA[<p>Hello all,</p>
<p>We’ve had a busy spring at Ink &amp; Switch, including a lab summit in Denver and a hack week where some new projects sprung up. In this dispatch we have some updates on our ongoing work on version control, notes on an exciting new release of Automerge, and news from our researchers-in-residence.</p>
<p>If you’re in the neighborhood of Berlin at the end of May, several lab members will be participating in the <a href="https://www.localfirstconf.com/">Local-First Conference</a>. Tickets are sadly sold out, but if you’d like to connect when we’re in town, <a href="mailto:hello@inkandswitch.com">drop us a line</a>!</p>
<h2 id="patchwork-universal-version-control"><a class="plain" href="#patchwork-universal-version-control">Patchwork: universal version control</a></h2>
<p>In our <a href="https://www.inkandswitch.com/newsletter/dispatch-003/">last Dispatch</a> in Febuary, we introduced Patchwork: a research project by Geoffrey Litt, Paul Sonnentag, Max Schoening, Adam Wiggins, Peter van Hardenberg, and Orion Henry exploring <em>universal version control</em>. Our goal was to design conceptual primitives for version control that were simple enough for all computer users; powerful enough to handle a variety of sophisticated workflows like branching changes and editing history; and could span a wide variety of types of media and collaboration workflows.</p>
<p>We started by exploring a variety of versioning concepts for helping small teams of writers collaborate better. The <a href="https://www.inkandswitch.com/patchwork/notebook/">lab notebook</a> for the project logs some of those experiments:</p>
<ul>
<li><a href="https://www.inkandswitch.com/patchwork/notebook/03/"><strong>Dynamic history</strong></a>: flexibly querying document history at different zoom levels and with different groupings</li>
<li><a href="https://www.inkandswitch.com/patchwork/notebook/04/"><strong>Diff visualizations</strong></a>: experiments with many ways of visualizing diffs in writing at small and large scale</li>
<li><a href="https://www.inkandswitch.com/patchwork/notebook/05/"><strong>Edit groups</strong></a>: grouping sets of edits into reviewable units</li>
<li><a href="https://www.inkandswitch.com/patchwork/notebook/06/"><strong>Lightweight branching</strong></a>:  making alternate versions of a document on separate branches, using simple light interactions</li>
<li><a href="https://www.inkandswitch.com/patchwork/notebook/09/"><strong>Version history as chat</strong></a>: making history legible and discussable</li>
</ul>
<figure><img src="/newsletter/dispatch-004/edit-groups.png" alt="An interface showing edits on text being grouped and commented on.">
<figcaption>The Edit Groups prototype from Patchwork lets users group related edits and comment on them together.</figcaption>
</figure>
<p>All of these ideas were prototyped in <a href="https://github.com/inkandswitch/tiny-essay-editor">Tiny Essay Editor</a>—the Automerge-based Markdown editor we use at the lab—and used to write our lab notebook posts. We’ve found that even simple versions of branching, edit groups, and history timelines were quite powerful in that context. But we also discovered tricky challenges we’re still working on, including some new ways of representing changes in Automerge to make it easier to cherry-pick edits across branches.</p>
<p>We’ve also lightly explored two more areas beyond: <a href="https://www.inkandswitch.com/patchwork/notebook/07/">AI bots that make suggestions on branches</a>, and first steps towards <a href="https://www.inkandswitch.com/patchwork/notebook/10/">version control on other media types</a> like drawings and spreadsheets. More work is needed to flesh these out, but they feel like promising directions.</p>
<p>We’d love to <a href="mailto:hello@inkandswitch.com">hear feedback via email</a> on this work! We’re especially interested in hearing from you if you need a better collaborative versioned text editor for writing blog posts or papers, or you might want to add better versioning to an existing application you’ve already built.</p>
<h2 id="rich-text-in-automerge"><a class="plain" href="#rich-text-in-automerge">Rich text in Automerge</a></h2>
<p>Automerge, the CRDT-based collaboration library developed by Ink &amp; Switch, now has official support for rich text and a fully supported Prosemirror binding!</p>
<p>For those who’ve been following along: our <a href="https://inkandswitch.com/peritext">Peritext</a> essay from 2021 described a model for representing text with inline annotations like bold, italic, or underline. But that work didn’t address a critical part of rich text: block elements like paragraphs and bulleted lists, where any span of text can only belong to one block at a time. Martin Kleppmann then proposed some extensions to Peritext to handle these cases.</p>
<p>Since then, the Automerge team, particularly maintainer Alex Good, have been hard at work implementing all of these ideas in Automerge. We’re thrilled to announce that the results are now available: the new version of Automerge includes a native and portable representation for rich text with inline marks and blocks, and a reference binding for the <a href="https://github.com/automerge/automerge-prosemirror">ProseMirror</a> rich text editor library for the web. There is also work underway on iOS bindings.</p>
<p>This work has been supported by our corporate sponsors, particularly including our partners at GoodNotes. Thanks also to Marijn Haverbeke for his input on the project.</p>
<p>If you’d like to learn more about the theory behind this, Alex will be speaking at Local-First Conf and we’ll plan to write up a more detailed account in the future.</p>
<p>For more details on this work, check out the post on <a href="https://automerge.org/blog/2024/04/06/richtext/">the Automerge blog</a>!</p>
<h2 id="researching-in-residence"><a class="plain" href="#researching-in-residence">Researching-in-Residence</a></h2>
<p>Researcher-in-residence Alexander Obenauer is working on <a href="https://obenauer.com/heron/">Heron</a>: an applied research project investigating concepts in personal health informatics for individuals with chronic conditions.</p>
<p>Researcher-in-residence Lu Wilson has concluded a collaboration with <a href="https://www.cs.unm.edu/~ackley/">Dave Ackley</a>, introducing and exploring the concept of <a href="https://www.todepond.com/wikiblogarden/academia/natural-code/submitted/">natural code</a>, and has also been researching <a href="https://www.youtube.com/watch?v=r6ls8Gw9MmY">autocomplete for canvas</a>, building on some work from Patchwork.</p>
<p>Mary Rose Cook has finished her residency and taken a job with <a href="https://void.dev">Void</a>, a slightly mysterious new game engine company started by GitHub founder Chris Wanstrath. We’re all looking forward to seeing what they come out with.</p>
<p>Till next time!</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[OS of the future and universal version control]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-003/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-003/</guid>
      <pubDate>Tue, 27 Feb 2024 00:00:00 GMT</pubDate>
      <description><![CDATA[In this dispatch we’re spotlighting Alexander Obenauer’s work on the future of personal computing and introducing our new research project.]]></description>
      <content:encoded><![CDATA[<p>Hello all,</p>
<p>New projects are in full swing and we’re getting ready for our first lab summit of this year at the end of next month! In this dispatch, we wanted to spotlight the work of Alexander Obenauer who’s been a Researcher-in-Residence with us since last year and introduce our new research project, in case you’ve missed Adam and Geoffrey’s posts on X.</p>
<h2 id="ollos-and-workbench-by-alexander-obenauer"><a class="plain" href="#ollos-and-workbench-by-alexander-obenauer">OLLOS and Workbench by Alexander Obenauer</a></h2>
<p>Alexander Obenauer is exploring how the future of personal computing could better serve people’s lives. You might remember Alexander from the Embark project, where he joined the malleable software team to address the limitations of modern siloed apps. In his independent research, Alexander is questioning today’s operating systems and exploring the OS of the future.</p>
<p>Adopting a new app is the only way for most people to get new interfaces and features into their personal computing environments. This presents users with a funny challenge: surveying pre-made apps for the ones that, hopefully, match the way they think and work. But this is a surprisingly arduous process because apps often operate on their own silo of data, and they present a new, separate environment which must be learned and adopted. When that doesn’t work, people are stuck trying to use software that doesn’t think or work the way they do.</p>
<p>Alexander has been exploring the concept of an “itemized” OS, one that allows users to construct their own environment. In such an OS all of your digital things — emails, todos, notes, reminders, webpages, podcast episodes, and so forth — are “items” that sit in one, local graph. Users are then able to create new interfaces with the items that matter in their lives and work, or introduce items that bring new functionality to their overall environment (such as having a reminder item which can be added to any other item).</p>
<figure><img src="/newsletter/dispatch-003/ollos.png" alt="Screenshot of OLLOS, showing items of different types."><figcaption>Screenshot of OLLOS, showing items of different types.</figcaption>
</figure>
<p><strong>OLLOS</strong>, one of Alexander’s recent experiments, is an interface that uses time as an organizing principle. Having all of your items organized on one timeline gives you a new dimension of context, as much of our digital things are related to each other by time. A meeting with a colleague involves a calendar event, a related note and maybe a follow-up email. In OLLOS, the temporal association is a benefit of the system. He recently published an essay in which he discusses designing, building, and living in OLLOS for several years, with details on how the design and concept evolved, what future work it points to for timeline interfaces and the OS of the future, and some reflection on personal interfaces like it. <a href="https://alexanderobenauer.com/ollos/">Read the essay here</a>.</p>
<p><strong>Workbench</strong>, his next project, allows anyone to build personal interfaces on top of the <em>item store</em> that powered OLLOS. This project aims to improve our understanding of the kinds of personal interfaces people want to build and the impact that living in personal interfaces has on people’s lives and work.</p>
<h2 id="universal-version-control"><a class="plain" href="#universal-version-control">Universal version control</a></h2>
<p>The creative process is all about iteration: trying out alternatives, seeing a progression over time, or discussing changes with our collaborators.</p>
<p>Different disciplines use different tools to explore variations, for example:</p>
<ul>
<li>Coders use Git to work in branches and see diffs</li>
<li>Writers use Track Changes in Microsoft Word to suggest and review edits</li>
<li>Designers duplicate artboards in Figma to see variations side-by-side</li>
</ul>
<p>Last year, we took inspiration from these versioning systems and built an experimental text editor for writers. We think the <a href="https://www.inkandswitch.com/upwelling/#layers-and-drafts">core concepts in Upwelling</a> are promising and transferable to other creative domains.</p>
<p>So now, we’re continuing this line of work with version control for writing and beyond. We believe that simple, powerful, universal version control tools could help creative people in many fields work and collaborate more effectively. Perhaps this version control could one day be built into the storage layer of your OS!</p>
<p>Geoffrey Litt, Paul Sonnetag, Max Schoening, Peter van Hardenberg, and Adam Wiggins have started building prototypes to test this idea in our new research project, codenamed Patchwork. Follow the work-in-progress posts in the <a href="https://www.inkandswitch.com/patchwork/notebook/">Patchwork lab notebook</a>.</p>
<h2 id="whats-a-few-more-open-tabs"><a class="plain" href="#whats-a-few-more-open-tabs">What’s a few more open tabs?</a></h2>
<ul>
<li><a href="https://www.localfirstconf.com/">Local-First Conf 2024</a> is the world’s first local-first conference, happening on May 30 in Berlin, Germany. Early bird tickets are going <a href="https://www.eventbrite.com/e/local-first-conf-2024-tickets-823806676947">on sale today</a>. Martin Kleppmann, Alex Good, Adam Wiggins and others from the lab will be there, come say hi if you are able to attend.</li>
<li>For a reminder or quick primer on what local-first is and why it’s important, listen to Peter talk about it in <a href="https://www.localfirst.fm/1">this localfirst.fm episode</a>.</li>
<li>Geoffrey gave a talk on Tiny Essay Editor, a collaborative markdown editor built on Automerge. We’ve been using it around the lab for all sorts of writing including this dispatch. Here’s <a href="https://x.com/geoffreylitt/status/1752379702377873894?s=20">a quick summary in slides</a>.</li>
<li>Lu has recently joined us as a Researcher-in-Residence. They have a channel of slightly-surreal videos on creative coding. The latest one is on <a href="https://www.youtube.com/watch?v=DNBKdU6XrLY">Arroost</a> — a playful, mind-boggling music-making tool.</li>
</ul>
<p>Till next time!</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Making a new medium and other recaps]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-002/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-002/</guid>
      <pubDate>Thu, 21 Dec 2023 00:00:00 GMT</pubDate>
      <description><![CDATA[It’s always nice to celebrate publications and presenting our research in public, but much of our work are ongoing journeys. So, in this end of the year dispatch we wanted to share some recaps and talk a bit about one of our longest standing research tracks: programmable ink.]]></description>
      <content:encoded><![CDATA[<p>Hello all,</p>
<p>We’re finding ourselves in a reflective mood as the end of 2023 approaches. This year, we published 3 essays, communed at a couple events, and organized several workshops. It’s always nice to celebrate publications and presenting our research in public, but much of our work are ongoing journeys of continuous exploration, prototyping, and findings. So, we wanted to start this end of the year dispatch by talking a bit about one of our longest standing research tracks: <strong>programmable ink</strong>.</p>
<h2 id="making-a-conversational-medium"><a class="plain" href="#making-a-conversational-medium">Making a conversational medium</a></h2>
<p>The ink team at the lab is dedicated to making something that combines what we love about sketching on paper with the power of computers. This new tool we envision will allow you to add dynamic behaviour to imperfect and often fuzzy sketches. More importantly, this tool should be intuitive to use; working with it should feel <strong>conversational</strong> like working with pen and paper or a trusted collaborator.</p>
<p>The lab has been working on this idea through different projects with various team members (see <a href="https://www.inkandswitch.com/untangle/">Untangle</a>, <a href="https://www.inkandswitch.com/inkbase/">Inkbase</a>, or <a href="https://www.inkandswitch.com/crosscut/">Crosscut</a>). Making the experience of the prototype feel conversational and intuitive has been an ongoing research problem and one of our (many) obsessions. This year, Marcel Goethals, Alex Warth and Ivan Reese have made a breakthrough with their current prototype. They’ve built a system that’s bringing us closer to the level of conversational and intuitive feel we want.</p>
<p><img src="/newsletter/dispatch-002/pen-paper.jpg" alt="image"></p>
<p>Part of what makes pen and paper a versatile medium for thinking is its flexibility and informality. You can start scribbling anywhere and use any set of symbols or words to represent your thinking. You can decide on the relationship between things you scribble as you go, and you can go back and change parts of what you’re scribbling. The meaning of anything you put on the paper can easily transform and evolve as you think, and there’s no friction between your thought process and the medium. The ongoing conversation between what’s on the paper and what’s in your head is what helps you make sense of your ideas and push them further.</p>
<p>Computers are a dynamic medium that allow us to perform calculations and actions like copying, reusing things, and simulating ideas. But computational tools lack the kind of flexibility and informality inherent to pen and paper. They add too much structure and formality (think structured tables or vector shapes) too soon for informal, often hazy thinking. They also typically rely on you knowing the input(s) so that you can arrive at a desired output. A spreadsheet can compute your net profit if you add or make changes to your losses and expenses. We can use CAD to create an accurate floor plan if we know the measurements and positions of items.</p>
<p>Tools like spreadsheets use <em>unidirectional</em> computation where computation can only flow forward in one direction. A spreadsheet formula can compute a result using numbers from the cells but it can’t give you changes to the numbers if you edit the result. This is good for answering questions like: <em>what will my monthly payment be if the interest rates go up</em>? But sometimes, we want to work backwards and ask: <em>what interest rates do I need if I want to keep my monthly payment at a certain amount</em>? For these kinds of questions we’d have to do extra work, and this distracts us from the thinking work that truly matters. We can’t have a conversational experience with a tool that adds too much structure too soon and requires us to think <em>for</em> it. So how do we create a new computational medium that <em>can</em> give us the kind of conversational experience pen and paper does?</p>
<p>One of the key starting points for solving this problem was making <em>bidirectional</em> computation work in our prototype. Any point, symbol, or line you draw on paper are like outputs that are simultaneously inputs that you can do more with. We want the tool we’re making to give you this kind of freedom—the freedom to manipulate any object and add dynamic behavior to it. We implemented a version of bidirectional computation in <a href="https://www.inkandswitch.com/crosscut/">Crosscut</a>, a tool for drawing vector-based dynamic models. It’s what allowed users to wire a relation between two points and experience the relationship immediately by wiggling any of the points, like in the example below.</p>
<figure><img src="/newsletter/dispatch-002/vertical-line.gif" alt="Wiggling a point in a line that stays vertical no matter what.">
<figcaption>Each point can be moved up and down but the line stays vertical when you try moving the points horizontally (achieved by setting the horizontal position (x) of the points to be equal).</figcaption>
</figure>
<p>When designing, we’re constantly thinking about <em>materiality</em> — what is the material that things are made out of? If you’re a designer you may have thought about this when it comes to UI elements (remember brushed metal?), but we also think about the materiality of our programming constructs. In Crosscut, the materiality of the programming model had a feeling of <em>grain</em>, like wood, where the model behaves well when data flowed back-and-forth in certain directions, but poorly in others. As a user you would encounter this grain when using the tool and so you couldn’t manipulate objects as freely as we’d like.</p>
<p>The challenge of <em>bidirectional</em> computation is that sometimes there’s more than one way to get to a result. If you change the result of an addition, which input should you update? In our latest prototypes, we’ve developed a computational model that’s powered by a new constraint system. This model can find solutions that satisfy your constraints but it feels <em>grainless</em> to interact with. We’ve started calling this approach <em>omnidirectional</em> computation. We call it <em>omnidirectional</em> because there aren’t really inputs or outputs to it. There are only relationships between objects. You can edit any – or all – of the pieces of the system simultaneously and still get a result even for complex problems. By default, our system will change <em>every</em> object a little bit instead of choosing a single input to change a whole lot. We like to think of this as “spreading the change”.</p>
<p>This model of computation opens up new opportunities for how our system can evolve both computationally and interactionally—it’s bringing us closer to the conversational medium we want to make. For example, it provides robust support for multitouch interactions and problems like this pulley system:</p>
<figure><img src="/newsletter/dispatch-002/pulley-system.gif" alt="Demo of a pulley system with dynamic behaviour."><figcaption>Demo of a pulley system with dynamic behaviour.</figcaption>
</figure>
<p>We’ve made several attempts at implementing this constraints-based computation but weren’t successful at making the constraint system stable enough until recently. Some of our early prototypes felt like you were working with jelly. Our new constraint system feels fast and solid, and feels much more intuitive and conversational. It’s been a journey but we’re excited to continue improving it and look forward to sharing more of our findings in the near future.</p>
<h2 id="out-and-about"><a class="plain" href="#out-and-about">Out and about</a></h2>
<p>It’s the end of the year, and so I (Peter) wanted to share some recaps from a few events we attended this year. As a distributed research group, occasional in-person meetups help us keep in touch with each other as well as the rest of you. There’s simply no substitute for meeting people in person, sharing a meal, and getting into the weeds on our shared interests.</p>
<p>This September, many of us attended the last Strangeloop in St. Louis, MO where Martin talked about <a href="https://www.youtube.com/watch?v=Mr0a5KyD6BU">new algorithms for collaborative text editing</a>. It was bittersweet: Strangeloop was my personal favorite conference and brought together a mix of industry and academic folks with an eclectic programme that combined useful information with feats of “stunt computing.” Any attempt to pick favorite talks would be impossible, but here are our own talks from the previous two years on <a href="https://www.youtube.com/watch?v=ifYuvgXZ108">Programmable Ink by Szymon Kaliski</a> and <a href="https://www.youtube.com/watch?v=5ClLkuaoE-o">Backchannel by Rae  McKelvey</a>.</p>
<p>After the main event, we co-hosted a one day Local-First Unconference with our friends at Fission and DXOS. It filled up quickly, so we expanded the capacity and then it filled up again. Local-first software is on the move! I’m still hoping to edit something together from the community notes one of these days but there’s <a href="https://github.com/LoFiUnconf/stlouis2023">plenty of raw material to peruse here</a>.</p>
<p>More recently, we participated in the <a href="https://liveprog.org/">LIVE Programming</a> and <a href="https://2023.splashcon.org/home/plf-2023">Programming Local-First</a> academic workshops in Cascais, Portugal as part of SPLASH 2023 and then hosted another unconference at a beautiful resort. Together these three events capture the breadth of our interests: LIVE is full of wild open-ended programming language experiments, PLF is a mixture of field reports and crunchy algorithms talks, and the unconference attracted roughly fifty renegade developers from across Europe to discuss optimistic visions of a new kind of computing.</p>
<h2 id="whats-a-few-more-open-tabs"><a class="plain" href="#whats-a-few-more-open-tabs">What’s a few more open tabs?</a></h2>
<ul>
<li>A <a href="https://inkandswitch.com/2023-unconf-lisboa">gallery of photos</a> from our unconference in Portugal by Todd Matthews.</li>
<li>Alex Good has written a round-up of <a href="https://automerge.org/blog/2023/12/21/merry-commitmas/">Automerge updates</a>. <a href="https://automerge.org">Automerge CRDT</a> lives at Ink &amp; Switch and has had a lot of performance work and new features in recent months.</li>
<li>An interesting article on <a href="https://medium.com/@eleventx/elevenote-elevens-proprietary-electronic-lab-notebook-platform-7baa8398bedb">creating a lab notebook</a> on top of Notion by biotech lab Eleven Therapeutics.</li>
</ul>
<h2 id="till-next-time"><a class="plain" href="#till-next-time">Till next time</a></h2>
<p>We’re looking forward to lots of new projects next year. Thanks for following along with our work. Happy holidays!</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[On Embark and Lude]]></title>
      <link>https://www.inkandswitch.com/newsletter/dispatch-001/</link>
      <guid isPermaLink="true">https://www.inkandswitch.com/newsletter/dispatch-001/</guid>
      <pubDate>Tue, 21 Nov 2023 00:00:00 GMT</pubDate>
      <description><![CDATA[Some of you have expressed an interest in knowing more about what’s going on at the lab—wish granted! In this first dispatch, we want to share some of our recent work on Malleable Software with Embark, talk a bit about our Researchers-in-Residence program, and introduce you to Mary Rose Cook.]]></description>
      <content:encoded><![CDATA[<p>Hello all,</p>
<p>Some of you have expressed an interest in knowing more about what’s going on at the lab—wish granted!</p>
<p>First, a quick re-introduction in case you’re not sure how you wound up here. Ink &amp; Switch is an independent research lab exploring the future of tools for thought. Our goal is to invent a computer that helps its users think more clearly, collaborate more effectively, and never gets in your way.</p>
<p>As of today we have three active research tracks: <strong>local first software</strong>, <strong>programmable ink</strong>, and <strong>malleable software</strong>. We’re about a dozen researchers around the world, mostly spread across North America and Europe. We have a mixture of industry veterans and academic researchers and we view our output primarily as <em>knowledge</em>: a clearer understanding of the problems and opportunities in tools for thought.</p>
<p>In this first dispatch, we want to share some of our recent work on Malleable Software with Embark, talk a bit about our Researchers-in-Residence program, and introduce you to Mary Rose Cook.</p>
<p><img src="/newsletter/dispatch-001/embark-mood.jpg" alt="image"></p>
<h2 id="embark-dynamic-documents-for-making-plans"><a class="plain" href="#embark-dynamic-documents-for-making-plans">Embark - Dynamic documents for making plans</a></h2>
<p>On the Malleable Software track our goal is to design software environments that people can mold to their unique needs by pushing personal computing beyond the boundaries of siloed apps.</p>
<p>Recently, we’ve been exploring a potential solution to this problem: <strong>dynamic documents</strong> that let you gradually enrich text with interactive behavior. Last year we shared <a href="https://www.inkandswitch.com/potluck/">Potluck</a>, a dynamic document environment for text notes and recipes. It felt like we had found a valuable thread worth pursuing for making software that’s more personal, but we also found challenges with some aspects of Potluck’s design, and we also wanted to find deeper, more authentic uses for this new kind of document.</p>
<p>So, this year, Paul Sonnentag and Geoffrey Litt from the Malleable Software track teamed up with independent researcher Alexander Obenauer to design another take on dynamic documents. This time around, they focused on travel planning as a use case. Planning a trip typically requires juggling many apps and manually coordinating between them. It can involve booking flights and hotels, researching restaurants, scheduling meetings, planning routes, etc. Different pieces of information are spread across multiple web applications, and it’s left to us to collect and keep track of them all in one place. How could we simplify and improve this process with a new kind of dynamic document?</p>
<figure><img src="/newsletter/dispatch-001/embark-main.png" alt="Using a text outline and a map view to plan a team summit in Embark.">
<figcaption>Using a text outline and a map view to plan a team summit in Embark.</figcaption></figure>
<p>The result of this exploration is a research prototype called Embark. It lets you write a text outline augmented with three features: <em>mentions</em> of structured data like places and dates, spreadsheet-like <em>formulas</em> to compute weather forecasts and routes, and rich <em>views</em> like maps and calendars. Together these primitives enrich a planning document into a live, interactive surface that goes beyond text content.</p>
<p>In our new essay, we share what we learned from using Embark to plan many of our own real trips. We also delve deeper into why travel planning with apps is difficult in the first place, and the design thinking behind Embark. We’re now more convinced than ever that dynamic documents are a powerful foundation for personal software. We hope you find the essay thought-provoking and look forward to hearing your thoughts and feedback.</p>
<ul>
<li><a href="/embark/">Read the essay!</a></li>
<li><a href="https://www.youtube.com/watch?v=mGnez4lA9f4">Watch Paul’s presentation</a> at the LIVE workshop.</li>
</ul>
<h2 id="researchers-in-residence"><a class="plain" href="#researchers-in-residence">Researchers-in-Residence</a></h2>
<p>Solo independent researchers we know often discuss the challenge of working alone. Being part of a research group can create community, social accountability, provide feedback, and just give you someone to talk to when you’re feeling stuck or bored. This is why we started our Researchers-in-Residence program.</p>
<p>We invited a few independent researchers to come and join our virtual lab and work on their own projects being a part of our little community. They come to our weekly meetings to talk about their plans, give or get feedback on their work, and get their own “office” (read: Discord channel) where they can post what they like.</p>
<p>In the current rotation, we have <a href="https://maryrosecook.com/">Mary Rose Cook</a> who has been working on Lude and <a href="https://alexanderobenauer.com/">Alexander Obenauer</a> who is exploring the future of computing with the Itemized OS.</p>
<p>As Mary just presented Lude at <a href="https://liveprog.org/">LIVE 2023</a>, we wanted to introduce you to her and what she’s been working on.</p>
<h3 id="lude-by-mary-rose-cook"><a class="plain" href="#lude-by-mary-rose-cook">Lude by Mary Rose Cook</a></h3>
<p>Building software takes an awful lot of time; this is partially because we don’t have better structures for expressing software other than code. Code remains the best way to express software but writing code is incredibly laborious. As a software maker, testing a simple idea can take longer than it should. Mary’s research aims to address these limitations—she’s making tools for building software quickly.</p>
<figure><img src="/newsletter/dispatch-001/lude-main.png" alt="Using Lude to build a version of the game Breakout.">
<figcaption>Using Lude to build a version of the game Breakout.</figcaption></figure>
<p><strong>Lude</strong> is a tool for building video games quickly which materialized during Mary’s residency at Ink &amp; Switch. Video games are an interesting use case because “building games faster” is basically the hardest version of the problem Mary is tackling—games often require defining complex behavior. So, how does Lude make it quicker to build games?</p>
<p><strong>1—Direct manipulation of live objects in the running game.</strong> Traditionally, level editors are not in sync with the running game. The game designer makes edits in one window, then runs the game in a separate window for testing. The magic in Lude comes from syncing the editor with the running game, so that all changes are reflected in both environments. In other words, when you’re making changes in the editor, you’re actually directly manipulating the live game objects.</p>
<p><strong>2—Expressive, fast code generation.</strong> Generating code via prompts is often faster than coding by hand and straightforward, but how can this experience be improved for the game designer? The key is generating code that matches what the designer intended it to do. Lude is designed to capture the expression of the designer’s <em>intent</em> implied in the prompts. (If you’re curious of how exactly this is achieved, read more in <a href="https://maryrosecook.notion.site/Build-games-quickly-with-Lude-5d44bbb16cb2458ab3d759b5273791f5">Mary’s research blog</a>.) And what makes the expressive code generation fast? Lude allows fragments of code to be generated and integrated into the codebase, as opposed to regenerating an entire code base following a change.</p>
<h3 id="where-next"><a class="plain" href="#where-next">Where next?</a></h3>
<p>The goal of Lude wasn’t necessarily to invent something new, it was to discover and test useful concepts for faster software development. Following Lude, Mary is looking to take these learnings and direct her research focus onto better prototyping tools.</p>
<h2 id="whats-a-few-more-open-tabs"><a class="plain" href="#whats-a-few-more-open-tabs">What’s a few more open tabs?</a></h2>
<p>Sorry, we couldn’t let you go without a few more links to things.</p>
<ul>
<li>The Workshop on LIVE Programming 2023 was a blast, we especially recommend Lu Wilson’s talk on <a href="https://www.youtube.com/watch?v=cBYudbaqHAk&amp;t=6704s">CellPond: Spatial Programming Without Escape</a>.</li>
<li>Alex Obenauer is thinking about <a href="https://alexanderobenauer.com/labnotes/037/">Gestural View Construction</a>.</li>
<li><a href="https://engraft.dev/">Engraft</a> by erstwhile collaborator Joshua Horowitz appeared at <a href="https://www.youtube.com/watch?v=7SrZDJDSSCo">UIST</a>.</li>
<li>The <a href="https://archive.org/details/OpenDocProgrammersGuide">OpenDoc Programmer’s Guide</a> weighs in at roughly 600 pages, but if you’re interested in Malleable Software, there’s a ton of great information in there.</li>
</ul>
<h2 id="thats-it-for-now"><a class="plain" href="#thats-it-for-now">That’s it for now</a></h2>
<p>We have so much more to talk about: conference recaps, ongoing ink work, new experiments with local-first… but it will all have to wait for another day.</p>
<p>Is there anything in particular you’d like to know more about via our dispatches? Let us know.</p>]]></content:encoded>
    </item>
  </channel>
</rss>