Contribute
Pipelet is source-first by design. Every module is in a public Git repository, every API surface is documented from the source itself, and the community is actively encouraged to fix bugs, file issues, and ship features.
Repository layout
Section titled “Repository layout”The Pipelet monorepo splits into three layers:
Layer 1 — OCPP core (the wire)
Section titled “Layer 1 — OCPP core (the wire)”| Module | What it does |
|---|---|
ocpp-broker | Message broker for OCPP 1.6 traffic — owns the WebSocket connections to chargers. |
ocpp-server | REST API + business logic on top of the broker. 39 documented operations. |
ocpp-chargersim | OCPP charger simulator — testing and load-test tool. |
Layer 2 — Platform services (the API)
Section titled “Layer 2 — Platform services (the API)”| Module | What it does |
|---|---|
cpms-headless | Unified REST gateway. The friendly entry point for integrators. 43 operations. |
mcp-server | Model Context Protocol server. Exposes 30 tools to LLM agents. |
automation-service | Workflow engine — consumes broker outbox events. |
automation-studio | TypeScript/React UI for managing automation workflows. |
service-cardata | Vehicle data integration service. |
service-energy | Energy management & metering. |
service-monitoring | Observability collection point. |
Layer 3 — UIs (the people)
Section titled “Layer 3 — UIs (the people)”| Module | Who it’s for |
|---|---|
cpms-ui | Network operators (Flask/Jinja). |
admin-portal | Pipelet operators / support. |
fleet-portal | Fleet managers (B2B). |
cpms-driver-portal | EV drivers (B2C). |
homepage | Marketing site (pipelet.com). |
developer-portal | This site (developer.pipelet.com). |
Getting the code
Section titled “Getting the code”git clone https://github.com/pipelet/pipelet-platform.gitcd pipelet-platformEach module has its own README.md with module-specific setup. Most Python services use pip install -r requirements.txt; most JS services use npm install.
Running the full stack locally
Section titled “Running the full stack locally”The fastest way to get a working development environment is via Docker Compose — see Self-Hosting → Docker Compose Quickstart. For active development on a specific module, run that module from source against the rest of the stack in containers.
Coding conventions
Section titled “Coding conventions”| Aspect | Convention |
|---|---|
| Python style | black formatted, ruff linted, mypy --strict for new code |
| JS/TS style | Prettier formatted, ESLint linted, strict TypeScript |
| Commit messages | Conventional Commits (feat:, fix:, docs:, etc.) |
| Pull requests | One feature per PR, link to an issue, include tests |
| Tests | pytest for Python, vitest for TS |
| Documentation | Update relevant *.md and developer-portal/src/content/docs/*.mdx in the same PR |
Filing an issue
Section titled “Filing an issue”Found a bug, want a feature, have a question? Open an issue in the relevant module’s repo:
- General platform: github.com/pipelet/pipelet-platform/issues
- Headless CPMS:
pipelet/cpms-headless - OCPP server:
pipelet/ocpp-server - MCP server:
pipelet/mcp-server - This portal:
pipelet/developer-portal
Please include:
- Pipelet version (run
cpms-headless --versionor check the Docker tag) - Steps to reproduce
- Expected vs. actual behavior
- Any relevant logs (with API keys redacted)
Submitting a pull request
Section titled “Submitting a pull request”- Fork the relevant module repo.
- Create a feature branch off
main:git checkout -b feat/short-description. - Make your changes. Add or update tests.
- Run the linters and tests locally.
- Commit with a descriptive message.
- Push and open a PR against
mainof the upstream repo. - Respond to review feedback. Squash if asked.
Pipelet maintainers aim to triage PRs within a week and merge straightforward fixes within two.
What we’re looking for
Section titled “What we’re looking for”High-leverage contributions:
- OCPP 2.0.1 coverage — the broker speaks 1.6 today; help fill in the gaps for 2.0.1.
- Additional MCP tools — every CRUD endpoint in the gateway is a candidate for an MCP wrapper.
- TypeScript SDK — auto-generated from the Headless OpenAPI spec.
- Localization of UIs — driver portal and fleet portal are German-only today.
- Documentation — every guide on this portal could use real-world screenshots and longer examples.
Code of conduct
Section titled “Code of conduct”Be kind. Be patient. Assume good faith. Pipelet’s contributor community follows the Contributor Covenant — please read it before participating.
Contact
Section titled “Contact”- General: info@pipelet.com
- Security disclosures: security@pipelet.com (please don’t open public issues for security bugs)
- Real-time chat: Discord coming in Phase 3 — for now, GitHub Discussions on each repo.