Nano cryptocurrency (XNO) Faucet. Easy, clean and fast!
Visit: https://nanodrop.io
This project was created to help bring Nano to the masses.
Faucets are efficient ways to introduce cryptocurrency to new users. Any amount is enough to show the benefits of Nano cryptocurrency: simple, instant, no fees.
NanoDrop is not only another Nano faucet, but the first open source Nano's Faucet.
It's built with React, Next.JS, OpenNext, Cloudflare Workers, Tailwind and Material UI
- Clean and responsive UI with light and dark mode
- Automatic, rounded amount based on 0.01% of balance
- Custom checkbox.
- QR code reader.
- Transactions history with geolocation.
- PoW cache, allowing for always instant transactions.
- Public API for faucet data.
- XNO Price
- Error tracking with Sentry
- Anti-spam and anti-bot barriers such as:
- Server-side faucet status checks before bot verification
- Invisible anti-bot verification
- Limit per Nano account
- Limit per IP address
- Admin-managed IP and account blacklists
The faucet API is now internalized in this project and served from the same Worker under /api/faucet/*.
The price API is also Worker-owned and served from /api/price.
The internal API keeps the original architecture:
- Hono for HTTP routing
- Durable Objects for wallet state and anti-spam coordination
- D1 for drop history and country/proxy metadata
- A SQL-backed
CoinMarketCapDODurable Object for XNO price cache state
The custom Worker entrypoint lives in worker.ts and forwards non-API traffic to the OpenNext-generated handler.
The admin dashboard is served at /admin and authenticates through ADMIN_TOKEN.
Privileged dashboard requests proxy to /api/faucet/* with the same bearer token contract used by the Worker API.
The faucet Durable Object stores admin-managed whitelist and blacklist entries in its local SQL storage. Blacklist checks run before drop-limit whitelist exemptions, so a blocked IP address or Nano account cannot receive faucet status or drops until it is removed from the blacklist.
Default local development now starts both the UI and the faucet API without building OpenNext first:
npm install
npm run devThis runs:
next devfor the UIwrangler dev --config wrangler.dev.jsoncfor the faucet API and Durable Object
During npm run dev, the browser still calls the same-origin faucet route at /api/faucet.
The dev-only route handler at src/app/api/faucet/[[...path]]/route.ts proxies that path to the local faucet worker on http://127.0.0.1:8787.
The same local Worker also serves /api/price; a Next dev rewrite proxies /api/price to http://127.0.0.1:8787/api/price.
If you want to run only the UI, use:
npm run dev:uiIf you want to run only the faucet worker, use:
npm run dev:apiBefore the first local API run, apply the local D1 migrations:
npm run db:local:migrateSetup checklist:
- Copy
example.env.localto.env.local - Fill the Next.js values and faucet Worker vars/secrets in
.env.local - Do not keep an active
.dev.varsfile locally; Wrangler gives.dev.varsprecedence and will not load.env*values into the local Worker env when it exists
For runtime-accurate unified Worker validation, use preview mode:
Start the Worker preview:
npm run previewIn production-like runtimes, the frontend also talks to the same-origin faucet route at /api/faucet.
The frontend price ticker talks to the same-origin Worker route at /api/price.
NanoDrop is a free, voluntary and open source initiative. We don't use ads, we don't sell personal data. Our focus is to bring Nano to the masses.
If you like it consider making a small donation, helping to distribute Nano to other users.
