Welcome, we really appreciate if you're considering to contribute, the joint effort of our contributors make projects like this possible!
The goal of this document is to provide guidance on how you can get involved.
Have a question or feature request? Rather than opening an issue, use the Discussions board.
Please be polite and take the time to write a well-worded question so our community members can easily assist you.
In order to make it easier to get familiar with the codebase we labeled simpler issues using Good First Issue and Help Wanted.
Before starting make sure you have the following requirements installed: git, Node, Yarn and Rust.
The process starts by forking the project and setup a new branch to work in. It's important that the changes are made in separated branches in order to ensure a pull request only includes the commits related to a bug or feature.
Clone the forked repository locally and install the dependencies:
git clone https://github.com/USERNAME/parcel.git
cd parcel
yarn install
yarn build-native
If you want, you can create a temporary example for debugging in the folder packages/examples
. You can start by copying the simple
example and try to reproduce the bug. It has everything set up for working on local changes and you can run yarn build
to build the project. If you're re-using another example or creating one from scratch, make sure to use the --no-cache
flag for parcel build
to see your local changes reflected. Please don't commit this example.
After you've figured out where the issue originated from and found a fix, try to add a test case or ask for help on how to proceed if the use case is more complex.
Use yarn test
to run all unit and integration tests. Make sure all tests pass before submitting a pull request.
Use yarn format
to make sure we keep the code format consistent.
Use yarn lint
to check for stylistic or unwanted errors.
If you want to test out your change outside the monorepo, you can run /path/to/monorepo/packages/core/parcel/src/bin.js build src/index.html
(provided that you don't have any @parcel/*
plugins installed in this project).
If you're just getting started to understand how the internals work, start from /packages/core/core/src/Parcel.js
PARCEL_WORKERS
to the number of worker processes to spawn. PARCEL_WORKERS=0
is handy for debugging, because all code will run on the main thread. You can then place breakpoints in Asset code. (Normally these breakpoints won't trigger, because the code executes in a subprocess.)
--no-cache
(or pass shouldDisableCache: true
to Parcel
options). Parcel uses caching by default, but during development you'll normally pass incomplete results into the cache. This can leave you wondering why you're constantly seeing old results.
You can set PARCEL_MAX_CONCURRENT_CALLS
to change the limit of concurrent calls per worker.
For significant changes, it is recommended that you first propose your solution and gather feedback.
A few things to keep in mind before submitting a pull request:
- do your best to provide relevant test cases
- if you added an external dependency commit the updated
yarn.lock
- don't modify the
package.json
versioning - all submissions require review, please be patient
When releasing a new version of Parcel a couple steps should be followed:
- Run
yarn tag:prerelease 2.0.0-alpha.1
oryarn tag:release 2.4.5
based on whether it is a prerelease (alpha, beta, nightly, ...) or a stable release - Open a PR (or commit directly to the default branch)
- Wait for the PR to get merged
- Create a GitHub release and publish it (this should automatically trigger an npm release, with the current state of the default branch and versions defined in the
package.json
files)
After these steps are completed there should be a new version of Parcel published on npm.
In case the automatic npm release failed, or you want to do a manual release for any other reason you can also run yarn run release
Showing appreciation makes us happy, donations help us grow.
Our financial situation is fully transparent on our open collective.
Anyone can file an expense. If the expense makes sense for the development of the community, it will be "merged" in the ledger of our open collective by the core contributors and the person who filed the expense will be reimbursed.
Thank you to all the people who have already contributed to parcel!
Thank you to all our backers! [Become a backer]
Thank you to all our sponsors! (please ask your company to also support this open source project by becoming a sponsor)