Bitcoin Script Playgrounds and Debuggers Compared
Compare Bitcoin Script debugging tools: btcdeb, tapsim, Script Wiz, BitIDE, and Miniscript playgrounds. Tapscript support, step-through debugging, and OP_CAT handling.
Bitcoin Script Development Tools Overview
Writing and debugging Bitcoin Script requires specialized tooling. Unlike general-purpose languages with mature IDEs, Bitcoin's stack-based scripting language has a fragmented ecosystem of debuggers, simulators, and playgrounds spread across CLI tools, web apps, and language-specific libraries. Each tool makes different tradeoffs between opcode coverage, Tapscript support, step-through debugging, and the ability to test proposed opcodes like OP_CAT.
This comparison covers the major tools available to developers working with Bitcoin Script in 2026: btcdeb, tapsim, Script Wiz, BitIDE, the Miniscript playground, and the visvirial online debugger. Whether you are learning how opcodes work, building production spending conditions, or experimenting with Taproot script paths, the right tool depends on your use case.
| Tool | Type | Language | Tapscript | Step-Through | Custom Opcodes | License |
|---|---|---|---|---|---|---|
| btcdeb | CLI | C++ | Yes | Yes | No | MIT |
| tapsim | CLI | Go | Yes | Yes | Yes | MIT |
| Script Wiz | Web IDE | TypeScript | Yes | Per-opcode stack | No | MIT |
| BitIDE | Web IDE | TypeScript | Yes | Per-opcode stack | Yes (macros) | Proprietary |
| Miniscript Playground | Web | C++/JS | Partial | No | No | MIT |
| visvirial Debugger | Web | JavaScript | No | Yes | No | MIT |
btcdeb: The Reference CLI Debugger
btcdeb is the most established Bitcoin Script debugger, maintained under the bitcoin-core GitHub organization. It provides a full interactive command-line environment where you can step through script execution one opcode at a time, inspecting the main stack and alt stack at each step. The tool ships with several companion utilities: btcc compiles human-readable script into hex, tap constructs Taproot outputs and computes TapTree commitments, and MAST-related tools handle merkle branch construction.
btcdeb supports the full set of consensus opcodes including OP_CHECKSIGADD (Tapscript only), Schnorr signature verification via BIP 340, and sighash computation for both legacy and Taproot transactions. You can pass real or placeholder signatures and have the tool verify them against provided public keys. Installation requires building from source on Linux or macOS with standard C++ dependencies (libtool, libssl-dev, autoconf).
The main limitation is that btcdeb does not support proposed or experimental opcodes. If you want to test scripts using OP_CAT (BIP 347) or OP_CTV, you will need a tool like tapsim that hooks into a modified script engine.
tapsim: Tapscript Simulator with Custom Opcode Support
tapsim, created by Johan Halseth, is a Go-based debugger built specifically for Tapscript transactions. It hooks into the btcd script execution engine to capture VM state at every step of execution, providing a detailed view of stack operations, control flow, and script verification. The project was inspired by btcdeb but focuses exclusively on Taproot script-path spends.
The key differentiator is custom opcode support. tapsim lets developers define and test scripts that use proposed opcodes not yet active on mainnet. This makes it the primary tool for developers experimenting with OP_CAT (BIP 347), OP_TXHASH, and other soft fork proposals. You can write a Tapscript that uses OP_CAT to concatenate stack elements and step through the execution to verify behavior before any activation occurs.
tapsim is a CLI tool that requires Go to build. It does not include a script compiler or address generator: you provide raw script bytes and witness data directly. This makes it less approachable for beginners but highly flexible for researchers and protocol developers who need precise control over script execution.
Script Wiz: Web-Based Multi-Network IDE
Script Wiz (available at ide.scriptwiz.app) is an open-source web IDE for writing, debugging, and compiling Bitcoin Script and Liquid Script. The IDE provides syntax highlighting, real-time stack visualization after each opcode, and support for multiple script versions including legacy, SegWit, and Tapscript. You select the target script type from a dropdown: choosing "Bitcoin (Tapscript)" enables the Tapscript opcode set.
When compiling a Tapscript, Script Wiz automatically sets the key-path to a point with an unknown discrete logarithm (forcing script-path spends), generates the Bech32m address per BIP 350, and displays the tweak result. You can also specify a custom internal key and TapLeaf version. The tool runs entirely in the browser with no server-side component, making it safe for working with sensitive scripts.
Script Wiz does not support custom or proposed opcodes. It implements the consensus opcode set as defined in the active Bitcoin protocol. For developers who need OP_CAT or other experimental opcodes, tapsim or BitIDE are better options.
BitIDE: Tapscript IDE with Local Testnet
BitIDE, developed by QED Protocol (available at bitide.qedprotocol.com), is a web-based Tapscript IDE that bundles several features not found in other tools: custom opcodes for code reuse, JavaScript macros for metaprogramming, symbol and tag-based stack management, and an integrated local RegTest block explorer. The local testnet integration means you can write a Tapscript, compile it, fund it with RegTest coins, and spend it: all within the IDE.
The custom opcode system in BitIDE is not the same as testing proposed consensus opcodes. Instead, it provides macro-like abstractions that expand into valid Bitcoin Script at compile time. This enables code reuse patterns that would otherwise require copy-pasting opcode sequences. JavaScript macros can generate script fragments programmatically, which is useful for building complex smart contract logic.
BitIDE is focused exclusively on Tapscript (P2TR script-path spends). It does not support legacy script types or pre-Taproot SegWit scripts. The local Docker-based testnet requires additional setup compared to pure browser tools.
Miniscript Playground
The Miniscript playground at bitcoin.sipa.be/miniscript, maintained by Pieter Wuille, serves a different purpose than the other tools in this comparison. Rather than debugging raw opcode sequences, it compiles high-level spending policies into optimized Bitcoin Script. You write a policy like or(and(pk(A),older(8640)),pk(B)) and the compiler outputs the most efficient Miniscript expression, which can then be converted to raw script.
The playground performs static analysis on compiled scripts: checking for correctness, malleability, and standardness compliance. It reports whether a Miniscript is "sane" (valid under both consensus and standardness rules) and can generate witness satisfactions. Miniscript has been integrated into Bitcoin Core's output descriptors since version 25.0 and is used in production wallets including those built with BDK.
Miniscript supports a subset of Tapscript through its tr() descriptor, but the playground itself does not provide opcode-level debugging. It is a compiler and analyzer, not a debugger. For developers who need to go from a spending policy to verified script, the Miniscript playground is the starting point, with btcdeb or tapsim used for lower-level inspection.
visvirial Online Debugger
The Bitcoin Script Online Debugger at bitcoin-script-debugger.visvirial.com is the simplest tool in this comparison: a browser-based debugger that parses and executes legacy Bitcoin Script with step-by-step stack visualization. You enter a script using opcode mnemonics (e.g., OP_DUP OP_HASH160), run it, and see the stack state after each operation.
The tool does not support Tapscript, Schnorr signatures, or signature verification opcodes (OP_CHECKSIG, OP_CHECKMULTISIG). Hex data must be prefixed with 0x and explicitly sized. These limitations make it useful primarily for learning how basic stack operations work: testing arithmetic opcodes, hash functions, and flow control. It is not suitable for production script development or any work involving Taproot.
Detailed Feature Comparison
The following table compares specific capabilities that matter for production script development and research.
| Feature | btcdeb | tapsim | Script Wiz | BitIDE | Miniscript | visvirial |
|---|---|---|---|---|---|---|
| OP_CHECKSIGADD | Yes | Yes | Yes | Yes | Via policy | No |
| Schnorr signature verification | Yes | Yes | No | Yes | N/A | No |
| OP_CAT (BIP 347) | No | Yes | No | Via macros | No | No |
| TapTree construction | Yes (tap) | No | Yes | Yes | Yes (tr()) | No |
| Address generation | Yes | No | Yes | Yes | Yes | No |
| Testnet broadcast | No | No | No | Yes (RegTest) | No | No |
| Policy compilation | No | No | No | No | Yes | No |
| Malleability analysis | No | No | No | No | Yes | No |
| MAST / Merkle branch | Yes | No | No | No | Yes | No |
| Witness generation | Manual | Manual | No | Yes | Automatic | No |
How OP_CAT and Proposed Opcodes Are Handled
OP_CAT (BIP 347) proposes reactivating byte string concatenation in Tapscript by redefining OP_SUCCESS126. As of 2026, OP_CAT remains a proposal with no activation timeline. Testing scripts that use proposed opcodes requires tools that can simulate non-consensus behavior.
tapsim is the only tool in this comparison that natively supports executing scripts with OP_CAT and other proposed opcodes. It modifies the btcd script engine to recognize these opcodes and execute them according to their BIP specifications. This makes tapsim essential for developers building covenant prototypes or exploring what OP_CAT enables (recursive covenants, vaults, on-chain verification of arbitrary data).
BitIDE's custom opcode system provides a different approach: you can define macros that simulate OP_CAT-like behavior at the IDE level, but these expand to standard opcodes and cannot truly replicate concatenation semantics. btcdeb, Script Wiz, the Miniscript playground, and the visvirial debugger all treat OP_SUCCESS opcodes as unconditional successes per the current Tapscript consensus rules, meaning scripts containing them will always pass without executing the proposed opcode logic.
Which Tool to Use: Learning vs Production
For learning how Bitcoin Script works, the visvirial online debugger and Script Wiz provide the lowest barrier to entry. Both run in the browser with zero setup. The visvirial debugger is best for understanding basic stack operations, while Script Wiz covers the full opcode set including Tapscript. For a structured reference to every opcode, pair these tools with the Bitcoin opcode reference.
For production script development, btcdeb remains the standard. Its signature verification, TapTree construction, and MAST tooling make it the closest thing to a full development environment for Bitcoin Script. Developers building complex spending conditions should compile policies with the Miniscript playground, then verify the generated script in btcdeb.
For research on proposed opcodes and covenant designs, tapsim is the primary choice. Its ability to execute non-consensus opcodes makes it the go-to tool for BIP prototyping and for developers building on Bitcoin's programmability layer. For context on where Bitcoin Script fits in the broader programmability landscape, see the Bitcoin Script programmability research article. Developers building on Spark can use these tools to understand the underlying spending conditions that secure transactions on Bitcoin's base layer.
For end-to-end Tapscript development with integrated testing, BitIDE offers the most complete workflow: write a script, compile it, deploy it to a local RegTest network, and spend it, all within one interface.
Test Vector Generation and Workflow Integration
Generating test vectors (known input/output pairs for script execution) is critical for validating wallet implementations and formal verification efforts. The tools differ significantly in how they support this.
The Miniscript playground generates witness satisfactions automatically, producing the minimal set of stack elements needed to satisfy a given policy. These can serve as test vectors for wallet software that implements Miniscript signing. btcdeb can produce PSBT-compatible outputs through its tap utility, and tapsim outputs raw witness data suitable for integration tests.
For developers working with interactive script debugging, combining the Miniscript compiler (for policy-to-script translation) with btcdeb or tapsim (for opcode-level verification) provides a complete workflow from high-level intent to verified execution.
Frequently Asked Questions
What is the best Bitcoin Script debugger for beginners?
Script Wiz at ide.scriptwiz.app is the most accessible starting point. It runs in the browser, supports all active opcode types including Tapscript, and shows the stack state after each opcode. For learners who want a minimal interface focused on basic operations, the visvirial online debugger at bitcoin-script-debugger.visvirial.com strips away everything except the script input and stack output. Pair either tool with the opcode reference for documentation on each operation.
Can I test OP_CAT scripts before the soft fork activates?
Yes. tapsim supports executing scripts with OP_CAT (BIP 347) and other proposed opcodes by modifying the btcd script engine. You can write a Tapscript that uses OP_CAT, step through its execution, and verify that the concatenation behaves as expected. No other tool in this comparison provides native execution of proposed opcodes. Note that testing in tapsim validates script logic, not consensus validity on mainnet.
What is the difference between Miniscript and Bitcoin Script?
Miniscript is a structured subset of Bitcoin Script designed for static analysis and safe composition. You write spending policies in a human-readable format (e.g., and(pk(A),after(100))), and the Miniscript compiler produces the optimal Bitcoin Script. The compiler guarantees that the output is correct, non-malleable, and consensus-valid. Raw Bitcoin Script gives you full control over every opcode but provides no automatic safety guarantees.
Does btcdeb support Taproot and Tapscript?
Yes. btcdeb includes full support for Taproot (BIP 341) and Tapscript (BIP 342). The tap utility constructs Taproot outputs, computes TapTweak values, generates Bech32m addresses, and builds script-path witnesses. btcdeb can verify Schnorr signatures per BIP 340 and supports Tapscript-only opcodes like OP_CHECKSIGADD. Documentation for Tapscript examples is included in the btcdeb repository.
Which tool should I use for building Bitcoin vaults?
Bitcoin vault designs typically require timelocks, multisig conditions, and potentially covenants. For vault scripts using currently active opcodes (OP_CLTV, OP_CSV, multisig), start with the Miniscript playground to compile the policy, then verify in btcdeb. For vault designs that rely on proposed opcodes like OP_CTV or OP_CAT, use tapsim to test the full script execution path.
Are there Bitcoin Script tools that work with Signet or Testnet?
BitIDE integrates a local RegTest environment directly in the IDE, letting you deploy and spend Tapscript outputs without external setup. btcdeb can be used alongside a Signet or Testnet node by constructing transactions with the tap tool and broadcasting them separately via bitcoin-cli. For a comparison of test networks, see the Testnet vs Signet vs RegTest guide.
How do I debug a PSBT spending a Tapscript output?
Use btcdeb with the --tx and --txin flags to load a transaction and its input for debugging. The tool will compute the sighash, display the Taproot-specific fields (annex, leaf version, script), and step through the script-path execution. For PSBT inspection before signing, the PSBT inspector tool can decode and display all fields in a partially signed transaction.
This tool is for informational purposes only and does not constitute financial or development advice. Tool features and availability may change as projects are updated. Always verify opcode behavior against the Bitcoin Core reference implementation before deploying scripts to mainnet.
Build with Spark
Integrate bitcoin, Lightning, and stablecoins into your app with a few lines of code.
Read the docs →
