WP Manifestindependent plugin directory
manifest / ecommerce / rootlabs-pos-pro

Rootlabs Pos Pro WP Registry grade D+. High-severity findings · 3 findingsWP RegistryHigh-severity findings · 3 findingsOpen the reportD+

Open source point of sale plugin for WooCommerce, built with PHP and React. Includes cash sessions, payments, refunds, tickets, audit logs and product search.

★ 2stars
12release downloads
v0.1.4latest · 3mo ago

Install

Download rootlabs-pos-for-woocommerce-v0.1.4.zip From the v0.1.4 release on GitHub, Jun 29, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/mralonsocorona/rootlabs-pos-pro/releases/download/v0.1.4/rootlabs-pos-for-woocommerce-v0.1.4.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

MX POS Pro v1.0.0-rc1

Release Candidate — Not for production use.

MX POS Pro is a premium Point of Sale plugin for WordPress + WooCommerce. It provides a complete POS system with a React interface and native WooCommerce synchronization.


Important: This is a Release Candidate (RC1)

This version is intended for testing in staging or test environments only. Do not install on a live production site. Report any issues found during testing.


Requirements

Requirement Minimum Version
WordPress 6.0
WooCommerce 8.0
PHP 8.0

WooCommerce must be installed and activated before activating MX POS Pro.


Installation

  1. Download mx-pos-pro-v1.0.0-rc1.zip
  2. Go to wp-admin > Plugins > Add New > Upload Plugin
  3. Upload the ZIP file and click Install Now
  4. Click Activate Plugin

The plugin will automatically:

  • Create the required database tables
  • Register POS capabilities for administrator, shop_manager, and mx_pos_cashier roles
  • Register the /pos URL route

Access

URL Purpose Required Capability
/pos POS frontend mx_pos_access
wp-admin > MX POS Pro Dashboard mx_pos_access
wp-admin > MX POS Pro > Settings Plugin settings mx_pos_manage_settings

The POS frontend requires login. Unauthenticated users are redirected to the WordPress login page.


Roles & Capabilities

Capability Administrator Shop Manager POS Cashier
mx_pos_access Yes Yes Yes
mx_pos_sell Yes Yes Yes
mx_pos_refund Yes Yes No
mx_pos_open_session Yes Yes Yes
mx_pos_close_session Yes Yes Yes
mx_pos_apply_discount Yes Yes No
mx_pos_cash_cut Yes Yes Yes
mx_pos_manage_cash Yes Yes Yes
mx_pos_manage_settings Yes No No

The mx_pos_cashier role is created automatically on plugin activation.


Quick Start

  1. Activate the plugin
  2. Go to MX POS Pro > Settings and configure Telegram (optional) and ticket preferences
  3. Create a user with the POS Cashier role (or use an administrator account)
  4. Log in at /pos
  5. Open a cash session with your opening amount
  6. Start selling

WP-CLI Diagnostics

Run these commands from the terminal for diagnostics and support:

wp mx-pos healthcheck      # General plugin status check
wp mx-pos db-check         # Validate database schema
wp mx-pos caps-check       # Validate role capabilities
wp mx-pos sessions list    # List cash register sessions
wp mx-pos cuts list        # List X/Z cuts
wp mx-pos diagnose         # Extended diagnostic report
wp mx-pos index stats      # Product index statistics
wp mx-pos index rebuild    # Rebuild product search index

All commands are read-only by default. Use --format=json for machine-readable output.


Database Schema v1.5

The plugin database schema has been extended to prepare for multi-branch, multi-register, and multi-employee operation in future releases.

New entities (structure only — not yet used in POS UI)

Table Purpose Status
mx_pos_branches Physical store locations Schema ready, seed main created
mx_pos_registers Physical cash register terminals Schema ready, seed main created
mx_pos_employees Internal POS employees (separate from WP users) Schema ready
mx_pos_payment_methods Configurable POS payment methods Schema ready, seeds cash/card/mixed created
mx_pos_order_payments Split payment support (multiple methods per sale) Schema ready

Note: Sprint 1 prepares the database foundation. POS login, admin UI for entities, multi-method payments, and full multi-branch operation are not yet active. Existing POS flows (sales, sessions, payments) are preserved and continue to work as before.

All existing data is preserved. Historical records are backfilled to the default branch/register where safely assignable. Uninstall remains non-destructive.

Database Diagnostics

Plugin fails to activate

  • Ensure WooCommerce is installed and activated
  • Ensure PHP version is 8.0 or higher
  • Check the WordPress debug log for errors

POS page not loading

  • Verify rewrite rules are flushed: go to Settings > Permalinks and click Save Changes
  • Run wp mx-pos healthcheck to check plugin status

Database issues

  • Run wp mx-pos db-check to validate schema
  • Re-activate the plugin to trigger migrations

Uninstall

When deleting the plugin from WordPress, the physical plugin files are removed only if the web server has sufficient filesystem ownership and permissions. If WordPress cannot delete the plugin directory, check the local file owner/group and write permissions.

The RC1 uninstall routine is intentionally non-destructive. It removes the POS role/capabilities created by the plugin, but preserves database tables, settings, WooCommerce orders, sales history, cash sessions, cash movements, parked carts, refunds, and audit logs to prevent accidental data loss during testing.

Destructive cleanup of plugin tables is not performed by normal uninstall. If it is needed in a future release, it should be run through an explicit WP-CLI cleanup command with confirmation.


Support

For diagnostics, run:

wp mx-pos diagnose --verbose

Provide the output when reporting issues. Never share your Telegram bot token.


License

GPL-2.0+

Releases

5 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v0.1.4 latest
Jun 29, 2026 3mo ago
rootlabs-pos-for-woocommerce-v0.1.4.zip
4
Jun 28, 2026 3mo ago
rootlabs-pos-for-woocommerce-v0.1.3.zip
2
Jun 14, 2026 4mo ago
rootlabs-pos-for-woocommerce-v0.1.2.zip
3
Jun 9, 2026 4mo ago
rootlabs-pos-for-woocommerce-v0.1.1.zip
1
Jun 7, 2026 4mo ago
rootlabs-pos-for-woocommerce-v0.1.0.zip
2
D+ grade

Security

Rootlabs Pos Pro 0.1.4 · audited by WP Registry

High-severity findings.

1 high 2 medium
Audited release
0.1.4
Findings
3
Worst severity
high
Content hash
d1bbc9ef18ee6590da272e85…

Findings

  • high Cashiers can rewrite completed POS sale payment methods and cash movements without a REST nonce

    missing_capability

    POST /wp-json/mx-pos/v1/sales/{id}/payment-method is registered with a permission_callback that returns true for current_user_can('mx_pos_sell'|'mx_pos_manage_cash'|'manage_woocommerce') or any active POS employee cookie. It never calls RestSecurity::verify_mutation, so there is no X-WP-Nonce check. POS employees are not WordPress users; rest_cookie_check_errors therefore skips core cookie-nonce enforcement. POSCapabilityBridge grants mx_pos_sell to every POS employee (including cashiers) in mx-pos/v1 context. The handler then loads any completed, non-refunded mx_pos_sales row by POS id or wc_order_id, overwrites the WooCommerce order payment method/title and related meta, updates mx_pos_order_payments and payment_summary, and creates or zeros the matching mx_pos_cash_movements row. A cashier (or anyone with a stolen mx_pos_auth_token) can convert a cash sale to card (or the reverse) on any register, falsifying the cash-drawer expected total. SameSite=Lax on the POS cookie reduces cross-site CSRF, but same-origin CSRF and direct authenticated calls remain.

    includes/API/PaymentMethodCorrectionController.php:36-59

    Recommendation

    Require RestSecurity::verify_mutation with a manager-level cap (e.g. mx_pos_refund or mx_pos_manage_settings), restrict corrections to the caller’s open session (or an admin override), and keep cash-movement writes inside CashMovementService so they cannot be silently neutralized.

  • medium X-cut endpoint discloses any open cash session with no ownership check

    information_disclosure

    GET /wp-json/mx-pos/v1/sessions/{id}/cuts/x is gated only by current_user_can('mx_pos_cash_cut'). POSCapabilityBridge grants that cap to all POS employees. CashCutService::generate_x loads the session by id and, if status is open, returns the full cash summary (opening amount, expected cash, sales, refunds, movements) plus printable ticket HTML. Unlike close_session, there is no session-owner comparison. A cashier on register 1 can enumerate session ids and read register 2’s live drawer. GET needs no plugin nonce; cookie-only POS employees also skip core REST nonce.

    includes/Cash/CashCutService.php:38-64

    Recommendation

    Require the caller to own the open session (same check as CashSessionService::close_session) unless the user has manage_options / mx_pos_view_audit, and keep listing endpoints scoped the same way.

  • medium POS customer update can modify non-customer WordPress users including shop managers

    missing_capability

    PUT /wp-json/mx-pos/v1/customers/{id} is allowed to anyone with mx_pos_sell (cashiers via POSCapabilityBridge) after RestSecurity nonce. CustomerLookupService::update refuses only manage_options and mx_pos_manage_settings. Shop Manager has mx_pos_access but not those caps, so they are treated as editable. Editors and authors also pass because their roles lack manage_options. The handler then calls wp_update_user (display_name, first_name, last_name) and overwrites billing_first_name / billing_last_name / billing_phone. A POS cashier can rename a Shop Manager or Editor from the POS UI.

    includes/Customers/CustomerLookupService.php:246-270

    Recommendation

    Allow POS profile edits only for users whose sole/primary role is customer (or a dedicated POS-customer flag). Deny shop_manager, mx_pos_access, and any role with edit_posts / manage_woocommerce.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.