MerkleDAG implementation in Python
Project description
py-ipld-dag
IPLD DAG implementation for Python — codecs for DAG-CBOR, DAG-JSON, DAG-PB, and Raw, aligned with the js-multiformats ecosystem.
Provides:
- DAG-CBOR (
0x71) – Deterministic CBOR with CID links (CBOR tag 42) - DAG-JSON (
0x0129) – Deterministic JSON with CID links ({"/": "bafy..."}) - DAG-PB (
0x70) – Protobuf-based Merkle DAG nodes (legacy IPFS/UnixFS) - Raw (
0x55) – Identity codec for raw binary data - Block API –
Block.encode()/Block.decode()/Block.create() - Codec registry – Pluggable codec architecture with auto-registration
- IPLD Data Model – Full support for Null, Bool, Int, Float, String, Bytes, List, Map, Link kinds
- CID integration – Seamless use of py-cid for content addressing
Read more in the documentation on ReadTheDocs. View the release notes.
Quick Start
from dag import Block
from dag.codecs import dag_cbor, dag_json, dag_pb, raw
block = Block.encode(value={"hello": "world", "n": 42}, codec=dag_cbor.codec)
print(block.cid)
print(block.bytes)
restored = Block.decode(data=block.bytes, codec=dag_cbor.codec)
assert restored.value == {"hello": "world", "n": 42}
child = Block.encode(value={"child": True}, codec=dag_cbor.codec)
parent = Block.encode(
value={"link": child.cid, "type": "parent"},
codec=dag_cbor.codec,
)
for path, cid in parent.links():
print(f"{path} -> {cid}")
json_block = Block.encode(
value={"ref": child.cid, "data": b"\xde\xad"},
codec=dag_json.codec,
)
pb_block = Block.encode(
value={
"Data": b"hello UnixFS",
"Links": [{"Hash": child.cid, "Name": "child", "Tsize": 10}],
},
codec=dag_pb.codec,
)
raw_block = Block.encode(value=b"raw binary", codec=raw.codec)
Examples
Example scripts are available in examples/, including
Python equivalents of js-multiformats interface demos:
examples/block_interface/block_interface.pyexamples/cid_interface/cid_interface.pyexamples/multicodec_interface/multicodec_interface.pyexamples/multihash_interface/multihash_interface.py
Run them from the repository root:
source venv/bin/activate
python -m examples.block_interface.block_interface
python -m examples.cid_interface.cid_interface
python -m examples.multicodec_interface.multicodec_interface
python -m examples.multihash_interface.multihash_interface
Installation and usage
Installation (venv, pip/uv, stable and development) and usage are documented in the docs — see Installation and Usage in the table of contents.
Installation
From PyPI (stable):
pip install py-ipld-dag
From source (development):
Same as in CONTRIBUTING.md. With uv (recommended):
git clone https://github.com/ipld/py-ipld-dag.git
cd py-ipld-dag
uv venv && source venv/bin/activate # Windows: venv\Scripts\activate
uv pip install --upgrade pip
uv pip install --group dev -e .
pre-commit install
With pip (requires pip >= 25.1):
python -m venv venv && source venv/bin/activate # Windows: venv\Scripts\activate
pip install --upgrade pip
pip install --group dev -e .
pre-commit install
Or run make install-dev after activating a venv (uses uv).
Full usage, API reference, and examples: Documentation.
Development
- Tests:
pytestormake test - Lint:
make lintorpre-commit run --all-files - Docs:
make docs-ci(build docs with Sphinx)
Contributing
See CONTRIBUTING.md for setup and pull request guidelines.
Release notes
Changelog and release notes are generated from newsfragments with Towncrier and published in the docs: Release notes.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_ipld_dag-0.2.1.tar.gz.
File metadata
- Download URL: py_ipld_dag-0.2.1.tar.gz
- Upload date:
- Size: 40.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90868d02548234aeb492c1e76ade43af92acd8a118af4246603d9b99268f19b7
|
|
| MD5 |
29752c78762c931b6f6ccbc2beb74943
|
|
| BLAKE2b-256 |
af8f861641aa8f6c21b8d829577d8e599879bb353612e00d2815251e89fd58d2
|
File details
Details for the file py_ipld_dag-0.2.1-py3-none-any.whl.
File metadata
- Download URL: py_ipld_dag-0.2.1-py3-none-any.whl
- Upload date:
- Size: 21.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52df9cdb4f1f0f9f6a0b100c7b1a39839f888e61c7053f4df2c53fe627517655
|
|
| MD5 |
21a1702aee448fb47a4b50e4f37f4682
|
|
| BLAKE2b-256 |
713e542bfdb63f4c8666ff0c23bcda228dca751f3447b13431ddd9784d99c2ae
|