Skip to content
Merged
Changes from 10 commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
1eb4e1b
ADD contributing-plugins guide to documentation
mohammedfirdouss Jan 3, 2026
63b2ef5
Merge branch 'master' into docs/contribute-plugins-guide
mohammedfirdouss Jan 6, 2026
c94b58b
Merge branch 'master' into docs/contribute-plugins-guide
mohammedfirdouss Jan 7, 2026
4e6bc95
Merge branch 'master' into docs/contribute-plugins-guide
mohammedfirdouss Jan 7, 2026
1b9491d
docs: enhance contributing plugins guide with plugin architecture det…
mohammedfirdouss Jan 7, 2026
91870e8
docs: clarify section titles for contributing official and community …
mohammedfirdouss Jan 7, 2026
7b1bfea
Merge branch 'master' into docs/contribute-plugins-guide
mohammedfirdouss Jan 8, 2026
71276ca
docs: update concepts documentation
mohammedfirdouss Jan 8, 2026
343e397
docs: remove outdated contributing plugins guide
mohammedfirdouss Jan 8, 2026
a5828ea
docs: enhance contributing plugins guide with new plugin examples
mohammedfirdouss Jan 9, 2026
d621d7f
docs: update contributing plugins guide with configuration examples a…
mohammedfirdouss Jan 11, 2026
afce56c
Merge branch 'master' into docs/contribute-plugins-guide
mohammedfirdouss Jan 11, 2026
f660c5a
Merge branch 'master' into docs/contribute-plugins-guide
mohammedfirdouss Jan 14, 2026
5ce6539
Update docs/content/en/docs-v1.0.x/contribution-guidelines/contributi…
eeshaanSA Jan 15, 2026
05abe98
Update docs/content/en/docs-v1.0.x/contribution-guidelines/contributi…
eeshaanSA Jan 15, 2026
2f60150
Merge branch 'master' into docs/contribute-plugins-guide
mohammedfirdouss Jan 16, 2026
c08b364
Revise contributing plugins documentation
eeshaanSA Jan 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
---
title: "Contribute to piped Plugins"
Comment thread
eeshaanSA marked this conversation as resolved.
Outdated
linkTitle: "Contribute to piped Plugins"
Comment thread
eeshaanSA marked this conversation as resolved.
Outdated
weight: 4
description: >
This page describes how to contribute plugins for piped.
---

PipeCD's plugin architecture allows anyone to extend piped's capabilities by creating custom plugins. This guide explains how to develop and contribute plugins.

## Understanding the plugin architecture

In PipeCD v1, plugins are the actors that execute deployments on behalf of piped. Instead of piped directly deploying to platforms, plugins handle platform-specific logic while piped's core controls deployment flows.

**Key concepts:**

- **Plugins** run as gRPC servers, launched and managed by piped
- **Deploy targets** define where a plugin deploys (e.g., a Kubernetes cluster)
- Plugins can be **official** (maintained by PipeCD team) or **community-contributed**

For a detailed overview, see the [Plugin Architecture blog post](https://pipecd.dev/blog/2024/11/28/overview-of-the-plan-for-pluginnable-pipecd/).

## Plugin types

Plugins can implement one or more of these interfaces:

| Interface | Purpose |
|-----------|---------|
| **Deployment** | Plan and execute deployment stages |
| **LiveState** | Fetch and build the state of live resources |
| **Drift** | Calculate drift between live and git-source manifests |

For example:
- A Kubernetes plugin implements all three interfaces
- A Wait stage plugin only implements the Deployment interface

## Where plugins live

- **Official plugins**: Located in `/pkg/app/pipedv1/plugin/` in the [pipecd repository](https://github.com/pipe-cd/pipecd)
- **Community plugins**: Located in the [pipe-cd/community-plugins](https://github.com/pipe-cd/community-plugins) repository

## Getting started

### Prerequisites

- [Go 1.24 or later](https://go.dev/)
- Understanding of gRPC
- Familiarity with the platform you're building a plugin for

### Study existing plugins

Before creating a new plugin, study the existing ones:

| Plugin | Complexity | Good for learning |
|--------|------------|-------------------|
| [wait](https://github.com/pipe-cd/pipecd/tree/master/pkg/app/pipedv1/plugin/wait) | Simple | Basic plugin structure |
| [waitapproval](https://github.com/pipe-cd/pipecd/tree/master/pkg/app/pipedv1/plugin/waitapproval) | Simple | Stage-only plugin |
| [kubernetes](https://github.com/pipe-cd/pipecd/tree/master/pkg/app/pipedv1/plugin/kubernetes) | Complex | Full-featured plugin |
Comment thread
eeshaanSA marked this conversation as resolved.
| [terraform](https://github.com/pipe-cd/pipecd/tree/master/pkg/app/pipedv1/plugin/terraform) | Complex | Infrastructure as Code plugin |

Community plugins:

| Plugin | Description |
|--------|-------------|
| [opentofu](https://github.com/pipe-cd/community-plugins/tree/main/plugins/opentofu) | OpenTofu deployment plugin |

### Plugin structure

A minimal plugin needs:

```
your-plugin/
├── go.mod
├── go.sum
├── main.go # Entry point, starts gRPC server
├── plugin.go # Implements plugin interfaces
├── config/ # Plugin-specific configuration
│ └── application.go
└── README.md # Documentation
```

### Plugin configuration

Plugins are configured in the piped config:

```yaml
apiVersion: pipecd.dev/v1beta1
kind: Piped
spec:
plugins:
- name: your-plugin
port: 7001 # Any unused port
url: <PLUGIN_URL>
deployTargets: # Optional, depends on plugin
- name: target1
config:
# Plugin-specific config
```

## Contributing to official plugins

1. **Open an issue** first to discuss your plugin idea with maintainers
2. **Fork and clone** the [pipecd repository](https://github.com/pipe-cd/pipecd)
3. **Create your plugin** under `/pkg/app/pipedv1/plugin/your-plugin/`
4. **Write tests** — see existing plugins for patterns
5. **Add a README** documenting configuration and usage
6. **Submit a PR** linking to the discussion issue

### Build and test

```bash
# Build all plugins
make build/plugin

# Run tests
make test/go

# Run piped locally with your plugin
make run/piped CONFIG_FILE=piped-config.yaml EXPERIMENTAL=true INSECURE=true
```

## Contributing to community plugins

The [community-plugins repository](https://github.com/pipe-cd/community-plugins) welcomes plugins that may not fit in the official repo.

1. **Fork** the community-plugins repository
2. **Create your plugin** following the structure above
3. **Submit a PR** with documentation

## Resources
Comment thread
mohammedfirdouss marked this conversation as resolved.

- [RFC: Plugin Architecture](https://github.com/pipe-cd/pipecd/blob/master/docs/rfcs/0015-pipecd-plugin-arch-meta.md)
- [pipedv1 README](https://github.com/pipe-cd/pipecd/blob/master/cmd/pipedv1/README.md)
- [Plugin Alpha Release blog](https://pipecd.dev/blog/2025/06/16/plugin-architecture-piped-alpha-version-has-been-released/)
- [#pipecd Slack channel](https://cloud-native.slack.com/) for questions

Thank you for contributing to PipeCD plugins!