IPC / multiprocess

PRPriorityReviewabilityReviewsAgreementSize
(+)#10102 ryanofsky Multiprocess bitcoin
  • Isolate the node, wallet, and GUI into separate processes so crashes or exploits do not compromise the node
  • Allow components to run on independent lifecycles for improved stability and security
P2 · new feature
  • P1 because it delivers the executables needed to run the node, wallet, and GUI in separate processes
  • It provides the core milestone for the multi-year process separation effort
  • It unblocks downstream pull requests for isolated process execution
Review #29409 first
0 (+1) -1
Strong
  • Strong long-standing concept consensus across multiple maintainers
  • Concept approval emphasizing the value of process isolation (laanwj)
  • Concept approval with testing (Sjors)
  • Historical concept approval (dcousens, promag, jamesob, hebasto)
3,842 + 135 tests
  • 3,842 lines added or modified outside tests
  • 135 lines added or modified in tests
  • 539 lines removed in total
  • 136 files, 23 commits
(+)#29409 ryanofsky multiprocess: Add capnp wrapper for Chain interface
  • Allow wallets and external clients to run as separate processes from the node
  • Enable out-of-process clients to query chainstate and receive asynchronous chain notifications
P2 · new feature
  • P2 because it is a major prerequisite to run the wallet in a separate process
  • Directly unblocks multiple downstream multiprocess PRs and external integrations
Ready
  • Ready for review with passing CI and no pending structural changes
0 (+2)
Mild
  • Strong support with testing against external client prototypes (darosior, sedited)
  • Concept approval for enabling downstream client integration (willcl-ark, josibake)
  • Questioned handling of invalid parameters from non-C++ clients (zaidmstrr, willcl-ark)
  • Ongoing architectural discussion on raw versus specialized IPC interfaces (Sjors)
2,190
  • 2,190 lines added or modified outside tests
  • 0 lines added or modified in tests
  • 429 lines removed in total
  • 71 files, 7 commits
(+)#32387 ryanofsky ipc: add windows support
  • Allow multiprocess node and GUI binaries to build and run on Windows
  • Enables Windows users and developers to utilize and test process separation
P2 · platform fix
  • P2 because establishing Windows support allows multiprocess architecture to become cross-platform
  • fulfills a stated core milestone for IPC platform coverage
Needs rebase
  • Needs rebase due to merge conflicts with master
  • Carries temporary in-tree libmultiprocess changes while upstream PRs remain pending
0
Positive
  • Broad support for bringing IPC support to Windows with no objections
  • Concept approval without stated reasons (hebasto)
  • Feedback focused on testing strategies via Guix and bitcoin-mine (Sjors)
2,098 + 176 tests
  • 2,098 lines added or modified outside tests
  • 176 lines added or modified in tests
  • 775 lines removed in total
  • 90 files, 30 commits
(+)#35037 enirox001 ipc: support per-address max-connections options on -ipcbind
  • Add per-listener connection limits and file descriptor reservations for IPC sockets
  • Prevent runaway IPC connections from exhausting node file descriptors or starving P2P and RPC sockets
P2 · stability
  • P2 because uncontrolled IPC connections could exhaust node file descriptors or trigger startup crashes
  • Protects node resource allocation and establishes a pattern for upcoming IPC listener options
Ready
  • Ready to review: all previous feedback has been addressed with no open issues or blockers
1 (+3)Strong
  • Strong consensus on attaching connection limits and file descriptor reservations to listeners
  • Fixes a gap in descriptor accounting and adds helpful socket limits (ryanofsky)
  • Verified connection limits locally using multiple client sockets (xyzconstant)
  • Code approved without objections (Eunovo, ViniciusCestarii)
283 + 123 tests
  • 283 lines added or modified outside tests
  • 123 lines added or modified in tests
  • 17 lines removed in total
  • 12 files, 4 commits
(+)#19461 ryanofsky multiprocess: Add bitcoin-gui -ipcconnect option
  • Connect a GUI directly to an already running node process over IPC
  • Allow users to start and close the graphical interface without shutting down the node
P2 · new feature
  • P2 because it completes a central milestone of the multiprocess architecture
  • Enables the GUI to attach to and detach from an external node process independently
Review #19460 first
0
Mild
  • Broad agreement on the feature and interface design
  • Concept approval noting consistency with rpcconnect conventions (laanwj)
  • Concept approval without stated reasons (meshcollider)
  • Verified by testing remote GUI connections over an SSH socket (Sjors)
  • Identified node crash on wallet flag mismatch, tracked as a follow-up (jimhashhq)
3,912 + 135 tests
  • 3,912 lines added or modified outside tests
  • 135 lines added or modified in tests
  • 567 lines removed in total
  • 142 files, 27 commits
(+)#35932 ryanofsky ipc: make ipc::disconnectIncoming wait for in-progress calls to complete
  • Prevent assertion crashes during node shutdown when IPC requests are still in progress
  • Ensure worker threads finish executing active IPC calls before node subsystems are reset
P2 · bug fix
  • P2 because it fixes shutdown assertion crashes when IPC calls run concurrently with teardown
  • Reliable disconnect handling during shutdown is critical for stable external IPC usage
CI failing
  • CI is failing on the latest push
  • Based on unmerged upstream libmultiprocess pull request 335
0
  • No review verdicts recorded
Crickets
  • No reviews or comments yet
  • Waiting for initial review feedback
339
  • 339 lines added or modified outside tests
  • 0 lines added or modified in tests
  • 21 lines removed in total
  • 5 files, 5 commits
(+)#36097 xyzconstant mining: replace interrupt methods with cancellation arguments
  • Allow multi-process mining clients to cancel blocking calls cleanly within requests
  • Eliminate ad-hoc interrupt calls and protocol race conditions in external mining interfaces
P3 · interface
  • P2 because it adds native request cancellation across the IPC boundary
  • Removes ad-hoc interrupt calls and simplifies multi-language client implementations
  • Establishes a reusable pattern for future cancellable blocking IPC calls
CI failing
  • CI is failing
  • Temporarily vendors an unmerged upstream commit from libmultiprocess
0
  • No review verdicts recorded
Strong
  • Strong support for native cancellation simplifying client and server interactions (ryanofsky)
  • No objections raised
2,132 + 43 tests
  • 2,132 lines added or modified outside tests
  • 43 lines added or modified in tests
  • 615 lines removed in total
  • 70 files, 2 commits
(+)#33117 D33r-Gee Interfaces: Expose UTXO Snapshot Loading and Add Progress Notifications
  • Allow GUI clients to trigger UTXO snapshot loading and display real-time progress feedback to users
P3 · new feature
  • P3 because it exposes snapshot loading and progress notifications across process boundaries
  • Directly unblocks GUI snapshot loading implementations in downstream pull requests
Needs rebase
  • Needs rebase due to merge conflicts with master
0 (+1)
Strong
  • Strong consensus on concept and approach with all architectural concerns resolved
  • Verified snapshot loading using downstream QML GUI (pinheadmz) and current GUI (Sjors)
  • Approach approval (sedited)
127 + 2 tests
  • 127 lines added or modified outside tests
  • 2 lines added or modified in tests
  • 21 lines removed in total
  • 10 files, 3 commits
(+)#35916 enirox001 fuzz: improve ipc fuzz coverage
  • Catch bugs in inter-process communication by fuzzing malformed payloads and bidirectional callbacks
  • Ensures process separation safely rejects corrupted inputs without crashing
P3 · test coverage
  • P3 because expanding IPC fuzz coverage supports the long-term reliability of process separation
  • It enhances test coverage rather than addressing an active bug or altering production APIs
Ready
  • Ready for review
  • CI is passing and earlier review questions have been resolved
0 (+1)
Strong
  • Strong support noting it fulfills earlier requests for expanded fuzzing (jeanpablojp)
  • Question on using raw bytes instead of structured data was resolved with code comments (Eunovo)
292
  • 292 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 IPC
  • Prevent obscure build and link failures when building with IPC enabled
  • Catch missing library exception handling early during build configuration
P3 · platform fix
  • P3 because it ensures the multiprocess build environment meets required exception handling needs
  • Prevents dependency configuration errors when building multiprocess components
Ready
  • Ready for review now with clean CI and complete commits
0
  • No review verdicts recorded
Crickets
  • No reviews or comments yet
  • Awaiting initial community feedback after being opened as draft
179
  • 179 lines added or modified outside tests
  • 0 lines added or modified in tests
  • 0 lines removed in total
  • 12 files, 3 commits
(+)#19460 ryanofsky multiprocess: Add bitcoin-wallet -ipcconnect option
  • Allow the wallet tool to connect directly to a running node over IPC
  • Lays the transport foundation for future online wallet subcommands without HTTP RPC
P3 · new feature
  • P3 because it enables external wallet binaries to connect to a node process over IPC
  • It serves primarily as transport infrastructure to unblock follow-up PR #19461
Waiting on author
  • Review #29409 first
  • Stacked on top of unmerged multiprocess prerequisite PRs #29409 and #10102
0
  • No review verdicts recorded
Blocked
  • Unaddressed question whether adding IPC to an offline CLI tool creates user footguns (ajtowns)
  • Cautioned against conflating offline wallet tooling with online daemon features (jonasschnelli)
  • Author clarified that standard offline wallet usage remains intact and default
3,873 + 135 tests
  • 3,873 lines added or modified outside tests
  • 135 lines added or modified in tests
  • 549 lines removed in total
  • 139 files, 25 commits
(+)#33922 Sjors mining: add getMemoryLoad() and track template non-mempool memory footprint
  • Track memory held by transactions retained only because open block templates reference them
  • Expose template memory load over IPC so external mining clients like Stratum v2 providers can manage it
P3 · new feature
  • P3 because it adds a new monitoring capability to the multiprocess mining interface
  • Enables Stratum v2 template providers to inspect server-side memory held by active templates
Review #35675 first
0 (+2)
Strong
  • Consensus in favor of exposing template memory load over IPC
  • Support for the design and utility of template memory tracking (ryanofsky, vasild, enirox001)
  • Nonblocking objection: prefer node-side FIFO limits over delegating memory management to clients (ismaelsadeeq)
  • Resolved objection: data race addressed by adding a mutex (ryanofsky)
  • Resolved objection: brittle header workaround removed into another PR (maflcko)
630 + 457 tests
  • 630 lines added or modified outside tests
  • 457 lines added or modified in tests
  • 463 lines removed in total
  • 34 files, 19 commits
(+)#30437 ryanofsky ipc: add bitcoin-mine test program
  • Adds test coverage for client-side multiprocess IPC communication that Python tests cannot exercise
  • Gives external mining tool developers a reference implementation for calling node interfaces over IPC
P3 · test coverage
  • P3 because it exercises multiprocess IPC on the client side, filling a gap left by Python tests
  • Benefits Core developers maintaining IPC infrastructure without affecting standard node operation
Ready
  • Ready to review; clean rebase, CI is passing, and author addressed all concrete feedback
0 (+3)Mild
  • Support for adding test coverage for client-side multiprocess IPC (Sjors)
  • Verified by testing connection, tip retrieval, and mining on macOS (BrandonOdiwuor)
  • Questioned need for an in-tree client and suggested a dedicated CMake option (sedited)
  • Noted that the binary should not be distributed in release packages (fanquake)
219 + 41 tests
  • 219 lines added or modified outside tests
  • 41 lines added or modified in tests
  • 7 lines removed in total
  • 10 files, 5 commits
(+)#24230 ryanofsky indexes: Stop using node internal types and locking cs_main, improve sync logic
  • Prevent lock contention by stopping indexes from holding the main lock during sync and startup
  • Decouple optional indexes from node internal types so they can eventually run in separate processes
P3 · unblocks #10102
  • P3 because it builds interface abstractions needed for process separation of the index subsystem
  • Lays required interface groundwork without yet implementing the multiprocess transport layer
Needs rebase
  • Needs rebase due to merge conflicts with current master
0
Strong
  • Broad concept and approach support across multiple maintainers with all code concerns resolved
  • Approach support for separating internal types toward multiprocess architecture (sedited)
  • Concept support verified through detailed testing across commits (mzumsande, josibake)
  • Concept approval without stated reasons (fjahr, aureleoules)
  • Resolved race conditions and crash on block invalidation during sync (mzumsande, furszy)
937 + 201 tests
  • 937 lines added or modified outside tests
  • 201 lines added or modified in tests
  • 577 lines removed in total
  • 42 files, 18 commits
(+)#36105 ryanofsky bitcoin wrapper: Fix Windows exec so wrapper waits for child process
  • Make the Windows bitcoin wrapper wait for child processes to finish and propagate their exit codes
  • Allow test frameworks and caller scripts on Windows to capture output and monitor child exit status
P3 · platform fix
  • P3 because it fixes child process tracking required for multiprocess coordination on Windows
  • Unblocks Windows multiprocess tooling and functional test execution
Ready
  • Ready to review
  • All CI checks are passing and recent review comments have been addressed
0
Mild
  • Strong support for fixing Windows child process waiting without objections to the approach
  • Concept approval and runtime error handling review (hodlinator)
  • Concept approval with notes on future UCRT transitions (hebasto)
  • Collaborated on child exit code resolution logic (Bortlesboat)
27 + 11 tests
  • 27 lines added or modified outside tests
  • 11 lines added or modified in tests
  • 20 lines removed in total
  • 6 files, 4 commits
(+)#35581 ismaelsadeeq node: add block template manager and track waitNext fee inflow
  • Avoid assembling full block templates on every tick just to check for mempool fee changes
  • Reduce lock contention and CPU load during block generation for mining pools and template consumers
  • Consolidate block creation and template state management into a unified interface
P3 · cleanup
  • Cleans up IPC usage by letting in-process callers bypass the IPC mining interface wrapper and avoiding unnecessary defensive block copying.
Review #35675 first
0
Strong
  • Strong support for incremental fee inflow tracking and architectural cleanup
  • Suggested splitting out the base manager into a dedicated preparatory PR (Sjors)
  • Concept approval praising incremental snapshot tracking and bug discovery via fuzzing (pablomartin4btc)
  • Concept approval without stated reasons (w0xlt)
1,171 + 1,493 tests
  • 1,171 lines added or modified outside tests
  • 1,493 lines added or modified in tests
  • 587 lines removed in total
  • 51 files, 27 commits
(+)#36106 ryanofsky bitcoin wrapper: respect CMAKE_INSTALL_BINDIR/LIBEXECDIR
  • Allow distributions with custom install paths to run the bitcoin wrapper without execution errors
  • Fixes broken binary discovery when launching components on systems like Arch Linux
P3 · bug fix
  • P3 because the multiprocess wrapper can locate and dispatch to sub-processes in custom layouts
  • Prevents execution failures when launching node processes under non-default directory trees
Ready
  • Ready to review
  • Code is clean, test suite issues are resolved, and CI is passing
0
Strong
  • Strong support across reviewers with all prior feedback addressed
  • Approach approved after testing with custom install prefixes (hebasto)
  • Verified by testing on Arch Linux directory layouts (cyb3ralbert)
42 + 71 tests
  • 42 lines added or modified outside tests
  • 71 lines added or modified in tests
  • 6 lines removed in total
  • 6 files, 2 commits
(+)#35300 w0xlt mining: add precious option to IPC block submission
  • Let external mining software atomically submit and prefer a locally mined same-work block over IPC
  • Avoid race conditions from issuing a separate preciousblock RPC call
P3 · new feature
  • P3 because mining clients no longer need a parallel RPC session just to handle precious blocks
  • Incremental addition to the mining interface without broader architectural impact
Needs rebase
  • Needs rebase against current master due to merge conflicts
  • Author has been silent since July 2026
0
Mild
  • Concept approval for handling precious blocks directly over IPC (Sjors, pablomartin4btc)
  • Questions whether duplicate status should still be returned if precious is requested (Sjors)
  • Recommends splitting and reorganizing the oversized unit test (Sjors)
  • Considers the internal chain activation refactoring a clean prerequisite (pablomartin4btc)
125 + 431 tests
  • 125 lines added or modified outside tests
  • 431 lines added or modified in tests
  • 100 lines removed in total
  • 20 files, 6 commits
(+)#35887 ViniciusCestarii ipc: use std::optional for checkSpawned(), add tests and rename arg -ipcfd to -ipcchild
  • Make internal IPC argument names platform-neutral and modernize process checking interfaces
  • Add unit test coverage for IPC child process argument parsing edge cases
P4 · cleanup
  • P4 after comparing with the other PRs here (assessed alone as P3): Demoted from P3: rename plus std::optional refactor with no consumer waiting on it, which this category places at P3 or below; it is the narrowest item on the list.
  • P3 because it is minor cleanup and test coverage for multiprocess support
  • Improves argument accuracy on non-UNIX platforms without fixing active bugs
Ready
  • Ready for review, clean, and passing CI with all feedback addressed
2Strong
  • Strong support for completing the requested follow-ups from earlier IPC work
  • Verified by testing with IPC enabled and checking argument handling (jeanpablojp)
  • Approved commit structure and code changes (enirox001)
66 + 1 tests
  • 66 lines added or modified outside tests
  • 1 lines added or modified in tests
  • 24 lines removed in total
  • 6 files, 3 commits
(+)#34978 enirox001 init: reserve file descriptors for IPC connections
  • Prevent unexpected crashes or socket errors from file descriptor exhaustion when IPC is enabled
P4 · stability
  • P4 after comparing with the other PRs here (assessed alone as P3): Demoted from P3 and moved down: superseded by #35037, which the author himself preferred, so it now has no independent claim on review time.
  • P3 because prevents unpredictable node failures from running out of file descriptors
  • IPC remains an experimental feature and this only reserves descriptors without enforcing caps
Needs rebase
  • Review is not worthwhile because the author marked it draft in favor of #35037
  • Needs rebase and has merge conflicts
0 (+1)
Disputed
  • General agreement that IPC file descriptors need accounting (Sjors, kevkevinpal, w0xlt, sedited)
  • Architectural objection preferring per-address limits over a global configuration option (ryanofsky)
  • Author marked as draft to pursue the alternative approach (enirox001)
26 + 61 tests
  • 26 lines added or modified outside tests
  • 61 lines added or modified in tests
  • 4 lines removed in total
  • 3 files, 3 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-09-17): all PRs here were compared with each other; 8 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-09-17 21:55 UTC