TL;DR:
- EdgeX Foundry is an open-source, vendor-neutral IoT edge middleware platform from the Linux Foundation with microservices for device connectivity, data translation, and northbound export
- It abstracts heterogeneous device protocols (Modbus, BACnet, MQTT, OPC-UA, camera protocols) behind a unified REST/message bus API
- Strong fit for industrial environments that need to avoid vendor lock-in and integrate mixed legacy and modern device fleets
Most IoT edge platforms make the same trade-off: tight integration with a specific cloud vendor in exchange for ease of deployment. AWS Greengrass, Azure IoT Edge, and Google Cloud IoT Core (now deprecated) all work well if you’re already committed to that cloud. But many industrial deployments don’t work that way: the devices were there first, the cloud isn’t decided yet, and the requirement is to get data flowing without betting on a single vendor’s future.
EdgeX Foundry is the open-source answer to that problem. It’s a project under the Linux Foundation, backed by Dell, Intel, HP, and a roster of automation and industrial companies. It runs at the edge — on a gateway, a server, or any Linux host — and handles the messy work of talking to heterogeneous devices and normalising their data into a consistent format before pushing it wherever you need it to go.
Architecture
EdgeX Foundry is built as a collection of loosely-coupled microservices, each responsible for a specific function. They communicate via a shared message bus (currently supporting Redis Pub/Sub or NATS) and expose REST APIs for configuration and control. Services run as containers (Docker or Podman) and are orchestrated with Compose for single-node deployments or Kubernetes for multi-node.
The architecture has four layers:
Device Services are the southbound adapters that speak to actual devices. Each device service handles one protocol family: a Modbus device service talks to Modbus RTU/TCP devices, a BACnet service talks to building automation devices, an OPC-UA service connects to industrial controllers, and so on. Device services translate device-specific data models into EdgeX’s common data model and publish readings to the message bus.
Core Services are the central data hub: Core Data stores device readings, Core Command provides a REST API to send commands to devices, Core Metadata maintains a registry of device configurations and profiles, and Core Registry/Config handles service discovery and configuration management.
Application Services are the northbound pipeline: they subscribe to device data from Core Data, apply any needed filtering or transformation, and export to a target system — an MQTT broker, an HTTP endpoint, InfluxDB, an AWS IoT topic, an Azure IoT Hub, a Kafka topic, or any other output.
Security Services handle authentication, secrets management, and API gateway access control. In production deployments, Kong is used as the API gateway and Vault for secrets management.
Setting Up EdgeX
The quickest way to start is with the official Docker Compose file:
# Download the compose file for the current release
curl -O https://raw.githubusercontent.com/edgexfoundry/edgex-compose/main/docker-compose.yml
# Start all core services
docker compose up -d
# Check service health
docker compose ps
This starts the full core stack: core-data, core-command, core-metadata, core-common-config, consul (for registry), Redis, and the security services. The management UI is available at http://localhost:4000.
Adding a device service is next. For a Modbus device:
# Add the Modbus device service
docker compose -f docker-compose.yml -f add-device-modbus.yml up -d device-modbus
Device profiles define the data model for a device type — which registers are readable, what data type they represent, what units the values are in. They’re written in YAML and registered via the Core Metadata REST API.
# Simplified device profile for a Modbus energy meter
name: "energy-meter-profile"
manufacturer: "Acme"
deviceResources:
- name: "ActivePower"
description: "Active power in kW"
properties:
valueType: "Float32"
readWrite: "R"
attributes:
primaryTable: "HOLDING_REGISTERS"
startingAddress: "0"
Application Services and Data Export
Application services are where EdgeX becomes genuinely flexible. The pipeline is configurable without code changes for common transformations: filtering by device name, converting units, batching readings before export, and routing to multiple destinations.
A simple MQTT export application service configuration looks like:
[Writable.Pipeline.Functions.MQTTExport]
[Writable.Pipeline.Functions.MQTTExport.Parameters]
BrokerAddress = "tcp://broker.example.com:1883"
Topic = "edge/devices/readings"
ClientId = "edgex-gateway-01"
QoS = "1"
Retain = "false"
For cloud integrations, the community maintains export services for AWS IoT Core, Azure IoT Hub, and InfluxDB Cloud.
When EdgeX Makes Sense
EdgeX is a good fit when:
- You have a mix of device protocols that would otherwise need separate integration efforts for each type
- You need to run the same edge stack across a fleet of gateways without cloud vendor dependency
- Your data security requirements mean keeping device traffic on-premises before selective export
- You’re in a regulated industry (energy, manufacturing, building automation) where vendor lock-in is a procurement concern
It’s more complex to deploy than managed edge services like Greengrass and Azure IoT Edge. If your environment is AWS-native and your devices use MQTT, Greengrass is simpler. EdgeX’s value compounds as device diversity and protocol heterogeneity increase.
Comparison to Alternatives
| EdgeX Foundry | AWS Greengrass | Azure IoT Edge | |
|---|---|---|---|
| Cloud dependency | None | AWS | Azure |
| Protocol support | Very broad (device services) | Limited (connectors) | Moderate (modules) |
| Deployment | Self-managed containers | AWS-managed agent | Azure-managed agent |
| Telemetry destination | Flexible | AWS services | Azure services |
| Learning curve | High | Medium | Medium |
Getting Started
The EdgeX documentation at docs.edgexfoundry.org covers the Getting Started guide, device service development, and application service configuration in depth. The edgex-compose GitHub repository has ready-to-use Compose files for all supported profiles — minimal, no-security, and full security builds.
For industrial deployments where the alternative is building custom Modbus-to-MQTT bridges for each device type, EdgeX’s up-front complexity is usually worth it.