Skip to content

poliukhovych/orion-store

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

orion-store

A minimal content-addressed object store with a gRPC API, RocksDB index, IPFS for bytes, Git-like commits/heads, background replication, and built-in observability (Prometheus metrics + Tempo traces + Grafana).

Features

  • Objects: Put/Get by SHA-256 object id or by IPFS CID
  • Commits & heads: lightweight DAG over objects
  • Replication: gRPC sync between nodes
  • IPFS: stores bytes in Kubo, pins automatically
  • Observability: Prometheus metrics, OpenTelemetry traces, Grafana dashboards
  • CLI: repo-cli for quick interactions

Minimal usage

# Health
docker exec orion-node1 repo-cli health --endpoint http://127.0.0.1:50051

# Put file -> returns object_id & cid
docker exec orion-node1 sh -lc 'echo hello > /tmp/x.txt'
docker exec orion-node1 repo-cli --endpoint http://127.0.0.1:50051 put --file /tmp/x.txt

# Commit metadata (message + cid) to DAG
docker exec orion-node1 repo-cli --endpoint http://127.0.0.1:50051 commit --object-hex <object_id_hex> --cid <cid> --message "init"

# Replicate to node2
docker exec orion-node2 repo-cli --endpoint http://127.0.0.1:50052 sync --remote http://orion-node1:50051 --object-hex <object_id_hex>

Build & run

Requirements: Docker 24+, Docker Compose v2.

# Build the app image via the project Dockerfile
docker compose build

# Start the full stack (IPFS, 2 nodes, Prometheus, Tempo, Grafana)
docker compose up -d

Services (default ports):

  • orion-node1: gRPC :50051, metrics :9100
  • orion-node2: gRPC :50052, metrics :9100
  • ipfs (Kubo): API :5001, Gateway :8080
  • prometheus: :9090
  • tempo: HTTP :3200, OTLP gRPC :4317, OTLP HTTP :4318
  • grafana: :3000

Local cargo build

If you prefer compiling locally:

cargo build -p repo-node -p repo-cli --release

You’ll need a local IPFS Kubo and to set the same env vars as in docker-compose.yml when running repo-node.

Status

Experimental. Use at your own risk.

License

See LICENSE. PRs welcome.

About

A minimal content-addressed object store

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors