Community tier · free for private use · no account

Get Melanite.

One runtime, three ways to run it. They are the same product — pick the one that matches the hardware in front of you.

What will run Melanite?

Pick the hardware in front of you. We'll take it from there, one step at a time.

  1. Docker Any PC, server or NAS — Windows, macOS or Linux. Up in minutes. amd64 · arm64
  2. Linux package Your own industrial PC, NUC or Raspberry Pi 5, as two systemd services. amd64 · arm64
  3. Raspberry Pi One image for the Pi 5 and the Compute Module 5: flash it, and the board boots into a PLC with a touch HMI. Pi 5 · CM5

01

Docker

The whole of Melanite in one container: the node engine and its real-time process, the HMI, the 2D and 3D views, MQTT, Modbus TCP and WLED. What a container cannot have, it tells you itself under Settings → This machine.

  1. Save this as compose.yaml:

    services:
      melanite:
        image: melanite.io/melanite:latest
        container_name: melanite
        restart: unless-stopped
        network_mode: host          # found on the LAN as itself: mDNS, MQTT, pairing
        cap_add: [SYS_NICE]         # the real-time process may run at SCHED_FIFO
        ulimits: { rtprio: 99, memlock: -1 }
        volumes:
          - melanite-data:/data/melanite
          - /etc/localtime:/etc/localtime:ro
        environment:
          MELANITE_RT_STOP_TIMEOUT: "5"
          MELANITE_APP_STOP_TIMEOUT: "20"
        stop_grace_period: 30s
    volumes:
      melanite-data:
    services:
      melanite:
        image: melanite.io/melanite:latest
        container_name: melanite
        restart: unless-stopped
        environment:
          MELANITE_FLAVOR_FILE: /usr/share/melanite/flavor.desktop.json
          TZ: Europe/Berlin           # your time zone — the VM runs on UTC
          MELANITE_RT_STOP_TIMEOUT: "5"
          MELANITE_APP_STOP_TIMEOUT: "20"
        ports:
          - "5001:5001"               # the app
          - "5002:5002"               # https (a phone needs it for its microphone)
          - "1883:1883"               # the built-in MQTT broker
        cap_add: [SYS_NICE]
        ulimits: { rtprio: 99, memlock: -1 }
        volumes:
          - melanite-data:/data/melanite   # a named volume, never a Windows folder
        stop_grace_period: 30s
    volumes:
      melanite-data:
  2. Start it — the first start pulls the image from melanite.io:

    docker compose up -d
  3. Open http://<this host>:5001 on Linux or http://localhost:5001 on Docker Desktop; the setup wizard asks for a name and an admin PIN.

No internet on the target?

Download the image archive for its architecture, load it, and use the same compose file with the version tag instead of latest:

docker load -i melanite-<version>-docker-amd64.tar.gz
# compose.yaml:  image: melanite.io/melanite:<version>
File Arch Version Size SHA-256 Download
Image archive Archamd64 Version— Size— — Download
Image archive Archarm64 Version— Size— — Download
Docker DesktopDocker on Linux
Node graph, HMI, 2D and 3D, logging, alarms, assistantYesYes
MQTT broker, Modbus TCP, WLED, network camerasYesYes
Real-time processYes — 5 ms cycleYes — 5 ms cycle; better on a PREEMPT_RT host
Found by devices on the LANThrough the published portsYes (host network)
EtherCATNoWith an IgH master on the host
Sound outputs as synced speakersNoWith /dev/snd passed in

Updates: pull the new image and recreate the container — your programs live in the melanite-data volume and carry over.

02

Linux package

The full product on a machine you already run — an industrial PC, a NUC, a server or a Raspberry Pi 5. Self-contained (no .NET needed), two systemd services, an unprivileged user. You bring the machine, the kernel and, for EtherCAT, the IgH master; Melanite tells you whether they are good enough.

  1. Download the package for your architecture (Debian 12 or 13, Ubuntu 22.04 or 24.04):

    File Arch Version Size SHA-256 Download
    Debian package Archamd64 Version— Size— — Download
    Debian package Archarm64 Version— Size— — Download
    Tarball (any systemd distribution) Archamd64 Version— Size— — Download
    Tarball (any systemd distribution) Archarm64 Version— Size— — Download
  2. Install it — or, on any other systemd distribution, unpack the tarball and run its installer:

    sudo apt install ./melanite_<version>_amd64.deb
    
    # or, from the tarball:
    tar xzf melanite-<version>-linux-amd64.tar.gz
    sudo ./melanite-<version>-linux-amd64/install.sh
  3. Open http://<this machine>:5001 and the setup wizard asks for a name and an admin PIN.

  4. Is this machine ready for hard real-time? melanite-check says, check by check, with the fix:

    melanite-check                    # exit 0 = ready for hard real-time
    sudo melanite-check --hwlat=60    # also measure firmware latency (stop Melanite first)

A PREEMPT_RT kernel and one isolated core are what turn a PC into a 1 ms controller — melanite-check prints the exact kernel line for this machine. Your programs live in /var/lib/melanite and are never removed by the package, not even on purge.

03

Raspberry Pi

One image for the Raspberry Pi 5 and the Compute Module 5. Flash it and the board boots straight into Melanite — the real-time kernel, EtherCAT and the touch HMI, nothing else to install. Only the way the image gets onto the board differs.

  1. Download the image (and, for bmaptool, its block map):

    File Arch Version Size SHA-256 Download
    Image for Pi 5 and CM5 (.wic.xz) Archarm64 Version— Size— — Download
    Block map for bmaptool (.bmap) Arch— Version— Size— — Download
How does it get onto your board?
  1. Put the card in the reader and write the image to it — lsblk shows which /dev/sdX is the card:

    lsblk
    sudo bmaptool copy melanite-<version>-raspberry-pi.wic.xz /dev/sdX
    
    # or without bmaptool:
    xzcat melanite-<version>-raspberry-pi.wic.xz | sudo dd of=/dev/sdX bs=4M conv=fsync status=progress
  2. Put the card in the Pi 5, connect Ethernet and, if you have one, a display.

  3. Power on. The device opens a setup Wi-Fi — join it from a phone and setup opens by itself; on a touchscreen it shows a QR code for the same.

The image boots from the SD card: its partitions and updates are laid out for it, so NVMe boot is not supported. Rather keep Raspberry Pi OS? The Linux package installs on it instead, on the stock kernel.

  1. Fit the board's nRPIBOOT jumper (disable eMMC boot), connect USB-C to the PC, power the board, and expose the eMMC as a USB drive with Raspberry Pi's rpiboot:

    git clone --depth=1 https://github.com/raspberrypi/usbboot && cd usbboot
    make && sudo ./rpiboot
  2. Write the image — lsblk shows which /dev/sdX is the eMMC:

    lsblk
    sudo bmaptool copy melanite-<version>-raspberry-pi.wic.xz /dev/sdX
    
    # or without bmaptool:
    xzcat melanite-<version>-raspberry-pi.wic.xz | sudo dd of=/dev/sdX bs=4M conv=fsync status=progress
  3. Remove the jumper and power-cycle. Power on. The device opens a setup Wi-Fi — join it from a phone and setup opens by itself; on a touchscreen it shows a QR code for the same.

Flashing replaces everything on the card or eMMC. Back up first (Settings → Backup & Restore). Flash from Linux: Raspberry Pi Imager on Windows is unreliable with this image.

Check what you downloaded

Every file's SHA-256 is listed next to it, measured by our server from the file itself. Compare before you install:

sha256sum <file>          # Linux
shasum -a 256 <file>      # macOS
Get-FileHash <file>       # Windows PowerShell

What changed in each version: the changelog. Free for private use, teaching and non-commercial research. Any use by a company needs a Commercial licence — see pricing.

Commercial licences aren't on sale yet.

Leave an address and you get one mail when they are.