Skip to content

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 tart installs 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) ​

bash
curl -fsSL https://github.com/RabinApps/kinhin/releases/latest/download/install.sh | bash

Pinned version, or from a local DMG (air-gapped machines):

bash
curl -fsSL ... | bash -s -- v0.1.0
bash scripts/install.sh /path/to/kinhin-0.1.0-arm64.dmg

The 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.

ForgeScopeTokenStore it with
GitHub Actionsowner/name repo or orgPAT with repo scopekinhin auth set
Giteaowner/name or org, plus instance URLAccess token with runner rightskinhin auth set --gitea
Forgejoowner/name or org, plus instance URLAccess token with runner rightskinhin auth set --forgejo
GitLab CEgroup/project or group path, plus instance URLAccess token with create_runner, manage_runner, read_apikinhin 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:

bash
kinhin auth add gitlab --gitlab --scope group/project --instance https://gitlab.example.com
yaml
accounts:
  - name: gitlab
    forge: gitlab
    scope: "group/project"
    labels: ["macos"] # runner tags / labels that jobs select on

Beta

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 ​

bash
# 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 reboots

Dispatch a workflow whose job matches your labels:

yaml
jobs:
  build:
    runs-on: [self-hosted, macos, arm64] # must include all configured labels
    steps:
      - run: uname -m # arm64 — you're running on your own Mac

That 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.