py-ipfs-lite
py-ipfs-lite is a lightweight, embeddable Python IPFS peer built on top of py-libp2p.
It provides the core features of IPFS (Blockstore, Bitswap, DHT, IPNI, IPNS, and IPLD DAGs) without the overhead of a heavy Kubo daemon.
It is designed to be highly interoperable with standard IPFS implementations like Kubo and go-ipfs-lite, natively supporting dag-cbor, CARv1 file import/export, Bitswap streaming, and more.
Features
- Embedded IPFS Node: Run a complete IPFS node purely in Python using
trioor standard async. - Bitswap Protocol: Interoperate and exchange blocks directly with Kubo daemons.
- KadDHT & IPNI Routing: Local block lookups with lightning-fast routing via the KadDHT network and Delegated HTTP IPNI (
cid.contact). - IPLD DAG Support: Fully supports
dag-pb,dag-cbor, anddag-jsonfor building decentralized knowledge graphs, versioned datasets, and agent memory chains. - Offline Data Bundles (CAR): Export and import full or partial DAGs as Content Addressable aRchives (
.car). - IPNS Mutable Pointers: Publish and resolve cryptographically signed mutable pointers (IPNS).
- FastAPI HTTP Daemon: A drop-in, Kubo-compatible HTTP API exposing
/api/v0endpoints for adding files, fetching DAGs, and pinning. - Prometheus Metrics: Integrated observability for garbage collection, block sizes, and Bitswap traffic.
Installation
py-ipfs-lite uses uv for dependency management.
# Clone the repository
git clone https://github.com/IPFS-Meshkit/py-ipfs-lite.git
cd py-ipfs-lite
# Install dependencies using uv
uv sync
Quickstart
1. The Python SDK (Embedded Peer)
You can run an IPFS peer directly inside your Python application using trio:
import trio
from py_ipfs_lite.peer import Peer
from py_ipfs_lite.config import Config
async def main():
# Start an ephemeral in-memory peer
peer = Peer(Config(blockstore_type="memory"), listen_addrs=["/ip4/127.0.0.1/tcp/0"])
await peer.start()
# Add a file
cid = await peer.add_file("/path/to/my/file.txt")
print(f"Added file with CID: {cid}")
# Build an IPLD DAG
node_cid = await peer.add_node({"title": "Hello World", "author": "py-ipfs-lite"}, codec="dag-cbor")
print(f"Added DAG node with CID: {node_cid}")
# Publish to IPNS
ipns_name = await peer.publish_name(f"/ipfs/{node_cid}")
print(f"Published to IPNS: {ipns_name}")
await peer.close()
if __name__ == "__main__":
trio.run(main)
2. The CLI Daemon & HTTP API
You can spin up py-ipfs-lite as a standalone daemon that provides a Kubo-compatible HTTP API.
# Run the daemon on port 4001, exposing the HTTP API on port 5001
uv run py-ipfs-lite daemon --api --api-port 5001
Then you can use the standard HTTP API to interact with it:
# Add a file
curl -X POST -F file=@test.txt http://127.0.0.1:5001/api/v0/add
# Fetch an IPLD node
curl -X POST "http://127.0.0.1:5001/api/v0/dag/get?arg=bafy..."
What's Next
| I want to… | Go to… |
|---|---|
Understand how py-ipfs-lite is structured internally |
docs/architecture.md |
| Build verifiable AI agent memory / RAG pipelines | docs/guides/ai-agents-and-rag.md |
| Export a DAG as a CAR file for Filecoin storage | docs/guides/car-files-and-filecoin.md |
| Use IPNS mutable pointers and understand the trust model | docs/guides/ipns.md |
| Interoperate with a live Kubo daemon over Bitswap | docs/guides/interop-with-kubo.md |
| See the full list of all 21 examples with one-line descriptions | docs/reference/examples-index.md |
| Browse all documentation | docs/index.md |
License
MIT License
Release files for py-ipfs-lite 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| py_ipfs_lite-0.1.1.tar.gz | 34.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| py_ipfs_lite-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.6 kB
Release files / py_ipfs_lite-0.1.1.tar.gz
| Download URL | py_ipfs_lite-0.1.1.tar.gz |
|---|---|
| Size | 34.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1fbd7c86e1d9b774e91188da04739e1f94798e783b6eac38a800294cf5b2ac18
|
|
BLAKE2b-256 checksum How to use checksums |
1a105feb652e04991904938da689fc752fa335e022f5dee0fe5a0a52ce9bc203
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency logRelease files / py_ipfs_lite-0.1.1-py3-none-any.whl
| Download URL | py_ipfs_lite-0.1.1-py3-none-any.whl |
|---|---|
| Size | 30.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
459341d7f9de642e4f84e9fc870113408a361000540fca3a694a58cf766b6bfc
|
|
BLAKE2b-256 checksum How to use checksums |
97a3d3c9edd50bf8bdbac4739b8185788b9fcdc74f1ef4d75bf6834eaef8c85b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency log