Powerful, flexible, and tablet-ready MES for small manufacturers
Beta Notice โ OpenMES is under active development. Core features are functional and used in production environments, but breaking changes may occur between minor versions. We recommend testing thoroughly before deploying to production. Feedback and contributions are welcome!
Try the live demo โ demo.getopenmes.com Free demo account โ active for 3 hours, no credit card required
OpenMES is a modern, open-source Manufacturing Execution System designed specifically for small manufacturers (woodworking, metalworking, assembly shops) who need powerful production tracking without enterprise complexity.
- Purpose-built for small manufacturers - No bloat, just what you need
- Tablet-first design - Touch-optimized for shop floor operators
- Security-first - OWASP Top 10 compliant from day one
- Real-time visibility - Know exactly what's happening on every line
- Truly open-source - AGPL-3.0 licensed, no vendor lock-in
- Deploy in minutes - Single command Docker deployment
- ISA-95 aligned โ Level 3 MES with ISA-95 / IEC 62264 hierarchies and MOM coverage (details)
Drag-and-drop production scheduling with Gantt-style views across multiple production lines.
- Weekly / Daily / Hourly / Monthly views โ switch between planning horizons
- Drag & drop scheduling โ assign and move work orders across lines and shifts
- Hourly Gantt view โ minute-level precision with resize and cross-line moves
- Real-time polling โ live updates when changes happen on the shop floor
- Backlog panel โ unassigned orders with priority filtering and search
- Overdue alerts โ visual flagging of overdue orders on the timeline
- Multi-line production - Manage multiple production lines simultaneously
- Work order tracking - Complete work order lifecycle management
- Batch production - Support partial completion with multiple batches
- Process templates - Reusable, step-by-step process definitions
- CSV Import - Bulk import work orders with flexible column mapping
- Real-time status - Live production status updates
- Step-by-step guidance - Clear instructions for every operation
- Sequential workflow - Enforce process order to prevent mistakes
- One-tap actions - Start, complete, report issues with single tap
- PWA support - Install on tablets, works offline
- Offline mode - Queue actions when network is unavailable
- Tablet-optimized - Large touch targets (48px+), minimal text input
- Problem reporting - Operators report issues instantly from any step
- Automatic blocking - Critical issues halt production automatically
- Issue escalation - Route problems to supervisors with notifications
- Resolution tracking - Complete issue lifecycle (Open โ Acknowledged โ Resolved โ Closed)
- Predefined categories - Material shortage, quality issues, tool failures, etc.
- Supervisor Dashboard - Real-time KPIs and production metrics
- Interactive Charts - Throughput, cycle time, issue trends, step performance
- Production Reports - Summary, batch completion, downtime reports
- CSV Export - Export all reports for further analysis
- Traceability - Complete audit trail for every action
- Immutable audit logs - PostgreSQL-enforced, cannot be altered
- Complete traceability - Track every action, user, and timestamp
- Role-based access - Admin, Supervisor, Operator roles
- Line-based filtering - Operators only see assigned lines
- Compliance-ready - ISO 9001, AS9100 compatible audit trail
OpenMES is built to be extended! Use our comprehensive hook system to add custom functionality without modifying core code.
- 40+ events covering the entire production lifecycle
- Work Order hooks - Created, Updated, Completed, Blocked
- Batch hooks - Created, Completed, Cancelled
- Step hooks - Started, Completed, Problem Reported
- User hooks - Assigned to Line, Created, Updated
- Line hooks - Created, Activated, Deactivated
- Process Template hooks - Template & Step management
- CSV Import hooks - Started, Completed, Failed
// Listen to work order completion
Event::listen(WorkOrderCompleted::class, function ($event) {
// Send notification to ERP system
ExternalAPI::notifyCompletion($event->workOrder);
// Update inventory
Inventory::increment($event->workOrder->product_type_id);
// Send email to warehouse
Mail::to('warehouse@company.com')->send(/* ... */);
});- ERP Integration - Sync with SAP, Odoo, or custom systems
- Custom Notifications - Email, SMS, Slack, Teams
- Quality Control - Automated inspections and checks
- IoT Integration - Connect machines and sensors
- Custom Reports - Generate PDFs, Excel, or API exports
- Inventory Management - Auto-update stock levels
- Barcode/RFID - Track materials and products
๐ Full Documentation: HOOKS.md ๐ Module Examples: modules/
OpenMES ships with optional modules that can be enabled from Admin โ Modules.
Dedicated station for scanning finished products with a barcode reader (EAN/QR) before shipping or warehouse handoff.
How it works:
- Operator opens
/packaging/stationon a dedicated workstation or tablet - Scans an EAN barcode with a USB/Bluetooth reader (or types it manually)
- The system looks up which work order the EAN belongs to and increments its
packed_qtycounter - Live stats update every 3 seconds: packed today, plan, backlog, realisation %
Features:
- EAN management โ assign one or multiple EAN codes to any work order (
Admin โ Packaging โ EAN Codes) - Scan history โ every scan is logged with timestamp, user, and result (success / unknown EAN / error)
- Shift-based counters โ
packed_qtyresets each shift; shift boundaries are configurable - Manual reset โ
php artisan packaging:reset-shiftresets all counters immediately - Admin dashboard โ read-only overview of all lines with the same live stats as the operator view
Routes:
| URL | Access | Description |
|---|---|---|
/packaging/station |
Operator, Supervisor, Admin | Scanning station |
/packaging/ |
Supervisor, Admin | Admin overview |
/packaging/eans |
Supervisor, Admin | EAN code management |
Required migrations (run automatically on first deploy):
create_work_order_eans_table
create_packaging_scan_logs_table
add_packed_qty_to_work_orders_table
OpenMES uses a dead-simple Laravel monolith architecture:
โโโโโโโโโโโโโโโโโโโ
โ Laravel App โ :80 (serves everything)
โ (Blade + API) โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โโโโโโผโโโโโโ
โ PostgreSQLโ
โโโโโโโโโโโโ
Stack:
- Backend: Laravel 12 with Blade templates
- Frontend: Tailwind CSS 4 + Alpine.js for interactivity
- Real-time: Livewire 4 for dynamic components
- Charts: Chart.js for analytics
- Database: PostgreSQL 17+ with immutable audit logs
- Deployment: Docker Compose (2 containers only!)
- Ultra Simple: Just 2 containers (Laravel + PostgreSQL)
- One-Command Install: clone, run installer, done
- No Reverse Proxy: Laravel serves directly on port 80
- Easy Maintenance: Single codebase, traditional Laravel patterns
- LAN Optimized: Server-rendered pages, perfect for local networks
- Mobile Ready: Responsive Blade templates work on tablets
- Fast: Built-in assets compilation with Vite
OpenMES architecture maps onto the ISA-95 / IEC 62264 standard for Manufacturing Operations Management at Level 3. See docs/isa95.md for the full coverage matrix across Production, Maintenance, Quality, and Inventory operations.
- Docker & Docker Compose (20.10+)
- Git
** Clone, open browser, configure!** No CLI commands required!
# 1. Clone the repository
git clone https://github.com/Mes-Open/OpenMes.git
cd OpenMes
# 2. Start Docker containers
docker-compose up -dThat's it! Now open http://localhost in your browser.
You'll see a friendly 3-step installation wizard:
Step 1: Basic Configuration
- Site Name (e.g., "My Factory")
- Site URL (e.g., http://localhost)
Step 2: Database Configuration
- Host:
postgres(for Docker) - Port:
5432 - Database:
openmmes - Username:
openmmes_user - Password:
openmmes_secret(from docker-compose.yml)
Step 3: Create Admin Account
- Username (your choice)
- Email (your choice)
- Password (your choice - secure it!)
Click "Complete Installation" โ Done! ๐
For even faster setup with default database credentials:
# Clone and run one-command setup
git clone https://github.com/Mes-Open/OpenMes.git
cd OpenMes
./setup.shThis automatically:
- โ Creates .env file
- โ Builds Docker containers
- โ Generates encryption key
- โ Opens http://localhost in your browser
Then just complete the 3-step wizard!
- Login with your admin credentials
- Create production lines in the admin panel
- Add users (operators, supervisors) and assign them to lines
- Import work orders via CSV or create manually
- Install PWA on tablets for offline support
Containers not starting?
# Check container logs
docker-compose logs backend
docker-compose logs postgres
# Restart containers
docker-compose restart
# Rebuild containers (if needed)
docker-compose down
docker-compose build --no-cache
docker-compose up -dDatabase connection errors?
# Make sure postgres is healthy
docker-compose ps
# Check database credentials
grep DB_PASSWORD .env backend/.env
# Restart backend
docker-compose restart backendApplication not loading?
# Check if services are running
docker-compose ps
# View backend logs
docker-compose logs -f backend
# Rebuild backend (includes asset build)
docker-compose build --no-cache backend
docker-compose up -dPort 80 already in use?
# Check what's using port 80
sudo lsof -i :80
# Edit docker-compose.yml to use different port:
# Change: - "80:8000" to "8080:8000"
# Then access at: http://localhost:8080- Open Safari and navigate to OpenMES
- Tap the Share button
- Select "Add to Home Screen"
- Name it "OpenMES" and tap Add
- Launch from home screen
- Open Chrome and navigate to OpenMES
- Tap the menu (โฎ)
- Select "Install app" or "Add to Home Screen"
- Confirm installation
- Launch from home screen
Benefits:
- Full-screen mode (no browser chrome)
- Works offline with automatic sync
- Native app-like experience
- Touch-optimized for manufacturing floor
- User Guides - Operator, Supervisor, and Admin guides
- API Documentation - REST API reference
- PWA Testing Guide - Offline functionality testing
- Technical Documentation - For developers
- MQTT Connectivity Testing - Machine connection testing guide
We welcome contributions! Whether it's bug reports, feature requests, documentation, or code - we'd love your help.
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests
- Submit a pull request
See CONTRIBUTING.md for details.
OpenMES is open-source software licensed under the MIT License.
This means you can:
- โ Use it commercially
- โ Modify it
- โ Distribute it
- โ Use it privately
See LICENSE for full details.
- ๐ Read the documentation
- ๐ Search existing issues
- ๐ฌ Ask in discussions
Need help with deployment, customization, or training? Contact us at jakub.przepiora@nice-code.com
Built with โค๏ธ for the manufacturing community
Made by manufacturers, for manufacturers
โญ If you find OpenMES useful, please give it a star!




