devShakib

A Free, Offline Point-of-Sale for a Small Shop

Most POS software is a monthly subscription that stops working when the internet does. ShopDesk runs on the counter, offline, with the shop's data in one…

Most point-of-sale software is a subscription. That means two things a small shop

feels sharply: a bill every month whether trade is good or not, and a till that

stops working when the internet does.

The second one is the real problem. A shop with no internet still has customers

in it. A cloud POS that cannot reach its server on a Saturday afternoon is a shop

that cannot sell anything.

ShopDesk runs on the counter. No account, no activation, no

monthly fee, and it does not need a connection at all. The shop's entire history

lives in one SQLite file on that computer.

At the till

Scan a barcode, or type a few letters and press Enter to take the top match.

Type 3*cola to add three at once. Cash, card, mobile money or bank transfer,

with change worked out as you type what the customer handed over — plus

quick-cash buttons so the common case is one key.

A sale can be held and picked up later, for when someone goes back for the

milk they forgot. One-off lines cover things that were never in the catalogue: a

delivery charge, a photocopy. Discounts work whole-sale or per line, and are

spread across the lines so tax and refunds stay correct afterwards.

It is keyboard-first, because a till that needs a mouse is slower than the queue:

F1 search, F2 customer, F3 discount, F9 charge, Del remove

line. A cash sale for a walk-in is a scan and one key.

Stock is a ledger, not a number

This is the design decision I would defend hardest.

Most small-shop software stores a quantity and edits it. You had 40, you sold

one, now you have 39. When the shelf and the screen disagree — and they always

eventually disagree — there is nothing to look at. Just a number that is wrong.

In ShopDesk every unit that moved has a row saying why it moved: a delivery

received, a count corrected, damage written off, a return put back, a sale, a

voided sale. When the count is wrong you read the history and find the moment it

went wrong, instead of guessing and overwriting.

Products carry a barcode, SKU, category, cost and selling price, and a low-stock

level. Things can be sold by the piece, the kilo or the litre — 1.5 kg is a

real quantity rather than a rounding problem.

Why this matters more than it sounds

Every shop eventually has a stock discrepancy. The shelf says eleven, the system

says fourteen. With a stored quantity, your options are to guess or to overwrite,

and overwriting destroys the only evidence of what went wrong.

With a ledger you can read the last month for that product and find it: three

were received on the 12th but the delivery was entered twice, or a return was

processed without the stock going back. You fix the cause rather than the symptom,

and the correction is itself a row — so next month's audit can see that a

correction was made, by whom, and why.

This is the same reason accountants have never used a single "balance" column.

It is not an advanced feature; it is the correct data model for anything that

moves, and most small-shop software gets it wrong because a quantity field is

easier to build.

Customers and credit

Walk-in is the default. Attaching a customer is optional and never required,

because most sales do not need one.

For the ones that do: a sale can go on the book, payments collected against

the balance later, and each customer can have a credit limit. Every customer has

a statement — what they bought, what they paid, what is still owed. For any shop

that lets regulars settle at the end of the month, that ledger is the thing a

spreadsheet keeps getting wrong.

The credit book is the feature spreadsheets lose

If your shop lets regulars settle at the end of the month, you almost certainly

have a paper book or a spreadsheet for it. Both fail the same way: the record of

what was bought lives in one place and the record of what was paid lives in

another, and reconciling them is somebody's Sunday.

Putting credit in the same ledger as the sale means a customer statement is a

query rather than an exercise. What they bought, what they have paid, what is

outstanding, in order. When a customer disputes a figure — and they will — you

can show them the line items rather than a total they have no reason to accept.

The credit limit is the other half. A limit that the till enforces at the moment

of sale is a policy; a limit written in a notebook is a hope.

Paperwork and the day

Thermal receipts on 80mm or 58mm rolls, through any printer Windows already

knows about. A4 PDF invoices with your logo for customers who need a document.

Every list exports to Excel.

A dashboard of net sales, gross profit, best sellers and how people paid. A

day close that says what the till should hold and compares it against what

you counted. Low stock, unpaid balances and lines that have not sold in a month

are surfaced without being asked for — the things you would otherwise notice late.

Admin and cashier roles: a cashier can sell but cannot change prices or see

profit. Backups are one click and restore works from any of them.

Day close is the feature that pays for itself

At the end of trading, the system knows exactly what the till should contain:

opening float, plus cash sales, minus cash refunds and payouts. You count the

drawer and enter what is actually there.

The difference is the number that matters. A shop that closes off every day

catches a discrepancy the day it happens, while somebody still remembers the

transaction. A shop that reconciles monthly finds a variance across four weeks of

trading and has no way to attribute it.

It takes two minutes and it is the single highest-value habit a small shop can

adopt.

Where the data lives

One SQLite file in %LOCALAPPDATA%\ShopDesk, on the shop's own computer. It

never leaves.

There is no cloud account to lose access to, no subscription that can lapse and

lock the till on a Saturday morning, and nothing to migrate if you stop using it.

If you want it on another machine, copy the file.

The honest trade-off

Local-first is not strictly better than cloud. It is a different set of

trade-offs, and you should pick deliberately:

What you gain. It works with the internet down. It has no monthly cost. It

cannot be discontinued, price-raised, or locked behind a plan change. Your data

is a file you own rather than rows in somebody's database. It is fast, because

nothing is a network call.

What you give up. Multi-site sync out of the box. Remote access from home.

And — the important one — backups are your responsibility. A cloud POS backs

itself up. This one gives you a one-click backup and it is on you to actually

take it, and to keep a copy somewhere that is not the same computer.

If your shop has one till and one computer, the trade is straightforward. If you

have four branches that need to share stock, you want something else, and I would

rather say so than sell you the wrong thing.

Take a backup weekly and put it on a USB stick. That is the whole

responsibility, and it is the one thing that turns "my data is a file I own" from

a liability into an advantage.

Before you install

Windows SmartScreen will warn about an unsigned application — choose **More

info, then Run anyway**. That warning means Microsoft has not vetted this

particular build, not that anything is wrong with it. Code-signing certificates

cost several hundred pounds a year, which a free app cannot justify.

The full source is on GitHub if you would rather read it or build it yourself.

Getting it

Download ShopDesk — free, MIT licensed, Windows 10 or

later. There is an installer that adds a Start-menu entry and uninstalls cleanly,

and a portable single file that runs from a USB stick.

On macOS and Linux it runs from source — Python 3.10 or newer, and the

instructions are in the repository.

Hardware it works with

Nothing exotic is required, which is deliberate:

nearly all of them. No driver, no configuration; it types the barcode and

presses Enter, which is exactly what the search box expects.

58mm rolls.

as the printer does.

application, and an old machine behind a counter is fine.

If you already have a till running something else, the hardware you have almost

certainly works.