plugin-icon

TillKit

Von snwebapps·
A free mobile POS terminal for WooCommerce. Sell from your phone with a PIN-protected app — no hardware required.
Version
1.0.3
Zuletzt aktualisiert
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.

Kostenlosmit kostenpflichtigen Tarifen
Mit deiner Installation stimmst du den Geschäftsbedingungen von WordPress.com sowie den Bedingungen für Drittanbieter-Plugins zu.
Getestet bis
WordPress 7.0
Dieses Plugin steht für deine -Website zum Download zur Verfügung.