Comprehensive Comparison and ultimate stand off of the dhive vs hive-tx vs hive-js vs wax libraries/packages helps you interact with Hive blockchain. Our team find these type of comparisons and analysis valuable to see which library to use when building on Hive.

Overview
@hiveio/hive-js | @hiveio/dhive | hive-tx | @hiveio/wax | |
|---|---|---|---|---|
Maintainer | @hiveio (community) | @hiveio (community) | @hiveio (core+community) | |
Language | JavaScript (ES6+Babel) | TypeScript 3.8 | TypeScript 5.9 | TypeScript + C++/WASM |
Runtime deps | 27 | 11+ | 4 | 1 (events) |
Bundle size (gzip) | ~154 KB | ~210 KB | ~29 KB | ~3,341 KB |
Source lines | ~7,337 | ~5,956 | ~3,633 | ~8,796 + C++ |
Test lines | ~1,500+ | ~1,579 | ~870 | ~18,339 |
Node.js req | 4+ | 8+ | 20+ | 20.11+ |
Operations | 49 (+SMT) | 50 + 36 virtual | 50+ | 100+ |
Type definitions | None | Full TS | Full TS | Full TS + branded |
License | MIT | BSD-3-Clause-NML | — | — |
1. Architecture Philosophy
hive-js — Fork of steem-js, the original Steem/Hive JS library. Callback-and-promise hybrid API using Bluebird's promisifyAll. Modular design with 7 top-level namespaces (api, auth, broadcast, formatter, memo, config, utils). Supports both HTTP and WebSocket transports (discontinued). The most "batteries-included" but also the heaviest and most legacy.
dhive — Clean rewrite of hive-js in TypeScript. OOP Client class with dedicated helper modules. Dropped WebSocket, callbacks, and Bluebird in favor of async/await. Leaner than hive-js but same conceptual model.
hive-tx — Minimalist, transaction-focused. No client class — configure globals and call standalone functions. Only 4 runtime deps. Modern ESM-first. Deliberately does less but does it with the smallest footprint.
wax — Three-layer: Protobuf → C++ WASM → TypeScript. The C++ core is the same code Hive nodes run. Heaviest bundle but strongest protocol guarantees. Pluggable signer architecture for wallet integrations.
2. Dependencies & Supply Chain
hive-js | dhive | hive-tx | wax | |
|---|---|---|---|---|
Crypto | ecurve, bigi, create-hash, browserify-aes, secure-random, ripemd160 | secp256k1 (native), ecurve, bigi, ripemd160 | C++ WASM (zero JS crypto) | |
HTTP | cross-fetch, ws | cross-fetch, node-fetch | Native fetch | Native fetch |
Binary | bytebuffer | @ecency/bytebuffer | Custom | Protobuf + WASM |
Promises | bluebird | Native | Native | Native |
Utilities | lodash, debug, detect-node | verror, core-js, jsbi | None | events |
Base58 | bs58@4 | bs58@4 | bs58@6 | WASM built-in |
RPC auth | @steemit/rpc-auth | None | None | None |
Total deps | 27 | 11+ | 4 | 1 |
Verdict: hive-js has the largest attack surface — 27 deps including lodash, bluebird, and legacy Steem packages. hive-tx is the leanest (4 audited @noble libs). wax has zero JS crypto deps.
3. Transport & Streaming
Feature | hive-js | dhive | hive-tx | wax |
|---|---|---|---|---|
HTTP/JSON-RPC | Yes | Yes | Yes | Yes |
WebSocket | Yes | No | No | No |
Block streaming | Yes (polling) | Yes (AsyncIterator) | No | No |
Op streaming | Yes ( | Via block stream | No | No |
Tx streaming | Yes ( | Via block stream | No | No |
Stream modes | head / irreversible | head / irreversible | — | — |
Stream control | Release function | AsyncIterator break | — | — |
REST API | No | No | Yes (9 typed endpoints) | Yes (extensible) |
hive-js has the most granular streaming — you can stream block numbers, blocks, transactions, or individual operations separately. dhive provides a single getBlockStream() AsyncIterator that's more idiomatic modern JS. Neither hive-tx nor wax support streaming.
4. Crypto Operations
Capability | hive-js | dhive | hive-tx | wax |
|---|---|---|---|---|
Key from WIF | Yes | Yes | Yes | Via signers |
Key from seed | Yes | Yes | Yes | No |
Key from login | Yes | Yes ( | Yes ( | No |
Random key gen | Yes ( | No | Yes ( | No |
Brain key | Yes | No | No | No |
ECDSA signing | Yes | Yes | Yes | Yes (WASM) |
Signature recovery | Yes | Yes | Yes | Yes |
Memo encrypt/decrypt | Yes | Yes | Yes | Yes |
Password verification | Yes ( | No | No | No |
Key leak detection | No | No | No | Yes |
Multiple signer backends | No | No | No | Yes (5 packages) |
hive-js has the most key-related utilities (brain keys, password verification, role-based generation). wax is the most flexible for dApp integrations with pluggable signers.
5. API Surface
API Surface | hive-js | dhive | hive-tx | wax |
|---|---|---|---|---|
Defined API methods | 95 | ~30 | Raw RPC | ~10 typed |
| Yes (many methods) |
| Via | Typed defs |
| Yes (primary) | Partial | Via | No |
|
|
|
|
|
Block streaming |
|
| No | No |
RC API | Yes |
| Via | Typed |
Hivemind | Yes |
| Via | Via REST |
| Yes | No | Via | No |
Formatter utilities | Yes (reputation, vest→HIVE, account value) | No | No | Yes ( |
Auth helpers | Yes (add/remove key/account auth) | No | No | Yes ( |
Complex op builders | No | No | No | Yes ( |
Quorum verification | No | No | Yes | No |
Request interceptors | No | No | No | Yes |
hive-js has the broadest legacy API coverage (95 methods). wax has the richest operation builders. hive-tx is the only one with quorum verification.
6. Serialization
Feature | hive-js | dhive | hive-tx | wax |
|---|---|---|---|---|
Approach | Hand-written (3,200+ lines ops) | Hand-written (681 lines) | Hand-written (784 lines) | Protobuf + C++ WASM |
Buffer lib |
|
| Custom (612 lines) | Protobuf |
Type system | Most verbose (1,187 lines) | Moderate | Moderate | Proto-generated |
HF26 support | No | No | No | Yes |
Legacy support | Yes (primary) | Yes (primary) | Yes (primary) | Yes (compat) |
Binary debugging | No | No | No | Yes ( |
Protocol fidelity | Manual sync | Manual sync | Manual sync | Byte-for-byte match |
wax wins on serialization correctness — it's the same C++ code the chain runs. The other three all maintain hand-written serializers that could theoretically diverge from the protocol.
7. Type Safety & Developer Experience
Feature | hive-js | dhive | hive-tx | wax |
|---|---|---|---|---|
Language | JavaScript | TypeScript 3.8 | TypeScript 5.9 | TypeScript 5.x |
Type definitions | None | Full | Full | Full + branded |
Strict mode | N/A | Partial | Full | Full |
ESM support | No (CJS only) | No (CJS only) | Yes (ESM+CJS+UMD) | Yes (ESM+CJS) |
Tree-shaking | No | No | Yes | Partial |
API style | Callbacks + Promises (Bluebird) |
|
|
|
Operation typing | Runtime validation | Union types | Generic | Protobuf-generated |
IDE autocomplete | Poor | Good | Excellent | Excellent |
hive-js is the weakest here — no TypeScript, no type definitions, callback-first API. hive-tx and wax offer the best modern DX.
8. Build & Bundle Size
Feature | hive-js | dhive | hive-tx | wax |
|---|---|---|---|---|
Build tool | Babel + Webpack | Make + Browserify | TypeScript + Webpack | Make + Rollup + Emscripten |
Outputs | CJS | CJS | ESM + CJS + UMD | ESM + CJS + WASM |
Minified | 554 KB | ~925 KB | ~90 KB | ~3,341 KB |
Gzipped | 154 KB | 210 KB | ~29 KB | ~3,341 KB |
Source maps | Yes | Yes | Yes | Yes |
Size ranking (smallest to largest gzipped): hive-tx (29 KB) → hive-js (154 KB) → dhive (210 KB) → wax (3,341 KB)
9. Error Handling
Feature | hive-js | dhive | hive-tx | wax |
|---|---|---|---|---|
Error class |
|
|
| Rich hierarchy ( |
Error context | Code + message | Full chain ( | Code + message + data | Request/response + assertion hash |
Failover trigger | Error count threshold | Per-API health tracking | Retry + node rotation | Health checker module |
Broadcast safety | No special handling | Won't retry on timeout | Ignores duplicate tx | Authority verify pre-broadcast |
Key leak detection | No | No | No | Yes |
10. Network Resilience
Feature | hive-js | dhive | hive-tx | wax |
|---|---|---|---|---|
Default timeout | Configurable | 60,000 ms | 10,000 ms | 2,000 ms |
Failover | Error-count threshold | Per-API health tracking | Round-robin retry | Health checker |
Retry library |
| Custom exponential backoff | Built-in | Built-in |
Quorum reads | No | No | Yes | No |
WebSocket fallback | Yes | No | No | No |
RPC auth signing | Yes ( | No | No | No |
11. Unique Features Per Library
hive-js only
WebSocket transport
95 pre-defined API methods with docs
streamOperations()/streamTransactions()granular streamingBrain key generation
Password/WIF validation utilities
Reputation formatter, vest-to-HIVE converter, account value estimator
Multi-signature authority helpers (
addKeyAuth,removeAccountAuth)RPC request signing (
@steemit/rpc-auth)SMT operation support (Smart Media Tokens)
Runs on Node.js 4+
dhive only
AsyncIterator block streaming (modern JS pattern)
Per-API health tracking (bridge failures don't penalize
database_api)VError context chains for debugging
Testnet helper (
Client.testnet())
hive-tx only
callWithQuorum()— cross-check results across multiple nodes9 typed REST APIs (hafah, reputation, NFT tracker, hafsql, etc.)
Smallest bundle (29 KB gzip)
Only 4 runtime dependencies
ESM-first with tree-shaking
wax only
C++ WASM core (byte-for-byte protocol match)
5 pluggable signer packages (Beekeeper, MetaMask, Keychain, PeakVault, External)
Complex operation builders (BlogPost, Reply, Community, RC delegation)
Private key leak detection
Pre-broadcast authority verification
Binary view metadata for debugging
HF26 protobuf serialization format
Request/response interceptors
18K lines of tests + benchmarks
12. When to Use Each
Use hive-js when:
You need WebSocket transport or RPC request signing
You want the broadest pre-defined API (95 methods, no manual RPC calls)
You need fine-grained streaming (operations, transactions, blocks separately)
You're maintaining a legacy codebase that already uses it
You need formatter utilities (reputation, vesting, account value) without writing your own
You need to support very old Node.js (4+)
Don't use for new projects if you care about types, bundle size, or modern JS
Use dhive when:
You want a typed, async/await rewrite of hive-js concepts
You need block streaming with AsyncIterator
You need smart failover with per-API health tracking
The project already depends on it (large existing ecosystem)
Use hive-tx when:
Bundle size is critical (29 KB — mobile, serverless, embedded)
You want minimal supply chain risk (4 deps)
You need quorum verification for security-critical reads
You want modern JS (ESM, tree-shaking, TS 5.9)
You need REST API support
You're building a lightweight tool or script
Use wax when:
You need guaranteed protocol compatibility (same C++ as hive nodes)
You're building a dApp with wallet integrations (MetaMask, Keychain, etc.)
You need complex operation builders or authority verification
Security is paramount (key leak detection, pre-broadcast verification)
You want the most comprehensive test suite
Bundle size doesn't matter
Summary Matrix
Dimension | Winner |
|---|---|
Smallest footprint | hive-tx (29 KB, 4 deps) |
Protocol fidelity | wax (C++ WASM) |
Block/op streaming | hive-js (most granular) |
Wallet integration | wax (5 signer packages) |
Modern JS/TS DX | hive-tx (ESM, TS 5.9) |
Broadest legacy API | hive-js (95 methods) |
Complex op builders | wax (BlogPost, Community, etc.) |
Test coverage | wax (18K lines) |
Security features | wax (key leak, authority verify) |
Network resilience | dhive (per-API health tracking) |
Quorum consensus | hive-tx (unique) |
Legacy compat | hive-js (Node 4+, callbacks) |
REST APIs | hive-tx (9 typed endpoints) |
Formatter utilities | hive-js (reputation, vesting, etc.) |
WebSocket support | hive-js (only one) |
Depending on what you are building, this comparison or overview gives you clear detailed differences. Keep on building!
Hive on!
Thank you @andablackwidow for tagging me!
Great article @ecency ! Thanks for mentioning wax 💪
Here is our package on npm: https://www.npmjs.com/package/@hiveio/wax
Here is the high-level documentation: https://doc.openhive.network/wax/develop/manual
Here are some corrections for
@hiveio/wax💯:@hiveio/waxgzip size is 1.08 MiB (not ~3,341 KB)@hiveio/workerbeecan (which is based on Wax) - https://doc.openhive.network/workerbee/main/manualgetPrivateKeyFromPassword), and suggest the brain key + private key (suggestBrainKey).calculatePublicKeymethodWax also passed an independent security audit as a dependency of
@hiveio/metamask-snap!I have a question. Have you tried to instruct your coding agent to work with
wax? How was your experience?Do you have a link to docs your agent has been able to use to write code?
Hello @asgarth ! Here is the high level Wax documentation: https://doc.openhive.network/wax/develop/manual
Thanks, will give it another try.
Last time I tested it the agent ended up using dhive because figuring out wax was not easy enough.
Great comparison.
As a builder in the Hive ecosystem and founder of HivePostify, I really appreciate this detailed breakdown.
In my experience, choosing the right library depends on the use case. Lightweight apps benefit from hive-tx, while more complex dApps can use wax for security and protocol-level accuracy.
I look forward to more of these in-depth technical comparisons in the Hive ecosystem.
Calling @mtyszczak for comment :o)
Excellent breakdown.
From HivePostify's perspective, this kind of deep comparison helps builders choose the right tools based on real needs instead of hype.
We’ve seen that lightweight solutions like hive-tx work well for fast and scalable features. More complex applications can benefit from wax’s strong security and protocol-level accuracy.
As the Hive ecosystem grows, this technical clarity is important for developers and platforms alike.
Keep up the great work.
That's a great comparison. Developers need this! 👍
good luck
Se ve una gran batalla 🧐
some building, idk what dat means but cool!
great info, thanks for sharing
Excelente publicación.. gracias