<divclass="header-actions"><spanclass="network"><i></i> PRIVATE LOCAL CHAIN</span><buttonid="theme-toggle"class="theme-toggle quiet"type="button"aria-label="Toggle color theme">☀ Light</button></div>
<sectionclass="hero"><div><pclass="eyebrow">BITCOIN, WITH ROOM TO EXPERIMENT</p><h1>Your own little<br>Bitcoin universe.</h1><pclass="intro">Mine a block. Inscribe a thought. See it land in your wallet.<br>All in your browser, all with pretend money.</p></div><divclass="orbit"aria-hidden="true"><divclass="cube"><svgviewBox="0 0 100 100"width="82"height="82"fill="none"stroke="currentColor"stroke-width="5"aria-hidden="true"><pathd="M35 17v12m12-12v12M35 76v12m12-12v12M24 29h25c22 0 22 23 0 23H24m0 0h28c22 0 22 24 0 24H24m7-47v47"/></svg></div><span>YOUR CHAIN. YOUR PACE.</span></div></section>
<asideclass="notice"><strong>Test coins only.</strong> This is a private simulation, not Bitcoin testnet or mainnet. Local-wallet keys stay in this browser, unencrypted. Inscriboor keys stay in the extension. Never load real keys or send real funds here.</aside>
<divid="status"role="status"aria-live="polite">Choose Inscriboor or a local test wallet to start your first loop.</div>
<articleclass="panel wallet"><divclass="panel-title"><spanclass="step">01</span><h2>Your test wallet</h2><spanid="wallet-state"class="tag">NOT CREATED</span></div>
<divid="empty-wallet"><p>One wallet. A whole chain to play with.</p><buttonid="connect-inscriboor"class="primary">Connect Inscriboor <span>↗</span></button><aclass="quiet button-link"href="/downloads/inscriboor-extension-v0.2.zip"download>Get Inscriboor ↓</a><buttonid="create-wallet"class="quiet">Use local test wallet</button><pid="inscriboor-status"class="muted">Looking for the extension…</p><detailsclass="install-help"><summary>Install Inscriboor</summary><ol><li>Download and unzip Inscriboor.</li><li>Open <code>chrome://extensions</code> (or Brave extensions).</li><li>Turn on Developer mode.</li><li>Choose <strong>Load unpacked</strong> and select the unzipped <code>extension</code> folder.</li><li>Refresh this page, then click <strong>Connect Inscriboor</strong>.</li></ol></details></div>
<divid="active-wallet"hidden><pclass="label">FAKE BTC BALANCE</p><divclass="balance"><spanid="balance">0</span><small>BTC</small></div><pid="reserved"class="muted"></p><labelfor="address">Local regtest-format address</label><inputid="address"readonly><buttonid="export-wallet"class="quiet">↓ Save test wallet</button></div>
<divclass="wallet-footer"><labelclass="file-button"for="load-wallet">↑ Load test wallet or lab backup</label><inputid="load-wallet"type="file"accept=".json,application/json"><pclass="muted">Saved on this device. Local-wallet backups contain their test key; Inscriboor backups contain only a public descriptor. A lab backup also preserves the chain.</p></div>
<articleclass="panel"><divclass="panel-title"><spanclass="step">02</span><h2>Make some blocks</h2></div><p>Skip the faucet queue. Every block gives you <strong>50 fake BTC</strong>, ready to use immediately.</p><divclass="chain-stats"><div><spanclass="label">BLOCK HEIGHT</span><strongid="height">0</strong></div><div><spanclass="label">PENDING TXS</span><strongid="pending">0</strong></div></div><buttonid="mine"class="primary"disabled>Mine now <span>+</span></button><labelfor="miner-interval">Auto miner</label><selectid="miner-interval"><optionvalue="0">OFF</option><optionvalue="10">10s</option><optionvalue="30">30s</option><optionvalue="60">60s</option></select><pid="miner-status"aria-live="polite">Auto mining OFF</p><pclass="muted">Keep a lab tab open; browser throttling may delay blocks. Mining also confirms your pending inscriptions.</p></article>
<articleclass="panel inscribe"><divclass="panel-title"><spanclass="step">03</span><h2>Leave a little something</h2><spanclass="tag">INSCRIPTION LAB</span></div><labelfor="mime-type">Content type</label><selectid="mime-type"></select><labelfor="body-file">Or upload a local file (16 KiB maximum)</label><inputid="body-file"type="file"><labelfor="parent">Parent inscription (optional, immutable)</label><selectid="parent"><optionvalue="">No parent</option></select><labelfor="delegate">Delegate inscription ID (optional, future IDs allowed)</label><inputid="delegate"placeholder="64 hex characters + i0"><labelfor="reinscribe">Reinscribe an owned sat (optional)</label><selectid="reinscribe"><optionvalue="">New sat</option></select><labelfor="pointer">Advanced pointer (zero-based output sat position)</label><inputid="pointer"inputmode="numeric"placeholder="Default first sat"><buttonid="recursive-demo"class="quiet">Use recursive demo</button><pclass="muted">Recursive HTML/SVG scripts use local fetch and ord.render(text) in an isolated worker; ord.id is the requested inscription. No DOM or network access.</p><labelfor="payload">What will you put on your chain?</label><textareaid="payload"placeholder="Hello, little Bitcoin universe…"rows="3"disabled></textarea><labelfor="metadata">JSON metadata (optional, independent of body)</label><textareaid="metadata"rows="3"placeholder='{"protocol":"my-experiment","note":"hello"}'></textarea><pid="metadata-count"class="muted">0 / 2048 CBOR bytes · ord tag 5 · JSON is authoring format only</p><labelfor="metaprotocol">Metaprotocol (optional, independent field)</label><inputid="metaprotocol"placeholder="e.g. tea-v1 · ord tag 7"><pclass="muted">Native ord metaprotocol identifier. Metadata and inscription data remain independent.</p><divclass="compose-footer"><spanid="byte-count"class="muted">0 / 16384 bytes</span><buttonid="review"disabled>Review inscription ↗</button></div>
<divid="review-panel"hidden><h3>Review before signing</h3><divid="review-preview"></div><preid="review-text"></pre><pid="review-parent"></p><preid="review-metadata"></pre><p>Two transactions: commit + reveal. <strong>1,000 fake sats</strong> in fees; <strong>1,000 fake sats</strong> in a new wallet output. Any selected parent or reinscription output is also returned in full; reinscription appends to its existing sat stack.</p><pid="signing-note"class="muted">The next button asks your active signer to approve commit + reveal, then submits them to your private chain.</p><buttonid="sign"class="primary">Sign & inscribe</button><buttonid="cancel-review"class="quiet">Cancel</button></div>
<sectionclass="collection-section"><divclass="section-title"><div><pclass="eyebrow">04 / THE THINGS YOU MADE</p><h2>Your inscriptions <spanid="collection-count">0</span></h2></div><spanclass="muted">Owned by this wallet</span></div><divid="collectibles"class="collectibles"><pclass="empty">Your first inscription belongs here.<br><span>Fund your wallet, write some text, and make it yours.</span></p></div></section>
<divclass="section-title"><div><pclass="eyebrow">05 / FOLLOW THE TRAIL</p><h2>Chain explorer</h2></div><buttonid="export-lab"class="quiet">↓ Save complete lab</button></div>
<divclass="chain-board">
<divclass="mempool-head"><div><spanclass="chain-kicker">MEMPOOL</span><strong>Waiting for the next block</strong></div><spanclass="muted">commit + reveal transactions live here before mining</span></div>
<p>Metadata is data; indexers are interpretation. Native metaprotocol tag 7 is authoritative; metadata.protocol remains a compatibility fallback. Raw events remain uninterpreted.</p>
<pid="protocol-stats"></p><h3>Ordered raw events</h3><pclass="muted">Confirmed blocks in chain order, then mempool order.</p><divid="protocol-events"></div>
<labelfor="reducer">Optional trusted local indexer</label><selectid="reducer"><optionvalue="">None</option><optionvalue="event-counter">Example: event-counter</option></select>
<h3>Derived state (separate from raw events)</h3><preid="derived-state">No reducer selected.</pre>
</section>
<sectionclass="panel"id="api-explorer"><h2>API explorer <spanclass="tag">LOCAL / IN-BROWSER</span></h2>
<p>LocalOrdAPI reads this browser’s chain and indexes. These paths are not server URLs; the static host cannot access your lab.</p>
<detailsclass="about"><summary>Under the hood & attribution</summary><p>Real serialized Bitcoin transactions, Schnorr signatures and Taproot commit/reveal scripts, on a deliberately simplified local UTXO chain. No proof of work, Bitcoin consensus, peer network, public broadcast, or production custody. Synthetic local sats follow FIFO input-to-output ranges. Child creation and reinscription preserve the owned sat. Fees retire the input tail; this is not Bitcoin consensus.</p><p>Built from and inspired by <ahref="https://github.com/supertestnet/testnet_generator">Supertestnet’s testnet_generator</a>, <ahref="https://github.com/supertestnet/inscriptions-online">inscriptions-online</a>, and <ahref="https://github.com/supertestnet/vanilla-js-browser-wallet">vanilla-js-browser-wallet</a>. <ahref="https://github.com/supertestnet/node_faker">node_faker</a> was evaluated for future RPC compatibility.</p><p>Transaction library: <ahref="https://github.com/cmdruid/tapscript">tapscript by Christopher Scott</a> (<ahref="/licenses/tapscript.txt">CC-BY-1.0</a>). <ahref="/licenses/supertestnet-CC0.txt">Supertestnet CC0 license</a> · <ahref="/licenses/noble-curves.txt">noble-curves license</a> · <ahref="/licenses/noble-hashes.txt">noble-hashes license</a>.</p></details>