IPLD: 2025 In Review
Whether you're building on IPFS, Filecoin, or ATProto, IPLD (InterPlanetary Linked Data) — a shared data model for the self-certifying, content-addressable web — ensures your data is portable and verifiable across platforms. This post covers the past year's progress in the IPLD ecosystem and a preview of what to expect in 2026, with a focus on Rust IPLD.
Rust IPLD: From monolith to modules
Following the JavaScript implementation's lead, we recognized that most projects only need specific IPLD components rather than the full stack. Earlier this year, we successfully migrated the libipld functionality into separate, focused crates and officially deprecated the Rust implementation libipld. This modular architecture is now the standard across all IPLD implementations.
Over the past few months, we helped migrate all actively maintained projects that had updates in the past two years. Many projects had already made the switch on their own.
Performance win: Moving the Python DAG-CBOR library python-libipld to cbor4ii and the latest Rust cid version made Bluesky custom feeds in Python ~2x faster.
Bluesky custom feeds in Python are now ~x2 faster! ~25-35% faster DAG-CBOR decoding, and ~17% faster CID decoding! I do have more ideas on what to try to speed it up even further! For example, applying BOLT on top of the existing PGO. Huge kudos to @vmx.cx for making this happen!
— Ilya (Marshal) (@marshal.dev) December 1, 2025 at 10:32 AM
[image or embed]
Migration guide: what replaces what
If you're Rust developer still using libipld, here's your upgrade path:
For IPLD Data Model work
Use: ipld-core, which is similar to the deprecated libipld-core.
For encoding/decoding
Old way: Custom libipld traits for DAG-CBOR, DAG-JSON, and DAG-PB. libipld-cbor-derive for IPLD Schema-like transformations.
New way: Serde-based crates that go directly from serialization to native Rust types without the IPLD Data Model conversion in between:
serde_ipld_dagcborfor DAG-CBORserde_ipld_dagjsonfor DAG-JSONipld-dagpbfor DAG-PB (not Serde-based since DAG-PB doesn't support the full IPLD Data Model)
IPLD Schema-like transformation can now be done directly with Serde attributes.
Adoption in the wild: serde_ipld_dagcbor is now widely used in the Rust ATProto community, including, rsky (AT Protocol implementation in Rust), ATrium, and jacquard (ATProto/Bluesky libraries).
IPLD Schemas
@rvagg made a big upgrade to the code generation of IPLD Schemas. When you define a schema, you can now generate code for Go, Rust and TypeScript.
Multiformats
The Rust multiformats implementations are under active maintenance and all actionable items on cid, multihash, and multibase have been resolved.
Rust multiformats now joins Go and JS in being stable and production-ready, and you can expect mostly minor dependency updates in 2026.
DASL: Starting Simple, Staying Compatible
Not every project needs IPLD's full flexibility. DASL (Data Addressable Structures and Links) offers a streamlined subset: fewer decisions, fewer dependencies, easier to implement. We worked to ensure the DASL specifications remained a strict subset of IPLD, so data created with DASL tools remain seamlessly compatible with the broader IPLD ecosystem.
Thank You
Special thanks to @Stebalien and @rvagg for their countless hours helping maintain various IPLD and multiformats libraries.