
Arkheion Dashboard
Visual dashboard for Arkheion, a Spring/K8s-style framework for parallel-EVM smart contract systems
Demo
About
Arkheion is a smart contract framework for the parallel-EVM era, built for financial institutions running complex on-chain systems — not one contract, but dozens of interdependent modules wired, versioned, and upgraded like backend services. Its CLI (init, cluster init, cluster auto, upgrade, rollback) does the real work: declaring dependencies instead of hardcoding addresses, auto-assembling entire contract clusters in one command, and hot-swapping or rolling back individual contracts without touching the rest of the system — the same relationship Spring has to Java beans, or Kubernetes has to containers. This project is the dashboard for that framework — not the framework itself. Exactly like kubectl and the Kubernetes Dashboard both sit on top of the Kubernetes control plane, the Arkheion CLI is the engine and this dashboard is its visual client. Every action here — mounting a workspace, deploying the cluster core, running auto-assembly, upgrading a contract, rolling it back — shells out to the exact same CLI command a developer would type in a terminal. It adds zero on-chain logic of its own. It exists because cluster auto produces real structure: a dependency graph with cycles, deferred links, and generation history that's genuinely hard to hold in your head from CLI logs alone. The dashboard makes that structure visible — live topology graphs, upgrade/rollback history, streaming logs — while the CLI stays the single source of truth on-chain.
How it's made
Arkheion Dashboard is a Vue 3 + TypeScript SPA on top of a small Express bridge server, sitting in front of the real Arkheion CLI — a Node.js framework that treats smart contracts as managed, versioned components with declared dependencies, the way Spring wires Java beans or Kubernetes reconciles containers. Architecture: Clean Architecture / DDD on the frontend (domain entities and repository interfaces with zero framework dependencies, infrastructure implementations behind them, Pinia stores orchestrating use cases, Vue components with no business logic). The Express server (server/server.js) is deliberately thin: every dashboard action spawns the actual `arkheion` CLI binary as a child process with stdin closed (so a command that would otherwise fall back to an interactive prompt fails fast instead of hanging the request forever), streams stdout/stderr back over a WebSocket for live logs, and returns the same success/failure the CLI itself reports. No on-chain logic lives in this app — it is a client, not a reimplementation. The trickiest real engineering was making the dashboard's data layer trustworthy. `cluster list`/`cluster current` print human-decorated text boxes for terminal use, not JSON, so the frontend can't parse them reliably — we instead run `cluster graph` (which the CLI already generates as a Mermaid diagram + HTML registry table from live on-chain reads) and parse that HTML server-side into structured nodes and active/passive edges. That HTML table doesn't carry generation numbers, so we cross-reference each contract's address against project.json's alldeployedcontracts to recover it — a small but real bug we caught by comparing dashboard output against direct chain queries (`eth_getTransactionReceipt`, `contractRegistrations`) rather than trusting either layer blindly. Stack: Vue 3 (Composition API), TypeScript, Pinia, Vite, ethers.js v6 for any direct chain reads, vis-network for the force-directed cluster topology graph, Express + ws for the CLI bridge and log streaming, and Hardhat as the local devnet the whole cluster deploys onto. The most "hacky but load-bearing" piece: a file-based cluster lock (a `.arkheion-cluster.lock` file with orphan-PID detection) in the CLI itself, so concurrent `cluster auto`/`upgrade`/`rollback` calls triggered from the dashboard can't race each other and leave the on-chain registry and project.json out of sync — a real failure mode we hit and fixed during development, not a hypothetical one.