3 releases
Uses new Rust 2024
| 0.9.0-alpha.2 | Nov 19, 2025 |
|---|---|
| 0.9.0-alpha.1 | Nov 18, 2025 |
| 0.9.0-alpha.0 | Nov 16, 2025 |
#59 in WebSocket
1MB
27K
SLoC
plcbundle-rs
A high-performance plcbundle management tool and library written in Rust.
Overview
plcbundle-rs provides a universal and efficient interface for managing PLC bundle repositories. It offers:
- Rust Library: Core functionality with a clean, high-level API
- CLI Tool: Comprehensive command-line interface for bundle operations
- HTTP Server: Built-in server with WebSocket support
- FFI Bindings: C and Go bindings for cross-language integration
Features
- ✅ Bundle Management: Load, inspect, and manipulate PLC bundles
- ✅ DID Resolution: Resolve DIDs and query operations
- ✅ Synchronization: Sync with remote PLC servers
- ✅ Verification: Verify bundle integrity and operation chains
- ✅ Query & Export: Flexible querying and export capabilities
- ✅ Index Management: Efficient DID indexing and lookup
- ✅ Performance: Memory-mapped files, parallel processing, and optimized data structures
Installation
From Source
# Clone the repository
git clone https://tangled.org/atscan.net/plcbundle-rs
cd plcbundle-rs
# Build with default features (CLI, Server)
cargo build --release
# Install the binary
cargo install --path .
# or simply run
./target/release/plcbundle --help
As a Library
Add to your Cargo.toml:
[dependencies]
plcbundle = "0.9"
Quick Start
CLI Usage
# Initialize a new repository
plcbundle init --origin https://plc.directory
# Sync with remote server
plcbundle sync
# Query operations for a DID
plcbundle did <did:plc:...>
# Export bundles
plcbundle export --format ndjson
# Start HTTP server
plcbundle server --port 8080
# View repository status
plcbundle status
Library Usage
use plcbundle::{BundleManager, ManagerOptions};
// Initialize manager
let manager = BundleManager::new(
"/path/to/bundles",
ManagerOptions::default()
)?;
// Resolve a DID
let doc = manager.resolve_did("did:plc:example")?;
// Query operations
let ops = manager.get_did_operations("did:plc:example")?;
// Load a bundle
let result = manager.load_bundle(1, Default::default())?;
Project Structure
plcbundle-rs/
├── src/
│ ├── lib.rs # Library entry point
│ ├── manager.rs # Core BundleManager API
│ ├── cli/ # CLI commands
│ ├── server/ # HTTP server implementation
│ └── ... # Core modules
├── bindings/
│ └── go/ # Go FFI bindings
├── docs/ # Documentation
│ ├── API.md # API reference
│ ├── BUNDLE_FORMAT.md # Bundle format specification
│ └── ...
└── tests/ # Integration tests
Documentation
- API Documentation - Complete API reference
- Bundle Format - Bundle file format specification
- Logging - Logging configuration
- Specification - PLC specification
Development
Building
# Build with all features
cargo build --all-features
# Run tests
cargo test
# Generate documentation
cargo doc --open
Features
cli(default): Enables CLI functionalityserver: Enables HTTP server and WebSocket support
Running Tests
# Run all tests
cargo test
# Run specific test suite
cargo test --test manager
cargo test --test server --features server
🚨 Important for Contributors and AI Assistants
Please read RULES.md before contributing or generating code.
Key principle: CLI commands and server code NEVER open bundle files directly - all operations go through the BundleManager API.
License
Dual-licensed under MIT OR Apache-2.0
Author
Tree tree@tree.fail
Repository
Dependencies
~22–44MB
~675K SLoC