Back to Work
πŸš€

SimpliCD

Simple CI/CD

Year

2026

Role

Solo Developer

Lightweight, self-hosted deployment tool for VPS and bare-metal servers. Git webhooks, health checks, auto-restart, rollback, and notifications. Single binary, no Docker required.

SimpliCD

Simple continuous deployment for VPS and bare-metal servers. No Docker, no Kubernetes, no agents. Just a single binary.

The Problem

Modern CI/CD tools are built for scale. Jenkins needs a dedicated server. GitHub Actions eats CI minutes. ArgoCD assumes you're running Kubernetes. But most side projects and small-team deployments just need one thing: when code is pushed, pull, build, and restart. The overhead of enterprise CI/CD for "a VPS with three apps" is absurd.

The Solution

SimpliCD is a self-hosted deployment tool written in Go and distributed as a single binary. It watches your Git repositories (via webhooks or polling), pulls changes, runs your build steps, and manages your processes β€” including health checks, auto-restart on crash, rollback, and notifications. Think of it as PM2 meets a lightweight CI/CD runner.

How It Works

  1. Configure β€” Define your projects in a single YAML file: repo URL, branch, build commands, start command, and optional health checks
  2. Deploy β€” Run simplicd deploy my-app or push to your repo and let the webhook trigger it
  3. Monitor β€” SimpliCD manages the process, tracks memory/uptime, auto-restarts on crash, and sends notifications via Slack, Discord, or email
  4. Rollback β€” If something breaks, simplicd rollback my-app instantly reverts to the previous version

Key Features

  • Git Watching β€” GitHub, GitLab, and Gitea webhooks, plus polling for private repos
  • Private Repos β€” Full SSH key and token support for private repositories
  • Health Checks β€” HTTP health checks with configurable timeout and retries
  • Auto-Restart β€” Crash detection with automatic restart, retry limits, and backoff
  • PM2-style Status β€” Beautiful terminal display with PID, uptime, memory usage, and restart count
  • Notifications β€” Email (SMTP), Slack, Discord, and generic webhook notifications
  • Staging Environments β€” Deploy any branch to isolated environments with wildcard matching
  • Rollback β€” Keep N previous versions and rollback with a single command
  • Centralized Logs β€” simplicd logs my-app -f for real-time log tailing
  • Systemd Integration β€” Runs as a system service with proper daemonization

Technical Stack

  • Go 1.22+ β€” For single-binary distribution and performance
  • Chi β€” Lightweight HTTP router for the webhook server
  • YAML β€” Human-readable configuration
  • Systemd β€” Service management integration
  • nfpm β€” Package generation for .deb and .rpm

Usage

# One-liner install
curl -fsSL https://raw.githubusercontent.com/nigelbasa/simplicd/main/install.sh | sudo bash

# Initialize a project interactively
simplicd init

# Deploy
simplicd deploy my-api

# Check status (PM2-style table)
simplicd list

# Follow logs
simplicd logs my-api -f

# Rollback if something breaks
simplicd rollback my-api
# Minimal config (~/.config/simplicd/config.yaml)
server:
  port: 9090

projects:
  - name: my-api
    repo: git@github.com:user/my-api.git
    branch: main
    path: /var/www/my-api
    build:
      - npm ci
      - npm run build
    start: npm start
    health_check:
      url: http://localhost:3000/health
      timeout: 30s

Why I Built This

I run multiple Node.js and Go apps on a single VPS. Every time I tried setting up "proper" CI/CD, I was fighting YAML pipelines, waiting for runners, or configuring Docker when all I needed was git pull && npm run build && pm2 restart. SimpliCD is that workflow, automated and reliable, with crash recovery and notifications built in.

Links

Built With

GoLinuxGitYAML

Want to see more?

View All Projects