Skip to content

Repository files navigation

◈ Silk

A modern interface for Bitcoin Knots.

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.

License: MIT Bitcoin Knots Privacy

Silk dashboard


🔒 100% local. No exceptions.

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 bitcoind on 127.0.0.1.
  • Labels stay on disk. Transaction and address labels are written to a local labels.json and 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.

✨ Features

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.


Bitcoin Knots vs. Bitcoin Core

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.


🚀 Quick start

git clone https://github.com/youruser/silk.git
cd silk
npm install
npm run dev

Then open http://localhost:5173. That's it.

Silk finds your RPC credentials automatically, in this order:

  1. BITCOIN_RPC_USER / BITCOIN_RPC_PASS from a .env file (copy .env.example), then
  2. rpcuser / rpcpassword in your bitcoin.conf, then
  3. the .cookie file in your data dir (the default when no rpcpassword is set).

So on a standard macOS node, no configuration is required — just run it.

Requirements

  • Bitcoin Knots or Bitcoin Core running with RPC enabled. In bitcoin.conf:
    server=1
    # optional — Silk also works with cookie auth:
    # rpcuser=yourname
    # rpcpassword=a-long-random-password
    macOS config path: ~/Library/Application Support/Bitcoin/bitcoin.conf
  • Node.js 18+

Production

npm run build     # bundles the frontend into dist/public
npm start         # serves the app + API from a single local origin

🧩 @silk-ui/core — use the RPC client anywhere

The 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.


Architecture

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.


Contributing

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

License

MIT © The Silk Authors

About

No description, website, or topics provided.

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages