Alternative to Roborock cloud backend Smart Home IoT Home Automation$ docker compose up -d --build
Stars 1 200
CPU 1 CPU core
RAM 1 GB
Ports 555 (HTTPS API listener (cloud endpoint emulation, admin dashboard at /admin)), 8881 (MQTT over TLS listener for the vacuum) Docker ghcr.io/python-roborock/local_roborock_server
All details
What is Roborock Local Server? Roborock Local Server emulates the HTTPS and MQTT services a robot vacuum expects from its maker, so the device keeps its maps and controls on a network with no internet access. Nothing must be rooted, soldered or opened up, and a Wi-Fi reset on the robot puts it back into factory pairing mode. Getting there takes preparation: the hostname comes from a domain you own, must begin with api-, has to resolve to the machine's LAN address through local DNS you run yourself (your router, AdGuard Home or Pi-hole), and needs a trusted certificate that Cloudflare DNS-01 automation can issue and renew via ZeroSSL or Actalis, or that you supply as files. Run the published GHCR container image with Docker Compose on a Linux host, or register this repository in the Home Assistant Add-on Store and install the matching add-on; a setup wizard generates the configuration, and pairing happens afterwards from a second machine using the guided onboarding CLI or GUI, including for brand-new units never registered in the cloud. Everyday control comes from Home Assistant's Roborock integration, the open-source LocalRock phone app, or the stock Roborock app once MITM interception (plus a patched APK on Android) sends it your way; camera-equipped models can also push live video to a local WebRTC consumer through a built-in or external TURN relay. Documented limits: no firmware updates, no scheduled routines, the entry-level Q models are unsupported, and China-market units reject commands outside China.
Show more Should you self-host Roborock Local Server? Roborock Local Server scores 54/100 on selfhost.directory (how scoring works ) and ranks #3 of 5 in Smart Home . It has 1 200 GitHub stars.
It shipped 8 stable releases in the past year. The latest, v1.2.1, came out on 8 October 2026. New versions land roughly every 8 days.
Setup is advanced: plan for several services and some ongoing maintenance. An official Docker image is available. It is MIT-licensed and written mostly in Python.
Its closest alternative on selfhost.directory is home-assistant-matter-hub (59/100, 1 314 stars). It scores higher overall, so compare the two before you pick. See Roborock Local Server vs home-assistant-matter-hub side by side.
Features Automatic Certificate Renewal
Bring-your-own TLS certificates
Cloud data import
Cloud-free local control
Device onboarding
Embedded MQTT broker
Firmware Updates
Home Assistant Integration
Live camera video Verified on Saros 10R and Qrevo MaxV; other camera models may bootstrap differently.
Live map streaming
Log Rotation
Mobile app front-ends
Reverse Proxy Support
TURN relay support
Web admin dashboard
== Readme## Install$ Config~~ Updates
Roborock Local Server README
How to install Roborock Local Server Docker Compose Home Assistant
Install Roborock Local Server with Docker Compose Docker with `docker compose`
Environment variables ROBOROCK_SERVER_HTTPS_PORT, ROBOROCK_SERVER_MQTT_TLS_PORT
Clone this repository:
git clone https://github.com/Python-roborock/local_roborock_server
cd local_roborock_server
Install the project dependencies:
uv sync
Run the setup wizard:
uv run roborock-local-server configure
Start the container:
docker compose up -d --build
Linux host or VM; requires a local-DNS hostname beginning with api-, certificates via Cloudflare DNS-01 or provided files.
Install Roborock Local Server with Home Assistant
Open the Home Assistant Add-on Store.
Add this repository under Repositories :
https://github.com/Python-roborock/local_roborock_server
Install Roborock Local Server .
Fill the add-on options:
stack_fqdn
https_port
mqtt_tls_port
region
admin_password
protocol_login_email
protocol_login_pin
Start the add-on.
Add-on uses the same container image as the Docker deployment and always runs the embedded MQTT broker.
How to configure Roborock Local Server Expand all Copy as .env (33)
acme_eab_hmac_keyActalis ACME external-account-binding HMAC key. Actalis ACME external-account-binding HMAC key.
acme_eab_kidActalis ACME external-account-binding key ID, needed when the CA is actalis. Actalis ACME external-account-binding key ID, needed when the CA is actalis.
acme_server= zerosslACME certificate authority used for automatic issuance. ACME certificate authority used for automatic issuance.
values: zerossl | actalis
admin_passwordAdd-on option: password for the admin dashboard. Add-on option: password for the admin dashboard.
admin.password_hashHash backing the password that signs in to the local /admin dashboard. Hash backing the password that signs in to the local /admin dashboard.
admin.protocol_login_emailLogin email the Roborock app or Home Assistant uses against the local stack. Login email the Roborock app or Home Assistant uses against the local stack.
admin.protocol_login_pin_hashHash backing the 6-digit local PIN used as the verification code. Hash backing the 6-digit local PIN used as the verification code.
admin.session_secretSecret backing admin sessions; also used as the protocol-auth sync secret for the MITM app flow. Secret backing admin sessions; also used as the protocol-auth sync secret for the MITM app flow.
advertised_https_portPublic HTTPS port advertised to vacuums, apps and Home Assistant when a proxy remaps ports. Public HTTPS port advertised to vacuums, apps and Home Assistant when a proxy remaps ports.
advertised_mqtt_tls_portPublic MQTT/TLS port advertised to clients when a proxy remaps ports. Public MQTT/TLS port advertised to clients when a proxy remaps ports.
backup_count= 3Number of numbered log backups kept (Docker/standalone config.toml). Number of numbered log backups kept (Docker/standalone config.toml).
values: integer from 0 to 20
bind_hostAddress the listeners bind to. Address the listeners bind to.
broker.hostHostname or IP of your own MQTT broker when broker mode is external. Hostname or IP of your own MQTT broker when broker mode is external.
broker.modeWhether the stack uses its bundled Mosquitto broker or an outside one. Whether the stack uses its bundled Mosquitto broker or an outside one.
values: embedded | external
cert_filePath (evaluated inside the container) to the supplied full-chain certificate. Path (evaluated inside the container) to the supplied full-chain certificate.
cloudflare_tokenAdd-on option: Cloudflare API token with DNS edit rights on your zone. Add-on option: Cloudflare API token with DNS edit rights on your zone.
cloudflare_token_fileACME account email address. ACME account email address.
data_dirDirectory holding state, certificates, logs and secrets. Directory holding state, certificates, logs and secrets.
enable_topic_bridgeKeep the MQTT topic bridge running between the emulated and local broker sides. Keep the MQTT topic bridge running between the emulated and local broker sides.
values: true | false
key_filePath (evaluated inside the container) to the supplied private key. Path (evaluated inside the container) to the supplied private key.
listener_mode= local_tlsWhich side terminates TLS: the server itself or a proxy in front of it. Which side terminates TLS: the server itself or a proxy in front of it.
values: local_tls | external_tls
log_backup_count= 3Add-on option for the number of log backups kept. Add-on option for the number of log backups kept.
values: integer from 0 to 20
log_max_size_mb= 10Add-on option for the per-file log size limit in MiB. Add-on option for the per-file log size limit in MiB.
values: integer from 1 to 1024
max_size_mb= 10Per-file size limit in MiB for the rotated service logs and protocol traces (Docker/standalone config.toml). Per-file size limit in MiB for the rotated service logs and protocol traces (Docker/standalone config.toml).
values: integer from 1 to 1024
mosquitto_binary= mosquittoName of the Mosquitto executable used by the embedded broker. Name of the Mosquitto executable used by the embedded broker.
network.https_port= 555Port served for the emulated HTTPS API (and the /admin dashboard). Port served for the emulated HTTPS API (and the /admin dashboard).
network.mqtt_tls_port= 8881Port served for MQTT over TLS. Port served for MQTT over TLS.
network.stack_fqdnThe single hostname the whole stack serves; must start with api- and live in a domain you own. The single hostname the whole stack serves; must start with api- and live in a domain you own.
new_connections_enabledAllows previously unseen devices to connect; can be turned off to lock the stack down. Allows previously unseen devices to connect; can be turned off to lock the stack down.
values: true | false
portMQTT broker port. MQTT broker port.
values: 1883 for an external broker
protocol_auth_enabledEnables the email-plus-PIN protocol login used by app and Home Assistant clients. Enables the email-plus-PIN protocol login used by app and Home Assistant clients.
values: true | false
protocol_login_pinAdd-on option: 6-digit local PIN that clients enter as the login code. Add-on option: 6-digit local PIN that clients enter as the login code.
regionCloud region the stack emulates. Cloud region the stack emulates.
renew_check_secondsHow often the renewal loop checks certificates, in seconds. How often the renewal loop checks certificates, in seconds.
renew_days_beforeDays before expiry at which a certificate is renewed. Days before expiry at which a certificate is renewed.
ROBOROCK_SERVER_HTTPS_PORTEnvironment variable overriding the published HTTPS port in Docker Compose. Environment variable overriding the published HTTPS port in Docker Compose.
ROBOROCK_SERVER_MQTT_TLS_PORTEnvironment variable overriding the published MQTT TLS port in Docker Compose. Environment variable overriding the published MQTT TLS port in Docker Compose.
session_ttl_secondsHow long an admin dashboard session stays valid, in seconds. How long an admin dashboard session stays valid, in seconds.
timezoneTimezone returned by the bootstrap location route; falls back to the region default. Timezone returned by the bootstrap location route; falls back to the region default.
tls.base_domainDomain used for DNS-01 wildcard certificate issuance and renewal. Domain used for DNS-01 wildcard certificate issuance and renewal.
tls_base_domainAdd-on option: domain used for ACME issuance. Add-on option: domain used for ACME issuance.
tls_emailAdd-on option: ACME account email. Add-on option: ACME account email.
tls.modeCertificate strategy: ACME issuance via Cloudflare or certificate files you supply. Certificate strategy: ACME issuance via Cloudflare or certificate files you supply.
values: cloudflare_acme | provided
tls_modeAdd-on option selecting provided certificates versus Cloudflare ACME automation. Add-on option selecting provided certificates versus Cloudflare ACME automation.
values: provided | cloudflare_acme
I'm on any version v1.2.0 v1.1.0 v1.0.2 v1.0.1 v1.0.0 v0.0.6 v0.0.5
AI summary Improved compatibility and fixed port handling
Show more SamsungTV Smart 📺 Home Assistant SamsungTV Smart integration with SmartThings API Support.
smart-mirror Self-hosted open-source voice smart mirror for the Raspberry Pi: control IoT devices by speech, display info services, with plugins, wake-word spotting and remote config.
smart-watering-system Self-hosted open-source smart irrigation controller for Rachio using ET modeling, weather stations, satellite imagery, and utility meter data for precise watering.
WebThings Gateway An open-source, self-hosted Web of Things smart home hub: control Zigbee and Z-Wave devices from one web UI, automate with drag-and-drop rules, and chart sensor logs.
Willow Self-hosted open-source ESP32 voice-assistant firmware for $50 hardware, with wake-word detection, on-device or server STT, and Home Assistant integration.
Circadian Lighting Circadian Lighting custom component for Home Assistant
diyHue Self-hosted, open-source Philips Hue Bridge emulator controlling 50+ light types via Hue app and Home Assistant.
FHEM FHEM is a GPL-licensed Perl server for home automation, enabling users to automate tasks like switching lamps, shutters, and heating, as well as logging events such as temperature and humidity.
free-sleep Open-source, self-hosted server that runs on jailbroken Eight Sleep pods for local web control of temperature, schedules, alarms and sleep biometrics.
Gladys Self-hosted, open-source smart home platform with 882+ integrations, local control, and optional paid remote access.
Home Assistant Self-hosted open-source home automation platform with 1500+ integrations, powerful automations, customizable dashboards, and a built-in voice assistant.
home-assistant-matter-hub Self-hosted open-source Matter bridge that publishes Home Assistant entities to Apple Home, Alexa, Google Home, SmartThings and Aqara Home, configured through a web UI.
Rate this project Click to rate — no account needed.
Loading comments…
0 comments