Upstream: eclipse-iofog/edgelet · Datasance distribution: Datasance/edgelet
Lightweight container runtime for far-edge devices and ioFog/PoT node agent.
Edgelet is a single edgelet binary per platform. On Linux it ships a thin CLI wrapper with an embedded container runtime. On macOS and Windows it runs as a monolithic binary against an external Docker or Podman engine. The daemon manages microservice workloads, syncs with the Controller, and exposes the on-device EdgeletAPI for local administration.
Documentation: docs/edgelet/README.md
| Platform | Binary model | Container engine | Role in beta |
|---|---|---|---|
| Linux (amd64, arm64, arm, riscv64) | Thin wrapper (~31 MiB) + embedded fat runtime | edgelet (default), docker, podman |
Production far-edge / device-edge node agent |
| macOS (amd64, arm64) | Monolithic ELF | docker, podman only — Docker Desktop, Podman Machine, or OrbStack |
Supported development platform (not a production edge node OS) |
| Windows (amd64) | Monolithic .exe |
docker, podman only |
Tier 2 — CLI and cross-compile verified; no Windows integration-test matrix |
Linux thin binary installs to /usr/local/bin/edgelet, lazy-extracts the fat runtime to /var/lib/edgelet/data/current/, and starts the daemon with edgelet daemon or systemctl start edgelet. Desktop platforms do not embed a runtime; point containerEngineUrl at your local engine socket.
Use an external engine and the desktop monolithic build:
make install-dev start-dev
export SNAP_COMMON=$(pwd)/dev
edgelet system status
edgelet system infoStop and inspect logs:
make stop-dev
tail -f dev/var/log/edgelet/daemon-startup.logCLI reference: docs/cli/README.md · output schemas · CLI migration from legacy ioFog Agent
.
├── cmd/edgelet/ # Multicall entry (CLI, daemon, containerd child)
├── internal/
│ ├── auth/ # TLS / JWT / EdgeletAPI PKI
│ ├── edgeletapi/ # EdgeletAPI HTTP/WebSocket (:54321)
│ ├── fieldagent/ # Controller communication
│ ├── processmanager/ # Container reconciliation
│ ├── store/ # SQLite persistence
│ └── supervisor/ # Module orchestration
├── pkg/
│ ├── containerd/ # In-process containerd (edgelet engine)
│ └── engine/ # ContainerEngine + docker/podman/edgelet adapters
├── install.sh # Binary installer (multi-OS)
├── uninstall.sh # Clean uninstaller
├── packaging/ # systemd unit, config templates
└── docs/edgelet/ # Operator documentation
| Tool | Version | Notes |
|---|---|---|
| Go | 1.26.4+ | See go.mod |
| Make | any | GNU Make |
| Docker | 26.10+ | Required for macOS release builds and embed CI |
| Docker / Podman | 26.10+ | When containerEngine is docker or podman |
| golangci-lint | v2.12.2 | Auto-installed by make lint |
On Linux native embed builds, install cross-compilers:
sudo apt-get install -y \
gcc gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf gcc-riscv64-linux-gnu \
musl-tools musl-devRuntime selection via containerEngine in config (validated per GOOS):
| Platform | Allowed containerEngine |
Default |
|---|---|---|
| linux | edgelet, docker, podman |
edgelet |
| darwin / windows | docker, podman |
docker |
profiles:
production:
containerEngine: edgelet
containerEngineUrl: unix:///run/edgelet/containerd.sock
pruningFrequency: 24
watchdogEnabled: trueDetails: docs/edgelet/container-engine.md
macOS (release matrix): use the Docker embed loop — do not use make build-all-archs (requires native Linux cross-toolchains):
./test/release/build-all.sh # all 7 release binaries
make build-release-matrix # alias for build-all.shAfter changing embed build dependencies, refresh CI images:
RELEASE_FRESH_CI_IMAGE=1 ./test/release/build-all.shLinux: ./test/release/build-all.sh or make build-all-archs, plus desktop targets:
make build-desktop-darwin build-desktop-windows
scripts/release-binaries.sh v1.0.0-beta.1Local / single-target builds:
make build # host OS: linux thin or desktop monolithic
make build-edgelet-linux # unified linux thin (ARCH=amd64 default)
make deps # embed pipeline before linux thin build
make build-linux-amd64 # deps + thin for amd64
make build-linux-arm64 # deps + thin for arm64
make build-desktop-darwin # darwin monolithic
make release-binaries VERSION=v1.0.0-beta.1make test
make test-unit
make test-coverageEmbedded-engine integration (Lima VM on macOS): test/embedded/README.md
Quality gates before contributing:
make lint
make security-code
make vulncheck
make fmtBinary-only releases (no DEB/RPM, no release .tar.gz bundles). Default Linux engine: edgelet.
| Channel | GitHub repo | Container image |
|---|---|---|
| Eclipse (canonical) | eclipse-iofog/edgelet | ghcr.io/eclipse-iofog/edgelet:<tag> |
| Datasance mirror | Datasance/edgelet | ghcr.io/datasance/edgelet:<tag> |
Identical builds and tags; choose the channel that matches your fleet docs. Override install source at runtime with EDGELET_GITHUB_REPO.
curl -fsSL https://github.com/eclipse-iofog/edgelet/releases/download/v1.0.0-beta.1/install.sh -o install.sh
chmod +x install.sh
sudo ./install.sh --version=v1.0.0-beta.1
# dev / CI: sudo ./install.sh --bin-path=build/edgelet-linux-amd64 --version=devcurl -fsSL https://github.com/Datasance/edgelet/releases/download/v1.0.0-beta.1/install.sh -o install.sh
chmod +x install.sh
sudo ./install.sh --version=v1.0.0-beta.1Release artifacts per tag: seven binaries (edgelet-linux-<arch>, edgelet-darwin-<arch>, edgelet-windows-amd64.exe), SHA256SUMS, install.sh, uninstall.sh, and config/CA samples.
sudo edgelet init-config # default config if missing
edgelet daemon # foreground
systemctl start edgelet # production (linux)
edgelet config --a <iofog/pot controller-api-endpoint> # configure which controller edgelet is going to connect (post-install)
edgelet provision <key> # register with Controller (post-install)Installation: docs/edgelet/installation.md · Deployment topology: docs/edgelet/deployment.md
Local IT container tag: edgelet:local (EDGELET_IMAGE=edgelet:local).
sudo sh uninstall.sh
sudo sh uninstall.sh --remove-dataOn-device operator API (daemon↔CLI):
| Item | Value |
|---|---|
| HTTPS | https://127.0.0.1:54321 |
| Routes | /v1/... |
| CLI token | /etc/edgelet/edgelet-api |
| TLS CA | /etc/edgelet/edgeletapi-ca.crt |
Guide: docs/edgelet/edgelet-api-v1.md · OpenAPI: docs/edgelet/edgelet-api-v1-openapi.yaml
Controller REST (field agent) uses /api/v3/... on the controller URL — separate from EdgeletAPI.
| Workflow | Purpose |
|---|---|
.github/workflows/ci-go.yml |
Build, lint, unit tests |
.github/workflows/govulncheck.yml |
Dependency vulnerability scan |
.github/workflows/release.yml |
Release matrix on tag push |
See CONTRIBUTING.md.