Good thought. Per-node CO2 estimates from CPU/RAM specs alone would stack too many unknowns to be honest, we don’t have utilization data, datacenter PUE, or whether the provider uses renewable energy. Country-level grid carbon intensity is the part that’s actually tractable, open datasets like Ember cover it for most countries at the same tier as the World Bank / Freedom House data we already use. Worth looking into, will think about it, thanks!
Update #8
Grid energy
Each node detail card now shows the country’s electricity grid CO₂ intensity (g/kWh), colored by band with a 5-year trend arrow. The expanded panel shows where the country sits between cleanest grids (~30 g/kWh) and dirtiest (~900+), the world average (458.5, 2025), and a freshness flag (fresh / recent / aged / stale). 141 of 145 countries covered from Ember Yearly Electricity Data under CC-BY-4.0. No per-node CO₂ estimates: translating country grid into “your node emits X kg/year” needs utilization, PUE, and hardware data we don’t have, and stacking those unknowns into one number is false precision. The panel shows only what’s verifiable and explicitly says what we don’t compute, in 9 languages.
Provider renewable tier
Sitting next to country grid intensity, the node’s hosting provider gets a six-tier classification: PPA with named project (1), on-site generation (2), matched RECs / Guarantees of Origin (3), unbundled RECs (4), self-declared (5), no public disclosure (6). All 25 providers in the dataset were researched by hand: fetch the official sustainability page, extract exact quotes, capture source URL and verified_at. Where direct fetch failed (Akamai blocks scrapers, HostHatch is SPA-only) the verification method is flagged explicitly and the entry carries a confidence level. 11 providers have per-DC tier overrides because reality is heterogeneous - Hetzner’s DE/FI datacenters are Tier 3 but Hetzner Cloud’s US/SG colocations are Tier 6. The strongest find this round was OVHcloud’s FY25 KPIs PDF, audited by APAVE to ISO/IEC 30134-3 across all 9 owned datacenters showing 100% Renewable Energy Factor - the only provider in the dataset with explicit third-party audit.
Performance
/api/nodes is now gzip-compressed and slim: 221 KB → 40 KB, load time 990 ms → 460 ms. /api/check was hitting 40 seconds because 3 of 4 multi-vantage probe agents had gone offline and every port check waited 6 s × 3 dead agents. A circuit breaker now drops agents after three consecutive failures with 60-second re-probe; /api/check lands at 6-11 s on first hit, ~6.5 s after.
Thanks
This whole Grid energy line started from a comment under Update #7 by @jakea suggesting an environmental impact score. The original proposal (per-node CO₂ from CPU/RAM/bandwidth) was too speculative to do honestly, but the underlying observation was right and the verifiable layers are now in. Thanks jakea. If anyone else has a feature suggestion, drop a comment. Insights, Plan wizard, Multi-vantage, IPv6 Setup Guide, Operator profiles, and now Grid energy all started from operator feedback.
@unclelem I love how this implementation turned out. Thank you for considering the idea!
Update #9
Official Nym probe
Each gateway detail card now shows Nym’s own functional probe, pulled live from the production node-status API that backs Harbour Master. The other checks look at a node from the outside (ports reachable, version, IPv6, exit policy); this one runs traffic THROUGH the gateway the way a real client does: entry routing, exit routing (external IPv4/IPv6), WireGuard handshake (v4/v6), dVPN/Lewes registration, and SOCKS5 HTTPS with latency. The panel carries a freshness badge (green under 6h, amber under 48h, grey older), the node’s performance score, a source link, and a stale warning when the node hasn’t been re-tested recently. It deliberately drops routing_score and config_score: both are 0 for every node in the network right now (deprecated upstream) and would falsely paint every gateway as broken, so we lean on performance plus the boolean dimensions, which are real. Gateways only - a mixnode just forwards sphinx packets, there’s no entry/exit/WG to test, so the section doesn’t render for one rather than invent a number. Getting here meant finding the right source: the staging probe API was serving a snapshot frozen ~9 days (its runner was out of bandwidth credentials), which we verified and reported back; the checker reads the production host, where probes are minutes-fresh. 9 languages.
Two views, cross-checked
Our multi-vantage probe and Nym’s probe hit a node from opposite directions - we knock on ports from several outside vantage points, Nym routes real traffic through the node itself - so the panel flags where they disagree. The useful case: our vantages see ports as closed while Nym routes traffic fine, which usually means the host whitelists Nym’s probe IPs while blocking everyone else. Not something one viewpoint catches alone.
Provider seizure advisory
When a node’s hosting provider has a known critical event, the detail card now leads with a red banner. First one live: WorkTitans B.V. (AS209847, a Dutch front-company for sanctioned Stark Industries / PQ-Hosting / the.hosting). On 2026-05-18 the Dutch FIOD seized ~800 servers and arrested two operators in raids across Enschede, Almere, Dronten and Schiphol-Rijk; infrastructure in the affected locations (US/DE/NL/AT) is gone, not recoverable. Any node on that ASN now gets the warning at the top of its card with the aliases, the issue date, a migrate-now prompt, a 30-day deadline note, and a link to the source (Krebs on Security, not our own docs). The same advisory also floors that provider’s deploy-recommendation score, so it stops being suggested anywhere. Triggered by ASN, 9 languages.
Thanks
Thanks to the Nym team for exposing the functional probe data - this just surfaces their work where an operator can act on it. As always, if you have a feature suggestion, drop a comment. Insights, Plan wizard, Multi-vantage, IPv6 Setup Guide, Operator profiles, Grid energy, the provider advisory, and now the Official probe all came from operator feedback or real incidents.
Update #10
Node economics
Every check so far looked at a node from the setup side - ports, version, IPv6, hardware, T&C. The detail card now also shows the money, read live from the Nyx chain: estimated operator reward this epoch, reward earned and waiting to be claimed, total stake and saturation, pledge, profit margin and operating cost, and the owner wallet’s balance.
The delegation graph
Below that, the full delegation graph: every delegator, the amount, the date, plus each one’s own wallet balance and portfolio size - how many other nodes they back. Every address links straight to that wallet. Vesting-contract delegations are tagged as locked.
Team-backed nodes
Nodes the Delegation Program delegates to now show a TEAM badge with the amount. 522 carry it, so you can tell at a glance which sit on team stake and which on community delegation.
Wallets
There’s now a Wallets tab. Paste any Nyx address: liquid balance with a USD figure, the nodes it operates, everything it delegates, pending operator rewards, and full transaction history - delegate, undelegate, withdraw-reward, send, receive - each row dated and clickable through to the node or counterparty. The public chain endpoint only returns a wallet’s last ~100 transactions, so we index full history from an archive node into our own store (one wallet had 897, not 100), timestamps derived from block height. First view backfills the wallet; every view after is instant.
Nodes wrongly shown unreachable
An operator flagged a node we marked dead that was running fine. Our check only knocked on port 8080, but about one node in nine serves its API elsewhere (mostly 8000, some 8081/7999) - all shown unreachable with a zero score while working. Fixed: we now read each node’s real API port from its on-chain bond record. ~115 nodes were affected.
Faster
Opening a node used to take ~5s, mostly waiting out the timeout on nodes that firewall their status API. Results are now cached, so re-opening is instant, and wallet pages load their core first and stream the on-chain data in behind it.
Nine languages
The newer half of the app had been falling back to English regardless of the language selected. Fixed: 220 strings - economics, delegations, wallets, the official probe, multi-vantage, provider advisory, deploy planner, IPv6 guide, operator profiles, grid - now translated to Russian, Ukrainian, Chinese, Spanish, Turkish, German, French and Italian.
Thanks
Most of this came from operator feedback. Thanks to the Nym team for the contract and validator APIs, and to the archive-node operators who keep full history online. Feature suggestions welcome in the comments.
Update #11
Development’s moving fast - this is the second update within a week. Most of it is one thing: you can now stake straight from the checker.
Stake from the checker
Connect Keplr and delegate to any node without leaving the page. You get your wallet - balance, delegations, pending and claimable rewards - and the stake dialog signs through Keplr, so you approve every transaction yourself and the site never touches your keys. Before you confirm, it shows the node’s saturation and how much room it has left, and warns if your amount would push it past saturation. Nym applies delegations at the epoch boundary, not instantly, so a fresh delegation shows as pending with the time until the next epoch, then lands in your delegations once the epoch turns. One thing worth knowing: adding to a node you already delegate to compounds your accrued rewards into the stake at the same time.
Where to stake
A recommender for picking a node. Enter an amount and a node type; it ranks by 24h performance, low operator margin, active-set membership, and room to saturation. If no single node has room for the whole amount, it lays out a split across several strong nodes so none goes over saturation, each part with a one-click stake. Leave the amount empty for the best nodes overall.
A Nymesis theme
There’s a third theme now, next to light and dark. It’s a tribute to Nymesis, the explorer a lot of us grew fond of - rebuilt in its cream-and-gold, pixel-wordmark look - but with our checker’s data underneath. The full cream table of every node: perf, config, margin, operating cost, delegations, saturation, total stake, owner reward, active set and team-backing. Click a row and it expands in place into that node’s dashboard, economics, delegators and wallet included. Light and dark stay the plain checker; switch to Nymesis when you want the old explorer feel.
Wallet lookup lives in search
The separate Wallets tab is gone. Paste any Nyx address into the main search bar and it opens that wallet - balance, operated nodes, delegations, rewards, full history - the same view as before. Typing a node’s IP, moniker or id still searches nodes. Node types moved into a single dropdown to keep the bar clean.
HTTPS
The checker now runs on https://nymcheckby.unclelem.uk. Wallet extensions only inject into secure pages, so HTTPS was needed for Keplr to show up at all. The old address still works - it redirects - so existing links and node deep-links don’t break.
Thanks
As last time, most of this came from operators trying things and saying what felt off. Thanks to the Nym team for the chain and validator APIs that make the economics and staking possible. Suggestions welcome in the comments.
Update #12
Development’s still moving fast, so here’s #12 close behind #11. This one’s more of a tidy-up pass than a headline feature - but the small stuff is what makes the day-to-day usable, so it matters.
Node identity, easy to grab
Every node’s full identity key now shows on its detail card, in every theme, with one click to copy. Before it was buried - only truncated in the Nymesis table - so if you wanted it you couldn’t get it. It’s handy for verifying a node or delegating from another wallet. Worth noting: staking here delegates by node id, not identity, so you don’t need the key to stake from the checker - but a lot of people wanted it visible, so now it is, and it’s highlighted rather than blending in.
Deep links everywhere
The address bar now follows what you’re looking at. A search puts your query in the URL; opening a node puts the node there. So you can share a link straight to a node or a search, or reload without losing your place, and back/forward behave. The old node deep-links still work.
Works on the phone
Fixed the header spilling off-screen and the whole page drifting sideways on narrow screens. The Nymesis explorer is 18 columns wide, so on mobile that table scrolls sideways on its own - that part’s expected, not a bug.
Small things that were quietly annoying
- Scrolling inside a dialog no longer scrolls the page behind it - in every theme.
- The Nymesis theme no longer occasionally falls back to the plain list layout and gets stuck there.
- Stake and reward figures refresh on their own now, no manual reload to see a change.
- Search still finds a node when you type its name in the wrong keyboard layout (Cyrillic when you meant Latin) - and that now works in the Nymesis theme too, not just light/dark.
Updates show up right away
The page isn’t cached aggressively anymore, so when something ships you get it on the next load instead of hours later. If you’re looking at an older copy, one hard refresh sorts it.
Thanks
Same as last time - most of this is operators poking at it and saying what felt off, right down to “the identity key blends in.” Keep it coming, and thanks to the Nym team for the APIs underneath.
Great work @unclelem - appreciate your constant improivements!
Update #13
Lighter one on the checker’s own surface since #12 - a couple of small fixes - but the real news is what got built on top of it.
Two small checker fixes since #12
- The “latest version” indicator now shows in the Nymesis theme too. Light and dark had it in the header; Nymesis didn’t, so there was no at-a-glance “am I behind?” over there. Now there is.
- The Nymesis theme really stops dropping to the plain layout now. #12 said that was fixed - it wasn’t fully. It could still get stuck on the ordinary list after you’d visited Insights/Network or run a batch check. Found the actual cause and closed it; the explorer stays the explorer.
The big one: the checker grew a companion - Nymi
Nymi (@nyminodebot) is a Telegram bot that watches your nodes and pings you the moment something matters - a new release, your node updating, stake moving in or out, a mixnode’s stress test starting to slip, a node going offline. Almost all of it is powered straight by this checker’s data (version, performance/stress, saturation, stake, rewards) - so the numbers you’d normally open the checker to read now come to you.
There’s a /status command that hands you the vitals for each node in one message, and - if you also run the companion auto-updater - a /update button that force-updates a node on demand. It works even if the checker is the only thing you use: add a node and it’s watched.
Full writeup - what it does, how it works, the security, and three ways to get started:
One quiet hardening
The checker’s backend used to be reachable directly on its raw port too, sidestepping the front door. That’s closed now - it’s served only through the proper HTTPS domain. Nothing you’ll notice on the site; just safer under the hood.
Thanks
Same as always - operators poking at it and saying what felt off. The checker’s data doing the heavy lifting under Nymi is the whole reason it was worth building, and the Nym team’s APIs underneath make all of it possible. More checker-side features still coming.
Update #14
This one is all about the checker’s own surface. Since #13 the whole thing went through a proper redesign pass across all three themes - readability, accessibility, and a couple of things that were stuck in one theme finally working everywhere.
The redesign
- Readability. The Paper (light) theme got the most work: a bunch of controls were low-contrast to the point of nearly invisible - active tabs, filters, status badges, the score numbers. They all read now. Dark stays exactly as it was; Paper and Nymesis were brought up to the same standard.
- Keyboard + screen readers. The explorer table is fully keyboard-operable now - Tab into it, arrow-key between nodes, Enter to open. Controls and search have proper labels, focus is visible, filter results get announced, and animations back off if your OS asks them to. None of it changes how the checker looks; it just means the whole thing works without a mouse.
- Theme switch. The single button that cycled Dark to Paper to Nymesis is gone - it was easy to overshoot and land in a different frontend by accident. It is a plain three-way picker now: you see all three and pick the one you want.
- Nymesis polish. The pixel glitch title actually animates now (the effect was in the CSS but wired to the wrong element, so it never fired). Bold text renders as real bold instead of a smeared fake. Numbers line up in their columns. The teal wordmark is readable. And the big table has a real mobile view - ID and moniker stay pinned while the rest scrolls.
- States. Loading, a failed load (with a Retry), and “nothing matches your filters” (with a Clear filters) are proper states now instead of a blank table.
The explorer table works in every theme now
The sortable node explorer used to be Nymesis-only. There is a ⊞ Table toggle in Dark and Paper too now, so you can sort the whole network by reward, performance, saturation or stake - and filter it - without switching themes to do it.
One-tap “Watch with Nymi”
Every node has a button that adds it to Nymi (@nyminodebot, the bot from #13) in one tap - no copying IPs into Telegram. Add it from the checker and it is watched.
Languages
All the new interface text is translated across all nine languages, so none of the above shows up in English if you run the checker in another language.
Thanks
Same as always - operators poking at it and saying what felt off, especially on the Paper theme and on a phone. The Nym team’s APIs still doing the work underneath. More checker-side features coming.
Update #15
Correctness pass, mostly under the hood. An audit turned up a few places where the checker showed wrong or stuck data; found, fixed, deployed.
- Reward totals for large wallets. Wallets with many delegations (80+) had their pending reward total computed wrong — missing entries were counted as zero. Now correct, and marked partial when a value genuinely can’t be fetched.
- IPv6 status. Node IPv6 was read from the wrong field, so the IPv6 column and its history were unreliable. Fixed, and the corrupted history (10,482 snapshots across 561 nodes) was repaired.
- Panels that could hang. Wallet/staking, transactions, economics and the provider/country views could spin forever on a slow or failed API call. They now show an error with Retry, or a clear “unavailable,” instead of an endless loader — and the staking wallet no longer wedges if its first load fails.
- Stale-data guards. Network stats no longer report mail-server (SMTP) status from a stale cache — if it’s old, it says unknown. Undelegation transactions parse with the right direction and amount. Saturation headroom, version-lag and price-change displays no longer render garbage when a value is missing.
- Wrong owner on detail. A node detail could keep showing a previous node’s owner wallet when it didn’t match; now it clears instead.
