Bulk stock or serialized units: differences in the data model
Bulk mode records quantities. In serialized mode, every unit has its own code, state, and location. Changing modes has technical preconditions.
Open Inventory
Technical notes · MIT licensed

Summary
trackingMode: bulkrecords quantities per resource and locationtrackingMode: serializedstores individually identified units- A mode conversion validates stock, variants, assignments, and existing units
Actual app capture
Stock, bookings, and movement history

Two models
trackingMode selects the booking model
The API calls the switch trackingMode; PostgreSQL stores it as stock_settings.tracking_mode. bulk permits quantity movements and balances per location. It fits bolts, cable ties, or interchangeable spare parts.
With serialized, every physical unit receives its own record with a code, state, and location. Direct quantity movements are blocked. Instead, a specific unit is created, moved, or assigned a new state.
Both models write movements to the history. The difference is the smallest addressable entity: a number in bulk mode and an identified object in serialized mode.
Decision guide
Questions to answer before choosing a mode
- 01
Is every unit interchangeable?
If each unit serves the same purpose and needs no individual history, bulk tracking is usually sufficient.
- 02
Does each unit need its own state?
States such as
available,reserved,in-use,maintenance, orretiredrequire an identified unit. - 03
Do you need the location of one exact unit?
Bulk mode stores quantities per location. A specific measuring instrument needs its own unit if it must remain individually findable.
- 04
Are there unit-specific attributes?
Serial number, warranty date, color, calibration, or assignment belong cleanly on a serialized unit.
- 05
Is the maintenance cost justified?
Registering and moving each unit takes attention. Serialize only where the additional information is actually used.
Examples
Where both modes fit
- Makerspace: M4 bolts as bulk stock; cordless drills with inventory labels as serialized units.
- Family: moving boxes as records or a quantity; bicycles serialized by frame number.
- Startup: USB-C adapters as bulk stock; company laptops and test phones serialized and assigned to people.
- Club: disposable cups as bulk stock; radios serialized with lending history and state.
- Collection: standard sleeves as bulk stock; each work serialized with provenance and individual condition.
Constraints
What a mode conversion validates
When converting bulk stock to serialized tracking, Open Inventory creates one unit for each item in the current quantity. Variant balances must be zero, active assignments and reservations must have ended, and the bulk balance must sit at the “Unassigned” location. A single conversion is also limited to 5,000 units.
Converting back to bulk is blocked while identified units still exist. The mode is therefore not a presentation setting: it changes both valid operations and stored records.
Before a large import, test receipt, withdrawal, transfer, lending, return, and stock count with a few physical objects. The rules are visible in lib/stock.ts, the Drizzle schema, and the OpenAPI specification in the MIT-licensed repository.
Further reading