Want to help?

You don't need to write code.

Lemonfiber is young and built in the open. There are real, useful ways to help whatever your background — and the specification is complete, so the path from “interested” to “merged” is unusually clear.

Try it and tell us what broke

Install it, run it against your own stack, and file what breaks — bug reports and rough edges are gold.

Improve the docs

Something unclear? Fix it — every repo's docs are open, and a docs PR is a real contribution.

Design & UX

The web UI and the brand welcome a good eye.

Hang out on Discord

Answer a question, share your setup, help shape the roadmap.

Spread the word

A star or a mention genuinely helps a young project find people.

Everything here, without the website

Every assist, and the command that does the same.

Nothing on this site is the only way to do something. Each command oflfdev, the developer command line, is listed with what it leaves behind and, where there is one, the page here that does the same.

The commands aslfdevlists them in commands.json.
CommandOn this siteWhat it leavesWhat helps after
lfdev next [--repo r] [--area a]goals nobody has claimed, to pick upPick something upNothing until claimed; each unclaimed goal with its feature, repository and how to claim it.—
lfdev claim <id>claim a requirement with a draft pull request hereOnly the command lineA draft pull request in the repository that builds it, opening with an empty signed commit carrying the Spec: line and a sign-off.goal-automations labels it; the board shows the claim on its next run.
lfdev proposeopen a proposal pull request against the specificationOnly the command lineA pull request in spec adding a Draft proposal with no identifier; a maintainer's approval allocates them.proposal-approve allocates the identifiers and moves the proposal in as Draft.
lfdev gapreport what the specification does not say, as a pull requestOnly the command lineThe same Draft proposal pull request, saying what the specification does not say.proposal-approve, as for a proposal.
lfdev doc <url>the repository and file a page on the sites is rendered fromFix a docNothing; the repository and file a page is rendered from, to edit there.assist comments the citation to use when the pull request has none.
lfdev status <id> done --evidence <path>record a requirement done, partial or open, and commit itOnly the command lineA tracker row in this repository, committed signed.status_check.py in that repository's CI.
lfdev blocked <repo>#<n>what a pull request is blocked onOnly the command lineNothing; a report of what a pull request waits on.—
lfdev checks <repo>#<n>a pull request's checks, at most every ten minutesOnly the command lineNothing; a pull request's checks as they stand.—
lfdev board [--version v] [--area a]every feature by maturity, filteredThe boardNothing; every feature by maturity.—
lfdev doctorcheck this clone is set up to commitOnly the command lineNothing; what this clone still needs to commit the way every repository asks.—
lfdev decide <decision> --where <link>record a decision in spec's decision log, and commit itOnly the command lineA row in spec's decision log, committed signed. A maintainer's.—
lfdev goals <version> --add <id>change what a version promises, and open the pull requestOnly the command lineA pull request in spec changing what a version promises. A maintainer's.goals-change checks the change against the train.

Prefer to write code?

Good first issues, live from the org.

View all on GitHub →

No open “good first issue” right now — either they've all been claimed, or the build couldn't reach GitHub. Hop into the Discord and we'll point you at something, or browse all open issues.

Before your first PR

There is one rule, and it is the one that keeps every repository in the org coherent: every change cites a specification identifier that already exists. What that means in practice — where the citation goes, what to do when nothing covers your change, how sign-off works — is written up on the documentation site.