Archive post
I built a Hive witness widget for my desktop (dms/dux)
Install a DankMaterialShell widget for Hive witness rank, missed blocks and balances, with RPC, privacy and process-handling notes.
I check the same three tabs most days: my witness rank, my wallet, and the price of HIVE. So I built the thing I wanted instead — a small DankMaterialShell (aka [dux](https://duxlabs.dev/)) plugin that puts it all on my bar and my desktop.
It's called **HIVE Witness**, it's at [github.com/ausbitbank/hiveWitness](https://github.com/ausbitbank/hiveWitness), and today it's at **2.5.0** — the first public release.

## What it does
The bar pill is the glance: rank and votes by default, or rank plus portfolio value, or just one of them. Click it and you get the full card. The same card can sit on the desktop permanently, which is how I usually use it.
The card shows:
- **Witness standing** — rank, total votes, share of the vesting pool, and missed blocks.
- **Balances and stake** — liquid HIVE and HBD, savings, staked HP, and delegation.
- **Powerdown** — the next weekly drip, a countdown to it, and how many cycles are left.
- **Portfolio value** — in USD, AUD, NZD, CAD, GBP or EUR, priced from CoinGecko with the node's HBD ticker as a fallback.
- **A 7-day sparkline** — hover for values, with a 7d change pill.
If the account isn't a witness, it still shows balances and stake, and the witness-only rows read `—` instead of making something up.
## Installing it
You'll need DankMaterialShell `>= 1.2.0` and `curl` on your `PATH`. Any supported compositor should be fine.
```bash
git clone https://github.com/ausbitbank/hiveWitness.git \
~/.config/dms/plugins/hiveWitness
```
Then tell DMS to rescan:
```bash
dms ipc call plugin-scan reload hiveWitness
```
If it was already enabled and the new code doesn't show up, restart the shell:
```bash
systemctl --user restart dms.service
```
Enable **HIVE Witness** in Settings → Plugins, then set your account in the plugin settings. A fresh install says **No account set** — I deliberately left the default empty rather than shipping someone else's account.
## A note on privacy
It only talks to public endpoints: your configured Hive node, CoinGecko for price, and Frankfurter (with an open.er-api fallback) for FX. There's no telemetry and no analytics. The only account it asks about is the one you give it, and only public on-chain data comes back.
The optional CoinGecko key is the one caveat. DMS stores it in plain text in `~/.config/dms/plugin_settings.json`, and it's visible to local processes in the `curl` argument list while a request runs. Leave it blank unless you need the higher rate limit — the keyless endpoint is rate limited, but it works.
HTTP goes through `curl` because that's the supported DMS process interface. Requests are launched with an argument array rather than a shell, so settings can't inject commands.
## What I'd like from you
First up, this is a pretty niche thing, I honestly don't know if any other hive witnesses are using dms/dux but it exists so I may as well release it publicly anyway.
This is the first public release, so I'd genuinely like to hear where it's wrong or where it's missing something. If you run a witness, the useful feedback is usually "this number doesn't match what the explorer says" — that's a bug, and I want it. If you don't run one, tell me whether the card is still useful for stake and portfolio, because that was a deliberate design choice.
Issues and PRs are open. There's a [`docs/DEVELOPMENT.md`](https://github.com/ausbitbank/hiveWitness/blob/main/docs/DEVELOPMENT.md) with the architecture notes and the QML traps I hit, in case you want to poke at it.
```bash
git clone https://github.com/ausbitbank/hiveWitness.git \
~/.config/dms/plugins/hiveWitness
dms ipc call plugin-scan reload hiveWitness
```
MIT licensed.
*My usual apologies for being crap at blogging and going silent for so long. I'm still around, just getting my ass kicked by life in general and struggling to find motivation to post publicly. <3