Welcome, we really appreciate if you're considering to contribute, the joint effort of our contributors make awesome 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 and yarn.
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 [email protected]:USERNAME/parcel.git
cd parcel
yarn install
In the folder packages/example
, create a temporary example to debug. You can start by copying the simple
example and try to reproduce the bug.
In the newly created example run yarn parcel build index.html
to build.
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 it 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're just getting started to understand how the internals work, start from /packages/core/core/src/Parcel.js
The packages/core/parcel-bundler
is the source of v1, kept for reference and will be removed
PARCEL_WORKERS
to the number of worker processes to spawn. PARCEL_WORKERS=1
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.)
Asset
types, run with --no-cache
(or pass cache: false
to Bundler
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)