Complicated service coordination, made easy to manage.
A native macOS app for managing which server has permission to act. Built for SwiftBot, with room for other apps.
GitHub Releases · Getting Started · Documentation
Note
Ruru is in very early development. I'm designing it around the needs of SwiftBot, so features, setup, and behaviour are highly likely to change.
- See your services, their current owners, and connection status in one place
- Guard any number of services, from SwiftBot to your own apps, each with its own lease length
- Inspect resource locations reported by servers in an opt-in catalogue
- Choose a Preferred Primary for clients that support it
- Search ownership history using readable server names
- Set up Internet Access through built-in Cloudflare support
- Get alerts in macOS notifications or Discord when a service goes down or fails over
- Integrate any app with the RuruClient Swift package or the documented HTTP protocol
- Keep the service running in the menu bar when the window closes
Ruru requires macOS 15.0 or later and an independent Mac that all participating servers can reach. It runs separately from the guarded apps and does not process their workloads.
Public release assets are not published yet. For now, build Ruru from source, move Ruru.app into Applications, and follow the setup guide to pair SwiftBot or integrate another app. Published builds will be available from GitHub Releases.
The repository’s root SwiftPM manifest exposes RuruClient, Ruru’s small,
application-neutral Swift client for lease fencing, pairing, capability discovery
and participant presence. Ruru itself remains a native Xcode app; consumers link
only the RuruClient product. Read the client package guide
and the integration guide before adopting it.
The package is available locally for development now. A versioned remote SwiftPM dependency will be supported when its first RuruClient release tag is published.
Ruru exists to make a complicated feature easy to manage. Keeping multiple servers coordinated takes care; setting them up and seeing which one is allowed to act should be straightforward.
It runs on a separate Mac and gives one server at a time permission to act for each service. If a server cannot reach Ruru, it stops acting when that permission expires. The app brings setup, status, and ownership history together in one place.
Ruru is the Māori name for New Zealand's native owl, also known as the morepork. In Māori tradition the ruru is regarded as a spiritual guardian, which is where the app takes its name: it watches over ownership and keeps the decision in one place.
Ruru is a sister app to SwiftBot and uses its SwiftMesh lease protocol and native console design. The README follows the presentation used by SwiftMiner.
DuckDB Swift provides the database API, wrapping DuckDB's native engine. Cloudflare Tunnel provides the bundled optional connector. Sparkle provides app updates, following SwiftMiner's integration. Application-owned runtime code is Swift; dependencies may include native engines and helpers. Dependency licences and attributions are included in Third-Party Notices.
Open Ruru.xcodeproj and select the Ruru scheme. project.yml is the XcodeGen source of truth. Start with the development guide, architecture, and design reference.
The planned repository is johnwatso/ruru. See the draft release notes and release guide for building, validating, signing, and packaging a universal app. Current validation and remaining deployment work are recorded in the development log.
Ruru was previously named SwiftMesh Witness. Its bundle, Keychain, settings, and tunnel identities are preserved. Version 0.2.0 does not migrate old SQLite storage; read ownership and storage before replacing an existing authority.
Ruru is available under the MIT License. Bundled dependencies retain their own licences.