Quick start
Kinhin turns your Apple Silicon Mac into an autoscaling fleet of ephemeral self-hosted CI runners. This page gets you from zero to a working fleet. New here? Read why kinhin exists.
Requirements
- Apple Silicon Mac (arm64), macOS 15+
- Tart — macOS runner VMs.
kinhin setup repair tartinstalls it (or the setup window does); manual commands are in Installing Tart - An access token for at least one CI platform: GitHub, Gitea, Forgejo or GitLab CE (see Pick your forge and Forge support)
- Optional — Linux jobs. Three options — apple/container microVMs (
brew install container && container system start), Docker containers, or Tart Linux VMs, which need nothing beyond tart itself; see the comparison for when to use each (macOS jobs always need Tart) - ~60 GB free disk for the base image plus per-VM scratch
Sizing the fleet — CPU, memory, and storage recommendations — is covered in Hardware requirements & sizing.
Install (one line)
curl -fsSL https://github.com/RabinApps/kinhin/releases/latest/download/install.sh | bashPinned version, or from a local DMG (air-gapped machines):
curl -fsSL ... | bash -s -- v0.1.0
bash scripts/install.sh /path/to/kinhin-0.1.0-arm64.dmgThe script sha256-verifies the DMG against the release checksums.txt, copies kinhin.app to /Applications, and symlinks the kinhin CLI into your bin dir. Release artifacts are Developer ID signed and notarized, so the app launches with no Gatekeeper prompts — the Open-Anyway dance only applies to old releases or locally built copies.
Pick your forge
One fleet can serve several forges at once. Start with one; you can add more later.
| Forge | Scope | Token | Store it with |
|---|---|---|---|
| GitHub Actions | owner/name repo or org | PAT with repo scope | kinhin auth set |
| Gitea | owner/name or org, plus instance URL | Access token with runner rights | kinhin auth set --gitea |
| Forgejo | owner/name or org, plus instance URL | Access token with runner rights | kinhin auth set --forgejo |
| GitLab CE | group/project or group path, plus instance URL | Access token with create_runner, manage_runner, read_api | kinhin auth set --gitlab |
GitHub is the default account. Every other forge is an entry under accounts: in config.yaml, or you can create it from the CLI:
kinhin auth add gitlab --gitlab --scope group/project --instance https://gitlab.example.comaccounts:
- name: gitlab
forge: gitlab
scope: "group/project"
labels: ["macos"] # runner tags / labels that jobs select onBeta
Gitea, Forgejo and GitLab CE have run real jobs on every runtime; GitHub Actions on Tart macOS VMs and apple/container. Buildkite, Azure Pipelines and Bitbucket Pipelines are planned, not supported yet. See what has been tested, and please report how it goes.
Each forge's setup details, token scopes and job-selection rules are in Forge support.
Set up your first fleet
Do it yourself, or hand the job to an AI agent such as Claude Code: the agent runs the same steps, and you only store the token.
From the terminal
# 0. Install tart (skipped if already installed)
kinhin setup repair tart
# 1. Create a starter config
kinhin config init
# edit ~/Library/Application Support/Kinhin/config.yaml
# -> set the accounts: entry (name/forge/scope) and the labels jobs will request
# 2. Store a token for your forge — it goes in your Keychain, not a file
kinhin auth set # GitHub PAT (repo scope)
kinhin auth set --gitlab # or --gitea, --forgejo
# 3. Check prerequisites and see how many VMs your Mac can host
kinhin doctor
# 4. Prepare the runner base image (once; downloads + provisions a VM, takes a while)
kinhin image prepare
# 5. Go
kinhin start # foreground, Ctrl-C to stop
# or
kinhin daemon install # headless LaunchAgent, survives rebootsDispatch a workflow whose job matches your labels:
jobs:
build:
runs-on: [self-hosted, macos, arm64] # must include all configured labels
steps:
- run: uname -m # arm64 — you're running on your own MacThat example is for GitHub. On other forges, jobs select runners by runner tags (GitLab) or runs-on labels (Gitea, Forgejo). See Forge support.
Watch the fleet: kinhin watch (live) or kinhin status (one shot).
From the menu bar app
Install with the one-liner above, then launch kinhin from Applications. The setup window walks through the same steps — installing tart, creating the config, connecting a forge and storing its token, and preparing the image — then starts the fleet. The menu bar shows the number of live runner VMs.
Signed & notarized
Official releases are Developer ID signed and notarized — no right-click → Open needed. Locally built copies are ad-hoc signed: clear Gatekeeper with xattr -cr /Applications/kinhin.app.
