Homebridge, reescrito en Swift

Todos tus dispositivos, en la app Casa.

Homeswift lleva a HomeKit las luces, los aires acondicionados, las cámaras y las cerraduras que Apple nunca certificó. Un solo binario pequeño ejecuta tu configuración y tus plugins de Homebridge, sin Node.js ni npm, y en reposo ocupa menos de 10 MB.

v0.12.0, versión preliminarmacOS 14+ y LinuxLicencia MIT

Luz del escritorioEncendido · 70 %
Brillo70 %
SalónCalentando a 21,5°
19,5°Interior
21,5°Calentar a
60 %
Persiana del dormitorioAbierta · 60 %
Luz del porcheEncendido
CafeteraApagado
Puerta principalBloqueada · mantén
PUT/characteristics {"aid":2,"iid":10,"value":true}

Una demo en directo de la interfaz web del puente. Toca, arrastra o mantén pulsada la puerta. Explorar el sistema de diseño →

Rendimiento

Tan ligero que olvidarás que está en marcha.

El mismo controlador HomeKit puso a prueba dos puentes con las mismas 30 bombillas: Homeswift y HAP-NodeJS, la biblioteca que Homebridge lleva dentro.

HomeswiftHAP-NodeJS 2.2.2

Apple M1, macOS 27.0.1, 21 de octubre de 2026, una ejecución de cada uno en loopback. En todas las filas, menos es mejor. La tabla completa, con el caudal y las filas en las que HAP-NodeJS usa menos CPU por petición, está en Benchmarks/README.md.

Qué lleva dentro

Todo lo que necesita un puente. Nada que sobre.

Añádelo con el código de la etiqueta

Emparejamiento con un código de 8 dígitos mediante SRP-6a, sesiones cifradas en cada petición, hasta 16 controladores. Cada accesorio conserva sus ID, así que habitaciones, escenas y automatizaciones sobreviven a los reinicios.

0052
1956

Tu configuración de Homebridge, tal cual

Lee un config.json al estilo de Homebridge. Los plugins conservan sus nombres de plataforma y de opciones, los puentes secundarios funcionan igual, y cada cambio se valida con el esquema del plugin antes de guardarse.

Cámaras y timbres

Vídeo en directo e instantáneas por SRTP, grabación con HomeKit Secure Video, audio bidireccional y el aviso del timbre, con FFmpeg encargándose de la codificación.

Una interfaz web a imagen de Casa

Cada accesorio es un widget en un panel que ordenas a tu gusto. Estado, plugins, configuración, registros y copias de seguridad están al lado, protegidos por tus propias cuentas, con autenticación de dos factores si quieres.

Un Asistente, si lo quieres

Pregunta por qué se ha desconectado una luz, pide que te explique un registro o recibe un resumen diario. Opcional, con presupuesto, y todo lo sensible se oculta antes de que llegue a un proveedor.

Tu casa en Claude y en otras apps de IA

Un servidor MCP que claude.ai y las apps de Claude añaden como conector: inicias sesión con tu cuenta de la interfaz web y eliges lo que puede hacer. Todo lo destructivo pide confirmación antes, cada cambio queda registrado, y cerraduras, puertas de garaje y alarmas pasan por una única herramienta protegida.

Funciona donde funciona tu casa

Un contenedor para amd64 y arm64, un paquete de Synology para DSM 7 o un binario sin más en macOS 14 y Linux.

Gráfico

Toda tu casa, en una sola página.

La página Accesorios dibuja lo que Homeswift ejecuta como un mapa: sus puentes, los plugins de cada uno, sus tipos de dispositivo y cada accesorio, cada plugin con su propio color y el logo de su marca.

  • Busca un nombre o una marca, o filtra por puente, por tipo de dispositivo o por lo que no responde: el gráfico se reorganiza en torno a lo que queda.
  • Haz clic en cualquier nodo para ver su ficha: la imagen en directo de una cámara, las lecturas de un sensor agrupadas por servicio, cada valor explicado al pasar el ratón.
  • Pellizca, desplázate o haz clic en una rama para ampliarla; una tabla ofrece las mismas filas a los lectores de pantalla.

Plugins

Catorce plugins, de serie.

Diez adaptan los plugins de Homebridge que quizá ya usas; Philips Hue e IKEA DIRIGERA hablan con sus puentes en tu red; Wingman suma los accesorios de la app Casa; EcoFlow lee sus estaciones de energía desde la nube de EcoFlow. Cada uno se prueba con una simulación de su dispositivo o de su nube.

EK
Elgato Key LightsKey Light, Ring Light
UP
UniFi ProtectCámaras, timbres, sensores
UA
UniFi AccessCerraduras y lectores
DC
Daikin CloudAires acondicionados
DY
Dyson Pure CoolPurificadores y ventiladores
LG
LG ThinQElectrodomésticos
PH
Philips Ambilight TVTelevisor, mando
GV
GoveeLuces
HU
Philips HueLuces, escenas, efectos
IK
IKEA DIRIGERALuces, enchufes, sensores
eW
eWeLinkInterruptores y enchufes Sonoff
DL
DolphinLimpiafondos
EF
EcoFlowEstaciones de energía, baterías
WingmanLa app Casa, a través de un Mac
+
Adapta el tuyoDe Node.js a Swift, paso a paso

Instalación

En marcha en cinco minutos.

# amd64 y arm64. La red del host permite que HomeKit encuentre el puente por mDNS.
docker run -d --name homeswift --network host \
  --restart unless-stopped \
  -v ~/homeswift:/homeswift \
  ghcr.io/mp-consulting/homeswift:latest
  1. Abre la interfaz web

    En el puerto 8581 del equipo donde se ejecuta el puente.

  2. Crea tu cuenta

    Con el código de configuración que muestra el puente al arrancar.

  3. Añade plugins

    Elígelos en la página Plugins y completa sus ajustes.

  4. Añade el puente en la app Casa

    Escanea el código QR de la página Estado o escribe el código de 8 dígitos.

Para desarrolladores

Una lámpara en veinte líneas.

  • Los 73 servicios y 252 características que conoce HomeKit, con sus unidades, rangos y valores válidos.
  • Concurrencia de Swift 6: los handlers son async, y un error lanzado aparece como «Sin respuesta» en la app Casa.
  • Asigna un valor cuando cambie el dispositivo y todas las apps Casa suscritas se actualizan.
import Homeswift

let light = Service(.lightbulb, name: "Desk Lamp",
                    optional: [.brightness], isPrimary: true)

light.characteristic(.on).onWrite(changesOnly: true) { value in
    try await lamp.setPower(value.boolValue ?? false)
}

let accessory = Accessory(
    id: "desk-lamp", name: "Desk Lamp",
    manufacturer: "Acme", model: "L1",
    category: .lightbulb, services: [light])

let server = try HAPServer(bridge: bridge, accessories: [accessory],
                           storage: FileStorage(name: "my-bridge"))
print("Setup code:", server.setupCode)  // 1234-5678
try await server.run()