igc-net 0.3.0

igc-net protocol rust library — publish and add metadata to IGC flight files
Documentation

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, PilotProfileCredential VC-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, and geo:<bbox> fetch policies
  • gRPC sidecar (igc-net-grpc) — all 28 RPCs in igc_net_v0.proto, including group and follow RPCs via pre-signed signed_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 by cs-archive group UI (Phase 0 in cs-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.x
    • iroh-gossip = 0.97.x
    • iroh-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

Installation

Install the Rust CLI:

cargo install igc-net-cli

Add the library to your Rust project:

[dependencies]
igc-net = "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::start returns Self, and publish / run_indexer take &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