# Contributing to Fluidd Fluidd is an independent web client for [Klipper](https://github.com/Klipper3d/klipper) (via [Moonraker](https://github.com/Arksine/moonraker)), built with Vue 2.7 and TypeScript. Contributions of all kinds are welcome — bug reports, feature requests, code, and translations. This document covers the process and rules. For setup instructions and a tour of the codebase, see the [Development guide](https://docs.fluidd.xyz/development/). ## Before you start - Read the [Development guide](https://docs.fluidd.xyz/development/) — it covers the Dev Container, running Fluidd locally, and a quick architecture overview. - After cloning, run `pnpm i --frozen-lockfile` to install dependencies. This also sets up the Git hooks that pre-validate your commits. If you don't have pnpm yet, run `npx get-pnpm` from outside the clone first (`npm` refuses to run inside a project that pins pnpm) — see the [Development guide](https://docs.fluidd.xyz/development/) for details. ## Branching and pull requests - Create your work on a feature branch from `develop` — for example, `feat/my-feature` branched from `develop`. Do not open pull requests from `develop` or `master` directly. - **Pull request titles must follow [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/)**. This is enforced by CI. - Accepted pull requests are squashed and rebased onto `develop` when merged. ## Commits - Use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) for every commit message. Allowed types: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`, `types`, `i18n`. - The commit subject must be **50 characters or fewer** — enforced by the `commit-msg` Git hook. - Every commit must include a `Signed-off-by` line. The easiest way is to commit with `git commit -s`. Signing off acknowledges the [Developer Certificate of Origin](./developer-certificate-of-origin) and must contain your real name and a current email address. Example: ```text feat: my feature Some description of what changed and why. Signed-off-by: Your Name ``` ## Code quality Source must pass linting and type-checking with **zero warnings and zero type errors**. Before pushing, run: ```bash pnpm run lint pnpm run type-check pnpm run test ``` CI runs the same checks (plus `pnpm run circular-check` and a production build) on every pull request. They no longer stop at the first failure, so a single run reports lint, type, test and circular-dependency problems together. CI also comments on each pull request with the gzip bundle-size difference against the merge-base, so changes that pull a large dependency into an eagerly loaded chunk are visible in review. ## Translations Translations are managed via [Weblate](https://hosted.weblate.org/engage/fluidd/) — do not edit non-English files in `src/locales/` directly. New strings should be added to `src/locales/en.yaml`; Weblate handles the rest. See the [Localization section](https://docs.fluidd.xyz/development/#localization) of the Development guide for more. ## A note on `CLAUDE.md` The `CLAUDE.md` file in the repository root is an exhaustive reference written for AI coding assistants (Claude Code, Cursor, and similar tools). It documents architecture, patterns, and gotchas in detail. Humans are welcome to read it as a deeper second source, but the canonical onboarding doc for human contributors is the [Development guide](https://docs.fluidd.xyz/development/).