Building from Source
Kamoji firmware builds with the standard ESPHome toolchain against one of the YAML configuration files described in the configuration files — for example:
esphome run kamoji-r7-production.yaml
Kamoji's YAML only compiles against ESPHome 2026.3.x. Newer ESPHome
releases throw syntax errors and won't compile it — the YAML hasn't been
updated for changes in later ESPHome versions yet. Pin your esphome
install to a 2026.3.x release before building. This is being worked on;
until it's resolved, using a newer ESPHome version is not a supported path.
Source code
All of Kamoji's YAML configuration and custom ESPHome components are open
source, in the public GitLab repo
kamoji-esphome. This is
the same source the production firmware is built from — the top-level
kamoji-core.yaml / kamoji-r7-production.yaml / kamoji-r8-production.yaml
files described in Configuration files,
plus all components under custom components/ folder.
Using your own ESPHome instance
If you're running ESPHome yourself (CLI, Home Assistant add-on, or otherwise) rather than using this repo directly, there are two ways to pull in Kamoji's custom components:
-
Copy the
kamoji-xxxxx.yamlfile you want to build (e.g.kamoji-r7-production.yaml) into your own ESPHome config folder. -
Then make the custom components available to it, either:
- Copy the components in, or
- Reference the GitLab repo directly
Option A: copy the components folder
Copy the entire components/ folder from
kamoji-esphome into your
ESPHome config folder, alongside the YAML file. This matches how the repo
is laid out already, so nothing else needs to change — kamoji-core.yaml's
external_components: section already points at a local components
path.
Option B: reference the GitLab repo directly
Instead of copying files locally, point ESPHome at the GitLab repo and let
it fetch the components remotely. This means changing the
external_components: section in kamoji-core.yaml that currently reads
from the local components/ folder:
# Load custom components from the GitLab repo instead of a local folder
external_components:
- source:
type: git
url: https://gitlab.com/originallyus/kamoji-esphome
ref: main
refresh: 1d
ref can be a branch, tag, or commit — pin it to a known-good commit if you
want reproducible builds instead of always tracking main. refresh
controls how often ESPHome re-fetches the repo (refresh: 0s forces a
fetch on every build, useful while actively tracking upstream changes).