Release notes
Every update to POSRex — new features, fixes and improvements. Pick your language below.
Fixes Windows activation ("No license found")
🔑 Activation fix
- Fixes the "No license found / license key not found" error when activating with a license key on Windows after updating to 1.0.67.
- You can now enter your key and activate normally — no need to repurchase or contact support.
- Your license data was never lost and the server was fine — this was a client-side bug, now fixed.
Friendlier Cloud Backup messages (clear, no scary errors)
☁️ Cloud Backup error messages, rewritten for everyone
- No more raw technical errors (e.g. "getaddrinfo ENOTFOUND").
- Offline now shows a calm "No internet — your data is safe on this computer and will back up automatically when you reconnect."
- Only one clear status message at a time (no more stacked red banners); raw text is tucked behind a "Technical details" toggle.
🔐 The data-protection pause, in plain words
- When this computer has fewer records than the cloud, it explains why in plain language (Bills, Expenses, Reminders, History) with a clear next step.
- New "I deleted this on purpose — accept & resume" button (confirmed with your Restore PIN) clears the pause WITHOUT re-adding deleted rows.
- Automatic sync still never deletes cloud data — only your explicit confirmation does. Offline actions show a friendly note instead of an error.
- Wrong Restore PIN now says "PIN doesn't match" instead of a confusing message.
Cloud Backup CPU Hotfix
Performance and power usage
- Cloud Backup no longer scans and syncs every 30 seconds in the background.
- Automatic VPS cloud backup now runs once per app day after POSRex opens, then stays idle.
- Added clear Cloud Backup startup logs so support can see when daily backup starts, skips, finishes, or fails.
Restore PIN
- Fixed Restore PIN setup failing with "Invalid cloud server response".
- Cloud server errors now show useful HTTP details instead of a generic invalid response.
Kept unchanged
- Manual Sync Now and Backup Now still work.
- eGift/WhatsApp realtime sync remains unchanged.
Cloud Backup, Update Banner, and Checkout Improvements
- Added Cloud Backup with sync status, latest snapshot details, and cloud restore support.
- Added in-app update banner for downloading and installing new POSRex versions.
- Checkout item deletion now uses Delete only; Backspace remains normal inside text inputs.
- Selected checkout rows are darker blue and keyboard row highlighting works across all rows.
- The scan product code field stays focused after checkout-table actions.
- Complete Payment now opens with Cash selected by default.
Payment Amount and Receipt Readability Improvements
POS payment screen
- Enlarged and bolded the F8 Total Due amount so cashiers can read it quickly.
- Widened the payment modal layout to avoid overlap with subtotal, tax, paid, and balance rows.
- Removed BZD from payment amounts and kept the familiar $ symbol.
Transaction complete screen
- Enlarged and bolded the Change amount so cash change is easy to see.
- Removed BZD from completion amounts and kept $ only.
- Adjusted layout so large change values do not collapse or disappear.
Printed receipt
- Made the printed TOTAL amount larger and fatter on thermal receipts.
- Kept the TOTAL value aligned with the right-side amount column so it stays inside 80mm paper.
- Cash and Change still print normally below the total.
Settings and stability
- Improved the Bitmap Compatibility Mode toggle so ON/OFF is clearer.
- Fixed the Linux HWID fallback unit test so release verification is stable.
Credit Receipts: Account History + Payment Slips + Signature Print Fix
📜 Account History on Every Credit-Sale Receipt
- Every credit-account sale now prints a chronological list of charges and payments since the customer's balance was last $0 — so the customer can see at a glance what they owe and when each entry was added
- Format:
8 May Sale $20.50/15 May Payment -$10.00with running totals - Footer shows
Total debt: $X.XX(auto-calculated, always matches the actual balance) - Long histories truncate to last 30 entries with
+ N earlier (since DD MMM)so the receipt stays a readable length - Renders on thermal, HTML preview, and A4 PDF
💵 Payment Receipts with Cash + Change Tracking
- Click 'Record Payment' in Credit Manager → modal now asks for Cash Received (not just payment amount). System auto-computes Payment Applied (= min(cash, balance)) and Change Due (= cash - balance)
- After saving, a Payment Receipt preview appears with print buttons: thermal slip + A4 PDF
- Receipt shows full account history, total debt, cash received, payment applied, and change owed back to the customer
- If the payment fully clears the debt: green
✓ ACCOUNT PAID IN FULL at HH:MMstamp - If partial: orange 'Still owes $X.XX' line
- Big-amount sanity check: if cash > 10× balance, asks for confirmation before saving
🖨️ Thermal Signature Print Fix (Older / Chinese Printers)
- Customer signatures previously printed in PDF but were silently dropped on some thermal printers (Deli DL-801P, Xprinter clones, etc.) that ignore the newer GS v 0 raster command
- Added a second encoder using the universally-supported ESC * 24-dot bit-image command — works on every ESC/POS printer ever made
- New Settings → Printer toggle: Bitmap Compatibility Mode. Turn it ON if signatures or logos are missing from your thermal receipts; the print pipeline will switch to the universal command instantly without a restart
- Bonus fixes for all signature printing: anti-aliased edge pixels are now preserved (signatures no longer come out as broken thin outlines), oversized signatures auto-downscale instead of disappearing, and every failure path now logs a reason in DevTools console plus a
--- Signature on File ---text fallback
🧪 Engineering
- 17 new unit tests (Vitest): debt-cycle algorithm edge cases (empty / always-in-debt / pay-off-and-restart / partial payment / 30+ truncation / float precision), GS v 0 encoder, ESC * encoder
- Total test count: 38 (up from 21 last release)
License Self-Healing + HWID Stability
🔑 No More Lost License Keys
- Brand-new HWID auto-recovery: if your license is missing after an update or reinstall, POSRex now silently asks the server 'what license belongs to this machine?' and re-activates without you typing a single character
- The license cache is no longer deleted when an integrity check fails — even a transient network hiccup or partial write can no longer wipe your activation
- 'Recovering your license…' status flash on the activation screen so you know it's working in the background
🖥️ Hardware ID v2 — Stops False 'Hardware Changed' Errors
- HWID is now derived only from the OS-stable machine UUID (plus platform + arch). CPU model whitespace drift and BIOS-reported memory rounding (16 GB ↔ 15 GB) used to flip your HWID across reboots — that's gone
- Native and JS HWID generators are now byte-identical, so the addon-loaded vs fallback path can never disagree again
- Existing users get a one-time auto-rebind on first launch — zero clicks, server transfers the binding using your local cache as proof
🛟 Server-Side Recovery Pipeline
- New /api/recover endpoint: hardware-bound license lookup with HMAC auth, 6/hr rate limit per IP, and PII-stripped response (license_key only — no email, no name)
- New hwid_history table tracks every binding ever made → recovery still works after rebinds and unbinds
- Existing licenses backfilled automatically on first server boot — recovery available from day one
🎨 macOS Installer Polish
- DMG installer background completely redesigned — branded purple gradient, bold 'POSRex' wordmark, 'Drag to Applications' instruction with arrow, soft halos under each icon position. No more empty black window.
🧪 Engineering
- New Vitest test suite (29 tests): HWID stability, license persistence regression, auto-recovery client/server contract
- CI now runs the full test suite on every PR
Inventory Net-Worth Dashboard + Smarter Barcode Focus
💰 Real-Time Inventory Net-Worth (Product Manager)
- Brand new 4-card stat row at the top of Product Manager: total cost value, total sell value, projected gross profit (with margin %), and low-stock count
- Numbers update instantly when you add, edit, or delete a product, complete a sale at the register, or void a transaction — no need to navigate away and come back
- Soft-deleted products are excluded automatically; empty inventory shows clean $0.00 with no NaN
- Profit color flips emerald → rose if inventory cost ever exceeds projected revenue
📦 Add-Product Modal — Continuous Scan Mode (Product Manager)
- After saving a product, the modal stays open for the next item — and now the cursor automatically returns to the Barcode field so the gun's next scan lands in the right input every single time
- Edit-mode untouched: clicking the pencil icon on an existing product no longer yanks focus to barcode
🔫 Quick Add Modal — Editable Barcode + Auto-Focus (POS Checkout)
- The 'Scanned' barcode badge is now an editable input — fix typos or rescan without leaving the modal
- When the modal pops up, the cursor lands inside the barcode field with the scanned value pre-selected, so a fresh gun scan replaces it in one keystroke
🔌 Behind the Scenes
- New
inventory-changedpush channel from main process to renderer — every product / transaction mutation broadcasts so any open inventory view stays in sync - Aggregate query runs as a single SQL SELECT with SUM/COUNT — sub-millisecond even at 10k+ SKUs
Brand-New License Activation Screen
🎨 Glass-Morph Quick-Login Button
- Brand new tall fluffy 3D glass pill for the 'Continue as [your name]' button — multi-stop violet gradient, radial top highlight, inset rim glow, soft outer halo
- Bot mascot perches on the top-right edge with one arm hooked over the rim — friendly, on-brand, 3D
- Long names now truncate on one line with an ellipsis (no more two-line layout breaks)
- Bigger, bolder text with a subtle violet text-shadow so the label reads cleanly against the gradient
📸 New Right-Side Brand Panel
- Replaced the flat purple gradient with a real product photo background (POSRex hardware in action), tinted with the brand purple so the headline + tagline stay readable
- Three feature highlights on the bottom (Unlock premium features / Get priority updates / Hardware-bound security) now use proper 3D icons instead of thin line drawings
- Icons are bigger, transparent (no white square behind them), and consistently aligned with their labels
- Animated brand orbs and subtle noise overlay preserved for depth
🔑 Top-Row Layout Cleanup
- New 3D license-key icon replaces the old flat SVG
- License icon and language switcher (English / 中文 / Español) now share a single flex row — icon hard-left, language pill hard-right, perfectly baseline-aligned
🛠️ Behind the Scenes
- Release pipeline now auto-restores native modules for the build host after a Windows cross-build — fixes the 'slice is not valid mach-o file' crash on macOS dev machines after release:win
- All new images bundled with content-hashed filenames so updates invalidate cleanly
Quick Add Unknown Product at Checkout
🛒 Scan an Unknown Barcode? Add It Without Leaving the Register
- When a cashier scans or types a barcode that isn't in your inventory, POSRex now opens a beautiful Quick Add modal instead of just showing a toast
- The scanned barcode is locked at the top — no need to retype or re-scan it
- Fill in Product Name and Sell Price, hit Enter, and the new product is created AND dropped straight into the cart in one step
- All optional fields are visible by default: Category (with dropdown of your existing categories), Cost Price, Quantity, Min. Stock, GST mode (Standard / Price Includes Tax / Tax Exempt)
- 'Custom...' option in the Category dropdown lets you create a brand-new category on the spot
⌨️ 100% Keyboard-Driven
- Every input field saves on Enter — Name, Sell Price, Category, Cost, Quantity, Min Stock all trigger Add & Sell
- Skip = ESC (button shows the ESC chip)
- Add & Sell = ENTER (button shows the ENTER chip)
- No mouse needed at any point in the flow
🔇 Goodbye Toast Spam
- The old 'Unknown barcode: X. Add it in Products.' toast that stacked up on every Enter press is gone
- Replaced by exactly ONE modal — re-pressing Enter on the same unknown code never opens a second modal
🌐 Tri-Language
- Modal text and all field labels translated in English / 中文 / Español
- Existing language switcher in Settings applies instantly
🎯 Why This Matters
- Before: cashier had to leave POS → open Products → click Add → re-type the barcode → fill form → save → go back to POS → re-scan. 4–6 disruptive clicks per unknown SKU.
- Now: 2 fields (Name, Price), Enter, sale continues. Customer barely notices the pause.
Real-Time eGift Sync + Security Hardening
🎁 eGift Card Detail Page (POSRex)
- Top-up / activate / disable / enable now refresh the transaction history instantly — no need to navigate back and re-open the card
- Status badge updates in place after every operation
📲 eGift Web Portal — Real-Time Sync
- Customer portal now updates within ~1 second after every POSRex operation (no manual refresh)
- New 'Live' indicator on card detail pages with auto-pause when the tab is hidden
- Server-Sent Events (SSE) push from wa-server to portal browser → sub-second balance updates
- Background sync sidecar bridges legacy POSRex builds — every card change reaches the portal automatically
- Card detail page auto-poll fallback (10s) in case SSE drops
- 'Stale data' warning when the synced snapshot is more than 60 seconds old
🔍 eGift Web Portal — New Features
- Code 128 barcode display (replaces QR code) — same format POSRex prints on paper receipts, scannable by your existing barcode reader at checkout
- Card nickname editing (e.g. 'Mom's birthday gift')
- One-click card number copy
- CSV export of all card transactions
- Read-only stale indicator + verified badge on card detail
- Tri-language UI (EN/ZH/ES) for all new components
🔒 Security Hardening (wa-server)
- Per-tenant HMAC-SHA256 signature on every sync request (X-Tenant-Sig)
- Replay attack protection: nonce + timestamp ±5 minute window
- AES-256-GCM encryption of per-tenant secrets at rest
- PIN brute force lock: 5 failures per IP → 1 hour lockout
- Anomaly detection: balance jumps over 10× and >$1,000 are rejected and logged
- Per-tenant rate limit (60 req/min token bucket)
- Card-level cryptographic integrity check — direct database tampering is detected and returns 503 instead of leaking the bogus row
- Tenant-strict card lookup (no global fallback for portal queries)
- Audit log of every public endpoint hit
- Card numbers are masked in all logs and responses (3608****2471)
- nginx /public/egift/* protected with rate limit + IP-bound throttling
🛠️ POSRex Stability
- WhatsApp Bot configuration page now opens instantly with cached settings — no more 8-second 'Failed to load config' error when the wa-server is slow
- WhatsApp connection: auto-migrates legacy IP-based wa_server_url settings (e.g. http://1.2.3.4:3202) to https://wa.posrex.cloud — fixes ETIMEDOUT errors
- Background eGift sync runs every 15 seconds (was manual) and on POSRex startup
- Sync errors are now visible in DevTools console (no more silent failures)
- waGet HTTP timeout reduced from 8s → 4s for snappier UI mounts
- Cookie hardening on the eGift portal (HttpOnly + Secure + SameSite=Strict + 24h TTL)
🛡️ Portal Disable Feature
- Disabling a portal in POSRex (eGift Portal page) now blocks ALL access to the subdomain (page + API)
- Customers see a tri-language 'Portal Unavailable' page with merchant explanation
- Re-activating in POSRex restores the subdomain instantly
📊 License Server Admin Dashboard — 6 New Modules
- 📈 Analytics: total licenses, eGift card stats, top stores by balance / card count
- 🖥️ System Metrics: live VPS CPU / RAM / disk / load average
- 📦 Docker Containers: list all running containers with state, image, and ports
- 🚀 Releases Manager: 26+ POSRex versions on the server, with per-version EN/ZH/ES release notes (expandable rows), one-click delete (refuses to delete the current latest)
- 🎁 eGift Tenants Browser: see every store using eGift, total balance, card count, transaction count
- 👁 Customer Read-Only Viewer: drill down into a tenant's cards (masked numbers, balances, status, buyer/recipient names) — admin-only, no edit or delete
🔄 Auto-Update Pipeline
- upload-release.sh now syncs release-notes.json to the VPS automatically — license server admin always sees the latest notes
Version 1.0.47
F5 Clear Cart Modal Redesign
- F5 now only opens the confirm dialog — never modifies the cart
- Enter inside the dialog confirms and clears all cart items
- ESC cancels the dialog without removing anything
- Removed the 'Remove Selected Item' button — use arrow keys + Backspace instead
- Removed F9 from the clear dialog (F9 is reserved for On Account credit modal)
Helpful Localized Hint
- Added a hint inside the clear dialog explaining how to delete a single item
- 'Use ↑ ↓ arrow keys to select the product and press Backspace to remove it'
- Translated in English, Chinese, and Spanish
License Server
- Increased license activation timestamp window from 5 to 30 minutes
- More tolerant to clients with slightly off system clocks
- Fixes 'Request expired' errors during license activation
Version 1.0.45
F5 Clear Cart Bug Fixes
- Fixed F5 accidentally clearing all cart items when the modal opened
- F5 now only opens the action dialog — cart stays intact
- Fixed F9 opening the wrong modal when clear dialog was open
- Enter key inside clear dialog now correctly removes only the selected item
Clear Cart Action Flow
- F5 = Open action dialog
- F5 or Enter (in dialog) = Remove selected item
- F9 (in dialog) = Clear all cart items
- ESC = Cancel
- F9 (no dialog) = Open On Account credit customer modal
Version 1.0.44
Credit Receipt Enhancements
- Credit receipts now include customer phone, SSN, and guarantor phone
- Full Payment Agreement Acknowledgment with 3% late penalty clause on all formats
- Customer signature auto-printed on thermal, HTML, and A4 PDF receipts
- Added horizontal separator lines in credit receipts for better readability
- Fixed F9 On Account checkout missing credit customer data on receipt
- Both credit checkout flows now require signature on file before sale
Credit Manager
- Added total outstanding balance display in red at top of customer list
- Shows number of active debtors and total amount owed
F5 Keyboard Shortcut Redesign
- F5 now opens an action dialog instead of clearing cart immediately
- F5 or Enter = Remove selected item
- F9 = Clear all items from cart
- ESC = Cancel
Receipt Completion Modal
- Simplified compact layout — removed item list to save screen space
- Shows total, payment method, change, and item count only
Bug Fixes
- Fixed missing credit customer signature on thermal printer output
- Fixed credit agreement text not appearing on simple mode receipts
Version 1.0.43
Credit Account Receipts
- Credit receipts now show *** CREDIT ACCOUNT *** header with customer name
- Added Payment Agreement Acknowledgment with 3% late penalty clause (legally binding under Belize law)
- Customer signature auto-printed on credit receipts (thermal, PDF, and A4 preview)
- Signature saved once during customer registration — no need to sign at every checkout
- All 3 receipt formats updated: ESC/POS thermal, HTML small receipt, A4 PDF
Bug Fixes
- Fixed F5 (Clear Cart) keyboard shortcut — no longer clears cart immediately, now properly shows confirmation dialog first
- F5 press again inside dialog confirms the clear action
Version 1.0.42
Security & Infrastructure
- All server connections now use secure HTTPS via Cloudflare-protected subdomains
- Server IP address is no longer exposed — all traffic routed through Cloudflare proxy
- Added DDoS protection and SSL encryption for all service endpoints
- Firewall hardened — direct port access blocked, services only reachable through secure subdomains
WhatsApp Server
- Improved WhatsApp server connection stability and security
- Bot responses now use secure URLs for ticket tracking
- Enhanced multi-tenant isolation for WhatsApp messaging
System Improvements
- Auto-update system now uses secure HTTPS update channel
- License verification upgraded to encrypted Cloudflare-proxied endpoint
- Improved connection reliability with automatic SSL certificate management
Version 1.0.38
Receipt Improvements
- T/N tax indicator aligned in its own column
- Fixed Epson printer not printing in full receipt mode
- Logo support added to full receipt
- Previews now use actual print code
Open Price Items
- Products with $0 price prompt for price at sale
- Each entry gets its own cart line
Category Management
- Manage Categories modal: add, rename, delete
- Dropdown + custom input in Add Product
- Scrollable category tabs
Export/Import
- CSV export includes price_includes_tax
- Full backup includes product_categories
Version 1.0.11
- Bug fixes and improvements
Version 1.0.10
- Fixed duplicate update modal — update notification now appears only once instead of twice
- Added release notes display to the in-app update modal so you can always see what changed
- Update modal now respects Skip This Version and Enter POS choices across the full session
Version 1.0.9
- Fixed ESC/POS receipt printer blank output — receipts now print correctly
- Added character codepage selector in Printer Settings (PC437, PC850, CP1252, PC858, GBK)
- Added Deli E801P Chinese printer support with GBK encoding
- Fixed purchase order modal size (wider and taller layout)
- Fixed quantity input in purchase orders (defaults to 0, backspace works correctly)
- Fixed credit overdue charges SQL error (HAVING clause on non-aggregate query)
- Updated sidebar to show real app icon and live version number
Version 1.0.8
- Bug fixes and improvements
Version 1.0.7
- Bug fixes and improvements
Version 1.0.6
- Bug fixes and improvements
Bugs Improvements
Fixed some bugs
Version 1.0.3
- Bug fixes and improvements
Fix Mobile web server that scan product bar code not working
Version 1.0.1
- Bug fixes and improvements
Initial Release
- Full POS system with inventory management
- License-based activation with offline support
- Multi-language support (English, 中文, Español)
- Receipt printing and reporting