Money no one can freezeCash for the internet, private by default

Verify the build Don't trust us. Check the code your browser runs.

The wallet is open source. Anyone can rebuild it from GitHub and get the same files, byte for byte, that this site sends to your browser.

Last updated .

Your browsermakes and locks your keysmonero-ts engineopen source, runs as WebAssemblyA Monero nodeanswers with blockchain dataThe Monero networkwhere payments are recordedstays onyour deviceoutsideyour device
Figure 1Same source, same build, same files.

The short version

  • Every release has a fingerprint. It is a SHA-256 over every file a browser can download from this site: the wallet's code and the Monero engine it runs.
  • You can rebuild it. The same commit, built with the same pinned tools, gives the same fingerprint. If yours matches ours, the site is serving exactly the published code.
  • The wallet shows it too. Open Settings in the wallet to see the build you are using, with a link back here.
  • It has limits, listed below. We would rather you know them than assume more.

The build you are using

Reading the live build…

How the check works

Each release is built in Docker from a public commit, with a base image pinned by its digest, locked dependencies and a build ID equal to the commit. Building the same commit twice gives identical files; we tested this with two clean builds on our server before turning it on.

After the build, a script lists every file under /_next/static and public/ with its SHA-256 and publishes the list as /build.json. The fingerprint is the SHA-256 of that list. The checker downloads every listed file from the live site and compares, then compares the whole list with yours.

The source is on GitHub, and the scripts are short enough to read: apps/web/scripts/build-manifest.mjs and scripts/verify-build.mjs.

What it does not prove

  • It checks what you were served, when you checked. A web server could in theory send different files to one visitor at one moment. A browser extension closes this gap, because its code is installed once and checked once; that is on our roadmap.
  • Each page also carries a little inline data. Next.js adds small inline scripts with the page's data, which differ per request, so a build hash cannot cover them. On wallet pages a strict security policy lets only scripts carrying a one-time code from our server run.
  • Rebuild on linux/amd64. We test reproducibility in Docker on that platform. Building elsewhere may produce different bytes for the same code.
  • Matching code is not the same as safe code. A match proves the site runs the published source, not that the source has no bugs. An independent security review is a separate step on our roadmap.