selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

OpenMES logo

Self-host OpenMES

v0.27.0

Open-source MES for small manufacturers

BetaOpen SourceAGPL-3.0
Updatedlast week
LanguagePHP
Setup difficultyModerate
MobilePWA
Stars
178
CPU
2 cores
RAM
2 GB
Storage
10 GB free
Port
8000 (Laravel backend API (internal, exposed by backend container))
Requires
PostgreSQL
Docker
ghcr.io/mes-open/openmes
Install with Docker Compose
OpenMES on desktop, mobile and webWeekly production planner viewHourly Gantt view for production schedulingOperator queue interfaceOperator workstation view

What is OpenMES?

OpenMES is a free Manufacturing Execution System for small and mid-sized manufacturers. It provides real-time production visibility with work order tracking, batch production, process templates, and a drag-and-drop production planner with Gantt views. Operators use a tablet-optimized PWA interface with offline support for step-by-step guidance. The system includes an issue/Andon system, analytics with OEE reporting, and immutable audit logs for compliance. Machine connectivity is built in via MQTT, Modbus TCP/RTU, and OPC UA protocols, plus webhooks and a REST API for ERP integration. Optional modules add barcode packaging stations and ERP connectors. Deployment is a single Docker Compose stack (Laravel + PostgreSQL) with an automated installer. The core is AGPL-3.0 licensed with a dual-licensing model for commercial use.

Should you self-host OpenMES?

OpenMES scores 47/100 on selfhost.directory (how scoring works) and ranks #4 of 4 in Industrial IoT. It has 178 GitHub stars.

It shipped 10 stable releases in the past year. The latest, v0.27.0, came out on 14 October 2026. New versions land roughly every 4 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in PHP.

Its closest alternative on selfhost.directory is LinuxCNC (63/100, 2 512 stars). It scores higher overall, so compare the two before you pick. See OpenMES vs LinuxCNC side by side.

Features

  • Analytics & Reporting
  • ERP Integration Modules
  • ISA-95 Alignment
  • Issue & Andon System
  • Machine Connectivity
  • Module/Hook System
  • Operator Interface
  • Packaging Module
  • Production Planning
  • REST API
  • Security & Compliance
  • Two-factor authentication
  • Work Order Management

OpenMES README

How to install OpenMES

Install OpenMES with Docker Compose

Environment variables
DOMAIN, APP_URL, APP_ENV, APP_DEBUG, APP_TIMEZONE, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD, ADMIN_USERNAME, ADMIN_EMAIL, ADMIN_PASSWORD, HTTP_PORT, HTTPS_PORT

git clone https://github.com/Mes-Open/OpenMes.git cd OpenMes ./install.sh

Or manually:

cp .env.example .env docker compose up -d --build

Automated installer script (install.sh) generates secure credentials, auto-selects free host port, builds from source, and starts in production. Windows users run install.ps1 in PowerShell.

How to configure OpenMES

  • ADMIN_EMAIL
  • ADMIN_PASSWORD
  • ADMIN_USERNAMEadmin── Konto admina (tworzone automatycznie przy pierwszym starcie) ──────────────

    ── Konto admina (tworzone automatycznie przy pierwszym starcie) ──────────────

  • APP_DEBUGfalse
  • APP_ENVproduction── Tryb pracy ──────────────────────────────────────────────────────────────── local → tryb deweloperski (logi debug, błędy na ekranie) production → tryb produkcyjny (logi error, błędy ukryte)

    ── Tryb pracy ──────────────────────────────────────────────────────────────── local → tryb deweloperski (logi debug, błędy na ekranie) production → tryb produkcyjny (logi error, błędy ukryte)

  • APP_TIMEZONEEurope/Warsaw── Plant timezone ──────────────────────────────────────────────────────────── Used by EVERY timestamp: screens, reports, shift boundaries and scheduled jobs. Set the plant's timezone, not the server's — otherwise a day's report covers different hours than the shift that was worked. Defaults to UTC. The installer asks for this too, and stores the answer in the database, which is what the applicati

    ── Plant timezone ──────────────────────────────────────────────────────────── Used by EVERY timestamp: screens, reports, shift boundaries and scheduled jobs. Set the plant's timezone, not the server's — otherwise a day's report covers different hours than the shift that was worked. Defaults to UTC. The installer asks for this too, and stores the answer in the database, which is what the applicati

  • APP_URLhttp://localhost
  • DOMAINlocalhost── Domena i HTTPS ──────────────────────────────────────────────────────────── Produkcja z domeną → Caddy automatycznie pobiera certyfikat Let's Encrypt Lokalne testy → zostaw localhost (HTTP, bez certyfikatu)

    ── Domena i HTTPS ──────────────────────────────────────────────────────────── Produkcja z domeną → Caddy automatycznie pobiera certyfikat Let's Encrypt Lokalne testy → zostaw localhost (HTTP, bez certyfikatu)

  • POSTGRES_DBopenmmes── Baza danych ───────────────────────────────────────────────────────────────

    ── Baza danych ───────────────────────────────────────────────────────────────

  • POSTGRES_PASSWORD
  • POSTGRES_USERopenmmes_user

OpenMES releases & version history

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…