I've been deep in the Hive ecosystem lately, and something kept bugging me. The blockchain itself is great. Fast, feeless, genuinely decentralised. But the tools for interacting with it? They feel like they were built to just get the job done and nothing more. I think Hive deserves better than that. I wanted a wallet that feels like opening a proper financial app, something I'd actually enjoy using.
So I built Signet. It's a Chrome extension for managing Hive accounts, signing transactions, and connecting with dApps. Open source, MIT licensed, and designed from scratch around two things I care about a lot: real security and a great user experience.
This was built without funding from the DHF or anyone else. Simply my time and effort.
What It Looks Like
I wanted Signet to feel more like a fintech app than a crypto utility. The design is built around a deep purple palette with Hive's red used as a deliberate accent, not splashed everywhere, just where it matters. Typography is Source Sans 3, chosen for how clean it reads at small sizes inside a 400x600 pixel popup.
The dashboard leads with a portfolio allocation ring, a donut chart showing your HIVE/HP vs HBD split at a glance, with your total USD value right next to it. Below that sits an interactive price chart built with D3.js. You can toggle between 1h, 24h, 1w, 1m, and 1y views, hover to see exact prices at any point, and the line changes color based on whether the trend is up or down. Little things like gradient fills under the curve and smooth interpolation make it feel polished rather than thrown together.
Your HIVE, HBD, and Hive Power balances each show with live USD conversion. Quick actions: Send, Receive, Stake, Savings, Delegate, Swap, are laid out in a color-coded grid. Voting power and resource credits get their own progress bars so you always know where you stand. Everything fades and slides in smoothly. No jarring page jumps.
What You Can Do With It
Here's the full feature set:
- Magi/Vsc Network support
- Contact list If you send to recurring people, a contact list makes it easy to send without typing anything in
- Send and receive HIVE and HBD with confirmation flows and memo support
- Power up and power down — stake HIVE to Hive Power or start the 13-week unstaking process
- Delegation management — create, view, and remove HP delegations
- Savings — deposit and withdraw from savings, with the 20% APR on HBD clearly shown
- HIVE/HBD conversion — both standard and collateralized conversions
- Governance — vote for witnesses and proposals directly from the wallet
- Claim rewards — one-tap reward claiming right on the dashboard
- Transaction history — filterable by type (transfers, power operations, delegations, rewards)
- Multi-account support — manage multiple Hive accounts with a quick-switch dropdown
- Edit accounts — add or remove individual keys after initial setup, so you can start with just a posting key and add your active key later when you need it
- Fingerprint unlock — use Touch ID on Mac or Windows Hello to unlock your wallet instantly. No more typing your password every time
- Auto-lock — configurable idle timer that locks the wallet automatically
- Hive Engine tokens — full Layer 2 token support with balances, transfers, staking, unstaking, delegation, and per-token price charts as well as tickers
- Password manager import — pull in your keys from 1Password, LastPass, or Bitwarden CSV exports. Everything is parsed on-device, nothing leaves your browser
Security
This is the part I spent the most time on, because a wallet that isn't secure is worse than no wallet at all.
Encryption: Every private key is encrypted with AES-256-GCM before it's stored. GCM is authenticated encryption. If anyone tampers with the encrypted data, decryption fails completely rather than producing corrupted output. Every encryption generates a fresh random IV and salt. No reuse, ever.
Key derivation: Your master password goes through PBKDF2 with 600,000 iterations of SHA-256 before it becomes an encryption key. That's the current OWASP recommendation. At that iteration count, an attacker can manage maybe 2-3 password guesses per second per CPU core. A dictionary attack against any reasonable password becomes impractical.
Native crypto: All of this runs through the browser's Web Crypto API — the actual native C++/Rust cryptographic engine, not a JavaScript library. That means timing-attack resistance, key material that JavaScript literally cannot inspect (CryptoKey objects are opaque), and zero third-party crypto code to worry about in the supply chain.
Session storage: Your password lives in chrome.storage.session — memory only, never written to disk, wiped when the browser closes, and isolated to the extension process. The auto-lock timer clears it after inactivity too.
Fingerprint Unlock
This is probably my favourite feature. If your device has a biometric reader, Touch ID on a MacBook, Windows Hello, whatever your platform supports, Signet can use it to unlock your wallet. No password typing required.
The way it works: after your first password unlock, Signet offers to enable biometric authentication. If you accept, it creates a WebAuthn credential through your platform authenticator. On a Mac, that means the Secure Enclave the same hardware security chip that backs macOS Keychain and Apple Pay. Your wallet password gets encrypted with a random AES-256 key, and the only way to decrypt it is by passing the biometric check.
Next time you open the wallet, Touch ID fires automatically. Tap the sensor, and you're in. The password field is still there as a fallback if you need it, but honestly I almost never use it anymore.
You can toggle it on or off anytime from Settings. The whole thing is built on the Web Authentication API, so it works with whatever biometric hardware your OS supports, it's not Mac-specific.
For dApp Developers
Signet injects a window.signet API into every page with 13 methods covering transfers, voting, custom JSON, message signing, delegation, staking, governance, encrypted memos, and conversions. Everything is Promise-based:
window.addEventListener('signet_installed', async () => {
const response = await window.signet.requestTransfer(
'alice', // from
'bob', // to
'10.000', // amount
'Thanks!', // memo
'HIVE' // currency
);
if (response.success) {
console.log('Sent!', response.result);
}
});
Every operation opens a confirmation popup so the user explicitly approves it. Requests timeout after 5 minutes.
For backward compatibility, Signet also exposes a window.hive_keychain shim. If your dApp already works with the callback-style API, it'll work with Signet without changing a line of code. Both signet_installed and hive_keychain_installed events are fired for detection.
Password Manager Import
Most Hive users store their keys in a password manager, which is smart. Signet meets them there. You can export a CSV from 1Password, LastPass, or Bitwarden, and Signet will scan it for Hive-related entries. Matching WIF key formats, labeled fields like "Posting Key", and Hive-related URLs. Select the accounts you want, and they're imported and encrypted locally. The CSV never leaves your device.
It's a small feature but it makes the onboarding experience dramatically better, especially for people who already have their keys organised somewhere.
QR Codes and Payment Links
This is one of those features that sounds simple but changes how you actually use the wallet day-to-day.
On the Receive page, Signet generates a QR code for your account. You can optionally type in a specific amount you want to receive, and the QR updates live. There are two modes:
Mobile mode generates a Hivesigner URL — https://hivesigner.com/sign/transfer?to=alice&amount=10.000 HIVE. When someone scans this QR with their phone camera, it opens their mobile browser, takes them to Hivesigner, and the transfer is pre-filled and ready to sign. No extension needed on mobile. This is the default because it's the most universally useful.
Signet mode generates a hive://transfer?to=alice&amount=10.000¤cy=HIVE URI. This is designed for desktop-to-desktop use. Copy the link, send it to someone, and when they paste it into Signet's Send field, all the transfer details auto-fill instantly — recipient, amount, currency, memo. No typing, no mistakes.
The Send page also has a QR scan button that can read QR codes from image files. And pasting either format (Hivesigner URL or hive:// URI) into the recipient field triggers the same auto-fill behavior. It's the same underlying parser handling all of it.
The real-world flow I use the most: I'm on my laptop, someone on Hive owes me 50 HBD. I open Receive, type 50, switch to HBD, tap "Payment Link". I paste that link in a DM. They paste it into their Signet Send field and everything's filled in. Or if they're on mobile, they click the link and Hivesigner handles it. Either way, the transfer happens with zero friction.
Hive Engine Tokens
This was a big one. Hive Engine is where a lot of the action is on Hive; LEO, SPS, DEC, BEE, and hundreds of other tokens. Signet has a dedicated Tokens tab that pulls all your Hive Engine balances, shows live HIVE prices, and calculates your total Layer 2 portfolio value in USD.
Tap any token and you get a detail view with a D3.js price chart, a breakdown of your liquid, staked, delegated, and pending-unstake balances, and action buttons for transferring, staking, unstaking, and delegating. All without leaving the extension. Under the hood, these are custom_json operations broadcast to the Hive mainchain with the ssc-mainnet-hive id, so they go through the same confirmation and signing flow as everything else.
The token list is searchable and sorted by value, so the tokens you care about are always at the top.
The Stack
For anyone curious about the technical choices:
- TypeScript — a wallet is not the place for runtime type surprises
- Vite + esbuild — Vite builds the popup UI, esbuild handles the service worker and content scripts as lean IIFE bundles
- React 18 — component isolation and a mature ecosystem for the popup SPA
- Tailwind CSS v4 — the entire design system is defined as CSS custom properties, enforced at the framework level
- Zustand — all app state in a single lightweight store, no Redux boilerplate
- D3.js — real data visualization for the price chart, not a charting wrapper
- dhive — the official Hive blockchain client for RPC and transaction handling
- Web Crypto API — native browser cryptography instead of a JavaScript library
What's Coming
Signet is usable today, but there's more I want to build:
- Ledger hardware wallet support
- Multi-chain expansion
- A mobile companion app sharing the same crypto and state logic
- Real-time notifications for incoming transfers
Try It
Signet is open source under the MIT license.
git clone https://github.com/user/signet.git
cd signet
npm install
npm run build
Or download/star the repo here: https://github.com/Vheissu/signet
Load the dist/ folder as an unpacked extension in Chrome and you're up and running.
When I've finished with a few more improvements and done some solid testing, it'll be available on the Chrome Extension Store to officially install.
If you find a bug, open an issue. If you find a security vulnerability, please disclose it responsibly. And if you just want to talk about wallet architecture, I'm always up for that conversation.