Ecommerce WMS: one inventory truth behind every channel
A warehouse management system for brands that sell on their own store and on marketplaces at the same time, and are tired of the number on the site disagreeing with the number on the shelf.
Verified in code 2026-09-03 · v2.0.0 to v2.19.0
The problem is not the warehouse. It is the promise.
A brand that sells on its own store and on two marketplaces makes the same promise three times a minute: we have this, you can buy it. Most warehouse software keeps that promise by hoping. It counts stock in one place, publishes a number somewhere else, and reconciles the two when a customer complains.
DockingWare was built the other way around. There is one inventory ledger. Every receive, allocation, pick, shipment, return and adjustment writes one row to it, with a reference and a user. The number a channel sees is computed from that ledger (pick-face stock plus bulk stock, minus what is already allocated) and published after every movement that changes it. Nothing on the site is typed in. Nothing is estimated.
That is the whole design. Everything else on this page follows from it.
What the channel gets
Orders come in by webhook. Each one is verified, then enters a fulfillment queue that runs on management by exception: the orchestration allocates it, and a person only sees it when something needs a decision, such as a short pick, a missing case conversion, or a product that is not active yet. Every allocation decision is logged with its reason.
Availability goes out after each movement. The available-to-promise quantity for every mapped listing is published back, and a scheduled reconciliation checks the channel against the ledger and names any drift. If you need to keep the last few pieces off the marketplace for wholesale customers, a per-product channel reserve holds them back, in absolute pieces, as a percentage, or whichever of the two is more conservative.
Fulfillment goes back when the packer confirms a shipment. Carrier and tracking reach the channel order through a transactional outbox. There is a per-integration pause switch for the day a channel misbehaves, and a silence detector that raises a named alert when webhooks stop arriving, then closes it on its own at the first proof of life.
The floor knows it is ecommerce
Single-piece orders are not small wholesale orders, and DockingWare does not pretend they are. The direct-to-consumer floor offers three dispatch modes (walk the pick, work from a station console, or pick to tote and hand off) and one continuous guided flow at the bench: scan the SKU, confirm the pieces, choose packaging, print the label, capture carrier and tracking. Packaging materials are stock too, consumed on pack with a ledger witness, so the box count is as honest as the SKU count.
A wrong scan refuses by name, right next to the scan field, on the handheld and on the desktop. A prefix never verifies. If your catalog holds ITEM-01 and ITEM-01-X, scanning the first will not accept a line for the second, because those are two different products and a warehouse that confuses them ships the wrong one.
Bundles, relabels, and the things that come back
Kits are sold as one line and stocked as their parts. The channel sees an availability derived from the components (the minimum any of them can support), so a bundle can never be promised beyond what can be assembled. When a component is held by open kit orders, the product page says so in its own card, read from the allocation table rather than inferred by subtraction. A subtraction cannot disagree with itself. A table can be checked.
Relabeled units scan home through alternate barcodes that are unique across the catalog. Marketplace removals and channel customer returns get their own document, received against expected lines or classified unit by unit, with over-receipt recorded rather than refused. A removal is posted as channel inbound, not as a return, so a future return-rate report is not poisoned by your own stock coming home.
Who this is for
Brands with a few hundred to a few tens of thousands of SKUs, selling through their own store and one or more marketplaces, who have already been burned by an oversell. Teams who want the site to show what the shelf holds, not what a spreadsheet believed last Tuesday.
It is not for a business that wants listing management: content, pricing, repricing across channels. DockingWare manages the inventory and the fulfillment behind the listing. The listing itself stays where it lives.
What you can verify
Every capability above shipped in a tagged release with a rollback plan and a smoke test that includes the ledger row. The changelog lists them by version, in the words they were shipped with.
Questions
- Does DockingWare replace my Shopify inventory, or sync with it?
- It becomes the source. Shopify keeps selling, but the quantity it shows is the available-to-promise number DockingWare publishes after every movement, then checks again on a schedule. If the two ever disagree, the reconciliation names the difference instead of quietly overwriting one side.
- What happens to a marketplace removal or a customer return that has no local order?
- It gets its own document. Removals arrive with expected lines and the dock receives against them. Customer returns are scanned and classified one unit at a time as sellable, damaged or quarantine. Both post to the ledger with the scanned barcode kept as the witness.
- Can I sell a bundle without stocking it as a product?
- Yes. A kit is a catalog entity, never a stocked one. Its availability is derived from its components and published to the channel, so a listing can only sell what the warehouse can actually assemble. At allocation the order explodes into the parts, and the floor picks the parts.
- We relabel units with marketplace stickers. Will the scanner know them?
- Each product can carry alternate barcodes (marketplace codes, vendor labels, legacy codes), unique across the whole catalog. A relabeled return scans home to its real SKU. The ledger and every document keep naming the SKU, never the alias.
Related
See how DockingWare handles this →
Ready to see it on your floor?
Early access. We onboard a small number of operations at a time.
Start Early Access