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.
TillKit Pro adds:
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(), which means wp_enqueue_script(), wp_register_script(), and wp_add_inline_script() are architecturally impossible — those functions queue assets for WordPress’s normal page rendering pipeline, which never runs for this request.
The scripts and styles loaded in tillkit_output_pwa_shell() (in includes/class-tillkit-pwa-shell.php) and tillkit_maybe_serve_pwa() (in tillkit.php) are therefore loaded via direct <script src> and <link rel="stylesheet"> tags inside the HTML output. 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.
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.
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
app/js/quagga.js, suite/js/quagga.jsThe 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
admin/js/chart.umd.jsThe 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
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, navigationsuite/js/pos.js — POS product grid, category chips, searchsuite/js/cart.js — Cart drawer, multi-cart managementsuite/js/scanner.js — Barcode scanner tab (Quagga2 wrapper)suite/js/history.js — Order history, refundssuite/js/exchange.js — Size exchange workflowsuite/js/store.js — Store/product management tabsuite/js/sw.js — Service Worker (offline cache, sync queue)admin/js/tillkit-admin.js — WordPress admin panelTo 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.
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.1 — suite/js/quagga.js, app/js/quagga.js
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.1 — admin/js/chart.umd.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
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.