selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

Roborock Local Server logo

Self-host Roborock Local Server

v1.2.1

Local HTTPS/MQTT cloud replacement for Roborock vacuums

ReleaseOpen SourceMIT
Docker ComposeCompose file & guide
docker compose up -d --build
Updated6 days ago
LanguagePython
Setup difficultyAdvanced
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

What is Roborock Local Server?

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 videoVerified 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

Roborock Local Server README

How to install Roborock Local Server

Install Roborock Local Server with Docker Compose

Docker with `docker compose`
Environment variables
ROBOROCK_SERVER_HTTPS_PORT, ROBOROCK_SERVER_MQTT_TLS_PORT
  1. Clone this repository:

    git clone https://github.com/Python-roborock/local_roborock_server
    cd local_roborock_server
    
  2. Install the project dependencies:

    uv sync
    
  3. Run the setup wizard:

    uv run roborock-local-server configure
    
  4. 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.

How to configure Roborock Local Server

  • 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_serverzerosslACME 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_count3Number 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_modelocal_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_count3Add-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_mb10Add-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_mb10Per-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_binarymosquittoName of the Mosquitto executable used by the embedded broker.

    Name of the Mosquitto executable used by the embedded broker.

  • network.https_port555Port served for the emulated HTTPS API (and the /admin dashboard).

    Port served for the emulated HTTPS API (and the /admin dashboard).

  • network.mqtt_tls_port8881Port 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

Roborock Local Server releases & version history

More in Smart Home

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…