CINXE.COM
Spritely
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>Spritely</title><link rel="stylesheet" href="/static/css/main.css" /><link rel="stylesheet" href="/static/css/code.css" /><link rel="alternate" title="Spritely news" type="application/atom+xml" href="/feed.xml" /></head><body><div class="main-wrapper"><header id="site-header"><div class="header-logo-wrapper"><a href="/" class="header-logo"><img src="/static/images/spritely-logo-transparent-500px.png" alt="Spritely logo" /></a></div></header><div class="site-main-content"><div><div class="content-box bigger-text" style="margin-top: 20px; margin-bottom: 20px;"><h1>✩ Press Start To Take Back The Net! ✩</h1><a href="https://spritely.institute"><img src="/static/images/spritely-institute-goblin-and-rocket-350px.png" alt="Goblin and Rocket" /></a><p style="text-align: center; font-style: italic;">Current development of Spritely is happening over at the <a href="https://spritely.institute">Spritely Institute</a>! In the meanwhile, the page below contains useful historical information, but <a href="https://spritelyproject.org">spritelyproject.org</a> will be migrating incrementally over time. Thanks for your patience!</p><hr style="border-top: 2px dashed #675f68; border-bottom: 0px; clear: both;" /><p>Spritely is a project to level up the federated social web. It builds on our experience from co-authoring <a href="https://www.w3.org/TR/activitypub/">ActivityPub</a>, the largest decentralized social network on the web to date, while applying lesser known but powerful ideas from the <a href="https://en.wikipedia.org/wiki/Capability-based_security">object capability security</a> community.</p><p>Spritely consists of a number of modular components bringing new and rich features, from distributed programming, to decentralized storage, to virtual worlds.</p><p>Better worlds await, because better worlds are possible. We all deserve freedom of communication. Why not make the journey fun in the process?</p><hr class="pre-follow-us" /><p class="follow-us"><span style="padding-right: 1.5em;"><b>Follow us: </b><a href="https://octodon.social/@spritelyproject">[fediverse]</a> <a href="https://twitter.com/spritelyproject">[twitter]</a></span> ~ ♥ ~ <span style="padding-left: 1.5em;"><b>IRC chat: </b>#spritely on <a href="https://libera.chat">libera.chat</a></span></p></div><div class="homepage-video-box"><iframe width="800" height="500" sandbox="allow-same-origin allow-scripts allow-popups" frameborder="0" allowfullscreen="true" src="https://conf.tube/videos/embed/18aa2f92-36cc-4424-9a4f-6f2de946fbd2"></iframe></div><div class="content-box"><h1>✩ Meet the Spritely Family ✩</h1><p>Our goals are ambitious but all of the components are built on well explored (if sometimes obscure) designs. To keep things manageable (and not totally vaporware), we're taking a layered approach and publishing demos as we go.</p><div class="family-entry" id="goblins"><div class="title-wrap"><h2>Goblins: Distributed Programming<span style="float: right"> (Status: Working Beta )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/goblins-150x150.png" alt="goblins family portrait" /></div><div class="family-entry-content"><p><a href="https://gitlab.com/spritely/goblins">Goblins</a> makes writing secure distributed programs easier and safer, even in a mutually suspicious network. Its quasi-functional nature gives it easy transactionality and even time travel. (Yes, <a href="https://dustycloud.org/blog/goblins-time-travel-micropreview/">time travel</a>!)</p><p>Goblins <a href="https://docs.racket-lang.org/goblins/captp.html">implements</a> CapTP, the <a href="http://erights.org/elib/distrib/captp/index.html">Capability Transport Protocol</a>, which has such features as distributed acyclic garbage collection and reductions of network round trips through promise pipelining. But its biggest feature is how easy it is to write safe distributed code, which by following object capability security, which mostly resembles normal programming patterns of passing around object references.</p><p>Goblins is implemented as a <a href="https://racket-lang.org/">Racket</a> library (though a port to <a href="https://www.gnu.org/software/guile/">Guile</a> is planned, and we are hoping for CapTP interoperability with <a href="https://agoric.com/">Agoric's</a> implementation of CapTP) and is heavily inspired by the <a href="http://www.erights.org/">E programming language</a>. It is the most foundational layer of Spritely.</p><div class="homepage-video-box"><iframe width="800" height="500" sandbox="allow-same-origin allow-scripts allow-popups" frameborder="0" allowfullscreen="true" src="https://share.tube/videos/embed/c08afc11-16eb-4d56-8aef-bd19089db65e"></iframe></div></div></div><div class="learn-more"><hr class="pre-learn-more" /><b>Learn more: </b><a href="https://share.tube/videos/watch/c08afc11-16eb-4d56-8aef-bd19089db65e">[Video Intro]</a> <a href="https://docs.racket-lang.org/goblins/">[Docs]</a> <a href="https://gitlab.com/spritely/goblins">[Code]</a> <a href="https://gitlab.com/dustyweb/terminal-phase">[Demo: Terminal Phase]</a></div></div><div class="family-entry" id="porta-bella"><div class="title-wrap"><h2>Porta & Bella: Portable Encrypted Storage<span style="float: right"> (Status: Prototyped )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/porta-bella-150x150.png" alt="porta-bella family portrait" /></div><div class="family-entry-content"><p>Porta & Bella allow for the storage and distribution of files while keeping their contents only known to those who have been authorized to access them by receiving the appropriate capability URI. <i>Porta</i> refers to our mushroom friend, who provides immutable file storage, and <i>Bella</i> refers to the vine, who allows for updates by stringing together multiple <i>Porta</i> entries.</p><p>In addition to their security properties, Porta & Bella allow for portability because the names of such files aren't dependent on where they live. No matter if the files are kept on your hard drive, on your personal server, on a cloud service provider, over existing content-addressed systems (like <a href="https://ipfs.io/">IPFS</a>), or stuffed in a USB key in a shoebox under your bed (or all of the above), the same Porta-Bella URI can refer to all of them.</p><p>This means, for instance, that if nodes go down on the ActivityPub network but both their contents and profiles are stored as Porta-Bella documents, users can easily point their account at a new server without a loss of functionality or history. (See the <a href="https://gitlab.com/spritely/golem/blob/master/README.org">Golem</a> demo as an example.) Combining Bella updateable documents with ActivityPub profiles is therefore also a practical decentralized identity solution.</p><p>Note that Porta and Bella at this point have been prototyped and their functionality demonstrated, but this prototype is not ready for public use, with their implementations subject to change. The prototypes went under the names of <a href="https://gitlab.com/dustyweb/magenc/blob/master/magenc/scribblings/intro.org">Magenc</a> and <a href="https://gitlab.com/spritely/crystal/blob/master/crystal/scribblings/intro.org">Crystal</a> and will be renamed soon. The Porta-Bella design is derived largely from the <a href="https://tahoe-lafs.readthedocs.io/en/tahoe-lafs-1.12.1/">Tahoe-LAFS</a> project, but a bit tuned more to the needs of Spritely. It is highly likely that <a href="https://openengiadina.net/papers/eris.html">ERIS</a> will be used as the future foundation of this work.</p></div></div><div class="learn-more"><hr class="pre-learn-more" /><b>Learn more: </b><a href="https://gitlab.com/dustyweb/magenc/blob/master/magenc/scribblings/intro.org">[Magenc writeup]</a> <a href="https://gitlab.com/spritely/crystal/blob/master/crystal/scribblings/intro.org">[Crystal writeup]</a> <a href="https://gitlab.com/spritely/golem/blob/master/README.org">[Golem demo]</a></div></div><div class="family-entry" id="brux"><div class="title-wrap"><h2>Brux: Contact Management<span style="float: right"> (Status: Working Pre-Alpha )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/brux-150x150.png" alt="brux family portrait" /></div><div class="family-entry-content"><p>If you've ever looked at decentralized identity systems, you've probably noticed that their names look like a bunch of gibberish letters and numbers. Unfortunately this is the tradeoff that decentralized identity must take: in order to be globally secure and decentralized, we have to sacrifice human-meaningful names. (See <a href="https://en.wikipedia.org/wiki/Zooko%27s_triangle">Zooko's triangle</a> for the theoretical background of why this is.)At first glance, this seems like a real problem, because what is the point of our systems if they aren't meaningful to humans?</p><p>Brux is a <a href="https://github.com/cwebber/rebooting-the-web-of-trust-spring2018/blob/petnames/draft-documents/petnames.md">petnames system</a> for Spritely, and it fills this need much the same way the contact list on your phone does: you don't need to memorize all phone numbers, because your phone provides a locally meaningful mapping of names to numbers for you. That's exactly what <i>petnames</i> are: locally meaningful names mapped onto a global system. However <i>petname systems</i> provide more functionality: you can leverage your social network to discover other participants in the network. (It turns out that petname systems also help <a href="https://www.w3.org/2005/Security/usability-ws/papers/02-hp-petname/">prevent phishing attacks</a>... what a great bonus!)</p><p>Brux development is in its early stages but we have a <a href="https://gitlab.com/spritely/brux">functioning prototype</a> which integrates with <a href="https://gitlab.com/spritely/goblin-chat">goblin-chat</a>. We have also written a <a href="https://github.com/cwebber/rebooting-the-web-of-trust-spring2018/blob/petnames/draft-documents/petnames.md">whitepaper explaining Petnames</a> and a (less completed, but analyzed and well outlined) <a href="https://github.com/cwebber/rwot9-prague/blob/secure-uis/draft-documents/secure-user-interfaces.md">whitepaper on how to build secure user interfaces</a> that resemble existing social network UIs.</p></div></div><div class="learn-more"><hr class="pre-learn-more" /><b>Learn more: </b><a href="https://gitlab.com/spritely/brux">[Code]</a> <a href="https://github.com/cwebber/rebooting-the-web-of-trust-spring2018/blob/petnames/draft-documents/petnames.md">[Petnames Paper]</a></div></div><div class="family-entry" id="mandy"><div class="title-wrap"><h2>Mandy: Easy ActivityPub Integration<span style="float: right"> (Status: Planned )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/mandy-150x150.png" alt="mandy family portrait" /></div><div class="family-entry-content"><p>We want to make it easy to hook together programs written in Goblins to the existing <a href="https://www.w3.org/TR/activitypub/">ActivityPub</a> speaking federated social network. Thankfully this should be a very clean mapping, because both Goblins and ActivityPub follow the <a href="https://en.wikipedia.org/wiki/Actor_model#Fundamental_concepts">classic actor model</a>. Mandy's design is to bridge the worlds of distributed Goblins programs and ActivityPub by providing an easy mapping between them.</p><p>In the process we can add richer interactions and better protections against abusive behavior (and better support for cooperative, intentional behavior) than currently exist in the ActivityPub ecosystem. See the <a href="https://gitlab.com/spritely/ocappub/blob/master/README.org">OcapPub</a> writeup for some of these ideas (most of those do not require Mandy to implement them, but Mandy will make implementing them much easier).</p></div></div></div><div class="family-entry" id="hyptis"><div class="title-wrap"><h2>Hyptis: Distributed Finance<span style="float: right"> (Status: Planned, Small Examples )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/hyptis-150x150.png" alt="hyptis family portrait" /></div><div class="family-entry-content"><p>Hyptis provides distributed small-world finance systems, appropriate for use in games or for communities such as your neighborhood mutual aid network.</p><p>Hyptis builds upon <a href="https://agoric.com/papers/">object capability financial theory</a> which is well-researched and easy to implement on top of a distributed ocap style system such as Spritely Goblins. As said, we're aiming for small-world financial systems (though the folks at <a href="https://agoric.com/">Agoric</a> are putting in work on large-world financial systems, and if we achieve CapTP interoperability with them, their systems should be usable through Spritely as well). However, it is amazing how much can be easily done in such a small amount of code with Goblins' design: a simple money implementation which preserves transactional integrity even in the event of errors and allows for account holders to have access from across a network can be implemented in as little as <a href="https://gitlab.com/spritely/goblins/-/blob/6b31d2340e8c48aa09958c810399962eb558e2d3/goblins/actor-lib/simple-mint.rkt#L13">25 lines of code</a> in Goblins... no blockchain required! (This design is ported directly from the <a href="http://erights.org/elib/capability/ode/index.html">Capability-based Financial Instruments</a> document.)</p></div></div></div><div class="family-entry" id="oaken"><div class="title-wrap"><h2>Oaken: Safely Run Untrusted Code<span style="float: right"> (Status: Planned )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/oaken-150x150.png" alt="oaken family portrait" /></div><div class="family-entry-content"><p>Wouldn't it be a travesty if someone built an amazing looking fire elemental monster that you really want to put in your game, but you're afraid that if you add it that it'll upload all your passwords and credit card information to some unsavory individuals and then proceed to delete all the files on your system?</p><p>The general perspective in computing is that if you run untrusted code, and that untrusted code wants to do something dangerous (whether maliciously or due to unintentional bugs), you're hosed. But it doesn't have to be that way.</p><p>Oaken has yet to be written, but its plan is based off of the <a href="http://wiki.erights.org/wiki/Walnut/Ordinary_Programming/Emakers">Emaker design</a> from <a href="http://www.erights.org/">E</a> and the <a href="https://github.com/tc39/proposal-realms/blob/main/explainer.md">Frozen Realms proposal</a> for Javascript.</p></div></div></div><div class="family-entry" id="fantasary"><div class="title-wrap"><h2>Fantasary: Distributed Virtual Worlds<span style="float: right"> (Status: Planned )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/fantasary-150x150.png" alt="fantasary family portrait" /></div><div class="family-entry-content"><p>Here's where Spritely becomes extra fun... where social networks meet games! After all, modern social networks are merely degenerate versions of virtual worlds... you can chat and send messages in both, but you can't go solve ghost mysteries with your friends or fight monsters or hand your friend a drink that makes them dizzy when they drink it. These days we have distributed social networks and virtual worlds, but no well developed combination thereof. Fantasary aims to change that, while returning a sense of fun and collaboration to online spaces. By building worlds with your friends, Fantasary should provide an environment to explore fun environments and also explore learning to program as an educational and cooperative tool. (Not to mention getting secure communication tools in the hands of users in a way that seems fun!)</p><p>This is admittedly both the most complex and ambitious piece of the Spritely system (though also the most exciting). However, it is possible to be built; in the mid-to-late 1990s, <a href="https://www.youtube.com/watch?v=KNiePoNiyvE">Electric Communities Habitat</a> did exactly this, but the company closed before it achieved all of its goals, and it was a proprietary system (whereas of course everything in Spritely is free and open source software).</p><p>But this is also a good example of why building something this ambitious is worthwhile: as a driver for powerful and interesting technology. After Electric Communities Habitat closed, its ideas lived on in the <a href="http://www.erights.org/">E programming language</a>, which we have already said that Goblins is built upon (as are many other ideas in Spritely). Thus in this case, even failure can be a path to success if it advances the tooling for distributed social networks in general.</p><p>Two demos are planned for Fantasary to come out between 2021 and 2022: a textual virtual world demo (similar to but more sophisticated than the <a href="https://archive.org/details/feb_2017-live_network_coding_8sync">mudsync demo</a>, which was built for a Goblins predecessor) and a graphical system that uses assets following the <a href="https://lpc.opengameart.org/static/lpc-style-guide/index.html">Liberated Pixel Cup style guide</a> (see the <a href="https://github.com/makrohn/Universal-LPC-spritesheet">Universal LPC Spritesheet</a> for updated assets and the <a href="https://opengameart.org/art-search?keys=lpc">vast collection of compatible assets</a>).</p></div></div></div><div class="family-entry" id="aurie"><div class="title-wrap"><h2>Aurie: Serialize and Restore the World<span style="float: right"> (Status: Working Pre-Alpha )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/aurie-150x150.png" alt="aurie family portrait" /></div><div class="family-entry-content"><p>So, Goblins has <a href="https://dustycloud.org/blog/goblins-time-travel-micropreview/">time travel</a>... great! But that's really for within the live runtime. What happens if we want to save the whole state of the world and its objects and bring it back later? And how can we do it securely, especially when objects might want to claim that the next time they're reconstructed that they have more power and authority than they actually did? (Oh yeah... didn't you know I'm the king, and I have a magic scepter that allows me to banish anything I point it at, and also I have one bajillion pieces of gold in my account? Yes, yes...)</p><p>By following the patterns laid out in <a href="http://erights.org/data/serial/jhu-paper/index.html">Safe Serialization Under Mutual Suspicion</a>, it should be possible to serialize, restore, and upgrade graphs of objects and their relationships which are dynamically generated as the program runs. No need to fear about everything falling apart if your game server crashes... just spin it back up!</p></div></div><div class="learn-more"><hr class="pre-learn-more" /><b>Learn more: </b><a href="https://gitlab.com/spritely/aurie">[Code]</a></div></div><div class="family-entry" id="questie"><div class="title-wrap"><h2>Questie: Distributed Debugging<span style="float: right"> (Status: Planned )</span></h2></div><div class="family-entry-bodywrap"><div class="family-portrait-wrap"><img class="family-portrait" src="/static/images/sprites/questie-150x150.png" alt="questie family portrait" /></div><div class="family-entry-content"><p>Okay, so you've built a complicated networked program... but now all these messages are flying around the network and you can't tell what is causing what anymore! Questie solves this with a design highly inspired by the <a href="http://wiki.erights.org/wiki/Causeway">Causeway message-oriented distributed debugger</a> (more: <a href="https://www.youtube.com/watch?v=QeqcGa7HlBk">a wonderful screencast</a>, <a href="https://www.hpl.hp.com/techreports/2009/HPL-2009-78.html">tech report</a>, <a href="http://www.erights.org/elang/tools/causeway/index.html">erights page</a>). Thanks to Goblins' design, we should also be able to add some nice features of being able to snapshot the running state of the program at relevant points to let developers explore the local state of the world the time in question.</p></div></div></div></div><div class="content-box homepage-news-box" style="margin-top: 20px; margin-bottom: 20px;"><h1>✩ News! ✩</h1><ul class="homepage-news-items"><li><a href="/news/petname-systems.html"><h2 style="text-align: left; margin: .3em;">Petname Systems</h2></a><div class="news-feed-content"><div class="news-feed-item-date">Fri 18 February 2022</div><p><em>This blogpost is based on Jessica's work being fudned by <a href="https://spritelyproject.org/news/interview-with-jessica-tallon.html">NLNet / NGI Zero</a>. We are grateful for the support of this work!</em></p><div class="consume-more-buttons"><a href="/news/petname-systems.html">[Read more ==>]</a></div></div></li><li><a href="/news/pebble-bank.html"><h2 style="text-align: left; margin: .3em;">Digital cash in an asynchronous environment</h2></a><div class="news-feed-content"><div class="news-feed-item-date">Sun 12 December 2021</div><p><em>Foreward by Christine Lemmer-Webber: Jessica wrote this blogpost within the second week of her <a href="https://spritelyproject.org/news/interview-with-jessica-tallon.html">working full time as part of Spritely</a> but it took me a while to review it and get it up here. While object-capability based banks are not new (<a href="https://spritelyproject.org/#goblins">Spritely Goblins</a> ships with a <a href="https://gitlab.com/spritely/goblins/-/blob/master/goblins/actor-lib/simple-mint.rkt">simple example mint</a> based on the <a href="http://erights.org/elib/capability/ode/index.html">Capability-based Financial Instruments paper</a>), these systems have traditionally been shown as examples where we need support for local synchronous operations to keep things simple and understandable. With no prior background in the object capability security community or in previous cryptographic banking systems, Jessica quickly refuted this claim and came up with this example alternative purely-asynchronous object-capability-based bank design. Suffice to say, this is an astounding feat and yet another demonstration of how fortunate we feel to have Jessica join the Spritely team!</em></p><div class="consume-more-buttons"><a href="/news/pebble-bank.html">[Read more ==>]</a></div></div></li><li><a href="/news/interview-with-jessica-tallon.html"><h2 style="text-align: left; margin: .3em;">Jessica Tallon joins with a grant from NLNet/NGI Zero! Plus an interview!</h2></a><div class="news-feed-content"><div class="news-feed-item-date">Wed 10 November 2021</div><p><img src="/static/images/blog/tsyesika-and-trains-edit.jpeg" alt="Jessica Tallon standing in front of some trains" /></p><div class="consume-more-buttons"><a href="/news/interview-with-jessica-tallon.html">[Read more ==>]</a></div></div></li><li><a href="/news/content-addressed-descriptors-paper.html"><h2 style="text-align: left; margin: .3em;">Content Addressed Descriptors and Interfaces with Spritely Goblins paper</h2></a><div class="news-feed-content"><div class="news-feed-item-date">Fri 30 July 2021</div><p>The paper <a href="https://dustycloud.org/tmp/interfaces.html">Content Addressed Descriptors and Interfaces with Spritely Goblins</a> is now available for reading. (Also available: <a href="https://gitlab.com/spritely/interfaces-writeup">source and examples</a>, as well as <a href="https://dustycloud.org/tmp/interfaces.pdf">PDF</a> and <a href="https://dustycloud.org/tmp/interfaces.odt">ODT</a> versions.) It is somewhat of a wide-ranging paper in its explored ideas, but the general basis is how to perform "conversational" programming in <a href="https://docs.racket-lang.org/goblins/index.html">Spritely Goblins</a>, or any other system which assumes a mutually suspicious network. There are some other interesting ideas in there, including Goblins' ward/incanter system (a way of installing hidden behavior which requires hidden access, and then a capability to gain and apply such access).</p><div class="consume-more-buttons"><a href="/news/content-addressed-descriptors-paper.html">[Read more ==>]</a></div></div></li><li><a href="/news/goblins-0.8.html"><h2 style="text-align: left; margin: .3em;">Spritely Goblins v0.8 released!</h2></a><div class="news-feed-content"><div class="news-feed-item-date">Sun 18 July 2021</div><p>We are happy to announce the release of <a href="https://spritelyproject.org/#goblins">Goblins</a> <a href="https://gitlab.com/spritely/goblins/-/tree/v0.8">v0.8</a>! Goblins is a distributed actor model system with localized transactions layered on top of <a href="https://racket-lang.org/">Racket</a>. See the <a href="https://docs.racket-lang.org/goblins/index.html">documentation</a> for usage, and the <a href="https://gitlab.com/spritely/goblins/-/blob/v0.8/CHANGELOG.org">ChangeLog</a> for what's changed in this release!</p><div class="consume-more-buttons"><a href="/news/goblins-0.8.html">[Read more ==>]</a></div></div></li><li><a href="/news/what-is-captp.html"><h2 style="text-align: left; margin: .3em;">What is CapTP, and what does it enable?</h2></a><div class="news-feed-content"><div class="news-feed-item-date">Tue 02 February 2021</div><p>This article is long, and it's taken me a long time to get to. I procrastinated enough that the only way I could do it was to make it as <a href="https://octodon.social/@cwebber/105651918309744783">social network</a> <a href="https://twitter.com/dustyweb/status/1355957088690778122">threads</a> first, and this is a compilation and expansion of those ideas.</p><div class="consume-more-buttons"><a href="/news/what-is-captp.html">[Read more ==>]</a></div></div></li><li><a href="/news/state-of-spritely-december-2020.html"><h2 style="text-align: left; margin: .3em;">State of Spritely, December 2020</h2></a><div class="news-feed-content"><div class="news-feed-item-date">Tue 01 December 2020</div><p><img src="/static/images/blog/2020-10-31_spritely_scene.jpg" alt="Spritely characters sitting campfire-style around a newly formed universe" /></p><div class="consume-more-buttons"><a href="/news/state-of-spritely-december-2020.html">[Read more ==>]</a></div></div></li><li><a href="/news/spritely-website-launches.html"><h2 style="text-align: left; margin: .3em;">Spritely website launches!</h2></a><div class="news-feed-content"><div class="news-feed-item-date">Tue 29 September 2020</div><p>Whew, we're happy to finally say that <a href="https://spritelyproject.org/">https://spritelyproject.org/</a> exists and is up and running! (Well, supposedly you know because you're looking at it right now!)</p><div class="consume-more-buttons"><a href="/news/spritely-website-launches.html">[Read more ==>]</a></div></div></li></ul><p style="text-align: center"><a href="/archive/">[--archive--]</a></p></div><div id="sponsorship" class="content-box" style="margin-top: 20px"><h1>✩ Support for the Spritely Project ✩</h1><p>Spritely has been supported thanks to financial support from the following organizations: </p><div style="display: flex; justify-content: center; flex-wrap: wrap; align-items: center;"><a href="https://nlnet.nl/PET/"><img src="/static/images/logo_nlnet-scaled.png" alt="NLNet" class="gesso-rounded-offwhite" style="max-width: 450px; margin: 8px;" /></a><a href="https://www.ngi.eu/ngi-projects/ngi-zero/"><img src="/static/images/ngi_zero-cropped.png" alt="NGI Zero" class="gesso-rounded-offwhite" style="max-width: 450px; margin: 8px;" /></a><a href="https://dustycloud.org/blog/samsung-stack-zero-grant/"><img src="/static/images/samsung-next-stack-zero.png" alt="Samsung Next Stack Zero" class="gesso-rounded-offwhite" style="max-width: 100%; margin: 8px" /></a><a href="https://dustycloud.org/blog/samsung-stack-zero-grant/"><img src="/static/images/samsung-next-stack-zero.png" alt="Samsung Next Stack Zero" class="gesso-rounded-offwhite" style="max-width: 100%; margin: 8px" /></a><a href="https://fossandcrafts.org/"><img src="/static/images/F_and_C_logo_combined-300px.png" alt="FOSS & Crafts" class="gesso-rounded-offwhite" style="max-width: 100%; margin: 8px" /></a></div></div></div></div><div class="footer"><a href="https://gitlab.com/spritely/spritelyproject.org">Site contents</a> released under <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International</a>. Powered by <a href="https://dthompson.us/projects/haunt.html">Haunt</a>.</div></div></body></html>