unsubbed.co

Woodpecker

Released under Apache-2.0, Woodpecker provides simple yet powerful CI/CD engine with extensibility on self-hosted infrastructure.

TL;DR

  • Open-source CI/CD engine, Apache 2.0 licensed, 6,683 GitHub stars [1]
  • Forked from Drone 0.8 after Drone relicensed under Polyform (non-free) [1][3]
  • Docker-native: every pipeline step and plugin is a container [1][4]
  • Lightweight enough to run on a Raspberry Pi; ~100MB RAM for the server, ~30MB for an agent [1][2]
  • Config lives in a .woodpecker.yml file in your repo — familiar if you’ve touched Drone, GitLab CI, or GitHub Actions
  • No per-minute billing, no seat caps, no “free tier” games. Pay for the VPS, that’s it.
  • Best fit: teams already self-hosting Gitea, Forgejo, GitLab, or Codeberg users who want CI without paying CircleCI or GitHub Actions bills
  • Honest caveat: almost no independent third-party review coverage exists for this tool. This review leans on primary sources and project signals.

What is Woodpecker

Woodpecker is a self-hosted CI/CD engine. You push code to your Git forge (GitHub, GitLab, Gitea, Forgejo, Bitbucket, or Bitbucket Data Center), Woodpecker picks up a webhook, reads a .woodpecker.yml file from the repo, and runs each step inside a Docker container on a worker agent [1][4].

That’s the whole model. No proprietary runners. No hidden control plane. No mandatory cloud account. The server schedules jobs, agents execute them, and you can run as many agents as your hardware allows [1].

The project was forked from Drone 0.8 in April 2019 by @laszlocph, after Drone’s maintainers (later acquired by Harness) moved the project to the Polyform Small Business license — which restricts commercial use [3]. Woodpecker kept the Apache 2.0 license from the Drone 0.8 era and has been community-maintained since. Renaming happened in August 2019 [3].

The project is funded through Open Collective and GitHub Sponsors. No VC, no corporate parent, no “open core” with paid features locked behind a login wall [1]. The stated promise on the homepage: “Woodpecker is and always will be totally free” [2].

Why People Choose It

Here’s where I have to be honest: there is almost no third-party review coverage of Woodpecker CI specifically. The usual review aggregators don’t cover it. Search results for “Woodpecker review” mostly return content about Woodpecker.co (the cold-email SaaS, unrelated) or a holiday cottage in England. So we can’t lean on “27 reviewers said X.” Instead, here’s what the project’s own signals tell us:

  • Codeberg runs on it. Codeberg — the European nonprofit Git hosting service that’s become a serious GitHub alternative — uses Woodpecker as its main CI/CD engine [1]. That’s a meaningful vote: Codeberg runs real production workloads for thousands of open-source projects.
  • 6,683 GitHub stars and active development [1]. Not Jenkins-big, but steady for a niche infrastructure tool.
  • Drone refugees. A lot of the adoption traction comes from teams who were on Drone pre-2020 and needed an Apache 2.0 continuation when Drone went proprietary [3]. The config syntax is close enough that migration is mostly mechanical.
  • Community-first governance. The project hosts its own Weblate instance for translations and is explicitly described as “community-focused software that will stay free and open source forever” [3]. This isn’t VC-backed open source with a pricing-page pivot waiting in the wings.

If you’re a non-technical founder, the relevant signal is: this is a project that chose the “hard” path (community funding, Apache 2.0) specifically because the alternative — trusting a commercial CI vendor’s goodwill — burned its maintainers and users once already.

Features: What It Actually Does

Pipeline configuration. One YAML file, .woodpecker.yml, committed to your repo. Each step declares a Docker image and a list of commands. If you’ve written a GitHub Actions or Drone config, you’ll be productive in an hour.

Forge integrations. GitHub, GitLab, Gitea, Forgejo, Bitbucket Cloud, and Bitbucket Data Center are all supported out of the box. Pick your forge, add an OAuth app, point Woodpecker at it. This breadth matters if you’re already using a self-hosted Gitea or Forgejo — most commercial CI doesn’t bother with those.

Docker-native plugins. A “plugin” in Woodpecker is just a Docker image that follows a simple convention [1]. Want to publish to S3? There’s a plugin image for that. Want to write your own? Any Docker image with an entrypoint qualifies. No SDK, no marketplace approval, no vendor lock-in. The plugin catalog lives at woodpecker-ci.org/plugins [2].

Multi-workflow support. You can split pipelines into multiple workflows that depend on each other — useful when you want a fast smoke-test workflow gating a slower full-integration workflow [1].

Matrix builds. Run the same pipeline across combinations of variables (Node 18/20/22 × Ubuntu/Alpine, for example). Standard stuff, but it’s there.

Triggers. Push, pull request, tag, cron schedules, manual (“deploy”) triggers, and webhook triggers. Cron is in-box — no external scheduler needed.

Services. Sidecar containers that run alongside your pipeline. The classic use case: spin up a Postgres or Redis container for your integration tests, tear it down when the pipeline ends.

Secrets. Repo-level and organization-level secrets, injected as environment variables. Not Vault-integrated out of the box, but adequate for most teams.

Horizontal scaling. The server/agent split means scaling CI capacity is just “run more agents” — on more VPSes, on a Kubernetes cluster, on a spare Raspberry Pi in your office. Agents pull jobs from the server; add capacity where you need it [1].

Conditions. when: clauses let you filter steps by branch, event, status, or custom expressions. Branch-specific deploy steps, skip-on-docs-only changes, the usual patterns.

Pricing: SaaS vs Self-Hosted Math

This is where the decision usually gets made. Let’s do the math for a realistic small team.

Scenario: a 5-person team running about 500 CI minutes per day on private repos. Tests, builds, container images, deploys.

GitHub Actions gives private repos 2,000 free minutes per month, then charges roughly $0.008 per Linux minute. 500 min/day × 30 days = 15,000 minutes. Subtract the free 2,000. (15,000 - 2,000) × $0.008 = $104/month, and that climbs fast if you need macOS runners or larger machine types.

CircleCI offers 6,000 credits/month free (~250 build-minutes on default resources), then pricing tiers starting at $15/month for 25,000 credits. A 500-min/day team burns through credits quickly and lands in the $30–100+/month range depending on resource class.

Drone Cloud is no longer available as a standalone product; Drone is now positioned inside the Harness commercial platform [3]. Self-hosting Drone is still possible but under the Polyform license, which restricts commercial use.

Woodpecker self-hosted. Software cost: $0. Infrastructure: a $5–10/month VPS comfortably runs the server plus one agent for a small team [1][2]. Need more throughput? Add a $10 agent box. Running on a home-lab server or existing Kubernetes cluster? Effectively free.

Annual delta: A team that would pay ~$100/month for GitHub Actions saves on the order of $1,100–1,200 per year by switching to a $10/month VPS running Woodpecker. The break-even against admin overhead depends on how much you value your time — if you can get the initial setup done in a day, you’re in the black by week two.

The less-obvious cost saving: no seat-based pricing. Most commercial CI tools bill per developer. Woodpecker doesn’t care if you have 3 engineers or 30 — pipelines are pipelines.

Deployment Reality Check

“Self-hosted” is a word that hides a lot of variance. Here’s what Woodpecker actually asks of you.

Minimum setup: one VPS, Docker installed, docker-compose file, OAuth app registered with your Git forge. The server uses SQLite by default [1], which means no separate database to run for a small team. The official docs walk through this in the intro guide [4].

Resource footprint: ~100MB RAM for the server at idle, ~30MB for an agent at idle [1]. During builds, memory depends entirely on what your pipeline does (a docker build of a big image will use whatever it uses). The project explicitly claims to run on a Raspberry Pi [2][4], which is honest shorthand for “this thing is lightweight.”

What you have to manage yourself:

  • TLS certificates (use Caddy or Traefik in front — 10 minutes of setup)
  • Backups of the SQLite database (cp the file, or use Postgres if you prefer)
  • Upgrades (pull new Docker image, restart — usually painless)
  • Monitoring (Prometheus endpoint exists, wire it into Grafana if you care)
  • Secrets hygiene (Woodpecker stores secrets encrypted, but rotate them like you would anywhere)

What you don’t have to manage: a separate CI runner fleet for every OS, a license server, SSO integration gates, per-user billing, or the vendor’s next pricing change.

Where it gets harder: if you need self-hosted macOS runners for iOS builds, Woodpecker’s Docker-native model makes that awkward (you’d need a Docker-capable macOS host, which Apple doesn’t exactly support). Windows runners have similar friction. If you’re a mobile shop, this is a real limitation.

Pros / Cons

Pros

  • Truly free and open source, Apache 2.0, no rug-pull risk (the project exists because Drone pulled a rug) [3]
  • Tiny resource footprint — runs on a Pi, costs almost nothing to host [1][2]
  • Works with the widest range of forges of any CI tool — GitHub, GitLab, Gitea, Forgejo, Bitbucket, Bitbucket DC [1]
  • Docker-native plugin model: anyone who can build a container can extend it [1]
  • Community-governed, no VC pressure to monetize [1][3]
  • Config syntax close enough to Drone/GitHub Actions that engineers onboard fast

Cons

  • No independent review coverage. You’re trusting primary sources and project signals, not a chorus of third-party validation. That’s uncomfortable for some buyers.
  • Community support only — no paid SLA, no enterprise support contract. If you need a throat to choke, this isn’t it.
  • macOS/Windows CI is awkward due to the Docker-first architecture
  • Smaller plugin ecosystem than GitHub Actions or GitLab CI (though the ones that exist cover the common cases)
  • UI is functional, not polished. It’s fine, not delightful.
  • You own the ops: upgrades, backups, TLS, monitoring. A $10/month VPS doesn’t babysit itself.
  • Smaller community means Googling a weird error sometimes turns up three forum posts instead of thirty Stack Overflow answers

Who Should Use This / Who Shouldn’t

Use Woodpecker if:

  • You’re already self-hosting Gitea, Forgejo, or GitLab and want CI in the same stack
  • You’re a Codeberg user (it’s the native CI there)
  • Your GitHub Actions bill has crossed $50/month and is growing
  • You run Linux-based builds (backend services, Docker images, web apps, static sites)
  • You want config that lives in your repo, not a vendor’s UI
  • You value the “can’t be taken away” property of Apache 2.0 more than the “someone else is on-call” property of SaaS

Don’t use Woodpecker if:

  • You need macOS or Windows CI runners (look at GitHub Actions or self-hosted GitLab runners)
  • You need a paid support contract and SOC 2 attestations from your CI vendor (look at GitLab Ultimate or CircleCI Server)
  • You’re a 1-person shop on the GitHub Actions free tier and don’t hit the 2,000-minute limit — the admin overhead isn’t worth it yet
  • You want a polished UI and a marketplace with thousands of pre-built actions (GitHub Actions wins)
  • You have zero Docker or Linux ops experience and no one on the team who does — the ops surface is small, but it’s nonzero

Alternatives Worth Considering

  • Gitea Actions / Forgejo Actions — both implement a GitHub Actions-compatible runner model. If you’re already running Gitea or Forgejo, you can skip Woodpecker entirely and use the built-in option. The tradeoff: newer, less mature than Woodpecker, and tied to that specific forge.
  • Drone CI — still exists, but under the Polyform Small Business license (no commercial use without a Harness agreement) [3]. If you can live with the license, the tech is close to Woodpecker — they share the same DNA.
  • GitHub Actions — excellent developer experience, huge marketplace, free for public repos. Gets expensive for private repos at scale. Best choice if cost isn’t your top pain.
  • GitLab CI — bundled with GitLab. If you’re already on GitLab, it’s the default and it’s good. If you’re not, standing up GitLab just for CI is overkill.
  • Jenkins — still the 800-pound gorilla. Enormous plugin ecosystem. Heavy, XML-config legacy in places, but battle-tested at huge scale. Use it if you need plugins that don’t exist anywhere else.
  • Concourse — pipeline-as-code with a different (and polarizing) mental model. Powerful for complex workflows, steeper learning curve.

Bottom Line

Woodpecker CI is what Drone would be if it hadn’t gone commercial. If you’re a founder paying more than a lunch-out per month for CI on private Linux repos, the self-hosted math is obvious — you’ll save four figures a year on a $10 VPS. The real cost is the one day of initial ops work and the accepted tradeoff of community-only support. For teams already in the self-hosted Git world, it’s close to a default choice; for everyone else, the question is whether you’d rather pay GitHub or pay a VPS bill.

Sources

  1. Woodpecker CI GitHub repository — https://github.com/woodpecker-ci/woodpecker
  2. Woodpecker CI official website — https://woodpecker-ci.org
  3. Woodpecker CI About page (project history, fork rationale) — https://woodpecker-ci.org/about
  4. Woodpecker CI documentation — introduction — https://woodpecker-ci.org/docs/intro

Features

Integrations & APIs

  • Plugin / Extension System