This article is written to provide the starting point for a conversation among Bitcoin Core developers. It solely reflects the opinion of the author of the article. At the time of writing, no project decisions have been made.
For more than a decade, the Bitcoin Core GUI has been an important part of providing Satoshi and everyday users with well-reviewed Bitcoin node and wallet software they can use. I believe it is important these users continue to be served and think to do so we must soon update Bitcoin Core's architecture and project organization.
I think that it's in the best interest of Bitcoin Core developers and users to:
- Deprecate and abandon the Bitcoin Core GUI. It is insufficiently developed and reviewed, and current users have viable alternatives.
- Focus on empowering developers to build far better and diverse GUIs than are currently available without being tied to the Bitcoin Core development and release process.
A lot of work was done in the bitcoin-core/gui-qml project to sail the Bitcoin Core GUI into the 21st century, overhauling its design and its internals. When the project kicked off in 2021, the README stated:
The current Bitcoin Core GUI has gathered enough technical debt and hacked on features; it is time to begin anew.
Unfortunately, project development has all but stalled, with the last commit made 6 months ago. The original bitcoin-core/gui, meanwhile, is still getting maintenance updates thanks to the continued efforts of few, but is getting far fewer contributions and eyes on the code than its complexity warrants.
I think it is in the best interest of our users and developers to deprecate and subsequently abandon the Bitcoin Core GUI. Our users have rightfully come to expect Bitcoin Core releases to be thoroughly vetted by many people. I feel we're no longer delivering on that expectation. I also think it's unrealistic to expect that to change soon, given contribution patterns in recent years.
Changing software and workflows is not something people generally enjoy. I hope that a new GUI for Bitcoin Core will reach maturity before the last supported version goes EOL three versions later. Depending on preferences, some users may find better alternatives in one of many existing third-party wallet software projects. Finally, existing wallets will remain accessible through the RPC interface in later versions, and for some users it may be acceptable to use EOL software for wallet-only purposes.
The monolithic nature of the GUI and its dependency on the Bitcoin Core release process strongly contributed to halting the QML project. It would be unwise to repeat this mistake. I propose to - at least for now - halt developing a GUI under the Bitcoin Core umbrella*.
Bitcoin Core should excel at its core functionality, and enable users and builders to extend it. Besides historical reality, I see no reasons a good Bitcoin Core GUI has to be monolithic. I propose that contributors who are excited about the existence of a good GUI focus their efforts on helping improve the interface(s) that GUI developers need to build high-quality software. This way, we increasingly remove Bitcoin Core as the bottleneck and allow a free market of GUIs (and other downstream projects) to flourish.
This deprecation will also benefit non-GUI users and Bitcoin Core development in general. A more focused Bitcoin Core project means reduced dependencies and attack surface, a simplified build system and release process, faster development through reduced interactions and compilation times, and less distraction for developers who would rather spend their time on other parts of the code.
* I think the QML project is a prime candidate to gradually be ported to communicate via bitcoind's public interfaces, and the completed work absolutely should not be discarded.
I think a good course of action would be to:
- 2026-02: publish this write-up, gather contributor feedback about the deprecation process and better enabling a decoupled GUI
- v31: deprecate GUI binaries, but maintain them until abandoned
- 2026-03: form working group around ensuring proper GUI public interface(s) (if sufficient contributor interest)
- after v34 branch-off: abandon GUI binaries, archive
bitcoin-core/guiandbitcoin-core/gui-qmlrepositories, start removal of GUI code from bitcoin/bitcoin
I hope this write-up has sparked your enthusiasm for this change of course I'd like to see for the Bitcoin Core project, and warmly welcome any feedback or corrections.
--
hebasto
No objections in general about having a proper GUI public interface and a decoupled GUI based on that. (edit: I mean "technically" decoupled, that uses IPC. Not "organizationally" decoupled).
However, it seems to me that the current GUI should be deprecated and removed only after there is an alternative. Otherwise we may end up with a GUI-less Bitcoin Core. I have a strong upsetting feeling about that.
Removing the existent GUI is not a necessary condition for developing of a new one, right?