govee2mqtt: Connecting Govee Devices to Home Assistant
Govee2MQTT: Connect Govee lights and devices to Home Assistant
At a glance
- What is it?
- govee2mqtt is a Rust bridge that exposes supported Govee lights and devices to Home Assistant through MQTT. It combines LAN control, an undocumented AWS IoT channel, and Govee's Platform API, but support and reliability depend on the device and available control path.
- Who is it for?
- Adopt govee2mqtt when your Govee hardware is listed as supported and you accept a mixture of LAN, undocumented IoT, and Platform API access. Do not select it as a universal cloud-independent controller, because the README states that LAN support is not universal and the AWS IoT service is undocumented and likely unsupported.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 130 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Why govee2mqtt connects Govee hardware to Home Assistant
govee2mqtt addresses a specific compatibility problem: communicating with Govee hardware and exposing it to Home Assistant through the Home Assistant MQTT Integration. The repository builds a Rust executable named `govee`, which acts as the bridge. This arrangement allows Home Assistant users to control supported devices and make supported scenes or effects available through MQTT entities.
The intended audience is a Home Assistant user who owns Govee equipment and needs automation, local device control, or access to device-specific effects. LAN control is the most interesting path for this audience. According to the README, devices that support the Govee LAN API can offer lower latency and remain controllable when the primary internet connection is offline. That benefit has a strict hardware boundary: the README explicitly says that not every Govee device supports LAN control.
The project covers more than power, brightness, and color. Its documented feature set includes per-device modes, scenes, Tap-to-Run or One Click scenes, live status updates, and segment color. Each capability has different prerequisites. DIY scenes, music modes, and segment color require a Govee API key. Tap-to-Run and One Click scenes require IoT access. Live status updates can use LAN, IoT, or both. This makes govee2mqtt a multi-path bridge rather than a single-protocol adapter.
For device selection, the README points users to `docs/SKUS.md`. That file should be checked before deployment because the existence of a `govee` executable does not establish that a particular lamp, light strip, or other device exposes every control feature. The project also provides separate documentation for the Home Assistant add-on, Docker deployment, configuration, frequently asked questions, and supported SKUs.
How LAN, AWS IoT, and Platform API traffic differs
govee2mqtt can communicate with Govee equipment through three paths. The LAN path uses Govee's LAN API. The device must support that API, the feature must have been enabled through the documented Govee process, and the protocol must work on the local network. The README associates this path with the lowest latency and operation during an internet outage. This is not a general cloud fallback: without a working LAN API, the device must use one of the other paths.
The AWS IoT path uses the Govee account email and password to attempt a connection to an undocumented AWS MQTT-based service. The README describes this service as undocumented and likely unsupported. It says that the path can provide low latency status updates, but it does not offer a compatibility guarantee from Govee. Authentication changes, endpoint changes, or message-format changes could affect this route. The project's use of IoT should therefore be assessed separately from its documented LAN behavior.
The Platform API is used when LAN or AWS IoT control is unavailable. It requires a Govee API key and is associated in the README with DIY scenes, music modes, and segment color. That makes the Platform API useful when a user needs cloud-backed discovery or effects that are not available through the local protocol. It also means that those features depend on Govee developer API access rather than remaining entirely local.
Home Assistant sees the bridge's output through MQTT. Device commands and status information travel through the applicable Govee channel and are then represented as MQTT entities. The Docker deployment uses host networking because the repository says it is required. The image runs the executable in `serve` mode and references persisted IoT credentials and cache data under `/data`. The result is an operational service that must be configured alongside Home Assistant, not merely installed as a library.
Installing the bridge with Docker and checking its startup
The repository provides a Dockerfile and a `docker-compose.yml` file. The Compose file uses the image `ghcr.io/wez/govee2mqtt:latest`, reads configuration from `.env`, and selects host networking. Host networking is significant because the LAN control path needs direct network access. A bridge deployment that does not provide that network arrangement may fail to discover or communicate with supported devices even when the container itself starts.
The Docker Compose service is defined as follows:
version: '3.8'
services:
govee2mqtt:
image: ghcr.io/wez/govee2mqtt:latest
container_name: govee2mqtt
restart: unless-stopped
env_file:
- .env
network_mode: hostThe final image copies the `govee` executable, the Amazon root certificate, and the `assets` directory. It runs as the `govee` user, declares `/data` as a volume, and sets `XDG_CACHE_HOME=/data`. Its default command starts the service and passes the locations of the IoT key and certificate:
CMD ["/app/govee", \
"serve", \
"--govee-iot-key=/data/iot.key", \
"--govee-iot-cert=/data/iot.cert", \
"--amazon-root-ca=/app/AmazonRootCA1.pem"]The README links to `docs/DOCKER.md` for the Docker procedure and `docs/CONFIG.md` for configuration. Those documents should provide the exact `.env` keys and setup sequence. The README does not enumerate the environment variables or give a complete first-run command, so an operator should not infer MQTT broker settings or Govee credentials from the Compose file alone.
After startup, the first useful check is Home Assistant discovery through MQTT. Confirm that expected devices appear, then change one documented state, such as power or color, and observe whether Home Assistant receives the corresponding MQTT update. The README states that devices typically report most changes within a couple of seconds when LAN and/or IoT is available. That is a general expectation, not a promise for every model or network.
Home Assistant add-on setup and first feature checks
For HAOS and Supervised Home Assistant installations, the README directs users to `docs/ADDON.md`. It does not state the add-on repository URL, the menu path, or the complete add-on configuration schema. Those details belong in the add-on document rather than in assumptions made from the Docker Compose example.
The first feature checks should match the documented prerequisites. DIY scenes and music modes should appear in the Effects list for a light in Home Assistant. Tap-to-Run and One Click scenes should appear in the overall Scenes list and under the `Govee to MQTT` device. Segment color should appear as `Segment 00X` light entities associated with the main light device. Missing entities can indicate that the selected feature is unavailable on that device, that the API key is absent, or that the required LAN or IoT path was not configured.
The add-on and Docker routes should not be treated as interchangeable. The Compose file explicitly requires host networking and supplies a `.env` file, while the README describes the add-on as a separate installation path for HAOS and Supervised users. The repository also includes a `Makefile` with `check`, `test`, `fmt`, `docker`, and `addon` targets. The `addon` target invokes a Home Assistant builder container, but the README does not document its prerequisites or resulting add-on installation process.
For development checks, the repository lists `cargo check` under `make check` and `cargo nextest run` under `make test`:
cargo check
cargo nextest runThe `Makefile` shows the commands, but it does not explain how to install `cargo-nextest`. A contributor should verify the tool exists before using the test target. Neither command documents a device integration test, so they do not by themselves establish that a particular Govee model works with the bridge.
Unsupported paths, licensing, and upgrade constraints
The clearest limitation is fragmented device support. LAN control is unavailable on some Govee devices, while other features require the Platform API or AWS IoT. A model can therefore be recognized without supporting every scene, effect, or offline-control feature. The README directs users to `docs/SKUS.md`, and it does not provide a universal compatibility guarantee.
The AWS IoT path presents an additional operational risk because it relies on an undocumented and likely unsupported service. The README does not say that Govee will preserve its endpoint, authentication process, or message format. If LAN control is unavailable and IoT behavior changes, the bridge may lose a control path unless the Platform API can provide the required feature. That makes network isolation and internet independence properties of the LAN path rather than universal properties of govee2mqtt.
The repository is not archived, and the last push was on 2026-06-15. It has no GitHub releases. `Cargo.toml` identifies the Rust package as version `0.1.0`, while the Compose file uses the image tag `ghcr.io/wez/govee2mqtt:latest`. The repository does not document a release-based upgrade policy or rollback procedure. The `/data` volume preserves the location used for IoT files and `XDG_CACHE_HOME`, but the README does not explain migration or backup steps for that directory.
The project is distributed under the MIT license, as recorded in `LICENSE.md`. The README does not provide legal interpretation of the license terms. Users still need to review the license text and account for their own distribution, modification, and compliance requirements. The absence of GitHub releases also means that upgrade planning must rely on the repository, image tag, and configuration documentation rather than a stated release cadence.
govee2mqtt compared with a direct Home Assistant integration
A direct Home Assistant integration is a real alternative when it supports the specific Govee model and the features required by the user. The architectural difference is where protocol handling occurs. A direct integration performs that work inside Home Assistant. govee2mqtt runs a separate Rust service, communicates with Govee through LAN, AWS IoT, or the Platform API, and publishes the result through Home Assistant's MQTT Integration.
The separate bridge is useful when the device or feature set is covered by govee2mqtt but not by the direct integration available to the user. The README specifically identifies per-device modes, segment color, DIY scenes, music modes, and Tap-to-Run or One Click scenes as bridge features. Those capabilities still have prerequisites: some require an API key, some require IoT credentials, and LAN behavior remains device-dependent. A direct integration may therefore avoid the extra service while still lacking a particular effect.
The bridge also has operational costs that a direct integration does not add. The user must run another service, configure `.env` or add-on settings, provide MQTT connectivity to Home Assistant, and, for Docker, use host networking. The IoT path also introduces a dependency on an undocumented service. These costs matter when the desired automation can be implemented through a native Home Assistant path.
The decision should start with the model number and required entity. Check `docs/SKUS.md`, then determine whether LAN control is available and whether the desired scenes require IoT or the Platform API. If local operation during an internet outage is a requirement, the README supports considering govee2mqtt only for a device with a working LAN API. For users who need the documented effects or whose models are listed as supported, the MQTT bridge offers a clear integration path at the cost of another service.
Editorial conclusion
Adopt govee2mqtt when your Govee hardware is listed as supported and you accept a mixture of LAN, undocumented IoT, and Platform API access. Do not select it as a universal cloud-independent controller, because the README states that LAN support is not universal and the AWS IoT service is undocumented and likely unsupported. Verify your model in `docs/SKUS.md`, identify its usable control path, and confirm the required API key or account credentials before configuring Home Assistant's MQTT Integration.
Frequently asked questions
How do I install govee2mqtt for Home Assistant?
The README directs HAOS and Supervised Home Assistant users to `docs/ADDON.md`. Docker users are directed to `docs/DOCKER.md`, whose Compose configuration uses `ghcr.io/wez/govee2mqtt:latest` and requires host networking.
Does govee2mqtt work without an internet connection?
The README says supported devices using the Govee LAN API can be controlled when the primary internet connection is offline. This does not apply to devices without LAN support.
What credentials does govee2mqtt require?
The Platform API, DIY scenes, music modes, and segment color require a Govee API key. The AWS IoT path requires the Govee account email and password. LAN control requires the Govee LAN API to be enabled and functional.
How do I find out whether my Govee device is supported?
The README points users to `docs/SKUS.md` for device compatibility. It also distinguishes devices that support LAN control from devices that do not.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/wez-govee2mqtt)Was this useful?