Bitcoin Forum
September 16, 2026, 08:52:47 PM *
News: Latest Bitcoin Core release: 31.1 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: [ANN] BlockYard 0.1.0 — Node monitor, 3D block-space viewer and block explorer  (Read 128 times)
BobLawblaw (OP)
Legendary
*
Offline

Activity: 2099
Merit: 6361


Your Favorite Gay Negro from Outer Space


View Profile
September 14, 2026, 10:14:21 PM
Last edit: Today at 01:50:06 AM by BobLawblaw
Merited by vapourminer (1), JayJuanGee (1), psycodad (1), [btc] (1)
 #1

[ANN] BlockYard 0.1.0 — a live monitor, 3D block-space viewer and block explorer for your own Bitcoin Core node. Zero dependencies. Zero telemetry. Hardened by default. 100% AI-written, human-directed.

Repository: https://github.com/BobClawblaw/blockyard
Release: https://github.com/BobClawblaw/blockyard/releases/tag/v0.1.0
npm: npm install -g blockyard
Licence: Apache-2.0



Two days ago we posted 0.0.9, the initial release. This is 0.1.0 — everything since, in one release, and the first one we would call the real starting point. The short version: it ships hardened by default, it makes no outbound connection to anyone but your node until you say so, every page fits one screen, the layout's colours are yours to choose, the Mining tab is a proper dashboard, and yes, it runs DOOM. Also Wolfenstein 3D and Quake.

What it is

BlockYard is a self-hosted web app you point at your own Bitcoin Core node. Open a browser and you get a live dashboard of the node and the network, a 3D view of the block space being built in the mempool, a full block / transaction / address explorer with its own address index, exchange prices with order-book depth (opt-in), a mining dashboard, and a kiosk view for a wall screen. Every number on every page comes from your node — or, only if you switch it on, from a public exchange API.

It is written in plain JavaScript on Node.js with zero dependencies. Not "few": zero. package.json has no dependencies and no devDependencies. No framework, no bundler, no CSS library, no chart library, no 3D library, no TLS library — the certificate generator is ours too — and no test framework beyond node:test. There is no CDN in the browser app. npm install installs nothing but BlockYard itself. The 945 unit tests run with npm test and need nothing but Node.

It is read-only toward your node by default. It never signs, never spends, never asks for a wallet.

Zero telemetry, and we mean it

The first review of 0.0.9 in this thread pointed out, correctly, that a monitor which binds every interface with no sign-in is not something to ship. 0.1.0 is the answer, and it goes further than the review asked.

  • Nothing leaves your machine unless you switch it on. Out of the box BlockYard talks to your node and to nobody else. No update check, no crash reports, no analytics, no fonts or scripts from a CDN, no "phone home" of any kind — there is no code path for it. The one feature that talks to the outside world, the exchange price feed, is off by default and behind an explicit switch: Display settings → Markets & Price → Enable market polling. Until a human ticks that box, the Markets and Kiosk tabs say so and show nothing, the Overview shows no price line and the explorer shows no dollar figures. Tick it and the server polls five exchanges' public APIs — only while someone is looking at the page, and it stops ten minutes after the last look. Untick it and the feed parks at once. An operator who wants to be certain can set BLOCKYARD_MARKETS=0 and the switch cannot turn it on.
  • Bound to this machine. The default bind is 127.0.0.1. Reach it from elsewhere over an SSH tunnel, or bind a LAN address on purpose — the installer asks twice before it writes a non-loopback address.
  • Sign-in on. The first start creates the admin account and prints its password once (or takes it from BLOCKYARD_ADMIN_PASSWORD). Passwords are stored as scrypt hashes; there are viewer, operator and admin roles, rate limits and an audit log. Open read-only access is still a choice (BLOCKYARD_AUTH=0) — announced at boot, never silent.
  • HTTPS by default. Every listener serves HTTPS. With no certificate of your own named, the first start makes a self-signed one — and because the project has no dependencies, that meant writing an X.509 certificate generator in plain Node: a v3 certificate assembled in DER, ECDSA P-256 over SHA-256, naming the bound hosts, the machine's addresses and its hostname, remade near expiry or when a bound address is missing from it. The browser warns once per address and remembers it. Your own certificate replaces it, blockyard tls remakes it with extra names, and BLOCKYARD_TLS=0 serves plain HTTP behind your own reverse proxy.
  • A content-security policy with no inline scripts and no inline styles, a default-deny allowlist in front of the RPC console, and a security posture written up in the repo with two AI audits and their remediations.

What it does

Live monitor. The Overview is the node at a glance: sync state with an honest ETA, block flow (the blocks being projected, the block being built, recent blocks with who mined them), mempool size and fee charts, peers and bandwidth, the node's event stream, and a provenance table that says where every figure came from and how old it is. Pages for Chain & Sync, Mempool, Peers, Network, Mining, Events, and a read-only RPC console. Everything updates live over one server-sent-events stream; several people can watch the same node from several screens. New in 0.1.0: every page fits one screen — we measured each tab at a laptop's 1093×945 and at 1600×1000 and packed it until it did.

Block space, in 3D. The next block's worth of the mempool as a board of glowing stones: area is vbytes, colour is feerate. When the pool changes, the blocks lift, travel in collision-free lanes and land under gravity. At rest the board comes alive with thirty-odd idle effects — ripples, light cycles, ball lightning, a UFO's tractor beam, Missile Command, a centipede, fireworks, a supernova, an x-ray sweep, a spiral galaxy turning behind it — every one a switch, with sliders for how often they play. Neon tubes, metallic and chrome finishes, a movable lamp, perspective, a star field.



Mining, the mempool.space way. New in 0.1.0: reward stats over the last 144 blocks, the difficulty period with the estimated and previous change and the next halving, a week of pools as a labelled pie (every pool named beside its slice with a leader line), a year of hashrate with the difficulty's steps, and the last twelve adjustments — laid out like mempool.space's mining dashboard with a View more » on each card that opens it full screen. Every figure comes from your own node's getblockstats and block headers; dollar figures appear only if you switched the price feed on.



An explorer that looks the part. Search a height, a block hash, a txid or an address. Block pages with the full transaction list, fee distribution and miner attribution (151 pools). Transaction pages with fee, fee rate, feature badges (SegWit, Taproot, RBF, consolidation, OP_RETURN, coinbase), a flow diagram from inputs to outputs, and links to where every coin came from and where it went. Address pages with full history, balance and unspent outputs — Bitcoin Core has no address index at any setting, so BlockYard builds its own from the node's block and undo files, kept current as blocks arrive, balances checked against scantxoutset to the satoshi. It builds in the background the first time you start (a few hours, ~125 GB of disk) while every other page keeps working.



Markets (opt-in). Public prices from Coinbase, Kraken, Bitstamp, Bitfinex and OKX: a 3D candle board on the same engine as the block space with a neon price line and its own effects — a black hole that crosses the chart and bends the price line round it, a supernova, a light saber, a light curtain — a precise flat candlestick chart, an exchange table and a bitcoinity-style order-book depth chart. Fetched by the server only while someone is looking, and only after you tick the switch.



Appearance. New in 0.1.0: the layout's colours are a setting. Light, Dark or System (follows the OS); five themes as cards with swatches — BlockYard (the shipped look), Mono, Nous, GitHub Light/Dark Default and Catppuccin Latte/Mocha — and Custom: nine colour pickers with the rest of the scheme derived from them, and a customise button that copies the current theme into the pickers so you start from a look. The charts' axes, grids and tooltips follow the theme too. Saved on the server, so every screen agrees.



Kiosk. The 3D markets board, a price panel and the block-space board side by side, full screen in one click. Put it on the wall.



Can it run DOOM?

Naturally. Someone asked after 0.0.9, and the answer is now Wolfenstein 3D, DOOM and Quake under the Diversions menu, next to Tetrust, Blockout and Blockanoid. The three id Software shareware releases run unmodified — the original WOLF3D.EXE, DOOM.EXE and QUAKE.EXE with their data files, dropped into a games/ directory — on a PC emulated in the browser, written for this project with no dependencies: an i386 interpreter with a 487, real mode for Wolfenstein, the DOS/4GW and go32/CWSDPMI extenders for DOOM and Quake, DOS, DPMI, BIOS, timer, keyboard, a planar VGA, and a Sound Blaster Pro 2 with an OPL3 for the music and effects. Demos, menus, savegames, high scores and ENDOOM all work; savegames stay in your browser. The server never touches the game files except to hand them to the page.

Getting it to a good frame rate was the interesting part. The page's content-security policy forbids eval, so there is no JIT to hide behind: the interpreter has to run tens of millions of x86 instructions a second in plain JavaScript. What that took, in the order we found it:
  • Every value is an int32. An unsigned 32-bit result written as >>> 0 above 2^31 becomes a double, and a double in a closure variable is an allocation; the first cut spent its time in the garbage collector. Unsigned comparisons flip the sign bit instead.
  • Lazy flags. Arithmetic records its operands and result in an Int32Array; CF, ZF, SF, OF, PF and AF are computed only when something reads them — a conditional jump reads a compare's operands directly.
  • One try/catch around the loop, not around each instruction (that alone cost 14%).
  • Decoded instructions are cached. Each instruction is decoded once into three int32s — a handler number with its registers packed beside it, a displacement, an immediate — in an Int32Array per 4 KB page, and the run loop dispatches on the handler number with one switch. Not closures: a closure per instruction made every call site megamorphic and ran slower than the plain interpreter. Writes into a page holding decoded code invalidate only the instructions they overlap, which matters because DOOM and Quake both patch constants into their own span-drawing code on every call.
  • A handler per ALU operation with its flag bookkeeping inline rather than one shared routine branching on the operation, and the x87 forms Quake runs most decoded to handlers of their own.
  • Memory addresses formed inline in the loop before the switch, and aligned reads and writes inlined in the hottest moves: the switch is too big for V8 to inline helpers into every case, and those calls were most of what was left.
The numbers, all in the repo's measurements log: Quake went from 77 to about 141 million instructions a second on one core, and its timedemo demo1 from 28.9 to 52.5 frames a second of wall time; in the browser Quake plays at 40–50 fps, DOOM at its own 35 fps cap with a hundred million instructions a second to spare, and Wolfenstein 3D at its full 70 fps. Two things we tried and removed, because the measurements said so: fused compare-and-branch dispatch, and "no flags" instruction forms chosen by flag liveness — the look-ahead re-ran on every re-decode of DOOM's self-patching drawer and gained nothing.

Setting it up

You need Bitcoin Core 25.0 or later with server=1 and txindex=1, Node.js 22 or later, and BlockYard on the same machine as the node — it reads the node's block files to build the address index.

From npm (config and index under ~/.blockyard):

Code:
npm install -g blockyard
blockyard setup
blockyard start

From GitHub (config in config/ and the index in data/ inside the checkout):

Code:
git clone https://github.com/BobClawblaw/blockyard.git
cd blockyard
npm test          # optional: the 945 unit tests, nothing to install first
npm run setup
npm start

setup finds your bitcoin.conf, reads the RPC settings out of it, proves the credentials, the chain, txindex, the block files and how fast the node answers, writes its config, and starts the address index build in the background. The first start prints listening on https://127.0.0.1:21000 and the admin password, once. Open https://127.0.0.1:21000, accept the self-signed certificate, sign in. If you want prices, tick Display settings → Markets & Price → Enable market polling. Full walk-through for macOS and Linux in docs/GETTING-STARTED.md.

Updating from 0.0.9: git pull and restart. Because the defaults hardened, the first start after the update serves HTTPS on the same port, creates the admin account and prints its password once, and leaves the price feed off until you tick it. docs/INSTALL.md §11 has the details, including how to keep an open, plain-HTTP setup if that is what you want.

Uninstalling is deleting BlockYard's own directories; it never edits bitcoin.conf and leaves the node exactly as it found it.

Changelog since 0.0.9

Security
  • Binds 127.0.0.1 by default; sign-in on by default with a first-start admin account; the installer asks twice before writing a non-loopback bind.
  • HTTPS by default, with a self-signed certificate made in pure Node on the first start; blockyard tls to remake it; BLOCKYARD_TLS=0 for a proxy.
  • Market polling off by default behind an explicit switch shared by every screen; BLOCKYARD_MARKETS=0 removes the feed entirely. No other outbound connection exists.
Appearance
  • A first Display settings tab: Light / Dark / System, five themes (BlockYard, Mono, Nous, GitHub, Catppuccin) each with a light and a dark face, and a Custom scheme from nine pickers with the rest derived; "customise" copies the current theme into the pickers. Charts follow the theme.
Mining
  • The network row: 144-block reward stats, the difficulty period, a week of pools as a labelled pie, a year of hashrate and difficulty, the last twelve adjustments — from this node alone.
  • mempool.space's two-column layout with View more » panels; dollar figures via a new /api/price that never starts the polling itself.
  • A streak of stale full-pool poll drops is one event with a counter, not one event per drop.
Every tab on one screen
  • Overview, Block space, Chain & Sync, Mempool, Explorer, Markets, Kiosk, Peers, Network, Mining, Events, Node & RPC, Admin, About, the settings sheet, sign-in and the 404 page, each measured and packed; Markets puts the exchange table and the depth chart side by side; the Diversions take the window's height; the DOS screen is always 4:3.
DOS Diversions
  • Wolfenstein 3D, DOOM and Quake on an emulated PC written here (i386 + 487, real mode, DOS/4GW and DJGPP extenders, VGA, Sound Blaster Pro 2 + OPL3), with the optimisations above; an exit from full screen (button, or hold Esc).
Markets and the effects
  • New: black hole (crossing the board, bending the price line), supernova (white-hot flash, 128 gas plumes, a violet nebula, a pulsar), x-ray, breathe, light saber; fireworks as a real display (off by default); the energy pulse as plasma; the scan line as a light curtain; ball lightning as a light source.
  • The Markets board keeps its price fit across refreshes; effects never repeat before every other has played; layered soft fills add up correctly; a Kiosk test plays every effect on the small panels.
Fixed
  • The donation QR shows on Safari (a PNG instead of 800 SVG rects).
  • A dead address-index worker fails the build with a named cause instead of hanging it at "1 s left" for an hour and a half.
Full detail, every item: https://github.com/BobClawblaw/blockyard/blob/main/CHANGELOG.md

How it was made

Every line of BlockYard was written by an AI, directed by a human. The server, the browser app, the 3D engine, the games, the PC emulator, the certificate generator, the tests, the installer and every document — machine-generated, under the direction of one human operator who never typed a line of it. The direction was real work: what to build, what was wrong, what was ugly, what was too often, what was too dark, what did not fit on the screen. The coding was the machine's, and so was the auditing; the audits, the defects register and the measurements behind every number in the docs are all in the repository. When a review in this thread found a problem, the fix landed the next day and this post says so.

It is still experimental pre-release software. Expect bugs. If you run it, tell us what broke — issues and pull requests are open — and if you read the code, tell us what you think of code that no human wrote.

Links


Apache-2.0. Run your own node.
cAPSLOCK
Legendary
*
Offline

Activity: 4494
Merit: 8197


Balakay2b edition!


View Profile
September 14, 2026, 11:42:11 PM
 #2

Cool!
Cinexa
Member
**
Offline

Activity: 70
Merit: 111


View Profile WWW
September 15, 2026, 02:09:54 PM
Merited by BobLawblaw (5), vapourminer (4)
 #3

Looked through the github, the v0.0.9 release, the npm package, and the security/docs links. A ton of the marketing adds up: Apache-2.0, empty dependencies, npm tarball matches the github one, docs exist, and node --test gave me 862/862 passes (seems like release notes that say 864 are slightly off). CSP, realpath-contained static serving, scrypt sessions, and the default-deny rpc allowlist are real engineering, not just fluff in the readme.

Default is 0.0.0.0 with auth disabled, so anyone that can hit port 21000 gets node state plus the read RPC console. Your own published audit also shows you previously shipped a HIGH open-mode credential leak on /api/config/node/test (fixed same day, with a PoC in-repo) - good that you documented it, bad that it existed at all. AI self-audits are not a value-add independent review. Also plan for ~125 GB of address-index disk on the same machine as Core, this is not a light side panel.

Interesting project, but I would run it only bound to 127.0.0.1, with BLOCKYARD_AUTH=1, behind SSH/TLS, and having read the security docs - not as a casual LAN dashboard.
BobLawblaw (OP)
Legendary
*
Offline

Activity: 2099
Merit: 6361


Your Favorite Gay Negro from Outer Space


View Profile
September 15, 2026, 03:29:40 PM
Last edit: September 15, 2026, 07:14:12 PM by BobLawblaw
 #4

Interesting project, but I would run it only bound to 127.0.0.1, with BLOCKYARD_AUTH=1, behind SSH/TLS, and having read the security docs - not as a casual LAN dashboard.

I'll harden it for the official 0.1.0 release... next week probably.

Appreciate the feedback.

EDIT: Hope to have 0.0.10 out later this afternoon that will be hardened by default. I got DOOM up-and-running with zero dependancies in a DOS Emulator, running shareware v1.9 in the Diversions.

BobLawblaw (OP)
Legendary
*
Offline

Activity: 2099
Merit: 6361


Your Favorite Gay Negro from Outer Space


View Profile
Today at 01:40:25 AM
 #5

0.0.9 Archive Post

[ANN] BlockYard 0.0.9 — a live monitor, 3D block-space viewer and block explorer for your own Bitcoin Core node. Zero dependencies. 100% AI-written, human-directed.

Repository: https://github.com/BobClawblaw/blockyard
Release: https://github.com/BobClawblaw/blockyard/releases/tag/v0.0.9
npm: npm install -g blockyard
Licence: Apache-2.0



What it is

BlockYard is a self-hosted web app you point at your own Bitcoin Core node. Open a browser and you get a live dashboard of the node and the network, a 3D view of the block space being built in the mempool, a full block / transaction / address explorer, exchange prices with order-book depth, and a kiosk view for a wall screen. Every number on every page comes from your node or from a public exchange API — no third party sits between you and the chain.

It is written in plain JavaScript on Node.js with zero dependencies. Not "few": zero. package.json has no dependencies and no devDependencies. No framework, no bundler, no CSS library, no chart library, no 3D library, no test framework beyond node:test. There is no CDN in the browser app and no telemetry anywhere. npm install installs nothing but BlockYard itself. The 862 unit tests run with npm test and need nothing but Node.

It is read-only toward your node by default. It never signs, never spends, never asks for a wallet.

What it does

Live monitor. The Overview is the node at a glance: sync state with an honest ETA, block flow (the blocks being projected, the block being built, recent blocks with who mined them), mempool size and fee charts, peers and bandwidth, the node's event stream, and a provenance table that says where every figure came from and how old it is. Pages for Chain & Sync, Mempool, Peers, Network, Mining, Events, and a read-only RPC console behind a default-deny allowlist. Everything updates live over one server-sent-events stream; several people can watch the same node from several screens.

Block space, in 3D. The next block's worth of the mempool as a board of glowing stones: area is vbytes, colour is feerate. When the pool changes, the blocks lift, travel in collision-free lanes and land under gravity. At rest the board comes alive with thirty idle effects — ripples, light cycles, a lightning ball, ball lightning that arcs from stone to stone, a UFO's tractor beam, Missile Command, a centipede, fireworks, a code rain, a spiral galaxy turning behind it — every one of them a switch, with sliders for how often they play. Neon tubes, metallic and chrome finishes, a movable lamp, perspective, a star field. It is the part of the project we spent the most time on because it is the part that makes people stop and look.



An explorer that looks the part. Search a height, a block hash, a txid or an address. Block pages with the full transaction list, fee distribution and miner attribution (151 pools). Transaction pages with fee, fee rate and dollar value, feature badges (SegWit, Taproot, RBF, consolidation, OP_RETURN, coinbase), a flow diagram from inputs to outputs, and links to where every coin came from and where it went.

Address pages with full history, balance and unspent outputs. Bitcoin Core has no address index at any setting — getaddressbalance and friends belong to forks, and stock Core answers Method not found — so BlockYard builds its own from the node's block and undo files: one row per (address, transaction) with the net amount, kept current as blocks arrive, balances checked against scantxoutset to the satoshi. It builds in the background the first time you start (expect a few hours, and ~125 GB of disk) while every other page keeps working.



Markets. Public prices from Coinbase, Kraken, Bitstamp, Bitfinex and OKX: a 3D candle board on the same engine as the block space, with a neon price line and its own set of effects; a precise flat candlestick chart; an exchange table; and a bitcoinity-style order-book depth chart. Fetched by the server only while someone is looking at the page.



Kiosk. The 3D markets board, a price panel and the block-space board side by side, full screen in one click. Put it on the wall.

Diversions. Three playable games built on the same 3D engine, because we could: Tetrust (Tetris in the block-space well, with music synthesised in the browser), Blockout (Breakout against a wall of block-space stones) and Blockanoid (Arkanoid, with capsules and enemies).

Multi-user, with accounts. Viewer, operator and admin roles, rate limiting, a security posture documented in the repo. Display settings live on the server, so every screen sees the same board.

Setting it up

You need Bitcoin Core 25.0 or later with server=1 and txindex=1, Node.js 22 or later, and BlockYard on the same machine as the node — it reads the node's block files to build the address index, so a node on another machine is not supported.

From npm (the package is blockyard; a global install keeps its config and index under ~/.blockyard):

Code:
npm install -g blockyard
blockyard setup
blockyard start

From GitHub (a checkout keeps its config in config/ and its index in data/ inside the checkout — handy if you want to read the code, run the tests, or run the current main):

Code:
git clone https://github.com/BobClawblaw/blockyard.git
cd blockyard
npm test          # optional: the 862 unit tests, nothing to install first
npm run setup
npm start

Either way, setup finds your bitcoin.conf, reads the RPC settings out of it, proves the credentials, the chain, txindex, the block files and how fast the node answers, writes its config, and starts the address index build in the background with a notification in the app when it is done. Then open http://127.0.0.1:21000. The 0.0.9 release tarball is also on the GitHub release page. Full walk-through for macOS and Linux in docs/GETTING-STARTED.md; Windows is in the CI matrix.

Uninstalling. BlockYard touches nothing outside its own directories — it never edits bitcoin.conf and leaves the node exactly as it found it — so removing it is deleting them. From npm: stop it, then

Code:
npm uninstall -g blockyard
rm -rf ~/.blockyard          # its config, history, accounts and the address index

From a GitHub checkout: stop it and delete the checkout (config/ and data/, index included, live inside it). If you put the index somewhere else at setup time, delete that directory too; if you installed the systemd unit, docs/INSTALL.md §12 has the three lines for that.

How it was made — a love letter to Bitcoin and to agentic AI

Every line of BlockYard was written by an AI, directed by a human. The server, the browser app, the 3D engine, the games, the tests, the installer and every document in the repository — 100% machine-generated code, under the direction of one human operator who never typed a line of it. The direction was real work: what to build, what was wrong, what was ugly, what was too often, what was too dark, what did not translate. The coding was the machine's.

The auditing was also done by AI, and it is all published in the repository: two security audits, a defects register with the measurements behind every claim, and a measurements log where every performance number in the docs was actually taken. When the audit found something, the fix and the finding are both in the history. We think that is the honest way to ship a thing like this: not "trust us", but "here is everything, including what we got wrong".

This is a love letter to Bitcoin — a node is a beautiful thing, and it deserves a front end that shows you what it is doing without asking anyone else — and a love letter to agentic AI, because a year ago a project of this size with this level of polish was not something one person could direct into existence in their spare time. Now it is. We wanted to find out what that looks like when you take it all the way, and this is what it looks like.

It is experimental pre-release software. Expect bugs. The number is 0.0.9 for a reason. If you run it, tell us what broke — issues and pull requests are open — and if you read the code, tell us what you think of code that no human wrote.

Links


Apache-2.0. Run your own node.
BobLawblaw (OP)
Legendary
*
Offline

Activity: 2099
Merit: 6361


Your Favorite Gay Negro from Outer Space


View Profile
Today at 07:26:27 PM
 #6

Added a re-creation of the classic 90's game "Scorched Earth", and it's now included as a Diversion as "Scorched Yard".

npm has not been updated, but syncing latest from github is the best way to stay up-to-date with my in-progress tinkering.

Enjoy.

Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!