This guide covers installation, configuration, and administration of OpenMES.
- Installation
- First Steps After Installation
- User Management
- Production Structure
- Product Configuration
- Work Orders
- HR Management
- System Settings
- Warehouses
- Modules
- API Tokens
- Shifts
- Audit Logs
- Maintenance
- Updates
Deploying OpenMES in a plant for the first time? This chapter covers the software. The Implementation Runbook covers the whole procedure around it — infrastructure, configuration order, master data, pilot, go-live and handover.
- Docker 20.10+ and Docker Compose
- Git
# 1. Clone the repository
git clone https://github.com/Mes-Open/OpenMes.git
cd OpenMes
# 2. Start containers
docker-compose up -d
# 3. Open browser
# Navigate to http://localhostThe web installer will guide you through three steps:
- Basic Configuration — site name, URL and the plant timezone
- Database Configuration — PostgreSQL connection details
- Admin Account — your admin username, email, and password
After completing the wizard, the system is ready.
Plant timezone. Pick the timezone of the plant, not of the server: every timestamp, report boundary and shift edge is expressed in it, so a mismatch makes a day's report cover different hours than the shift that was worked. The wizard stores it in the database, and that value takes precedence over
APP_TIMEZONE— on Docker the environment variable comes fromdocker-compose.ymland cannot be changed from inside the application.
For production use, see the deployment notes in the main README. Ensure:
APP_DEBUG=falsein your.env- HTTPS is configured (use a reverse proxy like Caddy or Nginx)
- The
.envfile is secured and not committed to version control
After installing, complete this checklist:
- Create production lines — at least one line is required before operators can work
- Add users — create accounts for supervisors and operators
- Assign users to lines — operators must be assigned to see their queue
- Create product types — categories for your products
- Create process templates — step-by-step workflows for each product
- Import or create work orders — orders to be produced
- Load sample data (optional) — Settings → Sample Data loads realistic test data
Go to Admin → Users to manage accounts.
| Role | Access |
|---|---|
Admin |
Full system access: settings, all data, user management |
Supervisor |
Accept/reject orders, manage issues, view reports |
Operator |
View assigned line queue, execute steps, report issues |
- Click New User
- Fill in username, email, password, and select a role
- For Operator/Supervisor roles, assign them to one or more lines
- Click Save
Operators see only the lines they are assigned to. Assign lines:
- Open the user's profile
- In the Lines section, select lines from the list
- Save changes
Use Factories and Divisions to organise your physical locations:
- Factory → Division → Line → Workstation
Navigate to Admin → Structure → Factories and Admin → Structure → Divisions.
Lines are the core production units. Each work order is assigned to a line.
- Go to Admin → Production → Lines
- Click New Line
- Enter name, code, and optionally assign a division
- Set
Activeto true for the line to appear in operator selection - Save
Workstations are individual machines or work positions within a line.
- Go to Admin → Structure → Workstations (or from within a Line's detail page)
- Assign a workstation type, line, and optionally a division
Product types are categories that group similar products.
- Go to Admin → Production → Product Types
- Create types (e.g. "Wooden Chair", "Metal Frame", "Assembly Kit")
Process templates define the step-by-step production workflow for a product.
- Go to Admin → Production → Process Templates
- Click New Template
- Add steps with:
- Name — e.g. "Cut", "Drill", "Paint", "Assembly", "Quality Check"
- Order — sequence number
- Required role — optional, restrict step to a specific role
- Assign the template to one or more product types
When creating work orders, selecting a product type automatically selects the associated process template.
- Go to Admin → Work Orders → New
- Fill in:
- Order number (unique)
- Product name
- Quantity
- Line (production line)
- Product type and Process template
- Due date and Priority (1–5)
- Week/month/year numbers (if production period is configured)
- Save — the order is created with status Pending
A supervisor must accept the order before operators can work on it.
One importer loads master data and orders from spreadsheets — the same screen for every entity, in the style of a shop-system import page:
- Go to Admin → Import (supervisors: Supervisor → Orders → Import, work orders only).
The page sits on its own
importtab in Settings → Access; after an upgrade only Admin holds it. - Pick what to import: product types, materials, work orders or bills of materials. The right-hand panel lists the available fields for that entity (required ones starred) and offers a sample CSV per entity.
- Upload a
.csv,.txt,.xlsor.xlsxfile (max 32 MB). For CSV you can pin the field separator (auto-detected by default:;,,or tab) and the encoding (UTF-8, ISO-8859-1, Windows-1250 for older Polish exports). - Set the run options for the entity — the strategy (insert or update / insert only / update only / error on duplicates), and per entity: the external system and category filter (product types, materials), a default material type, a target line and planning period (work orders), replace vs merge (recipes).
- Map columns: each file column is assigned to a field. Columns are auto-detected from
common English and Polish headers; work orders also accept
custom:<key>targets that are kept as extra data on the order. Mappings can be saved as profiles and reused. - Run: the import is queued and processed in the background. The run page shows a live progress bar and, when done, per-row errors with the file line, the field and the reason — downloadable as CSV. The Recent imports list on the import page updates live as well.
Rows are processed independently: one bad reference never fails the whole file. The
older addresses (/admin/csv-import, /admin/materials-import) redirect here.
Sample files for every entity, matched to the demo data, live in
docs/import-samples/.
OpenMES includes basic HR tracking linked to production:
- Workers — Shop floor workers (separate from system users)
- Crews — Work groups assigned to shifts
- Skills — Competency tracking
- Wage Groups — Pay classification (for reporting)
Navigate to Admin → HR to manage these.
Go to Settings → System (Admin only).
Controls whether work orders must specify a week or month number:
| Value | Behavior |
|---|---|
none |
No period required |
weekly |
Week number required on all orders |
monthly |
Month number required on all orders |
allow_overproduction: if enabled, operators can produce more units than planned on a work order. If disabled, the batch completion form enforces the planned quantity as a ceiling.
force_sequential_steps: if enabled, operators must complete steps in defined order. If disabled, steps can be completed in any order.
Warehousing is an optional module — enable Warehouses under Settings → System → Modules (see Modules). With it off, the pages below are hidden and nothing in this section applies.
Rolling this out on an existing production install? Follow the Warehouses & ERP Sync rollout runbook — it covers the deployment order, loading opening stock, the acceptance test and the rollback path.
- Go to Admin → Production → Warehouses → All Warehouses
- Click + New Warehouse and give it a code, a name and a kind:
- Raw materials — materials are issued out of it
- Finished goods — product is received into it
- Mixed — both
- Optionally set an ERP code — the identifier of the same warehouse in your ERP, so stock syncs and documents can be matched up on both sides
- Tick Default for its kind on the warehouse that should be used whenever an import or an automatically generated document names no warehouse
Set one default for raw materials and one for finished goods before you rely on automatic document generation — without them, nothing is generated.
Admin → Production → Warehouses → Stock On Hand shows live balances. A row with an empty Lot column (shown as total) is the item's total in that warehouse; rows carrying a lot are its breakdown — don't add the two together.
A warehouse that still holds stock or carries documents cannot be deleted; deactivate it instead.
Admin → Production → Warehouses → Stock Documents lists the warehouse paperwork:
| Type | Meaning |
|---|---|
| Material release | Raw material leaving a warehouse for production |
| Material receipt | Raw material arriving (ERP receipt, return from the floor) |
| Product receipt | Finished product arriving when an order is concluded |
| Product release | Finished product leaving (shipment, correction) |
Every document is a draft until posted, and posting is what moves stock — it updates the warehouse balance, the material's stock quantity and the stock-movement ledger. Cancelling a posted document reverses all of it, so a mistake is undone without editing balances by hand. A posted document must be cancelled before it can be deleted.
Completing a work order creates its paperwork automatically (drafts): a material
release for what it consumed — from the lots the shop floor actually booked, or from
the order's BOM × produced quantity when it didn't — and a product receipt for what it
produced. Review and post them from this page. To turn generation off, set
WAREHOUSE_AUTO_DOCUMENTS=false in .env.
Create a document by hand with + New Document: pick the type, the warehouse, and add one line per item. The item picker follows the type — material documents list materials, product documents list products.
With both the Warehouses and ERP integration modules enabled, an ERP can keep OpenMES in step over the REST API:
- push balances — a quantity snapshot per warehouse and item; the ERP owns the warehouse, so a synced quantity replaces the OpenMES figure and re-running the sync converges instead of drifting
- push lots — lot numbers with their available quantities
- pull documents — the backlog of posted releases and receipts the ERP has not booked yet, then acknowledge each one with the ERP's own document number so it leaves the backlog
Create a key under Admin → API keys with the erp:stock:read /
erp:stock:write scopes (and erp:masterdata:write for products, materials, lots and
recipes). Endpoints, payloads and scopes:
API documentation → ERP Integration API.
Modules are optional extensions that add functionality to OpenMES without modifying core code.
- Go to Admin → Modules → Installed
- Each module shows its status (enabled/disabled)
- Click Enable or Disable as needed
- A server restart may be required for full effect
- Go to Admin → Modules → Install
- Upload a
.zipfile containing the module - The module is extracted and appears in the installed list
- Enable it to activate
Module ZIP structure:
MyModule.zip
└── MyModule/
├── module.json (required: name, display_name, version)
├── Providers/
│ └── MyModuleServiceProvider.php
├── Controllers/
├── Models/
├── views/
└── migrations/
See HOOKS.md and development.md for how to build modules.
OpenMES provides a token-based REST API for ERP integration, custom dashboards, and automation.
- Go to Settings → API Tokens
- Click Create Token
- Enter a name (e.g. "ERP Integration")
- Copy and store the token immediately — it is not shown again
- Use the token in the
Authorization: Bearer <token>header
See API Documentation for full endpoint reference.
To revoke a token, click the Revoke button next to it in the list.
Shifts define working hours for automatic shift-based reporting and module features.
- Go to Admin → Schedule → Shifts
- Create shifts with start time, end time, and name (e.g. "Day Shift", "Night Shift")
- Shifts are used by modules (e.g. Packaging) and reports
Every data-changing action in OpenMES is logged with the user, timestamp, entity type, and old/new values.
- Go to Admin → Audit Logs
- Filter by date, user, or entity type
- Export logs as CSV for compliance reporting
Audit logs are immutable — enforced at the database level. They cannot be edited or deleted through the application.
The Maintenance section tracks equipment and tooling:
- Maintenance Events — scheduled and unscheduled maintenance with costs and duration
- Tools — inventory of tools with last-service dates
- Cost Sources — categories for maintenance cost classification
Navigate to Admin → Maintenance.
OpenMES can check for and apply updates:
- Go to Admin → System → Updates
- Click Check for Updates
- If an update is available, click Apply Update
The update process pulls the latest release ZIP and applies it. A changelog is shown before applying.
Backup first. Always back up your database and
.envbefore applying updates in production.
# Manual backup
docker compose exec postgres pg_dump -U openmmes_user openmmes > backup_$(date +%Y%m%d).sql