plugin-icon

TillKit

A free mobile POS terminal for WooCommerce. Sell from your phone with a PIN-protected app — no hardware required.
Versione
1.0.3
Ultimo aggiornamento
Jun 25, 2026

TillKit turns your WooCommerce store into a mobile point of sale. Open the app from any phone or tablet browser, log in with a PIN, and start selling.

Free Features

  • Mobile POS — Full-screen product grid with category filter chips, search by name / SKU, and cart drawer
  • Till management — Open and close a till with float tracking and variance report on close
  • Order history — Browse today’s orders with full item breakdown
  • Cash payments — Take cash sales and track change
  • PWA / Add to Home Screen — Install on Android (Chrome) or iOS (Safari) for a native app feel
  • 2 staff members with PIN login — Cashier and Manager roles
  • 1 active cart — Single cart per session
  • Offline mode — Products cached; pending orders sync on reconnect

Upgrade to Pro

TillKit Pro adds:

  • Unlimited staff and all roles (Supervisor, Scanner Only)
  • Up to 10 simultaneous carts
  • Card and custom payment methods
  • Full & partial refunds from Order History
  • Receipt emails sent to customers
  • Barcode Scanner tab (Quagga2) with scan log
  • Size Exchange with automatic stock adjustment on both sides
  • Reports — Shifts & Till Summaries, Product Sales, Exchange Log
  • Email Designer for branded receipts
  • Priority support

PWA Shell Architecture

TillKit serves its point-of-sale interface as a Progressive Web App (PWA). When a user visits the configured suite URL, the plugin intercepts the request via the template_redirect action hook, outputs a complete standalone HTML document, and calls exit(). WordPress never proceeds to wp_head() or wp_footer(), so the assets registered via wp_enqueue_script()/wp_enqueue_style() for this request have nothing to print into automatically — they’re printed directly instead, as described below.

The scripts and styles for the PWA shell are registered and enqueued through the standard wp_register_script()/wp_enqueue_script() and wp_register_style()/wp_enqueue_style() APIs (see tillkit_pwa_register_script() and tillkit_pwa_register_style() in tillkit-main.php). Because wp_head()/wp_footer() never run for this request, the enqueued assets are printed directly via wp_print_scripts()/wp_print_styles() with an explicit handle array, rather than relying on those hooks. This only prints the exact handles this plugin registered — not a foreign theme’s full head output — and runs safely after init, since registration happens on template_redirect. Dynamic values (the inline config block and theme-colour CSS override) are attached via wp_add_inline_script()/wp_add_inline_style(). All values are sanitized: URLs through esc_url(), version strings through esc_attr(), and inline JS values through esc_js().

This is the same pattern used by any WordPress plugin that serves a full-page application (e.g. login pages, OAuth callbacks, app shells) via template_redirect. The relevant PHPCS rules are suppressed with // phpcs:disable WordPress.WP.EnqueuedResources at the function level with this explanation inline.

WordPress Core File Usage

TillKit loads two sets of WordPress core admin helper files using require_once. These are standard WordPress patterns and are used as follows:

  • wp-admin/includes/upgrade.php — loaded in TillKit_Database methods that call dbDelta() to create or update database tables. This is the documented WordPress method for plugin schema management. The file is loaded immediately before dbDelta() is called.

  • wp-admin/includes/file.php, image.php, media.php — loaded in the upload_media REST API endpoint when processing logo uploads. These files expose wp_handle_upload(), wp_generate_attachment_metadata(), and media_handle_upload(), which are called immediately after loading. The files are only loaded if the functions are not already available.

In all cases, require_once is used (not require), the files are WordPress core files (not third-party), and a function from each file is called immediately after loading — as recommended in the WordPress plugin guidelines.

Third Party Libraries

TillKit includes two pre-built third-party libraries as minified bundles. Both are unmodified upstream releases. Source code, license, and build instructions are provided below.

QuaggaJS v0.12.1

  • Files: app/js/quagga.js, suite/js/quagga.js
  • Purpose: Camera-based barcode scanning (live video stream barcode decoding)
  • License: MIT
  • Original source: https://github.com/serratus/quaggaJS (archived)
  • Actively maintained fork: https://github.com/ericblade/quagga2
  • NPM package: https://www.npmjs.com/package/@ericblade/quagga2
  • License text: https://github.com/serratus/quaggaJS/blob/master/LICENSE

The included quagga.js is the unmodified dist/quagga.js output from the upstream serratus/quaggaJS build at tag v0.12.1. To reproduce it from source:

git clone https://github.com/serratus/quaggaJS.git cd quaggaJS git checkout v0.12.1 npm install npm run build # Output at: dist/quagga.js cp dist/quagga.js /path/to/plugin/app/js/quagga.js cp dist/quagga.js /path/to/plugin/suite/js/quagga.js

Chart.js v4.5.1

  • File: admin/js/chart.umd.js
  • Purpose: Admin analytics charts
  • License: MIT
  • Source: https://github.com/chartjs/Chart.js
  • License file: https://github.com/chartjs/Chart.js/blob/master/LICENSE.md

The minified file is the unmodified output of the Chart.js build. To reproduce it:

npm install chart.js@4.5.1 # Copy node_modules/chart.js/dist/chart.umd.js to admin/js/chart.umd.js

Or download directly: https://github.com/chartjs/Chart.js/releases/tag/v4.5.1

Source Code and Build Tools

Plugin Source Files (no build step required)

All TillKit JavaScript files are plain, unminified, human-readable source files included directly in the plugin package. No compiler, bundler, or transpiler is used for plugin code.

  • suite/js/app.js — App bootstrap, authentication, navigation
  • suite/js/pos.js — POS product grid, category chips, search
  • suite/js/cart.js — Cart drawer, multi-cart management
  • suite/js/scanner.js — Barcode scanner tab (Quagga2 wrapper)
  • suite/js/history.js — Order history, refunds
  • suite/js/exchange.js — Size exchange workflow
  • suite/js/store.js — Store/product management tab
  • suite/js/sw.js — Service Worker (offline cache, sync queue)
  • admin/js/tillkit-admin.js — WordPress admin panel

To modify these files: edit them directly. No compilation step is needed. If you change sw.js or any file that may be cached, increment the CACHE_VERSION constant at the top of sw.js to bust the service worker cache.

Third-Party Libraries

Two third-party libraries are included as pre-built minified bundles. They are compiled by their own upstream build systems — not by this plugin. Instructions for reproducing each bundle from source are provided below.

QuaggaJS v0.12.1suite/js/quagga.js, app/js/quagga.js

  • Purpose: Barcode scanning via camera feed
  • License: MIT
  • Upstream source: https://github.com/serratus/quaggaJS
  • NPM package: quagga (note: the actively maintained fork is @ericblade/quagga2 at https://github.com/ericblade/quagga2)

To regenerate quagga.js from source:

git clone https://github.com/serratus/quaggaJS.git cd quaggaJS npm install npm run build # Output: dist/quagga.js

Copy dist/quagga.js to both suite/js/quagga.js and app/js/quagga.js.

Chart.js v4.5.1admin/js/chart.umd.js

  • Purpose: Analytics charts on the admin Reports page
  • License: MIT
  • Upstream source: https://github.com/chartjs/Chart.js

To regenerate chart.umd.js from source:

npm install chart.js@4.5.1 # Output: node_modules/chart.js/dist/chart.umd.js

Copy node_modules/chart.js/dist/chart.umd.js to admin/js/chart.umd.js.

Alternatively, download the file directly from the Chart.js CDN or GitHub release: https://github.com/chartjs/Chart.js/releases/tag/v4.5.1

Summary

No custom build pipeline exists for this plugin. Future developers only need a text editor to modify plugin source files. The two minified files above are unmodified upstream releases and can be updated by following the steps above.

Gratuitosui piani a pagamento
Testato fino alla versione
WordPress 7.0
Questo plugin ora può essere scaricato per il tuo sito .