Get started

Running in about a minute.

One binary, one SQLite file. No Kubernetes, no Postgres, no Redis to stand up first. Here's every step, from download to a live run. Or skip the install and poke at the live demo first.

  1. 1

    Install

    One line downloads the right binary for your machine, verifies it against the published checksums, and installs it:

    curl -fsSL https://switchtender.com/install.sh | sh

    Prefer not to pipe to a shell? Every release ships cosign-signed checksums and SBOMs: verify a release in your browser or with cosign, then run the binary you checked.

    Or grab a prebuilt binary yourself. No toolchain required. Every release ships macOS, Linux, and Windows builds you can download and run.

    Pick the build for your platform: the .dmg or a darwin tarball on macOS, a linux tarball on Linux, or the windows zip. Verify it against the SHA256SUMS file on the same release.

    Prefer to build from source? With the Go toolchain installed:

    go install github.com/kordloom/switchtender@latest

    To run Ansible you also need ansible-playbook on the box. Terraform, OpenTofu, Python, and Go runs each need their own toolchain. Bash and PowerShell use what the OS already provides.

  2. 2

    Serve

    Start the server. SQLite is the default. Point --db at a Postgres DSN when you want more than one instance. Set the encryption pair if you plan to store credentials. On a public address with no tokens yet, serve mints your initial admin token and prints it once, so the API requires auth from its very first request; only loopback may run open, and it says so.

    # optional, only needed for stored secrets
    export SWITCHTENDER_ENCRYPTION_KEY=change-me
    export SWITCHTENDER_ENCRYPTION_SALT=change-me-too
    
    switchtender serve --addr :8080 --db switchtender.db
  3. 3

    Open the UI

    The whole interface lives at /ui/. Sign in with the admin token serve just printed: pick Use an API token instead on the login page and paste it. This is where you launch runs and read them as a live host-by-task matrix.

    open http://localhost:8080/ui/
  4. 4

    Launch your first run

    Click Launch run in the UI, or fire one over the API with the token from step 2. No Ansible required for this one. It's a plain Bash run you can watch stream live.

    # the admin token serve printed at startup
    export ST_TOKEN=paste-it-here
    
    curl -s -X POST localhost:8080/v1/runs \
      -H "authorization: Bearer $ST_TOKEN" \
      -H 'content-type: application/json' \
      -d '{"tool":"bash","command":"echo hello from switchtender"}'
  5. 5

    Name your tokens

    The server never listens openly on a network interface: step 2 already minted your initial admin token. Now mint named tokens for each person and each CI job, send them as bearer tokens, and retire the initial one so every credential in the audit trail names its owner.

    switchtender token new --name admin --db switchtender.db
    switchtender token revoke <initial-token-id> --db switchtender.db

Moving from another controller? AWX, Semaphore, Rundeck, and Jenkins each import in one command: projects, inventories, templates, surveys, and schedules. Ansible Automation Platform, Tower, and Ascender share the AWX export format, and even a crontab imports into governed schedules.

Migration guide

Where to next

Run your first job.

Structured runs, balanced splits, fleet memory, and a tamper-evident audit trail, from one binary.