<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sajjad Tabreez</title>
    <description>The latest articles on DEV Community by Sajjad Tabreez (@tabreezsajjad).</description>
    <link>https://dev.to/tabreezsajjad</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3623582%2F1ca40861-54d1-4953-9b2a-2cba1bfc1f4e.png</url>
      <title>DEV Community: Sajjad Tabreez</title>
      <link>https://dev.to/tabreezsajjad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tabreezsajjad"/>
    <language>en</language>
    <item>
      <title>Introducing nenv — A portable, per-project Node.js runtime for Windows (no global install required)</title>
      <dc:creator>Sajjad Tabreez</dc:creator>
      <pubDate>Fri, 21 Nov 2025 21:09:06 +0000</pubDate>
      <link>https://dev.to/tabreezsajjad/introducing-nenv-a-portable-per-project-nodejs-runtime-for-windows-no-global-install-required-4fp7</link>
      <guid>https://dev.to/tabreezsajjad/introducing-nenv-a-portable-per-project-nodejs-runtime-for-windows-no-global-install-required-4fp7</guid>
      <description>&lt;p&gt;Most of us have dealt with Node.js version conflicts at some point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One project needs Node 18.&lt;/li&gt;
&lt;li&gt;Another needs Node 20.&lt;/li&gt;
&lt;li&gt;A global upgrade breaks something.&lt;/li&gt;
&lt;li&gt;Corporate or restricted laptops don’t allow installers.&lt;/li&gt;
&lt;li&gt;CI/CD behaves differently from local environments.&lt;/li&gt;
&lt;li&gt;Teammates run “slightly different” versions and bugs magically appear.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Linux/macOS, tools like nvm, asdf, volta, and fnm help…&lt;br&gt;
But on Windows, especially without admin rights, things get messy.&lt;/p&gt;

&lt;p&gt;So I started experimenting with a simple idea:&lt;/p&gt;

&lt;p&gt;What if every project had its own Node.js runtime, completely local, portable, and isolated?&lt;/p&gt;

&lt;p&gt;Just like Python has .venv.&lt;/p&gt;

&lt;p&gt;That experiment grew into a small open-source tool called nenv.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;nenv — Portable Node.js per project (Windows)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;nenv is a lightweight script that downloads Node.js directly into your project folder and makes all Node/npm commands use that local runtime — even if no global Node is installed on the system.&lt;/p&gt;

&lt;p&gt;It's basically:&lt;br&gt;
node.exe + npm + npx&lt;br&gt;&lt;br&gt;
... stored inside the project&lt;/p&gt;

&lt;p&gt;So project A can use Node 18&lt;br&gt;
and project B can use Node 20&lt;br&gt;
with zero conflict.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📂 Example Project Structure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After initializing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project/
│ nenv.cmd
│ .nenv-version
└── .nenv/
    ├── cache/
    │   └── node-v18.20.0-win-x64.zip
    └── node-v18.20.0-win-x64/
        ├── node.exe
        ├── npm.cmd
        ├── npx.cmd
        └── all Node core files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything stays inside your project.&lt;br&gt;
Nothing touches your system installation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📦 Installation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run this inside your project root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Invoke-WebRequest -Uri "https://cdn.jsdelivr.net/gh/tabreezsajjad/nenv@v0.5.0/nenv.txt" -OutFile "nenv.cmd"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\nenv.cmd init

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter the Node version you want (e.g., 20.11.1).&lt;/p&gt;

&lt;p&gt;nenv downloads the ZIP from the official Node.js site and sets it up inside .nenv/.&lt;/p&gt;

&lt;p&gt;🧪 &lt;strong&gt;Usage&lt;/strong&gt;&lt;br&gt;
Check Node version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\nenv.cmd node --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\nenv.cmd npm install

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\nenv.cmd dev
.\nenv.cmd build
.\nenv.cmd start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These behave exactly like:&lt;/p&gt;

&lt;p&gt;npm run dev&lt;br&gt;
npm run build&lt;br&gt;
npm run start&lt;/p&gt;

&lt;p&gt;but always using the project-local Node runtime.&lt;/p&gt;

&lt;p&gt;✔ &lt;strong&gt;Supported Versions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;nenv supports any official Node.js Windows x64 ZIP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;14.x (legacy)&lt;/li&gt;
&lt;li&gt;16.x (legacy)&lt;/li&gt;
&lt;li&gt;18.x (LTS)&lt;/li&gt;
&lt;li&gt;20.x (LTS)&lt;/li&gt;
&lt;li&gt;22.x (Current)&lt;/li&gt;
&lt;li&gt;24.x (Latest)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 &lt;strong&gt;Why this approach?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No admin rights needed&lt;/li&gt;
&lt;li&gt;No global Node installation required&lt;/li&gt;
&lt;li&gt;Fully self-contained environments&lt;/li&gt;
&lt;li&gt;Perfect for Windows developers&lt;/li&gt;
&lt;li&gt;Great for corporate/restricted laptops&lt;/li&gt;
&lt;li&gt;Reproducible environments across teams&lt;/li&gt;
&lt;li&gt;CI/CD matches local dev&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One project’s Node version never affects another&lt;/p&gt;

&lt;p&gt;🔗 GitHub Repo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tabreezsajjad/nenv" rel="noopener noreferrer"&gt;https://github.com/tabreezsajjad/nenv&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is still early, but it works reliably and I’d love feedback, feature requests, or edge cases to test.&lt;/p&gt;

&lt;p&gt;🙏 Thanks for reading!&lt;/p&gt;

&lt;p&gt;If you try it out, I’d love to hear how it works for your workflow — especially if you're on Windows or dealing with Node version chaos across multiple projects.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>github</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
