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.
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, and child bridges work the same way.
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 sign-in.
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.
Scoped tokens, a confirmation for anything destructive, and an audit log. 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.
Plugins
Each one is a port of the Homebridge plugin you may already use, 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.5.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()