Open source · Self-hosted · Offline-first

A point-of-sale system you run on your own hardware.

Apron is for small operations that want to own their data and keep selling when the network goes down — cafés, retail counters, and badge-based charge accounts like school and workplace cafeterias.

Pre-release · v0.14.0 Running a private cafeteria pilot. Public release on hold.
See it work

A lunch rush, then the books behind it.

Two screen recordings from a real v0.14.0 install. The register rings two sales; the admin then shows those same two sales. Nothing is staged — the totals on the dashboard are the ones rung a minute earlier.

  1. A cashier signs in with a PIN on the touch pad.
  2. Three items rung; subtotal, tax, and total follow every tap.
  3. $10.00 in cash, and the change due before the drawer opens.
  4. A second sale charged to a staff account — the day's meal credit covers $3.00 of it, the account carries the rest.

Silent, unedited, and served from this page — no video host, no embed, nothing loaded until you press play.

What apron does

A complete register and the admin behind it.

Everything a small venue needs to ring a sale, manage who owes what, and keep its own records — with nothing phoning home.

Rings sales

Cash, card-present, and charge-account tenders. Multi-line carts, taxes, discounts, and change due — plus held tickets, refunds, item modifiers, combos, and menus that change with the daypart.

Runs charge accounts and credits

Per-person ledgers with overdraft policy, badge lookup, and statements. A daily allowance or an issued credit is spent automatically at the register, and the period's charges export for payroll deduction.

Prints receipts, kicks drawers

ESC/POS over USB, network, or serial. Most receipt printers and integrated cash drawers work out of the box — or skip the paper and email the receipt instead.

Works offline

Registers keep selling when the server, network, or upstream is down. Events queue locally and sync when connectivity returns.

Backs itself up

Local filesystem today, with S3, WebDAV, and SFTP staged behind the same pluggable interface. Scheduled or on-demand snapshots in a documented format, covering every table in the schema — a test fails the build if a new one escapes.

Has an admin web UI

Products, accounts, credits, employees, roles, reports, registers, audit log, and settings — role-based access throughout, and a setup checklist that walks a new venue from empty install to first sale.

Offline is a correctness property

If a cashier can do it, it works with the network unplugged.

Apron treats offline operation as a rule, not a feature. Every action at the register — ringing items, taking cash, charging an account, printing a receipt — is designed to complete on a machine with no connection.

Each sale is written to a local event log the moment it happens. When the link to the server returns, those events sync upward with documented conflict resolution. No spinner in the hot path of a sale, ever.

Hardware, not lock-in

Bring your own printer, terminal, and reader.

Payment processors, receipt hardware, and backup destinations are pluggable interfaces — not bundled dependencies you can't swap.

Receipt printers & drawers

ESC/POS over USB, network, or serial. Cash drawers kick through the printer. Tested against the byte-level protocol most thermal printers speak.

Card payments, no card data

Card-present runs through Stripe Terminal (or any P2PE provider). The terminal captures and encrypts in hardware; apron only ever sees a token — so it stays outside PCI scope.

Badge readers

Keyboard-wedge and PC/SC contactless readers look up a charge account in a beat — an account can even carry badges from both during a reader migration. Pair either with the account ledgers in the admin.

Two ways to run it

One counter or a dozen — same code paths.

The deployment shape is a config-time choice. The binaries don't change, so what you test on one register is what runs across the venue.

MODE 01

All-in-one

The register host is the server. A desktop app launches the backend alongside it, stored in SQLite. One machine, no network required to make a sale. Best for a single coffee bar or counter.

MODE 02

Server + N registers

A central service runs against SQLite or PostgreSQL; registers connect over the LAN, keep a local event log, and keep operating through network or server outages. Best for a multi-register cafeteria or store.

Same binaries, same code paths — the choice is config-time.

Honest about scope

A checkout system that knows what it isn't.

Apron does the front-of-house register and the admin that supports it — and deliberately stops there. The boundaries are a design choice, written down.

In scope
  • The front-of-house register: sales, tenders, tax, change due
  • Badge-based charge accounts, overdraft policy, and credits
  • Offline sales with sync and documented conflict resolution
  • Admin with role-based access, reports, and an audit log
  • Backups to a destination you choose and control
Out of scope, by design
  • Kitchen display, table management, course timing
  • E-commerce and online ordering
  • Inventory receiving, purchase orders, supplier management
  • Payroll and time clock
  • Running in someone else's cloud by default
The part most systems won't put in writing

No telemetry, ever. No upsells, no nag screens, no paid feature gates. You can run apron in a vault with the network unplugged, and nothing about it will complain.

Where it stands

Pre-release, and saying so plainly.

The latest tag is v0.14.0, and it is the build running the pilot. Everything below has merged to main; the first public release is intentionally held while a real venue puts the software through real lunch services.

Cash sales, tax, change duePhase 1
Shipped
Receipt printer + cash drawer (ESC/POS)Phase 2 · hardware pass pending
Shipped
Charge accounts + badge readers (wedge, PC/SC)Phase 3
Shipped
Card payments (Stripe Terminal)Phase 4 · SDK wiring pending
Shipped
Server mode + offline syncPhase 5
Shipped
Admin web UI (RBAC, reports, audit log)Phase 6
Shipped
Backup + restorePhase 7 · filesystem wired
Shipped
Design-system UI rebuild (admin + register)Phases 9–10
Shipped
Cafeteria-pilot features (held sales, refunds, modifiers, daypart menus)Phase 12
Shipped
Packaged install (.deb), server-hosted admin UI, replication to paired registersv0.8.0–v0.14.0
Shipped
Customer-facing display, email receipts, payroll-deduction exportv0.10.0–v0.13.0
Shipped
Credits: a daily staff allowance and issued credits, spent at the registerv0.14.0
Shipped
Public releasev1.0.0
On hold

The public release is on hold while the project focuses on a private staff-cafeteria pilot — the bar is whether that cafeteria can run a lunch service, not whether a feature list is complete. The phased roadmap, the changelog, and the per-phase definitions of done are the source of truth in the repository.