Deploy anywhere. Simply.

Playbook-based deployment tool with concurrent execution, built-in secrets management, and a single binary with zero dependencies.

spot -p deploy.yml -t prod --concurrent=2
spot v1.0.0 [web1 prod1.example.com:22] run task "deploy-app", commands: 4 [web1 prod1.example.com:22] completed command "copy config" {copy: app.conf → /etc/app/} (42ms) [web1 prod1.example.com:22] completed command "sync assets" {sync: ./dist → /var/www/} (380ms) [web1 prod1.example.com:22] completed command "restart service" {script: systemctl restart app} (95ms) [web1 prod1.example.com:22] completed command "health check" {wait: curl localhost:8080/health} (1.2s) [web1 prod1.example.com:22] completed task "deploy-app", commands: 4 (1.7s) [web2 prod2.example.com:22] run task "deploy-app", commands: 4 [web2 prod2.example.com:22] completed command "copy config" {copy: app.conf → /etc/app/} (38ms) ...

Why Spot?

Deployment should be simple. Spot makes it that way.

Single Binary

Download one file. No runtime, no dependencies. Works on Linux, macOS, and Windows.

No Agents

Pure SSH. No daemons to install or manage on remote hosts. If you can SSH, you can deploy.

Simple Config

Plain YAML or TOML. No complex DSL to learn. If you know YAML, you already know Spot.

Just Enough

Focused toolset for real-world deployments. No bloat, no learning curve, no surprises.

Features

Everything you need for reliable deployments, nothing you don't.

Playbook Configuration

Define tasks in simple YAML or TOML. No complex DSL to learn, just straightforward configuration.

Concurrent Execution

Execute tasks on multiple hosts simultaneously with configurable parallelism.

Secrets Management

Built-in encrypted secrets with multiple providers: SQLite, Vault, AWS, Ansible Vault.

Dry-Run Mode

Preview exactly what will happen before executing. See all commands without changes.

Ad-hoc Commands

Run quick one-off commands across multiple hosts without creating a playbook.

Inventory Management

Organize hosts into groups with tags. Load inventory from files or URLs.

How It Works

Three simple steps to deploy your application.

1

Define Your Playbook

Create a YAML file with your tasks and commands.

user: deploy ssh_key: ~/.ssh/id_rsa targets: prod: hosts: - host: prod1.example.com - host: prod2.example.com tasks: - name: deploy-app commands: - name: copy config copy: {src: "app.conf", dst: "/etc/app/"}
2

Configure Inventory

Organize your hosts into groups with optional tags.

groups: web: - host: web1.example.com name: web1 - host: web2.example.com name: web2 db: - host: db1.example.com tags: [primary, us-east]
3

Execute with Spot

Run your playbook with optional concurrency.

# Run on production targets $ spot -p deploy.yml -t prod # Run with 4 concurrent hosts $ spot -p deploy.yml -t prod -c 4 # Dry run to preview changes $ spot -p deploy.yml -t prod --dry # Run specific task only $ spot -p deploy.yml -t prod -n deploy-app

Command Types

Built-in commands for common deployment operations.

script

Execute shell scripts on remote hosts with environment variables.

copy

Copy files with glob patterns, mkdir support, push/pull directions.

sync

Synchronize directories with delete option and exclusion patterns.

delete

Remove files or directories with optional recursive deletion.

wait

Wait for a condition with configurable timeout and intervals.

line

Manipulate config file lines with regex patterns.

Installation

Get started in seconds with your preferred method.

Homebrew

brew tap umputun/apps brew install umputun/apps/spot

Go Install

go install github.com/umputun/spot/cmd/spot@latest go install github.com/umputun/spot/cmd/spot-secrets@latest

Binary Release

# Download from releases page github.com/umputun/spot/releases