IPC / multiprocess

PRPriorityReviewabilityReviewsAgreementSize
(+)#36520 ryanofsky interfaces: Avoid node crashes from invalid Chain IPC callsP1 · bug fixReady2Strong53 + 67 tests
  • Prevent node crashes and scheduler termination when IPC clients pass invalid inputs or fail notifications
  • Fix findAncestorByHash returning success when the descendant block is missing
  • P1 because it prevents node crashes and scheduler thread exits caused by untrusted or failing IPC callers
  • Resilience against invalid arguments and client disconnects is essential across the process boundary
  • Fixes issues encountered while developing multiprocess support
  • Ranking pass: Base of the Chain-over-IPC chain: standalone crash hardening that #29409 and #10102 build on, so it is worth a reviewer first.
  • Ready to review
  • Substantive support with no open objections
  • Verified by functional testing that reported bugs are resolved (enirox001)
  • Support because it cleanly fixes issues found while testing IPC interfaces (xyzconstant)
  • Suggestions open on covering another crash case and exception type choice (cyb3ralbert, xyzconstant)
  • 53 lines added or modified outside tests
  • 67 lines added or modified in tests
  • 9 lines removed in total
  • 3 files, 3 commits
(+)#29409 ryanofsky ipc: Expose Chain interface to IPC clientsP1 · unblocks #10102Ready0 (+2)Mild2,359 + 33 tests
  • Allow external clients and separate processes to read chain data and receive block events over IPC
  • Unblock running Bitcoin Core wallet in an isolated process without freezing internal C++ APIs
  • P1 because it unblocks out-of-process wallet separation and external process integration
  • Multiple downstream consumers and indexes depend on IPC chain access instead of P2P or RPC
  • Ready for review following rebase and the interface split
  • Broad support for enabling multiprocess wallet separation and external chain indexers
  • Unaddressed objection: node aborts if notification callback throws, author replied (xyzconstant)
  • Verified by testing with Rust BDK wallet integration and Electrs bindings (darosior, Sjors)
  • Concept approval for running external indexes and client dashboards (ariard, willcl-ark, rustaceanrob)
  • Approval from an account with no project history and no stated reason (Big621)
  • 2,359 lines added or modified outside tests
  • 33 lines added or modified in tests
  • 515 lines removed in total
  • 79 files, 8 commits
(+)#10102 ryanofsky Multiprocess bitcoinP1 · new featureReview #29409 first0 (+1) -1Strong4,152 + 197 tests
  • Run Bitcoin Core node, wallet, and GUI components in isolated processes
  • Prevent memory corruption or crashes in the GUI or wallet from compromising or taking down the node
  • P1 because process isolation prevents UI and wallet flaws from compromising consensus validation
  • Unblocks follow-up multiprocess architecture work across the codebase
  • Ranking pass: Kept P1 as the category-defining PR, but placed after the two prerequisites it is stacked on.
  • Broad support for the architectural direction of process separation (jonasschnelli, gmaxwell, dcousens, laanwj)
  • Concept approval citing ability to run the node continuously while opening the GUI on demand (Sjors)
  • Concerns over Cap'n Proto dependency were accepted as internal IPC for this change (gmaxwell, dcousens)
  • Open question on whether capnp should be added to depends in a future PR (Sjors)
  • 4,152 lines added or modified outside tests
  • 197 lines added or modified in tests
  • 634 lines removed in total
  • 146 files, 24 commits
(+)#35932 ryanofsky ipc: make ipc::disconnectIncoming wait for in-progress calls to completeP1 · bug fixNeeds rebase0Crickets2,169 + 3 tests
  • Prevent node crashes and assertion failures during shutdown when asynchronous IPC calls are still running
  • Ensure incoming IPC worker calls finish executing before node components are freed
  • P1 because it fixes shutdown assertion failures and use-after-free bugs in multiprocess mode
  • Eliminates crashes where in-flight asynchronous calls dereference node state after teardown starts
  • Reviewing now is worthwhile with nothing known that would invalidate a review
  • No review verdicts recorded
  • No comments or reviews yet from anyone other than the author
  • Draft PR has had no discussion so far
  • 2,169 lines added or modified outside tests
  • 3 lines added or modified in tests
  • 612 lines removed in total
  • 65 files, 18 commits
(+)#36572 xyzconstant ipc: hold event loop references when using it in `CapnpProtocol`P1 · bug fixNeeds rebase0Strong68
  • Prevent use-after-free crashes and unexpected termination in multiprocess mode
  • Ensures background tasks keep the IPC event loop alive even if the parent connection closes
  • P1 after comparing with the other PRs here (assessed alone as P2): Raised to P1: same class of IPC event-loop use-after-free/termination as #35932 and #36520, which are P1.
  • P2 because it prevents crashes and termination in multiprocess builds when parent connections close
  • Improves stability for experimental multiprocess deployments without affecting monolithic builds
  • Ready to review
  • No review verdicts recorded
  • Verified by running ipc_tests with no errors detected (Hamza1610)
  • Minor style nit noted regarding a redundant semicolon (Husteem)
  • 68 lines added or modified outside tests
  • 0 lines added or modified in tests
  • 23 lines removed in total
  • 1 files, 1 commits
(+)#32387 ryanofsky ipc: add windows supportP2 · platform fixCI failing0Positive2,541 + 189 tests
  • Allow Bitcoin Core multiprocess mode and IPC features to build and run on Windows
  • Enable testing and deployment of separated process binaries on Windows platforms
  • P2 because it extends IPC and process separation coverage to Windows
  • Unblocks Windows testing and deployment for the broader multiprocess project
  • CI is failing so check whether the failure is caused by this PR before a deep review
  • Concept approval without stated reasons (hebasto)
  • Suggested testing compatibility with clang-cl (Sjors)
  • 2,541 lines added or modified outside tests
  • 189 lines added or modified in tests
  • 880 lines removed in total
  • 102 files, 33 commits
(+)#36097 xyzconstant mining: replace interrupt methods with cancellation argumentsP2 · new featureCI failing0Strong2,133 + 43 tests
  • Simplify canceling in-flight blocking mining requests over IPC
  • Eliminate extra round-trips and awkward out-of-band interrupt coordination for mining clients
  • P2 because it integrates native request cancellation into libmultiprocess and the interface layer
  • Allows IPC clients to cancel in-flight blocking calls directly without coordinating extra calls
  • Ranking pass: Moved up: it changes mining IPC call mechanics (cancellation via promises) per agreed RFC #33575, affecting external consumers' interface stability more than the other P2s.
  • CI is failing; check whether the failure is from this PR before deep review
  • No review verdicts recorded
  • Substantive support with no open objections
  • Direct cancellation simplifies both clients and servers over issuing separate interrupt calls (ryanofsky)
  • 2,133 lines added or modified outside tests
  • 43 lines added or modified in tests
  • 616 lines removed in total
  • 70 files, 2 commits
(+)#30437 ryanofsky ipc: add bitcoin-mine test programP2 · unblocks #29432Waiting on author0 (+3)Blocked219 + 41 tests
  • Provide an end-to-end test executable to exercise and validate IPC mining outside the node process
  • Help multiprocess Bitcoin Core development and external mining implementations like Stratum v2
  • P2 because it provides a standalone test client required to validate interfaces across process boundaries
  • Unblocks progress on external mining process separation
  • Reviewable immediately as nothing known invalidates review now
  • Unaddressed objection: potential crash if block creation returns null during shutdown (w0xlt)
  • Unaddressed objection: argument parsing bugs wrap negative or clamp low maxtries values (w0xlt)
  • Objection answered: avoid shipping experimental binary in releases via dedicated build option (sedited, fanquake)
  • Verified by testing standalone binary and functional tests on macOS (Sjors, BrandonOdiwuor)
  • Concept approval as a usage example for mining interfaces (ismaelsadeeq)
  • 219 lines added or modified outside tests
  • 41 lines added or modified in tests
  • 7 lines removed in total
  • 10 files, 5 commits
(+)#19460 ryanofsky multiprocess: Add bitcoin-wallet -ipcconnect optionP2 · new featureReview #10102 first0Blocked4,183 + 197 tests
  • Allow the standalone wallet tool to connect to a running node over IPC instead of running strictly offline
  • Prepare the wallet tool for future online actions like querying chain state and syncing balances
  • P2 because it advances multiprocess communication by connecting wallet processes to the node
  • It unblocks follow-up multiprocess wallet work in PR 19461
  • Review #10102 first
  • Stacked on top of open multiprocess PR #10102
  • No review verdicts recorded
  • Unaddressed objection: combining CLI tool and daemon behavior adds work and risks user footguns (ajtowns)
  • Answered objection: offline operation remains fully supported without requiring a node (jonasschnelli)
  • Approvals from accounts with no project history provided no rationale
  • 4,183 lines added or modified outside tests
  • 197 lines added or modified in tests
  • 644 lines removed in total
  • 149 files, 26 commits
(+)#19461 ryanofsky multiprocess: Add bitcoin-gui -ipcconnect optionP2 · new featureReview #10102 first0Blocked4,222 + 197 tests
  • Connect the GUI to an existing node process over IPC instead of spawning a new child process
  • Let users start and stop the GUI independently of a long-running background node
  • P2 because it lets GUI instances attach to and detach from an independent node process
  • Advances process separation for multiprocess builds
  • Unaddressed objection: GUI crashes on sendButtonClicked when using external signers or PSBTs (Sjors)
  • Unaddressed objection: node crashes when GUI connects without -disablewallet to a wallet-free node (jimhashhq)
  • Concept approval for the -ipcconnect option name and functionality (laanwj)
  • Concept approval without stated reasons (meshcollider)
  • Verified basic IPC connectivity works in manual testing (Sjors)
  • 4,222 lines added or modified outside tests
  • 197 lines added or modified in tests
  • 662 lines removed in total
  • 152 files, 28 commits
(+)#36105 ryanofsky bitcoin wrapper: Fix Windows exec so wrapper waits for child processP2 · platform fixReady1Strong15 + 14 tests
  • Make the Windows bitcoin wrapper wait for child processes and return their exit codes
  • Allow scripts, external callers, and test suites to reliably check child process outcomes
  • Re-enable skipped functional tests on Windows
  • P2 because it fixes broken wrapper process management on Windows
  • Resolves immediate wrapper exit so callers can track child processes and re-enables skipped tests
  • Ready to review
  • Tested on Linux and Windows with the MSVCRT workaround dropped (cyb3ralbert)
  • Concept approval without stated reasons (hebasto, hodlinator)
  • All discussion questions and suggestions addressed
  • 15 lines added or modified outside tests
  • 14 lines added or modified in tests
  • 21 lines removed in total
  • 7 files, 3 commits
(+)#36106 ryanofsky bitcoin wrapper: respect CMAKE_INSTALL_BINDIR/LIBEXECDIRP2 · bug fixReady1Strong42 + 71 tests
  • Allow the bitcoin wrapper tool to locate internal executables when installed with custom directory layouts
  • Fix immediate failure on distributions like Arch Linux where CMAKE_INSTALL_LIBEXECDIR is set to lib
  • P2 after comparing with the other PRs here (assessed alone as P3): Raised to P2 for consistency with #36105: both are wrapper breakages on real install targets, and this one makes the wrapper fail outright on common distro layouts.
  • P3 because it fixes runtime discovery of bitcoind and bitcoin-node by the multiprocess wrapper
  • Prevents the wrapper from immediately failing with execvp on non-standard install paths
  • Ready to review
  • Substantive support with all raised issues addressed
  • Verified fix for custom layouts and approved the approach (hebasto)
  • Verified the fix for the distribution issue and confirmed valgrind fix (cyb3ralbert)
  • 42 lines added or modified outside tests
  • 71 lines added or modified in tests
  • 6 lines removed in total
  • 6 files, 2 commits
(+)#33117 D33r-Gee Interfaces: Expose UTXO Snapshot Loading and Add Progress NotificationsP2 · new featureReady0 (+1)Strong126 + 2 tests
  • Allow GUI frontends and multiprocess clients to initiate UTXO snapshot loading
  • Provide user progress feedback while snapshot coins are validated and populated
  • P2 because it unblocks assumeutxo snapshot loading across process boundaries
  • Directly enables downstream GUI implementations to load snapshots with progress feedback
  • Ready to review
  • Strong support with no remaining objections after rebases and refactoring
  • Verified by testing mainnet snapshot loads with downstream GUI branches (pinheadmz, Sjors)
  • Resolved objection: passing file handles across IPC boundaries complicates separation (ryanofsky)
  • Resolved objection: signaling progress per coin would fire over 100 million times (pinheadmz)
  • 126 lines added or modified outside tests
  • 2 lines added or modified in tests
  • 21 lines removed in total
  • 10 files, 3 commits
(+)#36597 pseudoramdom wallet: return broadcast errors from CommitTransactionP3 · unblocks #1008Waiting on author0Positive150 + 110 tests
  • Let wallet frontends learn whether a transaction was accepted into the mempool.
  • Stops interfaces like the QML GUI from reporting transactions as sent when rejected by the node.
  • P3 because it passes structured broadcast errors across process boundaries to frontends like the QML GUI.
  • Unblocks out-of-process frontends from detecting and handling rejected transactions.
  • Ready for review.
  • Concept approval without stated reasons (w0xlt, Naomi-Gift)
  • Author clarified why synchronous broadcast errors are needed rather than async alerts (maflcko)
  • Open request to add interface test coverage for mempool rejections (ViniciusCestarii)
  • 150 lines added or modified outside tests
  • 110 lines added or modified in tests
  • 116 lines removed in total
  • 22 files, 4 commits
(+)#35916 enirox001 fuzz: improve ipc fuzz coverageP3 · test coverageReady0 (+1)Strong342
  • Improve IPC fuzz testing to exercise reverse callbacks and malformed payloads
  • Catch process boundary serialization bugs and deserialization mismatches earlier
  • P3 because it improves test coverage across process boundaries without fixing active bugs
  • Helps prevent crashes from malformed IPC payloads but has no direct runtime impact
  • Ready for review
  • Awaiting re-review on updated deserialization checks
  • Broad support with all technical objections resolved
  • Verified by testing fuzz target updates from earlier review requests (jeanpablojp)
  • Concept approval with previous error handling objections addressed (frankomosh)
  • 342 lines added or modified outside tests
  • 0 lines added or modified in tests
  • 13 lines removed in total
  • 3 files, 4 commits
(+)#36060 151henry151 build: require KJ exception support for IPCP3 · platform fixAuthor silent 69d0Crickets179
  • Prevent obscure compilation failures by checking libkj exception support at configure time when IPC is on
  • Reduce build friction on systems where compiler capabilities are misdetected
  • P3 because IPC binaries require libkj exception support to compile cleanly
  • Reduces platform-specific build failures across BSD and Unix targets for multiprocess work
  • Ready for review now with nothing known that would invalidate a review
  • No review verdicts recorded
  • No substantive comments or reviews yet
  • 179 lines added or modified outside tests
  • 0 lines added or modified in tests
  • 0 lines removed in total
  • 12 files, 3 commits
(+)#36190 Bortlesboat test: Check bitcoin wrapper child exit status on windowsP3 · test coverageReview #36105 first0 (+2)Strong15 + 55 tests
  • Verify that the Windows wrapper correctly forwards child exit statuses and reports spawn failures
  • Prevent regressions where child exit code -1 is conflated with process launch errors
  • P3 because it adds Windows functional test coverage for child process exit status propagation
  • Catches regressions where child exit code -1 is confused with spawn errors
  • Review #36105 first
  • The PR branch is stacked on open PR #36105 and includes its prerequisite commits
  • Strong support with no open objections
  • Verified by testing on Linux and Windows runners across both CRTs (cyb3ralbert)
  • Finds the new tests well written and useful additions to test coverage (ryanofsky)
  • 15 lines added or modified outside tests
  • 55 lines added or modified in tests
  • 20 lines removed in total
  • 7 files, 5 commits
(+)#36192 Sjors test: cover unsatisfiable mining timestampP3 · test coverageNeeds rebase2Strong0 + 124 tests
  • Test that block template creation fails cleanly when median time past reaches the future-time limit
  • Verify template creation recovers one second later and keeps mining IPC connections alive
  • P3 because it verifies IPC mining connections survive and recover from template errors
  • Confirms the interface remains stable under an edge case that is infeasible on mainnet
  • Ready for review
  • Strong support with no open objections (fjahr, ismaelsadeeq)
  • Nonblocking suggestions on test location and runtime were dropped (fjahr, ismaelsadeeq)
  • 0 lines added or modified outside tests
  • 124 lines added or modified in tests
  • 29 lines removed in total
  • 6 files, 5 commits
Reviewability: ReadyStalePaused
Agreement: StrongPositivePositive w/ caveatsNeutralMildDisputedBlockedCrickets
Reviews: current code-review ACKs, then (+stale ACKs) and -NACKs; greener = more ACKs.
Size: lines added or modified outside tests, then in tests; greener = smaller.
Ranking pass (2026-11-01): all PRs here were compared with each other; 11 notes on review order, overlaps, and band changes.

Covers

The process-separation project and everything that serves it: the interfaces:: abstraction layer between node, wallet, and GUI, the Cap'n Proto interface definitions and generated-code machinery, the libmultiprocess subtree, the bitcoin-node / bitcoin-gui / bitcoin-wallet executables and the bitcoin wrapper, IPC process management (spawning, connecting, disconnect handling), and the tests and build glue for all of it. The IPC label is a strong prior.

Not ipc: PRs whose subject is what the mining interface exposes or how templates are built (category mining), even though they travel over IPC. A mining PR is ipc only if it changes IPC infrastructure itself (serialization, connection handling, the capnp toolchain). Likewise a wallet or GUI PR that adds a method to interfaces::Wallet is wallet first; it is ipc only if the interface mechanics are the point.

A general-utility PR (a result type, a logging helper) that the multiprocess stack happens to be based on is not ipc.

What matters here

Anything that lets external software use the node over IPC reliably: the stability and completeness of the mining interface and its consumers, crash and disconnect handling, correctness of serialization across the process boundary, and platform coverage (the IPC binaries building and passing tests on every supported platform). Then progress on running the wallet and GUI as separate processes, which is the project's stated goal. Then reductions in the maintenance burden of the interface layer: generated code, build integration, the libmultiprocess subtree sync.

Interface cleanups without a consumer waiting on them are P3 or below.

generated 2026-11-02 01:17 UTC