In NixOS, I installed the package yarn as usual by running $ nix-env -i yarn. Now I am attempting to run yarn via $ yarn start. But this leads me to the following error.

$ yarn start
    yarn start v0.20.3
    $ webpack-dev-server --env dev 
    sh: webpack-dev-server: command not found
    error Command failed with exit code 127.

When I try to install webpack-dev-server in my usual NixOS way I get a 'matches no derivations' error.

$ nix-env -i webpack-dev-server
error: selector ‘webpack-dev-server’ matches no derivations

I read that webpack-dev-server is an npm package, and am unsure of a couple questions regarding the relevance of that in this case.

  1. Does it make sense to use npm, a different package manager than nix, under Nix?
  2. If answer to (1) is yes, then how to install npm on NixOS? I do not see npm available when searching via nix-env, as $ nix-env -qa npm also matches no derivations.

What is the correct way to install webpack-dev-server on NixOS?


I attempted to install webpack-dev-server following the commented link and was able to install node2nix, but am not able to follow through on step 2 listed in the readme there.

I located the file referenced in step 2 in /nix/store at


I can open that file to view the npm packages listed, but the permissions are read-only, even running with sudo -- so I would need to edit it's permissions in order to alter it.

It seems that I should not be editing this /nix/store file directly and should instead be manipulating it indirectly via nix. Am I correct that I should not be editing this file directly? If so, how else can I complete step 2 by using nix or something to add webpack-dev-server to it?

  • 1
  • @EmmanuelRosa thank you for the link; I attempted to follow the instructions there and updated this question according to the results of that attempt.
    – mherzl
    Commented Jul 21, 2017 at 3:33
  • /nix/store is read-only. You need to clone git repo and use -I nixpkgs=/path/to/repo for nix-* command
    – wizzup
    Commented Jul 21, 2017 at 4:21
  • This was the most elegant solution in my case (courtesy of @trusktr).
    – Adam Lee
    Commented Jul 27, 2021 at 18:01

3 Answers 3


There are multiple ways to use npm packages through nix:

For my personal projects, I use nix-shell then within the shell I use npm scripts to prevent the need for npm global packages (like with gulp). The process looks something like this (and is probably very similar for yarn):

$ nix-shell -p nodejs-8_x
[nix-shell:yourproject]$ npm install # installs npm deps to project-local node_modules
[nix-shell:yourproject]$ npm exec (...) # using scripts configured in package.json

This works well for me since none of my packages have binary dependencies. This post describes the creation of a default.nix for your project so you won't have to specify dependencies for every invocation of nix-shell, but it's optional.

Another way is using npm2nix:

node2nix -i node-packages.json # creates ./default.nix
nix-shell # nix-shell will look for a default.nix, which above will have generated

Which will cause Nix to manage all npm packages in the project.

It may be a good idea to become familiar with nix-shell, since trying to install node packages / any dependency in your nix profile (through nix-env or nox) defeats the purpose of nix by polluting the "global" namespace.

  • Could you expand on this with regards to packages using binding.gyp for example: github.com/mateogianolio/nblas Commented Dec 15, 2017 at 7:36
  • 1
    I found out how to do it for binary packages. You need the nodePackages_6_x.node-gyp, and any other libraries like blas, then when it's all together, you can use npm install .... packages that use node-gyp. Commented Dec 15, 2017 at 7:52
  • 1
    Regarding the first method, as an alternative to the npm scripts solution, I find adding global npm packages to the nix-shell effective, e.g. nix-shell -p nodejs-8_x nodePackages.grunt-cli. (Warning: nixos and node noob here.) Commented Jan 28, 2018 at 18:29
  • The one thing I don't understand about the first method is how to actually install the package itself, i.e. where does the binary for the project's package.json bin end up? Commented Jan 28, 2018 at 20:00
  • @ryne-everett If you run npm install, executables would be linked into node_modules/.bin. See here.
    – Luke Adams
    Commented Feb 3, 2018 at 19:21

For some reason, nodePackages is not in root namespace and can't be found by using nix-env -qa

use nix-env -qaPA nixos.nodePackages to list for available packages.

$ nix-env -qaPA nixos.nodePackages | grep -i web
nixos.nodePackages.webdrvr                     node-webdrvr-2.43.0-1
nixos.nodePackages.webpack                     node-webpack-2.6.1

If the package you want is not there, and you don't know how to write Nix packages, make a packaging request on NixOS github.

  • 1
    I am using just nix package manager and was able to make it work with: nix-env -f '<nixpkgs>' -qaPA nodePackages | grep tern
    – zaynetro
    Commented Nov 14, 2018 at 12:52
  • Most of these are not in the root namespace because it would make the normal search slow. It's the same with Haskell packages. Their namespace is too big.
    – user239558
    Commented Nov 19, 2019 at 16:50

As an alternative, I also found CMCDragonkai's comment on the Nixpkgs issue #3393:

I just found out that you can change NPM's prefix directory. Something like:

npm config set prefix '~/mutable_node_modules'

This allows you to use NPM's global installation.

So it's possible to work around the purely functional model, by redirecting its outputs to somewhere that's not managed by Nix. But I guess it defeats the purpose of using Nix. And not every single software will support these types of configuration changes.

Still I feel it's very clunky having to switch between using nix-env for normal global Node packages, and npm for development packages. I guess that's why there's all those porting layers such as "npm2nix".

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .