Changelog
Follow up on the latest improvements and updates.
RSS
New & improved
## Easier returns from customer history
You can now start a return directly from a customer’s
Completed Sales
list. Open the customer from the register, choose the completed sale, and select Return
—no need to first open the receipt. The option is shown only to employees with permission to process returns.## Choose which store-account balance appears on receipts
A new setting in
Config → Receipts
lets you choose whether receipts show the customer’s current balance
or their balance at the time of the sale
. Enable On receipt show balance at time of sale
when you want the historical sale-time balance printed.## Inventory and item-management improvements
- Add an In stockfilter to the Items list to focus on products with quantity available.
- Item searches now match multi-word product names more precisely, so searches no longer return large numbers of unrelated items.
- Item exports are substantially more efficient for large catalogs.
- Inventory-related reports and item-variation lookups have been hardened to avoid errors and unnecessary database work.
## Register, gift card & mobile fixes
- The mobile navigation menu is working again in the Touch UI register, and the Make Paymentbutton is easier to read on phones.
- Selling a gift card number already on file now asks for confirmation before adding value to that card; gift card numbers also sort in true numeric order.
- The saved-card selector now clearly says Select saved card.
- POS Genie opens correctly even when the Zendesk AI Support Chat Bot is disabled.
## Reliability fixes
- Excel imports now safely handle empty worksheets, and import processing can no longer leave a web request running indefinitely.
- Top Sellers reports now fail safely rather than showing misleading zero inventory quantities if a database query fails.
- Stores that do not use expiration dates avoid unnecessary expiration checks, reducing background and dashboard load.
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.
Reports & Analytics
- New Inventory Audit & Unscanned Inventory reports (#6054)
- Category/supplier filters added to package reports (#6071)
- Extra fields on uncounted-stock report + "sold in period" on inventory audit report (#6091)
- Category filter on Detailed Sales report + new Items Detailed report (#6079)
- Discount totals added to the Detailed Price Rules report (#6001)
Returns
- Verified returns — pick return items directly from a receipt, with optional store-wide enforcement (#6117)
Invoicing
- Bulk invoice creation for uninvoiced transactions with date-range, due-date and action options (#6112)
- Bulk email/print/download invoices and create invoices from open store-account transactions (#6104)
Sales / POS
- Fix supplier-specific pricing selection in advanced sales & receivings popups (#5948)
- Fix IMEI entry affecting price in sales (#6003)
- Add markup payment summary row to sales receipts (#6004)
- Fix customer scan not working; add user choice when both an item and customer match a scan (#6037)
- Customer lookup bug fix (#6024)
- Fix serial change bug (#6020)
Loyalty & Store Config
- Store config option for maximum allowed sales per day for simple loyalty (#6110)
- Store config toggle to disable the customer intake form (#6013)
Bug Fixes (billing/tax)
- Fix FK constraint failure (error 1452) on flat-discount tax insert (#6119)
- Fix flat discount subtracted twice on receipts for items with modifiers (#6081)
API
- Improve DB performance for sales/receivings date-range endpoints (#6080)
- Add start_time/end_timefilters to the Appointments API + docs (#6017)
- Fix missing invoice schemas in the OpenAPI YAML (#6007)
- Extend cloud billing link signed-URL expiry to 2 days (#6078)
We added a detailed price rule report that lets you see the actual details when a price rule is used. (The item rule applied to and how much discounted because of rule)
We also added a filter to the detailed sales report that lets you filter sales by a price rule.
Genie AI assistant rollout (In private beta)
- Added the new GenieAI feature in the app. Your AI companion for store decisions. Genie is built to help your team move faster with natural-language answers from your PHPPOS data. Instead of digging through screens and reports, ask your question and get clear guidance. If you would like to join beta please email support@phppointofsale.com. NOTE: once out of private beta, this will be a paid feature.
Custom label designer (In private beta)
- The Custom Label Designer in PHP Point of Sale is a built-in tool that lets you create and print product labels, barcode stickers, and price tags exactly how you want them—without needing external software. It’s especially useful for retail environments like yours (cell phone repair, jewelry, hardware, etc.) where labeling needs vary a lot. If you would like to join beta please email support@phppointofsale.com. NOTE: once out of private beta, this will be a paid feature.
Customer pricing and item access controls (rolling out gradually)
- Added a customer item allowlistso stores can limit which items specific customers can buy.
- Added an "override prices only"option for customer allowlists.
- Added support for using pricing tiers for price overrideson customer profiles.
- Added support for excluding tiers from credit card markup/markdownlogic.
Faster sales and register workflows
- Added a "Start New Sale"action directly from the customers table.
- Added a Sales for the Dayquick view from the register overflow menu.
- Added optional employee PIN supportin employee forms andoptional switch-user PINsupport for faster user switching.
- Added a store setting to make the plus/minus stock controlstoggleable in item grids and receivings.
Payments with Stripe terminal
- Added Stripe Terminal integration with on-device tipping prompts.
Other workflow enhancements
- Added support for importing updates to existing item kits.
- Added custom label shortcuts to the item QR/barcodeworkflow.
- Added support for deleted and undeleting invoices.
- Added store configuration support to include markup/markdown when calculating tax.
Drivers license scan for customers form.
You can now scan a license to update or add information from license to customer profile.
Turn this on in store config ---> application settings, then check the box "Enable Customer Driver's License Scanning"
Improved exchanges/trade in module around taxes:
Now you can customize sales tax treatment for trade in and exchange modules.
Check the boxes as you want them to apply in store config ----> taxes

Invoices now have download pdf option
You will see the PDF button in blue to download a PDF as an option
*

**
Invoice emails - CC store email address too
Within the locations section - turn this on and input the store email address, moving forward that email will be CC'ed on invoices emailed to customers

Customer, supplier, employee have option for "created by" field
These modules now show what user created each of your customer, supplier, and employees. Make sure to go to the gear icon and turn it out, this is NOT default. The column "created by" shows if you check box to add that in.

Sale types sale, return, exchange, trade in and filters for report

Serial numbers in own tab
Inside item info----> checkbox item has a serial number ---->click save, and they you will see the new tab that appeared

E-Commerce error logging
Woo Commerce and Shopify will now show a reason why an item did NOT sync.
🚀 New Feature: Optional Driver’s License Scanning for Age Verification
We’ve upgraded our Age Verification feature to make compliance even easier and more accurate.
You can now optionally require a driver’s license scan instead of manually entering a customer’s date of birth.
To enable this feature:
- Go to Store Config
- Check the box: “Require driver’s license scan for age verification.”
- Save your settings.
This update helps reduce manual entry errors and speeds up the checkout process for age-restricted items.

You must edit the at the item level that the item requires age verification:

From there when you add the item that requires age verification, you will see the scanning is required:

We have just launched our new Exchange option, designed to make exchanges faster, cleaner, and more intuitive.
Instead of running a separate return and then a new sale, you can now handle the entire exchange in a single transaction:
Select Exchange from the dropdown menu in sales screen
Add items the customer is returning (left side)
Add the items they’re buying (right side)
Apply the exchange with one click ✅
No more back-and-forth between transactions—your records stay clean, staff save time, and customers enjoy a seamless experience.



If there is a serial number - we have added a new Application Setting that allows merchants to always use the exact cost from the purchase order rather than the system-wide average global cost price if there is a Serial Number tied to item.
🔹 Why this matters:
If you’re doing accounting on a cost basis, this feature ensures your reporting and margins reflect the precise purchase order cost, rather than blended averages.
🔹 How to enable it:
Navigate to:
Dashboard → Store Config → Application Settings
Check the box: “Always Use Received Prices For Serial Number Cost and Selling Prices”
This gives you the flexibility to choose between average cost or exact purchase order cost with serial number, depending on how you manage your business.

We enhanced the Customer Invoices so that additional customer information is now displayed on the invoice.
Simply view or print an invoice as usual, and the new fields will automatically appear.
This update makes invoices more complete, professional, and helpful for your customers.

Load More
→