Contributing
Folk is an open-source project and we welcome contributions from the community — whether it's a bug report, a feature idea, or a code fix.
All issues are tracked in the folk-releases repository.
Reporting a Bug
Before filing a bug, please check existing issues to avoid duplicates.
Bug report structure
Title: <component>: short description of the problem
## Component
Which part of Folk is affected (e.g. `folk-plugin-http`, `folk-core`, `folk-builder`).
Include the file and line number if you know it.
## Problem
What happens? Include steps to reproduce and a minimal code snippet or config.
## Expected behavior
What should happen instead.
## Environment
- Folk extension version (`php -r "echo folk_version();"`)
- PHP version (`php -v`)
- OS (e.g. Ubuntu 24.04, macOS 15, Alpine 3.20)
- Framework and version (e.g. Laravel 11, Symfony 7.2)
Example
Title: folk-plugin-http: multipart file upload corrupts binary data
## Component
folk-plugin-http — src/payload.rs
## Problem
Uploading a binary file via multipart/form-data results in corrupted data.
The uploaded JPEG has different bytes than the original.
Steps to reproduce:
1. Create a route that saves an uploaded file
2. `curl -F "file=@photo.jpg" http://localhost:8080/upload`
3. Compare `md5sum` of original and saved file — they differ
## Expected behavior
Uploaded files should be byte-identical to the originals.
## Environment
- Folk 0.2.6
- PHP 8.3.12 (NTS)
- Ubuntu 24.04
- Laravel 11
Tips for good bug reports
- Minimal reproduction — the smaller the example, the faster the fix
- One issue per bug — don't combine multiple problems in one issue
- Include config — share your
folk.toml(redact passwords) - Include logs — run with
RUST_LOG=debugfor verbose output
Proposing an Idea
Have a feature request or an improvement suggestion? We'd love to hear it.
Use the idea label when creating an issue.
Idea structure
Title: short description of the feature
## Problem
What problem does this solve? Why is it needed?
## Proposed solution
How do you imagine this working? Include config examples,
API sketches, or workflow descriptions.
## Alternatives considered
Have you considered other approaches? Why is this one better?
## Use case
Describe a real-world scenario where this feature would help.
Example
Title: Hot reload for development
## Problem
Every PHP code change requires a manual server restart,
slowing down the development cycle.
## Proposed solution
Add a `--watch` flag or `[dev] watch = true` config option
that monitors PHP files and automatically restarts workers
when changes are detected.
## Alternatives considered
- `max_jobs = 1` — restarts workers after each request,
but much slower than targeted reload
- External file watcher (e.g. `entr`) — works but requires
extra tooling and doesn't integrate with graceful restart
## Use case
During active feature development, I edit controllers and
want to see changes immediately without restarting the server.
Tips for good ideas
- Focus on the problem — explain why before how
- Be specific — "better performance" is vague; "reduce memory usage for idle workers" is actionable
- Consider scope — small, focused features are more likely to be implemented quickly
Labels
| Label | Description |
|---|---|
bug |
Something isn't working |
idea |
Future feature to consider |
enhancement |
Improvement to an existing feature |
critical |
Critical bug or security issue |
important |
Important issue |
core |
folk-core / folk-ext |
api |
folk-api |
plugin-http |
folk-plugin-http |
plugin-grpc |
folk-plugin-grpc |
plugin-jobs |
folk-plugin-jobs |
plugin-metrics |
folk-plugin-metrics |
plugin-process |
folk-plugin-process |
builder |
folk-builder |