<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Muni Blog]]></title><description><![CDATA[Networked community gardens in the interwebs.]]></description><link>https://blog.muni.town/</link><image><url>https://blog.muni.town/favicon.png</url><title>Muni Blog</title><link>https://blog.muni.town/</link></image><generator>Ghost 5.74</generator><lastBuildDate>Fri, 17 Apr 2026 07:01:26 GMT</lastBuildDate><atom:link href="https://blog.muni.town/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[On-protocol Organizing]]></title><description><![CDATA[Fighting bad networks with good networks.]]></description><link>https://blog.muni.town/on-protocol-organizing/</link><guid isPermaLink="false">69a14859b09c5bed5bd32820</guid><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Wed, 25 Mar 2026 13:13:44 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2026/03/sunset_clouds_by_fredyguy12_dewxanu.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2026/03/sunset_clouds_by_fredyguy12_dewxanu.jpg" alt="On-protocol Organizing"><p>Late last year I wrote about what a <a href="https://blog.muni.town/digital-strategy-for-orgs/">Digital Strategy for Organisations</a> ought to look like in today&apos;s online environment, advocating for bottom-up community building in smaller networks of coherence.</p><blockquote>If you&apos;re a grassroots organization, don&apos;t waste your breath yelling into the void of the &quot;town square&quot; to get your message out there. For it is not a town any longer, it&apos;s a megacity where any singular voice immediately drowns in the noise of millions.<br><br>And don&apos;t look for &quot;followers&quot;, for anyone who&apos;s <em>following</em> you is simultaneously following a thousand other spokespeople, breathlessly proselytizing from atop their soap box every day.<br><br>There&apos;s a lot you <em>don&apos;t</em> want to learn from startup culture, but if there&apos;s one thing it has figured out it&apos;s how to go from nothing to something. When you&apos;re small you can <a href="https://paulgraham.com/ds.html">do things that don&apos;t scale</a>. That means reaching out to people directly to say &quot;we like what you&apos;re putting out and we want you alongside us in our community&quot;.</blockquote><p>Some months later Mosh Lee wrote an impassioned appeal to our fellow web nerds to begin <a href="https://mosh.leaflet.pub/3me5e6vqtkc2u">Building for Organizers</a>.</p><blockquote>When we talk about social networks, we often focus on metrics like viral growth, daily active users, engagement rates. But the most enduring social networks aren&#x2019;t the prettiest or the most addictive &#x2013; it&#x2019;s the ones that empower organizers.<br><br><strong>Who Are Organizers?</strong><br><br>When I say &quot;organizers,&quot; I&#x2019;m talking about coaches, teachers, volunteer coordinators, union stewards, event planners, health workers, running club hosts, activist organizers, and owners of community-based businesses like music schools, summer camps, and business improvement districts. <br><br>What unites them isn&apos;t a job title; it&apos;s their role in making decisions on behalf of a group &#x2013; choosing the tools and setting the norms that help people connect with each other, contribute their strengths, and turn a collection of individuals into a functioning community.</blockquote><p>The builders and the organizers need each other. Sometimes they&apos;re the same people, but too often they operate as separate cultures and tribes.</p><p><strong>Organizers need better tools.</strong> For decades they&apos;ve squeezed what little utility they could out of anti-social applications intent on <em>capturing</em> our attention into consumerist doom-loops rather than <em>directing</em> our attention towards pro-social ends.</p><p><strong>Builders need higher purpose.</strong> We have lost sight of the why and who we are building for, making things simply because we can, not because our community requires it. Breathlessly chasing <em>the next thing</em> we live in service of technological advancement for its own sake rather than the people, all of us, who our technology is meant to serve.</p><p>Alongside many of my technologically minded peers, ever since I dedicated myself to the improvement of the <a href="https://en.wikipedia.org/wiki/Web_standards" rel="noreferrer">Open Web</a> and the <a href="https://overreacted.io/open-social/">protocols that undergird</a> it I have enjoyed a greater sense of purpose and belonging in my vocation than ever before, and I was already pretty amped up about <em>doing my part</em> when I first got involved with the open source software movement a couple decades ago.</p><p>I want organizers to be as excited as I am about the phase shift happening on the web right now. <strong>If we technologists can help the organizers see what we&apos;re seeing, which is the potential for a systemic overhaul of the web as we know it, the organizers will understand what they can ask us to build for them.</strong></p><p>This article will provide a crash-course in protocol-driven development. But before we bring the protocol into the picture, let&apos;s begin with the status quo of today&apos;s websites.</p><h2 id="regular-websites">Regular websites</h2><p>Here is a wonderful website made by a local organizer I know.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.muni.town/content/images/2026/03/regenerativfremtid-website.png" class="kg-image" alt="On-protocol Organizing" loading="lazy" width="1919" height="1017" srcset="https://blog.muni.town/content/images/size/w600/2026/03/regenerativfremtid-website.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/regenerativfremtid-website.png 1000w, https://blog.muni.town/content/images/size/w1600/2026/03/regenerativfremtid-website.png 1600w, https://blog.muni.town/content/images/2026/03/regenerativfremtid-website.png 1919w" sizes="(min-width: 1200px) 1200px"></figure><p>It&apos;s the website of <a href="https://regenerativfremtid.no">regenerativfremtid.no</a>, a social collective of ecology-aware activists and enthusiasts. The network began in a group message two years ago, now counting over a hundred people in its Signal group.</p><p>The soul and driver of the group, Idun, recently made a new website for her nascent organization with the goal of adding more dynamism through crowdsourced events, a members-map and shared learning resources all in one place. In other words she wanted to turn what used to be a static information site into a <em>social space</em>.</p><p>The site was made using <a href="https://lovable.dev/">Lovable</a>, which is functionally very similar to WordPress or Squarespace (<a href="https://en.wikipedia.org/wiki/Content_management_system">content-management systems</a>), it just happens to use plain language instead of graphical widgets to assemble websites based on pre-existing building blocks.</p><p>I&apos;m more concerned with the underlying building blocks than the method of assembly. Like WordPress or Squarespace, any website made using Lovable has one significant limitation: It&apos;s an island.</p><p>Those events, the resource links and the group&apos;s social graph, none of them are connected to a wider network of people. This is most vividly felt with the network map (the Community page). It&apos;s a great idea, and a testament to Lovable&apos;s flexibility enabling an organizer to articulate her vision to get this far.</p><figure class="kg-card kg-image-card"><img src="https://blog.muni.town/content/images/2026/03/regen-network1.png" class="kg-image" alt="On-protocol Organizing" loading="lazy" width="1323" height="938" srcset="https://blog.muni.town/content/images/size/w600/2026/03/regen-network1.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/regen-network1.png 1000w, https://blog.muni.town/content/images/2026/03/regen-network1.png 1323w" sizes="(min-width: 720px) 720px"></figure><p>But as soon as we zoom out a bit, we&apos;re reminded of our isolation.</p><figure class="kg-card kg-image-card"><img src="https://blog.muni.town/content/images/2026/03/regen-network2.png" class="kg-image" alt="On-protocol Organizing" loading="lazy" width="1450" height="701" srcset="https://blog.muni.town/content/images/size/w600/2026/03/regen-network2.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/regen-network2.png 1000w, https://blog.muni.town/content/images/2026/03/regen-network2.png 1450w" sizes="(min-width: 720px) 720px"></figure><p>The way this <em>ought</em> to work is that as we zoom further out, the network graph expands beyond the loose confines of regenerativfremtid.no and starts showing members of other, affiliated groups, such as <a href="https://www.nu.no/" rel="noreferrer">Nature and Youth</a>, <a href="https://www.smultringokonomi.no/">Doughnut Economics</a>, <a href="https://www.framtiden.no/en">Future in our Hands</a> and many more.</p><p>Making this work is not Idun&apos;s job. She already did exactly what she was supposed to do by building a functional website that solves her organization&apos;s most pressing issues using the digital tools available <em>today</em>.</p><p>It&apos;s on us, the cybernetic nerds, to make better tools for tomorrow.</p><h2 id="protocols-for-connectivity">Protocols for connectivity</h2><p>&quot;Connecting people&quot; was the original promise of social media in the 2010s, and it did an okay job of it. But for this to be possible we all had to pick one supreme market winner where all our digital identities would be put under centralized management.</p><p>For most of us that became Facebook. Several collapsed democracies and a world-wide mental-health pandemic later, we know how that turned out.</p><p>So we don&apos;t want <em>that</em>. But we don&apos;t want to stop being social on the web either. Is digital space ownership and digital connectivity an either-or proposition? That is certainly what Mark Zuckerberg would have you believe, and until recently he would be mostly right.</p><p>The web is undergoing a quiet renaissance. A new technology called the <a href="https://www.techdirt.com/2026/01/27/atproto-the-enshittification-killswitch-that-enables-resonant-computing/">AT protocol</a> is enabling independent websites and regional platforms to tie their comparatively small, local networks into the unified social graph of one big, global network where we can <em>find the others</em> once more.</p><p>Like the web, this social network is owned by noone and operated by everyone, as a digital commons. This decentralized form of stewardship was made possible for the world-wide web thanks to its evergrowing collection of <a href="https://en.wikipedia.org/wiki/Web_standards">web standards</a>. That is, protocols that define how the web is accessed, whether you&apos;re entering into it via an Android&apos;s Chrome browser or a MacBook&apos;s Safari.</p><p>Expecting the general populace to be <em>protocol-literate</em> may seem like a high bar, but the basics of this stuff isn&apos;t hard to grasp. Protocols are just standardized ways of doing things that work best if we&apos;re all doing them the same way.</p><p>Take radios for example. You can buy any regular radio and listen to the same airwaves as anyone else because of the standardized AM/FM frequencies. I don&apos;t know what those letters mean, but I do know those letters represent a network of antennas and radios that have brought my family a lot of joy on car rides and cabin trips.</p><p>Every radio &quot;speaks&quot; AM/FM because it has been built in accordance with a standardized protocol for how to engineer a radio that can receive the AM/FM signal.</p><p>The AT protocol is another such standard, but for social media signalling. Messages, discussion threads, links, images, events and profiles, these are all common social media signals. Once a website <em>speaks</em> AT it can communicate with all other websites in the AT network, which we protocol nerds affectionately like to call <em>The Atmosphere</em>.</p><p>Now let&apos;s look at what this new technology and its accompanying network affords us. What does it let us do that we couldn&apos;t do before?</p><h2 id="atmospheric-websites">Atmospheric websites</h2><p>Let&apos;s return to <a href="https://regenerativfremtid.no/">regenerativfremtid.no</a>, this time imagined as one of many org websites connected to the Atmosphere network. How does its dynamic features like events, resources and people-mapping work now?</p><h3 id="social-events"><strong>Social Events</strong></h3><p><code>regenerativfremtid.no</code>, henceforth <code>Reg</code> for short, creates all of its events manually. Several of these events are sourced from partner organizations and friends who are managing their event through a different platform, so the event listing on the <code>Reg</code> site is just a duplicate made for extra exposure.</p><p>Logged-in users of <code>Reg</code> can RSVP and the website will increment its number of expected attendees. However, this is a separate counter from whichever events system the external organization is using, so now we have two separate lists of RSVPs. If each is showing only 3 people that is sending a very different signal to prospective attendees than the actual total of 6.</p><p>This is not a problem for websites in the atmosphere because all their events are based on a unified standard. Here is the same conference event on two different events platforms:</p><ul><li><a href="https://atmo.rsvp/p/did:plc:lehcqqkwzcwvjvw66uthu5oq/e/3lte3c7x43l2e">AtmosphereConf on atmo.rsvp</a></li><li><a href="https://smokesignal.events/did:plc:lehcqqkwzcwvjvw66uthu5oq/3lte3c7x43l2e">AtmosphereConf on smokesignals.events</a></li></ul><p><code>Reg</code> could be using either one of these services as its events engine running under the hood while hosting events on its own domain and website just like it does now. So if I saw an event from <a href="https://www.smultringokonomi.no/">smultringokonomi.no</a> (Doughnut Economics Norway) on <code>regenerativfremtid.no</code>, my RSVP signal would be received by both sites.</p><p>This also means far less busywork since instead of asking external organizers to manually submit any relevant events, <code>Reg</code> could instead be subscribed to a community-curated list of aligned organizations whose events are automatically syndicated to <code>Reg&apos;s</code> calendar.</p><h3 id="social-resources">Social Resources</h3><p>When many orgs connect their social graphs together, their collective knowledge compounds. The not-for-profit venture <a href="https://cosmik.network/">Cosmik</a> understood this early on and used the foundations of the AT protocol to build <a href="https://semble.so/">Semble</a>, a social network for knowledge.</p><p>Here&apos;s a collection I made some months ago:</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://semble.so/profile/erlend.sh/collections/3m7ddncq7wp2h"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Post-growth &amp; Regenerative Economics (by Erlend Sogge Heggen) &#x2014; Semble</div><div class="kg-bookmark-description">Articles, podcasts, papers and books about alternative, pro-social models of finance and economics.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://semble.so/favicon.ico" alt="On-protocol Organizing"><span class="kg-bookmark-author">Semble</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://semble.so/profile/erlend.sh/collections/3m7ddncq7wp2h/opengraph-image-1bhro3?a9db2312451e81f7" alt="On-protocol Organizing"></div></a><figcaption><p><span style="white-space: pre-wrap;">My intent is to transfer ownership of the collection to the </span><a href="https://postgrowth.org/"><span style="white-space: pre-wrap;">Post Growth Institute</span></a><span style="white-space: pre-wrap;"> (which is in fact already present on the atmosphere as </span><a href="https://bsky.app/profile/postgrowth.org"><span style="white-space: pre-wrap;">@postgrowth.org</span></a><span style="white-space: pre-wrap;">) as its steward.</span></p></figcaption></figure><p>It&apos;s an open collection that anyone can add links to, and any org&apos;s website could opt to feature this collection in their local resource hub. Likewise, <code>Reg&apos;s</code> own collections could be syndicated to other sites for greater discovery of both the collection and its steward.</p><h3 id="social-networking">Social Networking</h3><p>If we looked at that Community Ecosystem map from the vantage point of an atmospheric website, the 100 people in <code>Reg&apos;s</code> people graph are just the beginning. Zooming further out I&apos;d be seeing hundreds of people from dozens of other mission-aligned orgs like <a href="https://www.framtiden.no/en">Future in our Hands</a>, <a href="https://attac.no/">Attac</a> and <a href="https://www.rethinkingeconomics.no/">Rethinking Economics</a>.</p><p>Among them would be people like <a href="https://regenerativfremtid.no/profil/827a8afc-9af2-4320-9e4a-c4b097826fe9">Ellen</a> and <a href="https://regenerativfremtid.no/profil/2f78c94b-88ac-40de-92b7-a9cc537015eb">Jan Walter</a>, two fellow advocates of democratic company models that I met last year essentially by word-of-mouth. If our networks served organizers instead of advertisers, perhaps we would have connected a whole year earlier?</p><h3 id="one-stop-shop">One-stop shop</h3><p>This is all possible right now with applications built on the AT protocol. They just haven&apos;t been glued together into a cohesive &apos;website generator&apos; experience quite yet.</p><p>An experienced web developer could remake <code>regenerativfremtid.no</code> as an atmospherically connected website in a matter of days, but it would lack the administrative user-interface Idun the organizer requires to have agency in her own website.</p><p>As of today the closest thing we&apos;ve got is probably the widgets-based website generator called <a href="https://blento.app/">blento</a>. It&apos;s not meant to be an advanced CMS like WordPress, but it effectively demonstrates how all sorts of different web apps in the atmosphere can be remixed together as building blocks of an independent website.</p><p><a href="https://atmo.rsvp/">atmos.rsvp</a> for events, <a href="https://semble.so/">semble.so</a> for links, <a href="https://sifa.id" rel="noreferrer">sifa.id</a> for professional profiles, <a href="https://leaflet.pub/">leaflet.pub</a> for blogging, <a href="https://roomy.space" rel="noreferrer">roomy.space</a> for group chats and on and on and on, all enmeshed with the connective tissue of a collaborative hivemind.</p><h2 id="organization-as-destination">Organization as destination</h2><p>If non-profits, unions and activist groups want to reclaim their digital agency they must participate more intentionally in digital space-making on the Open Social Web.</p><p>Organizations can be more than participants in the atmosphere, they can be many people&apos;s initiation into it.</p><p>We&apos;ve been focusing on the AT protocol as a standardized social-media signal so websites can talk to each other. The other groundbreaking affordance of this protocol is the standardization of identity and its accompanying data.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.muni.town/personal-data-storage-idea/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Personal data storage is an idea whose time has come</div><div class="kg-bookmark-description">Data Ownership as a conversation changes when data resides primarily with people-governed institutions rather than corporations.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.muni.town/favicon.ico" alt="On-protocol Organizing"><span class="kg-bookmark-author">Muni Blog</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.muni.town/content/images/2025/10/IMG_2984.png" alt="On-protocol Organizing"></div></a></figure><p>AT protocol decouples your personal data, including your identity, from the platforms that use it. Platforms can and often will host the data of their users as the easy default, but it&apos;s not locked in place.</p><p>Years ago when I first signed up to the <a href="https://bsky.social/about">Bluesky</a> microblogging platform my data storage silently defaulted to their servers. But now, after a painless transfer a month ago, my data is hosted in Europe by the non-profit institution <a href="https://www.eurosky.tech/">Eurosky</a>. Bluesky&apos;s access to my data is now mediated through a European data-steward, under the jurisdiction of EU regulations.</p><p>Herein lies an incredible opportunity for organizations. Trustworthy institutions like Eurosky provide openly available infrastructure for personal data storage. Building on top of this foundation, organizations can themselves become regional <em>micro-platforms</em>.</p><h3 id="web-of-organizations">Web of organizations</h3><p>Many people nowadays are in the process of getting off the internet entirely, and while I think reaquainting onself with life offline is an excellent idea, giving up on the internet entirely would relinquish its immense organizational power to the very corporations that make it so unlivable.</p><p>What if people&apos;s re-entry into the digital sphere was mediated by the local-area organizations that represent the best of human nature?</p><p>Another one of the AT protocol&apos;s standardizations is to designate <a href="https://internethandle.org/">usernames as web domains</a>, so as you surf the network you&apos;ll come across names like <a href="https://erlend.sh/">@erlend.sh</a>, <a href="https://anirudh.fi/">@anirudh.fi</a>, <a href="https://bsky.app/profile/tessa.germnetwork.com">@tessa.germnetwork.com&#x202C;</a>, <a href="https://bsky.app/profile/mosh.bsky.social">@mosh.bsky.social</a> and <a href="https://bsky.app/profile/gordon.bsky.social">@gordon.bsky.social</a>.</p><p>That is the username they use to log into a <a href="https://techcrunch.com/2025/06/13/beyond-bluesky-these-are-the-apps-building-social-experiences-on-the-at-protocol/">multitude of AT-powered applications.</a></p><p>As I continue traversing through the atmosphere I&apos;d like to start seeing activity from names like  <code>idun.regenerativfremtid.no</code>, <code>trude.framtiden.no</code>, <code>einar.framtiden.no</code>, <code>diego.attac.no</code> and <code>ylva.nu.no</code> as a result of activists choosing to register their first AT profile through their favorite organization, much like professors using their university-provided email address as their public means of contact.</p><p>Remember, the burden of data integrity and service availability rests with infrastructure providers like Eurosky. Organizations merely provide the entryway into the network, and a sense of place and belonging within it. Like the location of your data, this domain-affiliation is not fixed in place, but whichever domain-name you land on first will typically last a long time, all the while advertising that organisation&apos;s existence to your peers.</p><p>Once someone has signed up on <code>regenerativfremtid.no</code> they can be logged into any other atmospheric org-site with a single button-click. Every participating organization becomes an onboarding mechanism for the entire organization-verse of interoperating websites.</p><h3 id="linkedin-for-activists">LinkedIn for activists</h3><p>In one final exercise of the imagination, think back to that Ecosystem Map. But instead of the localized view of one specific organization it&apos;s a comprehensive index of all organizations in a large region, like a whole nation.</p><p>For Norway, <a href="https://frivillig.no/">frivillig.no</a> is that index. It&apos;s an excellent service, listing thousands of organizations and their respective jobs-to-be-done.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.muni.town/content/images/2026/03/frivillig-index.png" class="kg-image" alt="On-protocol Organizing" loading="lazy" width="1676" height="897" srcset="https://blog.muni.town/content/images/size/w600/2026/03/frivillig-index.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/frivillig-index.png 1000w, https://blog.muni.town/content/images/size/w1600/2026/03/frivillig-index.png 1600w, https://blog.muni.town/content/images/2026/03/frivillig-index.png 1676w" sizes="(min-width: 1200px) 1200px"></figure><p>Yet even though it supports user registrations, it&apos;s not yet a <em>network.</em> It doesn&apos;t actively make connections between orgs and people. It acts as a mere jump-off point when it could be a foundational <em>destination</em>; a central hub for all volunteers, organizers and activists in Norway.</p><p>Whether you start your organizer&apos;s identity there (<code>erlend.frivillig.no</code>) or activate it by logging in with an existing account (<code>erlend.attac.no</code>), this could be the place where all your organizational engagements in Norway are recorded.</p><p>Here&apos;s an example activity graph from <a href="https://sifa.id/find-people">sifa.id</a>, an AT-based competitor to LinkedIn just a few weeks old:</p><figure class="kg-card kg-image-card"><img src="https://blog.muni.town/content/images/2026/03/atproto-activities-1.png" class="kg-image" alt="On-protocol Organizing" loading="lazy" width="1042" height="504" srcset="https://blog.muni.town/content/images/size/w600/2026/03/atproto-activities-1.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/atproto-activities-1.png 1000w, https://blog.muni.town/content/images/2026/03/atproto-activities-1.png 1042w" sizes="(min-width: 720px) 720px"></figure><p>Imagine this in your profile on <code>frivillig.no</code>, except the &apos;platforms&apos; it reflects activity from are organizations, not consumer apps. The reusable components necessary to build this with ease are already being made, they just need to be re-contextualized.</p><p>This profile would log the various events and projects you&apos;ve been involved with as an activist in Norway. Only what you&apos;ve opted to share publicly of course, but the more public our engagement the greater our connection to common cause, facilitated by a pro-social network owned by noone.</p><h2 id="make-it-real">Make it real</h2><p>Transitioning thousands of inert legacy websites to the atmospheric way of interbeing is no small feat, but it is eminently possible and absolutely necessary for our digital liberty.</p><p>Each one of these sites was built on familiar and interchangeable building blocks. All any webmaster needs to do is swap out their site&apos;s account management component with a ready-made replacement based on the <a href="https://atproto.com/">AT protocol</a>.</p><p>Helping hands are well within reach. There are thousands of AT-pilled developers out there right now looking for something meaningful to do on the Open Social Web. A whopping 300 of them are meeting in-person this week for <a href="https://atmosphereconf.org/">AtmosphereConf</a> in Vancouver.</p><p>If you&apos;re an organizer, <a href="https://erlend.sh/contact" rel="noreferrer">reach out</a> to whichever one of us is closest to you, or just ask me to play matchmaker and I&apos;ll get you connected.</p><p>We can have the more beautiful web our hearts know is possible, but we have to <a href="https://www.citationneeded.news/fighting-for-our-web/">fight for it</a>, technologists and community leaders in unbeatable union.</p>]]></content:encoded></item><item><title><![CDATA[Roomy Events, by OpenMeet]]></title><description><![CDATA[<p>While Roomy is now <a href="https://roomy.space/roomy.space">quitely operational</a> with a growing handful of pilot spaces, before we make a grander reveal about that particular milestone we have another exciting <em>Report from the Atmosphere</em> to share in the meantime.</p><h3 id="events-for-organizing">Events for organizing</h3><p>Events planning is an essential affordance in the world of organizing,</p>]]></description><link>https://blog.muni.town/roomy-events-via-openmeet/</link><guid isPermaLink="false">69a86e59b09c5bed5bd32939</guid><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Thu, 05 Mar 2026 12:22:08 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-05-131408.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-05-131408.png" alt="Roomy Events, by OpenMeet"><p>While Roomy is now <a href="https://roomy.space/roomy.space">quitely operational</a> with a growing handful of pilot spaces, before we make a grander reveal about that particular milestone we have another exciting <em>Report from the Atmosphere</em> to share in the meantime.</p><h3 id="events-for-organizing">Events for organizing</h3><p>Events planning is an essential affordance in the world of organizing, especially for local groups trying to coordinate physical meetups. This is urgently needed now that <a href="https://web.archive.org/web/20260206211152/https://acter.global/" rel="nofollow">acter.global</a>, a comms app specifically for organizers, has shut down. </p><figure class="kg-card kg-image-card"><img src="https://blog.muni.town/content/images/2026/03/acter-events.jpeg" class="kg-image" alt="Roomy Events, by OpenMeet" loading="lazy" width="1668" height="2012" srcset="https://blog.muni.town/content/images/size/w600/2026/03/acter-events.jpeg 600w, https://blog.muni.town/content/images/size/w1000/2026/03/acter-events.jpeg 1000w, https://blog.muni.town/content/images/size/w1600/2026/03/acter-events.jpeg 1600w, https://blog.muni.town/content/images/2026/03/acter-events.jpeg 1668w" sizes="(min-width: 720px) 720px"></figure><p>Open-web replacements are needed!</p><p>If we had to implement events on our own in Roomy it would&apos;ve taken precious attention away from our ongoing work to stabilize and polish the app. This is where the magic of being an <em>atmospheric application</em> comes in.</p><p>Two weeks ago, amped up by Mosh&apos;s impassioned call to <a href="https://mosh.leaflet.pub/3me5e6vqtkc2u">build for organizers</a>, I reached out to Tom, the maker of <a href="https://openmeet.net/">OpenMeet</a></p><p>The plan was simple: Since both our apps are based on atproto identities, Roomy should be able to outsource its &#x2018;events api&#x2019; to OpenMeet, and eventually any other Open Social events platforms like <a href="https://smokesignal.events/">Smokesignal</a> and <a href="https://dandelion.events/">Dandelion</a>.</p><p>So instead of reinventing the wheel we&apos;ve partnered with Tom for an app-mashup. For every space in Roomy, we wanna have an &#x2018;Events&#x2019; extension (openmeet-api+roomy-ui) that can be enabled on demand.</p><p>With that <a href="https://github.com/muni-town/roomy/issues/575">rudimentary spec</a>, Tom <em>got to work</em>. Seriously, if you get a chance to collab with this guy, you&apos;re in luck!</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-04-191153.png" width="1815" height="953" loading="lazy" alt="Roomy Events, by OpenMeet" srcset="https://blog.muni.town/content/images/size/w600/2026/03/Skjermbilde-2026-03-04-191153.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/Skjermbilde-2026-03-04-191153.png 1000w, https://blog.muni.town/content/images/size/w1600/2026/03/Skjermbilde-2026-03-04-191153.png 1600w, https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-04-191153.png 1815w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-04-191225.png" width="1811" height="953" loading="lazy" alt="Roomy Events, by OpenMeet" srcset="https://blog.muni.town/content/images/size/w600/2026/03/Skjermbilde-2026-03-04-191225.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/Skjermbilde-2026-03-04-191225.png 1000w, https://blog.muni.town/content/images/size/w1600/2026/03/Skjermbilde-2026-03-04-191225.png 1600w, https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-04-191225.png 1811w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-04-191258.png" width="1812" height="953" loading="lazy" alt="Roomy Events, by OpenMeet" srcset="https://blog.muni.town/content/images/size/w600/2026/03/Skjermbilde-2026-03-04-191258.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/Skjermbilde-2026-03-04-191258.png 1000w, https://blog.muni.town/content/images/size/w1600/2026/03/Skjermbilde-2026-03-04-191258.png 1600w, https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-04-191258.png 1812w" sizes="(min-width: 720px) 720px"></div></div></div></figure><p>A few days later Tom had a prototype going, and last week it was <a href="https://github.com/muni-town/roomy/pull/589">merged</a>.</p><p>And just like that, Roomy&apos;s got Events! &#x1F973;</p><figure class="kg-card kg-image-card kg-width-full kg-card-hascaption"><img src="https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-05-162739.png" class="kg-image" alt="Roomy Events, by OpenMeet" loading="lazy" width="1919" height="1015" srcset="https://blog.muni.town/content/images/size/w600/2026/03/Skjermbilde-2026-03-05-162739.png 600w, https://blog.muni.town/content/images/size/w1000/2026/03/Skjermbilde-2026-03-05-162739.png 1000w, https://blog.muni.town/content/images/size/w1600/2026/03/Skjermbilde-2026-03-05-162739.png 1600w, https://blog.muni.town/content/images/2026/03/Skjermbilde-2026-03-05-162739.png 1919w"><figcaption><span style="white-space: pre-wrap;">Snapshot of </span><a href="https://roomy.space/roomy.space/calendar"><span style="white-space: pre-wrap;">https://roomy.space/roomy.space/calendar</span></a></figcaption></figure><p>The current version works like this:</p><ol><li>First make a Group on OpenMeet and put some events in it.</li><li>Go to the Calendar settings of your Roomy space and paste in that group&apos;s slug.</li><li>A new &apos;Events&apos; tab will have been added to your space, as seen above.</li></ol><p>In this preliminary version you can&apos;t edit events from within Roomy, you can only view them. However if you click on any event from within Roomy that corresponds with an OpenMeet group that you&apos;re an admin of, you&apos;ll be automagically logged into OpenMeet so you can make your edits there without missing a beat.</p><p>For more on that, read Tom&apos;s deep-dive:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://openmeet.net/cross-app-authentication-atproto"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Cross-App Authentication on AT Protocol: How Roomy and OpenMeet Share Identity</div><div class="kg-bookmark-description">The free, open-source alternative to Meetup. Create groups and events for your community &#x2014; no fees, no ads, community-owned forever.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://openmeet.net/_astro/apple-touch-icon.DR2xqhHq.png" alt="Roomy Events, by OpenMeet"><span class="kg-bookmark-author">OpenMeet</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://openmeet.net/_astro/janke-laskowski-rVnPgM31JGw-unsplash.C6G1qS7G_2sUiMV.webp" alt="Roomy Events, by OpenMeet"></div></a></figure><p>What is currently an auth-trust webring of two could probably grow way past that once  the collective UX win is self-evident.</p>]]></content:encoded></item><item><title><![CDATA[Village-scale resilience]]></title><description><![CDATA[The end-of-the-world already happened, it's just not evenly distributed. But with every end is a new beginning.]]></description><link>https://blog.muni.town/village-scale-resilience/</link><guid isPermaLink="false">696d566eb09c5bed5bd323b2</guid><category><![CDATA[Vision]]></category><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Fri, 30 Jan 2026 13:31:15 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2026/01/morro_das_cores_by_gabmonteiro9389_d8cqu75.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2026/01/morro_das_cores_by_gabmonteiro9389_d8cqu75.jpg" alt="Village-scale resilience"><p>Roomy - our <a href="https://blog.muni.town/chatty-community-gardens/">digital community garden for knowledge cultivation</a> - has taken a long time to <em>get right</em>. Long enough that some people lost faith in us along the way, and that&apos;s fair. We&apos;ll try our best to earn it back.</p><p>A year ago we already had something that worked. Roughly every two months since then we have scrapped what we had and started anew. Never from scratch; we always kept the best bits around, and they&apos;ve compounded. But new enough that there was no continuity of service. Never something stable enough to start hosting <em>real, </em>living community spaces.</p><p>Our <a href="https://news.atmosphereconf.org/3mdm4s4psws2a" rel="noreferrer">partnership with ATmosphereConf</a> marks the beginning of this continuity. No more do-overs. We have a real (pro-bono) <em>customer-relationship</em> to maintain now. The first of many. This changes our mode of development from being architecture-oriented to solutions-oriented. But having taken our time with the former is what will enable us to shine in the latter.</p><p>So as we reorient ourselves from the proactive to the reactive, I&apos;d like to linger in this liminal space for just a moment longer and reflect on why this thing took all the time it&apos;s taken, and what makes me confident it was worth it.</p><h2 id="local-first-problems"><strong>Local-first problems</strong></h2><p>The majority of what I&apos;ll for simplicity&apos;s sake call the Western-World-of-netizens would&apos;ve been plenty satisfied by a regular server-centric <a href="https://blog.muni.town/beyond-discord/">alternative to Discord</a> or Facebook Groups, so long as it was open software and <a href="https://www.wired.com/story/big-interview-jay-graber-bluesky/">connected to the Atmosphere</a> to resolve the cold-start problem of making a new social network.</p><p>I&apos;m one of those westerners, and I designed and founded Roomy to scratch my own itch as an indie game developer and open source organizer.</p><p>But from the very beginning, Roomy was also designed for someone else. Someone with materially different needs than me.</p><blockquote>Over a decade ago I embarked on a journey to <a href="https://en.wikipedia.org/wiki/Rashidieh"><u>Rashidieh</u></a>, a mixed but primarily Palestinian refugee camp in southern Lebanon. I spent three months there as a volunteering youth envoy of &#x2018;<a href="https://palestinakomiteen.no/"><u>Palestinakomiteen i Norge</u></a>&#x2019; together with the close friend who had invited me along.<br><br>Though it&#x2019;s referred to as a &#x2018;camp&#x2019;, Rashidieh is a dense city of brick &amp; cement, housing over 30,000 people. It&apos;s the same size as <a href="https://no.wikipedia.org/wiki/Molde"><u>Molde</u></a>, the biggest city an hour away from my tiny home town. Established in 1936, Rashidieh camp is nearly a <em>century</em> old. As such it is an unusual place with its own flow of time.<br><br>I had done this type of longer-term stay abroad a handful times before; a rare privilege afforded to me as a worldly Norwegian citizen. And while I do believe in the genuine altruism of myself and others, these journeys have always been for a selfish reason at heart. An escape; a search.<br><br>This time I was searching for meaning in the wake of my mother&#x2019;s passing a year prior. In the village-community of Rashidieh I was met with heartfelt compassion from people for whom the loss of family members &#x2013; whole families even &#x2013; was a brutally regular occurrence of life. There was no comparing my bereavement to theirs, yet we grieved together all the same, and in that grief we were equals.</blockquote><p><em>Excerpted from &apos;</em><a href="https://blog.erlend.sh/too-late"><em>Too late</em></a><em>&apos;, 12. October 2024</em></p><p>One of the most extraordinary things about communities forced to persevere in extreme living conditions is that they develop bespoke technologies strictly for on-the-ground problems. Out of pure necessity their technological sophistication will in some cases far exceed the stagnant status quo of the so-called Developed World.</p><p>Rashidieh is more connected than you might imagine a &quot;refugee camp&quot; to be. Lots of people have mobile phones, and there are quite a few houses with internet-connected wifi routers as well. Still, connectivity remains a luxury. Village-wide disconnections can be caused by anything ranging from accidental power outages to intentional disruptions by oppressive authorities, both domestic and <a href="https://blog.erlend.sh/too-late">foreign</a>.</p><p>My time in Rashidieh was spent (alongside my friend) together with a small family: A mom, a dad and their son. The son was a computer-person. And being the friendly neighborhood supergeek, he was regularly downloading <a href="https://internet-in-a-box.org/">the Internet in a Box</a> and serving it back out to his local-area community via his residential wifi. That way even if they lost access to the outside world for a bit, the locals of Rashidieh could still head over to Muhammad&apos;s for the most recent <em>download of everything</em>.</p><p>The will and skill is there. All they need is the <a href="https://en.wikipedia.org/wiki/Appropriate_technology">appropriate toolkit</a> suited to their conditions. Given a robustly designed Community in a Box, the residents of Rashidieh could autonomously maintain a local-area communications network independent of a higher authority. Whenever Rashidieh temporarily loses its connection to the internet they would only be out of reach to the outside world, but not to each other.</p><h2 id="planet-scale-solutions">Planet-scale solutions</h2><p>So what does a rural refugee camp in Lebanon have to do with us Westerners?</p><p>You know what happens if I lose internet connectivity here in the fancy capital of Norway, Oslo? I&apos;m completely f***ed is what happens. Local-area redundancy networks and backup caches? We have no such thing. <em>No need! We&apos;ll always be connected, we&apos;re a Developed Country.</em></p><p>Yet it&apos;s not that long ago since Portugal had a near nation-wide outage, and even though people still had their satellite-phones as a fallback the comms grid was heavily overburdened and unreliable in that time of &quot;inconceivable crisis&quot;.</p><p>The closer you look at our digital infrastructure the more you realize it&apos;s all hanging by a thread, and it only takes Vlad and Daffodil on opposite sides of the earth to both get sick on the same day for the whole grid to come crashing down.</p><p>Our uninterrupted high-speed connectivity is contingent on an <a href="https://www.thegreatsimplification.com/">energy-blind</a>, self-terminating economy of hyperconsumption. Modern technology and its comforts is premised on the perpetual-growth machinery that has pushed us past our planetary boundary many times over, all whilst transferring wealth upwards.</p><p>Most of us may not feel the oppressive thumb of authority pressing down on us as keenly as my friends in Rashidieh do, but it&apos;s on our necks just the same. Every essential layer of our <a href="https://berjon.com/infrastructure-shock/">digital infrastructure</a> is chiefly owned, operated and controlled by a stack of oligarchic companies in varying degrees of partnership with the state they&apos;re holding hostage.</p><h2 id="systemic-collapse-is-everywhere">Systemic collapse is everywhere</h2><p><em>The end of the world is already here, it&apos;s just not evenly distributed. </em></p><p>Sounds like a nihilistic spin on <a href="https://en.wikipedia.org/wiki/William_Gibson#Visionary_influence_and_prescience">William Gibson&#x2019;s famous quote</a>, but what I&apos;m saying is a lot of people have already experienced their whole world crumbling and somehow they came out at the other end still standing.</p><p>Low-bandwidth, intermittent, lo-fi tech that&apos;s peer-to-peer connected, distributed via bluetooth <a href="https://en.wikipedia.org/wiki/Mesh_networking">mesh networks</a> and pirate wifi antennas, appears utterly irrelevant until it&apos;s suddenly a matter of life and death.</p><p>In Iran, a place no stranger to societal whiplash, <a href="https://briarproject.org/">Briar</a> is keeping people connected at a desperate time when mainstream alternatives are failing them.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://byteiota.com/briar-offline-mesh-when-internet-shutdowns-cut-85m-off/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Briar Offline Mesh: When Internet Shutdowns Cut 85M Off | byteiota</div><div class="kg-bookmark-description">From Bits to Bytes</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://byteiota.com/wp-content/uploads/2021/04/cropped-favicon-white-270x270.png" alt="Village-scale resilience"><span class="kg-bookmark-author">byteiota</span><span class="kg-bookmark-publisher">ByteBot</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://byteiota.com/wp-content/uploads/2026/01/briar-offline-mesh-networking.jpg" alt="Village-scale resilience"></div></a></figure><p>The vibe-coded but demonstrably <em>good enough</em> <a href="https://bitchat.free/">Bitchat</a> is topping the appstore charts in Uganda (turbulent elections) and <a href="https://www.gadgets360.com/cryptocurrency/news/bitchat-becomes-jamaica-s-go-to-app-as-hurricane-melissa-cripples-communication-crypto-news-cryptocurrency-9546453">Jamaica</a> (natural disaster).</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.archyde.com/bitchat-surges-to-1-in-uganda-amid-pre-election-internet-shutdown/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Bitchat Surges to #1 in Uganda Amid Pre&#x2011;Election Internet Shutdown &#x2013; Archyde</div><div class="kg-bookmark-description">%</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://t0.gstatic.com/faviconV2?client=SOCIAL&amp;type=FAVICON&amp;fallback_opts=TYPE,SIZE,URL&amp;url=https://www.archyde.com/bitchat-surges-to-1-in-uganda-amid-pre-election-internet-shutdown/&amp;size=128" alt="Village-scale resilience"><span class="kg-bookmark-author">Archyde</span><span class="kg-bookmark-publisher">by</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://i.gzn.jp/img/2026/01/16/bitchat-in-uganda/00.jpg" alt="Village-scale resilience"></div></a></figure><p>A year ago it must still have seemed implausible for the USA communications grid to be turned adversarially against its own populace. Not so much any longer.</p><p>We all need connective tech that isn&apos;t dependent on centralized authorities and middlemen. We all need tech that&apos;s rooted in place, effective at the scale of 1 and up. And we all need tech that exists to everyone&apos;s proportional benefit, not an elite few.</p><p>Much like the <a href="https://en.wikipedia.org/wiki/Curb_cut_effect">curb-cut effect</a> showing how universal design starting from the needs of the marginalized benefits everyone, the necessary affordances of a liberatory technology are largely the same no matter what part of the planet you&apos;re living on.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.muni.town/content/images/2026/01/sketchplanations-the-curb-cut-effect.png" class="kg-image" alt="Village-scale resilience" loading="lazy" width="2000" height="1695" srcset="https://blog.muni.town/content/images/size/w600/2026/01/sketchplanations-the-curb-cut-effect.png 600w, https://blog.muni.town/content/images/size/w1000/2026/01/sketchplanations-the-curb-cut-effect.png 1000w, https://blog.muni.town/content/images/size/w1600/2026/01/sketchplanations-the-curb-cut-effect.png 1600w, https://blog.muni.town/content/images/size/w2400/2026/01/sketchplanations-the-curb-cut-effect.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">The </span><a href="https://en.wikipedia.org/wiki/Curb_cut_effect" rel="noreferrer"><span style="white-space: pre-wrap;">curb-cut effect</span></a><span style="white-space: pre-wrap;">t, illustrated by </span><a href="https://sketchplanations.com/the-curb-cut-effect" rel="noreferrer"><span style="white-space: pre-wrap;">sketchplanations.com</span></a></figcaption></figure><h2 id="designing-for-interbeing">Designing for interbeing</h2><p>Unlike Briar and Bitchat (unaudited), Roomy is not security-first but rather community-first.</p><p>Your local libraries and community gardens optimize for accessibility, not defensibility. So too with the type of space-making Roomy exists to facilitate.</p><p>Briar is part of the medicinal treatment of a sick democracy; Roomy is preventive care. Though conversely, I can&#x2019;t think of many things more aggressively anti-fascist than massive crowds of diverse people congregating in shared, loving spaces.</p><p>We need both secure and accessible means of social congregation, and they&apos;re by no means mutually exclusive. But businesses want intranets and nerds wanna hack on cryptographic locks, leaving scarcely any money and attention left for <a href="https://blog.erlend.sh/cozy-community-software">cozy open-access spaces</a> on the web.</p><p>That needs amending, we thought, so we built Roomy with a really solid foundation for locally adapted, decentralised, malleable communications that is sufficiently performant for users today. It can&apos;t do the fanciest p2p mesh-net stuff yet, but we are <a href="https://blog.muni.town/leaf-0-3-the-server-behind-roomy/">architecturally prepared and pointed</a> towards that eventuality.</p><p>We&apos;re an idealistic bunch, but the best way to build a local-first app is to first build any kind of app commercially successful enough to sustain its ongoing development.</p><p>In the meantime we have already achieved cloud-independence by participating in the <a href="https://www.pfrazee.com/blog/atmospheric-computing">Atmospheric Computing</a> movement as an <a href="https://overreacted.io/open-social/">Open Social</a> application with sufficiently <a href="https://blog.muni.town/personal-data-storage-idea/">self-sovereign data storage</a>.</p><p>The <a href="https://atproto.com/">AT Protocol</a> behind it all <a href="https://arxiv.org/abs/2402.03239">originated</a> from many of the same peer-to-peer ideals mentioned herein, but the best way to make an impact with their flagship app Bluesky was to build a widely accessible web app.</p><p>We like that strategy and are following suit to complement their networked feeds for mobilization with our intertwined spaces for organisation.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.muni.town/digital-strategy-for-orgs/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Digital Strategy for Organisations</div><div class="kg-bookmark-description">Digital power is created through the interplay of mobilizing and organizing. Open Social protocols bridge the gap.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.muni.town/favicon.ico" alt="Village-scale resilience"><span class="kg-bookmark-author">Muni Blog</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.muni.town/content/images/2025/11/one_moment_journey_by_eugene_siryk_d85cflb.png" alt="Village-scale resilience"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Leaf 0.3 - The Server Behind Roomy]]></title><description><![CDATA[For the last couple months we've been iterating on Roomy with its brand-new architecture, and we're finally ready to talk in more detail about the not-so-secret sauce that will power Roomy moving forward.]]></description><link>https://blog.muni.town/leaf-0-3-the-server-behind-roomy/</link><guid isPermaLink="false">69321553b09c5bed5bd31cf9</guid><category><![CDATA[Roomy]]></category><category><![CDATA[Leaf]]></category><dc:creator><![CDATA[Zicklag]]></dc:creator><pubDate>Wed, 10 Dec 2025 18:07:06 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/12/Ailes_battantes_Luc_Viatour.webp" medium="image"/><content:encoded><![CDATA[<blockquote>
<img src="https://blog.muni.town/content/images/2025/12/Ailes_battantes_Luc_Viatour.webp" alt="Leaf 0.3 - The Server Behind Roomy"><p>If you want some more history on the designs that came before this one definitely read <a href="https://blog.muni.town/brief-history-of-roomy-architectures/">A Brief History of Roomy&apos;s Architectures</a>. We&apos;ve written in the past about using tech like Keyhive, Jazz, and Willow, but the latest design doesn&apos;t use any of those for now.</p>
</blockquote>
<h3 id="the-core-components">The Core Components</h3>
<p><img src="https://blog.muni.town/content/images/2025/12/three-components.excalidraw-1.png" alt="Leaf 0.3 - The Server Behind Roomy" loading="lazy"></p>
<p>There are three major components to Roomy: the <strong>Roomy Web App</strong>, the <strong>ATProto PDS</strong>, and the <strong>Leaf Server</strong>.</p>
<h3 id="the-leaf-server">The Leaf Server</h3>
<p>The Leaf Server provides storage and realtime sync for Roomy, but it is actually application agnostic: it has no Roomy-specific code in it.</p>
<p>Instead, the server hosts user-defined &quot;modules&quot; that allow you to customize the way that the server handles data for a particular &quot;stream&quot;. It&apos;s almost like an opinionated kind of <a href="https://en.wikipedia.org/wiki/Platform_as_a_service">PaaS</a> designed specifically for <a href="https://docs.livestore.dev/evaluation/how-livestore-works/#event-sourcing">Event Sourcing</a> ( more on that later ).</p>
<p>This is very useful for Roomy because modules can be upgraded by the app without requiring any infrastructure changes. This will make it easier for us add new features to Roomy and try new things out, without having a lot of work to keep the server deployment and the app in sync with each-other.</p>
<p>The server is also very lightweight easy to self-host.</p>
<!--

> **Historical Note:** The Leaf server is the latest manifestation of what, over the last 2 years, we have been calling the _Leaf Protocol_. For now, Leaf isn't as much a protocol as it is a server and some conventions, but it might still mature into a protocol or otherwise turn into some kind of framework. We're going to feel it out as we use it for Roomy, and hopefully other apps, too.


-->
<h3 id="off-protocol">Off Protocol</h3>
<charlie-quote>
<p>But if all the data is stored on the Leaf Server, how does ATProto come into play? It sounds like Roomy is <strong>off-protocol</strong>. &#x1F440;</p>
</charlie-quote>
<p>Oh, hey Charlie! It&apos;s <a href="https://blog.muni.town/atproto-isnt-what-you-think/">been a while</a>. That&apos;s a good question! In short, yes, Roomy&apos;s data is off-protocol.</p>
<p>In Roomy, ATProto is used primarily for authentication and for integrations with other ATProto apps such as <a href="https://bsky.social/about">Bluesky</a>, <a href="https://smokesignal.events/">Smoke Signal</a>, <a href="https://stream.place/">Streamplace</a>, <a href="https://semble.so/">Semble</a>, and more.</p>
<p>Auth is a really important one because it gives you an experience similar to the ubiquitous &quot;Login with Google&quot; button, but one that still allows you to host your own identity server.</p>
<charlie-quote>
<p>Ah, yeah, we talked about the importance of <a href="https://blog.muni.town/atproto-isnt-what-you-think#identity">ATProto&apos;s identity integration</a> earlier.</p>
</charlie-quote>
<p>Yep. And while there are absolutely good reasons to use the PDS for storage, we have some technical problems with using it as the official store.</p>
<h4 id="private-data">Private Data</h4>
<p>The first one is that all data on the PDS is public. There&apos;s no way for us to store, for example, chat messages that are sent in a private channel without encrypting it, and publicly distributing encrypted data is not a good practice.</p>
<p>There are great efforts underway to solve the private data problem on ATProto, but they usually involve hosting another server as a sidecar similar to what we are doing with the Leaf server anyway.</p>
<p>Even Bluesky&apos;s DMs, and Leaflet&apos;s drafts have to be implemented off-protocol.</p>
<h4 id="many-tiny-realtime-events">Many, Tiny, Realtime Events</h4>
<p>The other issue is that the PDS isn&apos;t necessarily design for streaming lots of small events like chat messages. There are rate limits on writes to the PDS, and the firehose isn&apos;t low-enough latency to use for chat synchronization.</p>
<h4 id="private-data-notifications">Private Data + Notifications</h4>
<p>Even if we had a way to store private data on the PDS, if you treat the PDS as the source of truth then your app has to have a way to know when the user changes without using your app.</p>
<p>Right now the firehose is used to notify apps about these kinds of changes, but that doesn&apos;t work for private data. There is another layer here that needs to be solved for, in addition to just being able to <em>store</em> private data.</p>
<h4 id="local-first-synchronization">Local First Synchronization</h4>
<p>While not working yet, one of our big long-term goals is to have Roomy&apos;s data work in a local-first context. You should be able to edit your own data ( which may include far more chat messages ) offline, and sync it with other devices or peers, without a central server.</p>
<p>Depending on ATProto as our canonical data source makes this a lot more difficult manage.</p>
<h4 id="what-if-we-dont-want-to-require-an-atproto-pds">What If We Don&apos;t Want to Require an ATProto PDS?</h4>
<p>This might be controversial in the ATProto community, but what if we want to let you use Roomy without a PDS? If we already have to implement our own streaming system, our own database to index messages, our own way to query all of those messages in our app, and finally have a way to sync it without servers, then there isn&apos;t much the PDS is providing for us anymore. The biggest thing the PDS is providing is a standardized way for users to access their data.</p>
<p>The data access advantage can be preserved by having Roomy do semi-realtime backups of all of your chats to your PDS, in bundles so that we don&apos;t have to worry about rate limiting. Note that this unfortunately only works for <em>public</em> chat messages.</p>
<p>Additionally, auth on Leaf server is quite easy to extend to allow other options such as login with Mastodon or OIDC or <a href="https://indieauth.net/">IndieAuth</a>, and in fact we plan on experimenting with that once Roomy gets more stable.</p>
<p>Being able to function without a PDS feels like an important way to future proof Roomy by focusing on what it actually needs to do its job. While logging into Roomy without a PDS would probably mean you can&apos;t use ATProto integrations, maybe logging into Roomy with Mastodon or other services could give you different integrations.</p>
<p>We aren&apos;t sure how things will develop, but we feel good about our ability to fit into different scenarios and we aren&apos;t ruling anything out.</p>
<h3 id="what-is-on-the-pds">What Is on the PDS?</h3>
<charlie-quote>
<p>So do you store <em>anything</em> on the PDS?</p>
</charlie-quote>
<p>There&apos;s a small handful of things we store on the PDS right now:</p>
<p><strong>Public uploads</strong> are stored on the PDS. Later we will add a way to store uploads on the Leaf server so that we can support private uploads.</p>
<p><strong>Roomy space handle verifications</strong> are stored on the PDS. This is a record that goes on your PDS when you want to use your ATProto handle as the handle for a space. It lets us look up a Roomy Space ID by using your ATProto handle. We&apos;re not sure whether these records will be used long-term.</p>
<p>Finally, as mentioned above, biggest thing that we want to be able to put on your PDS is <strong>continuous backups of your Roomy data</strong>. Unfortunately we still can&apos;t backup private data to your PDS, so this will remain limited to public data.</p>
<h3 id="data-ownership-migration">Data Ownership &amp; Migration</h3>
<charlie-quote>
<p>OK, but if all of my chat data is stored on the Leaf Server, then how do I have ownership of my data? Having backups of public data helps a little bit, but what about private data? What makes Roomy any different other cloud apps in terms of data ownership?</p>
</charlie-quote>
<p>If we look at the PDS as an example, I think the import &quot;data ownership&quot; features are:</p>
<ul>
<li>The PDS can be self-hosted or hosted by a provider,</li>
<li>You can migrate your PDS hosting between providers,</li>
<li>There is an API that you can use to access all the data on your PDS.</li>
</ul>
<p>The Leaf server provides all of these same features very much like the PDS does, but with a different API.</p>
<p>It&apos;s really like a different kind of PDS, as I wrote <a href="https://leaflet.roomy.space/the-case-for-universal-login-and-off-protocol-services">more thoughts</a> on recently.</p>
<charlie-quote>
<p>But just because you <em>have</em> an API doesn&apos;t mean that there&apos;s any way for normal people to <em>use</em> it. An API alone isn&apos;t enough to provide credible exit.</p>
</charlie-quote>
<p>That&apos;s an excellent point! We will be providing tools to use the API, similar to tools that already exist for the PDS. But community is important, too. It&apos;s best if we aren&apos;t the only providers of credible exit features, but that is something that will take time to grow.</p>
<h2 id="how-does-it-work">How Does It Work?</h2>
<charlie-quote>
<p>Let&apos;s get to the tech details already! What are <strong>modules</strong> and <strong>streams</strong>, and how does Leaf act like a <strong>PaaS</strong>?</p>
</charlie-quote>
<h3 id="streams">Streams</h3>
<p>Almost all data on the Leaf server exists in a stream, and it is similar in purpose to a <a href="https://atproto.com/specs/repository">repo</a> in ATProto.</p>
<p>Unlike user repos in ATProto, Leaf streams are often for <em>communitites</em>, not just individuals. In Roomy, streams represent spaces, similar to Discord guilds, and they allow controlled write and read access from multiple user accounts.</p>
<p>As fellow Roomy developer <a href="https://meri.garden">@meri.garden</a> put it: <em>Leaf as a <strong>multi-player</strong> PDS</em>.</p>
<h4 id="stream-identifiers">Stream Identifiers</h4>
<p>DIDs are used for stream IDs, just like they are used for ATProto accounts. When you create a new stream, it will create a new DID and publish it to <a href="https://plc.directory">plc.directory</a>. The creator of a stream can add additional rotation keys to the DID that can be used to migrate the stream to a different Leaf server, for example, if the Leaf server goes rogue or you just want to switch hosting providers.</p>
<p>This allows different streams to be hosted on different Leaf servers, and could be used, for example, to self host Roomy space on your own server.</p>
<p>In the future we can add support for other DID methods like DID web.</p>
<h4 id="stream-data-model">Stream Data Model</h4>
<p>All the data in the stream is represented by <strong>events</strong>.</p>
<p>Each event has a very simple data model:</p>
<ul>
<li><strong>Index:</strong> The index of the event in the stream. This is just a number that increments for every event that gets sent into the stream.</li>
<li><strong>User:</strong> The DID of the account that submitted the event to the stream.</li>
<li><strong>Payload:</strong> A binary array containing the event data.</li>
</ul>
<p>The Leaf server doesn&apos;t really care about what data goes into the events, so the payload could be JSON or CBOR or any other binary or text format.</p>
<p>This list of events is stored in a separate SQLite database for each stream.</p>
<h3 id="modules">Modules</h3>
<p>Modules are the customizable <em>logic</em> of streams and they are responsible for authorization and aggregation.</p>
<h4 id="authorization">Authorization</h4>
<p>Before any event is saved to a stream, the event must be authorized by the stream&apos;s module.</p>
<p>Additionally, the only way to get an event <em>out</em> of a stream, is to use a query that is defined by the stream&apos;s module. This allows the module to perform read authorization.</p>
<p>Finally, for every event that passes write authorization, the module may run a &quot;materializer&quot;. This materializer allows the module to cache any info about the event in its own SQLite database.</p>
<p>This database can be used to index events based on things like what channel a chat message was sent in, or what permissions exist for an event. The data can then be used in queries to quickly determine whether or not a user has access to perform the query, and which events should be returned.</p>
<h4 id="aggregation">Aggregation</h4>
<p>The module&apos;s database also naturally allows the server to perform aggregations over the events.</p>
<p>For example, it could use SQLite&apos;s full text search in order to find chat messages based on a search query, or it could keep statistics like when each channel was last updated.</p>
<p>This aggregate data can then be used in queries for clients.</p>
<h4 id="updating-modules">Updating Modules</h4>
<p>While the events in the stream are meant to persist long term, the module and its database can be swapped out as needs change.</p>
<p>For example, if you need to change the way that permissions are applied, you will need to change the module, but the data in the stream shouldn&apos;t change.</p>
<p>When you update the stream&apos;s module, it will re-run the module&apos;s materializer for every event that is already in the stream, allowing the module to index it and re-build any aggregations.</p>
<h4 id="subscriptions">Subscriptions</h4>
<p>Queries defined by the module can also be subscribed to, so that if a new event is added to the stream, the query will be re-run and may return the new event if it matches the query. This allows us to get realtime updates in the app.</p>
<p>In the future, this can be made very performant by using <a href="https://turso.tech/blog/introducing-real-time-data-with-materialized-views-in-turso">Incremental View Maintentance ( IVM ) in Turso</a>. Turso is a rewrite of SQLite in Rust with extra features. It isn&apos;t ready enough for us to use yet, but they&apos;re making great progress and we&apos;re hoping to use it on the Leaf server and in the Roomy app.</p>
<p>For now, re-running queries for subscriptions should still be fast for the most important kinds of queries, which can exclude already sent events by filtering based on event index.</p>
<h4 id="ephemeral-events">Ephemeral Events</h4>
<p>Ephemeral events are a way to send events to the stream that will <strong>not</strong> be persisted to the stream database. This can be used for things like typing indicators and other online &quot;presence&quot; features.</p>
<p>As another layer on top of this, ephemeral events can have their own materializer that allows you to store persisted state for things that will change frequently but that you only care about the latest state of.</p>
<p>For example, the latest message you have read, which is useful for unread notifications, is going to change constantly, but we don&apos;t really need to keep an event history of all the messages you&apos;ve read. An ephemeral event can be used to notify when you read messages, and its materializer can record whichever message you read last, without accumulating events over time.</p>
<h3 id="event-sourcing-the-web-app">Event Sourcing &amp; The Web App</h3>
<p>While not strictly required or enforced, the Leaf server focuses on enabling an <a href="https://docs.livestore.dev/evaluation/how-livestore-works/#event-sourcing">Event Sourcing</a> workflow.</p>
<p>The Roomy app, for example, creates an event for every user interaction. These events are sent to the server, authorized and indexed by the stream module, and then automatically pushed to any client subscriptions that include it.</p>
<p>Roomy will then take that event and run it through its own materializer, finally storing the event data in a SQLite database, with all the indexes needed to efficiently query the data in the UI.</p>
<p>The UI itself uses reactive queries to that SQLite database so that whenever new events come in, the UI will automatically refresh with the latest results.</p>
<p>The whole flow is pictured below:</p>
<a href="https://blog.muni.town/content/images/2025/12/leafServerAndWebApp.excalidraw-3.png">
  <img src="https://blog.muni.town/content/images/2025/12/leafServerAndWebApp.excalidraw-3.png" alt="Leaf 0.3 - The Server Behind Roomy" style="width: 650px; height: auto; margin: auto">
</a>
<charlie-quote>
<p>Wow, that&apos;s... a lot. Is it all really necessary?</p>
</charlie-quote>
<p>It is a lot, but I think it&apos;s the best way to get the data ownership, flexibility, and performance that we need long term.</p>
<p>While it is somewhat complicated, in the end I think it is actually one of the simplest ways to solve all the problems we have run into with Roomy&apos;s architecture so far. Every design decision has been motivated by our actual needs.</p>
<p>I also think that once the patterns have been worked out a bit more and we have some more tooling in place, that the Leaf server could be useful for a lot more than just Roomy.</p>
<p>I think the fact that modules give you the ability to do aggregations of events on the server, similar to a minimal PaaS, could be really handy for some use-cases, especially when combined with the realtime nature of it.</p>
<blockquote>
<p><strong>&#x2139;&#xFE0F; Note:</strong> It&apos;s also possible to skip the event sourcing model for the most part on the client and just have the server aggreate all the interesting data and return those results instead of the events themselves. This is all quite new so there&apos;s a lot of room for exploring different ways to use things.</p>
</blockquote>
<h3 id="how-is-a-module-written">How is a Module Written?</h3>
<charlie-quote>
<p>So how do you write a module? Is it written in JavaScript or WASM or something?</p>
</charlie-quote>
<p>Right now they are actually just written in SQL!</p>
<p>The authorizer, materializer, and queries are all just made out of lists of SQL statements with access to extra SQL functions we&apos;ve defined specifically for helping you write Leaf modules.</p>
<p>For example, a simple SQL authorizer could look like:</p>
<pre><code class="language-sql">select unauthorized(&quot;Only stream owner can add events&quot;)
    where (select creator from stream_info) != (select user from event);
</code></pre>
<p>And a query that only allows the creator of the stream to read its events could look like:</p>
<pre><code class="language-sql">-- Authorize the query
select unauthorized(&apos;only the stream creator can read its events&apos;)
    where $requesting_user != (select creator from stream_info);

-- Return the result
select id, user, payload from events.events
    where id &gt;= $start limit $limit;
</code></pre>
<p>There are some kinds of logic which are either impractical or impossible with SQL, so we are considering allowing you to define custom SQL functions in WASM and/or adding a simple DSL or scripting language like <a href="https://github.com/sagiegurari/duckscript/">Duckscript</a> ( maybe ) as a way to execute conditional SQL statements more easily.</p>
<p>The great part about SQLite is that it&apos;s easy to mix in your own DSL / scripting language and execute that code as a part of the SQL transactions.</p>
<p>We&apos;ve designed the Leaf server so that it&apos;s easy for us to implement new kinds of modules using different languages or features in the future.</p>
<h2 id="summary">Summary</h2>
<p>There you have it! That sums up most of Roomy&apos;s architecture.</p>
<p>We are approaching a full year of focused work on building Roomy and we&apos;re zeroing in on our final design. Things may shift, but the core strategy will remain the same and we will make it work.</p>
<h2 id="postscript-peer-to-peer-local-first">Postscript: Peer-to-Peer &amp; Local First</h2>
<charlie-quote>
<p>Wait up! Didn&apos;t you used to talk about things like local/offline first and peer-to-peer tech. What happened to that?</p>
</charlie-quote>
<p>Unfortunately the tech isn&apos;t ready yet, and we need to get Roomy into real-world use now.</p>
<p>See <a href="https://blog.muni.town/brief-history-of-roomy-architectures/">A Brief History of Roomy&apos;s Architectures</a> for more detail, but, in short, we were going to use <a href="https://willowprotocol.org/">Willow</a>, but it wasn&apos;t ready yet, then we were going to use <a href="https://www.inkandswitch.com/keyhive/notebook/">Keyhive &amp; Beelay</a>, but that also wasn&apos;t ready yet, finally we actually did use <a href="https://jazz.tools/">Jazz</a>, but ran into serious performance problems and it was missing an essential feature we needed.</p>
<p>While our new design is less peer-to-peer that previous attempts, we are putting a lot of effort into making sure that we have, as much as possible, a smooth road forward into more p2p solutions in the future.</p>
<p>For example, the event sourcing model we are using allows you to make edits offline and later sync those edits to a server, to give us local-first features.</p>
<p>Similar to <a href="https://git-scm.com/">Git</a>, we can hypothetically have temporary &quot;forks&quot; of a chat space that allow you to chat with someone that you have a LAN connection with, even if you are offline, before later &quot;pushing&quot; those changes to the main &quot;branch&quot;.</p>
<p>We have a lot of ideas for potential solutions and I think we&apos;re in a pretty good position to make real progress on it once we can find the time. It&apos;s something that we are passionate about and it&apos;s something that we believe there is real-world value in.</p>
<p>In order to get the time and resources to bring that to fruition, though, we need to start with something that can provide real value to people today, and we think that Roomy can do that.</p>
<charlie-quote>
<p>Time will tell... Now, go get it done!</p>
</charlie-quote>
<p>We&apos;re on it!</p>
]]></content:encoded></item><item><title><![CDATA[Open Source Power]]></title><description><![CDATA[We have to talk about open source licensing.]]></description><link>https://blog.muni.town/open-source-power/</link><guid isPermaLink="false">68ea7706b09c5bed5bd30d9f</guid><category><![CDATA[Vision]]></category><category><![CDATA[Sustainability]]></category><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Fri, 14 Nov 2025 16:15:36 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/11/right_between_by_leothefox_dimep5u.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/11/right_between_by_leothefox_dimep5u.jpg" alt="Open Source Power"><p>I&apos;ve been trying to write this piece for years, really ever since I finished the first version of <a href="https://blog.erlend.sh/open-source-explained" rel="noreferrer">Open Source Explained</a> (a v2 will drop early next year). Every time I get started I&apos;m just overwhelmed with paralyzing visions of the commentariat accusing me of WrongThink.</p><p>So I drop it, because I&apos;m tired to the bone of debating the minutae of open source definitions when the conversation we ought to be having is about power: who has it? (oligarchs), how did they get it? (monopolies, corruption &amp; unmitigated extraction), why is that a problem? (technofeudalistic autocracy), and how do <em>we the people</em> take that power back? (protocols, open software &amp; defensive licensing).</p><blockquote><a href="https://write.as/openindie/open-source-explained#understanding" rel="noreferrer"><strong>Understanding ownership is power</strong></a><br><br>It&#x2019;s important to understand the codes in your life, because your life is made up of them. Once you understand which codes you already have access to and even the <strong>right to inspect</strong>, you can see more clearly which other codes you <em>ought to</em> have insight into.</blockquote><p>Nothing makes me more anxious than writing about open source licensing because nothing brings out more opinion-havers, the vast majority of whom are speaking from a point of <a href="https://archive.ph/mWawS" rel="noreferrer">privilege-blindess</a> in the western world. The widespread ignorance of the deeper power struggle at play (which we&apos;re losing) has brought the free world to the very brink, so I&apos;m pushing past the discomfort to honor the urgency of our moment.</p><p>As a life-long advocate of open source methodology - an incredible tool and tactic for pro-social change - licensing is a legitimately painful subject matter. The dialogue is just so profoundly <em>stuck</em>, and it can feel like a lot of software engineers <a href="https://uncanny.bingo/open-source-is-broken/">care more for the sanctity of Open Source computer code than human life and wellbeing</a>.</p><p>Instead of finding common cause in sustainable cultivation of the digital commons we appear forever doomed to argue semantics and purity tests while the <a href="https://www.wired.com/story/open-source-coders-few-tired/">burnout epidemic worsens</a> and the integrity of our shared infrastructure disintegrates beneath our feet.</p><p>I&apos;d estimate that 95% of <a href="https://github.com/erlend-sh/" rel="noreferrer">my working-time</a> in software development (&gt;20 years), employed and independent alike, has been spent facilitating &amp; producing <em>open source software</em>. I am Team Open Source. I steadfastly believe in open source praxis as an exceptionally powerful method of permissionless coordination &amp; innovation.</p><p>Yet if open source code alone could change the world, it would have happened by now. When <a href="https://en.wikipedia.org/wiki/Microsoft_and_open_source">Microsoft suddenly turned OSS-friendly</a> in the 2010s we triumphantly proclaimed &quot;open source has won!&quot;, but what have we got to show for it? <em>More technology</em> does not on its own correlate with better quality of life.</p><p>In hindsight I don&apos;t think any reasonable person can say that we&apos;re collectively better off. <a href="https://www.democracywithoutborders.org/36317/autocracies-outnumber-democracies-for-the-first-time-in-20-years-v-dem/" rel="noreferrer">Democracy is losing</a>, and <em>tech</em> is playing an undeniably outsized part in that.</p><p>Fact is, the reason companies like Microsoft, Google, Amazon and Facebook warmed up to open source is because they realized they could use it to their advantage by <a href="https://gwern.net/complement">commoditizing their complements</a>.</p><blockquote>Joel Spolsky in 2002 identified a major pattern in technology business &amp; economics: the pattern of &#x201C;commoditizing your complement&#x201D;, an alternative to vertical integration, where companies seek to secure a chokepoint or quasi-monopoly in products composed of many necessary &amp; sufficient layers by dominating one layer while fostering so much competition in another layer above or below its layer that no competing monopolist can emerge, prices are driven down to marginal costs elsewhere in the stack, total price drops &amp; increases demand, and the majority of the consumer surplus of the final product can be diverted to the quasi-monopolist. No matter how valuable the original may be and how much one could charge for it, <strong>it can be more valuable to make it free if it increases profits <em>elsewhere</em>.</strong></blockquote><p>Hardware capitalists (<a href="https://en.wikipedia.org/wiki/Hyperscale_computing">hyperscalers</a>) love maximally <em>free-of-charge</em> software. When the only way to monetize software is to run it in the cloud and charge for access to the cloud, owning hardware becomes the only viable business model for software distribution. Anyone who doesn&apos;t own hardware must sell their software like an infrastructural subletter at ever-thinning margins as the software product gets commoditized.</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://toot.cat/@zkat/115129958258018665"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Kat March&#xE1;n &#x1F408; (@zkat@toot.cat)</div><div class="kg-bookmark-description">Open source maintainers of major projects (hi) are not ready to accept and talk about how the cultural insistence on permissive licensing is just straight up labor exploitation taking advantage of our addiction to popularity (also hi). We&#x2019;re doing this to ourselves too, you know.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://toot.cat/packs/assets/apple-touch-icon-180x180-dy8EGdCM.png" alt="Open Source Power"><span class="kg-bookmark-author">Toot.Cat</span><span class="kg-bookmark-publisher">Kat March&#xE1;n &#x1F408;</span></div></div></a><figcaption><p><span style="white-space: pre-wrap;">Preach, Kat!</span></p></figcaption></figure><p>And for the Silicon Valley startups where open source products have become a common differentiator and market-entry-wedge among many new companies, open source is not a moral imperative or a common good, it&apos;s just an effective <a href="https://a16z.com/open-source-from-community-to-commercialization/">go-to-market strategy</a>.</p><p>Since its inception the free and open source software movement has lacked a theory of change beyond the liberation of <em>computer code</em>. Liberation of human beings by way of a <a href="https://theanarchistlibrary.org/library/lewis-herber-murray-bookchin-towards-a-liberatory-technology" rel="noreferrer">liberatory technology</a> was always a secondary and oftentimes incompatible concern for Open Source, since laborers having agency of their work (and how it may be exploited) is in conflict with the inviolable liberties of an Open Source computer program.</p><p>The result has been an ineffectual &quot;open source revolution&quot; that maintains the status quo of our modern day hellscape by <a href="https://archive.ph/LxXY1">facilitating an upwards transfer of wealth</a> and power, amassed by the hyperscalers who are now entering their final, <a href="https://www.theguardian.com/technology/ng-interactive/2025/jan/29/silicon-valley-rightwing-technofascism">fascistic form</a>. Open source &quot;won&quot; by aiding and abetting the already dominant owner-class.</p><p>Amazon and Google are empirically more powerful today than they were 20 years ago. Our prevailing models of software ownership are demonstrably not a threat to the ones using software to eat the free world. We need a change of tactics.</p><h2 id="anti-fascistic-software">Anti-fascistic software</h2><p><em>..is made possible by pro-labor licensing.</em></p><p>After a recent demoing of <a href="https://a.roomy.space/">Roomy</a> to the fine people of <a href="https://kpaxle.mmm.page/scenius">Scenius</a>, someone asked the question that always comes up in these nerdy circles, as it should:</p><blockquote>&quot;is your project open source&quot;</blockquote><p>Well, if you mean <em>is all our source code openly available for other makers to freely use, copy, modify and share-alik</em>e?, then yes.</p><p>But <em>indiscriminately </em>so? No. There are uses of our freely available code (<a href="https://github.com/muni-town/roomy">Roomy</a>, MPLv2 and its underlying <a href="https://github.com/muni-town/leaf">Leaf framework</a>, FSL) that we do not tolerate, namely commercial uses of our software that compete with the services we ourselves are commercially operating for the express purpose of keeping ongoing development and maintenance of Roomy sustainable.</p><p>Yes, in sacreligious discordance with the holy commandments of the California-based <a href="https://opensource.org/about" rel="noreferrer">Open Source Initiative</a>, we <em>discriminate</em>, thus violating the 6th principle of the <em>Open Source Definition</em>.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://opensource.org/osd"><div class="kg-bookmark-content"><div class="kg-bookmark-title">The Open Source Definition</div><div class="kg-bookmark-description">Introduction Open source doesn&#x2019;t just mean access to the source code. The distribution terms of open source software must comply with the following criteria: 1. Free Redistribution The license shall&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://i0.wp.com/opensource.org/wp-content/uploads/2023/01/cropped-cropped-OSI_Horizontal_Logo_0-e1674081292667.png?fit=192%2C192&amp;quality=80&amp;ssl=1" alt="Open Source Power"><span class="kg-bookmark-author">Open Source Initiative</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://i0.wp.com/opensource.org/wp-content/uploads/2023/03/cropped-OSI-horizontal-large.png?fit=640%2C229&amp;quality=80&amp;ssl=1" alt="Open Source Power"></div></a></figure><blockquote><strong>No Discrimination Against Fields of Endeavor</strong><br><br>The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.</blockquote><p>This definition of open source prohibits discriminating against megacorps and nazis.</p><p>That&apos;s a problem for me. You see, I wanna make my software freely available to everyone in the world <em>except those guys specifically.</em> That very <a href="https://web.archive.org/web/20250322191051/https://www.joanwestenberg.com/why-do-corporations-love-authoritarianism">particular bunch of autocratic corpo-states</a> are actively destroying the world I&apos;m trying to pro-socially enrich as a commoner.</p><p>Certain open software zealots will defend the innate righteousness of the Open Source Definition with a religious fanaticism indistinguishable from the <em>actual</em> members of faith traditions they love to denigrate as illogical loons.</p><p>Yet even Bruce Perens, the original author of the Open Source Definition, acknowledged in 2024 that the class of open source licensing stipulated by the OSD is not sufficient for modern day conditions. He is now championing what he calls <a href="https://postopen.org/">Post-Open</a>, which is a fairly long-winded way of saying he&apos;s now pretty cool with the notion of licensing code to be &quot;<a href="https://writing.kemitchell.com/2025/11/05/PolyForm-Noncommercial-2.0.0-pre.2">free only for non-commercial use</a>&quot;.</p><p>Protection against commercial extraction via <a href="https://creativecommons.org/licenses/by-nc/4.0/deed.en">CC BY-NC</a> licensing is a perfectly normal practice in the open source art community, but for some strange reason when it comes to code this simple defensive maneuver is <em>just not right.</em></p><p>I am an anti-fascist. By plainly stating this I will apparently be marked as a terrorist by the USA, so I guess I&apos;m not visiting again any time soon.</p><p>As the former VP of Community at <a href="https://discourse.org/">Discourse</a> (GPLv2) I spent half a decade participating in the making of certifiably Free, Open Source Software that got <a href="https://blog.erlend.sh/open-source-explained#force">put to use by literal nazis</a> to amplify their organized hate, and all we had to say for ourselves was &quot;well, the license says <em>free for <strong>everyone</strong></em>&quot;. In the words of Kyle Mitchell, this is the <a href="https://writing.kemitchell.com/2019/05/08/Tyranny-of-Permissionlessness" rel="noreferrer">Tyranny of Permissionlessness</a> in action.</p><p>If the only correct and righteous way to make Open Source software means strictly making non-discriminatory software stripped of protections for its laborers, consider me out. I&apos;ve personally made it my job to produce anti-fascistic software, meaning software that decentralizes power by taking it away from autocratic fiefdoms and re-distributing it to the margins of society.</p><p>It boggles the mind that in an open software culture whose central ethos is continuous iteration and improvement made possible by openness, our licensing stack and its ingrained principles are apparently immutable.</p><p>Even the author of the illuminating &quot;<a href="https://archive.ph/LxXY1">Why Open Source Failed</a>&quot; (from 2018 and a spiritual predecessor to this article) promptly rules out new types of licensing as part of the solution. Instead he appealed to government intervention, which by now is as quaint of a sentiment as they come.</p><p>No one is coming down from up high to save us. We can only seize the levers of power that are within our reach. Licensing is a uniquely powerful lever because it is enacted as a bottom-up change at the level of individual agency whilst simultaneously being wielded with the top-down legal authority of nation states.</p><p>The intellectual property landscape is grossly outdated and biased towards big business, but the market still depends on the continued rule of law to function. That systemic dependency can be subverted against itself and used in our favor by reformulating acceptable use for <em>the people&apos;s software</em> at a grassroots level.</p><p><a href="https://heathermeeker.com/2019/11/09/good-and-not-evil-the-advent-of-ethos-licensing/">Ethical licensing is hard</a>, but <a href="https://writing.kemitchell.com/living/Ethical-Licenses-Talking-Points">far from impossible</a>. While we cannot easily encode anti-fascism into our licenses, what we <em>can </em>easily do is discriminate against big capital, the underlying engine of fascism and authoritarianism.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fastcapitalism.journal.library.uta.edu/index.php/fastcapitalism/article/view/94"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Neoliberal Fascism as the Endpoint of Casino Capitalism | Fast Capitalism</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://fastcapitalism.journal.library.uta.edu/favicon.ico" alt="Open Source Power"><span class="kg-bookmark-author">Page Header Logo</span><span class="kg-bookmark-publisher">Henry Giroux McMaster University</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://fastcapitalism.journal.library.uta.edu/public/journals/1/cover_issue_8_en_US.png" alt="Open Source Power"></div></a></figure><p>That&apos;s what <a href="https://polyformproject.org/licenses/">defensive licensing</a> tactics for open software makes possible.</p><p>While OSI has <a href="https://writing.kemitchell.com/2019/04/23/OSD-wontfix.html">no right</a> to claim any authority over a term as general as &quot;open source&quot;, they&apos;ve successfully popularized a cultural interpretation of Open Source (Software) in accordance with their neoliberal definition. I&apos;ll abide by that interpretation as long as it remains culturally mainstream. With time I do however intend for and <a href="https://writing.kemitchell.com/lists/Antidote.html">expect that interpretation to change.</a></p><h4 id="rapid-fire-qa">Rapid-fire Q&amp;A</h4><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">Are you saying traditionally licensed OSS is bad?</span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><p><span style="white-space: pre-wrap;">No. Licensing general-purpose libraries as permissively as possible makes total sense. We might say &quot;the arc of progress bends towards permissive software&quot;, which is why &quot;</span><a href="https://fair.io/"><span style="white-space: pre-wrap;">Fair Source</span></a><span style="white-space: pre-wrap;">&quot; licenses like the </span><a href="https://fsl.software/"><span style="white-space: pre-wrap;">Functional Source License</span></a><span style="white-space: pre-wrap;"> self-terminates into a permissive license after a 2-year period of protection from capture.</span></p></div>
        </div><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">What are you so afraid of?</span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><p><span style="white-space: pre-wrap;">Last year a company with an open source product got accepted for Y Combinator. Shortly thereafter another company copied their source code, also applied to YC </span><a href="https://news.ycombinator.com/item?id=41707495"><i><em class="italic" style="white-space: pre-wrap;">and got accepted!</em></i></a></p><p><span style="white-space: pre-wrap;">As an eventually </span><a href="https://blog.muni.town/company-as-commons/"><span style="white-space: pre-wrap;">steward-owned company</span></a><span style="white-space: pre-wrap;"> we don&apos;t intend to apply for YC, but the prospect of any copy-cat behavior like this is chilling.</span></p><p><span style="white-space: pre-wrap;">And it&apos;s not just funded startups that are targeted either. </span><a href="https://herman.bearblog.dev/license/" rel="noreferrer"><span style="white-space: pre-wrap;">Independent ventures like the Bear blog</span></a><span style="white-space: pre-wrap;"> are just as vulnerable. The kumbaya years of open source are long gone.</span></p></div>
        </div><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">What bout AGPL?</span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><p><span style="white-space: pre-wrap;">It doesn&apos;t do anything to protect against commercial capture and extraction by someone with more capital (money &amp; servers) to&#xA0;offer an alternative to your service at no development cost. It merely ensures that whatever code is copied has to remain open.</span></p></div>
        </div><div class="kg-card kg-toggle-card" data-kg-toggle-state="close">
            <div class="kg-toggle-heading">
                <h4 class="kg-toggle-heading-text"><span style="white-space: pre-wrap;">Are you a proponent of &quot;open core&quot;?</span></h4>
                <button class="kg-toggle-card-icon" aria-label="Expand toggle to read content">
                    <svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                        <path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/>
                    </svg>
                </button>
            </div>
            <div class="kg-toggle-content"><p><span style="white-space: pre-wrap;">In the </span><a href="https://web.archive.org/web/20240413162329/https://www.coss.community/jj/open-core-definition-examples-tradeoffs-ahi" rel="noreferrer"><span style="white-space: pre-wrap;">wide definition of the term</span></a><span style="white-space: pre-wrap;">, yes.</span></p><p><span style="white-space: pre-wrap;">The dirty secret of </span><i><em class="italic" style="white-space: pre-wrap;">any</em></i><span style="white-space: pre-wrap;"> open-source product company is that in order to be competitively viable it is closing down </span><i><em class="italic" style="white-space: pre-wrap;">something</em></i><span style="white-space: pre-wrap;">, usually some critical piece of service-scaling infrastructure.</span></p><p><span style="white-space: pre-wrap;">You want to know how a &#x201C;100% open source project&#x201D; is kept going? Somewhere else, closed code is sold to pay for it. Over the lifetime of an &#x201C;open source web app&#x201D; that needs to make money to sustain ongoing development, some kind of closed service inevitably sneaks into the project. WordPress is a prime example of this.</span></p><p><span style="white-space: pre-wrap;">The best way to avoid that is to be incentivized to push 100% of all code into public view, which is advantagous when parts of that public code are commercially licensed because the openness of the code helps the </span><i><em class="italic" style="white-space: pre-wrap;">sale</em></i><span style="white-space: pre-wrap;"> of the code (as past labor).</span></p></div>
        </div><h2 id="real-world-of-open-source">Real World of Open Source</h2><p>Ursula Franklin&apos;s timeless lecture on <a href="https://www.cbc.ca/radio/ideas/the-1989-cbc-massey-lectures-the-real-world-of-technology-1.2946845">The Real World of Technology</a> from 1989 should in my humble opinion be required reading in the School of Open Source and Pro-Social Technology.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://archive.org/details/the-real-world-of-technology"><div class="kg-bookmark-content"><div class="kg-bookmark-title">The Real World of Technology : Ursula Franklin : Free Download, Borrow, and Streaming : Internet Archive</div><div class="kg-bookmark-description">These are recordings of Ursula Franklin&#x2019;s public lectures that she made as part of the 1989 Massey Lectures series. The recordings were broadcast by the&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://archive.org/images/glogo.jpg" alt="Open Source Power"><span class="kg-bookmark-author">Internet Archive</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://archive.org/services/img/the-real-world-of-technology/full/pct:500/0/default.jpg" alt="Open Source Power"></div></a></figure><blockquote>As I see it, technology has built the house in which we all live. The house is continually being extended and remodelled. More and more of human life takes place within its walls, so that today there is hardly any human activity that does not occur within this house. All are affected by the design of the house, by the division of its space, by the location of its doors and walls. Compared to people in earlier times, we rarely have a chance to live outside this house. And the house is still changing; it is still being built as well as being demolished. In these lectures, I would like to take you through the house, starting with the foundation and then examining with you the walls that have been put up or taken down, the storeys and turrets that have been added, the flow of people through the house &#x2014; who can come in, who can go into particular spaces.</blockquote><blockquote>One needs to look not only at what technology does, but also what it <em>prevents</em>&#x2014;and whether by the mere presence of technological approach to a social problem, one does not redefine the problem to the detriment of the total situation.</blockquote><p>She talked about <a href="https://aworkinglibrary.com/writing/prescriptive-technologies">holistic versus prescriptive technology</a>. With holistic technologies, the worker is in control; with prescriptive technologies, <em>the worker is under control</em>. In the context of sustainability, traditional FOSS can in some cases have a harmfully prescriptive quality to it by limiting code workers to only selling their future work (on condition of employment) and not the works of their past (as an independent).</p><p>When talking to the most ardent FOSS-maxers it usually feels like they&apos;re not making enough contact with reality at large. Free, Open Source Software does not a social movement make. FOSS ideology operates in a theoretically pure vacuum that doesn&apos;t need to interact with the messy reality of daily survival.</p><p>The liberties of software are obviously ill-defined if they actively erode the liberties of the people who make it. Open Software as a positive force in the world is entirely contingent on its ability to <a href="https://blog.erlend.sh/open-source-explained#distributing">distribute power</a>. To date it has facilitated the opposite.</p><blockquote><strong>Distributing privilege</strong><br><br>Making the rich even richer was definitely not part of the original ethos of the open source movement. Most open source software has been built on the backs of&#xA0;people enjoying privileged lives&#xA0;with an abundance of free time to satiate their intellectual curiosities. Volunteer value contribution also helps lessen the guilt induced by being in the group of people who just lucked out with the life-ride we were put on.<br><br>That&#x2019;s not to say sacrifices haven&#x2019;t been made. Open source is also built on contributor churn;&#xA0;burnout.<br><br>We can&#x2019;t have a movement that grew out of privilege and suffering become an amplifier of&#xA0;<em>more privilege</em>&#xA0;for those who already have the most, and&#xA0;<em>more suffering</em>&#xA0;for the underprivileged! That&#x2019;s a&#xA0;very&#xA0;bad look for us aspiring movers. And it would make obvious that what we thought of as &#x201C;solving hard problems&#x201D; might&#x2019;ve just been&#xA0;<em>&#x2019;pretending to be intellectuals by making up puzzles for ourselves to solve&#x2019;</em>.<br><br>How much of our <a href="https://consilienceproject.org/development-in-progress/">&#x201C;progress&#x201D;</a> is really just little distraction machines that we built to keep our brains from going too quiet and introspective.<br><br><strong>We will know our movement is succeeding if we are contributing to privileged wealth being widely and equitably distributed. We will know we have failed if the status quo remains unchanged, and the powers-that-be remain comfortably seated.</strong></blockquote><p>In the three and a half years since I wrote this the status-quo has only worsened, and it was already bad enough back then.</p><h2 id="open-source-as-a-commons">Open Source as a Commons</h2><p>Before the term &quot;Open Source&quot; got marketed as the industry-standard description of open software code in the 90s, open software was being shared as a digital commons in the same way we&apos;ve <a href="https://thinklikeacommoner.com/">practiced commoning</a> of any social technology going back millennia.</p><p>The notion of a &apos;Commons&apos; re-entered the zeitgeist in the late 60s, after a grumpy ecologist called Garret Hardin confabulated a hypothetical <a href="https://en.wikipedia.org/wiki/Tragedy_of_the_commons">&quot;Tragedy of the Commons&quot;</a>.</p><p>I call it a confabulation because Hardin&apos;s unimaginative game-theoretic scenario was purely his own thought experiment with <a href="https://pluralistic.net/2023/05/04/analytical-democratic-theory/">no basis in scientific research</a>.</p><blockquote>&apos;Economism&apos; was summed up by Ely Devons, who quipped &quot;If economists wished to study the horse, they wouldn&#x2019;t go and look at horses. They&#x2019;d sit in their studies and say to themselves, &#x2018;What would I do if I were a horse?&#x2019;&quot;<br><br>Hardin asked himself, &quot;If I were reliant upon a commons, what would I do?&quot; And, being a realist (that is, an asshole), Hardin decided that he would steal everything from the commons because that&apos;s what the other realists would do if he didn&apos;t get there first.<br><br>Hardin didn&apos;t go and look at a commons. But someone else did.</blockquote><p>That someone else was Elinor Ostrom, an actual nerd who went out and did actual research and discovered that, <em>actually</em>, the commons is antithecal to social tragedy. Commoning is literally a practice of societal anti-fragility.</p><p>While the tragedy of the commons is a fabrication, the free-rider problem is very real, most of all because the biggest free-riders are the largest corporations in the history of our world. That&apos;s why our commons have to be actively protected and managed.</p><p>Elinor Ostrom&apos;s work on Governing the Commons culminated in <a href="https://earthbound.report/2018/01/15/elinor-ostroms-8-rules-for-managing-the-commons/">eight principles on how to best manage a commons together</a>.</p><p>The first of those principles is foundational to all the rest:</p><blockquote><strong>(1) Commons need to have clearly defined boundaries.</strong><br>In particular, who is entitled to access to what? Unless there&#x2019;s a specified community of benefit, it becomes a free for all, and that&#x2019;s not how commons work.</blockquote><p>The original sin of &quot;Open Source&quot; as imagineered by software libertarians was to not only to omit this critical insight from its definition, but actively forbidding any such boundary-drawing by anyone who wanted to consider themselves <em>true </em>advocates of Open Source.</p><p>From the <a href="https://www.lifewithalacrity.com/article/a-revised-ostroms-design-principles-for-collective-governance-of-the-commons/">revised and expanded principles</a> formulated by a computer nerd:</p><blockquote><strong>1A. DEFINE AUTHORIZED USE:</strong> The community of those who have the right to use the common resource is clearly defined.<br><br><strong>1B. DEFINE COMMONS BOUNDARIES:</strong> The boundaries of the commons are clearly defined so as to separate the usage rules from the larger environment.<br><br><strong>2A. MAKE COSTS PROPORTIONAL:</strong> Costs for using and maintaining the commons are proportional to the benefits that those users receive from the commons.<br><br><strong>2B. PAY ALL COSTS:</strong> People that use the commons keep costs inside the local system as much as possible. They do not externalize costs either to neighbors or future generations.</blockquote><p>This is precisely how we are NOT managing our <a href="https://blog.erlend.sh/open-source-explained#thecommons">digital commons</a>.</p><p>We need to follow in Ostrom&apos;s footsteps and bring in the scientists on this one. Are companies who transitioned some of their products to source-available licensing less pro-socially impactful than the purest operators out there? Is the agency of the product-user meaningfully limited by source-available software?</p><p>I posit that in five years we will laugh about how much we fretted and quibbled over the <a href="https://blog.erlend.sh/open-source-explained#degrees">degrees of openness</a> in our &quot;open-source vs shared-source&quot; products when they amount to roughly the same pro-social impact, either one being vastly preferable to the domineering dynamics of closed-source black boxes.</p><p><a href="https://blog.erlend.sh/open-source-explained#simplicity">There is a singular condition</a> that necessarily precedes all other definitions and principles for free and open software: <em>Source code availability</em>.</p><p>Did you ever notice how the <a href="https://en.wikipedia.org/wiki/The_Free_Software_Definition"><em>four freedoms</em></a><em> to run, study and (re)distribute a program</em> repeatedly add &#x201C;Access to the source code is a precondition for this [freedom].&#x201D;? We just don&#x2019;t get very far without source code access.</p><p>This particular freedom is special:</p><blockquote><strong>The freedom to study how the program works</strong>, and change it so it does your computing as you wish. Access to the source code is a precondition for this.</blockquote><p>Unlike the other &#x2018;freedoms&#x2019;, <strong>insight is not just a legal story, it&#x2019;s the difference between knowing and not knowing</strong>. When we have insight, we have unlocked the <em>possibility</em> to do whatever we want with this code, legal or not.</p><p>If running some code would assuredly save a life, I have a moral obligation to run that code, even if I am not legally allowed to run it.</p><p>When the source code of an application is available for view, the most important job is done. The black box has been cracked open and added to the permanent archives of The Commons. The conditions may say &#x201C;for viewing purposes only; no editing, copying, remixing or redistributing allowed&#x201D;, and we may play along, provided the rules of the game seem fair at the time.</p><p>Open source codes exist on a spectrum of openness. We can&#x2019;t quite seem to agree what openness taken to its logical extreme should ideally look like, but the modest beginning on the other end is simple and clear-cut: Open access to the source code of your <em>thing</em>.</p><p>Other conditions may and in many cases <em>should</em> apply.</p><h2 id="re-defining-our-boundaries">Re-defining our boundaries</h2><p>The reigning winners of open source are the megacorporations, and who can blame them. We seem to have collectively agreed (though I would argue by manufactured consent) that drawing clear boundaries around our digital software commons is the one thing we <em>cannot do</em>.</p><p>There&#x2019;s <a href="https://users.rust-lang.org/t/what-if-crates-io-paid-subscription-for-commercial-use/35353?u=erlend_sh">never enough interest in grappling with this looming issue</a> until the system breaks enough that people are being hurt in the form of critical system failure and vast personal expenses of both the psychological and financial kind.</p><p>Modern infrastructure initiatives like <a href="https://voidzero.dev/posts/announcing-vite-plus">Vite+</a> are daring to make source-available code and I think this is a Very Good Thing. It facilitates a rethinking of the social as well as financial contract between open source maintainers and the corporations that to-date have been extracting vastly more value out than they&apos;re putting back in.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://openssf.org/blog/2025/09/23/open-infrastructure-is-not-free-a-joint-statement-on-sustainable-stewardship/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Open Infrastructure is Not Free: A Joint Statement on Sustainable Stewardship &#x2013; Open Source Security Foundation</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://openssf.org/wp-content/uploads/2021/09/cropped-favicon-300x300.png" alt="Open Source Power"><span class="kg-bookmark-publisher">OpenSSF</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://openssf.org/wp-content/uploads/2025/09/SON-OpenLetter-Li-1200x627-5.png" alt="Open Source Power"></div></a></figure><blockquote>Beyond package registries, open source projects also rely on essential systems for building, testing, analyzing, deploying, and distributing software. These also include content delivery networks (CDNs) that offer global reach and performance at scale, along with donated (usually cloud) computing power and storage to support them.<br><br>And yet, for all their importance, most of these systems operate under a dangerously fragile premise: <strong>They are often maintained, operated, and funded in ways that rely on goodwill, rather than mechanisms that align responsibility with usage.</strong><br><br>Despite serving billions (perhaps even trillions) of downloads each month (largely driven by commercial-scale consumption), many of these services are funded by a small group of benefactors. Sometimes they are supported by commercial vendors, such as Sonatype (Maven Central), GitHub (npm) or Microsoft (NuGet). At other times, they are supported by nonprofit foundations that rely on grants, donations, and sponsorships to cover their maintenance, operation, and staffing.<br><br><strong>Regardless of the operating model, the pattern remains the same: a small number of organizations absorb the majority of infrastructure costs, while the overwhelming majority of large-scale users, including commercial entities that generate demand and extract economic value, consume these services without contributing to their sustainability.</strong></blockquote><p>The top 10 biggest programming languages in the world are collectively responsible for trillions of dollars in generated value. How much of that value is cycling back into the maintenance of these languages and their ecosystems? 0.01% maybe, if even that?</p><p>Is it really that crazy to imagine a community-governed and institution-owned package management stack that&apos;s licensed such that corporations have to pay their <a href="https://medium.com/erlend-sh/the-fair-share-clause-d891c5c2dc30">fair share</a>, to the tune of some tens of millions of dollar per year in <em>revenue</em>? Keep in mind that non-profits are welcome to make lots of revenue, it&apos;s the excess <em>profits</em> that&apos;s a probem.</p><p>The Rust-lang package utility <a href="https://github.com/rust-lang/crates.io">crates.io</a> and all of its accompanying infrastructure is licensed as permissively as possible with MIT and Apache v2. Why? Is anyone forking and remixing crates.io for personal use?</p><p>Package managers are centrally managed utilities by necessity; we just need the one (on average). No one is pulling in the crates.io package manager itself as a code dependency in their project, so the licensing of that package management code almost exlusively pertains to the usage of crates.io as a package management <em>product</em>, used by individuals and corporations alike.</p><p>Alike, but not equally. As the OpenSSF article above makes clear:</p><blockquote>Commercial-scale use without commercial-scale support is unsustainable.</blockquote><p>What the article doesn&apos;t get into is exactly how the corporations will be charged for services rendered. Presumably the utility endpoints themselves like crates.io will receive some much needed changes their Terms of Service as pertaining to corporations.</p><p>That&apos;ll be a great start, but I believe something more akin to the <a href="https://polyformproject.org/licenses/">commercial tempering</a> of Vite+ (specific license TBA) is necessary as an additional protection, otherwise the capital-holders will keep re-drawing the boundaries in their favor.</p><p>Case in point, two months ago the Python Software Foundation announced <a href="https://pyfound.blogspot.com/2025/10/NSF-funding-statement.html">&quot;The PSF has withdrawn a $1.5 million proposal to US government grant program&quot;</a>.</p><p>They did so because their state-sponsored funding was contingent on compromising their community&apos;s commitment to diversity. This is the kind of decision OSS orgs are faced with when they have to <em>ask </em>for money instead of being <em>paid </em>for services rendered. I wonder how many orgs have quietly taken this deal, insidiously eroding their culture of openness and cultural diversity in the process.</p><h2 id="same-team-same-mission">Same team, same mission</h2><p>Alright, now that I got that off my chest.. if you are a FOSS advocate of any kind, you&apos;re my kind of people; I love what you do and what you are <em>about</em>. We&apos;re playing for the same team.</p><p>That&apos;s why it&apos;s all the more painful when we&apos;re failing to meet and prosper together on our vast stretch of common ground, rich with possibility. If you share this sentiment we can talk all about it in <em>the chat</em>, the first of which will happen together with the Scenius community on December 3rd as an &apos;Open Source Panel&apos;, exact time and digital venue TBA.</p><div class="kg-card kg-callout-card kg-callout-card-white"><div class="kg-callout-text">There&apos;s also the virtual collab-space for <a href="https://roomy.space/fb35f9e14d3387d518fca1bcf23160b1f1141a6a5d539a3cf3cdb63e0daacdf2" rel="noreferrer">Open Source Explained</a>, but Roomy (particularly its Pages feature which this space uses heavily) is extremely alpha still so give it until December to actually be useful. Anyone&apos;s welcome to try it out though.</div></div><p>If the case I&apos;m making for more experimentation and ideological agnosticism isn&apos;t tracking for you and you&apos;re still not convinced that I&apos;m a well-intentioned cultivator of our digital commons, man, do me a favor and just leave me be for a while instead of telling me how wrong I am.</p><p>Let me do my work. I&apos;m so tired of this. Give me a year to just <em>show you</em> rather than telling, and let&apos;s talk more then. In the meantime kindly give me the silent treatment.</p><p>Thanks for reading, friend (if you still want to be).</p><hr><p>Other things I might write about if there&apos;s any juice left after this:</p><ul><li>How copyleft discriminates against economic opportunity</li><li>How WordPress&apos; GPL licensing forced Automattic into an ugly legal battle</li><li>Open Source and Post-Growth</li><li>CLAs are good for workers, actually</li><li>Trustworthy software</li><li>Governing acceptable-use by community tribunal</li><li>How non-commercial boundaries incentivizes proper accounting of project contributions.</li></ul>]]></content:encoded></item><item><title><![CDATA[Digital Strategy for Organisations]]></title><description><![CDATA[Digital power is created through the interplay of mobilizing and organizing. Open Social protocols bridge the gap.]]></description><link>https://blog.muni.town/digital-strategy-for-orgs/</link><guid isPermaLink="false">69025d7eb09c5bed5bd30f8e</guid><category><![CDATA[Vision]]></category><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Mon, 03 Nov 2025 10:59:29 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/11/one_moment_journey_by_eugene_siryk_d85cflb.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/11/one_moment_journey_by_eugene_siryk_d85cflb.png" alt="Digital Strategy for Organisations"><p>Any organisation engaged in movement-building needs a persistent, online space where its volunteering collaborators can congregate, bond and maintain momentum through a higher degree of connectivity than a weekly newsletter. The passionate ones need a place where they can <em>show up</em> and <em>get into it</em> on a regular basis.</p><p>Unfortunately the mainsteam platforms for online space-making are <a href="https://blog.erlend.sh/web-of-the-people">feudal fiefdoms</a> who&apos;ve amassed so much power that they are increasingly at the root of the very problems the average non-profit organization exists to remedy.</p><p>The same domineering forces that are degrading our democracies and poisoning our planet have been doing the exact same thing to our virtual biosphere. As Cory Doctorow says of <a href="https://pluralistic.net/2025/10/11/cyber-rights-now/">The curious, intertwined history of climate and digital rights activism</a>:</p><blockquote>There&apos;s an inchoate movement groping its way to understanding that it <em>is</em> a movement &#x2013; that the problems of labor exploitation, fascism, climate degradation, surveillance, authoritarianism and genocide are all connected to each other by the fact that they are caused by extreme concentrations of wealth and power.</blockquote><p>To save our world wide web-of-life, including its digital ecology, we need a rewilding of the internet.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.noemamag.com/we-need-to-rewild-the-internet/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">We Need To Rewild The Internet | NOEMA</div><div class="kg-bookmark-description">The internet has become an extractive and fragile monoculture. But we can revitalize it using lessons learned by ecologists.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.noemamag.com/wp-content/uploads/2020/06/cropped-ms-icon-310x310-1-180x180.png" alt="Digital Strategy for Organisations"><span class="kg-bookmark-author">NOEMA</span><span class="kg-bookmark-publisher">Maria Farrell</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://noemamag.imgix.net/2024/04/noema_pillar_growth_004.jpg?fit=crop&amp;fm=pjpg&amp;h=628&amp;ixlib=php-3.3.1&amp;w=1200&amp;wpsize=noema-social-facebook&amp;s=ed786aab26f0df4b5442254d726cce13" alt="Digital Strategy for Organisations"></div></a></figure><blockquote><strong>Make Space To Grow</strong><br><br>We need to stop thinking of internet infrastructure as too hard to fix. It&#x2019;s the underlying system we use for nearly everything we do. The former prime minister of Sweden, Carl Bildt, and former Canadian deputy foreign minister, Gordon Smith, wrote in 2016 that the internet was becoming &#x201C;the infrastructure of all infrastructure.&#x201D;<sup> </sup>It&#x2019;s how we organize, connect and build knowledge, even &#x2014; perhaps &#x2014; planetary intelligence. Right now, it&#x2019;s concentrated, fragile and utterly toxic.&#xA0;<br><br>Ecologists have reoriented their field as a &#x201C;crisis discipline,&#x201D; a field of study that&#x2019;s not just about learning things but about saving them. We technologists need to do the same. Rewilding the internet connects and grows what people are doing across regulation, standards-setting and new ways of organizing and building infrastructure, to tell a shared story of where we want to go. It&#x2019;s a shared vision with many strategies. The instruments we need to shift away from extractive technological monocultures are at hand or ready to be built.</blockquote><p>Facebook, Instagram, TikTok and X/Twitter will happily grant you an audience in their kingdom, even if you&apos;re being critical of their platforms. That is, until you&apos;re so effective at your job that you actually pose a legitimate threat to their supremacy, in which case they will lower your reach as they see fit, or simply <a href="https://dig.watch/updates/microsoft-allegedly-blocked-the-email-of-the-chief-prosecutor-of-the-international-criminal-court">banish you from their dominion altogether</a> under the pretense of &quot;system error&quot; or &quot;ToS violation&quot;.</p><h2 id="protocols-not-platforms">Protocols, Not Platforms</h2><p>The world&apos;s <a href="https://en.wikipedia.org/wiki/Polycrisis">polycrisis</a> requires action on many fronts, and our technofeudalistic predicament is no exception. But in the technological realm we have one particularly impactful tool at our disposal that has made massive inroads in the last two years: Protocols.</p><p>A compelling case for protocols as a way to re-democratize the web was made in Mike Masnick&apos;s paper from 2019:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://knightcolumbia.org/content/protocols-not-platforms-a-technological-approach-to-free-speech"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Protocols, Not Platforms: A Technological Approach to Free Speech</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://knightcolumbia.org/images/favicons/KFAI-favicon_180.png" alt="Digital Strategy for Organisations"><span class="kg-bookmark-author">Knight First Amendment Institute</span><span class="kg-bookmark-publisher">Mike Masnick</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://kfai-documents.s3.us-east-1.amazonaws.com/images/cce2be6440/Sara_Wong_lowres_medium.png" alt="Digital Strategy for Organisations"></div></a></figure><blockquote>We&#x2019;ve gone from a world in which protocols dominated to one in which centralized platforms controlled all. <strong>Moving us back toward a world where protocols are dominant over platforms could be of tremendous benefit to free speech and innovation online.</strong><br><br>Such a move has the potential to return us to the early promise of the web: to create a place where like-minded people can connect on various topics around the globe and anyone can discover useful information on a variety of different subjects without it being polluted by abuse and disinformation. Simultaneously, it could enable greater competition and innovation on the internet, while also giving end users more control over their own data and preventing giant corporations from having too much data on any particular user.<br><br>Moving to protocols, not platforms, is an approach for free speech in the twenty-first century. Rather than relying on a &#x201C;marketplace of ideas&#x201D; within an individual platform&#x2014;which can be hijacked by those with malicious intent&#x2014;protocols could lead to a marketplace of ideals, where competition occurs to provide better services that minimize the impact of those with malicious intent, without cutting off their ability to speak entirely.<br><br>It would represent a radical change, but one that should be looked at seriously.</blockquote><p>Think of our <em>digital protocols</em> as shared standards that enable interoperability and coordination among people on-line.</p><p>It&apos;s what empowers you to move from one telecom provider (a platform) to another without having to change your <em>phone number</em> (a protocol standard).</p><p>It&apos;s the reason you can send an email (a protocol standard) from <code>yourmail@gmail.com</code> to <code>friendsmail@outlook.com</code> even though they&apos;re two different service operators (platforms).</p><p>Obviously this hasn&apos;t prevented telecoms from becoming supersized and Gmail maintains around a 30% market share, but you&apos;ll notice that both telecoms and email providers have been subject to far less <a href="https://en.wikipedia.org/wiki/Enshittification" rel="noreferrer">platform decay</a> than their social-media counterparts.</p><p>I posit, with most technology activists agreeing, that this is because the telecoms and email providers are being kept (minimally) honest by the protocols inherent to their platforms, which prevents customer lock-in by ensuring cross-platform interop and a right-to-exit. If you don&apos;t like the service you <em>can</em> actually leave.</p><p>Internet nerds have been trying to standardize protocols for social media since the 2000s, but after massive capital infusion the social web grew too quickly for any widely agreed upon standard to achieve critical mass, which has left us with an oligopoly of personal data fortresses that everyone hates but no one can fully leave because that would entail losing our social connections and data in the process.</p><p>But as is inevitable when any institution gets too big to care, these platforms have gotten so egregiously bad that enough people <em>don&apos;t care</em> right back; they want out, even if that means having to start from scratch.</p><p>What&apos;s important is that there&apos;s <a href="https://pluralistic.net/2025/03/03/friedmanite/">somewhere for people to go</a>.</p><blockquote>&quot;In times of crisis, ideas can move from the fringe to the center in an eyeblink. Our job is to keep good ideas lying around, in anticipation of that crisis.&quot;</blockquote><h2 id="bluesky-and-at-protocol">Bluesky and AT protocol</h2><p>When Elon bought Twitter, Bluesky became the best idea lying around during one ensuing crisis after another.</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://www.wired.com/story/big-interview-jay-graber-bluesky/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Bluesky Is Plotting a Total Takeover of the Social Internet</div><div class="kg-bookmark-description">All the lefties fled to Bluesky following Elon Musk&#x2019;s Twitter takeover. But CEO Jay Graber says the app is for everyone&#x2014;and could revolutionize how people communicate online.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.wired.com/verso/static/wired-us/assets/favicon.ico" alt="Digital Strategy for Organisations"><span class="kg-bookmark-author">WIRED</span><span class="kg-bookmark-publisher">Kate Knibbs</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://media.wired.com/photos/68251b9ec0fc57ad670eae76/191:100/w_1280,c_limit/250408-JayGruber-JTamayo-JPEG-SELECTS-03.JPG" alt="Digital Strategy for Organisations"></div></a><figcaption><p><span style="white-space: pre-wrap;">Archive-link: </span><a href="https://archive.ph/kttLI"><span style="white-space: pre-wrap;">https://archive.ph/kttLI</span></a></p></figcaption></figure><blockquote>Graber, a former software engineer, seems most energized when she&#x2019;s talking about the unique infrastructure for her kingless world. Undergirding Bluesky as well as several smaller apps is the Atmosphere, or AT Protocol, which is a rule book that servers use to communicate. The open source protocol allows sovereign digital spaces to integrate with one another as needed. Two apps with complementary ideas about moderation or ads can work in tandem&#x2014;or not. It&#x2019;s up to them.<br><br>Graber sees Atmosphere as nothing less than the democratized future of the social internet, and she emphasizes to me that developers are actively building new projects with it.</blockquote><p>The network now counts 40 million members. That may seem like a small number compared to the hundreds of millions reported by its competitors, but those numbers are grossly inflated by bots and dubious counting methods, which most tech journalists repeatedly fail to note.</p><p>When looking at actual impact, many news outlets are reporting <a href="https://techcrunch.com/2025/03/20/bluesky-makes-it-easier-for-publishers-to-track-referrals/">higher rates of engagement</a> and incoming traffic on Bluesky with only 1/10th of the followers. <a href="https://www.theguardian.com/media/2024/nov/13/why-the-guardian-is-no-longer-posting-on-x">The Guardian has left X altogether</a>, finding it untenable. Best of all, <a href="https://arstechnica.com/science/2025/08/more-scientists-choose-bluesky-over-twitter/">Bluesky is the definitive platform of choice for the science community</a>.</p><p>Even so, Bluesky was just the onboarding mechanism; the &quot;killer app&quot; needed to kickstart the app-agnostic infrastructure underneath. What we have now is an open network of 40 million people that any budding social media app can build on top of to supercharge its rise, thus competing on a relatively even footing with the powerful <a href="https://en.wikipedia.org/wiki/Network_effect">network effects</a> of Big Tech incumbents.</p><p>The next 100M users on AT will come from other startups. Any indie platform creator can opt to interoperate with the AT protocol, and lots of us are doing exactly that:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://techcrunch.com/2025/06/13/beyond-bluesky-these-are-the-apps-building-social-experiences-on-the-at-protocol/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Beyond Bluesky: These are the apps building social experiences on the AT Protocol | TechCrunch</div><div class="kg-bookmark-description">A list of AT Protocol-based, consumer-facing apps that are either built on top of Bluesky or its underlying protocol, allowing users to take back control over their social networking experiences and personal data.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://techcrunch.com/wp-content/uploads/2015/02/cropped-cropped-favicon-gradient.png?w=192" alt="Digital Strategy for Organisations"><span class="kg-bookmark-author">TechCrunch</span><span class="kg-bookmark-publisher">Sarah Perez</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://techcrunch.com/wp-content/uploads/2025/03/GettyImages-2183838542.jpg?resize=1200,800" alt="Digital Strategy for Organisations"></div></a></figure><p>The AT protocol&apos;s ecosystem of interoperating applications already has fully operational alternatives for most of the usual suspects. (More than one option actually, but these are the most mature examples.)</p><ul><li>Instagram --&gt; <a href="https://www.flashes.blue/" rel="noreferrer">Flashes</a></li><li>Substack --&gt; <a href="https://leaflet.pub/" rel="noreferrer">Leaflet</a></li><li>Meetup --&gt; <a href="https://www.openmeet.net/" rel="noreferrer">OpenMeet</a></li><li>GitHub --&gt; <a href="https://tangled.org/">Tangled</a></li><li>TikTok --&gt; <a href="https://skylight.social/">Skylight</a></li><li>Twitch --&gt; <a href="https://stream.place/">Streamplace</a></li></ul><p>If you already have a Bluesky account you can also sign into any one of these services. Or, if your first step into the <a href="https://overreacted.io/open-social/" rel="noreferrer">open social web</a> is via any of the above services (though only a few have opened up their own native accounts management so far), you can use <em>that </em>account to sign into Bluesky, as with the rest.</p><p>What&apos;s still missing is an alternative to the likes of <a href="https://discord.com/">Discord</a> or Facebook Groups. Why is group discourse so important for organizations? Because while Bluesky and other such feed-centric apps are great for <em>mobilizing</em>, they&apos;re not the right tool for <em>organizing</em>, and change-makers need both to be effective.</p><h2 id="mobilizing-vs-organizing">Mobilizing vs Organizing</h2><p>Legendary labor organizer Jane McAlevey left us with a <a href="https://janemcalevey.com/speaking-engagement/lorem-ipsum-dolor-2/">powerful lesson</a> about the shortcomings of an overly <a href="https://ironruleblog.com/2017/08/23/mobilising-or-organising/">mobilization-reliant strategy</a>:</p><blockquote>The root cause of social and economic inequality is an inequality of power. The key to rebuilding a powerful progressive movement is a return to bottom-up base building. Yet too often today, organizations and movements confuse mobilizing mechanisms versus strategies that rely on a deeper form of organizing, one that places ordinary people at the center of struggles for change.</blockquote><p>The class of social media applications centered around a firehose-feed of information - like Bluesky, Twitter, Instagram and Tiktok - are <em>broadcasters</em>. Such comms tech is great for mobilizing people around a timely call to action. It enables activist influencers to direct mass attention towards some momentary objective.</p><p>What the broadcast feed lacks is continuity and a lasting sense of place and purpose. The planetary discourse moves in lockstep with the 24hr news cycle. Anything older than yesterday gets pushed out of view. This makes it impossible to sustain deep, wide ranging conversations over longer timespans, which is a prerequisite for sense-making.</p><p>That&apos;s the magic of group chat; it&apos;s an actual <em>place </em>for people to be invited into and stick around in. A place where relations, trust and shared language gets built. Every organization with a rich subject matter would be wise to cultivate a community of practice where ongoing topics and initiatives persist for weeks, months and even years, letting knowledge and relationships alike compound.</p><p>Maybe this doesn&apos;t sound reminiscent of your work&apos;s incessant Slack/Teams chat or your rowdy Discord gaming cohorts, but that is a design flaw, not an inherent limitation of the chat paradigm.</p><h2 id="roomy-the-gardenable-group-chat">Roomy, the gardenable group chat</h2><p>I started writing this post in the wake of talking to local NGOs about what <a href="https://a.roomy.space/">Roomy</a> (now in early-access alpha) could do for them and their greenfield digital presence. In the process I realized I couldn&apos;t explain the value proposition of Roomy without contextualizing it in the wider AT ecosystem it inhabits.</p><p>Roomy exists to fill a gap, both in the AT repertoire but also the internet at large. <a href="https://blog.muni.town/chat-is-minimum-viable-anything/">Chat is minimum-viable anything</a>; get two or more people together in a chatroom and you are now <em>building community</em> together.</p><p>Many people still perceive of chat as only marginally less chaotic than its feed-centric cousins, and in the case of apps like the earnestly named <em>Discord </em>(meaning <em>lack of agreement or harmony, as between persons, things, or ideas</em>), that perception holds true. But I come from a different tradition of slower, intentional discourse, treating communication as a practice of <em>digital gardening</em>.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.muni.town/chatty-community-gardens/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Chatty Community Gardens</div><div class="kg-bookmark-description">Group chat is fertile soil for low-stakes ideation. With tending, seeds of thought can grow into structured, evergreen knowledge.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.muni.town/favicon.ico" alt="Digital Strategy for Organisations"><span class="kg-bookmark-author">Muni Blog</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.muni.town/content/images/2025/02/forest_friends_by_ullbors_dddwd85.png" alt="Digital Strategy for Organisations"></div></a></figure><p>Roomy is a freeform community garden for messages both big and small, fast and slow, wherein participants <em>cultivate knowledge together at the speed of understanding</em>.</p><p>On top of that, thanks to the networking magic of the AT protocol we can build <a href="https://blog.muni.town/federated-webrings/">discoverability of common cause</a> into our shared spaces. So just like Amazon telling you about other books you may enjoy based on what you&apos;ve read, we can tell you about other pro-social groups in your locality, physical or virtual.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.muni.town/content/images/2025/11/IMG_3025.jpeg" class="kg-image" alt="Digital Strategy for Organisations" loading="lazy" width="1668" height="1940" srcset="https://blog.muni.town/content/images/size/w600/2025/11/IMG_3025.jpeg 600w, https://blog.muni.town/content/images/size/w1000/2025/11/IMG_3025.jpeg 1000w, https://blog.muni.town/content/images/size/w1600/2025/11/IMG_3025.jpeg 1600w, https://blog.muni.town/content/images/2025/11/IMG_3025.jpeg 1668w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Another example of recommendations from my podcast app.</span></figcaption></figure><h2 id="find-the-others">Find the others</h2><p><em>Our message for online change-makers is thus:</em></p><p>If you&apos;re a grassroots organization, don&apos;t waste your breath yelling into the void of the &quot;town square&quot; to get your message out there. For it is not a town any longer, it&apos;s a megacity where any singular voice immediately drowns in the noise of millions.</p><p>And don&apos;t look for &quot;followers&quot;, for anyone who&apos;s <em>following</em> you is simultaneously following a thousand other spokespeople, breathlessly proselytizing from atop their soap box every day.</p><p>There&apos;s a lot you <em>don&apos;t</em> want to learn from startup culture, but if there&apos;s one thing it has figured out it&apos;s how to go from nothing to something. When you&apos;re small you can <a href="https://paulgraham.com/ds.html">do things that don&apos;t scale</a>. That means reaching out to people directly to say &quot;we like what you&apos;re putting out and we want you alongside us in our community&quot;.</p><p>Once you&apos;ve gathered a hundred people together in a space of persistence, 10-20 of which are showing up regularly and with zeal, only then are you in a position to make yourself known to the wider public, as your voice it now amplified by the supporting cheers and distributed advocacy of your trusted community leaders.</p><p>This is the interplay we envision between the organizational power of Roomy and the mobilizational capacity of Bluesky. In tandem they form a unique affordance of planet-scale communications unlike anything we&apos;ve ever had before in our collective pursuit of broad-boundary coalition building.</p><h2 id="seize-the-means-of-communication">Seize the means of communication</h2><p>The internet activist Cory Doctorow has inspired a lot of the work that&apos;s gone into Roomy and its earlier iterations of years past. Cory&apos;s two latest books explain how we got ourselves into the mess we&apos;re in, and then points toward how we can get ourselves out again:</p><ul><li><a href="https://www.versobooks.com/en-gb/products/3035-the-internet-con">The Internet Con: How to Seize the Means of Computation</a></li><li><a href="https://www.versobooks.com/en-gb/products/3341-enshittification">Enshittification: Why Everything Suddenly Got Worse and What To Do About It</a></li></ul><p>It really comes down to this:</p><blockquote>If you&#x2019;ve never tried to organize a movement without the internet, I&#x2019;m here to tell you, it&#x2019;s really hard. We need to seize the means of computation, because while the internet isn&#x2019;t the most important thing that we have to worry about right now, all the things that are more important, gender and racial justice, inequality, the climate emergency, those are struggles that we&#x2019;re going to win or lose by organizing on the internet.</blockquote><p>Chat is the minimum-viable tool for online organizing. Without complete control over our means of communication, our ability to organize depends entirely on the goodwill of the very same <a href="https://en.wikipedia.org/wiki/Monopolies_of_knowledge">hegemonic incumbents</a> which we aim to dethrone. They&apos;re fine with our rebellious streak so long as it&apos;s ineffective, but once it starts actually working their benevolent nature will fade away as if it was never there, just like their long gone ambition to <a href="https://en.wikipedia.org/wiki/Don%27t_be_evil" rel="noreferrer">not be evil</a>.</p><p>We will not have digital power unless we make it for ourselves. There&apos;s only one way for us to reclaim the web as the liberatory technology it was meant to be: <a href="https://www.techdirt.com/2025/09/15/stop-begging-start-building/">Stop Begging. Start Building</a>.</p><p><em>Want to use Roomy for your organisation? You can play with our alpha at </em><a href="https://roomy.space/"><em>roomy.space</em></a><em> and contact me at e.soghe@gmail.com directly to talk more.</em></p>]]></content:encoded></item><item><title><![CDATA[Personal data storage is an idea whose time has come]]></title><description><![CDATA[Data Ownership as a conversation changes when data resides primarily with people-governed institutions rather than corporations.]]></description><link>https://blog.muni.town/personal-data-storage-idea/</link><guid isPermaLink="false">68e11eefb09c5bed5bd30b9c</guid><category><![CDATA[Vision]]></category><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Sun, 05 Oct 2025 08:58:01 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/10/IMG_2984.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/10/IMG_2984.png" alt="Personal data storage is an idea whose time has come"><p>Back in 2009 <a href="https://en.wikipedia.org/wiki/Tim_Berners-Lee">Tim Berners-Lee</a> drafted a web-specification for &quot;Socially Aware Cloud Storage&quot;:</p><blockquote>There is an architecture in which a few existing web protocols are gathered together with some glue to make a world wide system in which applications can work on top of a layer of commodity read-write storage.<br><br>(...) The result is that storage becomes a commodity, independent of the application running on it.</blockquote><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.w3.org/DesignIssues/CloudStorage.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Socially aware cloud storage - Design Issues</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.w3.org/favicon.ico" alt="Personal data storage is an idea whose time has come"><span class="kg-bookmark-author">Design Issues</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.w3.org/DesignIssues/diagrams/social/simondseconoart-small.png" alt="Personal data storage is an idea whose time has come"></div></a></figure><p>Several of these ideas were going around in the late 2000s, shortly after the explosive growth of &quot;web2&quot; monoliths like Facebook.</p><p>Another spiritually similar idea being championed at the time came from the Opera browser folks who wanted to put <a href="https://arstechnica.com/information-technology/2009/06/opera-hoping-to-reinvent-the-web-by-making-browser-a-server/">&quot;a web server in your browser&quot;</a>.</p><p>While &apos;Opera Unite&apos; never fully materialized, Tim&apos;s spec got significant traction some years down the road as one privacy crisis after another made the case for stronger web agency self-evident.</p><p>In 2015 Tim &amp; co. <a href="https://www.csail.mit.edu/news/web-inventor-tim-berners-lees-next-project-platform-gives-users-control-their-data" rel="noreferrer">secured some funding for the Solid Protocol</a>.</p><blockquote>Right now we have the worst of both worlds, in which people not only cannot control their data, but also can&#x2019;t really use it, due to it being spread across a number of different silo-ed websites. Our goal is to develop a web architecture that gives users ownership over their data, including the freedom to switch to new applications in search of better features, pricing, and policies.&#x201D;</blockquote><p>He has made continuous media appearances for the past decade to talk about why this is a necessary evolution of the web as we know it. </p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://www.wired.com/2017/04/tim-berners-lee-inventor-web-plots-radical-overhaul-creation/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Tim Berners-Lee, Inventor of the Web, Plots a Radical Overhaul of His Creation</div><div class="kg-bookmark-description">The creator of the web just received the equivalent of the Nobel Prize for computing. But his work is far from over.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.wired.com/verso/static/wired-us/assets/favicon.ico" alt="Personal data storage is an idea whose time has come"><span class="kg-bookmark-author">WIRED</span><span class="kg-bookmark-publisher">Klint Finley</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://media.wired.com/photos/59266301af95806129f4f46c/191:100/w_1280,c_limit/Berners-LeeHP-456019614.jpg" alt="Personal data storage is an idea whose time has come"></div></a><figcaption><p><a href="https://web.archive.org/web/20180630083946/https://www.wired.com/2017/04/tim-berners-lee-inventor-web-plots-radical-overhaul-creation/" rel="noreferrer"><span style="white-space: pre-wrap;">Archive link</span></a></p></figcaption></figure><blockquote>On the better web Berners-Lee envisions, users control where their data is stored and how it&apos;s accessed. For example, social networks would still run in the cloud. But you could store your data locally. Alternately, you could choose a different cloud server run by a company or community you trust. <br><br>You might have different servers for different types of information&#x2014;for health and fitness data, say&#x2014;that is completely separate from the one you use for financial records.</blockquote><p>To this day, Tim continues to eloquently champion <a href="https://www.theguardian.com/technology/2025/sep/28/why-i-gave-the-world-wide-web-away-for-free">the virtues of the Solid vision</a>.</p><blockquote>We have the technical capability to give that power back to the individual. Solid is an open-source interoperable standard that I and my team developed at MIT more than a decade ago. Apps running on Solid don&#x2019;t implicitly own your data &#x2013; they have to request it from you and you choose whether to agree, or not. Rather than being in countless separate places on the internet in the hands of whomever it had been resold to, your data is in one place, controlled by you.<br><br>Sharing your information in a smart way can also liberate it. Why is your smartwatch writing your biological data to one silo in one format? Why is your credit card writing your financial data to a second silo in a different format? Why are your YouTube comments, Reddit posts, Facebook updates and tweets all stored in different places? Why is the default expectation that you aren&#x2019;t supposed to be able to look at any of this stuff? <strong>You generate all this data &#x2013; your actions, your choices, your body, your preferences, your decisions. You should own it. You should be empowered&#xA0;by it.</strong></blockquote><p>The <a href="https://solidproject.org">Solid Protocol</a> remains an excellent idea and has even culminated in an official <a href="https://www.w3.org/2024/09/linked-web-storage-wg-charter.html">web specification</a>, but Solid has not yet amounted to any mainstream adoption on the web. Its primary financial sponsor <a href="https://www.inrupt.com/" rel="noreferrer">Inrupt</a> (of which Tim is co-founder &amp; CTO) has focused on the enterprise market as a path to sustainability; it remains to be seen what resources will be directed towards web-scale adoption of Solid.</p><p>Thankfully those of us who want data ownership and agency in our web applications <em>now</em> don&apos;t have to wait. The AT Protocol (as in <a href="https://atproto.com/">Authenticated Transfer</a>, but also <strong>@</strong>) was ushered in by the folks at <a href="https://bsky.social/" rel="noreferrer">Bluesky</a>, now with a network of over 30M people strong and increasingly spread across multiple interoperating communities/platforms like <a href="https://blackskyweb.xyz/" rel="noreferrer">Blacksky</a> or <a href="https://tangled.org/">Tangled</a> and <a href="https://techcrunch.com/2025/06/13/beyond-bluesky-these-are-the-apps-building-social-experiences-on-the-at-protocol/">so many more</a>.</p><p>While the respective architectures of the <em>Solid </em>and <em>AT </em>protocols are quite different, they&apos;re pointing to the same Open Social Web, re-built on the principles of self-sovereign data storage.</p><h2 id="personal-data-storage">Personal Data Storage</h2><p>What web-user sovereignty looks like in practice, from the vantage point of atproto, has been expertly illustrated by <a href="https://danabra.mov/">danabra.mov</a></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://overreacted.io/open-social/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Open Social &#x2014; overreacted</div><div class="kg-bookmark-description">The protocol is the API.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://overreacted.io/icon.png?e0852c1e2c7f0e65" alt="Personal data storage is an idea whose time has come"></div></div><div class="kg-bookmark-thumbnail"><img src="https://overreacted.io/open-social/opengraph-image?5b0b970dfd19bb8c" alt="Personal data storage is an idea whose time has come"></div></a></figure><blockquote>Notice that Alice&#x2019;s handle is now <code>@alice.com</code>. It is not allocated by a social media company [like facebook.com/alice]. Rather, her handle is <em>the</em> universal &#x201C;internet handle&#x201D;, i.e. a domain. Alice <em>owns</em> the <code>alice.com</code> domain, so she can <em>use it as a handle</em> on any open social app. (On most open social apps, she goes by <code>@alice.com</code>, but for others she wants a distinct disconnected identity, so she owns another handle she&#x2019;d rather not share.)<br><br>Bob owns a domain too, even though he isn&#x2019;t technical. He might not even know what a &#x201C;domain&#x201D; is. Bob just thinks of <code>@bob.com</code> as his &#x201C;internet handle&#x201D;. Some open social apps will offer you a free subdomain on registration, just like Gmail gives you a free Gmail address, or may offer an extra flow for buying a domain. You&#x2019;re not locked into your first choice, and can swap to a different domain later.<br><br>(...) With open social, Alice&#x2019;s data&#x2014;her posts, likes, follows, etc&#x2014;<em>is</em> hosted on the web itself. Alongside her personal site, Alice now has a <em>personal repository</em> of her data.</blockquote><p>This new paradigm is made technically possible by what the AT protocol refers to as a <a href="https://atproto.wiki/en/wiki/reference/core-architecture/pds" rel="noreferrer">Personal Data Server</a> or PDS for short (what Solid calls a <a href="https://solidproject.org/faq#pod">Pod</a>).</p><p>The notion of a &apos;PDS&apos; quickly comes off as something very technical and nerdy which is why it&apos;s not mentioned once in Dan&apos;s explainer, even though it&apos;s still targeted at an audience of <em>web nerds</em>. But really the only obscure word here is the <em>Server</em>, which in this context is interchangeable with <em>Storage</em>, as in Personal Data Storage.</p><p>Even regular internet users have some mental model of what personal data storage entails, and they know they&#x2019;ve entrusted corporations with way too much of it. As such, most people also have at least an inkling that some sort of <em>collectively owned and operated</em> data storage is likely a better model with much fewer incentives for misconduct.</p><h2 id="data-banking-coops">Data-banking Coops</h2><p>If you&apos;re a regular internet user the PDS paradigm won&apos;t move your data from the cloud to your personal computer. Most people will still rely on an institutional cloud service, but instead of data-banking with a shareholder-controlled corporation most people&#x2019;s data can be entrusted to the equivalent of member-owned <a href="https://en.wikipedia.org/wiki/Credit_union">credit unions</a> for data storage.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.muni.town/content/images/2025/09/IMG_2977.jpeg" class="kg-image" alt="Personal data storage is an idea whose time has come" loading="lazy" width="1418" height="643" srcset="https://blog.muni.town/content/images/size/w600/2025/09/IMG_2977.jpeg 600w, https://blog.muni.town/content/images/size/w1000/2025/09/IMG_2977.jpeg 1000w, https://blog.muni.town/content/images/2025/09/IMG_2977.jpeg 1418w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Source: </span><a href="https://ide.mit.edu/sites/default/files/publications/Data-Cooperatives-final.pdf" rel="noreferrer"><span style="white-space: pre-wrap;">https://ide.mit.edu/sites/default/files/publications/Data-Cooperatives-final.pdf</span></a></figcaption></figure><p>One in every three US adults banks with a Credit Union. Achieving similar or better numbers for data storage is far from inconceivable considering how much our collective experience with Big Banking mirrors that of Big Tech/Social.</p><p>The concept of <a href="https://www.cip.org/blog/data-cooperatives" rel="noreferrer">data cooperatives</a> has already gained a lot of traction in the fediverse with several providers like <a href="https://social.coop/">social.coop</a>, <a href="https://data.coop/">data.coop</a> and <a href="https://cosocial.ca/">cosocial.ca</a> being operational for many years and still going strong. Soon the AT network will have a similarly co-owned institution in <a href="https://northskysocial.com/" rel="noreferrer">Northsky</a>.</p><p>Whether these providers are strictly cooperatives in the formal sense isn&apos;t what&apos;s most important here though; any suffuciently transparent, democratic and community-oriented data bank (like the aforementioned Blacksky, or the forthcoming Eurosky) is a valid steward and co-creator of an Open Social data bank.</p><p>Data Ownership as a conversation changes when data resides primarily with people-governed institutions rather than corporations. Rather than arguing for what kinds of data we <em>ought to be</em> able to download from the corporate silos, the platforms should be asking us what kinds of data they may copy from <em>our servers</em>, and only with strictly temporary allowances.</p><p>And while the separation of user data and social platform is most fully realized today in the AT network, there are exciting signs of <a href="https://github.com/swicg/activitypub-api/issues/17" rel="noreferrer">cross-pollination happening</a> in the ongoing development of atproto&#x2019;s predecessor <a href="https://activitypub.rocks/">ActivityPub</a>. I hope to see similar openness towards technological convergence in Solid for a more <a href="https://writings.thisismissem.social/statement-on-discourse-about-activitypub-and-at-protocol/" rel="noreferrer">pluralistic social web</a>.</p><p>Personal Data Storage has long since escaped containment as a concept pertaining to any specific protocol. Some implementations of it will be more mainstream than others, but pragmatic data coops can be protocol-agnostic and storage formats are transmutable.</p><p>As long as we have sufficient control of our own data there will always be a way to restart our social graph and digital presence elsewhere in the event of platform collapse. Let&#x2019;s make the web personal again.</p><hr><p><em>See also:</em></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://den.dev/blog/be-a-property-owner-not-a-renter-on-the-internet/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Be A Property Owner And Not A Renter On The Internet &#xB7; Den Delimarsky</div><div class="kg-bookmark-description">The year is 2025. The internet in the shape that we&#x2019;ve known it in the early 2000s is no longer there. Or, not quite in the shape that we&#x2019;ve seen it before. This is not just plain nostalgia talking - the vibrant ecosystem of blogs, feeds, personal sites, and forums has been usurped by a few mega-con&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://assets.den.dev/images/icon/apple-touch-icon.png" alt="Personal data storage is an idea whose time has come"><span class="kg-bookmark-publisher">Den Delimarsky</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://assets.den.dev/images/postmedia/be-a-property-owner-not-a-renter-on-the-internet/header.webp" alt="Personal data storage is an idea whose time has come"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.muni.town/digital-homeownership/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Digital Homeownership</div><div class="kg-bookmark-description">You deserve a home on the World Wide Web that&#x2019;s built to keep you safe; a magical place for virtual living that&#x2018;s yours for life, existing in a sociable web.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.muni.town/favicon.ico" alt="Personal data storage is an idea whose time has come"><span class="kg-bookmark-author">Muni Blog</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.muni.town/content/images/2024/10/IMG_2543.jpeg" alt="Personal data storage is an idea whose time has come"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.codinghorror.com/avoiding-walled-gardens-on-the-internet/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Avoiding Walled Gardens on the Internet</div><div class="kg-bookmark-description">I occasionally get requests to join private social networking sites, like LinkedIn or Facebook. I always politely decline. I understand the appeal of private social networking, and I mean no disrespect to the people who send invites. But it&#x2019;s just&#xA0;not for me. I feel very strongly that we</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.codinghorror.com/content/images/size/w256h256/2020/06/3cffc4b347c3587f19fe222caaac69f63b9a5e73.png" alt="Personal data storage is an idea whose time has come"><span class="kg-bookmark-author">Coding Horror</span><span class="kg-bookmark-publisher">Jeff Atwood</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.codinghorror.com/content/images/2025/06/image-247--1-.png" alt="Personal data storage is an idea whose time has come"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[A Brief History of Roomy's Architectures]]></title><description><![CDATA[An overview of Roomy’s architectural iterations, from past to present.]]></description><link>https://blog.muni.town/brief-history-of-roomy-architectures/</link><guid isPermaLink="false">68d4483ab09c5bed5bd30926</guid><category><![CDATA[Roomy]]></category><category><![CDATA[development]]></category><dc:creator><![CDATA[Zicklag]]></dc:creator><pubDate>Thu, 25 Sep 2025 15:43:33 GMT</pubDate><content:encoded><![CDATA[<p>It&apos;s been one month since we released <a href="https://blog.muni.town/roomy-space-alpha-5/" rel="noreferrer">Roomy Alpha 5</a>, where we eluded to working on yet another backend re-design for Roomy. We&apos;ve been hard at work on a proof-of-concept and so far things have been going really well.</p><p>Before getting into the new architecture, though, I think it&apos;s good to do a quick retrospective on how we landed here.</p><hr><p>Roomy&apos;s architecture has undergone many different revisions. Most of the fundamental design tenets carried on in Roomy were first conceptualized four years prior in the Matrix-based <a href="https://blog.muni.town/what-is-commune/">Commune</a> project.</p><p>My own involvement started with our efforts on the <a href="https://a.weird.one/">Weird</a> app.</p><p>The <a href="https://blog.erlend.sh/weird-web-pages">basic idea behind Weird</a> was to give you a simple way to get started with your own personal web pages on your own domain, coupled with web-identity. Something like <a href="https://linktr.ee/">Linktree</a> but with the added ability to form connections and help you find other people working on similar things.</p><p>It was really important to us, even for a simple app like Weird, to start with an architecture that could be:</p><ol><li>Local first, so that you could edit your data even while you were offline, and</li><li>Federated, in that there didn&apos;t have to be just &quot;one&quot; Weird that everybody had to use if you wanted to be connected.</li></ol><p>These were actually not easy at all to accomplish and started a journey of learning and experimentation with distributed protocols. </p><h3 id="the-willow-protocol">The Willow Protocol</h3>
<!--kg-card-begin: html-->
<div style="font-size: 0.8em">
<strong>Related Posts: </strong>
<a href="https://blog.muni.town/weird-happenings/">Weird Happenings</a>,
<a href="https://blog.muni.town/muni-town/">Welcome To Muni Town</a>,
<a href="https://blog.muni.town/weird-2025/">Weird 2025</a>,
<a href="https://blog.muni.town/leaf-atproto-activitypub/">Leaf, ATProto and ActivityPub</a>
</div>
<!--kg-card-end: html-->
<p>After a lot of looking around, the protocol that seemed like it did exactly what we needed was the <a href="https://willowprotocol.org/">Willow Protocol</a>. But its implementation wasn&apos;t ready yet, so we made our own &quot;fake&quot; version of it that would get us just far enough to make Weird work. The plan was to switch to the &quot;real&quot; Willow as soon as it was ready.</p><p>Willow would allow us to replicate bytes, but it didn&apos;t say much about how those bytes were formatted, so that birthed the <a href="https://zicklag.katharos.group/blog/introducing-leaf-protocol/">early ideas</a> for our own Leaf Protocol, which, at the time, was really more of a data interoperability format than a networking protocol.</p><p>Anyway, we spent 6+ months developing on this idea for Weird before making a <a href="https://blog.muni.town/weird-2025/">pre-release</a> of it in December of 2024.</p><h3 id="keyhive">Keyhive</h3>
<!--kg-card-begin: html-->
<div style="font-size: 0.8em">
<strong>Related Posts: </strong>
<a href="https://blog.muni.town/roomy-chat-alpha/">Roomy Chat Alpha</a>,
<a href="https://blog.muni.town/roomy-deep-dive/">Roomy Deep Dive</a>,
<a href="https://blog.muni.town/atproto-isnt-what-you-think/">ATProto Isn&apos;t What You Think</a>,
<a href="https://blog.muni.town/roomy-chat-alpha-2/">Roomy Chat Alpha 2</a>
</div>
<!--kg-card-end: html-->
<p>Around that time we were running into the need to do revisions for content in Weird. This led us into the <a href="https://crdt.tech/">CRDT</a> rabbit hole. CRDTs were a way to track revisions on almost any kind of data and provide optionally realtime collaboration features, too.</p><p>CRDTs are possible to store on the Willow Protocol, but it&apos;s not particularly convenient or efficient. That&apos;s when a couple different people pointed out <a href="https://www.inkandswitch.com/keyhive/notebook/">Keyhive</a>, which was actually similar to Willow in several important ways, but was also CRDT-native.</p><p>This was very compelling, and after doing some digging, I really liked how elegant the Keyhive design was. We thought we could also adapt our Leaf Protocol data format ideas to work with Keyhive.</p><p>This coincided with some other interesting discussions around the <a href="https://atproto.com/">AT Protocol</a>, and the realization that both Willow and Keyhive were hypothetically suitable for realtime chat.</p><p>We realized that there was a big opening here for something that was sorely needed, a <a href="https://blog.muni.town/beyond-discord/">truly usable group chat</a> that supported owning your data and federating with others. I took a week to do an <a href="https://blacksky.community/profile/did:plc:ulg2bzgrgs7ddjjlmhtegk3v/post/3lekxcyo5kc2d" rel="noreferrer">experiment</a>  called Pigeon to get a chat app working with ATProto login, and it went well.</p><p>We decided to pivot from Weird to working on what would become Roomy, with the understanding that Weird could eventually run on the same protocol that Roomy was running on. This is still the plan for Weird once Roomy gets more stable.</p><p>Unfortunately, we kind of had the same problem with Keyhive that we had with Willow: its implementation wasn&apos;t ready yet, so we were still running on a &quot;fake&quot; version we made ourselves.</p><p>After we released an MVP for Roomy we were running into problems with our hand-rolled, completely temporary sync system. We realized that we were going to need something better than our temporary solution soon, and unfortunately we needed it before Keyhive was going to be ready.</p><h3 id="jazz">Jazz</h3>
<!--kg-card-begin: html-->
<div style="font-size: 0.8em">
<strong>Related Posts: </strong>
<a href="https://blog.muni.town/roomy-chat-alpha3/">Roomy Chat Alpha 3</a>,
<a href="https://blog.muni.town/roomy-space-alpha4/">Roomy .space (alpha-4)</a>,
<a href="https://blog.muni.town/roomy-space-alpha-5/">Roomy Alpha 5</a>
</div>
<!--kg-card-end: html-->
<p>This is when <a href="https://jazz.tools/">Jazz</a> entered the picture. Jazz was doing a lot of the things that Willow and Keyhive would have been doing for us. The big thing we needed from all of these protocols was local-first + access control. Not an easy thing.</p><p>Keyhive was theoretically more peer-to-peer oriented than Jazz, and I thought it was uniquely elegant, but Jazz was working right now, and we needed something right now.</p><p>We made the decision to port Roomy from our temporary solution to Jazz with the possibility of switching to Keyhive later, if Jazz didn&apos;t just end up sticking as a final solution.</p><p>This was a major effort and for the <a href="https://blog.muni.town/roomy-space-alpha4/" rel="noreferrer">first pass</a> it looked like things would be working really well. After we started working on the Discord bridge, though, we ran into some problems which are described in more detail in our <a href="https://blog.muni.town/roomy-space-alpha-5/#stress-testing-challenges">alpha 5 post</a>.</p><p>This triggered a lot of thinking about what we <em>really</em> needed to work in Roomy and how we might be able to accomplish our needs with simpler tech that we could tailor to our exact needs.</p><h3 id="leaf-03the-latest-architecture">Leaf 0.3 - The Latest Architecture</h3><p>Finally we reach today, where we have a proof-of-concept of a new system we designed ourselves, essentially from scratch. With all of the reworks in the last several months we&apos;ve had to pinch ourselves to make sure that we weren&apos;t losing our minds thinking we should do another rewrite, but we were feeling the weight of necessity on what was hopefully a last big redo.</p><p>Me and <a href="https://meri.garden/">Meri</a> had a lot of design discussions and, after the alpha 5 release, we both started work on the next POC. We now have a design that is quite simple and, importantly, we are able to adapt it to the needs we have right now. Unlike our earlier hand-rolled and temporary sync solution, we plan on making this solution actually ready for beta, and then production usage. It&apos;s made so that we can start simple and add more sophisticated features gradually as necessary.</p><p>While we had performance problems importing messages from our Discord servers into Jazz, with imports taking hours and me having to restart the script several times because of out-of-memory crashes, the new system can import one of our Discord spaces in 27 seconds.</p><figure class="kg-card kg-image-card"><img src="https://blog.muni.town/content/images/2025/09/image-3.png" class="kg-image" alt="Screenshot from Discord: Just ran the Discord import on our tiny server: Done importing 54930 messages in less than a minute ( 27.342 seconds )" loading="lazy" width="992" height="124" srcset="https://blog.muni.town/content/images/size/w600/2025/09/image-3.png 600w, https://blog.muni.town/content/images/2025/09/image-3.png 992w" sizes="(min-width: 720px) 720px"></figure><p>The sync server is also extremely lightweight, peaking at around 65MiB of memory.</p><p>I&apos;m very happy with the initial performance and I&apos;m hopeful about maintaining that and even improving it as we add the features that we need.</p><p>Lets do a quick overview of how the new architecture works.</p><h4 id="event-streams">Event Streams</h4><p>Each roomy chat space is now an <a href="https://eda-visuals.boyney.io/visuals/event-streams">event stream</a>, and every action you can take in the space is an event. The streams are stored in their own SQLite database on our sync server.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://eda-visuals.boyney.io/visuals/event-streams"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Understanding event streaming</div><div class="kg-bookmark-description">What is event streaming?</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://eda-visuals.boyney.io/images/favicon.ico" alt></div></div><div class="kg-bookmark-thumbnail"><img src="https://eda-visuals.boyney.io/assets/visuals/eda/event-streaming.png" alt></div></a></figure><p>Each stream has a WASM module along with another SQLite cache database, and its job is to control what events come in and out of the stream. Each stream can have a different WASM module, making the sync server generic and usable for different use-cases with different auth strategies.</p><p>Because the WASM module can control which events a user is allowed to read it provides a mechanism for privacy, which is important, even if clients additionally want to encrypt the events to hide them from the server.</p><p>Right now all clients authenticate to the sync server with ATProto. It is very easy to integrate other auth solutions if we want to later, and it is also possible to integrate Keyhive&apos;s authorization and encryption into a stream&apos;s WASM module, which we are going to try later to create encrypted, private groups.</p><p>Clients can subscribe to the event stream and query old events, giving us what we need for realtime chat. This is very simple, but the catch is that it&apos;s not necessarily easy to use a raw event stream in the UI, compared to Jazz which has UI sync built-in.</p><h4 id="sqlite-in-the-browser">SQLite in the Browser</h4><p>To fill this need to query chat data in the browser, we used SQLite again!</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">Apparently we aren&apos;t the only ones wanting to use SQLite in the browser, because <a href="https://www.notion.com/blog/how-we-sped-up-notion-in-the-browser-with-wasm-sqlite">Notion is also using SQLite</a>! This was very handy since we were able to model our SQLite installation off of the strategy that they described in their blog post.</div></div><p>When you join a Roomy space it will download events from the stream and convert them to records in the database that can be efficiently queried from the UI.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.muni.town/content/images/2025/09/image-2.png" class="kg-image" alt="Roomy architecture diagram." loading="lazy" width="646" height="538" srcset="https://blog.muni.town/content/images/size/w600/2025/09/image-2.png 600w, https://blog.muni.town/content/images/2025/09/image-2.png 646w"><figcaption><span style="white-space: pre-wrap;">New Roomy Architecture</span></figcaption></figure><p>Using SQLite, with its fully featured queries and indexes, allows us to access the chat data that we needed <em>way</em> faster than we could with previous solutions. We can load over six thousand chat messages fast enough so that you don&apos;t notice the delay when switching to to a new channel.</p><p>We still need to optimize things so that it <em>isn&apos;t</em> loading the entire chat history when you click on a channel, but it is incredible that you can now scroll through a multi-year channel history without any frame skipping or delays whatsoever.</p><h4 id="caveats">Caveats</h4><p>The major caveat right now is that joining a space requires you to download the <em>entire</em> space history. On a fast network connection, the new system can download around 57k messages totaling about 27MB in something like 8-15 seconds, but that&apos;s <em>quite a while</em> to wait to join a new space, and slower connections will be a lot worse.</p><p>Also, you don&apos;t really <em>want</em> to download the entire history for all chat spaces you join. You only want that for personal spaces, or maybe ones where you are an admin or that you are very involved in and want a local backup of.</p><p>Luckily this problem is very solvable, we just have to hook up a way to index messages on the sync server based on channel and separate core space metadata such as the channel list from the messages so that you can download only the latest messages. We&apos;ll be resolving this issue soon.</p><h2 id="summary">Summary</h2><p>We&apos;ve made great progress on our new architecture in the last month and have made incredible performance gains on some benchmarks that are very important to our use-case.</p><p>We have a subset of the Roomy UI working with the backend, and we are currently working on restoring more of its functionality while fixing bugs and developing the new message schema.</p><p>It is extremely unstable and the links may not last, but we have an experimental <a href="https://dev-lab.roomy.space/">demo instance</a> of the new Roomy code along with a partially imported <a href="https://dev-lab.roomy.space/9f2d488354e02a97d0cbbb76c877e146caac26ff4c6bd8469deeaaf2151faeed?name=Muni%20Town&amp;avatar=https%3A%2F%2Fcdn.bsky.app%2Fimg%2Ffeed_thumbnail%2Fplain%2Fdid%3Aplc%3Aulg2bzgrgs7ddjjlmhtegk3v%2Fbafkreif7yg66lmpag6whvak5w6qzoub55eseotieoa2ncj3jhjucp7rury">test space</a> with some of our Muni Town chat history.</p><p>We are going to be working hard on getting the next release out and hope to have more news on that soon!</p>]]></content:encoded></item><item><title><![CDATA[Roomy – alpha 5]]></title><description><![CDATA[A new Roomy release! This update includes a new website, an update UI, a work-in-progress Discord bridge, and lots of lessons learned.]]></description><link>https://blog.muni.town/roomy-space-alpha-5/</link><guid isPermaLink="false">68a9eea8b09c5bed5bd30449</guid><category><![CDATA[Roomy]]></category><category><![CDATA[Leaf]]></category><dc:creator><![CDATA[Zicklag]]></dc:creator><pubDate>Sun, 24 Aug 2025 17:34:36 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/08/roomy-screenshot-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/08/roomy-screenshot-1.png" alt="Roomy &#x2013; alpha 5"><p>The 5th iteration of Roomy, the gardenable group chat, has just landed!</p><h2 id="new-website">New Website</h2><p>We&apos;ve got a new website, <a href="https://a.roomy.space" rel="noreferrer">a.roomy.space</a>! It&apos;s now our main introduction page for what Roomy is and what we are trying to accomplish.</p><p>As roomy stabilizes we&apos;ll add more explanations and documentation about how Roomy works and how you can use it.</p><figure class="kg-card kg-image-card"><img src="https://blog.muni.town/content/images/2025/08/image-3.png" class="kg-image" alt="Roomy &#x2013; alpha 5" loading="lazy" width="1903" height="1077" srcset="https://blog.muni.town/content/images/size/w600/2025/08/image-3.png 600w, https://blog.muni.town/content/images/size/w1000/2025/08/image-3.png 1000w, https://blog.muni.town/content/images/size/w1600/2025/08/image-3.png 1600w, https://blog.muni.town/content/images/2025/08/image-3.png 1903w" sizes="(min-width: 720px) 720px"></figure><h2 id="new-features">New Features</h2><h3 id="updated-ui">Updated UI</h3><p>In this release, Roomy&apos;s UI got an update to use the <a href="https://flo-bit.dev/ui-kit/" rel="noreferrer">Fox UI</a> framework, which is developed by <a href="https://bsky.app/profile/flo-bit.dev">@flo-bit.dev</a>, who has been leading the UI development for the last two releases.</p><p>This will help us get the UI more stable and avoid chasing little glitches.</p><p>The new UI doesn&apos;t have the same level of theme customization as the old one, and we may add more options in the future, but for now this will help us make sure that, as we add new features, everything works consistently, regardless of the theme that you select.</p><h3 id="work-in-progress-discord-bridge">Work-in-Progress Discord Bridge</h3><p>While not ready for general use, we started working on our Discord bridge, which will allow Discord admins to opt-in to syncing with a Roomy space.</p><p>We partially bridged a couple of our Discord guilds to act as public demo spaces that you can join to test out Roomy:</p><ul><li><a href="https://roomy.space/muni.town" rel="noreferrer">Muni Town</a></li><li><a href="https://roomy.space/spicylobster.itch.io" rel="noreferrer">Spicy Lobster</a></li></ul><p>Right now the spaces are not completely synced and Discord is the &quot;official&quot; source, but we will be working on maturing the bridge to allow fully featured communication between both platforms in the near future.</p><h2 id="stress-testing-challenges">Stress Testing &amp; Challenges</h2><p>Hooking up the Discord bridge was a great stress test for Roomy and revealed some weaknesses that we had to work through.</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-text"><b><strong style="white-space: pre-wrap;">Note:</strong></b> I&apos;m going to go through some semi-technical details about challenges that we ran into, but you can skip to the <a href="#summary">Summary</a> if you just want the quick overview.</div></div><h3 id="permission-system">Permission System</h3><p>While working on the bridge we were noticing some significant slow-downs in the UI compared to previous versions and we also found that the import from Discord into Roomy was going very slow. After some investigation it turned out that the way were were handling permissions with <a href="https://jazz.tools/" rel="noreferrer">Jazz</a>, our sync engine, had a performance problem that was slowing everything down. Our current setup was designed to allow permissions customization on a per-message basis, but that was creating too many permissions objects.</p><p>While it should be possible for Jazz to fix the performance issue, in order to get things functioning right now we worked around it and simplified the permissions model, using the same permissions for all of the messages by the same user.</p><h3 id="bridge-import">Bridge Import</h3><p>Simplifying permissions sped things up dramatically and fixed our UI slow-downs, but we were still having sync timeouts, slow-downs, and out-of-memory crashes while trying to import thousands of messages.</p><p>We haven&apos;t tracked down the source of the issue yet, and it&apos;s possible be that there&apos;s something that we are doing incorrectly, but we&apos;re not sure yet. To get the release out, we decided to import just our two demo guilds, and kept restarting the bridge after crashes until the whole history was imported.</p><p>This got our demo spaces imported, but it&apos;s not something we can let other people try out at this point.</p><h3 id="whole-space-subscription">Whole Space Subscription</h3><p>After working through the import problem, we ran into another issue syncing messages in realtime from Roomy to Discord.</p><p>In Jazz, every chat message, channel, etc. is a separate, collaborative value or <code>CoValue</code> as they are called. When you load a <code>CoValue</code> you can subscribe to all updates to that value so it stays in sync in realtime with other peers.</p><p>This is usually great, and it can work well in the UI so far, but we run into a problem when something like the bridge needs to subscribe to <em>all</em> updates in the entire chat space.</p><p>Because each <code>CoValue</code> must be subscribed to separately, in order for the bridge to detect updates like edits, reactions, etc. to different messages, it would have to open and subscribe to every single chat message in the space. This would take a prohibitive amount of memory on the Discord bridge.</p><p>While it is possible for Jazz to support deep subscriptions in the future, and in way that won&apos;t require keeping all of the values in memory, we don&apos;t have that option yet, so we decided to keep only the channels in memory. This allows us to detect new messages in channels, but we don&apos;t be able to detect edits or reactions on previous messages, or messages in threads.</p><p>This is not acceptable long-term, we will also run into the same deep subscription problem later, when it comes time to implement push notifications. This set us to doing a lot of thinking about different solutions and architectures.</p><h2 id="event-based-architecture">Event-based Architecture</h2><p>After running into the performance and subscription problems, I started brainstorming different designs that would help improve performance and give us a way to subscribe to the entire chat space for notifications / bridging.</p><p>I liked an idea that I had heard of before about using SQLite on the client side as a local store and query engine, and I started taking some inspiration from <a href="https://livestore.dev/">livestore.dev</a>. This led to more brainstorming, and lots of great chatting with my fellow Roomy dev <a href="https://meri.garden/" rel="noreferrer">@meri</a> and a new Muni Town community member, @ndyg.</p><p>After iterating on the idea I think we have a good design plan based on event-sourcing, similar to LiveStore, as well as ideas for how to make it very extensible to handle what we&apos;ll need in the future.</p><p>This new design will end up the third major iteration of our Leaf protocol idea that we&apos;ve been thinking about for over a year and it will hopefully be the final re-architecture of Roomy.</p><p>The plan is to put together a minimal version of the architecture for Roomy alpha 6, and, if it works, to extend it iteratively with extra features and extensibility so it can be a generic framework used outside of Roomy for other apps.</p><p>Consider this a bit of a teaser and we&apos;ll have an in-depth overview of the new design later.</p><h2 id="summary">Summary</h2><p>In short, the UI is coming along great and is getting more stable as we iterate on it. We&apos;ve also go some preliminary work done on a Discord bridge along with lessons learned from the effort.</p><p>We&apos;re running into limitations with <a href="https://jazz.tools">Jazz</a>, our current sync engine, and have started designing a new, simpler iteration of our own sync engine in order to make up for it and give Roomy the performance and features we need to support our specific use-case.</p><p>We&apos;re making great progress, and I can&apos;t wait to come back soon with another update!</p>]]></content:encoded></item><item><title><![CDATA[Roomy .space (alpha-4)]]></title><description><![CDATA[New domain on roomy.space; backend-switch to Jazz for better performance and access controls; BeeKEM decentralized E2EE explained; notification markers for mentions & unreads.]]></description><link>https://blog.muni.town/roomy-space-alpha4/</link><guid isPermaLink="false">685187c5b09c5bed5bd30181</guid><category><![CDATA[Roomy]]></category><dc:creator><![CDATA[flo-bit]]></dc:creator><pubDate>Fri, 20 Jun 2025 19:02:02 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/06/fin_del_concierto_by_quick2004_d6n4g6w.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/06/fin_del_concierto_by_quick2004_d6n4g6w.jpg" alt="Roomy .space (alpha-4)"><p><em>Today&#x2019;s release post is presented by the lead dev of the alpha-4 cycle, </em><a href="https://bsky.app/profile/flo-bit.dev"><em>@flo-bit.dev</em></a></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://flo-bit.dev"><div class="kg-bookmark-content"><div class="kg-bookmark-title">hi, i&#x2019;m florian</div><div class="kg-bookmark-description">hello world! this is my personal website. i&#x2019;m florian, a full-stack software engineer based in berlin.</div><div class="kg-bookmark-metadata"></div></div><div class="kg-bookmark-thumbnail"><img src="https://flo-bit.dev/og.jpg" alt="Roomy .space (alpha-4)"></div></a></figure><p>We&apos;ve just released our forth alpha version of Roomy. In this post I&#x2019;ll talk about what&#x2019;s new, how to migrate and what&#x2019;s next on our roadmap.</p><h2 id="new-domain">New domain</h2><p>While <a href="http://roomy.chat">roomy.chat</a> is a great domain, we&#x2019;re aiming to be more than just a group chat, which our new domain hopefully reflects:</p><p>Introducing: <a href="https://roomy.space" rel="noreferrer"><strong>roomy.space</strong></a><strong>!</strong></p><p>You should automatically get redirected when trying to visit legacy <code>roomy.chat</code> domain.</p><h2 id="backend-switch-yet-again">Backend switch (yet again)</h2><p>As already teased in the last post, we switched our data syncing layer from our custom placeholder solution to the open source <a href="https://jazz.tools/">Jazz</a> sync engine.</p><p>This enabled us to quickly add some pretty essential features:</p><ul><li><strong>Encryption and access controls</strong> <br>In earlier versions, anyone could in theory do basically anything, for example edit someone else&#x2019;s messages or clear the list of banned users in a space. Thanks to jazz&#x2019;s built in access controls this should now be impossible (we haven&#x2019;t extensively tested this yet, though).</li><li><strong>Public access without logging in</strong> <br>While we could have enabled that earlier, for spam protection we didn&#x2019;t allow anyone to view spaces before, without being signed in. Now you can actually view spaces without a user account and only interactions require you to sign in.</li><li><strong>Better performance</strong> <br>We&#x2019;ll do some extensive testing over the next weeks, but it already feels snappier, especially for channels with lots of messages.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.muni.town/content/images/2025/06/IMG_2908.jpeg" class="kg-image" alt="Roomy .space (alpha-4)" loading="lazy" width="1668" height="791" srcset="https://blog.muni.town/content/images/size/w600/2025/06/IMG_2908.jpeg 600w, https://blog.muni.town/content/images/size/w1000/2025/06/IMG_2908.jpeg 1000w, https://blog.muni.town/content/images/size/w1600/2025/06/IMG_2908.jpeg 1600w, https://blog.muni.town/content/images/2025/06/IMG_2908.jpeg 1668w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Our major refactor to Jazz only took 2-3 weeks of focused work, which is a great testament to the minimum-viable feature-completeness of Jazz!</span></figcaption></figure><p>Most importantly for us, we can now focus on new features and UI/UX improvements instead of having to spend lots of time fixing bugs in our placeholder backend.</p><p>The Jazz team knows we are huge fans of the <a href="https://github.com/inkandswitch/keyhive">Keyhive</a> design and its unique affordances for building &#x2018;sovereign communities&#x2019;. Keyhive isn&apos;t ready for use yet and won&#x2019;t be for <em>some time</em> still, so we will go as far as Jazz can possibly take us&#x2014;which might be very far indeed if Jazz can provide those same affordances in its own way.</p><p>In parallel with our production-service being built with Jazz we will be contributing to and experimenting with Keyhive. On that note...</p><h3 id="beekem-explained">BeeKEM explained</h3><p>Another fresh member of the team, <a href="https://meri.garden">Meri</a>, has been studying Keyhive (among other cool things we will get into in following releases), starting at the distributed-encryption layer <a href="https://meri.garden/a-deep-dive-explainer-on-beekem-protocol/">BeeKEM</a>:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://bsky.app/profile/meri.bsky.social/post/3lrr3ndwtms2c"><div class="kg-bookmark-content"><div class="kg-bookmark-title">meri leeworthy &#x1F338; (@meri.bsky.social)</div><div class="kg-bookmark-description">I&#x2019;m pretty excited about @inkandswitch.com&#x2019;s Keyhive project, and I really wanted to feel solid on the novel key management approach they use called BeeKEM - so I wrote this explainer article about it! Tysm to @expede.wtf for helping me make some sense of you and the team&#x2019;s work &#x2728;
https://meri.garde&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://web-cdn.bsky.app/static/apple-touch-icon.png" alt="Roomy .space (alpha-4)"><span class="kg-bookmark-author">Bluesky Social</span></div></div></a></figure><blockquote>I&#x2019;ve spent the last year working on local-first apps, most recently with&#xA0;<a href="https://muni.town/">Muni Town</a>. For me, &#x2018;local-first&#x2019; isn&#x2019;t just a technical architecture &#x2014; it&#x2019;s a political and social stance. It&#x2019;s about shifting control: from remote servers and top-down central authorities deciding how data, workflows, and communities operate, to individuals and communities reclaiming that control and gaining&#xA0;<a href="https://meri.garden/autonomy">autonomy</a>. Seen this way, privacy and consent aren&#x2019;t add-ons &#x2014; they&#x2019;re foundational, just as critical as sync or data locality.<br><br>Ink &amp; Switch&#x2019;s&#xA0;<a href="https://meri.garden/keyhive"><em>Keyhive</em></a>&#xA0;project is a capabilities-based system for&#xA0;<a href="https://meri.garden/conflict-free-replicated-data-types">CRDT</a>&#xA0;authorisation and sync that opens up real possibilities for privacy-preserving local-first apps. Libraries like Automerge, Yjs, and Loro have already made it viable to build real-time collaborative apps without relying on a centralised authority to manage consistency. Yet in practice, we still lean on central servers for sync &#x2014; with all the privacy implications that entails.</blockquote><h2 id="other-new-features">Other new features</h2><p>While rewriting our backend, we also couldn&#x2019;t resist to add one or two new features, the main two being:</p><ul><li>Unread markers for channels</li><li>Notification markers for mentions and replies</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.muni.town/content/images/2025/06/roomy-notifications.jpg" class="kg-image" alt="Roomy .space (alpha-4)" loading="lazy" width="664" height="410" srcset="https://blog.muni.town/content/images/size/w600/2025/06/roomy-notifications.jpg 600w, https://blog.muni.town/content/images/2025/06/roomy-notifications.jpg 664w"><figcaption><span style="white-space: pre-wrap;">Unread and notification markers</span></figcaption></figure><p>We removed <strong>Custom Space Domains</strong> for now, but will soon re-introduce them using your Bluesky account, which will hopefully make this both easier (just a button click in the channel settings), faster (as you don&#x2019;t have to wait for a DNS record to propagate) and useable without a custom domain (just use your Bluesky handle).</p><h2 id="migration">Migration</h2><p>If you already had a space before, this is how you can migrate it to the new version:</p><ol><li>Go to the old version at <a href="https://alpha2.roomy.chat" rel="noreferrer">alpha2.roomy.chat</a> and export your space in the space settings, which will download a zip file</li><li>Remove &quot;<em>alpha2.</em>&quot; from the url address, click &quot;import space&quot;, upload the zip file and wait until it finished importing, your channels, threads and messages should all be imported, but all members will have to join your space again.</li></ol><h2 id="next-on-the-roadmap">Next on the roadmap</h2><ul><li>UI redesign<ul><li>Cleaning up all the buttons, etc that cropped up</li><li>Unify the design and make it easier to understand and use</li><li>Space home page</li></ul></li><li>Discord import and bridge</li><li>More direct Bluesky integration<ul><li>Integrated Bluesky Feeds</li><li>Use your handle as a space name</li><li>Integrate Bluesky DMs</li></ul></li><li>Improve Pages (better editing, smarter rendering)</li></ul>]]></content:encoded></item><item><title><![CDATA[Company as a Commons]]></title><description><![CDATA[What if excess wealth derived from business couldn't be privatized? Through the levers of steward-ownership, companies can protect their purpose-oriented long term mission from the maligned incentives of absentee stakeholders.]]></description><link>https://blog.muni.town/company-as-commons/</link><guid isPermaLink="false">67cd9a1ab09c5bed5bd2f5a0</guid><category><![CDATA[Sustainability]]></category><category><![CDATA[Vision]]></category><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Sat, 07 Jun 2025 13:16:03 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/06/steward-ownership-principles.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/06/steward-ownership-principles.png" alt="Company as a Commons"><p>Let&apos;s talk about business practice as a net-good within the commons, as opposed to an external extractor of it.</p><p>I&apos;ve previously alluded to our ambitions to build a non-extractive, <a href="https://en.wikipedia.org/wiki/Post-growth">post-growth</a> company:</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://blog.muni.town/weird-inc/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Weird inc.</div><div class="kg-bookmark-description">Mindfully growing a non-extractive company towards a &#x2018;steward ownership&#x2019; end state.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.muni.town/favicon.ico" alt="Company as a Commons"><span class="kg-bookmark-author">Muni Blog</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.muni.town/content/images/2024/12/turtle_character_design_by_atarts_dbznn5t-1-.jpg" alt="Company as a Commons"></div></a><figcaption><p><span style="white-space: pre-wrap;">Weird has since been subsumed by Roomy to become &apos;Roomy Persona&apos;, our community platform&apos;s (B2B) equivalent of a Discord Nitro (B2C).</span></p></figcaption></figure><p>To recap, while I appreciate that a company like <a href="https://en.wikipedia.org/wiki/Bluesky">Bluesky</a> did its very best to protect the laudable values and vision of its founders, there&apos;s got to be a better alternative to the prevailing company-formation model than what they&apos;ve earnestly admitted results in The Company inevitably turning adversarial towards its own product and values in the long term.</p><blockquote>While I find any company that has taken tens of millions in VC money innately unnerving, I doubt there was any other way for Bluesky to build a desperately needed offramp for X/Twitter in time for the mass migration that consequently happened, so I commend them for navigating those perilous waters as best they could.<br><br>That said, I don&apos;t fully agree with this statement:<br>&gt; Businesses live &amp; die on a shorter timeline than people<br><br>That&apos;s only true in the modern era, especially for tech companies. There&apos;s a reason why we&apos;ve got a whole bunch of people walking around with last names like &apos;Carpenter&apos; and &apos;Mason&apos;. <a href="https://www.openculture.com/2024/08/how-the-oldest-company-in-the-world-has-survived-nearly-1500-years.html">Kong&#x14D; Gumi</a> famously existed independently for nearly 1500 years before it finally succumbed to modern capital pressures.<br><br>So while I agree with the general strategy of designing products and ecosystems under the assumption that their commercial benefactors are &quot;<em>possible </em>future adversaries&quot;, it must not be considered an inevitability, lest it become a self-fulfilling prophecy.<br><br>A tech company with the longevity of <a href="https://en.wikipedia.org/wiki/IBM">IBM</a> (113yrs old) but the ethical backbone of <a href="https://www.patagonia.com/ownership/">Patagonia</a> is possible.</blockquote><p>That inquiry has led me to the concept of <a href="https://en.wikipedia.org/wiki/Steward-ownership"><em>steward ownership</em></a><em>. (<strong>Update:</strong> In October 2025 I distilled the essence of these ideas into a 3-minute talk titled </em><a href="https://blog.erlend.sh/your-self-as-a-future-adversary" rel="noreferrer"><em>Your self as a future adversary</em></a><em>.)</em></p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/Z2Uy_ODDiZo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Transforming Ownership to Create a Better Economy | Armin Steuernagel | TEDxZurich"></iframe></figure><blockquote><em>The most profound act of corporate responsibility for any company today is to rewrite its corporate bylaws or articles of association in order to redefine itself with a living purpose rooted in regenerative and distributive design and then to live and work by it.</em><br><br>~ <a href="https://www.kateraworth.com/" rel="noreferrer">Kate Raworth</a>, author of <a href="https://doughnuteconomics.org/">Doughnut Economics</a></blockquote><p>Rather than being resigned to a story of &quot;company as a future adversary&quot;, we can utilize the framework of steward-ownership to reify our vision for &quot;company as a future commons&quot;.</p><p><strong>Steward-ownership</strong>&#xA0;is about structuring a company in a way that separates economic rights (to money) from voting rights (to decision-making power). These models have been tested in modern forms for over a century.</p><p>Often structured as trusts, foundations, or employee-owned companies, all of these companies have fundamentally redefined ownership by committing to two principles:</p><p>(1)&#xA0;<strong>Self-governance&#xA0;</strong>&#x2014; Control remains inside the company with the people directly connected to stewarding its operation and mission, not external investors or absentee owners. With the control of the company held in a trust, it can no longer be bought or sold.</p><p>(2)&#xA0;<strong>Profits serve purpose&#xA0;</strong>&#x2014; Wealth generated by these businesses cannot be privatized. Instead, profits serve the mission of the company, and are either reinvested in the company, stakeholders, or donated. Investors and founders are fairly compensated with capped returns/dividends.</p><p>Considered an alternative to the destructive paradigm of <a href="https://en.wikipedia.org/wiki/Shareholder_primacy">shareholder primacy</a>, steward-ownership can be implemented using various legal forms depending on the type of company and jurisdiction. The less established the legal framework, the more creative one needs to get.</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://medium.com/@purpose_network/whats-steward-ownership-14efc6caf9e7"><div class="kg-bookmark-content"><div class="kg-bookmark-title">What&#x2019;s steward-ownership?</div><div class="kg-bookmark-description">Rethinking Ownership in the 21st Century</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156" alt="Company as a Commons"><span class="kg-bookmark-author">Medium</span><span class="kg-bookmark-publisher">Purpose</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://miro.medium.com/v2/da:true/bd978bb536350a710e8efb012513429cabdc4c28700604261aeda246d0f980b7" alt="Company as a Commons"></div></a><figcaption><p><span style="white-space: pre-wrap;">The concept of &#x201C;steward-ownership&#x201D; harnesses the power of entrepreneurial for-profit enterprise, while preserving a company&#x2019;s essential purpose to create products and services that deliver societal value and protecting it from extractive capital.</span></p></figcaption></figure><h2 id="business-for-purpose">Business for Purpose</h2><p>Unlike a coop or a Public Benefit Corporation which can be <a href="https://en.wikipedia.org/wiki/Visa_Inc.#Visa_Europe">acquired</a> or redesignated, the principles of a steward-owned company are binding in the long-term.</p><p>The distinction is made painfully clear in the case of the well-intentioned social network <a href="https://waxy.org/2024/01/the-quiet-death-of-ellos-big-dreams/">Waxy</a>:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://waxy.org/2024/01/the-quiet-death-of-ellos-big-dreams/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">The Quiet Death of Ello&#x2019;s Big Dreams - Waxy.org</div><div class="kg-bookmark-description">Ello launched in 2014 with big dreams, but the artsy social network suddenly shut down last year, deleting nine years of posts without warning. What happened?</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://waxy.org/wp-content/uploads/2016/10/square_logo.png" alt="Company as a Commons"><span class="kg-bookmark-author">Waxy.org</span><span class="kg-bookmark-publisher">Andy Baio</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://waxy.org/wp-content/uploads/2024/01/image-10-1024x640.png" alt="Company as a Commons"></div></a></figure><p>Their founding charter as a PBC ambitously stated &quot;in the strongest possible legal terms&quot; that:</p><blockquote>1) Ello shall never make money from selling ads;<br>2) Ello shall never make money from selling user data; and<br>3) In the event that Ello is ever sold, the new owners will have to comply by these terms.<br><br>Ello exists for the benefit of the creative community, and we will never serve ads or sell personal data.</blockquote><p>Spoiler at the end of the article:</p><blockquote>Despite their idealist manifesto and their Bill of Rights, I don&#x2019;t believe they could ever truly be in partnership with their community once they were taking large amounts of venture funding. All of their ideals and big dreams were easily undone, even the legal restrictions they defined in their Public Benefit Corporation charter:<br><br>1) Ello made money from selling ads to third parties;<br>2) Ello made money selling their user data to a third party;<br>3) Ello was sold, and the new owners didn&#x2019;t comply with those terms.</blockquote><p>We&apos;ve got to do better than that. <strong>Surely we can do better than that!</strong></p><p>Just like <a href="https://purpose-schweiz.org/independently-to-steward-ownership/abgrenzung-zu-anderen-modellen">other forms</a> of equitable and participatory co-ownership, steward ownership is not a silver bullet. Yet it leans heavily toward broad rather than narrow power distribution and legally preempts the most common predatory tactics of the hypercapitalized global marketplace.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://medium.com/@purpose_network/want-purpose-driven-businesses-rethink-ownership-3684b9bc3ae4"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Want Purpose-Driven Businesses? Rethink Ownership.</div><div class="kg-bookmark-description">If we want to create more sociable businesses, we need more than purpose-statements. We need to ask: who holds power in companies?</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156" alt="Company as a Commons"><span class="kg-bookmark-author">Medium</span><span class="kg-bookmark-publisher">Purpose</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://miro.medium.com/v2/resize:fit:1200/1*wWewvk-xgn8h-Jp5pjCzMg.jpeg" alt="Company as a Commons"></div></a></figure><blockquote>Meaningful change requires us to address the fundamental structural deficiencies of our system, by rethinking the goals and incentives that guide decision-making in companies. We need to ask ourselves: who holds power and what is motivating their decisions? To create new solutions that harness the potential of capitalism (entrepreneurship, innovation, competition, a decentralized economy) and move beyond its failures (greed, consolidation, inequality), we must challenge one of the fundamental paradigms of capitalism: the understanding and definition of&#xA0;<em>corporate ownership</em>.<br><br>Over the last two centuries, there have been two main mechanisms allocating corporate ownership: (1) buying/selling a business and (2) family succession/inheritance. The former sells the &#x201C;steering wheel&#x201D; of the company to the highest bidder, the latter passes it to heirs. These have been the two primary mechanisms of capital and ownership-allocation: the principles of (1) money and (2) blood. The corresponding motivational mechanisms have been profit-maximization and wealth building. In this paradigm, a company is something you own and your objective is to profit from it.<br><br>(...)<br><br>In Denmark, the combined market capitalization of steward-owned corporations represents&#xA0;<a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3112766" rel="noopener ugc nofollow">60% of the entire value of the Danish stock market</a>index. Studies from Copenhagen University and Yale University with data from Danish foundation-owned (=steward-owned) companies show that foundation-owned companies have a higher survival probability than conventionally-owned companies. While other conventionally-owned companies have survival probability 10% after 40 years, foundation-owned companies have a&#xA0;<a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2725462" rel="noopener ugc nofollow">60% survival probability</a>&#xA0;over the same period. In addition, foundation-owned companies have a higher employee retention rate and pay higher wages, while at the same time being&#xA0;<a href="https://www.cbs.dk/en/research/departments-and-centres/department-of-international-economics-and-management/center-corporate-governance/news/steen-thomsen-publishes-book-the-danish-industrial-foundations" rel="noopener ugc nofollow">similarly profitable</a> as non-foundation-owned companies. Foundation-owned companies also have a strong reputation among consumers.<br><br><strong>Steward-ownership not only enables companies to better internalize externalities, it also helps combat the growing wealth gap and inequality caused by inherited wealth accumulation.</strong> Because steward-owned companies cannot be inherited, they help prevent dynastic wealth accumulation. What&#x2019;s more, they prevent owners from siphoning rent off of businesses. Instead, steward-owned companies are &#x201C;self-owned.&#x201D; <strong>These businesses belong to the commons, serving their purpose and all stakeholders who contribute to their successes and helping to create a more equitable, regenerative economy. Capital is in this sense democratized.</strong></blockquote><p>Mainstream examples include <a href="https://www.patagonia.com/ownership/">Patagonia</a> (US),&#xA0;<a href="https://en.wikipedia.org/wiki/Mozilla_Corporation">Mozilla</a> (US), <a href="https://www.sharetribe.com/" rel="noreferrer">Sharetribe</a> (Finland), <a href="https://en.wikipedia.org/wiki/Novo_Nordisk">Novo Nordisk</a>&#xA0;(Denmark),&#xA0;<a href="https://purpose-economy.org/en/companies/ecosia/">Ecosia</a> (Germany) and&#xA0;<a href="https://en.wikipedia.org/wiki/Bosch_(company)">Bosch</a>&#xA0;(Germany). They&apos;re not all prime exemplars of post-growth enterprises, but they&apos;re still far more transparent and democratically run than their respective peers.</p><p>For a modern take we can look to <a href="https://www.postgrowthguide.com/blog/vyld">Vyld</a>, a biotech company fom Germany established in 2021. As a producer of women&apos;s health products made of seaweed it was paramount for Vyld that their company was as <em>good </em>as their product.</p><blockquote>It just doesn&#x2019;t make sense to produce a great, sustainable product, but<br>then have an exploitative company structure and culture.</blockquote><p>Instead of going the easiest route with VC capital that expects 10x-50x hypergrowth across 5-8 years for an equal or bigger ROI multiplier, they opted for far more limited amounts of capital from investors supportive of incremental growth and a fixed (e.g. 3x cap) return on investment, without giving away any voting control in the company. This way Vyld cannot be bought up by <a href="https://en.wikipedia.org/wiki/Procter_%26_Gamble">P&amp;G</a> only to be relegated to green-washing in a megacorp.</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F4B0;</div><div class="kg-callout-text">Want a deeper dive into the maligned incentives of venture capital? <a href="https://www.techpolicy.press/how-venture-capital-warps-the-world/">Listen to Catherine Bracy</a>, author of <a href="https://www.penguinrandomhouse.com/books/723091/world-eaters-by-catherine-bracy/" rel="noreferrer">&quot;World Eaters: How Venture Capital is Cannibalizing the Economy&quot;</a>.</div></div><h2 id="steward-owned-roomy-corp">Steward-owned Roomy corp.</h2><p>Steward Ownership isn&#x2019;t yet a box you can check off with ease, though in a few select locations that will soon change thanks to persistent pioneers in the <a href="https://www.linkedin.com/posts/mrieback_uitgangspunten-rvpdf-activity-7287451932313440256-cJQF/" rel="noreferrer">Netherlands</a> and <a href="https://www.linkedin.com/feed/update/urn:li:activity:7315774428951269376/" rel="noreferrer">Germany</a>. (<a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5178366">Exhaustive Summary</a>)</p><p>For most places still it&#x2019;s more like a voluntary self-certification of equitable co-ownership.<br><br>Implementing this in my home country of Norway (and possibly also in the US, depending on how strange our geopolitical situation gets in the coming months) is going to require novel Articles of Association that set us up with a public commitment towards an &#x2018;exit to steward ownership&#x2019;, closely related to the notion of &apos;<a href="https://www.colorado.edu/lab/medlab/exit-to-community">exit to community</a>&apos;.</p><p>Documents like this blog post are part of that public promise. Another one is our <a href="https://muni.town/values">Values</a> page.</p><blockquote><strong>What do we work for:</strong><br>We work cooperatively to enrich The Commons, in service of the global community.</blockquote><blockquote><strong>Why we do the work:</strong><br>The Commons<a href="https://en.wikipedia.org/wiki/Commons">[1]</a><a href="http://www.onthecommons.org/about-commons">[2]</a><a href="https://thinklikeacommoner.com/">[3]</a>&#xA0;is what sustains us and our communities, so enriching&#xA0;<em>it</em>&#xA0;is to enrich our selves and those in our localities (digital or otherwise) in an ecologically sustainable manner.</blockquote><p>In much the same way that <a href="https://purpose-economy.org/en/companies/patagonia/">Patagonia</a> is obligated to reinvest its profits into the environmental ecosystem it extracts from, Weird inc. (or Roomy corp.) is obligated to reinvest its profits into the commons, primarily in the <a href="https://en.wikipedia.org/wiki/Digital_commons_(economics)">digital realm</a> by funding its open source dependencies.</p><p>Any investments into our venture (our first modest angel investment will be announced shortly) will only be accepted on the condition that our path towards becoming a fully steward-owned company is unimpeded.</p><p>We think the commons-owned company is the scarcely discussed <em>middle way</em>.</p><p>Here we are, anguishing over whether we should relinquish what little remains of our shared resources to Big State or Big Capital, meanwhile there was a third, much less hazardous alternative available to us all along. Well, not so readily available just yet, but this form of collective ownership can quite literally be imagined into being if only we believe in it enough to write our own rules for a fairer game that isn&apos;t predicated on top-down authority.</p><hr><h4 id="further-reading">Further Reading</h4><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.corporate-rebels.com/blog/steward-ownership"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Steward-ownership: For Entrepreneurs Who Want to Make a Positive&#x2026;</div><div class="kg-bookmark-description">Have you heard about steward-ownership? If not, you probably heard that Patagonia&#x2019;s founder, Yvon Chouinard, is giving away his company to fight climate&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.corporate-rebels.com/assets/img/corporate-rebels-favicon.png" alt="Company as a Commons"><span class="kg-bookmark-author">Corporate Rebels</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://corporate-rebels.imgix.net/general/Version-2-Rec.jpg?auto=format&amp;crop=focalpoint&amp;domain=corporate-rebels.imgix.net&amp;fit=crop&amp;fp-x=0.5&amp;fp-y=0.5&amp;h=630&amp;ixlib=php-3.3.1&amp;q=82&amp;w=1200&amp;s=da7dc7868194395dc8ded5ef644e2cec" alt="Company as a Commons"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.sharetribe.com/balanced/steward-ownership-is-capitalism-2-0/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Steward-ownership is capitalism 2.0</div><div class="kg-bookmark-description">This post dives into the background and practice of steward-ownership and how we&#x2019;re applying it at Sharetribe.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.sharetribe.com/apple-touch-icon.png" alt="Company as a Commons"><span class="kg-bookmark-author">Sharetribe</span><span class="kg-bookmark-publisher">Sharetribe</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.prismic.io/sharetribe/d3e88d42-7e50-4262-bf04-f6d3915ef883_1_7qJBkNMcJ2XbYXV1zZv2yA.jpeg?auto=compress%2Cformat&amp;fit=max" alt="Company as a Commons"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://medium.com/bettersharing/how-to-build-companies-that-are-a-force-for-good-in-society-33163843033e"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to build companies that are a force for good in society</div><div class="kg-bookmark-description">Most technology startups say they&#x2019;re &#x201C;making the world a better&#x201D; place as anyone who watches the TV show Silicon Valley knows. Reality is&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156" alt="Company as a Commons"><span class="kg-bookmark-author">Better sharing</span><span class="kg-bookmark-publisher">Juho Makkonen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://miro.medium.com/v2/resize:fit:1200/1*4aK1MCwOStCcRUyOJoAelQ.jpeg" alt="Company as a Commons"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://medium.com/bettersharing/on-what-matters-3941197db5"><div class="kg-bookmark-content"><div class="kg-bookmark-title">On what matters</div><div class="kg-bookmark-description">This post was originally published in Sharetribe&#x2019;s internal communication channel. I wrote it to describe to the team what motivates me in&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156" alt="Company as a Commons"><span class="kg-bookmark-author">Better sharing</span><span class="kg-bookmark-publisher">Juho Makkonen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://miro.medium.com/v2/resize:fit:1200/1*yqP2jDSZhVHa1y50fC72CA.jpeg" alt="Company as a Commons"></div></a></figure><p><em>And a topic for another day: Regenerative Economics &#x267B;&#xFE0F;</em></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://accidentalgods.life/this-is-how-we-build-the-future-teaching-regenerative-economics-at-all-levels-with-jennifer-brandsberg-engelmann/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">This is how we build the future: Teaching Regenerative Economics at all levels with Jennifer Brandsberg-Engelmann</div><div class="kg-bookmark-description">How do we let go of the sense of scarcity, separation and powerlessness that defines the ways we live, care and do business together? How can we best equip our young people for the world that is coming - which is so, so different from the future we grew up believing was possible?</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://accidentalgods.life/wp-content/uploads/2024/04/cropped-deer-1200-bright-270x270.jpg" alt="Company as a Commons"><span class="kg-bookmark-author">ACCIDENTAL GODS</span><span class="kg-bookmark-publisher">everydaywild</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://accidentalgods.life/wp-content/uploads/2025/06/iStock-450137535-1200.jpg" alt="Company as a Commons"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Roomy Chat Alpha 3]]></title><description><![CDATA[A whole bunch of first-pass features; A path towards Roomy/Weird convergence; Temporary Backend Pivot (building on jazz.tools 🎶 for production-readiness).]]></description><link>https://blog.muni.town/roomy-chat-alpha3/</link><guid isPermaLink="false">681a778fb09c5bed5bd2fd7b</guid><category><![CDATA[Roomy]]></category><category><![CDATA[Weird]]></category><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Thu, 05 Jun 2025 10:36:17 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/06/spring_by_gydw1n_dd3nssv.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/06/spring_by_gydw1n_dd3nssv.jpg" alt="Roomy Chat Alpha 3"><p>It has been a while since <a href="https://blog.muni.town/roomy-chat-alpha-2/">alpha-2</a>, but we&apos;re finally ready for our third alpha release, helped along by several new contributors! Read on for a clarification on the Roomy/Weird co-existence and our impending transition to Jazz.</p><h4 id="feature-highlights">Feature Highlights</h4><p>We&apos;ve gotten tons done in the last month, rather quietly so as we&apos;ve still got some reliability engineering pending that&apos;s keeping us somewhat in limbo; we&apos;re due for more production testing in a few weeks.</p><ul><li>Overall more mobile friendliness and polish, courtesy of <a href="https://github.com/michaelwschultz" rel="noreferrer">@michaelwschultz</a></li><li><a href="https://github.com/muni-town/roomy/pull/95">desktop/mobile app PoC</a> (ideally including test-stage publication to play store (maybe fdroid first) and TestFlight) </li><li><a href="https://github.com/muni-town/roomy/pull/212">Boards</a> &#x1F6F9; (essentially done but could use a bit further forumification, e.g. reply-counts etc., and the toggle will be taken out of the sidebar)</li><li><a href="https://github.com/muni-town/roomy/pull/132">Basic Moderation</a></li><li><a href="https://github.com/muni-town/roomy/pull/265">Search</a></li><li><a href="https://github.com/muni-town/roomy/pull/93">Pages</a>&#x1F4C3; (v0.1 proof-of-concept done with BlockNote. Still needs lots of polish.)Pages</li><li><a href="https://github.com/muni-town/roomy/issues/133">Login/register with web address</a> (via Bluesky ID or [soon] Roomy ID as well as BlackSky, NorthSky etc.)</li><li><a href="https://bsky.app/profile/flo-bit.dev/post/3ln27oufxn22n" rel="noreferrer">Roomy 3D Worlds!</a> &#x1F3DD;&#xFE0F; (new version cooking in <a href="https://github.com/flo-bit/roomy-worlds">roomy-worlds</a>)</li></ul><p>Dedicated posts will follow for all of these as they reach minimally production-grade maturity in the coming weeks/months.</p><h2 id="roomy-and-weird">Roomy and Weird</h2><p><a href="https://github.com/muni-town/weird" rel="noreferrer">Weird</a> may have appeared rather neglected these last few months, but now that Roomy has mostly settled our architecture for a &quot;local-first social media&quot; application engine, Weird will be ported over as an extension of the Roomy core.</p><p>The relationship between Roomy &amp; Weird is highly analogous to WordPress &amp; <a href="https://bbpress.org">bbPress</a>, a modular blog engine with a forum(chat) extension.</p><p>Roomy+Weird just does the opposite: A modular chat engine (Roomy) with a website/blog (Weird) extension. <a href="https://blog.muni.town/chat-is-minimum-viable-anything/">We consider messaging more fundamental</a>; it&#x2019;s the primordial staging ground for <em>identity-making</em> in the digital realm.</p><p>Practically everyone in the world has a digital chat-identity, usually a handful. Meanwhile maybe 0.01% of people have a website/blog-identity&#x2014;more like 1-10% when counting microblogs, but still not nearly as pervasive as <em>chat</em>.</p><p>Subsequently we&apos;ve begun distinguishing between the two post-modes that Roomy and Weird occupy respectively as:</p><ul><li><strong>Roomy:</strong> filled-room posting&#x2014;convivial, group-first.</li><li><strong>Weird:</strong> empty-room posting&#x2014;solitary, individual-first.</li></ul><p>Yet before we had a chance to complete this technical transition and the slight rebranding it would entail, <strong>someone submitted Weird to HN and we </strong><a href="https://news.ycombinator.com/item?id=43691891"><strong>trended to the front page</strong></a><strong>!</strong></p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F937;</div><div class="kg-callout-text">It&apos;s a bit unfortunate that we didn&apos;t get to reveal Weird to the world on our own terms with our most up-to-date messaging, but at least we&apos;ve got proof that the essence of our pitch is resonating with people.</div></div><p>Even though the plan of remaking Weird as a Roomy extension still feels like our best long term bet, we&#x2019;ve organically defaulted to a standalone implementation to prototype this thing, primarily in <a href="https://github.com/meri-leeworthy/leaf-render">leaf-render</a> by <a href="https://meri.garden/">Meri Leeworthy</a> who previously worked on <a href="https://github.com/meri-leeworthy/organ-pages">organ-pages</a> and loads of other tech that&apos;s superaligned with the Muni tech stack.., so we&apos;re having a go at joining our projects together &#x1F49E;</p><ul><li><a href="https://meri.garden/Leaf">https://meri.garden/Leaf</a></li><li><a href="https://meri.garden/Leaf%20Render%20Update%200">https://meri.garden/Leaf%20Render%20Update%200</a></li></ul><p>You can kinda think of Weird as a startup venture that is intentionally building towards a &#x201C;Roomy acquisition&#x201D;, the way a lot of VC startups are explicitly built to be acquired by Big Tech. Except of course in our case what happens isn&apos;t an &quot;exit&quot; but rather an amicable merger of two things forming a new and greater whole together.</p><p>(Stay tuned for our forthcoming post on steward-ownership for more on our aspirational company structure.)</p><h2 id="temporary-backend-pivot">Temporary Backend Pivot</h2><p>Right now, Roomy is built on the <a href="https://loro.dev/" rel="noreferrer">Loro</a> CRDT with a simple, custom sync protocol, but we don&apos;t really want to be using our own sync protocol. A sync protocol is a project in-and-of-itself, and we want to be able to focus on our app. That said, our planned sync engine, <a href="https://github.com/inkandswitch/keyhive">Keyhive</a>, is not ready for use yet, so we just threw our own thing together quickly to get Roomy working.</p><p>At this point we are feeling a bit of friction because our temporary sync engine isn&apos;t cutting it. We&apos;ve got performance issues, and we also have a limited ability to secure chat spaces against bad actors with our moderation tools.</p><p>For our next release we are transitioning to <a href="https://jazz.tools" rel="noreferrer">Jazz</a>, which we&apos;ve deemed our best bet for getting to production-readiness asap.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://jazz.tools/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Jazz - Whip up an app</div><div class="kg-bookmark-description">Jazz gives you data without needing a database &#x2014; plus auth, permissions, files and multiplayer without needing a backend. Do everything right from the frontend and ship better apps, faster.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://jazz.tools/favicon.ico" alt="Roomy Chat Alpha 3"><span class="kg-bookmark-author">Jazz</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://jazz.tools/opengraph-image?c9ebe20ad3d200fb" alt="Roomy Chat Alpha 3"></div></a></figure><p>Using Jazz now will allow our UI developers to continue improving the app and user experience, and not using our temporary solution will free up our backend engineers to focus on the long-term Keyhive-based solution. In other words, it makes it easier for both frontend and backend devs to focus more on making essential features.</p><p>Our hope is that Jazz will  increasingly build their stack towards the &quot;emerging Keyhive spec&quot; for local-first access controls.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/iLp2xBMud10?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Brooklyn Zelenka - Safe in the Keyhive: Local-first access control with E2EE and capabilities"></iframe></figure><p>Reimplementing all of Keyhive&apos;s essential affordances within the Jazz architecture would be the best way for Jazz.tools to keep Roomy running on Jazz indefinitely. Whether the Jazz team&apos;s roadmap aligns with our particular requirements for <a href="https://muni.town/agentic-fediverse">community-sovereignty</a> in the long term remains to be seen, but for now the Jazz stack is exactly what we needed.</p><p>Our <a href="https://github.com/muni-town/roomy/pull/295">move to Jazz</a> is well underway. Once done we will put the call out for another round of testing. See you soon &#x1F44B;</p>]]></content:encoded></item><item><title><![CDATA[Roomy Chat Alpha 2]]></title><description><![CDATA[The roomy.chat demo is back online! We've got new features and a totally revamped database. Let's unpack the state of Roomy with the latest update.]]></description><link>https://blog.muni.town/roomy-chat-alpha-2/</link><guid isPermaLink="false">67ead46db09c5bed5bd2fa41</guid><category><![CDATA[Roomy]]></category><dc:creator><![CDATA[Zicklag]]></dc:creator><pubDate>Wed, 02 Apr 2025 19:30:40 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/04/image-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/04/image-1.png" alt="Roomy Chat Alpha 2"><p>The <a href="https://roomy.chat" rel="noreferrer">roomy.chat</a> demo is back online!</p><p>Roomy is an <a href="https://github.com/muni-town/roomy">Open Source</a> group chat app that integrates with <a href="https://bsky.social/about">Bluesky</a> and the <a href="https://atproto.com/">AT Protocol</a>. You can join our Roomy chat space to come say hi, or you can even make your own chat space.</p><div class="kg-card kg-button-card kg-align-center"><a href="https://roomy.chat/-/roomy.chat" class="kg-btn kg-btn-accent">Join Roomy Chat Space</a></div><p>For a quick video intro to Roomy, check out zeu&apos;s talk &quot;Message Gardening in the Atmosphere&quot;, performed a week ago at the epic <a href="https://atprotocol.dev/atmosphereconf/">ATmosphere Conference</a>!</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/Qp9jI6L2Tsg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Message Gardening in the Atmosphere with Roomy Chat, Zeu Capua, ATmosphereConf Seattle 2025"></iframe></figure><p>Further reading:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.muni.town/chatty-community-gardens/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Chatty Community Gardens</div><div class="kg-bookmark-description">In the virtual world we think of digital gardens first and foremost as individual, personalized spaces. Yet in our physical cities the pro-social concept of Community Gardens is much beloved and far more accessible to the majority of city dwellers.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.muni.town/favicon.ico" alt="Roomy Chat Alpha 2"><span class="kg-bookmark-author">Muni Blog</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.muni.town/content/images/2025/02/forest_friends_by_ullbors_dddwd85.png" alt="Roomy Chat Alpha 2"></div></a></figure><p>In today&apos;s post I&apos;m going cover the state of Roomy: what it&apos;s doing right now, how it&apos;s working, and some of the ideas we&apos;ve got for next steps.</p><h2 id="features">Features</h2><h3 id="themes">Themes</h3><p>The first obvious new feature we&apos;ve got is themes! <a href="https://bsky.app/profile/zeu.dev" rel="noreferrer">@zeu.dev</a> hooked up a theme system from <a href="https://daisyui.com/" rel="noreferrer">Daisy UI</a> so now we have a bunch of built-in themes you can select from.</p><p>On top of that, Daisy has a <a href="https://daisyui.com/theme-generator/" rel="noreferrer">theme creator</a> that you&apos;ll be able to use to create your <em>own</em> themes soon.</p><h3 id="rich-text-input">Rich Text Input</h3><p>We&apos;ve also gotten a first pass on the rich text input field. This allows us to do things like render <code>@mentions</code> and <code>#channel</code> references.</p><p>That said we still have some work to do on the rich text editor, and we lost features like links &amp; images in the refactor, so we&apos;ll be re-adding those as soon as we can.</p><h3 id="space-domains">Space Domains</h3><p>You can now setup a custom handle for spaces by using domains, just like you do if you have a custom BlueSky handle!</p><figure class="kg-card kg-image-card"><img src="https://blog.muni.town/content/images/2025/04/image-3.png" class="kg-image" alt="Roomy Chat Alpha 2" loading="lazy" width="726" height="585" srcset="https://blog.muni.town/content/images/size/w600/2025/04/image-3.png 600w, https://blog.muni.town/content/images/2025/04/image-3.png 726w" sizes="(min-width: 720px) 720px"></figure><p>In short this lets you go from:</p><ul><li><strong>Before:</strong><code>https://roomy.chat/leaf:3gv98mf2b4psk6183cx3yv9p4gh62pgx6thesmnhx3gjq8w7dm70</code></li><li><strong>After:</strong><code>https://roomy.chat/-/example.com</code></li></ul><h3 id="wiki-pages">(Wiki) Pages</h3><figure class="kg-card kg-image-card"><img src="https://blog.muni.town/content/images/2025/04/image-4.png" class="kg-image" alt="Roomy Chat Alpha 2" loading="lazy" width="1245" height="725" srcset="https://blog.muni.town/content/images/size/w600/2025/04/image-4.png 600w, https://blog.muni.town/content/images/size/w1000/2025/04/image-4.png 1000w, https://blog.muni.town/content/images/2025/04/image-4.png 1245w" sizes="(min-width: 720px) 720px"></figure><p>We also added a first pass on &quot;Wiki pages&quot;, though in a subsequent iteration they&apos;ll be relabeled as just &quot;<a href="https://github.com/muni-town/roomy/issues/80" rel="noreferrer">Pages</a>&quot;. Alongside our <a href="https://github.com/muni-town/roomy/issues/103">index</a> and <a href="https://github.com/muni-town/roomy/issues/129" rel="noreferrer">sidebar</a>, the design for <em>pages </em>in Roomy is going to evolve quite a bit, but for now we have a simple setup where anybody can create an edit pages.</p><p>These pages are not &quot;collaborative&quot; in real-time, and if two people are editing the page at one time, it won&apos;t merge their changes: whoever saves last will overwrite the other persons edits. This is something we will improve in the future and eventually you&apos;ll be able to see each-other&apos;s edits in realtime.</p><h3 id="general-ui-improvements">General UI Improvements</h3><p>There have also been lots of little UI improvements, as well as underlying improvements to the way things are organized so that it&apos;s easier for us to continue working on new features in the UI.</p><h3 id="removed-direct-messages">Removed Direct Messages</h3><p>We have also removed direct messages for now. Direct messages were an early feature we made to test our our synchronization since syncing with only one other person made it easier to work on at first.</p><p>Now that we&apos;ve gotten going, though, direct messages are really not the feature we are prioritizing for Roomy; public, forum-like community spaces is our first goal, and Bluesky already has working direct messages and is working with the community to <a href="https://wiki.atprotocol.community/en/working-groups/e2ee/march2025NextSteps">figure out E2EE</a> alongside pioneers like <a href="https://www.germnetwork.com/">Germ Network</a>.</p><p>Removing direct messages makes it easier for us to focus on other features and lets us move faster.</p><h2 id="invisible-changes">Invisible Changes</h2><p>On top of the UI improvements, there has been a <strong>lot</strong> changing under-the-hood for Roomy. We now have our very own Roomy SDK, we&apos;re using a different CRDT, and we have an extremely useful new data model.</p><p>Here I&apos;ll go over some tech details. Feel free to skip to <a href="#summary-of-current-state-next-plans" rel="noreferrer">Summary of Current State &amp; Next Plans</a> if you aren&apos;t as interested in this bit.</p><h3 id="loro-crdt">Loro CRDT</h3><p>The first change is that we are now using the <a href="https://loro.dev">Loro</a> CRDT instead of <a href="https://automerge.org/">Automerge</a>.</p><p>The first reason was while doing some benchmarking we found that Loro could load a large document storing many IDs much faster than Automerge ( for now ). Loro is able to store the latest state of the document and then lazily load the history if you need it, which fits our future CRDT to webpage rendering needs very well.</p><p>Loro also has some useful features like movable lists and trees which we will have use for in Roomy.</p><p>To be clear, Automerge and the people who make it are awesome! They are also making tons of performance improvements on Automerge right now. We are designing things to be relatively CRDT agnostic, and we aren&apos;t totally bought into anything specific yet so things could change in the future.</p><h3 id="leaf-sdk">Leaf SDK</h3><p>On top of Loro we finished our first pass for the Leaf SDK.</p><p>Leaf, or the &quot;Leaf Protocol&quot;, is an idea that we&apos;ve had in mind for a while now as we&apos;ve worked on <a href="https://a.weird.one" rel="noreferrer">Weird</a>. Leaf is an opinionated framework for building offline-capable apps with great sharing and collaboration features. It&apos;s the foundational &quot;database&quot; that we are building Roomy on top of.</p><p>Our ideas for Leaf have evolved quite a bit recently and giving an overview of it is going to take its own blog post which I&apos;ll have to write later.</p><p>For now it&apos;s good enough to understand that Leaf is our &quot;database&quot; and is used to store and sync Roomy data.</p><p>This first version of Leaf doesn&apos;t have the solid permissions and capability system that we have planned for it. That will be powered by <a href="https://github.com/inkandswitch/keyhive" rel="noreferrer">Keyhive</a>, an awesome new library by the Automerge (Ink &amp; Switch) folks. Keyhive isn&apos;t ready to use just yet so we&apos;re continuing on with partial features until that is ready for us to integrate with Leaf.</p><h3 id="roomy-sdk">Roomy SDK</h3><p>On top of our new Leaf SDK we built the Roomy SDK!</p><p>The Roomy SDK is like the library version of Roomy. It&apos;s a way to interact with all of the Roomy data through code, without the UI. The UI uses the Roomy SDK to do everything that it does.</p><p>This is super great because it means that other people will be able to make their own apps that integrate with Roomy. They could even make their own Roomy UI. Maybe someone could make a terminal UI for Roomy? &#x1F440;</p><h3 id="the-new-data-model">The New Data Model</h3><p>The major importance of the new SDKs is that it allows us to finally start using the Entity-Component data model that we&apos;ve been looking forward to.</p><p>This data model was something that I started thinking about for building inter-operable web apps 10 months ago in <a href="https://zicklag.katharos.group/blog/a-web-of-data/">A Web of Data</a>. The hope is to provide a very fluid, but still structured, data model that we can use to allow apps to read and write data while still being incrementally compatible with each-other.</p><p>The Entity-Component model says that everything, no matter what it is, is an entity with its own ID, and all of that entity&apos;s data is stored in components. These components are standardized similar to ATProto Lexicons, but because an entity can have multiple of them, it allows multiple different apps to attach their own data to the same entity. It also allows apps to partially understand an entity, and interact with it even if it doesn&apos;t understand all of its components.</p><p>This concept is so powerful for enabling Roomy&apos;s content gardening and fluidity features.</p><p>It&apos;s because of this Entity-Component model that you are going to be able to convert threads to channels and vice-versa seamlessly. It can allow you to do things like attach a Roomy thread to a wiki page or <em>anything else</em> so that you can chat about it.</p><p>Things like wiki pages, notes, chat spaces, threads, they are all just another entity, and they actually share a lot in common. All of them have names and possibly an icon / profile image, or a description. Both channels and threads have a timeline of chat messages. These common components act as interfaces that make it very easy to interact entities in code.</p><p>These entities can also be linked to each-other to create a rich web of information that doesn&apos;t impose a pre-defined structure, limiting the data and isolating it to wherever you put it first.</p><p>With the new model, we will be able to very easily implement <a href="https://blog.muni.town/federated-webrings/">&quot;federated channels&quot;</a>, i.e. a channel that exists simultaneously in two different chat spaces! All it takes is two chat spaces that link to the same channel entity.</p><h2 id="summary-of-current-state-next-plans">Summary of Current State &amp; Next Plans</h2><p>So at this point we&apos;ve got improved UI and a new data backend, but we&apos;ve still got a <strong>ton</strong> of work to do!</p><p>Roomy is still in <strong>Alpha</strong>. That means that basically anything might be critically broken. Also, all data is completely <strong>public</strong>. Don&apos;t put anything in there you don&apos;t want the whole world to see. Roomy is relatively insecure while we wait for the <a href="https://github.com/inkandswitch/keyhive">Keyhive</a> capability system that we are planning on using to get to a testable state.</p><p>That said, we are doing our best now to keep the chat spaces you create up and we have some best-effort backups to protect against data loss.</p><p>There are lots rough edges to polish and we&apos;ll be tackling that bit by bit.</p><p>Some of the things that we&apos;re thinking about working on soon:</p><ul><li>Stress testing to make sure that we can handle 10s of thousands of messages in channels.</li><li>Experimenting with Discord bridging.</li><li>Making chat rooms and pages web indexable.</li><li>Letting you use your own domain to access Roomy, so you can allow people to chat directly under your own website, like <code>chat.example.org</code>.</li><li>Publishing websites from your Roomy wiki pages.</li></ul><p>I&apos;m super excited for what&apos;s coming up!</p><p>If you got any questions feel free to ping me <a href="https://bsky.app/profile/zicklag.dev">@zicklag.dev</a> on Bluesky!</p>]]></content:encoded></item><item><title><![CDATA[ATProto Isn't What You Think]]></title><description><![CDATA[This post takes a look at ATProto from a different angle, and explores the value of some possibly less-noticed pieces of it.]]></description><link>https://blog.muni.town/atproto-isnt-what-you-think/</link><guid isPermaLink="false">67cf43fbb09c5bed5bd2f5ce</guid><category><![CDATA[AtProto]]></category><dc:creator><![CDATA[Zicklag]]></dc:creator><pubDate>Wed, 12 Mar 2025 15:52:47 GMT</pubDate><content:encoded><![CDATA[<p>This post is about <a href="https://atproto.com">ATProto</a>, <a href="https://bsky.social">Bluesky</a>, and to a certain extent <a href="https://docs.bsky.app/showcase">All The</a> <a href="https://blueskydirectory.com/">Other</a> <a href="https://cred.blue/resources">ATProto<br>
Apps</a>. I want to take the opportunity to look at things from a different angle and share how my view of ATProto has changed over time.</p>
<charlie-quote>
Wait!! First I want to address the elephant in the room: your title for this post is really click bait-y. How do you know what I think ATProto is?
</charlie-quote>
<p>Um... Hello, uh... Charlie. Obviously I don&apos;t <em>really</em> know what you think. It&apos;s just that the title &quot;ATProto might not be what you think&quot; didn&apos;t roll of the tongue the same way, so I shortened it for marketing&apos;s sake.</p>
<charlie-quote>
OK, fine, continue.
</charlie-quote>
<p>Anyway... If you want some very long, optional background reading you could also read <a href="https://dustycloud.org/blog/how-decentralized-is-bluesky/">How decentralized is Bluesky really?</a>, <a href="https://whtwnd.com/bnewbold.net/3lbvbtqrg5t2t">Reply on Bluesky and Decentralization</a>, and <a href="https://dustycloud.org/blog/re-re-bluesky-decentralization/">Re: Re: Bluesky and Decentralization</a>, too. This post isn&apos;t really in reply to those posts, and I haven&apos;t fully read them all either, but they contribute to the overall mood and idea of what this post is about.</p>
<h2 id="is-it-decentralized">Is It Decentralized?</h2>
<p>I&apos;m not really going to try to definitively answer this question, but I want to talk about the question itself.</p>
<p>Some people, correctly in my opinion, say that this question is nuanced. Other people say things like &quot;it&apos;s pretty obvious that Bluesky isn&apos;t decentralized&quot;. I think part of the trouble is that there are a lot of questions that we&apos;re actually trying to answer when we ask &quot;Is Bluesky decentralized?&quot;.</p>
<p>Some possible &quot;questions within the question&quot; people might actually want answered might include:</p>
<ul>
<li>Is Bluesky decentralized?</li>
<li>Is ATProto decentralized?</li>
<li>Can I &quot;own&quot; my data? ( whatever that means )</li>
<li>Can good posts be censored against our will?</li>
<li>Will Bluesky be any better than Twitter in the long run?</li>
<li>Can I keep my followers and identity if I need to switch to an alternative for some reason?</li>
<li>What happens of the company behind Bluesky goes rogue?</li>
<li>What about if Elon Musk buys it?</li>
<li>Will I be happier on Bluesky than on Twitter?</li>
<li>Is &quot;decentralized&quot; Bluesky just an overcomplicated solution to problems I don&apos;t have just like blockchains?</li>
</ul>
<p>This question of &quot;decentralized-ness&quot; is really just a front to a bunch of other vague questions we might be asking. And that&apos;s OK. It&apos;s a lot harder to talk about all the specifics of this &quot;threat model&quot; that we have half-formed in our head than it is to say, &quot;is it decentralized?&quot;.</p>
<p>We just have to realize the limits of the question and realize it means different things to different people.</p>
<p>Again, in this post I&apos;m not going to directly ask or answer that question, but I&apos;m going to look at if from some different angles.</p>
<h2 id="centralized-views-over-decentralized-data">Centralized Views Over Decentralized Data</h2>
<p>I&apos;ve seen a lot of different kinds of apps popping up around ATProto lately and I think one thing that isn&apos;t immediately obvious is that most of them are, in a large way, just typical, centralized web applications.</p>
<charlie-quote>
No they&apos;re not! They&apos;re on ATProto so they&apos;re... decentralized or something!
</charlie-quote>
<p>Oh, you&apos;re still here? Well, don&apos;t take everything so seriously, hear me out.</p>
<p>In order use the app, you have to access a centralized webserver run by the developers. Whenever that app shows you some data, it is querying from its own, centralized database. If that central infrastructure goes down, you can&apos;t access the app or do anything useful with it.</p>
<charlie-quote>
So all of the decentralization is useless!? Noooooo!!
</charlie-quote>
<p>Not necessarily. While the <em>app</em> is centralized, the <em>data</em> isn&apos;t completely centralized. In ATProto your data is written to your own PDS ( Personal Data Server ), and that PDS can be hosted by anyone. So if the app goes down, you can still have your data on your PDS.</p>
<p>This is really good compared to sites like Twitter or Discord, where your data is locked up in the platform and if it weren&apos;t for laws in certain countries giving you a right to that data, you might never be able to get your data out again.</p>
<charlie-quote>
Yeah, and even still they can make it pretty difficult.
</charlie-quote>
<p>Exactly. They want your data locked up. With ATProto there&apos;s a lot more going for you when it comes to having your data always accessible to you, including providing a standardized API to get that data.</p>
<p>Even if Bluesky runs most of the PDSes today, it doesn&apos;t have to be that way, and time may change that.</p>
<p>So the PDS gives us decentralized data, and the apps give us central views over that data.</p>
<h2 id="the-importance-of-the-pds">The Importance of the PDS</h2>
<p>This is something I want to put a bit more focus on: how important the PDS is.</p>
<p>Giving people their own PDS is <strong>soooo</strong> crucial to having a free ( as in freedom ) internet. This needs to be something that I can:</p>
<ul>
<li>Self host or have somebody else host for me</li>
<li>Download <strong>all</strong> of my data from, whenever I want to, and</li>
<li>Grant other apps read and write access to</li>
</ul>
<p>That last piece is crucial to the existence of all of these different ATProto apps. We are giving people their own data store and then letting them connect that to all kinds of different tools and experiences.</p>
<p>The potential here is enormous! We <strong>need</strong> personal data stores.</p>
<p>Because of them, instead of us having just <em>one</em> app with a way for us to &quot;own&quot; our data, <em>all</em> of these apps now let us own our data. And making this basic ability, this right to control our own data, mainstream, is crucial to getting people&apos;s internet freedoms back.</p>
<h2 id="the-importance-of-bluesky">The Importance of Bluesky</h2>
<p>I think that the importance of being &quot;mainstream&quot; needs a little bit of attention, too. Bluesky is becoming a much more &quot;normal&quot; thing than most other &quot;decentralized&quot; apps ever end up.</p>
<p>Bluesky set out to make an uncompromising Twitter-like experience, but with important freedoms built-in to its protocol. That lack of compromise on user experience has been crucial to its securing 30 million+ users.</p>
<charlie-quote>
But didn&apos;t they kind of lie about it being &quot;decentralized&quot;?
</charlie-quote>
<p>I think they did pretty good at explaining what they were doing the best they could. Again, lanugage is kind of failing to be as expressive as we want it to be here.</p>
<p>Even if Bluesky <em>had</em> blatantly lied about its being decentralized, and I&apos;m not saying they did, I think that getting so many normal people using an app with fundamentally way more open and freedom preserving tech, is really important.</p>
<p>I firmly believe that we can make decentralized apps that have great experiences and are really useful to normal people. I think it&apos;s a huge shame that almost nothing like that exists yet. Bluesky, whether it&apos;s 100% decentralized or not, has started to spread the narrative that not only are good decentralized apps possible, but that they are important.</p>
<p>The network that they are accumulating is also triggering an avalanche of development looking to capitalize on its potential. And these development efforts are inheriting the all-important personal data store.</p>
<h2 id="but-the-centralization">But the Centralization!</h2>
<charlie-quote>
OK, so we have decentralized PDSes, fine, but you said the apps are centralized. What does it matter if I have my data on my PDS if I can&apos;t do anything with it because the app is gone?
</charlie-quote>
<p>Let&apos;s take an example: the <a href="https://github.com/omnivore-app/omnivore">Omnivore</a> app.</p>
<p>Omnivore is an open source read-it-later app. They had a free cloud service running for a while, they&apos;ve got 14.4k stars on GitHub, and a lot of people loved and used that app.</p>
<p>But eventually the team behind it got acquired and users were given short notice that the service was going down for good. The project would remain Open Source on GitHub but all of the normal people who aren&apos;t going to self-host the app won&apos;t be able to use it anymore.</p>
<p>Users were given the opportunity to request a zip archive of all of their saved posts in a JSON format, but as it stands there isn&apos;t necessarily anything good to do with it yet.</p>
<charlie-quote>
That really sucks! But how would ATProto have prevented that? If the company goes away, the app goes away.
</charlie-quote>
<p>Well, if Omnivore was an ATProto app, and they shut down their server, all of the users would still have their data on their PDS in a standardized format. At that point, any other developers can come in and run another app, or even the same app if it was Open Source like omnivore, and access <strong>all of the existing data already on your PDS</strong> when you login.</p>
<charlie-quote>
Ohhhh, and unlike Omnivore, because all the data is still on the PDSes, all the users would have to do to get setup again is login to the new app. They wouldn&apos;t even have to make a new account or anything!
</charlie-quote>
<p>Exactly! That makes it <strong>so</strong> much easier for somebody to come in and &quot;rescue&quot; the app, so-to-speak.</p>
<p>Even if nobody stepped up to run the full-blown service that would run your RSS subscriptions etc., it would be possible to make a free website that would let you login to your ATProto account and <em>view</em> all of your Omnivore data, so that at least you&apos;d have a way to use the data left-over.</p>
<p>That&apos;s all made possible by the standardized personal data store.</p>
<h2 id="identity">Identity</h2>
<p>And that brings us to another one of the <strong>super important</strong> things that ATProto has done: they&apos;ve decentralized the login provider.</p>
<charlie-quote>
Wait a second! ATProto isn&apos;t the first one to do that.
</charlie-quote>
<p>No, they aren&apos;t, but again, I go back to the &quot;mainstream&quot; factor. While there are other things like <a href="https://solid.github.io/solid-oidc/">Solid OIDC</a> and <a href="https://microformats.org/wiki/web-sign-in">Web Sign-in</a> that let you use your own domain to login, ATProto has made it so much more &quot;normal&quot;.</p>
<p>When somebody lets you &quot;Login with ATProto&quot;, unlike the &quot;Login with Google&quot; button, it actually lets you login with your <em>very own</em> PDS.</p>
<p>Using your domain as a handle is <em>also</em> super important. It means that just by putting in our handle we are informing the service, transparently though DNS, who is in charge of logging us in.</p>
<p>The &quot;Login with Google&quot; button has been so <em>useful</em> and yet so horrible for the freedom of the web. Why does google get to be the gatekeeper to all of our web logins?</p>
<p>We need an alternative, but it also needs to be easy, and by making handles domains, and making it so that normal people can use and understand it, they have made it possible for an actually decentralized social login button.</p>
<p>Linking <strong>Identity</strong> to your <strong>Personal Data Store</strong> and using <strong>Domains as Handles</strong> is a <em>crucial</em> combination that is really starting to unlock web freedom.</p>
<h2 id="more-pds-providers">More PDS Providers</h2>
<charlie-quote>
But Bluesky hosts almost everybody&apos;s PDS. That&apos;s why it&apos;s so easy. How do we know that there will ever be anybody else that hosts PDSes for people? Decentralized login doesn&apos;t help if everybody only uses one provider.
</charlie-quote>
<p>That&apos;s a good point, and we <em>do</em> need more people hosting PDSes. But I have good reason to believe that there will be more services hosting PDSes very soon.</p>
<p>The reason is for onboarding.</p>
<p>When most people make an ATProto app today, they usually just let you login with Bluesky. Bluesky is already providing the PDS and most people who are interested in your app is probably interested because they&apos;re already on Bluesky.</p>
<p>But that&apos;s not true for everybody. Us at Muni Town, as well as a couple other ATProto project developers I&apos;ve talked to, are thinking about hosting PDSes so that users don&apos;t <strong>need</strong> a Bluesky account to join.</p>
<p>We want people to be able to register directly for <em>our</em> app. They shouldn&apos;t <em>need</em> to login with Bluesky, but if they want to, that&apos;s fine.</p>
<p>If we host PDSes, then we can let users sign up directly for our app.</p>
<p>Our app will give them a domain handle, just like Bluesky does, and the cool part about it is that they can use their handle from our app to login to any ATProto app, including Bluesky!</p>
<charlie-quote>
Whoah! That&apos;s neat!
</charlie-quote>
<p>Isn&apos;t it! What&apos;s great about this is that desire for independent registration provides a natural incentive for more apps to start running PDS services.</p>
<p>The more serious apps that start getting built on ATProto, that don&apos;t want to require a Bluesky account, the more services that will likely start offering PDS hosting.</p>
<p>And all of these apps will let you bring your own PDS to any of the other apps!</p>
<h2 id="no-relay-necessary">No Relay Necessary!</h2>
<charlie-quote>
OK, that&apos;s pretty cool, but what about the relay? I hear a lot of people talk about how the relay is too centralized and that it&apos;s too expensive for anybody to ever really run their own.
</charlie-quote>
<p>There&apos;s a lot of debate around the Bluesky relay and whether or not it&apos;s posible to &quot;scale down&quot; ATProto.</p>
<p>Luckily, with all the attention that Bluesky and ATProto have gotten lately, there&apos;s a lot of interest in running alternative relays just in case things go bad, and I think it may be possible that funding for a public good relay might materialize to protect from the potential failure or compromise of the Bluesky relay.</p>
<p>But I also want to draw attention to another non-obvious thing about ATProto: the relay is not required.</p>
<p>Let&apos;s do a thought experiment. Let&apos;s say we were making our own read-it-later app called Herbivore.</p>
<p>Remember what I said about ATProto apps basically being normal web apps? Well, technically it&apos;s possible to make Herbivore so that you login with ATProto and then after that is 100% typical and centralized.</p>
<p>All the data is stored on the Herbivore server and basically completely ignores ATProto after you&apos;re logged in. This would take advantage of the identity side of things, but not the PDS.</p>
<p>Now lets add one more feature: all of our data is &quot;backed up&quot; in realtime to our PDS.</p>
<p>At that point we have a basically &quot;normal&quot; web application, where we can login with ATProto and all of our data is stored on our PDS, but there&apos;s no need for the relay.</p>
<charlie-quote>
Interesting... What&apos;s the catch?
</charlie-quote>
<p>The catch is how it interacts with other apps. For example, say there is another app called Carnivore. Its job is to help us delete old Herbivore data that we don&apos;t want anymore.</p>
<p>If we login to Carnivore and use it to delete a record off of our PDS, without the relay, Herbivore won&apos;t know immediately that our PDS was modified. So if we log back into Herbivore we&apos;ll still see the data that we deleted using Carnivore.</p>
<charlie-quote>
Well that&apos;s a problem.
</charlie-quote>
<p>Maybe sometimes, but not all the time.</p>
<p>For example, maybe Herbivore could just check to see if our PDS is in sync whenever we login to it. Or maybe there could be a periodic refresh.</p>
<p>Herbivore could expose an API endpoint that other apps could use to ask it to refresh it&apos;s data.</p>
<p>Or even better, maybe it could use the relay when it&apos;s available, but still fallback to another refresh mechansim if the relay is not available.</p>
<charlie-quote>
Could Herbivore run it&apos;s own relay that only subscribes to Herbivore users?
</charlie-quote>
<p>I&apos;m not sure! I think that there&apos;s room for exploration here.</p>
<p>They already have the <a href="https://github.com/bluesky-social/jetstream">Jetstream</a>, which is like a filtered relay, but it still depends on Bluesky&apos;s relay service.</p>
<p>Maybe we need some protocol or PDS changes to make it feasible to do lighter-weight subscriptions to individual users on their PDS, or maybe there are things we could try already that we haven&apos;t thought of.</p>
<p>This is something I&apos;d love to see more investigation into.</p>
<h2 id="local-first-atproto">Local First + ATProto</h2>
<p>And that brings me to the solution that Muni Town has started down with <a href="https://bsky.app/profile/roomy.chat">roomy.chat</a>: combining local-first tech with ATProto.</p>
<p>We&apos;re making a toolkit for building apps that can work offline and efficiently sync their data to other peers or services, including their ATProto PDS.</p>
<p>We&apos;ll still have a central service that will help users sync chat messages and other data with each-other in realtime, but it&apos;s also a service that communities can run for themselves and they can easily move their data from one provider to another.</p>
<p>The user data is stored it our own kind of &quot;personal data store&quot; that, unlike the ATProto PDS, is designed to be efficiently synced peer-to-peer.</p>
<p>The great part, is that we can still leverage the advantages ATProto regarding identity and the PDS as a place where all of you data is backed up and always accessible to you.</p>
<h2 id="not-a-one-trick-pony">Not a One Trick Pony</h2>
<p>A lot of what I&apos;m trying to get at with this post is that there is more than one way to leverage ATProto, and that there are some pretty major things it has started to do right that we really need right now.</p>
<p>We&apos;re used to the idea that there&apos;s more than one way to make a web app, and the same is true even if you are building it on ATProto. It hasn&apos;t set a lot in stone, it&apos;s just given us some bricks that we can all share.</p>
<p>The <a href="https://atproto.com/guides/glossary#app-view">&quot;AppView&quot;</a> is a component of the ATProto architecture that you are given nearly free reign on. It can be any kind of thing you want, and I think there&apos;s all kinds of unexplored possibilities there.</p>
<p>You might even be able to make an AppView with a meaningful <a href="https://activitypub.rocks/">ActivityPub</a> integration, or possibly borrow ideas about inboxes and outboxes as an alternative to relays.</p>
<charlie-quote>
So maybe ATProto lets you make centralized <strong>and</strong> decentralized apps.
</charlie-quote>
<p>Yep. I&apos;ve had my eye on ATProto for over a year, and when I found it I definitely wasn&apos;t sold on it in any respect. I&apos;m definitely still not betting everything on it.</p>
<p>Gradually, though, I am seeing some of the principles that I really believe are important actually holding up better than I thought they would in ATProto. ATProto wasn&apos;t what I thought it was.</p>
<p>It&apos;s still not perfect. Our whole Local First + ATProto idea doesn&apos;t even use it in a way that is commonly accepted as a good idea. We&apos;re still not sure how our plans might change, and we are actively preserving our ability to deploy completely independent of ATProto if we need to.</p>
<p>But there&apos;s a lot of good here that can sometime be hard to see.</p>
<p>When you&apos;re reading though all of the technical details of the protocol and seeing all of the specific designs of existing apps on it, it&apos;s hard to see what other possibilities there are and what still remains to be tried.</p>
<h2 id="the-final-hesitation">The Final Hesitation</h2>
<charlie-quote>
Uh oh, here it comes, I knew there would be another issue.
</charlie-quote>
<p>Heh, yeah, the last, big concern I see built into ATProto that I&apos;m not comfortable with is the <a href="https://web.plc.directory/">plc.directory</a>.</p>
<p>PLC directory is the centralized database of user identities that is used by almost all ATProto users.</p>
<p>It&apos;s what gives you a permanent identifier that never changes, even if your ATProto handle changes.</p>
<p>It&apos;s what lets you tell the network when you change your handle, PDS provider, and other identity critical changes like your rotation keys. It&apos;s something most people don&apos;t need to think about, but that is critical to ATProto working.</p>
<p>It is almost completely fine and secure except for the fact that whoever controls the PLC directory can technically reject your updates to things like your PDS or handle.</p>
<p>This doesn&apos;t mean they can forge updates to your account, so for instance, they can&apos;t convince the world that you changed your handle when you didn&apos;t.</p>
<p>But they are able to deny your ability to share with the network that you changed your handle, if you wanted to.</p>
<p>For example, if you wanted to change your PDS to a non-Bluesky-hosted one, you could use some tools to create a signed record saying that you want to switch your PDS.</p>
<p>Technically, though, it is within Bluesky&apos;s power to completely ignore your updated record and not share it with anybody else. Effecively they&apos;ve locked changes to your identity.</p>
<p>We need some fallback to prevent this. People have talked about turning power over the PLC directory to a group like the IETF, and that would help, but it&apos;s still not enough in my opinion. I feel like we need an option to use an alternative directory or something like that. We need a way to keep our identies even if somebody takes over the directory.</p>
<p>Someone has made a <a href="https://github.com/edmundedgar/did-plc-p2p-guard-rails">proposal</a> to help provide an escape hatch for the directory, and I feel like there are other possibilities here too that are worth exploring.</p>
<p>Because, fundamentally, these records are a list of signed operations on our identity. Even if the directory denies my update, it is still signed and valid, and I could go and share that signed record somewhere else. I could even go post it to bluesky!</p>
<p>Once people find out about my signed update, then they would know that the directory is not up-to-date and my records could now be looked up from somewhere else maybe?</p>
<charlie-quote>
It doesn&apos;t sound like you&apos;ve got any solid ideas.
</charlie-quote>
<p>No, I don&apos;t. I haven&apos;t had the time to do the necessary research to actually have a proposal in mind, but I do think it&apos;s important, and it&apos;s the biggest piece of ATProto that I feel I&apos;m not comfortable with.</p>
<p>The rest of it, like relays, are largely optional, at least in the respect that I&apos;m free to try something else, but that&apos;s not quite true with the PLC directory.</p>
<charlie-quote>
What about <a href="https://w3c-ccg.github.io/did-method-web/">did:web</a>, doesn&apos;t ATProto support that?
</charlie-quote>
<p>It does, but using <code>did:web</code> for your identity basically means you have to maintain ownership over that domain forever, which isn&apos;t always realistic. It just moves the problem.</p>
<p>The other promising possible solution is <a href="https://didwebvh.info/latest/"><code>did:webvh</code></a>, but I also haven&apos;t had time to look properly into that so I&apos;m not sure if it&apos;s a suitable solution yet.</p>
<h2 id="closing-thoughts">Closing Thoughts</h2>
<charlie-quote>
Well, are you done yet? I doubt anybody actually stuck around long enough to read this far.
</charlie-quote>
<p>Yeah, that&apos;s pretty much it, and, I mean, you stuck around so you never know.</p>
<charlie-quote>
That&apos;s fair.
</charlie-quote>
<p>I&apos;m tentatively excited about ATProto and very glad to get to try and build on top of it. I&apos;m hopefull that some real good will come out of it one way or another.</p>
<p>Until next time, bye! &#x1F44B;</p>
<charlie-quote>
See ya! &#x1F44B;
</charlie-quote>
<hr>
<p><em>Charlie&apos;s picture is licensed in the public domain ( CCO ) and was found here on <a href="https://www.svgrepo.com/svg/152478/owl">SVG Repo</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[Resolving the content-creation imperative]]></title><description><![CDATA[To fully inhabit the World Wide Web you must fully embody your virtual self within it 🍵]]></description><link>https://blog.muni.town/content-imperative/</link><guid isPermaLink="false">678f7d9eb09c5bed5bd2ea74</guid><category><![CDATA[pillars]]></category><category><![CDATA[Digital Gardening]]></category><category><![CDATA[Weird]]></category><dc:creator><![CDATA[Erlend Sogge Heggen]]></dc:creator><pubDate>Sat, 22 Feb 2025 11:58:19 GMT</pubDate><media:content url="https://blog.muni.town/content/images/2025/01/3865517102_2c71982bcc.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.muni.town/content/images/2025/01/3865517102_2c71982bcc.jpg" alt="Resolving the content-creation imperative"><p>For a lot of us the &#x201C;simple&#x201D; prospect of filling in a web page with content presents an insurmountable&#xA0;<a href="https://en.wikipedia.org/wiki/Writer%27s_block"><u>writer&#x2019;s block</u></a>.</p><p>The decision to <a href="https://writing.markchristian.org/2019/04/29/personal-web-sites/?c=1">make a personal website</a> is held back by the &#x2018;content-creation imperative&#x2019;; a nagging sense that a certain amount of <em>stuff</em> is required to justify your site&#x2019;s existence. Stuff like blog posts, &#x2018;the story of me&#x2019;, personalized styling and so forth.</p><p>All very <strong>good stuff</strong>, but none of it is necessary for planting one&#x2019;s roots in web-soil. On the contrary, this upfront labour becomes prohibitive and the project gets put off for another day.</p><p>For all their flaws, this is in large part why the mainstream social media applications have been so successful: All they ask for is a <em>blurb</em>. String just enough words together for a paragraph or two, and there&#x2019;s your post, announcing your presence to the web and participating in the cultivation of The Commons.</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://blog.muni.town/chatty-community-gardens/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Chatty Community Gardens</div><div class="kg-bookmark-description">In the virtual world we think of digital gardens first and foremost as individual, personalized spaces. Yet in our physical cities the pro-social concept of Community Gardens is much beloved and far more accessible to the majority of city dwellers.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.muni.town/favicon.ico" alt="Resolving the content-creation imperative"><span class="kg-bookmark-author">Muni Blog</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.muni.town/content/images/2025/02/forest_friends_by_ullbors_dddwd85.png" alt="Resolving the content-creation imperative"></div></a><figcaption><p><span style="white-space: pre-wrap;">Weird is effectively the individual-serving, </span><a href="https://maggieappleton.com/nontechnical-gardening/"><span style="white-space: pre-wrap;">Notion-shaped</span></a><span style="white-space: pre-wrap;"> counterpart to the community-serving UX of Roomy.</span></p></figcaption></figure><p>But the most pervasive among these platforms subject their users to another kind of content imperative: Always Be Posting, otherwise you&#x2019;ll fade back into obscurity. And obscurity, in the eyes of the legacy platforms, is worse than death.</p><p>So what is an aspiring <a href="https://blog.muni.town/digital-homeownership/">homesteader</a> to do?</p><p>In recent years, a new kind of personal page format is trending. Popularized by <a href="https://en.wikipedia.org/wiki/Linktree">Linktree</a>, these minimal landing sites grew out of the constraints of web-hostile platforms like Instagram that would only allow a singular &#x2018;link-in-bio&#x2019;&#x2014;why? because authentically unmitigated self-expression is an existential threat to their world of warped mirrors.</p><p>The solution was a wondrously webby hack: Use that one precious link to point at a <em>bunch of other links</em>! And so the &apos;linkspage&apos; convention was born.</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">&#x1F3D5;&#xFE0F;</div><div class="kg-callout-text">Instead of sacrificing your agency as a renter in a condominium, or making your first home an impossible project by trying to build a family-sized house, get yourself grounded by putting up the digital equivalent of a tent. </div></div><p>Yet in the age of <a href="https://nymag.com/intelligencer/2022/10/what-is-technofeudalism.html">feudalistic social media</a>, most of our &#x2018;personal links&#x2019; will still be pointing to fragments of our digital selves that are trapped inside walled-garden mega platforms. They&#x2019;re significant parts of our identity nonetheless, thus hard to fully let go of.</p><p>Thankfully the radical act of collecting those links together in a space you own is enough to begin your journey of digital emancipation in earnest. With any effort to consolidate your identity, you are actively <a href="https://blog.muni.town/selling-dreams/">reclaiming ownership of your story online</a>.</p><p><em>Map your multitudes and insist upon yourself!</em></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://bsky.app/profile/molly.wiki/post/3lg45dvymt22r"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Molly White (@molly.wiki)</div><div class="kg-bookmark-description">I have more coming on this topic soon, but for now: don&#x2019;t let perfect be the enemy of good. Your own domain pointing at your social media presence on a third-party platform is a step in the right direction. Backing up your posts on other platforms. Creating a website with a webhosting service. etc</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://web-cdn.bsky.app/static/apple-touch-icon.png" alt="Resolving the content-creation imperative"><span class="kg-bookmark-author">Bluesky Social</span></div></div></a></figure><h3 id="recipe-for-web-agency">Recipe for web agency</h3><p>To recap:</p><ul><li>Step 1: <a href="https://blog.muni.town/digital-homeownership/">Own your digital home</a></li><li>Step 2: Resist the content-imperative (you are here)</li><li>Step 3: <a href="https://blog.muni.town/data-defragmentation/">Re-center your digital self</a></li></ul><p>The third step, which is what a marketing-focused app like Linktree doesn&#x2019;t concern itself with, is treating every single one of those links as an item in a TODO-list. And the Job to be Done for each link is simple:</p><p><strong><em>Smash a hole through that walled garden and get your data back!</em></strong></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.muni.town/data-defragmentation/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Data Defragmentation</div><div class="kg-bookmark-description">&#x2018;Weird the data importer&#x2019; is our wedge into the data fortresses keeping our digital identities captive. PESOS - Recenter the publishing pipeline PESOS is an acronym for Publish Elsewhere, Syndicate (to your) Own Site. It&#x2019;s a syndication model where publishing starts by posting to a 3rd party servi&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.muni.town/favicon.ico" alt="Resolving the content-creation imperative"><span class="kg-bookmark-author">Muni Blog</span><span class="kg-bookmark-publisher">Erlend Sogge Heggen</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.muni.town/content/images/2025/01/tellm_670_portable_computer_by_aoiwaffle0608_dctuq63.png" alt="Resolving the content-creation imperative"></div></a></figure><hr><p>With this we&apos;re hoping we&apos;ve made it a little clearer how Roomy and Weird are two sides of the same coin.</p><ul><li>Roomy is at the intersection of <strong>chat(sync) &amp; forum(async)</strong></li><li>Weird is at the intersection of <strong>wiki(collective) &amp; blog(individual)</strong></li></ul><p>They&apos;re essentially the same thing being built twice, for two different use cases that meet in the middle: community and identity.</p><p>The unifying force will be the <a href="https://automerge.org">Automerge-CRDT</a> stack (our <a href="https://blog.muni.town/leaf-atproto-activitypub/">&apos;app engine&apos;</a>) as well as a shared <a href="https://weird.one/muni.town/identity-tech">identity layer</a>.</p><p><em>End-of-february we&apos;re releasing Weird v0.4.1 (bringing Link Embeds) along with a greatly updated website to </em>clarify<em> Weird&#x2019;s value proposition as a web app for digital gardening.</em></p>]]></content:encoded></item></channel></rss>