Note
This code relates to version 1.x of QRL, the world's first open-source PQ blockchain, which has been securing digital assets since December 2016. The next generation of QRL, version 2.0, is in development and has its own repositories. See this discussion page.
This is the QRL wallet application developed by The QRL team, and hosted on wallet.theqrl.org
It provides both web and desktop interfaces using Meteor, Tailwind CSS, daisyUI, NodeJS and Electron.
All secure XMSS operations are run in a web assembly compiled version of qrllib locally in your browser or desktop application. Keys stay in the memory space of the XMSS object, which is destroyed the moment you close the wallet, browser window or desktop application.
The following dependencies are required for a functional local development environment.
NodeJS v22 — we recommend nvm, which will pick up the version in .nvmrc. That file is the authoritative version for both local development and CI.
Meteor 3.4 — install per the official instructions
(npm install -g meteor). The project pins its release in
.meteor/release, and the tool springboards to that version automatically.
npm install -g node-gyp
node-gyp issues can generally be solved with updating npm (npm i -g npm) and rebuilding modules (npm rebuild)
Linux only: libusb-dev, libudev-dev and libarchive-tools
sudo apt-get install libusb-dev libudev-dev libarchive-tools
Windows only: Build Tools for Visual Studio (the "Desktop development with C++" workload), required to compile the native USB/HID modules.
Everything else — including @theqrl/electrify-qrl for the desktop build and electron-builder for the installers — is a local dependency installed by npm install. No global installs are needed beyond the above.
git clone https://github.com/theQRL/qrl-wallet.git
cd qrl-wallet
npm install
meteor
A locally running wallet will be available at http://localhost:3000
The compiled Tailwind stylesheet (public/tailwind-output.css) is committed, so meteor alone
gives a fully styled wallet. If you are editing styles or Tailwind classes, use the dev script
instead — it rebuilds the stylesheet on change alongside Meteor:
npm run dev
To rebuild the stylesheet once, without watching:
npm run build:css
npm run releaseready
This runs meteor lint and is the check to run before opening a pull request.
There is currently no working automated test suite: npm test is a placeholder, and the legacy
browser tests under tests/ have no runner wired up. Changes should be verified by hand until a
runner is reinstated.
npm run electron
Ensure a node binary for the platform being built for is present in .electrify/bin. To copy the
one currently on your PATH:
npm run acquire:node
The wallet holds no server-side database, so no mongo binaries are required.
- Clean only the target platform output in
.electrify/.dist
MacOS, Linux and Windows
npm run cleanDist
For explicit platform cleanup:
npm run cleanDist:darwin
npm run cleanDist:linux
npm run cleanDist:win32
- Package Electron App
MacOS, Linux and Windows
npm run releaseready
npm run build
For explicit platform packaging:
npm run build:darwin
npm run build:linux
npm run build:win32
npm run installer
Installers are produced by electron-builder: a .dmg on macOS,
.deb and .pacman packages on Linux, and an NSIS .exe on Windows. Output is written alongside
the packaged app in .electrify/.dist.
For explicit platform installers:
npm run installer:darwin
npm run installer:linux
npm run installer:win32
Official desktop artifacts are built and published by the
release-build workflow, which runs on a v* tag across a
six-platform matrix.
If you have issues, the QRL Discord is a good place to ask for help.