Thanks for your interest in contributing! This guide covers everything you need to get started.
- Node.js 20+ (enforced via
enginesinpackage.json) - pnpm 9+
git clone https://github.com/raphaelsalaja/audio.git
cd audio
pnpm install
pnpm build# Start all apps and packages in dev mode
pnpm dev
# Build everything
pnpm build
# Typecheck
pnpm typecheck
# Lint
pnpm lintpackages/audio Core library + CLI
apps/web Documentation site (Fumadocs)
ui/ Shared UI components
.web-kits/ First-party sound patches & generated code
- Create a new branch from
main. - Make your changes.
- Run
pnpm build && pnpm typecheck && pnpm lintto verify everything passes. - Add a changeset describing your change (see below).
- Open a pull request.
We use Changesets to manage versioning and changelogs. Before opening a PR that affects the published package, run:
pnpm changesetFollow the prompts to describe what changed and the semver bump type. This creates a markdown file in .changeset/ that gets consumed during release.
Commits must follow Conventional Commits. A commitlint hook enforces this automatically.
Format: <type>(<optional scope>): <description>
| Type | When to use |
|---|---|
feat |
Add, adjust, or remove a feature |
fix |
Fix a bug |
refactor |
Restructure code without changing behavior |
perf |
Performance improvement (special refactor) |
style |
Formatting, whitespace, semicolons — no behavior change |
test |
Add or correct tests |
docs |
Documentation only |
build |
Build tools, dependencies, project version |
ops |
Infrastructure, deployment, CI/CD, backups |
chore |
Maintenance tasks like .gitignore, initial commit |
- Use imperative, present tense: "add" not "added" or "adds"
- Do not capitalize the first letter of the description
- No period at the end
- Append
!after the type for breaking changes:feat!: remove status endpoint
feat: add bandpass filter type
fix(envelope): resolve attack timing drift
refactor: extract audio context into shared module
perf: cache frequency calculations in oscillator
docs: add patch authoring guide
build: update typescript to v6
chore: init
See the full Conventional Commits Cheatsheet for more details.
- Keep PRs focused — one feature or fix per PR.
- Include a clear description of what changed and why.
- Make sure CI passes before requesting review.
- If your change affects the public API, include a changeset.
To contribute a first-party sound patch:
- Run
npx @web-kits/audio initto scaffold a patch in.web-kits/. - Follow the patch schema and add sound definitions.
- Include well-named, well-tuned sound definitions.
- Open a PR with a brief description of the patch.
By contributing, you agree that your contributions will be licensed under the MIT License.