Add it with the code on the label
Pair setup with an 8-digit code over SRP-6a, encrypted sessions on every request, up to 16 controllers. Every accessory keeps its IDs, so rooms, scenes and automations survive restarts.
1956
Homebridge, rewritten in Swift
Homeswift speaks HomeKit for the lights, air conditioners, cameras and locks Apple never certified. One small binary runs your Homebridge config and plugins, with no Node.js and no npm, and idles in under 10 MB.
A live demo of the bridge's web UI. Tap, drag, or hold the door. Explore the design system →
Performance
The same HomeKit controller drove two bridges with the same 30 lightbulbs: Homeswift, and HAP-NodeJS, the library inside Homebridge.
Apple M1, macOS 27.0.1, 21 October 2026, one run each over loopback. Lower is better on every row. The full table, with throughput and the rows where HAP-NodeJS uses less CPU per request, is in Benchmarks/README.md.
What's inside
Pair setup with an 8-digit code over SRP-6a, encrypted sessions on every request, up to 16 controllers. Every accessory keeps its IDs, so rooms, scenes and automations survive restarts.
Reads a Homebridge-style config.json. Plugins keep their platform and option names, child bridges work the same way, and an edit is checked against the plugin's schema before it is saved.
Live video and snapshots over SRTP, HomeKit Secure Video recording, two-way audio and the doorbell's ring, with FFmpeg doing the encoding.
Every accessory is a widget on a wall you arrange. Status, plugins, config, logs and backups sit beside it, behind your own accounts, with two-factor if you like.
Ask why a light dropped off, explain a log, or get a daily digest. Optional, with a budget, and everything is redacted before a provider sees it.
An MCP server that claude.ai and the Claude apps add as a connector: you sign in with your web UI account and choose what it may do. Anything destructive asks first, every change is audited, and locks, garage doors and alarms go through one guarded tool.
A container for amd64 and arm64, a Synology package for DSM 7, or a plain binary on macOS 14 and Linux.
Graph
The Accessories page draws what Homeswift runs as a map: its bridges, the plugins on each, their device types and every accessory, each plugin in its own colour with its brand's logo.
Plugins
Ten are ports of the Homebridge plugins you may already use; Philips Hue and IKEA DIRIGERA talk to their bridges on your network; Wingman brings in the Home app's own accessories; EcoFlow reads its power stations from EcoFlow's cloud. Each is tested against a fake of its device or cloud.
Install
# amd64 and arm64. Host networking lets HomeKit find the bridge over mDNS.
docker run -d --name homeswift --network host \
--restart unless-stopped \
-v ~/homeswift:/homeswift \
ghcr.io/mp-consulting/homeswift:latest
# DSM 7.0 or later, x86_64 and aarch64 models. No Docker needed. # 1. Download the .spk for your model from the latest release: https://github.com/mp-consulting/homeswift/releases/latest # 2. Package Center › Manual Install, then follow the wizard. # 3. Open Homeswift from DSM's main menu.
// Package.swift: build your own accessory on the library. dependencies: [ .package(url: "https://github.com/mp-consulting/homeswift.git", from: "0.12.0"), ]
On port 8581 of the machine running the bridge.
With the set-up code the bridge prints when it starts.
Pick them on the Plugins page and fill in their settings.
Scan the QR code on the Status page, or type the 8-digit code.
For developers
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()