Contribute to PipeCD
PipeCD is an open source project that anyone in the community can use, improve, and enjoy. We’d love you to join us!
Code of Conduct
PipeCD follows the CNCF Code of Conduct. Please read it to understand which actions are acceptable and which are not.
Ways to Contribute
There are many ways to contribute, and many don’t involve writing code:
- Use PipeCD — Follow the Quickstart and report issues you encounter
- Triage issues — Browse open issues, provide workarounds, ask for clarification, or suggest labels
- Fix bugs — Issues labeled good first issue are great starting points
- Improve docs — See Contribute to PipeCD Documentation
- Participate in discussions — Share ideas in GitHub Discussions
Development Setup
Project Structure
PipeCD consists of several components:
| Component | Description |
|---|---|
| cmd/pipecd | Control Plane — manages deployment data and provides gRPC API |
| cmd/piped | Piped agent — runs in your cluster |
| cmd/pipectl | Command-line tool |
| cmd/launcher | Command executor for remote upgrade |
| web | Web UI |
| docs | Documentation |
Prerequisites
- Go (check
go.modfor version) - Node.js and Yarn (for web development)
- Docker
- kubectl
- kind (Kubernetes in Docker)
Starting a Local Environment
1. Update Dependencies
make update/go-deps
make update/web-deps
Starting a local environment may fail if dependencies are not up to date.
2. Start Local Cluster and Registry
make up/local-cluster
This creates the pipecd Kubernetes namespace and starts a local registry.
To clean up later:
make down/local-cluster
3. Run Control Plane
make run/pipecd
To stop:
make stop/pipecd
4. Port Forward
In a separate terminal:
kubectl port-forward -n pipecd svc/pipecd 8080
5. Access the UI
Open http://localhost:8080?project=quickstart
Login credentials:
- Username:
hello-pipecd - Password:
hello-pipecd
Running Piped Agent
-
Ensure Control Plane is running and accessible.
-
Register a new Piped:
- Go to Settings → Piped (or http://localhost:8080/settings/piped?project=quickstart)
- Add a new piped and copy the generated Piped ID and base64 key
-
Create
piped-config.yamlin the repository root:Tip: Create a
.devfolder (gitignored) for multiple config files.apiVersion: pipecd.dev/v1beta1 kind: Piped spec: projectID: quickstart pipedID: <YOUR_PIPED_ID> pipedKeyData: <YOUR_PIPED_BASE64_KEY> apiAddress: localhost:8080 repositories: - repoId: example remote: git@github.com:pipe-cd/examples.git branch: master syncInterval: 1m plugins: - name: kubernetes port: 7001 url: <PLUGIN_DOWNLOAD_URL> # Get from https://github.com/pipe-cd/pipecd/releases deployTargets: - name: local config: kubeConfigPath: /path/to/.kube/configNote: Plugins are versioned independently from PipeCD. Download URLs for official plugins can be found on the PipeCD releases page. Look for releases tagged with
pkg/app/pipedv1/plugin/kubernetes/. -
Start the Piped agent:
make run/piped CONFIG_FILE=path/to/piped-config.yaml INSECURE=true
Useful Commands
Check the Makefile for available commands. Common ones:
make check # Run all checks (lint, test, etc.)
make test/go # Run Go tests
make test/web # Run web tests
make build/go # Build Go binaries
Pull Request Process
Before You Start
- Find or create an issue — Check if an issue exists, or open one for new features/bugs
- Claim the issue — Comment “I’d like to work on this” to get assigned (expected to submit PR within 7 days)
- Investigate first — Discuss your approach in the issue before coding to reduce back-and-forth on the PR
- Focus on one issue — Especially for newcomers, work on one issue at a time
Submitting a Pull Request
-
Keep PRs small — Aim for ~300 lines of diff. Split larger changes into multiple PRs.
-
Use descriptive titles — Follow commit message style: present tense, capitalize first letter
Add imports to Terraform plan result -
Sign off commits — Required for DCO compliance:
git commit -s -m "Your commit message" -
Run checks before submitting:
make check -
Target the
masterbranch — All PRs should be opened againstmaster
User-Facing Changes
If your change affects users, update the PR description:
**Does this PR introduce a user-facing change?**:
- **How are users affected by this change**:
- **Is this breaking change**:
- **How to migrate (if breaking change)**:
Licensing
By contributing, you agree to license your contributions under the Apache License Version 2.0. Add this header to new files:
// Copyright 2025 The PipeCD Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
Reporting Issues
Bugs
File bugs at GitHub Issues:
- One issue, one bug
- Provide reproduction steps — List all steps to reproduce the issue
Security Issues
Report security vulnerabilities privately via Slack or Twitter DM to maintainers listed in MAINTAINERS.md.
Feature Requests
- Enhancement request — Improvements to existing features
- Feature request — Entirely new features
Join the Community
Slack
We have a #pipecd channel on CNCF Slack for discussions and help. You can also assist other users in the channel.
Community Meetings
We host PipeCD Development and Community Meetings every 2 weeks where we share project news, demos, answer questions, and triage issues. View the Meeting Notes and Agenda.
Become a Member
If you’d like to join the pipe-cd GitHub organization:
- Have at least 5 PRs merged to repositories in the pipe-cd organization
- Attend a PipeCD public community meeting
Membership isn’t required to contribute—it’s for those who want to contribute long-term or take ownership of features.
What Happens Next?
The maintainers will review your PR. We’ll help with obvious issues and work with you to get it merged. Thank you for contributing!
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.