I’m excited to share **hive-rs**, a new Rust library for building on the Hive blockchain. ![image.png](https://images.hive.blog/DQmRLF1CcGPPM3fsVXrYKPcAHu4rFkXyeewrqYUGNLXR9L6/image.png) If you’ve used `dhive` in JavaScript, the goal here should feel familiar: a practical, typed client that makes common Hive workflows easier while staying close to real RPC behavior. ## Why I Built It Rust has become my default for systems that need reliability, performance, and explicit error handling. Hive has a great ecosystem in JavaScript and Python, but I wanted a native Rust option that I could trust in production services. Node.js is great because it's accessible, but if you want better performing and reliable apps that are always on (like apps that stream the Hive blockchain) you want a language like Rust which is honestly better suited to things like this than Node.js. Surprisingly, there was no existing Hive client for Rust. The goals for `hive-rs` were: - Keep API ergonomics clean and predictable - Provide strong typing for common payloads - Handle real-node quirks without surprising failures - Make signing + broadcasting straightforward - Stay friendly for both scripts and long-running services ## What hive-rs Includes Today At a high level: - Typed clients for core namespaces (`database`, `broadcast`, `blockchain`, `hivemind`, `rc`, `account_by_key`, `transaction_status`) - Transaction creation, serialization, signing, and ID generation - Key utilities (`WIF`, public key derivation, signing/verification) - RC estimation helpers - Block and operation streaming helpers - Multi-node failover transport with backoff ## Reliability Improvements From Real-World Testing During launch testing against public nodes, a few compatibility edge cases showed up. Instead of hiding them in app-level workarounds, I moved those fixes into the library: - Failover now retries only retryable transport failures (timeouts/network), and no longer masks non-transport errors as `AllNodesFailed` - `AccountByKeyApi::get_key_references` falls back to legacy `condenser_api` when appbase variants are unsupported - `TransactionStatusApi::find_transaction` falls back to `condenser_api.get_transaction` when `transaction_status_api` is unavailable - `BroadcastApi::send` now attempts synchronous broadcast first, then falls back to async broadcast + confirmation lookup when needed - Account reputation parsing now handles both string and numeric encodings from nodes These changes were backed by new tests and full suite verification. ## Quick Example ```rust use hive_rs::{Asset, Client, PrivateKey, Result, TransferOperation}; #[tokio::main] async fn main() -> Result<()> { let client = Client::new_default(); let active_key = PrivateKey::from_wif("")?; let confirmation = client .broadcast .transfer( TransferOperation { from: "alice".to_string(), to: "bob".to_string(), amount: Asset::from_string("0.001 HIVE")?, memo: "hello from rust".to_string(), }, &active_key, ) .await?; println!("tx id: {}", confirmation.id); Ok(()) } ``` ## Install ```bash cargo add hive-rs ``` ## Links - Crate: https://crates.io/crates/hive-rs - Docs: https://docs.rs/hive-rs - Source: https://github.com/Vheissu/hive-rs ## What’s Next Short-term roadmap: - More endpoint coverage and type refinements - More integration fixtures across public node variants - Additional high-level helpers for common posting/account workflows If you’re building on Hive with Rust, I’d love feedback: - APIs you want covered first - payloads that need better typing - edge cases from your own node setup Thanks for reading and for supporting open-source tooling in the Hive ecosystem.</div> </div>