Free and Open Source Monero Point of Sale (POS) Android App
XMRpos is a FOSS Android point-of-sale (POS) system for accepting Monero (XMR) payments. It provides a self-hosted, trustless, and secure payment solution for vendors and merchants.
- Open Source: Licensed under GNU GPL v3.0.
- Trustless Architecture: Operate your own backend; no reliance on third parties.
- Device-Agnostic: Works on any Android device — no proprietary hardware.
- Receipt Printing: Supports Bluetooth ESC/POS printers.
- Scalable: Unlimited POS clients and vendors, centrally managed.
- Secure: No wallet keys stored or exposed on client devices.
- Integrated Backend: Backend API interfaces with
monerodand MoneroPay. - Fast Payments: Supports 0-confirmation Monero transactions in 5–10 seconds.
- Client: Any Android device, with or without a Bluetooth mobile printer.
- Backend: Ubuntu LTS VPS or LAN environment (low-spec compatible).
- Clean Ubuntu LTS VPS
- Sudo privileges
wget https://raw.githubusercontent.com/MoneroKon/XMRpos/refs/heads/main/install.sh -O install.sh
chmod +x install.sh
sudo ./install.shThis installs MoneroPay and XMRpos-backend using Docker. It automatically configures environment variables, secrets, health checks, and wallet setup.
sudo ./install.sh cleanRemoves all containers, cloned repositories, and ~/wallets.
Always back up your wallets before cleaning.
For detailed backend API usage, see
XMRpos-backend/README.md.
-
Enter the amount in your
primaryFiatCurrencyand tap the green button. -
The app generates a Monero payment QR or NFC tag with address, amount, and note prefilled. The customer scans it and sends funds using any Monero wallet.
-
Once the payment reaches the configured confirmation threshold (0, 1, or 10), the app automatically advances to the receipt screen where you can:
- Print a receipt
- Start a new order
- Upload a logo (appears on receipts)
- Edit company name and contact details
- Customize footer text
- Configure the
primaryFiatCurrency - Add multiple
referenceFiatCurrencies
- Enable PIN protection for app startup or settings access
- Note: PINs cannot currently be reset — choose carefully
- Select connection type (Bluetooth tested and supported)
- Adjust printer parameters if needed
- Use Test Print to verify output
git clone https://github.com/MoneroKon/XMRpos- Launch Android Studio
- Select Open an Existing Project
- Navigate to
XMRpos/XMRposand open it
Android Studio auto-installs dependencies. If not, manually sync Gradle:
File > Sync Project with Gradle Files
View > Tool Windows > Build Variants
Select debug or release.
Build > Build APK(s)
./gradlew assembleDebug # Debug build
./gradlew assembleRelease # Release buildOutput: app/build/outputs/apk/
- Docker Engine ≥ 24
- Docker Compose plugin
- 8 GB RAM, ~10 GB free disk space
- User added to
dockergroup
git clone https://github.com/MoneroKon/XMRpos
cd XMRpos/XMRpos
docker compose build --no-cache
docker compose up --abort-on-container-exitgit clone https://github.com/MoneroKon/XMRpos
cd XMRpos/XMRpos
docker run --rm \
-v "$PWD":/workspace \
-v xmrpos-gradle:/home/gradle-cache \
-v xmrpos-android-sdk:/opt/android-sdk \
ghcr.io/ajs-xmr/xmrpos-android-builder:df7af4dOutput APK: app/build/outputs/apk/debug/app-debug.apk
Support the project with Monero (XMR):
88zkpYQRJPmeuycSN7Jx3UHq9vH1u2dD8eE1rECvCAouPj75Cdnu1eUacQ5p7ZMvdr4e6BRe2FShv4HoatSs9HcwEeZCupZ
Licensed under the GNU General Public License v3.0. See LICENSE for details.