Using Nix with Replit
Replit supports all programming languages through integration with Nix. Nix is a tool for managing software packages and system configurations.
All Nix Repls have a replit.nix
configuration file. To access this file, click the three dots on the file tree and select Show hidden files.
Installation
To use a specific Nix package in your Repl, find the package on the Nix foundation and it to your replit.nix
file.
NodeJS 19
In some cases, some packages on NPM may require a newer version of NodeJS to run. To install a newer version, search to confirm that it exists on Nix.
In this case, we will use nodejs-19_x
. Click on the package name to expand it.
Under How to install _nodejs-19_x, switch to the NixOS Configuration tab. Highlighted in blue is what you will paste into your replit.nix
file. Listed under Programs provided are the new bash commands that will be available once the package is installed.
Replace pkgs.nodejs-18_x
in your existing replit.nix
file to the new package. After your shell is reloaded, the NodeJS version will be updated to v19.
{ pkgs }: {
deps = [
pkgs.nodejs-19_x
pkgs.nodePackages.typescript-language-server
pkgs.yarn
pkgs.replitPackages.jest
];
}
OpenRA
You can play the classic game Command and Conquer Red Alert by installing the openra
package from Nix.
{ pkgs }: {
deps = [
pkgs.openra
];
}
To start the game, run openra
in the shell, or set that as your Repl's run command.
Python & NodeJS
Some packages such as node-gyp require Python in order to run.
Python Repls require a special Nix configuration due to its vast amount of abilities. Simply insert the desired NodeJS Nix package in the deps
section of the replit.nix
file, maintaining the original configuration of the python nix file.
{ pkgs }: {
deps = [
pkgs.nodejs-19_x
pkgs.python310Full
pkgs.replitPackages.prybar-python310
pkgs.replitPackages.stderred
];
env = {
PYTHON_LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [
# Needed for pandas / numpy
pkgs.stdenv.cc.cc.lib
pkgs.zlib
# Needed for pygame
pkgs.glib
# Needed for matplotlib
pkgs.xorg.libX11
];
PYTHONHOME = "${pkgs.python310Full}";
PYTHONBIN = "${pkgs.python310Full}/bin/python3.10";
LANG = "en_US.UTF-8";
STDERREDBIN = "${pkgs.replitPackages.stderred}/bin/stderred";
PRYBAR_PYTHON_BIN = "${pkgs.replitPackages.prybar-python310}/bin/prybar-python310";
};
}
Switch the Nix Channel
You can switch the Nix Channel in your Repl by editing the [nix] entry in your .replit
file.
Unstable Packages
In some cases, a Nix package can be labeled as broken or insecure, not be suitable for the current platform, or not have a free licence. Nix will not install a package under any of these circumstances.
To allow for the installation of such packages, navigate into the .config
folder > nixpkgs/config.nix
, and then set it to the following. If you do not see the .config
folder, click the three dots on the file tree and select Show hidden files.
{
allowUnfree = true;
}
Caching and Persistence
Replit maintains a large >10 Terabyte cache of Nix packages. If a package added to replit.nix
is in the cache, it won't have to be built, and using it won't count against your Repl's storage usage. If it is not cached, Nix will build it and store the package in persistent Repl storage. You can see your Nix packages storage usage in the Repl Resources popup:
Since packages you build with Nix are part of a Repl's persistent storage, forking the Repl will immediately give you a complete copy of all your Nix packages. This can be useful if you want to build your Nix development environment once and then use Repl forks to develop features without having to rebuild the development environment.
You can fully erase your Nix packages storage by selecting the trashcan and accepting the confirmation. This will irreversibly delete all the Nix packages built in this Repl.