Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Go Report CardGo Report Card

This is early alpha version! There's not all features yet implemented, not heavily tested with different devices and code might get large breaking changes until the first release.

Eliot is a open source system for managing containerized applications on top of the IoT device with an emphasis to usability, simplicity, security and stability. Eliot gives simplified app delivery, isolation and additional security to traditional installations.


Docker and Kubernetes have inspired heavily and if you're familiar with those, you find really easy to get started with Eliot.

Built with ❤︎ by Erno Aapa and contributors


Eliot is based on top of the containerd to provide simple, Kubernetes like API for managing containers.

Eliot is built from following components

  • eli - Command line tool for managing the device
  • eliotd - Daemon for the device to manage containers


  • Manage running containers in the device
  • Attach to container process remotely for debugging
  • Fast develop-in-device development start

Let us know what would be the next awesome feature :)

Getting started

See the documentation how to get started with Eliot.

Rest of this document is about developing Eliot itself, not how to develop on top of the Eliot.



Developing eli cli

If you're making changes to the eli command line tool, you can just build and run the command

go run ./cmd/eli/* get nodes

Developing eliotd daemon

To develop eliotd there's two different ways; latter is not tested

  • run eliotd in EliotOS with Linuxkit
  • run eliotd daemon locally

Run EliotOS locally

For development purpose, you can build and run the EliotOS locally, but keep in mind that the environment is amd64 not arm64 so container images what work in this environment might not work in RaspberryPI if the images are not multi-arch images.

  1. Build eliotd binary and Docker image
    • goreleaser --snapshot --rm-dist
  2. Get EliotOS linuxkit configuration
    • curl > rpi3.yml
  3. Update rpi3.yml
    • Check from goreleaser the amd64 container image name
    • Edit the rpi3.yml and update the eliotd image tag to match with the previous value
  4. Build EliotOS image:
    • linuxkit build rpi3.yml
  5. Start image:
    • MacOS: sudo linuxkit run hyperkit -cpus 1 -mem "1048" -disk size=10G -networking vmnet moby
  6. Test connection
    • eli get nodes

Run eliotd locally

This is not tested, but should go roughly like this:

  1. Install runc
  2. Install containerd
  3. Run go run ./cmd/eliotd/* --debug --grpc-api-listen