This repository holds the Dockerfiles, the Docker Buildx Bake configuration, and the
compose files for the container images of Open Voice OS, an
open-source voice assistant platform. The images cover the core runtime, its services, and
the default skills. GitHub Actions builds the images for amd64 and arm64 and publishes
them to Docker Hub and to a GHCR mirror.
Read the documentation for the compose files, the audio setup, and the device mapping.
- Base layers:
ovos-base,ovos-sound-base,ovos-skill-base - Core runtime:
ovos-core - Services:
ovos-audio,ovos-cli(also a terminal client, see below),ovos-listener,ovos-messagebus,ovos-phal,ovos-phal-admin,ovos-gui-websocket - Skills: one image per entry of the
SKILLSlist indocker-bake.hcl
All Python images share ovos-base (Debian slim, Python 3.13, a virtual environment, and a
pinned uv). Each image has a HEALTHCHECK, an SBOM, a
provenance attestation, and a cosign signature.
The ovos-cli image ships ovos-tui-client,
a split-pane terminal for talking to OVOS without a microphone: type what you would have
said, read the reply, and watch which skill answered.
docker exec -it ovos_cli ovos-tuiNo flags needed. The container runs with network_mode: host, so it reaches the
messagebus on 127.0.0.1:8181, and the config and state volumes are already mounted
where the client looks for them.
-it is required: unlike the other services this is an interactive program and needs a
terminal attached.
The images run on Docker or on Podman.
- Docker:
docker pull docker.io/smartgic/ovos-core:alpha - Podman:
podman pull docker.io/smartgic/ovos-core:alpha
The same images, with the same tags and digests, are available from the mirror
ghcr.io/openvoiceos/ovos-docker. Use the mirror if Docker Hub limits your pulls.
| Tag | Content |
|---|---|
alpha |
Built from constraints-alpha.txt of ovos-releases: alpha releases from PyPI |
testing |
Built from constraints-testing.txt: stable versions selected for testing |
stable |
Built from constraints-stable.txt |
latest |
The same image as stable |
<channel>-YYYYMMDD |
An immutable copy of a channel tag, for rollbacks |
- Docker with Buildx (BuildKit). Podman runs the images, but the builds use Docker Buildx Bake.
- Network access, to pull the base images and the dependencies.
- For multi-arch builds, binfmt/qemu.
scripts/bake.shcan install it withtonistiigi/binfmt(setENSURE_BINFMT=true, or use--ensure-binfmt).
Docker Buildx Bake builds the images (docker-bake.hcl and scripts/bake.sh). Do not use
docker build directly: the base image wiring relies on Bake contexts.
- Local build (amd64 only, loaded into Docker):
./scripts/bake.sh --load --no-push - Multi-arch publish (default registry and tag):
./scripts/bake.sh - Multi-arch alpha publish:
TAG=alpha CHANNEL=alpha VERSION=alpha PLATFORMS=linux/amd64,linux/arm64 ./scripts/bake.sh - Build a subset:
./scripts/bake.sh -T stack, or./scripts/bake.sh -T skills - Disable the registry cache:
./scripts/bake.sh --no-cache-from --load --no-push
Note: --load forces linux/amd64, because Docker cannot load multi-arch manifests locally.
- Groups:
default,stack,services,skills - The individual targets are defined in
docker-bake.hcl
docker-bake.hcl and scripts/bake.sh define the defaults:
REGISTRY(defaultdocker.io/smartgic)MIRROR_REGISTRY(default empty; CI usesghcr.io/openvoiceos/ovos-docker): a second registry each image is also pushed toTAGandVERSION(defaultalpha)LATEST_TAG(defaultlatest; applied only whenTAG=stable)CHANNEL(defaultalpha): selects the constraints fileOVOS_RELEASES_REF(defaultmain): the git ref of ovos-releases that suppliesconstraints-${CHANNEL}.txt. Give a commit SHA for a reproducible build.CACHE_REPO(defaultghcr.io/openvoiceos/ovos-docker-cache): the registry build cache, readable without loginCACHE_TO(default off): setmaxto also export the build cache. CI does this.SKILLS: the list of skill names. Each name buildsskill-<name>fromskills/skill-<name>. Add a skill here.PLATFORMS(defaultlinux/amd64,linux/arm64)UV_PRERELEASE(defaultallow): theuv pippre-release policy. Useif-necessary-or-explicitfortestingandstable.ENSURE_BINFMT(defaultauto): settrueto force the binfmt installation, orfalseto skip itBUILDER(defaultovos-bake): the Buildx builder name
Examples:
REGISTRY=docker.io/smartgic TAG=alpha CHANNEL=alpha ./scripts/bake.shTAG=stable CHANNEL=stable UV_PRERELEASE=if-necessary-or-explicit ./scripts/bake.sh -T servicesOVOS_RELEASES_REF=<commit sha> ./scripts/bake.sh -T listener
GitHub Actions builds the images on native amd64 and arm64 runners and publishes them as
multi-arch manifest lists. The workflows are in .github/workflows/:
| Workflow | Trigger | What it builds |
|---|---|---|
on-push.yml |
A commit on dev |
The targets whose build context changed, plus the targets built on top of them, for alpha, testing, and stable |
on-constraints.yml |
A repository_dispatch from ovos-releases, an hourly poll, or a manual run |
For each channel, the images that contain a package whose constraints-<channel>.txt line changed since the last build |
pull-request.yml |
A pull request | The affected targets, for both architectures, without a push |
scheduled-rebuild.yml |
Once a week | Every image of a channel |
build-images.yml |
The workflows above, or a manual run | The reusable build: resolve, build per architecture, verify (labels, platform, a runtime smoke test on each architecture), scan for vulnerabilities, then merge (with a cosign signature and a <channel>-YYYYMMDD tag) |
record-state.yml |
The end of a publishing run | The build-state branch: what each channel was built from |
scripts/affected.py selects the targets. The build-state branch records, for each
channel, the digest, the ovos-releases commit, and the installed packages of each image. Each
image carries the label io.openvoiceos.constraints.ref with the ovos-releases commit that
supplied its constraints.
- OpenVoiceOS/ovos-core: the core runtime that these images package
- OpenVoiceOS/ovos-installer: installs Open Voice OS with these images, or in a virtual environment
- OpenVoiceOS/ovos-releases: the constraints files that pin the packages of each channel
- OpenVoiceOS/ovos-docker-stt: speech-to-text container images
- OpenVoiceOS/ovos-docker-tts: text-to-speech container images
- JarbasHiveMind/hivemind-docker: HiveMind container images
This repository is under the Apache License 2.0.
