⚠️ Pre-production software. Not yet validated in a live retail environment. Test thoroughly before processing real transactions.

🐾 🐶 🦴 🐱 🦜 🐠 🐹
🐾 Born in a pet store — built for any retail

The POS that
loves your store

Full-stack, offline-capable, and running on a Raspberry Pi. Tested on real shelves — works for pet stores, general retail, food, and beyond.

⬇ Download Free ★ View on GitHub
BMS POS Manager Dashboard
💸
Free
Forever. No subscriptions.
📡
Offline
Keeps selling when Wi-Fi drops
🍓
Pi-Ready
Runs on Raspberry Pi 4/5
🖨️
Plug & Print
USB thermal printer, zero setup
💻
3 Platforms
Linux · Windows · Raspberry Pi

Up and running
in four steps

No Docker, no cloud setup required. Download, connect your hardware, and start selling.

01

Download

Grab the AppImage (Linux/Raspberry Pi) or NSIS installer (Windows) from the releases page. No runtime dependencies — everything is bundled.

02

Run Setup Wizard

On first launch, a setup wizard walks you through your Supabase database credentials. The app creates all tables and runs migrations automatically.

03

Connect Hardware

Plug in your USB thermal printer and barcode scanner. Both are auto-detected — no drivers to install on Linux or Raspberry Pi.

04

Start Selling

Add your products, set up staff PINs, open a cash session, and you're live. Auto-updates keep you on the latest version in the background.

✨ Features

Everything you need
to run a modern store

Built for kiosks and touch screens. Works on Raspberry Pi, Linux, and Windows.

Point of Sale

Point of Sale

Multi-item transactions with tax, discounts, and change calculation. Plug in a USB barcode scanner — it's auto-detected and works immediately.

Advanced Inventory

Advanced Inventory

Full product CRUD, batch tracking with lot numbers and expiry dates, manual stock adjustments, physical counting, and low-stock alerts.

Returns & Refunds

Returns & Refunds

Process returns by transaction ID. Optional manager-approval threshold. Automatic stock restoration on approved returns.

Sales Reports

Sales Reports

Daily, weekly, and monthly summaries. Top products by revenue and quantity. Payment method breakdown. Z-Report / cash reconciliation.

Employee Management

Employee Management

Manager, Cashier, and Inventory roles with distinct permissions. Add, edit, deactivate, and reset PINs. Full audit trail per user.

Audit Trail

Full Audit Trail

Every login, sale, return, and config change recorded with user, timestamp, and IP. BCrypt PINs, JWT denylist, login lockout, and rate limiting.

Cash Session

Cash Reconciliation

Open and close cash sessions with variance tracking. Z-Report per terminal with sales summary, payment breakdown, and cash reconciliation.

System Settings

System Settings

Date format, auto-logout timer, payment methods, receipt template, and tax configuration — all adjustable without touching code.

Multi-Terminal

Multi-Terminal

Multiple terminals on a shared Supabase database. Each terminal scoped by X-Terminal-Id. Setup wizard for first-run configuration.

Offline Mode

Offline Mode

Keep selling when the internet drops. Sales, returns, and stock adjustments queue locally and auto-sync the moment connectivity is restored.

Receipt Printing

Thermal Receipt Printing

ESC/POS receipts printed directly to USB thermal printers — no CUPS, no drivers on Linux. 80mm paper only. Supports Epson TM, Star TSP, Bixolon, and Citizen.

Hardware Monitor

Hardware Monitor

Live status panel showing printer connection, barcode scanner detection, and database latency. Spot hardware issues before they hit a transaction.

See it in action

Every screen, designed for touch-first kiosk use at 1366 × 768.

BMS POS Screenshot
🛠 Tech Stack

Built on rock-solid
open-source foundations

Every layer chosen for reliability on low-power ARM hardware.

React 19 + TypeScript
UI layer · Vite 7 · Tailwind CSS 4
Electron 37
Desktop shell · hardware IPC bridge
.NET 8 / ASP.NET Core
REST API · EF Core 9 · Serilog
PostgreSQL (Supabase)
Npgsql 9 · auto-migrations on startup
Vitest + Playwright
1,509 unit tests · 20+ E2E flows
Raspberry Pi 4/5
Linux ARM64 AppImage · runs headless
UPCItemDB (Trial)
Barcode → product data fallback lookup

What we built this on

The hardware stack we use day-to-day. If your setup matches this, expect everything to work out of the box.

Raspberry Pi
Raspberry Pi 5 Primary
8 GB RAM · Linux ARM64 · runs Electron + .NET API on a single board
ESC/POS Thermal Printer
Any USB thermal (Epson TM, Star TSP, Xprinter) — auto-detected, no driver install on Linux
USB Barcode Scanner
Any USB HID scanner (Zebra, Honeywell, Datalogic, generic) — detected as keyboard input
1366 × 768 Touch Display
UI scales to fill any resolution — works on HDMI monitors and touch screens
Cash Drawer
RJ-11 cash drawer via the printer's kick port — opens automatically on every cash sale
Supabase
Supabase (PostgreSQL)
Free tier handles a single store comfortably — upgrade for multi-terminal or high volume
⚠️ Limitations

What to know before
you go live

Known constraints to keep in mind when deploying in a real retail environment.

Product Data — UPCItemDB Trial

When a barcode is scanned and not found locally, the app falls back to the UPCItemDB free trial API to auto-fill product details. The trial tier has rate limits and doesn't cover all barcodes — unknown products must be entered manually. A paid UPCItemDB plan is recommended for production.

Electronic Payments — Manual Tracking Only

Cash is fully integrated — the drawer opens, change is calculated, and reconciliation is tracked. Card and ETF/Digital are selectable but have no terminal integration. They're recorded for reporting only — the actual transaction must be processed on a separate device and manually confirmed.

💬 FAQ

Common questions

If it's not here, open an issue on GitHub — we don't bite 🐾

Does it really work when the internet goes down?
Yes. Sales, returns, and stock adjustments are queued locally on the device and automatically synced to the database once connectivity is restored. The product catalog is cached so you can still scan items and complete transactions.
What printers are compatible?
Any USB ESC/POS thermal printer with 80mm paper — Epson TM series, Star TSP series, Bixolon SRP/SDP, Citizen, Xprinter, and most generics. On Linux and Raspberry Pi there is no driver or CUPS install required — plug in and it works. Windows uses the installed printer driver.
Is it really free? Can I use it commercially?
Yes, completely free under the ISC License. You can use it commercially, modify it, and distribute it. There are no subscription fees, seat limits, or feature paywalls. See the LICENSE file on GitHub.
Do I need a Raspberry Pi?
No. The Raspberry Pi is our reference hardware but the app runs on Windows x64, Linux x64, and Linux ARM64. Any modern PC or laptop will work fine.
Can I use this for something other than a pet store?
Absolutely. The pet store theme is where it was born and tested, but it's a general-purpose POS. It works for any retail shop — groceries, clothing, hardware, food service, or any business that sells physical products at a counter.
How do software updates work?
The app checks for updates automatically on startup and every 4 hours. When a new release is published to GitHub, it downloads in the background and prompts you to restart. You can also trigger a check manually from the Admin Panel.
Where is my data stored?
All data is stored in your own PostgreSQL database — typically Supabase (which you set up and own). The author has no access to your data. Offline queues are stored locally on the device in your user data directory.

Free. Open Source.
Ready to deploy.

No subscriptions. No seat limits. No vendor lock-in.
We promise it won't bite 🐾

Latest Release
View all releases on GitHub →
🔐BCrypt PIN hashing
🎫JWT token denylist
🚫Login lockout on failures
🛡️Rate limiting on all endpoints
🏠Localhost-only CORS
📋Full audit trail on every action