---
# System prepended metadata

title: 'Bitcoin Core GUI / Design Jam #0'

---

# Bitcoin Core GUI / Design Jam #0

## Motivations
- Disliked how `gui` looked
- Wanted the application cater for designers and first time users.
- Makes the asumption of beginner user and power user.
- Settings should be hidden for the beginner user.

## How do we get there?

### Research
1. What are the supported enviroments?
2. Map out the current User Flows
3. Document current UI across operating systems
4. Understanding the history of GUI changes through [Github issues](https://github.com/bitcoin/bitcoin/issues?q=is%3Aopen+is%3Aissue+label%3AGUI)

### Creating a Design System
It looks outdated, and not what a wallet global world currency should look like.

In order to extend the features that are useful, it needs to be restructured in order to be leveled up.

Create components that can be used in the future to extend functionality.

Developers can then easily pick and match component pieces for the functionlity they are developing - like lego blocks.

#### Method
1. Create a style guide of current UI
2. Iterate that style guide & visual style
3. Implement new visual style
4. Redesign individual screens
5. Redesign user flows
6. Add new features

##### Define Components
- Dark Mode
- Typography
- Layout
- Components
- Icons

##### Spin Off Projects
- Icon Repository
- Find a opensource typeface
    - Inter, IBM Plex, Operating System Defualt?

### Encouraging Qt Implementation
- Implementation is the main bottleneck; its easy to create new design but difficult to get them implemented.
- How might we encourage Qt developers to work on the `gui`?

### Beginner Onboarding
*Rationale...*

- Having a gui that caters to both users, esp the beginner
- no onboarding
- no guidance
- wallets get created in the background
- realease documents are difficult to parse
- You get thrown in and you don't know what to do

### Understanding "Power Users"
- We do not know what power users want
- Should it be articulated better?
- Coincontrol may be a more power user priorty
- RPC Use Cases?
- Define the Jobs to Be Done

### Engaging Designers
- How might we encourage designers to contribute their free time to exploring improvements to `gui`.

### Problems
- Discussion / Is it a wasted effort to work on gui when other projects and companies are creating UIs for the node.
- Priority of funding `gui` vs `core` developers
- What are the long term goals / feature set?
- Where should designers start?
- People may be paying less attention to the gui since its split off.
- Who has been contributing to `gui` issues and pr?

--- 

<iframe style="border: 1px solid rgba(0, 0, 0, 0.1);" width="800" height="450" src="https://www.figma.com/embed?embed_host=share&url=https%3A%2F%2Fwww.figma.com%2Ffile%2FFJ02rY3m8V9ZCDvoXjW39W%2FBitcoin-Core-Session-200806%3Fnode-id%3D0%253A1&chrome=DOCUMENTATION" allowfullscreen></iframe>

# Other Ideas

#### UX Suggestions
- Highlighting pasted addresses that have already been used `power-users`

---

# Follow up
Hennadii Stepanov

>"given enough eyeballs, all bugs are shallow" -- code reviewing is a crucial part for new pulls to get merged. Reviewing was/is a bottleneck for Bitcoin Core; the GUI repo is not an exclusion. Did you notice how many regular reviewers are in the GUI repo?
Moreover, the GUI part of Bitcoin Core lacks full-coverage testing suite. It is hard.
>

>The second point is that, I think, designers should be aware of Qt framework constraints/pitfalls.

## Bitcoin Core uses Qt Widgets
>Qt has a plugin-based Platform Abstraction layer https://doc.qt.io/qt-5/qpa.html. It makes application look-and-feel and user interaction (dock vs system tray, notifications etc) platform dependent. In the past some pulls were closed due to the "not nice" look on particular platform.
>
> https://github.com/monero-project/monero-gui was pointed as an example. But please note that Qt QML (monero GUI) and Qt Widgets (Bitcoin Core GUI) are different beasts. (edited) 

### Qt Widgets Module
https://forum.qt.io/topic/86914/qml-or-widgets/6
- The Qt Widgets Module provides a set of UI elements to create classic desktop-style user interfaces.
- QWidgets have no native GPU-support so everything you show/animate etc will be rendert by the CPU. For basic buttons, icons, and images that is no problem, neither for desktop pcs nor mobile devices.
- QML has native GPU-Support that makes it the predestined type for "fancy" UI-s with lots of animations, slides, movies, fadeins, fade outs
- there is nothing stopping your from mixing both languages

### QML Graphical User Interfaces
QML allows developers to build user interfaces in a declarative way. User interfaces specifically benefit from the simplicity of compounding QML objects and configuring them using property bindings.

Qt Quick is a module which supplies QML types for creating user interfaces such as a visual canvas with its own coordinate system and rendering engine. Animation and transition effects are a first class concept in Qt Quick and visual effects can be supplemented through specialized components for particle and shader effects.

- https://doc.qt.io/qt-5/topics-ui.html#qml-graphical-user-interfaces

### Multi Platform Support

>So I believe that multi-platform support discussion should be raised in the design community.
>
> Some examples of multi-platform issues and discussions are: https://github.com/bitcoin-core/gui/issues/24 and https://github.com/bitcoin/bitcoin/pull/14810#issuecomment-635804151 (edited) 