Welcome, and thank you for considering to contribute to formae!
Before getting started, make sure you have the following tools installed:
- Go 1.25.1 or higher
- Pkl 0.30.0 or later
- pkl-gen-go
- Golangci-lint
- REUSE - License Compliance
- swag cli
For the AWS plugin you need a valid AWS credentials file (~/.aws/credentials). You can create one by installing the AWS CLI and running aws configure.
Fork the repository and create your branch from main.
# Build formae in release mode
make build
# Build fomae in debug mode
make build-debug
# Run the tests
make test-all
# Run the agent
go run cmd/formae/main.go agent start
# Run the client
go run cmd/formae/main.goBy default, logs will be in ~/.pel/formae/log/formae.log. Console logs INFO by default and file logs DEBUG. You can change this behavior by editing the configuration.
In order to make code contributions, a signed CLA is required for individuals and corporate contributors.
Before we can accept your contribution, you'll need to sign our Individual Contributor License Agreement (CLA).
- Open a PR, and CLA Assistant will comment with a link
- Click the link and sign the CLA with your GitHub account
- You won't be asked to sign again for future contributions
We might still require additional verification of your identity. In this case we would reach out to you through email, or comment on your PR.
When you represent a company, a legitimate representative of your company needs to sign a CLA. This process is not automated. You can either add a comment to your PR, or reach out to us through legal[at]platform.engineering directly. We require following information before we can move forward with the contribution:
- Legal company name
- Name of the signing person
- Title of the signing person
- Email of the signing person
We will email this person our Corporate CLA for electronic signature. Once the document is signed, we will be able to further address the contribution.
Use the the bug report template (under Issues) for any reproducible issues. (This is the only issue type available via the template chooser.)
If there is a new feature you'd like to suggest, start a new Discussion instead. Our maintainers will review promising suggestions and, if they fit our roadmap, convert them into tracked Issues. The maintainer will loop you in on the Issue when this happens.
Not every idea becomes an Issue right away—we discuss first to ensure it delivers clear user value and avoids random refactorings or low-priority changes. As a small team, we review code carefully but limitedly. Routing discussions upfront helps us focus reviews on vetted, high-impact work. By aligning early in Discussions, we make the most of your effort and our bandwidth, ensuring reviews are efficient and productive for everyone.
- Imitate the conventions of the surrounding code
- Make sure to follow the official Go Code Review Comments
- Run
make lintto verify that your code passes the linter
This project uses the REUSE standard for license management. Compliance is enforced by CI.
Note: This command is idempotent.
make add-licenseVerify compliance:
make lint-reuse// © 2025 Platform Engineering Labs Inc.
//
// SPDX-License-Identifier: FSL-1.1-ALv2For more information about the licenses used in this project, see:
Commits must be signed. Ensure commit verification with SSH key signing. Upload your SSH key as a 'Signing Key' in GitHub Settings -> SSH and GPG keys. Then enable signed commits with these commands:
git config gpg.format ssh
git config user.signingkey ~/.ssh/id_ed25519
git config commit.gpgSign trueEvery PR must reference and close an open issue. This keeps changes targeted and traceable. PRs without an issue will be closed without review. PRs must include test coverage.
When merging PRs use the squash merge option. The commit message for the merge commit should follow Conventional Commits guidelines.
GitHub discussions for feature requests
GitHub issues for bug reports
Discord for quick questions, live help, or casual conversations