Thanks for your interest in contributing to ABIType! Please take a moment to review this document before submitting a pull request.
If you want to contribute, but aren't sure where to start, you can create a new discussion.
Note Please ask first before starting work on any significant new features.
It's never a fun experience to have your pull request declined after investing time and effort into a new feature. To avoid this from happening, we request that contributors create a feature request to first discuss any API changes or significant new ideas.
This guide is intended to help you get started with contributing. By following these steps, you will understand the development process and workflow.
- Cloning the repository
- Installing Node.js and pnpm
- Installing dependencies
- Running tests
- Writing documentation
- Submitting a pull request
This guide covers more advanced topics. Pick the topics based on your needs.
To start contributing to the project, clone it to your local machine using git:
git clone https://github.com/wevm/abitype.git
Or the GitHub CLI:
gh repo clone wevm/abitype
ABIType uses Node.js with pnpm workspaces to manage multiple projects. You can run the following command in your terminal to check your local Node.js version.
node -v
If node@22
is not installed, you can install via fnm or from the official website.
Once Node.js is installed, run the following to install Corepack. Corepack automatically installs and manages pnpm.
corepack enable
Once in the project's root directory, run the following command to install pnpm (via Corepack) and the project's dependencies:
pnpm install
After the install completes, pnpm links packages across the project for development and git hooks are set up.
Tests are run with Vitest:
pnpm test
Documentation lives in the docs
directory and in code using TSDoc. If you think something is unclear or could be explained better, you are welcome to open a pull request. To run the docs site, run the following command:
pnpm docs:dev
When you're ready to submit a pull request, you can follow these naming conventions:
- Pull request titles use the Imperative Mood (e.g.,
Add something
,Fix something
). - Changesets use past tense verbs (e.g.,
Added something
,Fixed something
).
When you submit a pull request, GitHub will automatically lint, build, and test your changes. If you see an ❌, it's most likely a bug in your code. Please, inspect the logs through the GitHub UI to find the cause.
When adding new features or fixing bugs, we'll need to bump the package versions. We use Changesets to do this.
Note Only changes to the codebase that affect the public API or existing behavior (e.g. bugs) need changesets.
Each changeset defines which package(s) should be published and whether the change should be a major/minor/patch release, as well as providing release notes that will be added to the changelog upon release.
To create a new changeset, run pnpm changeset
. This will run the Changesets CLI, prompting you for details about the change. You’ll be able to edit the file after it’s created — don’t worry about getting everything perfect up front.
Even though you can technically use any markdown formatting you like, headings should be avoided since each changeset will ultimately be nested within a bullet list. Instead, bold text should be used as section headings.
If your PR is making changes to an area that already has a changeset (e.g. there’s an existing changeset covering theme API changes but you’re making further changes to the same API), you should update the existing changeset in your PR rather than creating a new one.
The first time a PR with a changeset is merged after a release, a new PR will automatically be created called chore: version packages
. Any subsequent PRs with changesets will automatically update this existing version packages PR. Merging this PR triggers the release process by publishing to npm and cleaning up the changeset files.
If a PR has changesets, you can create a snapshot release by manually dispatching the Snapshot workflow. This publishes a tagged version to npm with the PR branch name and timestamp.
Edit the playground/trace.ts
file to include whatever code you want to test and run TypeScript's built-in tracing tool with the following command:
pnpm trace
This outputs a playgrounds/performance/out/trace.json
file. You can open that file in a trace analysis app, like Perfetto or chrome://tracing
.