Something went wrong. Try again.
DASL — Data-Addressed Structures & Links — is a small set of simple, standard primitives for working with content-addressed, linked data. If
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284<!doctype html><html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><rect x=%220%22 y=%220%22 width=%22100%22 height=%22100%22 fill=%22%2300ff75%22></rect></svg>"> <title>DASL — Data-Addressed Structures & Links</title> <link rel="stylesheet" href="brutal.css"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" property="og:title" content="DASL — Data-Addressed Structures & Links"> <meta name="twitter:description" property="og:description" content="A small set of simple, standard primitives to work on content-addressed data."> <meta name="twitter:image" property="og:image" content="https://dasl.ing/banner.png"> <meta name="twitter:image:alt" content="Very colourful stripes, so colourful it hurts"> <meta name="twitter:url" property="og:url" content="https://dasl.ing/"> <meta property="og:site_name" content="DASL"> <meta property="og:locale" content="en"> <meta name="theme-color" content="#00ff75"> </head> <body> <div class="stripe" aria-hidden="true"> <span class="yellow"></span><span class="green"></span><span class="purple"></span><span class="orange"></span><span class="red"></span><span class="blue"></span> </div> <main> <header> <div class="masthead"> <div class="wordmark"> <h1>DASL</h1> <span class="sticker">say it like “dazzle”</span> </div> <p class="tagline">Data-Addressed Structures & Links</p> </div> <nav aria-label="Sections"> <a href="#what" class="orange">What</a> <a href="#how" class="purple">How</a> <a href="#code" class="blue">Code</a> <a href="#spec" class="red">Specs</a> </nav> </header>
<section id="what"> <h2>What is this?</h2> <div class="prose"> <p> DASL (“dazzle”) is a small set of simple, standard primitives for working with content-addressed, linked data. It builds on content addressing, a proven approach used in Git and <a href="https://docs.ipfs.tech/concepts/what-is-ipfs/">IPFS</a> to create reliable content identifiers (known as CIDs) through cryptographic hashing. The design is heavily inspired by the IPFS universe, but simplified to improve interoperability, decrease costs, and work well with the web. </p> <p> Systems can verify they received exactly what they asked for and avoid downloading the same content twice. The linked data part lets you link to stuff by its hash. You can build very big graphs with these primitives, such as the graph behind Bluesky. </p> </div> <h3>Our priorities</h3> <ul class="priorities"> <li class="yellow"> <strong>Pave the cowpaths</strong> We support what people solving real-world problems actually use, over engineering ideals or theoretical purity. </li> <li class="green"> <strong>Extensibility vs optionality</strong> Extension points now, but we deliberately don’t use their full range. Options cost everyone. </li> <li class="purple"> <strong>Don’t make me think</strong> Grab it off the shelf and it works. Nothing weird, no impedance mismatch. </li> <li class="orange"> <strong>Lightweight loading</strong> Some people like JavaScript, others don’t. Shipping small code to the browser is critical. </li> <li class="red"> <strong>Unix philosophy</strong> Tiny specs that compose in simple ways and can be implemented independently. </li> </ul> <p> This is intended to work for the community, to grow support for what we need. If you have thoughts, don’t be shy and <a href="https://tangled.org/dasl.ing/dasl.ing/issues">submit an issue</a>! No stupid questions, don’t assume everyone else has context that you don’t. If this page isn’t enough to understand DASL, then we’re the ones who screwed up. </p> </section>
<section id="how"> <h2>How</h2> <div class="how"> <div class="prose"> <p> DASL uses <a href="cid.html">content identifiers</a> to create a shared namespace for content (raw data) and metadata (structured documents), so <a href="drisl.html">documents</a> can easily reference data and other documents. </p> <p> Because identifiers are content-addressed with SHA-256, anything in the namespace can be hosted anywhere and retrieved (<a href="rasl.html">RASL</a>) from anywhere. Data is self-certifying, so you can build open systems without trusting where it came from. </p> <p> Other specs help you build larger systems, like <a href="masl.html">MASL</a> for document schemas and <a href="car.html">CAR</a> for bundling for transfer or storage. Together, they let you build coherent linked data graphs that scale and travel easily. </p> </div> <figure class="example"> <figcaption>Example document <span>(pseudo-JSON, for legibility)</span></figcaption> <pre><code>{ // Some metadata "author": "Samuel Johnson", "ts": "2024-05-03T03:22:04.000Z", "type": "create", "path": "/foo/bar/baz",
// Now we reference a blob of data, by hash. // CIDs can be stored natively as bytes in documents, for efficiency. "data": bafkreifn5yxi7nkftsn46b6x26grda57ict7md2xuvfbsgkiahe2e7vnq4,
// We can reference other documents as well. // The first few bytes of this CID tell us (1) that it points to a // structured CBOR document, not a blob of raw data, and (2) the hash // of that document, so we know whether we already have it stored. "author_profile": bafyreibgiedphoxy4pmqv2jmdm5atqq4dbe5ujtm3ebs6ue7gbwlec5do4}</code></pre> </figure> </div> </section>
<section id="code"> <h2>Implementations</h2> <p> Here are some libraries to get started today. See a missing library? File an <a href="https://tangled.org/dasl.ing/dasl.ing/issues">issue</a> or <a href="https://tangled.org/dasl.ing/dasl.ing/pulls">PR</a>. </p> <!-- Languages ordered by general popularity; new languages go under "Other languages". --> <div class="langs"> <div> <h3>JS / TS</h3> <ul> <li><a href="https://www.npmjs.com/package/@dasl/rasl">@dasl/rasl</a>: RASL handler for ExpressJS.</li> <li><a href="https://www.npmjs.com/package/@dasl/tiles">@dasl/tiles</a>: Web Tiles loader, CLI, and server.</li> <li><a href="https://github.com/mary-ext/atcute/">atcute</a>: lightweight packages for the ATmosphere.</li> <li><a href="https://helia.io/">Helia</a>: modular, browser-friendly IPFS.</li> </ul> </div> <div> <h3>Python</h3> <ul> <li><a href="https://github.com/snarfed/carbox">carbox</a>: CAR v1 reader and writer.</li> <li><a href="https://github.com/DavidBuchanan314/dag-cbrrr">dag-cbrrr</a>: fast DAG-CBOR.</li> <li><a href="https://github.com/MarshalX/python-libipld">python-libipld</a>: Python wrapper around Rust.</li> </ul> </div> <div> <h3>Go</h3> <ul> <li><a href="https://github.com/ipfs/go-cid">go-cid</a>: the CID spec.</li> <li><a href="https://github.com/hyphacoop/go-dasl">go-dasl</a>: DRISL, CID, and more.</li> <li><a href="https://github.com/ipfs/kubo/">Kubo</a> / <a href="https://github.com/ipfs/boxo/">Boxo</a>: the Swiss-Army chainsaw of IPFS.</li> </ul> </div> <div> <h3>Rust</h3> <ul> <li><a href="https://github.com/n0-computer/dasl">dasl</a>: CIDs and DRISL.</li> <li><a href="https://github.com/ipld/rust-ipld-core">ipld-core</a>: fast Rust implementation.</li> <li><a href="https://salsa.debian.org/debian/rust_cid_npm">rust_cid_npm</a>: tiny library, CLI, and npm package.</li> </ul> </div> <div> <h3>Other languages</h3> <ul> <li><a href="https://github.com/cometsh/elixir-dasl">elixir-dasl</a> (Elixir): CID, DRISL, and CAR.</li> </ul> </div> </div> <p> DASL is a strict subset of IPFS CIDs and IPLD, so any library that supports CIDv1 and DAG-CBOR can read DASL data, too. Check each library’s results in the <a href="https://hyphacoop.github.io/dasl-testing/">compliance matrix</a>, or run the <a href="https://github.com/hyphacoop/dasl-testing">test suite</a> yourself. </p> </section>
<section id="spec"> <h2>Specifications</h2> <p class="maturity-key"> <a href="governance.html">Maturity levels:</a> <span class="tag hns"><span aria-hidden="true">H<span class="boom">💥</span>t New Stuff</span><span class="vh">Hot New Stuff</span></span> <span class="tag stabilising">Stabilising</span> <span class="tag stable">Stable</span> </p> <!-- Each group is a plain <dl>. At build time, SISL turns every <dt>/<dd> pair into a card: the title and subtitle come from the spec's <title> and short-name, the tag from maturities.json. Only the link (in the <dt>) and the one-line description (in the <dd>) are written here. --> <section class="group green"> <div class="group-head"> <h3 id="specs-foundations">Foundations</h3> <p class="group-desc">Identifiers, encoding, bundling, and metadata.</p> </div> <dl> <dt><a href="cid.html">CID — Content Identifiers</a></dt> <dd>Identifiers for addressing resources by their contents: essentially a hash with limited metadata.</dd> <dt><a href="drisl.html">DRISL — Deterministic Representation for Interoperable Structures & Links</a></dt> <dd>Deterministic CBOR, so the same data always gets the same CID, with CIDs as compact links.</dd> <dt><a href="car.html">CAR — Content-Addressable aRchives</a></dt> <dd>A set of content-addressed resources in one stream, with a header that describes it.</dd> <dt><a href="masl.html">MASL — Metadata for Arbitrary Structures & Links</a></dt> <dd>CBOR metadata documents for self-contained, self-certified content distribution.</dd> <dt><a href="bdasl.html">BDASL — Big DASL</a></dt> <dd>A hash type for large files with streaming verification. Not in browsers by default.</dd> </dl> </section> <section class="group blue"> <div class="group-head"> <h3 id="specs-retrieval">Retrieval & Discovery</h3> <p class="group-desc">Getting content, and finding out where it lives.</p> </div> <dl> <dt><a href="rasl.html">RASL — Retrieval of Arbitrary Structures & Links</a></dt> <dd>A URL scheme for DASL resources, plus a simple HTTP-based way to fetch them.</dd> <dt><a href="fisl.html">FISL — Finding Internet Structures & Links</a></dt> <dd>An HTTP lookup API that maps CIDs to where you can get them, and who announced them.</dd> <dt><a href="atfisl.html">ATFISL — Content Discovery with the AT Protocol</a></dt> <dd>Publishers announce download locations in their AT repos; indexers gather them for FISL.</dd> </dl> </section> <section class="group purple"> <div class="group-head"> <h3 id="specs-media">Media</h3> <p class="group-desc">Video and audio, provenance, and more.</p> </div> <dl> <dt><a href="muxl.html">MUXL — Media Uniform eXact Layout</a></dt> <dd>Stable identifiers for video and audio. It’s like DRISL for MP4 files!</dd> <dt><a href="s2pa.html">S2PA — Simple Standard for Provenance and Authenticity</a></dt> <dd>C2PA media signing, extended for decentralized identity systems.</dd> <dt><a href="pfp.html">PFP — Perceptual Fingerprint</a></dt> <dd>Perceptual hashes that point at similar content rather than one exact file.</dd> </dl> </section> <section class="group orange"> <div class="group-head"> <h3 id="spec-tiles">Web Tiles</h3> <p class="group-desc">Small, safe, composable web apps.</p> </div> <dl> <dt><a href="tiles.html">Web Tiles</a></dt> <dd>Composable web docs and apps that run safely anywhere: social media, chat, agents, and malleable software.</dd> <dt><a href="tiles-protocols.html">Tiles Protocols</a></dt> <dd>How tiles get capabilities and talk to whatever environment they’re embedded in.</dd> <dt><a href="tp-data.html">Tiles Protocol: Data Passing</a></dt> <dd>Passing data to and from tiles, so they fit into any environment.</dd> </dl> </section> <section class="group yellow"> <div class="group-head"> <h3 id="specs-informative">Informative</h3> <p class="group-desc">Guidance and project documents.</p> </div> <dl> <dt><a href="ipfs.html">IPFS Interoperability Considerations</a></dt> <dd>What to consider when using DASL with IPFS systems, especially DHT and Bitswap ones.</dd> <dt><a href="governance.html">Governance of the DASL Project</a></dt> <dd>How the DASL Project works: stewards, editors, maturity levels, and new specs.</dd> </dl> </section> </section>
<footer> <p>Made with 👾 by the IPFS Foundation.</p> <nav aria-label="Project"> <a href="https://tangled.org/dasl.ing/dasl.ing" class="yellow">Source</a> <a href="https://tangled.org/dasl.ing/dasl.ing/issues" class="green">Issues</a> </nav> </footer> </main> </body></html>