Silk is a clean, fast, privacy-first local web UI for Bitcoin Knots and Bitcoin Core — a graceful replacement for the Qt GUI. Your node, your keys, your machine. Nothing leaves it.
Silk runs entirely on your machine. No data ever leaves your node.
- Zero telemetry, zero analytics, zero accounts. There is no backend in the cloud — Silk's server is a thin local proxy to your own
bitcoindon127.0.0.1. - Labels stay on disk. Transaction and address labels are written to a local
labels.jsonand are never transmitted anywhere. - The only optional external call is the USD price from CoinGecko — it is off by default, clearly labeled, and only fires from your browser when you turn it on.
- The backend binds to localhost only and never makes an outbound request except to your node.
| Feature | ||
|---|---|---|
| 📊 | Dashboard — balance (BTC ⇄ sats), recent activity, node at a glance | |
| 📥 | Receive — fresh address each time, QR with optional amount/message | |
| 📤 | Send — slow / normal / fast fees from estimatesmartfee, confirmation step |
|
| 🪙 | Coins — full UTXO list with coin control: spend exactly the coins you pick | |
| 🌐 | Peers — connections, networks, latency, bandwidth, banned list | |
| 📦 | Mempool — tx count, size, memory pressure, min relay fee | |
| 🩺 | Node health — version, uptime, lifetime bandwidth, local addresses | |
| 🛡️ | Mempool Policy — spam / dust / data-carrier filters | Knots ✦ |
| 🏷️ | Local labels — name your txs and addresses, stored only on your machine |
Amounts toggle between BTC and sats. The whole UI is keyboard-and-screenshot friendly, in a refined dark theme.
Silk works with both — it detects which you're running (from the RPC subversion) and shows Knots-only features automatically. This roughly doubles the potential user base.
| Capability | Core | Knots | In Silk |
|---|---|---|---|
| Sync, balance, send, receive | ✓ | ✓ | Always |
| Peers, mempool, node health | ✓ | ✓ | Always |
| UTXO list + coin control | ✓ | ✓ | Always |
| Local tx / address labels | ✓ | ✓ | Always |
| Mempool spam / dust policy | — | ✓ | Auto on Knots |
| OP_RETURN / data-carrier filter | — | ✓ | Auto on Knots |
| Inscription / "parasite" filter | — | ✓ | Auto on Knots |
On Core (or a Knots build without the live policy RPCs), the Policy page still renders your effective relay policy read-only, and explains what Knots adds — so the page is never empty.
git clone https://github.com/youruser/silk.git
cd silk
npm install
npm run devThen open http://localhost:5173. That's it.
Silk finds your RPC credentials automatically, in this order:
BITCOIN_RPC_USER/BITCOIN_RPC_PASSfrom a.envfile (copy.env.example), thenrpcuser/rpcpasswordin yourbitcoin.conf, then- the
.cookiefile in your data dir (the default when norpcpasswordis set).
So on a standard macOS node, no configuration is required — just run it.
- Bitcoin Knots or Bitcoin Core running with RPC enabled. In
bitcoin.conf:macOS config path:server=1 # optional — Silk also works with cookie auth: # rpcuser=yourname # rpcpassword=a-long-random-password
~/Library/Application Support/Bitcoin/bitcoin.conf - Node.js 18+
npm run build # bundles the frontend into dist/public
npm start # serves the app + API from a single local originThe typed, zero-dependency JSON-RPC client that powers Silk is published separately so you can build your own tools:
import { RpcClient } from '@silk-ui/core';
const rpc = new RpcClient({ url: 'http://127.0.0.1:8332', user, password });
const info = await rpc.getBlockchainInfo();
const peers = await rpc.getPeerInfo();
const impl = RpcClient.detectImplementation(info /* subversion */); // 'knots' | 'core'It runs in Node 18+ and the browser, with no dependencies.
silk/
├── packages/core/ @silk-ui/core — typed RPC client (no deps)
├── server/ Express: localhost proxy to bitcoind, never hits the network
│ ├── config.ts env → bitcoin.conf → .cookie credential resolution
│ ├── routes/ chain · wallet · peers · mempool · node · knots · labels
│ └── labels.ts read/write the local labels.json
├── src/ Vite + React + TypeScript + Tailwind frontend
│ ├── components/ design system + shell
│ └── pages/ Dashboard · Receive · Send · Coins · Peers · Mempool · Node · Policy
└── labels.json your local labels (gitignored, never leaves your machine)
The frontend talks only to /api, which the local server maps to specific RPC
calls. The browser never holds your RPC credentials, and dangerous RPCs
(dumpprivkey, etc.) are simply not exposed.
PRs welcome — see CONTRIBUTING.md for the dev setup, project layout, and how to add pages, routes, or extensions.
Topics: bitcoin · bitcoin-core · bitcoin-knots · bitcoin-gui · wallet · utxo · coin-control · silk
MIT © The Silk Authors
