zyvor Retail
Run it

Zyvor AI Labs · Retail

Every store. Every detail. One place.

Sell at the counter, count the shelf, pay the supplier and close the books from one calm console. Built for a company that runs several stores.

Zyvor Retail overview: net revenue, gross profit, inventory value and replenishment, with quick actions (synthetic data)Zyvor Retail overview in dark mode (synthetic data)

Screenshot of the running application with a fictional catalogue.

10workspaces, from point of sale to settings
5staff roles, scoped to branch
0runtime packages, CDNs or build steps
170automated tests in the repository

Counts come from the source repository: the workspace list, the role model, pyproject.toml and the test suite.

Watch it

A trading day in thirty-four seconds.

Sign in, read the overview, open a product and a batch, ring up a sale with change due, then browse the pickup storefront. Recorded on the running app. Fictional data, no sound.

Zyvor Retail 0.6 console and storefront · 34 s · no autoplay
What happens in the video
  1. The login page, then the overview with a seven-day chart and the exact figure for one day.
  2. A product opens in a drawer with its batches and recent movements.
  3. A batch opens in a drawer with days to expiry, units and stock value.
  4. Two items go into a sale, cash is entered, and the sale-complete screen shows change due.
  5. The public storefront opens a product sheet, picks a quantity and adds it to the bag.

Built for the whole shop

One place for everyone who touches a sale.

At the counter

Scan or search, pick a customer, take cash, card or UPI, print the receipt. Partial returns reverse the original sale exactly, with the right batch.

In the back room

Receive against a purchase order, capture batch and expiry, count the shelf, transfer between stores. Expired stock is blocked and sold first-expiry-first-out.

In the office

Every movement posts to a double-entry ledger. Trial balance, margin, supplier balances, shifts and tasks, and CSV exports your accountant can open.

Made for speed

Built to be used all day.

Small things that add up at the counter and in the back room.

Tells you what to do next

The overview ranks what needs attention: expired stock, low stock, pickup requests, due tasks. One clear action per item. Or just ask: “What should I reorder?”

Keyboard first

Scan a barcode and it is in the bag. Press / to search, + and − to change quantity, ⌘K to find anything, ? for every shortcut.

Change due, instantly

Type the cash received and see the change, or how much is short. Cash, card and UPI are one tap apart.

Tables that sort

Click any column to sort, switch to compact rows, and open a product, customer, batch or receipt for the full story, without leaving the page.

Links that work

Every workspace and tab has its own address. Share it, bookmark it, press Back. Refresh keeps your place.

Calm when things go wrong

Offline or a failed refresh shows a clear banner with the time of the last good data. Pending sales wait safely.

See it

Real screens. Real ledger underneath.

Captured from the running application. The catalogue, prices and stock shown are fictional.

Zyvor Retail: Your daily view, light appearance, synthetic data
Your daily view · light · synthetic data

Modules

What a trading day needs.

Each row is implemented and covered by the repository's tests. The limits are on this page too, in Honest limits.

Point of sale

Barcode keyboard input, product search, customers, manager discounts, promotion codes, cash, card and UPI tender recording, printable receipts, shifts with counted-versus-expected cash.

Catalogue

SKU and barcode uniqueness, packs, categories, prices, tax rates, reorder levels, and CSV import from the browser or the command line.

Inventory

Batches, expiry blocking, FEFO selling, adjustments at actual batch cost, transfers between stores, stock-count sessions that detect conflicts, and reorder and expiry suggestions that show their arithmetic.

Purchasing

Suppliers, multi-line purchase orders, partial receipts, unique invoice numbers, replenishment drafts, and supplier returns against credits.

Pickup storefront

A public catalogue with product sheets, a bag that counts, and a pickup request that ends in a clear timeline. Staff mark orders ready or cancelled; collection links atomically to the sale.

Customers and loyalty

One company-wide directory with a consent flag, and one point earned per ₹100, reversed if the sale is returned.

The books

Stock and money cannot disagree.

A sale, a receipt, a write-off and a return each write to the stock ledger and to the double-entry journal in the same transaction. There is no end-of-day sync to forget.

Transactional

One commit, two ledgers

Quoted prices and discounts are checked again at commit. A retried checkout is idempotent and never consumes a promotion twice.

Reports

Answers, not exports

Revenue, margin, inventory value, supplier balances, trial balance and date-range profit, plus stock and sales CSVs with formula-injection protection.

Boundary

Not statutory GST

It is a sound management ledger, not e-invoicing or a certified accounting system. Statutory workflows are listed under honest limits.

Security

Boring, careful defaults.

Sign-in

Hashed passwords, opaque HttpOnly sessions, CSRF protection, persistent throttle counters, and session revocation. Optional single sign-on with Zyvor Haven or any OpenID Connect provider, with PKCE, and only for people you have already added.

Access

Five roles with branch scope, checked on the server. Staff can be disabled and passwords changed by admins or by the person themselves.

Network edge

An Envoy edge with HTTPS, HTTP redirects, token buckets, body and header limits, timeouts, and private routes for backup and metrics.

No independent security review has been done yet. See honest limits.

Deploy

From a laptop to a cluster.

The same application, three ways to run it.

Local

Python 3.12 with SQLite. One command, no packages, no build step, nothing leaves your machine.

Compose with HTTPS

A standalone stack with Envoy terminating TLS, redirects, rate limits and private operations routes.

Kubernetes

Non-root pods, probes, default-deny network policies, data and backup volumes, an edge-only autoscaler and a scheduled verified backup.

Live demo

Try it for real.

A running copy with a fictional store: four weeks of sales, low stock, a pickup request and an expiring batch are already there, so the reorder suggestions have something to work from. Look around, ring up a sale, open the shortcuts with ?.

Storefront

No login needed

Browse the catalogue, search, add to the bag and send a pickup request, just as a shopper would. Nothing is charged online.

Staff console

Login on request

The console needs a login, so we send one on request. It is a cashier account: ring up sales, scan, look at stock, customers and orders.

Please note

Shared and fictional

Every visitor shares the same data, so you may see other people's test sales. Nothing here is a real store, a real customer or real money.

Sixty seconds

What to click

1. Read the overview

See what needs attention, ranked, with one clear action at the top.

2. Sell something

Open your shift, press /, type a product, press Enter, then enter the cash received to see the change due.

3. Dig into stock

Open Products, click a column to sort it, then click a row to see its batches and movements.

Shared demo on a test machine, not for real customer data.

Run it

Two minutes, one command.

The source is private. Ask for access and you receive a ZIP; unpack it, then:

export RETAIL_ADMIN_EMAIL=owner@zyvor.local
read -s -p 'Initial admin password (12+ characters): ' RETAIL_ADMIN_PASSWORD; printf '\n'
export RETAIL_ADMIN_PASSWORD
python3 -m retail.server --demo

Open http://127.0.0.1:8080 and sign in with the account you chose. The public pickup storefront is at /shop. The --demo flag seeds a fictional catalogue and stock on an empty database. Choose your own password; never commit it.

Honest limits

What Zyvor Retail is not, yet.

Taken from the product's own release scope. A long feature list does not prove a commercial launch.

AreaWhere it stands
MaturityA pilot release with a working core. Start with a controlled pilot whose workflows match the implemented scope.
Tax and statutoryNo statutory GST, e-invoicing, purchase input tax, period close or year-end. Not a certified accounting system.
Payments and hardwareTenders are recorded, not initiated. No payment gateway, split tenders, credit sales, calibrated scales or fiscal printer drivers.
OfflineA loaded tab keeps a pending checkout for manual retry. It is not a full offline POS: no service worker and no reloadable offline catalogue.
Ask your storeRead-only questions answered from your own records, with the records used shown. Built-in rules understand a limited set of questions; a language model you connect (off by default) handles free wording but can still be wrong, so every answer shows its data and flags figures it cannot find there. No customer details are ever sent, and it cannot change anything.
SuggestionsStatistical estimates from your own sales, not a trained model. They need about three weeks of history, do not know about promotions or festivals, and use one lead time for the whole store. Nothing is ordered or marked down unless a person submits it.
StorefrontPickup only: no online payment, accounts, delivery, reserved stock, order tracking or verified phone ownership.
SecurityNo independent review, no MFA of its own, no audit signing, no encrypted application fields.
Single sign-onOptional and off by default. Only people already set up in Retail can sign in: it does not create users or set roles from the provider, and there is no single sign-out. Tested with Keycloak (what Haven runs), not yet with Entra ID, Okta or Google. Passwords still work alongside it.
Zyntra feedAn optional, read-only feed of stock, bills, settlements, supplier lead times, queue waits and open shifts for Zyvor Zyntra, on its own access token and with no customer details. Zyntra’s approved requests (a markdown, an undo, a purchase-order cancel) arrive as tasks for a manager: Retail never changes a price or an order by itself. Queue waits only exist if staff log them, targets start from a general shop’s and should be set from your own history, and it covers one branch at a time. Tested with a Zyntra build from October 2026.
ScaleOne application instance on SQLite. No application high availability and no PostgreSQL migration yet; container and cluster validation is still to be run in your environment.
Not built yetVariants, serial numbers, bins, recalls, RFQs, PO approval chains, three-way matching, payroll, rostering, franchise royalties, forecasting.

Questions

Straight answers.

Can I run my real shop on it today?

Treat it as a pilot. The core trading, stock and ledger flows work and are tested, but statutory tax, payment and hardware integrations are not there. Pilot it alongside your existing process first.

Is there AI in it?

Two features. Suggestions is a statistical forecast, not a trained model: it turns your sales history into reorder and expiry advice that shows its arithmetic. Ask your store answers plain-language questions from your own records. By default it uses built-in rules and makes no network call. If you point it at a language model you run or choose (any OpenAI-compatible endpoint, such as Zyvor Nuvora or a local Ollama), the model only picks from a fixed set of read-only report functions and writes up the result. It is off until you set it up, it never sees customer names or phone numbers, and it cannot change anything.

Can staff sign in with our identity provider?

Yes, if you turn it on. Retail supports OpenID Connect, built for Zyvor Haven (Keycloak) and standards-based, so a “Sign in with…” button appears on the sign-in page. Your provider proves who someone is; Retail still decides their role and store, and only people already added in Retail can sign in. Passwords keep working, and the hosted demo does not use it.

Does it work with Zyvor Zyntra?

Yes, if you turn it on. Retail can give Zyntra a read-only feed of your stock, sales, settlements, supplier lead times, queue waits and open shifts, with a ready-made Zyntra pack that shows which numbers miss target and ranks what to do about it. It can also suggest targets from your own sales history. When Zyntra proposes something and a person approves it there, the request lands in Retail as a task for a manager; nothing changes in Retail until a person acts on it.

Does it need the internet or a cloud account?

No. It runs on your own machine or server with Python and SQLite, and the interface uses system fonts and original vector art. No CDN, analytics or external service is called.

How many stores does it support?

Several under one company: per-branch records, a shared customer directory and catalogue, admin branch switching, and immediate transfers. Consolidation across legal entities or currencies is not built.

Where does the data live?

In a SQLite database on infrastructure you run, with a verified backup job in the Kubernetes deployment. Existing databases upgrade through numbered transactional migrations.

Can I see the source?

The source repository is private. Ask us what we can share with evaluators.

Ready for a pilot?

Tell us about your stores. We will walk you through it with a fictional catalogue first.