InvFlux for WooCommerce

InvFlux for WooCommerce

Details
View on WordPress

InvFlux makes WooCommerce stock a ledger, not a number that anything can overwrite. Every change to your stock record is recorded — exact from to, and why — whichever screen, order, import or plugin makes it, so you can answer “why is this number what it is?” for any product, any day. On top of it: a stock workbench, a dispatch queue, and purchase orders with receiving. All free.

Why stock drifts

WooCommerce stores stock as one mutable number. Its checkout now holds stock, so the storefront rarely oversells — but that same number is written from paths checkout never sees: an admin edit to the stock field, an order created or edited over the REST API or in wp-admin, a bulk update, a POS or ERP sync, another plugin. None of those reconcile it or leave a record, so when it drifts there — two edits landing at the same moment, an edit that’s simply wrong — nothing catches it, until it surfaces the costly way, at dispatch, when an order can’t be filled because the unit isn’t really there.

InvFlux makes the ledger the source of truth, and WooCommerce’s stock number becomes a copy kept in sync with it. Stock edits made in InvFlux — the workbench or the product’s Inventory tab — are booked as ledger entries. If anything else writes WooCommerce’s stock number directly — another plugin, WooCommerce’s bulk edit or CSV import, an external sync — the write is discarded and the ledger’s figure stands; you can choose, per plugin, to be notified instead, or to let a trusted plugin’s changes into the ledger. A change made straight to the database is flagged by InvFlux’s diagnostics, which restore the ledger’s figure.

What you get, free

Stock you can trust

  • Every change on the record. Once InvFlux manages a product, every change — a sale, a stock edit in the workbench or on the product’s Inventory tab, an order created or edited via REST or wp-admin, a bulk edit in the workbench — is a recorded ledger entry, and WooCommerce’s number is kept in sync with it. You stop discovering a wrong number too late, at dispatch.
  • A real audit trail. Every change is a ledger entry (from to, with before/after balances), plus per-SKU movement history.
  • Physical stock you can actually verify. WooCommerce’s number is what’s available to sell — not what should be on the shelf, so a stock take can’t cleanly check against it. InvFlux tracks the states — available, reserved by live carts, committed to confirmed orders — and carries their sum as an on-hand total: what should physically be in your hands. Export it to CSV or a spreadsheet and it’s your count sheet: count, and where the count differs, correct the record with a reason.

The workbench — your catalog and stock in one grid

  • Filter and search across ~30 columns, with available, reserved, committed, on-hand, to ship and deficit side by side.
  • Select cells like a spreadsheet and bulk-edit product fields, pin columns, and adjust on-hand stock when a count diverges.
  • Save worksheets, and export to CSV or XLSX.

Dispatch — ship what’s owed

  • A fulfillment queue: filter, tag, stage lines, and mark shipped — with an optional tracking number. (Shipping only part of an order from this queue is a paid add-on.)
  • Undo a shipment confirmed by mistake: the stock is held for that order again, and the order returns to the queue.
  • Ready for WooCommerce’s fulfillments (an optional WooCommerce feature, off by default): when it’s on, a fulfillment recorded on WooCommerce’s order screen releases the stock it covers, and orders you ship from InvFlux appear as fulfillments in WooCommerce, which sends its own shipping notification when there’s a tracking number.

Purchase orders and receiving — a real procurement loop

  • Suppliers with the detail that makes a PO correct: tax number and regime (standard, reverse-charge, exempt…), payment terms, incoterms, lead time.
  • Raise POs by typing them, or import them from a paste or CSV/XLSX.
  • Receive across partial deliveries, with short/over flags; stock lands at a weighted-average cost from the receipt.
  • Receive without a purchase order too: a standalone receipt with a reason, optionally from a named supplier at its catalog cost; it lands at weighted-average cost like any other. A posted receipt can be corrected or reversed from its own screen.
  • Reorder in one click: draft a PO from everything below its low-stock threshold, at suggested quantities that fill each product back up to its Target stock. You review and edit the draft before submitting.
  • A proper document: every PO prints ( PDF) or exports (XLSX) in the supplier’s language — from InvFlux’s built-in purchase-order translations (a growing set) — with a per-rate tax breakdown, ship-to, and your terms.

Safe to try

  • It doesn’t touch your stock until you say so. InvFlux installs in observe mode: WooCommerce keeps managing every product exactly as before until you hand one over — all at once from the setup screen, from a product’s Inventory tab, or in bulk from the workbench. Its current stock becomes the opening balance; handing a product back is one click.
  • Nothing leaves your site unless you open Licenses & Add-ons or register a license, and then only what “External services” below lists. Every inventory feature works without registering, forever.

Requirements

InvFlux requires WooCommerce with High-Performance Order Storage (HPOS) enabled — the default on current WooCommerce. If HPOS is off, the setup screen says so and links to the WooCommerce setting where you turn it on, and it won’t hand products over until you do; nothing breaks in the meantime. A current database is also expected (MySQL 8.0.16+ or MariaDB 10.6+).

InvFlux runs one install per store. On a WordPress network you can activate it per site or network-wide — either way each site keeps its own independent inventory. See the FAQ on multisite.

Built to grow — paid add-ons

Essentials keeps your stock record right, and stays free. InvFlux is designed as composable add-ons rather than one monolith, so as paid extensions arrive you add only what you need:

  • roles and permissions — decide which staff may do what
  • stock takes and cycle counts
  • partial shipment
  • multi-warehouse
  • FIFO costing and landed cost
  • multi-channel sync

External services

This plugin can connect to one external service: the InvFlux licensing service at https://license.invflux.com — the service that issues and validates licenses.

Nothing is transmitted until you open Licenses & Add-ons, register, or activate a license. Until you do one of those three things the plugin never contacts the service at all. There is no usage tracking, no analytics and no crash reporting, at any point — we never see how you use the plugin, and your shop’s data never leaves your site.

What is sent, and when:

  • When you register a free license (you type an email address and press Register, on InvFlux Licenses & Add-ons or on the InvFlux settings screen): your email address, your site’s address, and the plugin version. This claims a free permanent license and links the site to an account.
  • When you activate a paid license key: the license key, your site’s address, the plugin version, two environment signals — whether WP_DEBUG is on and what WordPress reports as the environment type (production, staging, development) — so a staging copy doesn’t consume a production seat, and the versions of PHP and of the database server your site runs on (see the daily check below).
  • Once a license is registered or activated, once a day: the activation’s id, your site’s address, those same two environment signals, and the versions of PHP and of the database server your site runs on — to pick up a change in the license’s status (a renewal, a cancellation), and so we know which PHP and database versions are still in use and must keep working. The version numbers are counted and nothing else; they are never used to decide anything about your license. This stops when you deactivate the license, or when you un-register.
  • When you open Licenses & Add-ons: your account’s licenses and the price list are read back so the screen can show them. Your shop’s base country is sent with the price request so prices are quoted in the right currency and region.
  • When you open InvFlux Roadmap (only on a site with a registered or activated license — without one, nothing is sent and the screen links to the public roadmap on invflux.com): the activation’s id and your admin language, so the screen can show which items you have voted for. No vote counts are ever sent back.
  • When you press a vote button there: the activation’s id, which ties the vote to your account, and the id of the item you voted for. Nothing else is sent in either request.

You can un-register at any time, from InvFlux Licenses & Add-ons. Doing so releases the site’s license and stops the daily check, after which the plugin does not contact the service again unless you register once more. Every inventory feature keeps working exactly as before.

Your product, stock, order and customer data is never transmitted. It stays in your WordPress database.

Terms of service: https://invflux.com/terms
Privacy policy: https://invflux.com/privacy

Source code and build process

Every PHP file in this plugin is the source. The admin screens are the exception: they are SolidJS applications, and what ships in build/ is compiled and minified. Their source, and the tooling that produces those files, lives in a public repository:

https://github.com/invflux/invflux-ui

To reproduce the shipped bundles from a checkout of that repository, with Node 22:

npm install
INVFLUX_PLUGIN_DIR=/absolute/path/to/output npm run build

That writes <output>/build/app/ and <output>/build/product-tab/ — the same two directories this plugin ships under build/. Use an absolute path: the variable is read once per surface, from inside that surface’s own package directory, so a relative one produces two separate output trees. Without it, the output goes to a sibling checkout of this plugin, which is the layout used while developing.

The toolchain is Vite with the SolidJS plugin and Tailwind; versions are pinned in the repository’s package-lock.json, so a build from a given commit is reproducible.

Source maps are not included in the release zip — they would add about 40% to the download for something only a developer reads, and the repository above answers the same question better. bin/build-dist.sh --with-maps produces a build that includes them.

The PHP libraries are third-party packages, listed with the exact versions bundled in composer.json at the root of this plugin. Those under vendor/ are unmodified. Those under vendor-prefixed/ — PhpSpreadsheet and the five packages it depends on — are altered in two mechanical ways at build time: their namespaces are rewritten so they cannot collide with another plugin shipping a different version of the same library, and PhpSpreadsheet’s readers and writers are pruned to the spreadsheet formats this plugin actually uses.

Details

Plugin code:
invflux-for-woocommerce
Plugin version:
0.2.0
Outdated:
No
WP version:
6.8 or higher
PHP version:
8.1 or higher
Test up to WP version:
7.1.3
Total installations:
0
Last updated:
2026-10-10
Rating:
Times rated:
0
inventory
purchase-order
stock-audit
stock-management
woocommerce