What spec.alpha means¶
Explanation — why some fields live under spec.alpha, and what you are signing up for by using one. Nothing here needs a cluster.
Some fields on a HomeAssistant resource sit under spec.alpha rather than at
the top level:
The prefix is a promise in one direction only: these fields may change shape or
disappear entirely, in a minor release, with no deprecation period. Everything
outside spec.alpha gets the usual treatment — a deprecation notice, a
migration path, and removal no earlier than the next major version.
Why have the prefix at all¶
The alternative would be to keep risky features on a branch until they are certain, and ship them straight into the stable spec. That sounds safer and is worse in practice: a feature that touches the pod's security context or its network path cannot be proven by tests alone. It needs real hardware, real Zigbee dongles, real CNIs — things a maintainer's CI does not have.
spec.alpha buys that feedback without holding the stable API hostage to it.
You get to try the feature; the project gets to change its mind. Both halves of
that bargain are the point, which is why the prefix appears in your YAML rather
than in a changelog footnote: you cannot enable one of these by accident.
What qualifies¶
A field starts in spec.alpha when enabling it changes something structural
about the running pod — a new container, a change to its security context, a
change to what it can reach on the network. Those are the changes that can break
an instance in ways unit tests do not catch.
Ordinary optional fields with a safe default do not go here. Neither do purely internal changes you cannot see from the spec. The bar is "could this break someone's running instance in a way we cannot foresee", not "is this new".
How a field graduates¶
spec.alpha.X: false opt-in, off by default
↓
spec.X: false promoted to the stable spec, still off by default
↓
spec.X: true on by default
↓
no longer optional the behaviour is simply how the operator works
Each step is a separate release, and each one is a chance to stop. A field can
also leave the sequence in the other direction: removed outright, because that
is exactly what alpha reserves the right to do.
What is in there today¶
| Field | What it does |
|---|---|
spec.alpha.networkPolicy.enabled |
Creates a NetworkPolicy restricting ingress to the Home Assistant pod |
spec.alpha.devices |
Mounts host device nodes, such as a Zigbee or Z-Wave USB coordinator, into the container |
Both change the pod structurally, which is why they are here. devices in
particular mounts host paths and alters the container's security context — but
deliberately never grants privileged: true, because that would be a far larger
concession than the feature needs.
The current list of fields, with their types, is in the API reference.
If you use one¶
Pin the operator version, read the changelog before upgrading, and be ready to adjust the field. That is the whole cost.
And then, please, say something. This is the part that actually matters, because
the two things keeping a field in spec.alpha are almost never code problems:
- Does it work on hardware nobody here owns? A Zigbee coordinator, a particular CNI, a storage class that behaves differently under load — none of that can be settled by tests. It is settled by someone running it.
- Does anybody want it? A field that works perfectly and nobody uses is not a candidate for promotion. It is a candidate for removal.
A field cannot graduate on silence. If nothing comes back, the safe assumption is that it is unproven and unwanted — so the honest thing to do is drop it, and a feature you rely on disappears for want of one message.
Start a discussion — anyone with a GitHub account can, no permissions needed. What helps most:
- which field you enabled, and what you were trying to achieve;
- your hardware and Kubernetes distribution;
- whether it worked, and what you had to change to make it work;
- what you would want it to do that it does not do yet.
"It worked on a Raspberry Pi 5 with k3s, nothing to report" is a genuinely useful message. It is the kind of evidence that moves a field to the stable spec.