π Thanks for your interest in contributing to EUI! π
We welcome and encourage contributions.
However, because EUI has a large footprint in Elastic products, we must maintain a high standard of quality and due diligence for contributions. The guidance below outlines our expectations. While we'd hate to turn away any contribution, PRs that deviate from this guidance will most likely be rejected.
Who can contribute
- Elastic employees β EUI is built primarily for Elastic products; maintainers prioritize internal roadmap work first. If your need isn't currently a priority, feel free to contribute the solution yourself.
- Community β Outside contributions are welcome and merged on a best-effort basis.
What to contribute
- Bug fixes β Especially clear, scoped fixes for reproducible issues.
- Help wanted β Issues with this label are meant for community pickup: weβve checked that they fit our roadmap and arenβt blocked on private internal planning.
What not to contribute
Unless agreed upon previously:
- Large or core roadmap work β Often handled internally so architecture, accessibility, and downstream coordination stay aligned.
- Style or design changes β These require alignment with design teams at Elastic.
- High-impact changes - Even small code changes can have a large impact on Kibana, requiring significant testing and review.
How to contribute
- Comment before you start β Note your intent on the issue to avoid duplicate work. We donβt assign issues to community members by policy.
- No matching issue yet? Open one first so maintainers can scope the change before you invest in a PR.
Typical change flow
A typical contribution moves through these steps:
- Set up locally β see Running EUI locally.
- Make your changes β follow the Developing guidelines for component structure, props, refs, icons, and Emotion styles.
- Update docs β add or update the corresponding page in
packages/websiteper Documenting. - Write tests β at minimum unit tests; see Testing for the full stack.
- Add a changelog β see Changelogs for when one is required.
- Verify locally β run lint and the relevant test commands (see Verifying your change).
- Open a PR β fill in the PR template and add any labels that apply.
Naming at a glance
EUI uses different naming conventions for different artifacts. Full details live in the linked docs:
| Artifact | Convention | Defined in |
|---|---|---|
| Component source folders & files | snake_case |
Creating component files |
| Component class/function name | EuiPascalCase |
Creating component files |
| Doc page paths (Docusaurus URLs) | kebab-case |
Writing documentation |
| Doc page & section titles | Sentence case | Documenting |
| Component references in prose | <strong>EuiFoo</strong> (with Eui prefix) |
Documenting |
| Commit / PR title | [Component] Short description |
Commit messages |
Pull requests
- Use this wiki β Developing, Documenting, Testing.
- Keep PRs small β Prefer atomic commits and focused PRs (one concern per commit and per PR when you can).
- Review timing β We aim to respond within about a week.
- Concurrency β Please limit open PRs so review stays focused.
- Due diligence β Follow the PR template (summary, impact, screenshots, checklists, QA notes).
- Reviewers β Code ownership is defined in
CODEOWNERS; the right teams will be auto-requested based on the paths you touch. - Draft PRs β We donβt review drafts by default. When you want feedback or help, comment and ping
@eui-team(same idea as the note at the top of the PR template).
Commit messages
We do not enforce a commit naming convention but it's customary to use conventional commits.
PRs typically follow the pattern: [ComponentName] Short description (#PR), e.g. [EuiBanner] Adjust additional content spacing. When merging, we squash all commits and the main commit message is the PR title. The (#PR) suffix is appended automatically.
PR labels
A few labels carry behavior beyond categorization:
skip-changelogβ bypasses the CI changelog check for all packages. See Changelogs for when this is acceptable.skip-changelog-<package-name>β bypasses the check for a single package only (e.g.skip-changelog-eslint-plugin-eui).breaking changeβ required for PRs introducing breaking changes; triggers an automated comment with extra due-diligence steps for the Kibana upgrade.
Verifying your change
From packages/eui (unless noted):
yarn lintβ ESLint + type checkingyarn test-unitβ Jest unit tests (add--watchwhile iterating)yarn test-cypressβ Cypress component tests- A changelog entry in
packages/eui/changelogs/upcoming/<PR>.mdfor any user-facing change β see the changelog guide
Stale PRs
Inactive PRs (~3 months) may be closed by GitHubβs stale workflow.
- If we owe review, ping us to get things moving again.
- If you owed changes and the PR auto-closed, we may push to your branch or close it and continue in a new PR based on your work.