So you want to build a GUI in Zcash or a derivative

@skyl yeah, if you can build a modular codebase that other (mediocre) developers can use to more easily integrate Zcash into their own projects, then that would be awesome. Having a UI library for the foundation’s projects and also allowing devs to use their own UI is important, and it sounds like that’s what you want to do.

@secparam decentralizing the ecosystem for development makes complete sense. If it’s possible to invest in design within that ecosystem, then that will help Zcash beat other wallets.

1 Like

Hey folks, so back in December 2017 I started putting together a ZCash GUI wallet. It uses React, Redux, Electron and connects to the zcash daemon with a custom RPC lib implementation (based on available alternatives on GitHub). I ended up getting sidetracked due to some big projects happening at work and haven’t been able to spend a ton of time on it.

That being said, this thread is a great reminder for the project, and I intend to continue building upon it. I want to clean up the code a little, add some type checking through Flow, write better documentation, and fix a couple of nuances before I can open source it and receive help from other community devs. I hope to get this done within the next week or two (travel plans in the middle unfortunately).

The UI is pretty nice, but very very infant at this point. While others might find it OK, after some time apart from the project I’ve actually grown to dislike it quite a bit. I love the dark mode, but the ADA color contrasts are way off and I’m hoping to revamp this ASAP. This however should not affect core functionality of the wallet, just UI and UX.

The API hookups are all there, check screenshot to see all methods available from zcashd to the application. It’s a cross-platform app and with some tinkering we can curtail all (most?) of Electron’s side effects when it comes to running malicious remote JS content.

My goal is to open for help from other community devs so we can not only build a highly stable, secure, cross-platform, and modern ZCash GUI with support for t and z addresses/txs, but also provide an OSS codebase where other devs can fork / copy the skeleton and more easily create their own ZCash wallet GUIs.

If anyone’s interested in helping out that’d be very appreciated. I’ll make sure to post updates to this thread as I continue to improve on the codebase until I deem it to be ready for OSS. I don’t aim to have the wallet GUI complete by that time – I am seeking help from the community to finish the initial implementation.

Some bare-bones screenshots below:

5 Likes

Oh and I forgot to mention. My goal would be to isolate the zcash daemon and have it run on a docker container (packaged with the app), so it can more easily be cross-platform - something similar to this: GitHub - kost/docker-zcash: Zcash inside docker container. But with the updated version to run Overwinter current release.

2 Likes

Cheat sheets for React Native :sunglasses:

@andrerfneves Cool looking UI. I’d be happy to help when you open source it. I’ve built an electron app or two in my day. Release early and often :wink:

It’s probably worth noting that react and react-native are mostly incompatible. Electron is a way to wrap a react web app to make a desktop app using chromium whereas react-native-windows, react-native-macos, etc are ways to use react-native components to make desktop apps.

I say “mostly incompatible” because pure JavaScript libraries can be shared between the two (as opposed to components specific to web or native which can’t be shared). With this in mind, maybe my modular monorepo strategy can bear some fruit. I have a module that only depends on redux and stdrpc that could be used in react/web/electron and react-native. It’s a stateful client: react-native-zcash/core/zcash-redux at master · ZcashJS/react-native-zcash · GitHub. I can publish this to npm if anyone wants to use it outside of my repo.

Also @andrerfneves, if you want to add your application to my repo (we could move the repo to a different namespace or maybe even sell/donate it to the foundation in the future), we could probably share a lot of core libraries, clients etc that don’t care whether the ultimate application is web or native.

My focus right now is similar to what you have - build a desktop UI that talks to a local zcashd. In the future, I’m interested detaching the client from the node. So, I want to get to the point where I can put together a light/SPV client as proving becomes more feasible on phones, for instance.