New features
Touch UI register
A new full-screen, touch-first sale screen designed for tablets and
touch-screen terminals, alongside the classic register.
- Each register can be set to DefaultorTouch UI(Locations → Registers →POS UI),
so a store can run both layouts side by side.
- Large product grid with categories, cart panel, quick payment flow,
walk-in / no-customer handling, and loyalty status shown inline.
- Offline Mode: sales can be rung up and receipted while the connection is
down, then saved and synced when the register comes back online.
- You can now edit a customer's name, mobile number, company, or address
directly from this screen, and open the cash drawer from its own button.
Kitchen Display System (KDS)
A live kitchen/prep screen for food service, enabled under
Config → Sales → Enable Kitchen Display
.- Orders appear as they are suspended, and move through order statuses.
- Status can be updated per order or per individual line item.
- Filter the board by category and by suspended sale type — this now actually
narrows what's shown, including for orders made entirely of kit/combo items.
- The display can update instantlywhen an operator sets up optional
real-time push notifications; without that setup it refreshes itself
automatically on a short timer, same as before. Either way, it now
automatically falls back to the timer if a live connection ever drops, and
catches up on anything missed as soon as it reconnects.
- Notification sounds for new orders, status changes, and "order ready" now
actually play (they previously pointed at files that didn't exist).
Receipt Designer & Receipt Templates
A drag-and-drop designer for building your own receipt layouts, plus a
template manager.
- Build receipts visually from blocks (header, items, totals, footer, and more).
- Save multiple named templates and choose which one is used by
location
and by suspended sale type
, with a priority order — thisselection logic had a couple of bugs (see
Bug fixes
) that are now fixed.- Pick a store-wide Default Receipt Templatein Config.
- Preview a template before using it, with built-in documentation — the
preview's totals and discount percentage now match your actual receipts.
- Managed by its own Receipt Templatespermission, so you control who can
create and edit them.
>
Requires an entitlement.
The whole module is gated on the>
receipt_designer
feature entitlement, which comes from your subscription> plan. If your plan doesn't include it, Receipt Templates no longer appears
> in the menu or account dropdown at all (previously it could still show up
> and only redirected to an upgrade page when clicked). Self-hosted installs
> should expect this feature to be dark unless the setting is changed directly
> in the database.
Saved credit cards (multiple cards per customer)
Customers are no longer limited to a single stored card.
- Save several cards per customer, each with its own preview and expiry.
- Mark one card as the Default.
- Choose a saved card at checkout, or explicitly select
Do not use saved card
.- If a stored card is removed while a sale is open, the register now tells you
to pick a card again instead of failing silently.
In-app notifications: expiring stock and low stock
A new notifications system that surfaces problems on-screen instead of only
by email.
- Item expiration alerts: setDays to notify before expireper item (or per
receiving batch), and see an
Expiring Batches
list on the item.- An optional setting excludes already-sold quantity from expiration alerts —
this figure is now also correct for items with variations (it previously
showed as zero, or mixed together sibling variations' remaining stock).
- Low-stock alertscan be shown in-app per location instead of by email,
and now alert once per low-stock episode for variation/kit items, the same
way they already did for plain items.
- Choose which employees receive urgent in-app notifications.
Dor foot-traffic integration
Connect a Dor people-counting account (Config → Dor) and link each location to
its Dor location.
- Foot traffic, transactions, revenue, conversion rate and ATV then appear as
extra columns on the
Sales Summary
, Sales Summary by Location
andJournal
reports, and as a widget on the Home dashboard. There is noseparate Dor report to open.
Field Configurations
Control the data-entry forms without customization.
- Show, hide, reorder and mark-as-required the fields on the Items,
Customers
, Suppliers
, Expenses
and Appointments
forms.- Separately configure which columns appear on the sale itemsand
receiving items
grids, and in what order.Office 365 email
Send system email through a Microsoft 365 account using modern OAuth
authorization instead of a stored password — connect, refresh and remove the
authorization from Config. See
Bug fixes
for security fixes to this sign-in flow.POS Genie (AI assistant)
POS Genie is now governed by its own
Artificial Intelligence
permission witha
POS Genie
action, so access can be granted per employee.WooCommerce-style item import
Item import/export now understands the same layout WooCommerce exports use,
so a WooCommerce catalog can be brought in directly.
- Import variations under a Parentitem column instead of relying on row
order — a parent created earlier in the same import is found too.
- Up to 10 Attribute name / value(s)column pairs; a value cell can hold
several comma-separated values to generate one variation per combination.
The existing single
Variation
column still works and takes prioritywhen set.
- Common WooCommerce headers (SKU, Name, Regular price, Stock, Images,
Parent, Attribute N name/value(s), and a new
E-Commerce Product ID
column for WooCommerce's own ID) auto-map on import; blank spacer columns
are tolerated.
- A new Product IDfield on variations (separate from the item number)
is editable on the Variations tab and round-trips through import/export —
Shopify-synced items are still capped at 3 attributes, checked before
anything is saved.
- Variation image cells import too, when they don't just repeat the parent
row's images.
- Blank rows anywhere in an import file (items, customers, suppliers, gift
cards, item kits, receivings, sales, work orders, item counts, damages) are
now skipped automatically instead of being imported as empty records, and
for most of those import types, an error message now points to the row's
actual position in your file.
---
Improvements
Sales & register
- Separate settings for auto-focusing the item field after a saleand after a
receiving
— previously one setting controlled both.- Optionally hide the customer selection box on the sale screen, and the supplier
selection box on the receivings screen.
- Choose the display order of payment types, separately for sales and receivings.
- Create a purchase order directly from the register.
- Categories can be marked Require customer for items in category when being sold.
- A separate Close Registeremployee permission, so that option can be
hidden from an employee's sale-screen menu independently of everything else
in it. Existing employees keep access on upgrade; new grants are per
employee or template as usual.
Items & inventory
- Optionally always update the location cost priceand/or **location selling
price** from receivings.
- Cost price preview and location selling price on the receiving line.
- Item barcode label calibration test printand test PDF.
- Item attributes can be reordered by drag-and-dropon the Variations tab
— the order is used consistently for variation labels, the item's
attribute list, and e-commerce option mapping — and that reorder is now
reliably saved as soon as you drag it (previously it could be silently lost
if you didn't also make another edit). The item's
variations themselves
can now also be drag-reordered, separately from their attributes — that
order controls what customers/staff see at the register's variation picker
and the order variants appear in when the item syncs to Shopify. Adding a
new attribute to an item that already has variants now fills in a value for
each existing variant automatically instead of leaving them
under-specified.
Label designer
- Generate Test PDF/Download PDFstraight from the designer.
- Live preview against a real item (search and load an item) as well as sample data.
- New fields available on labels: promo price, expire days, weight, length.
Reports
- Inventory Expire Summary: batches with nothing actually received are no
longer listed, each row links back to its receiving, and — with the new
subtract sold expiring
setting — quantities are reduced by what has alreadysold, oldest batch first.
- Store account statements(customer and supplier) are now ordered the same
way the running balance is calculated, so the displayed balance column reads
correctly down the page.
- Sales Summary,Sales Summary by LocationandJournalgain Dor
foot-traffic columns once Dor has actually synced data for the locations in
the report — configuring the integration alone is not enough, so the columns
stay hidden until the first sync lands (see above).
Other
- Existing customer and employee names with stray leading/trailing spaces are
trimmed automatically.
- The subscription plan and included features are shown in Config.
- The card-charge API now accepts an optional idempotency key, so developers
integrating with it can safely retry a request (e.g. after a timeout)
without risking a duplicate charge.
---
Bug fixes
Inventory & store account accuracy
The largest fix in this release. A set of long-standing data-integrity defects
were tracked down and corrected — these are the causes behind "the inventory log
doesn't match the quantity in stock" and "the store account running balance
doesn't match the customer balance":
- Editing or deleting a suspended or imported e-commerce sale (especially one
containing item kits) could silently inflate or deflate stock.
- Two people saving at the same time could overwrite each other's stock change.
- A failure part-way through a sale or receiving could leave stock and the
inventory log half-updated.
- Deleting a sale or receiving twice restored the stock twice.
- Transfers, variation items, damaged quantity, bulk "select entire inventory"
edits, item-form add/subtract, and Excel imports could all change stock without
a matching (or with an incorrect) inventory log entry.
- Undeleting a transfer receiving or a work order did not restore correctly.
- Store account running balances could drift from the customer/supplier balance
through concurrent writes, manual adjustments, half-applied updates, floating
point rounding, custom-type suspended sales, and customer merges.
- Ledger reports displayed rows in a different order than the running balance
chain was calculated in.
- Re-saving an order that was imported from an online store no longer
subtracts inventory a second time.
Barcode labels
- Barcode images now honor fractional scale values from the label designer
(0.5–5 in 0.1 steps) instead of rounding them away, and a zero or negative
scale or thickness falls back to a sensible default rather than producing a
broken image.
Payments & gift cards
- Newly created or edited gift cardswere being saved without a usable
card number, so completing a sale for one created a card that never
actually received its value. Fixed — gift cards now save correctly.
- Charging a card through a Dejavooterminal no longer fails due to the
card's expiration date being sent in the wrong format.
- A failed or partial card authorization no longer creates an unusable "card
on file" entry for the customer (which could otherwise even become their
default saved card).
- Saving a card on file during an API charge no longer risks attaching it to
the wrong customer when multiple customers share the same name.
Sales & receiving
- **Payment type and register mode are now retained when you unsuspend a
sale or receiving.** Previously, suspending a sale while in Return or
Purchase Points mode (or a receiving in Return mode), or with a payment
type already selected, reset the register back to its default the moment
you unsuspended it — you had to reselect everything. Fixed.
- Flagging one product category to require a customer for saleno longer
incorrectly forces a customer selection for items in a completely unrelated
category that happens to share a distant parent category.
- On the receiving screen, a kit line item no longer shows the stock quantity
and location price left over from the line above it.
- Emailing a sale receipt (through the API, or an automatic subscription
billing receipt) and emailing a receipt with a "view on web" link or SMS
QR code no longer fail outright in certain cases.
- Sale custom fields configured only at the category level display correctly
again instead of showing blank.
- Cloning an employee record works correctly again — the form's required-field
and show/hide behavior no longer breaks.