README.md
May 31, 2026 ยท View on GitHub
polkadot.nix is a collection of Nix packages related to the Polkadot ecosystem.
Packages
- graypaper
- polkadot-sdk
- psvm
- srtool-cli
- subalfred
- subrpc
- subwasm
- subxt-cli
- try-runtime-cli
- zepter
- zombienet-sdk
Usage
You need to enable flakes support.
You can use polkadot.nix as a standalone flake or integrate it into your existing nix flake project.
Running directly via nix run
nix run "github:andresilva/polkadot.nix#polkadot"
This will build and run the polkadot package from the flake. Check all available outputs with:
nix flake show "github:andresilva/polkadot.nix"
Integrate into existing flake
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
polkadot.url = "github:andresilva/polkadot.nix";
polkadot.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
{ nixpkgs, polkadot, ... }:
let
system = "x86_64-linux";
in
{
devShells.${system}.default = nixpkgs.legacyPackages.${system}.mkShell {
buildInputs = [ polkadot.packages.${system}.polkadot ];
};
};
}
Overlay
You can use polkadot.nix as an overlay to seamlessly integrate all Polkadot packages into your existing nixpkgs environment.
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
polkadot.url = "github:andresilva/polkadot.nix";
polkadot.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
{ nixpkgs, polkadot, ... }:
let
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
overlays = [ polkadot.overlays.default ];
};
in
{
packages.${system}.default = pkgs.polkadot;
};
}
Cachix
Use Cachix to speed up builds by fetching pre-built binaries from a remote cache, reducing compilation times and improving overall efficiency.
cachix use polkadot
Development shell
A shell derivation is included that provides a development environment with all the requirements necessary to build polkadot-sdk.
You can run it directly with:
nix develop "github:andresilva/polkadot.nix"
The default shell uses the stable Rust toolchain, a nightly shell built from the latest toolchain is also available:
nix develop "github:andresilva/polkadot.nix#nightly"
Customizing the shell
The shell is also exposed as a builder function, lib.${system}.mkDevShell, so downstream flakes can pick a toolchain channel and linker,
and add their own packages and environment variables:
| Argument | Default | Description |
|---|---|---|
channel | "stable" | Rust toolchain channel ("stable", "beta", or "latest" for nightly). |
linker | "wild" | Linker used on Linux ("wild", "mold" or "lld"), ignored on Darwin, which always uses lld. |
packages | [ ] | Extra packages, prepended so they take precedence on PATH. |
env | { } | Extra environment variables, added to the defaults (overriding those with the same name). |
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
polkadot.url = "github:andresilva/polkadot.nix";
polkadot.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
{ nixpkgs, polkadot, ... }:
let
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
overlays = [ polkadot.overlays.default ];
};
in
{
devShells.${system}.default = polkadot.lib.${system}.mkDevShell {
linker = "mold";
packages = with pkgs; [ zepter ];
env.RUSTC_WRAPPER = pkgs.lib.getExe pkgs.sccache;
};
};
}