Skip to content
Stockroom
Documentation menu

Core concepts

A handful of ideas underpin everything in Stockroom. Understanding them makes the rest of the product obvious.

The ledger is the source of truth

Stock isn't a number you edit. It's the sum of an append-only ledger of movements. Every receipt, sale, transfer, adjustment and count writes a signed movement (+ inbound, outbound) with a unit cost. On hand quantities and average cost are caches updated in the same transaction as the movement, so they can never drift out of sync.

This means your history is always auditable: you can see exactly why a number is what it is.

Products and variants

Stock is tracked per variant, not per product. Every product has at least one variant:

  • A simple product has a single default variant.
  • A variant product (like apparel) has one variant per combination of its axes, for example size × color, and each is its own stock-tracked SKU.

Custom fields let you model any attribute you like, and mark each as an axis (multiplies into variants) or an attribute (informational, one value on the product).

Weighted-average costing

Each variant carries a live weighted-average cost that recalculates on every inbound movement. When you sell, the cost at that moment is captured on the line as COGS, so margin, profit & loss and inventory valuation are always based on what your stock actually cost you.

Per-location stock

On-hand is tracked per location. Stock sitting in one store never masks a shortage in another. Reports and pickers can be scoped to a single location or combined across all of them, and transfers move stock between locations with a proper request/ship/receive workflow.

Roles, locations and access

Access is gated by area (inventory, sales, purchasing, …) at three levels of none, view or manage, and assigned per location. A store-specific role overrides an all-locations one, and owners always have full access.

Next: Inventory & the ledger.