On this page:
3.1 Main-Repository Contributions
3.2 Distribution-Package Contributions
3.3 General Contribution Guidelines
3.4 More Resources

3 Contributing to Racket Development

The Racket developers are happy to receive bug reports and improvements to the implementation and documentation through GitHub issues and pull requests:

The Racket distribution includes scores of packages that have their own separate repositories, which somewhat complicates the process of sending pull requests. The mechanism is the same, but see Distribution-Package Contributions for more guidance.

By making a contribution, you are agreeing that your contribution is licensed under the LGPLv3, Apache 2.0, and MIT licenses. Those licenses are available in the Racket Git repository in the files "LICENSE.txt", "LICENSE-APACHE.txt", and "LICENSE-MIT.txt".

3.1 Main-Repository Contributions

The main Racket Git repository contains the implementation of everything that is in the Minimal Racket distribution. That includes the runtime system, core libraries, and raco pkg so that other packages can be installed.

The main Racket repository also has the source to the Racket Reference, Racket Guide, and other core-ish documentation, including the source to the document that you are reading. Those document sources are in the repository’s "pkgs" directory.

Finally, the main repository includes a few other packages that are especially tightly bound to the runtime-system implementation, such as the "compiler-lib" package or the "racket-test" package. Those package sources are also in the repository’s "pkgs" directory.

To develop improvements to any of those parts of Racket, following the usual GitHub-based workflow:

See the General Contribution Guidelines.

The variant of Chez Scheme that is needed to build Racket on Chez Scheme has its own repository (to preserve the shape of the original Chez Scheme reporitory): https://github.com/racket/ChezScheme.

3.2 Distribution-Package Contributions

If you find yourself changing a file that is in a "share/pkgs" subdirectory, then that file is not part of the main Racket Git repository. It almost certainly has its own Git repository somewhere else, possibly within https://github.com/racket, but possibly in another user’s space. The name of the directory in "share/pkgs" is almost certainly the package name.

To start working on a package pkg-name, it’s usually best to go to the root directory of your Racket repository checkout and run

  raco pkg update --clone extra-pkgs/pkg-name

That will create "extra-pkgs/pkg-name" as a clone of the package’s source Git repository, it will replace the current installation of the package in your Racket build to point at that directory, and then it will rebuild (essentially by using raco setup) with the new location of the package installation. Now you can edit in "extra-pkgs/pkg-name", and your changes will be live.

Some information that might improve your experience:

Note that none of this is necessary if you’re modifying a package in the main Racket repository’s "pkgs" directory. Those are automatically linked in place for an in-place build of Racket.

3.3 General Contribution Guidelines

When you make a pull request, the Racket developers will help you get the improvement in shape to merge to the Racket repository. You can make that process faster by keeping a few guidelines in mind:

3.4 More Resources

For additional pointers on how to contribute to Racket, see