Let's put a GUI on grin-wallet

Right now grin-wallet lacks a UI by design.

This makes for an experience where new users who choose to download the official wallet
from grin.mw find themselves staring at an native executable which opens Terminal or
Cmd.exe and the experience
is disorienting and discouraging. Users need to figure out each individual
command for the wallet by reading documentation and constructing commands. This
is not ideal.
While there are alternative clients with UI for Mac/Windows this
discussion is mainly around the reference client.
Bitcoin Core has proven the sucess of Qt based UI’s over it’s many years of use.
The Bitcoin Core UI is simple and effective, has only four screens in a single
window, and could be easily duplicated for grin-wallet.

This would give our users something to “download, click, and run” which they can
then figure out by navigating standard GUI elements.

Since keeping the wallet running (and listening) for interactive transactions is
such a large part of using the grin blockchain, it seems that it would benefit grin
in it’s ability to acquire and retain users if we had a double-clickable
UI-based program that ran the grin-wallet. Since a wallet instance isn’t
valuable without a running node, the UI would also need to fork the node
process or have the user specify a remote node to use.
It would also need to spin up a tor process to announce the hidden service at
the wallet’s Slatepack address.

Upon further research, it appears that because Qt reimplements most of the C++
standard library it’s somewhat impractical to use from rust. For that reason, it
appears that the best GUI framework would be orbtk.

The orbtk uses SDL2 to open windows on Mac, Linux and Windows. It would allow
grin-wallet to have a UI much like bitcoin core.

We can statically link SDL2 into the program to make everything “just work” on
any operating system, even one that doesn’t have SDL2 installed yet.

I estimate this would take about four months of development time. It could be
done as a seperate repository that included grin and grin-wallet as submodules.


We also have Niffler wallet which runs the grin-wallet under the hood. I always thought we could move towards having the GUI ftom Grin++ be modified to support both the C++ node and or the rust node. Maybe even in the future support multiple simultanious nodes for extra security.
But an alternative GUI could also work, not sure what is best. 4 months to pull that of sounds short, but if you can, go ahead😉

1 Like

This is the most practical and useful suggestion and scheme I have seen in the community recently. If it can be realized, it will play a very positive role in the development of grin.

Grin’s design is perfect, but it’s perfect, so it’s very bad in ease of use.

If there is a popular and easy-to-use wallet, more and more people will know grin and play a positive role in the decentralization of computing power. More and more users will hold grin to meet grin’s icon and keep smiling at everyone. The current situation is that grin wants to say it’s not easy to love you.

There is, it is called Grin++. However, what I do not like about the current situation is that Grin++ only supports the C++ node. This results in a decreasing number of people using grin-wallet (Rust). Ideally there ratio between wallets that use either nodes would be 50% 50% for security reasons. Hence I agree it would be a great addition for grin-wallet to also have a GUI and to have a version that comes with precompiled dependencies such as tor.

Allow me to tell you the truth. Grin + + is very successful for a few people, but it is very unfriendly for most friends who have just come into contact with grin. Because of its poor ease of use, node synchronization limits the use of most people.

Feedback is always great. So what makes it hard to use, is the synchronization time to long? What makes it hard to use? If the synchronization time is the problem, IronBelly is a great alternative, since it is a light wallet, no need to sync.

Take a look at why the miners are concentrated in the VIP mine pool, and then take a look at why the recharge of most exchanges is so troublesome. These problems are worth pondering by community members. For a currency defined as currency, most people use it,This is its purpose. I think easy use is equivalent to popularization. Most users are using it.

1 Like

:thinking: The main reason miners mine on always.vip is so they can directly withdraw mining income to Gate.io, without first transferring to their own wallet.
This indicates these miners do not want to use Grin as a currency, but want just easy mine using always.vip and easy sell using Gate.io without having ever hold the grin in a wallet in their own control. Holding your own coins is defining for using any cryptocurrency as real currency if you ask me.
But I do agree we should always aim to make using Grin easier and as intuitive as it can be.


Not all miners as you know transfer grin to the exchange for sale. In fact, some people just want to save it more conveniently, because grin + + wallets often can’t synchronize nodes.

1 Like

IronBelly is not a light wallet, the difference is that Grin++ is a node and wallet and runs in your local device. Some people prefer to run their own node and some people don’t, as simple as that.

Again, what is wrong with Grin++? I promise I’ll let developers know.

1 Like

I don’t know how long it takes you to synchronize a grin + + node. I just downloaded a grin + + wallet on Google. It has taken 2 hours to synchronize the node, and it hasn’t been fully synchronized yet. Do you think a person who has just contacted grin will wait more than two hours to install a wallet?

You are talking about the mobile application, right? Well, 2 hours to sync in a mobile phone isn’t that much, but anyways, in the next version, which is currently under development, you won’t need to wait until your local node is fully synced to use the wallet.

1 Like

That is longer than in my experience. Compare it to Bitcoin core (full node), it would take much longer to download than 2 hours.
But considering the blickchain size 2 hours is still long. Hopefully PIBD implementation will speed up the initial syncing, it is being worked on at the moment


Recently i had similar issues, i was stuck at “waiting for peers”, i just let the wallet open for some hours and when i came back everything was up and running.


Hi David,

I wanted to keep this thread on topic for only grin-wallet but since grin++ came up I will take this opportunity to provide a little feedback.

Let me first say that you and davidburkett did a really nice job with this software and anyone who appreciates Grin’s story must also appreciate Grin++'s role in that story.

However, as many people understand, cryptocurrency-powering software has a different set of requirements than some other forms of software. Namely, when it’s money, the software must be absolutely reliable. It can never let it’s user’s down - because it’s their money. They’re choosing to be their own bank, and they need their banking software to work as reliably as classic fiat banking.

Right now, Grin++ just isn’t there. It has numerous issues which, when considered in amalgam, make it far too unreliable for our users. I will list for you just the most serious here, which I’ve encountered over the last 6 months of using grin++.

  1. “The node process is not running” - this makes no sense, and the UI offers only one button to “fix” the issue? Why did the software require me to click this one button with no meaning, “Restart Wallet” - why am I restarting my wallet? Is it clearing my money away? This happens constantly, it confuses users, the dialogue shouldn’t exist and the problem of why the “Node process is not running” needs to be fixed at the system level.

  2. Transaction list is suddenly empty. One returns to grin++ to find that their transaction list is suddenly empty? Where have they gone? Why did they vanish?

  3. Unable to find peers. The software struggles to find peers. Sometimes it finds lots of peer but will then crash for a different unrelated reason, and it’s difficult to find those peers again.

  4. Unable to sync the headers - this is not a problem that the grin rust code ever experiences.

There’s a bunch of others, but rather than keep listing them - I would posit a question to you: Imagine if bitcoin core had these types of bugs. If the transaction list were suddenly empty, and it kept asking to “restart the wallet”? The short answer is, it doesn’t. It’s absolutely reliable every time you run the software and you can know, deep down, that Bitcoin Core won’t fuck you when you need it most.

We need a GUI on grin-wallet because the software is constructed in such a way that achieving this absolute reliability is possible. We need a grin wallet that won’t make your heart skip a beat and think all your money is gone, or struggle to find peers, or require you to click a “restart” button 6 times to run it. The world deserves a grin wallet that is bulletproof and absolutely reliable. That will work every time, without question, and without scaring off non-technical users. Because we all know the grin blockchain is the most powerful blockchain currently in production. But without a single GUI-driven executable that our users can just “download, click and run” which works 100% of the time, even the most elegant blockchain in all of mathematics doesn’t really matter that much.

We can do it.

  • Sheldon

I’m glad you mentioned **the last 6 months**, thank you. You are correct, v1.2.6 fixed the Unable to find peers issue you mentioned, but introduces 2 bugs extremely difficult to reproduce, but the good news is the one fix is on the way here. I am running several Grin++ public nodes so I can tell that v1.2.6 isn’t that stable as the previous releases, sorry about that, but don’t worry v1.2.7 will be released soon and it won’t have issues 1,3 and 4 you listed.

How can I reproduce this?

Like what? Telegram: Contact @GrinPP is there, I added a button to open the Telegram Group directly from the UI, it is not that hard I think. We really take the feedback serious, we help our users from there, for example, I’ve been helping users from Russia to bypass the Tor censorship right now and get their wallets reachable.

Funny thing that you also can contribute to Niffler which includes grin-wallet. IronBelly is also there. Anyone can contribute to those projects if they want. Why don’t you collaborate to those projects?

I encourage you to take your time and participate more on Keybase and Telegram, if you do, you will know that we (Grin++) listen to our users, one, and second, ideas are good and everything but what we are missing right now in Grin as a project is man power, in other words: we need people to do the dirty work.

ideas are good and everything but what we are missing right now in Grin as a project is man power

I understand that. I am proposing that I would like to contribute to writing the GUI for grin-wallet that is the topic of this thread. I want the community to settle on a technology stack for the GUI (be it either Orbtk or React or something else) which is why I started this thread. I’m not just blindly throwing the idea that someone else write the GUI. I want to do it.

Why don’t you collaborate to those projects?

Because I’m proposing a UI for the reference client. I’m aware that others have written 3rd party UI’s already.

Glad the fixes you mentioned are in the pipeline. Looking forward to testing 1.2.7.


Grin++ UI is written in React Js, IronBelly is React Native and Niffler in Vue.

What do you mean with 3rd party UI’s? I don’t understand.