Contribute to Excalidraw
Prepare changes, test them, follow pull-request conventions, and contribute translations.
Contribute a focused change from a fork or CodeSandbox, validate it locally and in pull-request checks, and give maintainers enough context to review it. This guide covers the documented contribution process and translation path.
Before you begin
You need a GitHub account and a clear change. For a substantial change, open an issue first. Review the project roadmap and choose an assigned or explicitly available task; new contributors are encouraged to begin with tasks marked Easy.
Prepare a change
Review the roadmap and, when you want to take an item, comment on its issue so a maintainer can assign it and discuss the approach. For a major change, open an issue before writing code.
Fork and clone the repository, install dependencies, and create a branch:
git clone https://github.com/excalidraw/excalidraw.git
cd excalidraw
yarn
git checkout -b your-branch-nameYour changes are isolated from the default branch.
Implement the smallest coherent change, then run yarn fix when you need to reformat code. Review the diff for unrelated files before committing.
Run checks relevant to the change and test manually. New features and bug fixes should include regression coverage. Use the staging environment created for the pull request because local development can differ from deployed behavior.
Use a title with a semantic prefix: feat, fix, docs, style, refactor, perf, test, build, ci, chore, or revert. Describe the user-visible result and link the issue when applicable.
Verify
Check automated results, resolve failures, and manually inspect the staging deployment. Some lint and test checks may remain approval-waiting until maintainers authorize them; that state is not a local test failure.
Translate Excalidraw
Use the project's Crowdin page to translate existing strings. To add a new language, open an issue first so the project can configure it. The documented availability threshold is 85% completion.
Troubleshoot common failures
If a check is waiting for approval, wait for the maintainer-controlled check rather than changing test configuration. If a bug fix has no regression test, add focused coverage. If staging differs from local behavior, record the environment difference and include a reproducible case. If a translation does not appear, verify the documented completion threshold and project enablement.
Next steps
Use Build, test, and self-host Excalidraw for repository commands, or read Embed Excalidraw in React for integration work.