Bulk or serialized tracking
Track identical parts as a quantity or represent every physical unit with a UUID, readable code, state, location, metadata and acquisition date.
03 · Store and move
Bulk quantities and individually serialized devices use different invariants but share locations, movements, assignments and ordering workflows.

Scope
Screws need a quantity; a laptop needs an identity. Open Inventory supports both tracking modes and writes each change as a dated movement. Current availability can therefore be reconciled with the events that produced it.
Result 01
Use bulk tracking for interchangeable parts and serialized units for identifiable devices
Result 02
Record issues, returns, transfers and corrections without replacing their history
Result 03
Connect minimum stock, purchase orders, receipts and assembly consumption
Included implementation
These components are part of the MIT-licensed project. Optional providers are identified where they take part in a workflow.
Track identical parts as a quantity or represent every physical unit with a UUID, readable code, state, location, metadata and acquisition date.
Receipts, issues, corrections and transfers are dated and appended. Stock cannot fall below zero, and corrections do not rewrite previous events.
Any suitable inventory record can be a structured stock location. Global quantity and distribution across rooms, cabinets or vehicles remain visible together.
Schedule recurring counts, process due checks and reconcile quantities by location. Serialized units retain individual traceability.
Issue quantities or units to users, other inventory records or free-text recipients. Returns and cancellation restore availability through explicit operations.
Minimum quantity, reorder amount, lead time and consumption rate produce warnings, an estimated stock-out date and a documented reorder suggestion.
Record expected quantities and partial deliveries. Receipts are applied through controlled stock movements rather than direct quantity edits.
Define assembly components and consume them atomically during a build: either the complete operation succeeds or none of it is applied.
Sequence
A movement changes more than a displayed number. It records the operation, location and recipient context used to derive the new state.
Use bulk quantities for interchangeable parts and serialized units for devices with their own identity.
Distribute stock across rooms, cabinets or vehicles while retaining the global quantity and availability view.
Receipt, issue, transfer, lending and return operations are validated and appended to the history.
Minimum quantity, consumption and lead time expose low stock and provide inputs for reorder planning.
Worked example
The values are mock data, but the workflow and state changes correspond to operations implemented by Open Inventory.
Example · Makerspace
M4 screws are stored as a quantity per shelf. Each oscilloscope has its own code, state and location and can be assigned to a person.
Bulk stock
240 screws
Serialized
4 devices
Current operation
1 device issued

The iPhone scans a code where a receipt, issue or return happens. The native app uses the same server-side movement history as the web application.
Resolve the scanned record before selecting an operation
Prepare a receipt with a short on-device flow
Require explicit confirmation before executing an issue
Movements, units, purchase orders and bills of materials are stored in PostgreSQL. The open implementation makes booking rules inspectable, while scoped API tokens support custom scanner, purchasing and reporting integrations.
Append-only movements rather than silent quantity replacement
Docker Compose and PostgreSQL for the self-operated core
Scoped API tokens for narrowly defined integrations
Next feature area
Labels and software integrations resolve the same records. Scan workflows add preview and confirmation before a stock operation is executed.
Operate your own instance
Review the Compose services, persistence requirements and provider configuration before exposing an instance to a network.