Title: InvFlux for WooCommerce
Author: Samuel de Rougemont
Published: <strong>October 10, 2026</strong>
Last modified: October 10, 2026

---

Search plugins

![](https://ps.w.org/invflux-for-woocommerce/assets/banner-772x250.png?rev=3737961)

![](https://ps.w.org/invflux-for-woocommerce/assets/icon-256x256.png?rev=3737961)

# InvFlux for WooCommerce

 By [Samuel de Rougemont](https://profiles.wordpress.org/invflux/)

[Download](https://downloads.wordpress.org/plugin/invflux-for-woocommerce.0.2.0.zip)

 * [Details](https://wordpress.org/plugins/invflux-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/invflux-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/invflux-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/invflux-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/invflux-for-woocommerce/)

## Description

**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.

## Screenshots

[⌊The workbench: your catalog and stock in one grid — available, reserved, committed
and on hand, what's owed to orders (to ship, deficit), unit cost and stock value—
with spreadsheet-style selection and bulk editing.⌉⌊The workbench: your catalog 
and stock in one grid — available, reserved, committed and on hand, what's owed 
to orders (to ship, deficit), unit cost and stock value — with spreadsheet-style
selection and bulk editing.⌉[

The workbench: your catalog and stock in one grid — available, reserved, committed
and on hand, what’s owed to orders (to ship, deficit), unit cost and stock value—
with spreadsheet-style selection and bulk editing.

[⌊Every change on the record: each movement with who made it and from which screen,
the order or purchase order behind it, the cost of each receipt, and the reason 
for each correction.⌉⌊Every change on the record: each movement with who made it
and from which screen, the order or purchase order behind it, the cost of each receipt,
and the reason for each correction.⌉[

Every change on the record: each movement with who made it and from which screen,
the order or purchase order behind it, the cost of each receipt, and the reason 
for each correction.

[⌊Reorder in one click: a draft purchase order for everything below its threshold,
at quantities that fill each product back up to its Target stock — counting what's
already on order.⌉⌊Reorder in one click: a draft purchase order for everything below
its threshold, at quantities that fill each product back up to its Target stock —
counting what's already on order.⌉[

Reorder in one click: a draft purchase order for everything below its threshold,
at quantities that fill each product back up to its Target stock — counting what’s
already on order.

[⌊Receive a partial delivery against its purchase order: note damaged units, see
the shortfall, and keep the PO open for the rest. Nothing is added to stock until
you confirm.⌉⌊Receive a partial delivery against its purchase order: note damaged
units, see the shortfall, and keep the PO open for the rest. Nothing is added to
stock until you confirm.⌉[

Receive a partial delivery against its purchase order: note damaged units, see the
shortfall, and keep the PO open for the rest. Nothing is added to stock until you
confirm.

[⌊Dispatch: a queue of what's owed to customers — tag, stage and ship, and see at
a glance which orders can't ship and why.⌉⌊Dispatch: a queue of what's owed to customers—
tag, stage and ship, and see at a glance which orders can't ship and why.⌉[

Dispatch: a queue of what’s owed to customers — tag, stage and ship, and see at 
a glance which orders can’t ship and why.

[⌊Stage an order line by line, with corrections, notes and its timeline in one place.⌉⌊
Stage an order line by line, with corrections, notes and its timeline in one place
.⌉[

Stage an order line by line, with corrections, notes and its timeline in one place.

[⌊Hand products over one at a time from WooCommerce's own Inventory tab — or leave
any product with WooCommerce or another plugin.⌉⌊Hand products over one at a time
from WooCommerce's own Inventory tab — or leave any product with WooCommerce or 
another plugin.⌉[

Hand products over one at a time from WooCommerce’s own Inventory tab — or leave
any product with WooCommerce or another plugin.

[⌊Correct the record with a reason: review a count's differences per field, say 
why units were found or lost, or enter the increases as a Goods Receipt.⌉⌊Correct
the record with a reason: review a count's differences per field, say why units 
were found or lost, or enter the increases as a Goods Receipt.⌉[

Correct the record with a reason: review a count’s differences per field, say why
units were found or lost, or enter the increases as a Goods Receipt.

## Installation

 1. Install and activate **WooCommerce**, with HPOS enabled (WooCommerce  Settings  
    Advanced  Features).
 2. Install and activate **InvFlux for WooCommerce**.
 3. Activation opens a short setup screen. It finds the products WooCommerce already
    manages stock for, and one click hands them to InvFlux — their current stock becomes
    the opening balance. No CSV import, no manual mapping.
 4. Not ready to hand everything over? Skip it. You can hand products to InvFlux later,
    one at a time from a product’s Inventory tab or in bulk from the workbench.

## FAQ

### Will InvFlux overwrite my current stock?

No. InvFlux installs in observe mode — WooCommerce keeps managing every product 
exactly as before until you hand one over, from the setup screen (all at once), 
a product’s Inventory tab, or the workbench (in bulk). When you do, that product’s
current WooCommerce stock becomes its opening balance, InvFlux is the source of 
truth from there, and WooCommerce’s stock number is kept in sync with the InvFlux
ledger. Handing a product back to WooCommerce is one click.

### Does it require HPOS?

Yes. InvFlux is built for WooCommerce’s High-Performance Order Storage, the default
for current installs. With HPOS disabled, the setup screen explains what to change
and links to the setting, and handing products over waits until it’s on.

### Does it work with product variations?

Yes — each variation is tracked independently.

### Is it really free?

Yes. Drift-proof stock, the ledger, the stock workbench, purchase orders and receiving,
and the dispatch workbench are free. Paid tiers will add deeper operational workflows(
multi-warehouse, costing, multi-channel and more) — opt in only if you need them.

### Does it work on WordPress multisite?

Yes, per site or network-wide. Either way, each site runs its own independent inventory—
its own ledger, its own products, its own settings — exactly as if it were a standalone
install. A network activation sets every existing site up, and a site you create
later is set up when you create it.

What it deliberately does _not_ do yet is let several sites in one network **share**
stock. That is the interesting case, and it is planned as an add-on: one catalog
and one ledger behind several storefronts, so stock can’t drift apart across two
of your own sites — the way InvFlux already keeps one ledger behind every path within
a single site. It is a separate product from Essentials; Essentials stays one install,
one store.

### Does it support multilingual stores (WPML)?

Yes. On WPML/WooCommerce Multilingual stores, a product’s translations resolve to
a single shared stock record instead of splitting inventory across languages.

### Does the plugin send anything off my site?

Only if you open Licenses & Add-ons or register a license, and only what “External
services” below lists; the registration screen lists what it sends before you press
the button. Every inventory feature works without registering, forever.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“InvFlux for WooCommerce” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Samuel de Rougemont ](https://profiles.wordpress.org/invflux/)

[Translate “InvFlux for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/invflux-for-woocommerce)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/invflux-for-woocommerce/),
check out the [SVN repository](https://plugins.svn.wordpress.org/invflux-for-woocommerce/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/invflux-for-woocommerce/)
by [RSS](https://plugins.trac.wordpress.org/log/invflux-for-woocommerce/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.2.0

 * First public release.

## Meta

 *  Version **0.2.0**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.8 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [inventory](https://wordpress.org/plugins/tags/inventory/)[purchase order](https://wordpress.org/plugins/tags/purchase-order/)
   [stock management](https://wordpress.org/plugins/tags/stock-management/)[woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/invflux-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/invflux-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/invflux-for-woocommerce/reviews/)

## Contributors

 *   [ Samuel de Rougemont ](https://profiles.wordpress.org/invflux/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/invflux-for-woocommerce/)