igc-net-rs
Rust reference implementation of the igc-net protocol.
Public package identities:
- library package:
igc-net - Rust crate import:
igc_net - CLI package:
igc-net-cli - CLI binary:
igc-net
Status
Implemented (v0.3):
- Base publish/index/fetch protocol and metadata schema (
igc-net/metadata,schema_version = 1) - Metadata validation for canonical timestamps, dates, bbox bounds, and coordinate ranges
- Flat-file blob store and append-only source index
- Private-access key custody (
PrivateAccessKeyStore), restricted-fetch proof signing/verification (FetchProof,GroupFetchProof) - Governance: owner-claim, approval, challenge, resolution, deletion-request,
publication-mode,
pilot_auth_did, private-access rotation records - Pilot identity keys and PIN credentials (
PilotKeyStore,PilotProfileCredentialVC-JWT issuance and verification) - Groups:
GroupStore, creation records, personal member add/remove, public group invite/accept/leave; group-based restricted-fetch access checks - Follow:
FollowStore, follow/unfollow records - Indexer with
index-only,eager, andgeo:<bbox>fetch policies - gRPC sidecar (
igc-net-grpc) — all 28 RPCs inigc_net_v0.proto, including group and follow RPCs via pre-signedsigned_record_json - Loopback integration tests for indexing, fetch, multi-publisher, geo-filtered, and deduplication scenarios
Not yet implemented:
- Part II analytics /
IGC_META_DOC - Portal-convenience group RPCs (
Portal*) that accept(pilot_id, access_pin)and sign records internally — required bycs-archivegroup UI (Phase 0 incs-archive/PLAN.md)
Repository Boundary
This repository is Rust-specific. It does not define the protocol.
The canonical protocol and schema definitions live in the separate igc-net
specification repository. This Rust repository tracks those documents and acts
as the reference implementation for the currently implemented subset.
Current Workspace Layout
igc-net-rs/
├── docs/
├── igc-net/ # library crate
├── igc-net-cli/ # CLI binary
└── igc-net-grpc/ # gRPC sidecar binary
Compatibility Policy
- supported family:
iroh = 0.97.xiroh-gossip = 0.97.xiroh-blobs = 0.99.x
- minimum supported Rust version:
1.94 - upstream minor-version bumps require:
- changelog review
- local test pass
- doc updates if behavior or compatibility policy changes
Documentation
- docs/getting-started.md — Rust consumer quickstart
- docs/metadata-schema.md — Rust mapping of the canonical metadata schema
- crates.io package pages:
- API documentation:
Installation
Install the Rust CLI:
Add the library to your Rust project:
[]
= "0.3"
Notes
- topic IDs are embedded protocol constants; they are not derived dynamically from arbitrary local strings
- metadata serialization is intended to match the protocol spec literally, including canonical timestamps and lowercase BLAKE3 hashes
IgcIrohNode::startreturnsSelf, andpublish/run_indexertake&IgcIrohNode; shared ownership is a caller concern, not forced by the API- Part II analytics is specified at the protocol level but not yet implemented here