MIT-licensed source

Features andimplementation details.

Open Inventory combines photo capture, typed records, stock movements, labels, spatial data and an API. The sections below describe the data flow, provider boundaries and known operating responsibilities.

MIT licenseSelf-hostableWeb + native iOS client
Actual Open Inventory dashboard capture with real object photographs and purpose-built demo dataActual app capture · demo data
Unaltered screenshot of the running web app with real object photographs and purpose-built demo records.

One capture queue

with separate resource, media and optional processing stages

Two stock models

for bulk quantities and individually serialized units

One open contract

shared by the web app, native iOS client and integrations

Interface examples

Real captures from the running web app.

These unaltered screenshots use deliberately created demo records and real object photographs. The captured instance is configured in German, so its embedded labels remain German.

Review the dashboard in a real Open Inventory capture with demo recordsReal capture · demo data

Review the dashboard

Inspect metrics and recent records with real object photographs.

Search inventory records in a real Open Inventory capture with demo recordsReal capture · demo data

Search inventory records

Inspect records, states, tags and locations in one list.

Inspect an item in detail in a real Open Inventory capture with demo recordsReal capture · demo data

Inspect an item in detail

Bring real object photographs, master data, media, and stock status together.

Record stock movements in a real Open Inventory capture with demo recordsReal capture · demo data

Record stock movements

See incoming and outgoing movements, locations, and history on the record.

Design printable labels in a real Open Inventory capture with demo recordsReal capture · demo data

Design printable labels

Generate QR and Code 128 previews from a selected demo record.

Process a capture batch in a real Open Inventory capture with demo recordsReal capture · demo data

Process a capture batch

Use the photo tray and shared capture settings in the running web app.

Distribute stock by location in a real Open Inventory capture with demo recordsReal capture · demo data

Distribute stock by location

Review quantities, incoming stock, minimum levels, and coverage for each storage location.

Catch maintenance and shortages in a real Open Inventory capture with demo recordsReal capture · demo data

Catch maintenance and shortages

Review concrete maintenance dates and low-stock warnings in one event list.

Control shared access in a real Open Inventory capture with demo recordsReal capture · demo data

Control shared access

Manage members, roles, and permissions in the self-hosted instance.

Define inventory types in a real Open Inventory capture with demo recordsReal capture · demo data

Define inventory types

Configure rooms, vehicles, tools, and custom types with explicit behavior.

Structure custom fields in a real Open Inventory capture with demo recordsReal capture · demo data

Structure custom fields

Add typed information such as calibration dates to the records it applies to.

Exchange data deliberately in a real Open Inventory capture with demo recordsReal capture · demo data

Exchange data deliberately

Use validated CSV import or export to CSV, a formatted Excel workbook, or a PDF report.

Feature reference

Six areas, with their constraints explained.

Every item below belongs to the open project. External AI, identity, map and storage providers remain optional deployment choices.

01 · Capture

From photos to inventory records

Capture starts at the object. Original media is retained, generated suggestions remain reviewable, and background work is split into visible stages.

Open the technical detail

Camera-first batch capture

Capture several objects in sequence. Persistent jobs continue processing earlier records while the camera is available for the next object.

Image-derived draft fields

Optional OpenAI or compatible image analysis proposes a name, description, type, tags, alt text and confidence value. The draft is editable before it is accepted.

Generated square covers

OpenAI or Google can generate a square cover from a source photo. The generated asset is stored separately and the original photo remains available.

Count similar parts from a photo

Optional photo counting marks detected instances and returns a confidence value. The quantity can be corrected before a stock movement is written.

Media attached to the record

JPG, PNG, WebP, AVIF, HEIC, MP4, MOV, WebM, PDF and USDZ can be ordered on a record. Images are optimized client-side and EXIF coordinates can be imported.

Native iPhone capture

The open SwiftUI app captures photos, scans codes and persists upload stages. Stable operation IDs prevent defined retries from creating duplicate records.

02 · Structure

Model the inventory you actually have

Types, typed custom fields, directed relations and content languages let different inventories use one application without forcing one industry schema.

Open the technical detail

Records with complete details

Store quantity, status, SKU, serial number, value, categories, tags, location, notes, priority, GPS or GeoJSON data and ordered media on each record.

Custom inventory types

Use bundled types for tools, objects, furniture, vehicles, locations, people, clothing and projects, or define custom types with stable API keys.

Typed custom fields

Add short or long text, numbers, booleans, dates, date-times, single or multiple choices, email, URL and dynamic references, including fields on serialized units.

Relations and containment

Configurable directed relations connect records. Manual placement and point-in-polygon derivation can represent rooms, cabinets, machines or projects.

Localized record content

A canonical language, per-field freshness, terminology guidance and queued regeneration keep generated translations reviewable and consistent.

Search, filters and bulk editing

Use the responsive grid or table, filter records, and update shared fields or append tags across a selected set.

03 · Store and move

Stock with an append-only history

Bulk quantities and individually serialized devices use different invariants but share locations, movements, assignments and ordering workflows.

Open the technical detail

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.

Append-only movements

Receipts, issues, corrections and transfers are dated and appended. Stock cannot fall below zero, and corrections do not rewrite previous events.

Quantity by stock location

Any suitable inventory record can be a structured stock location. Global quantity and distribution across rooms, cabinets or vehicles remain visible together.

Inventory count cycles

Schedule recurring counts, process due checks and reconcile quantities by location. Serialized units retain individual traceability.

Lending, assignments and reservations

Issue quantities or units to users, other inventory records or free-text recipients. Returns and cancellation restore availability through explicit operations.

Minimum stock and forecast inputs

Minimum quantity, reorder amount, lead time and consumption rate produce warnings, an estimated stock-out date and a documented reorder suggestion.

Purchase orders and receipts

Record expected quantities and partial deliveries. Receipts are applied through controlled stock movements rather than direct quantity edits.

Bills of materials and assemblies

Define assembly components and consume them atomically during a build: either the complete operation succeeds or none of it is applied.

04 · Resolve and integrate

From a printed code to an API operation

Labels and software integrations resolve the same records. Scan workflows add preview and confirmation before a stock operation is executed.

Open the technical detail

QR and barcode workflows

Scan from a camera or image, resolve inventory links, UUIDs, SKUs and serial numbers, and review configurable stock operations before idempotent execution.

Reusable label layouts

Design layouts in the browser with a short QR link, Code 128, optional record image and presets including Brother 62 mm and 102 × 152 mm.

CSV import and export

Import and export UTF-8 CSV. Row-level validation identifies invalid values, and repeated imports can use idempotent processing.

Transactional duplicate merging

A score helps identify similar records. A merge applies related-data changes transactionally instead of leaving partially moved associations.

Revocable public shares

Expose selected records through a revocable read-only share without opening the complete workspace.

Documented REST API

The checked-in OpenAPI 3.1 specification, interactive reference and hashed tokens with expiry and scopes make integrations inspectable.

05 · Spatial data

From a map point to a room model

Locations can be plain text, structured inventory records, map geometries or optional room captures. Each level is independent.

Open the technical detail

Interactive map editing

Edit points and polygons, drag geometry handles, change layers or satellite imagery and assign multiple records from the map.

Derived spatial containment

When a map point lies inside a container polygon, Open Inventory can derive a relation. A manual placement deliberately takes precedence.

Optional RoomPlan scans

A LiDAR-capable iPhone can capture rooms, floors and connected structures. This is an extension for supported hardware, not a requirement for the rest of the app.

Navigable 3D room data

The web viewer displays measured RoomPlan geometry, searchable inventory markers and optional photorealistic derivatives with explicit coordinate-system transforms.

06 · Operate and secure

Open source still needs operational discipline

Roles, scoped tokens, persistent data and explicit provider boundaries turn inspectable code into a service that can be operated deliberately.

Open the technical detail

Roles and conditional rules

Manage local accounts, custom roles, granular permissions and content-dependent access rules. Auth0 can be added as an optional identity provider.

Docker Compose and PostgreSQL

Containers, migrations, a health endpoint and persistent volumes for PostgreSQL and local uploads are checked in. Configuration and secrets remain deployment concerns.

Selectable file storage

Store uploads in a persistent local volume by default or configure Openinary. Database and file storage must be backed up as one recoverable dataset.

MIT-licensed source

The web app, API and native iOS client are published in one repository. The MIT license permits inspection, modification, operation and redistribution.

Open implementation

Inspect the code and the operating boundaries.

The web app, native iOS client, database migrations and OpenAPI document are published together under the MIT license.