---
title: Experiments
description: The go-iroh-experiments repository — independent modules built on go-iroh, from Rust iroh-experiments ports to gRPC-over-iroh and Secure Enclave key custody.
icon: flask-vial
---

[`github.com/tmc/go-iroh-experiments`](https://github.com/tmc/go-iroh-experiments)
collects experimental modules built on go-iroh. Each experiment is its own Go
module, in its README's words, "so its dependencies stay isolated and it can
be released independently". All modules declare Go 1.26.

Treat these as experiments in the ordinary sense: they are not covered by the
core module's compatibility posture, and they move independently.

## Ports of Rust iroh-experiments

These are clean-room Go ports of the corresponding
[n0-computer/iroh-experiments](https://github.com/n0-computer/iroh-experiments)
subprojects, targeting wire compatibility.

| Module | Purpose |
| --- | --- |
| `pkarrnaming` | content naming published and resolved over the pkarr relay transport |
| `contentdiscovery` | tracker overlay for announcing and finding content providers (ALPN `n0/tracker/1`) |
| `s3baostore` | iroh-blobs provider backed by a remote S3/HTTP object store |
| `dagsync` | IPLD DAG synchronization over iroh (ALPN `DAG_SYNC/1`) |
| `h3iroh` | HTTP/3 connection adapter over an iroh connection |

## Original experiments

| Module | Purpose |
| --- | --- |
| `dtrain` | distributed-training collectives (AllReduce, broadcast, barrier) over a gossip group (ALPN `/dtrain/1`) |
| `directpath` | direct-only QUIC path probe for cross-host and dual-stack go-iroh validation |
| `enclaveiroh` | custody an iroh endpoint's identity in the Apple Secure Enclave, and run it inside a hardened process |
| `grpciroh` | run unmodified gRPC services over an iroh QUIC connection (ALPN `grpc/iroh/1`) |
| `tlogiroh` | distributed transparency log: sumdb/tlog tiles as iroh blobs, gossiped note-signed checkpoints, witness K-of-N cosigning |
| `wasmrelay` | browser (js/wasm) relay-only demos, including a cross-tab gossip chat |
| `x402iroh` | x402-paid HTTP over iroh: endpoint keys authorize payments on an `iroh:ed25519` network (ALPN `x402/iroh/1`) |
| `xetstore` | serve HuggingFace/Xet files as iroh blobs via BAO outboards over HTTP range requests |

Each module has its own `README.md` and package docs — start there; the
one-liners above are the repository's own.

## Using a module

Each module is independent; add only the one you want:

```sh
go get github.com/tmc/go-iroh-experiments/pkarrnaming
```

For local development against a checkout of go-iroh, the repository describes
a `go.work` setup tying the modules together. It is intentionally not
committed, because it carries a local `replace` directive — see the
repository README's "Development" section for the exact commands.

## Next steps

- [Ecosystem map](ecosystem-map) — how the experiments relate to the core
  module's maturity tiers.
- [Module index](repo-index) — the generated inventory of module paths and
  commands.
- [Protocol packages](protocols) — the in-module protocols the experiments
  build on.
