Much like Python, Racket packages and modules have their own special build system. To learn more about the specifics of Racket package system, please refer to the Racket Docs.


The RacketPackage base class provides an install phase that can be overridden, corresponding to the use of:

$ raco pkg install


In principle, raco supports a second, setup phase; however, we have not implemented this separately, as in normal circumstances, install also handles running setup automatically.

Unlike Python, Racket currently on supports two installation scopes for packages, user or system, and keeps a registry of installed packages at each scope in its configuration files. This means we can’t simply compose a “RACKET_PATH” environment variable listing all of the places packages are installed, and update this at will.

Unfortunately this means that all currently installed packages which extend Racket via raco pkg install are accessible whenever Racket is accessible.

Additionally, because Spack does not implement uninstall hooks, uninstalling a Spack rkt- package will have no effect on the raco installed packages visible to your Racket installation. Instead, you must manually run raco pkg remove to keep the two package managers in a mutually consistent state.