---
title: Contribute to c15t
description: Open an issue, set up the c15t monorepo with Bun, branch from
  canary, run the checks and add a Tegami release note for package changes.
group: reference
lastModified: "2026-10-10T16:01:45+01:00"
---
## Open an issue first

Search the [issues](https://github.com/c15t/c15t/issues) and
[pull requests](https://github.com/c15t/c15t/pulls) before you start, then open
an issue for your change.

New features, large refactors and architecture changes carry the
`needs-approval` label. Wait for a maintainer to remove it before you write
code. Bug fixes, documentation, performance improvements, security fixes and
tests can start right away.

## Set up the repository

The repository uses Bun 1.3.11. Fork it and create your branch from `canary`,
the default branch that pull requests target:

```sh
git clone https://github.com/your-username/c15t.git
cd c15t
git switch -c my-change
bun install
```

`bun install` also installs a Lefthook pre-commit hook that formats staged
files with Oxfmt.

## Run the checks

```sh
bun run build         # build every package with Turborepo
bun run test          # Vitest for packages your branch changed, and their dependents
bun run check-types   # TypeScript, after a build
bun run lint          # Oxlint
bun run fmt           # Oxfmt
```

Tests run with Vitest, not `bun test`. Browser tests for React, Next.js and
TanStack Start need Chromium: run `bunx playwright@1.58.2 install` once.
`bun run test:full` runs every package. For documentation changes, run
`bun run lint:docs` and `bun run fmt:docs`.

Add or update tests with your change. For a bug fix, add a test that fails
without the fix.

## Open the pull request

Target `canary`. Fill in the pull request template, link the issue and add
screenshots for UI changes. Write commit messages as
[Conventional Commits](https://www.conventionalcommits.org/): `feat:`, `fix:`,
`docs:`, `chore:`, `refactor:` or `test:`.

CI picks its checks from the files you changed: package builds, tests, type
checks, linting, docs generation and, for runtime changes, browser and bundle
checks. autofix.ci pushes formatting fixes to your branch, so pull before you
add more commits.

## Add a release note

Changes to published packages need a `.tegami/*.md` release note. Run
`RELEASE_BRANCH=v3 bun run tegami`, replacing `v3` with your pull request's
target branch. Give explicit package bumps and a Markdown heading, and write
the body as the changelog entry:

```md
---
packages:
  '@c15t/core': patch
---

### Fix consent persistence

Keep saved preferences after reloading the page.
```

Do not edit package `CHANGELOG.md` files or the publish lock; Tegami generates
them. The `release.yml` workflow runs CI, and Tegami opens a version pull
request. Merging it publishes the packages and creates GitHub releases. `main`
publishes stable releases, `v3` publishes alphas and `2.0.0` publishes release
candidates. Pushes to `canary` publish commit-specific snapshots under the
`canary` npm tag without a version pull request. The
[release guide](https://github.com/c15t/c15t/blob/v3/.tegami/README.md) covers
versioning rules and npm trusted publishing.

## Edit the documentation

Edit the MDX source in `docs/`. Package `README.md` files, the `docs/` folders
inside packages and their `AGENTS.md` files are generated; change
`docs/**/*.mdx` or the package's `readme.json` instead.

## License

By contributing, you agree that your contributions are licensed under the
[Apache License, Version 2.0](/docs/oss/license), the license c15t uses.
