Design engineering protocol for modern craftspeople.
OBJECTS is a protocol for building physical design apps with identity and sync built in. Developers get a network of users and their data through simple API calls. The protocol handles discovery, connections, and sync regardless of NAT, firewalls, or network topology.
Data is stored locally and synced peer-to-peer over QUIC with automatic hole-punching and relay fallback. Identity and data belong to users, not apps.
- Identity — Passkey and wallet-based identities with human-readable handles
- Sync — Content-addressed blob transfer with BLAKE3 verification
- Offline-first — Work independently, sync when connected
- End-to-end Encrypted — All data and communications encrypted by default
# Clone and build
git clone https://github.com/objectshq/protocol
cd protocol
cargo build --workspace
# Run tests
cargo test --workspace
# Run the CLI
cargo run -p objects-cli -- --helpRun through the full flow: start a node, create an identity, share a project with a peer.
- Rust toolchain (2024 edition)
cargo build --workspace
# Start the node daemon (connects to devnet automatically)
cargo run -p objects-nodeThe node connects to the OBJECTS relay and bootstrap nodes by default. Override with environment variables if needed:
| Variable | Default | Description |
|---|---|---|
OBJECTS_DATA_DIR |
~/.objects |
Local data storage directory |
OBJECTS_API_PORT |
3420 |
HTTP API port |
OBJECTS_QUIC_PORT |
3421 |
QUIC transport port |
OBJECTS_REGISTRY_URL |
https://registry.objects.foundation |
Identity registry |
OBJECTS_BOOTSTRAP_NODES |
(hardcoded devnet nodes) | Comma-separated node IDs |
cargo run -p objects-cli -- identity create --handle "my-handle"cargo run -p objects-cli -- project create --name "My Project"
# Returns a project ID (32 hex characters)cargo run -p objects-cli -- asset add --project <project-id> ./file.objOn Node A — generate a share ticket:
cargo run -p objects-cli -- ticket create --project <project-id>
# Prints a ticket stringOn Node B — redeem the ticket:
# Start a second node (different ports)
OBJECTS_API_PORT=3422 OBJECTS_QUIC_PORT=3423 cargo run -p objects-node
# Redeem the ticket
cargo run -p objects-cli -- ticket redeem <ticket>On Node B, confirm the project and assets arrived:
cargo run -p objects-cli -- project list
cargo run -p objects-cli -- asset list --project <project-id>crates/
├── objects-identity # Identity ID derivation, signatures, handle validation
├── objects-data # Asset, Project, Reference types
├── objects-transport # Iroh wrapper, ALPN config, peer discovery
├── objects-sync # Blob + metadata sync
└── objects-test-utils # Shared test utilities and fixtures
bins/
├── objects-cli # CLI tool
└── objects-node # Node daemon
proto/
└── objects/ # Protobuf definitions (identity/v1, data/v1)
See CONTRIBUTING.md for development setup and guidelines. Please follow our Code of Conduct.
Report a Bug · Request a Feature · Open a Pull Request
Licensed under either of Apache License, Version 2.0 or MIT license at your option.