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

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.

3.2 Distribution-Package Contributions🔗ℹ

If you find yourself changing a file that is in a "share/pkgs" subdirectory (either installed as part of a Racket release or as a product of an in-place build), 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 from a Racket release or snapshot, you first need to adjust the package installation to use the source specified by the main package catalog

  raco pkg update --no-setup --catalog https://pkgs.racket-lang.org pkg-name

and then in the directory you’d like to hold the package’s source

  raco pkg update --clone pkg-name

will clone the package’s source Git repository into "pkg-name" within the current directory.

Alternatively, if you already have an in-place build of the main Racket repository, you can start working on a package pkg-name, by going to the root directory of your Racket repository checkout and running

  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

https://github.com/racket/racket/wiki/Ways-to-contribute-to-Racket