Show HN: PikoCI – self-hosted CI/CD inspired by Concourse, single binary

xescugc1 pts0 comments

PikoCI - The CI/CD that grows with you

Open Source CI/CD

PikoCI, the CI/CD that grows with you.

One binary. Any database. Any queue. Runs anywhere.

Get Started<br>See it live

Apache 2.0 licensed. Inspired by Concourse CI.

Dogfooding

PikoCI deploys itself.

The pipeline that builds, tests, and deploys PikoCI is publicly visible. PR checks, integration tests against six backends, multi-arch Docker builds, zero-downtime self-redeployment. No account required to view it.

pikoci / main

View full pipeline

Loading live pipeline...

Public pipeline &middot; no login required &middot; view build status, logs, and pipeline graph without an account<br>View pipeline.hcl on GitHub &rarr;

Why PikoCI

What makes it different.

01

Single binary

No Docker Compose. No Kubernetes. No setup scripts. Download and run.

02

Grows with you

Start in memory. Add SQLite for persistence. Add Postgres and distributed workers at scale. The tool never changes.

03

Run pipelines locally

The pipeline is the environment. Run it anywhere. pikoci run -p pipeline.hcl -j test runs any job on your laptop — no server, no push, no waiting. Override resources with local paths. Iterate before touching CI.

04

Four pluggable abstractions

Resource types, runners, services, and secret backends. Define once, reuse across jobs. Source any of them from a URL.

05

HCL pipelines

Terraform-style syntax. More expressive than YAML. Readable, reviewable, versionable.

06

Truly portable

Bundle the binary with a pipeline file and SQLite. Move it anywhere. Run it instantly.

Define your pipeline

Pipelines as code.

Clean HCL syntax. Resources flow through jobs. Dependencies are explicit. No magic.

Basic<br>With services<br>With secrets

resource_type "git" {<br>source = "pikoci://git"

resource "git" "app" {<br>params {<br>url = "https://github.com/myorg/app.git"<br>name = "app"

job "test" {<br>get "git" "app" {<br>trigger = true<br>task "run-tests" {<br>run "docker" {<br>image = "golang:1.25"<br>cmd = "cd app && go test ./..."

service_type "postgres" {<br>start "exec" {<br>path = "/bin/sh"<br>args = ["-ec", "docker run -d --name pikoci-pg -p 5432:5432 -e POSTGRES_PASSWORD=test postgres:16"]<br>ready_check "exec" {<br>path = "/bin/sh"<br>args = ["-ec", "docker exec pikoci-pg pg_isready"]<br>interval = "2s"<br>timeout = "30s"<br>stop "exec" {<br>path = "/bin/sh"<br>args = ["-ec", "docker rm -f pikoci-pg"]

job "integration" {<br>service "postgres" {}

get "cron" "tick" { trigger = true }<br>task "test" {<br>run "exec" {<br>path = "make"<br>args = ["test"]

secret_type "env" {<br>source = "pikoci://file"<br>format = "env"<br>path = "/etc/pikoci/secrets.env"

variable "deploy_token" {<br>type = string<br>secret "env" {<br>key = "DEPLOY_TOKEN"

resource_type "git" {<br>source = "pikoci://git"

resource "git" "app" {<br>params {<br>url = "https://github.com/myorg/app.git"<br>name = "app"<br>token = var.deploy_token

job "deploy" {<br>get "git" "app" { trigger = true }<br>task "push" {<br>run "exec" {<br>path = "/bin/sh"<br>args = ["-c", "cd app && ./deploy.sh"]

View PikoCI's own pipeline.hcl on GitHub &rarr;

Quick start

Running in seconds.

Three commands. No dependencies. Your pipeline is already loaded and running.

$ curl -L https://github.com/pikoci/pikoci/releases/latest/download/linux-amd64 -o pikoci && chmod +x pikoci

$ ./pikoci server --db-system mem --pubsub-system mem --run-worker --pipeline-config pipeline.hcl

# open http://localhost:8080

Your pipeline is already loaded and running.

pikoci pipeline docker test exec path

Related Articles