Thank you for helping improve AFFiNE. Contributions can take many forms: reporting a reproducible bug, refining an idea, improving documentation or translations, writing tests, or changing code.
This page is the short contributor entry point. The AFFiNE core repository remains the source of truth for contribution rules and the current build guide.
| Contribution | Start here |
|---|---|
| Report a bug | Search existing issues, then use the AFFiNE issue form. Include the affected platform, app version, reproduction steps, and useful logs or screenshots. |
| Propose a feature | Start in GitHub Discussions so the problem and scope can be discussed before implementation. |
| Fix code or tests | Browse good first issues or reviewed issues, then follow the code workflow below. |
| Improve these docs | Report a documentation problem through the public AFFiNE issue form or start a GitHub Discussion. If you maintain AFFiNE.docs, edit the repository-owned source under content-overrides/docs/, run yarn sync:content-overrides, and commit the source together with its checked-in docs/ mirror. |
| Improve translations | Read the current i18n package guide and coordinate through AFFiNE Discord. |
| Report a vulnerability | Follow the private reporting instructions in the Security Policy. Do not open a public issue for an undisclosed vulnerability. |
license/cla check must be green for every committer before a pull request can merge.Fork and clone toeverything/AFFiNE, then add the upstream repository and create your branch from the current development branch:
Use the Node version pinned in .nvmrc, enable Corepack for the Yarn version pinned by the repository, and follow the Building AFFiNE Web guide.
For other targets, use the current core guides:
Run the checks that cover the code you changed. The repository-level baseline is:
Large test suites can be targeted by workspace; the current build guide lists the supported web, cloud, desktop, mobile, and BlockSuite suites. Add or update tests for behavior changes, and include screenshots or recordings for visible UI changes.
For AFFiNE.docs changes, run:
canary. AFFiNE.docs pull requests use that repository's current default branch.fix(editor): keep selection after paste or docs: refresh contributor setup.license/cla, title, build, and test checks green.A maintainer decides when a pull request is ready to merge. A merged change, a canary build, and a public release are separate states; do not rely on a fixed deployment time.