<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Blog | Volta</title>
    <link></link>
    <description>The Volta blog.</description>
    <lastBuildDate>Thu, 05 Dec 2024 06:48:58 +0000</lastBuildDate>
    
    <item>
      <title>Announcing Volta 1.0.0</title>
      <link>
        /2020/12/21/announcing-volta-100/
      </link>
      <description>
        &lt;p&gt;The Volta team is thrilled to announce that Volta 1.0.0 is now available! Volta is a fast, reliable utility for declaring your JavaScript &lt;a href=&quot;http://calculist.org/blog/2020/12/21/tac/&quot;&gt;Toolchains as Code&lt;/a&gt;. In much the same way that Infrastructure as Code frees teams from manually managing their server infrastructure, &lt;strong&gt;Volta takes the hassle out of installing and coordinating JavaScript tools&lt;/strong&gt;—such as Node, package managers, and package binaries—so that you can focus on creating awesome software.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h1 id=&quot;what-does-100-mean-for-volta&quot;&gt;What does 1.0.0 mean for Volta?&lt;/h1&gt;

&lt;p&gt;The 1.0.0 release means that Volta is ready for general use in projects of all sizes. The new features included in version 1.0.0 are the last pieces in a string of work—begun with Volta 0.9.0—to make the most common tools work seamlessly with the benefits that Volta provides.&lt;/p&gt;

&lt;p&gt;At the same time, 1.0.0 means more than, “we implemented some high-impact functionality and finally closed some long-standing issues.” From the beginning, Volta was built to empower engineers and engineering teams to build amazing JS applications without having to worry about their environment or tooling. For individual engineers, Volta unobtrusively makes sure your tooling is aligned with the needs of your project, allowing you to stay focused on your work. For engineering teams, Volta allows you to manage your infrastructure decision-making centrally without slowing down individual team members. When the team decides to change versions of Node, for example, that doesn’t require explicit effort on the part of each developer. With version 1.0.0, we believe Volta delivers on the promise of making tool management disappear.&lt;/p&gt;

&lt;p&gt;Last, version 1.0.0 represents a commitment to stability. As we continue to add new features and support for more tools, we are committed to doing so in a backwards-compatible way. You can be confident that new releases won’t break your workflows or scripts.&lt;/p&gt;

&lt;h1 id=&quot;whats-new&quot;&gt;What’s new?&lt;/h1&gt;

&lt;h2 id=&quot;support-for-npm-link&quot;&gt;Support for &lt;code class=&quot;highlighter-rouge&quot;&gt;npm link&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;With the &lt;a href=&quot;/2020/10/22/announcing-volta-090/&quot;&gt;release of Volta 0.9.0&lt;/a&gt;, we added support for installing tools directly with your package manager while still taking advantage of the benefits that Volta provides. We have extended that support to include linking your local packages with &lt;code class=&quot;highlighter-rouge&quot;&gt;npm link&lt;/code&gt;, even across different npm versions. Additionally, if you try to link two projects that are using different Node versions, Volta will alert you that there might be incompatibilities that cause unexpected behavior.&lt;/p&gt;

&lt;h2 id=&quot;support-for-upgrading-global-packages&quot;&gt;Support for upgrading global packages&lt;/h2&gt;

&lt;p&gt;You can now upgrade your installed global packages directly with your package manager, using &lt;code class=&quot;highlighter-rouge&quot;&gt;npm update -g&lt;/code&gt; or &lt;code class=&quot;highlighter-rouge&quot;&gt;yarn global upgrade&lt;/code&gt;. Volta will make sure that the package manager can locate all of the packages so that they can be upgraded to their latest versions.&lt;/p&gt;

&lt;h1 id=&quot;the-future-of-volta&quot;&gt;The future of Volta&lt;/h1&gt;

&lt;p&gt;While we believe that Volta 1.0.0 achieves the goals for the project, that doesn’t mean that we are done! Active development will continue on Volta: adding new features, support for new tools, and fixing any bugs that crop up. A few items on our near-term roadmap include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Native builds for Apple M1 devices&lt;/li&gt;
  &lt;li&gt;Support for using &lt;a href=&quot;https://pnpm.js.org/&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;pnpm&lt;/code&gt;&lt;/a&gt; as your package manager&lt;/li&gt;
  &lt;li&gt;Improvements to &lt;code class=&quot;highlighter-rouge&quot;&gt;volta list&lt;/code&gt;, making it easier to visualize the state of your tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;try-it-out&quot;&gt;Try it out!&lt;/h1&gt;

&lt;p&gt;To try Volta for the first time or upgrade your existing installation, follow the instructions on our &lt;a href=&quot;https://docs.volta.sh/guide/getting-started&quot;&gt;Getting Started&lt;/a&gt; page!&lt;/p&gt;

&lt;p&gt;Finally, this release is the culmination of more than two years of work from a whole host of contributors. It wouldn’t have been possible without all of your ideas, feedback, bug reports, code, and encouragement. We would like to extend our heartfelt thanks to everyone in the community for your support.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Interested in getting involved? Join our &lt;a href=&quot;https://discord.gg/hgPTz9A&quot;&gt;Discord server&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;

      </description>
      <pubDate>Mon, 21 Dec 2020 15:00:00 +0000</pubDate>
      <guid>
        /2020/12/21/announcing-volta-100/
      </guid>
    </item>
    
    <item>
      <title>Command Spotlight: volta run</title>
      <link>
        /2020/11/25/command-spotlight-volta-run/
      </link>
      <description>
        &lt;p&gt;Volta is designed to be invisible: You type a command like &lt;code class=&quot;highlighter-rouge&quot;&gt;npm start&lt;/code&gt;, and Volta automatically detects and runs the right versions of npm and Node. While that works great most of the time, occasionally you need direct control over the tool versions that are used. Maybe you are trying to reproduce a reported bug or testing how your project works with a different npm version. Whatever the reason, &lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt; lets you &lt;strong&gt;take explicit control of tool selection&lt;/strong&gt; right from the command line.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Let’s check out some examples of how you can use &lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;volta run --node lts --npm 7 npm start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will run the command &lt;code class=&quot;highlighter-rouge&quot;&gt;npm start&lt;/code&gt; using the most recent LTS Node version and major version 7 of npm.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;volta run --yarn 1.22.1 yarn add typescript
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will run &lt;code class=&quot;highlighter-rouge&quot;&gt;yarn add typescript&lt;/code&gt; using Yarn 1.22.1 and whichever Node version Volta would normally find (probably from your &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; file).&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;volta run --node latest --bundled-npm --env NPM_CONFIG_LOGLEVEL=silly npm install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will run &lt;code class=&quot;highlighter-rouge&quot;&gt;npm install&lt;/code&gt; using the latest Node, the npm version bundled with that Node, and with the environment variable &lt;code class=&quot;highlighter-rouge&quot;&gt;NPM_CONFIG_LOGLEVEL&lt;/code&gt; set to &lt;code class=&quot;highlighter-rouge&quot;&gt;silly&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can even use &lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt; inside your CI configuration to test against multiple tool versions. For example, the following GitHub Actions configuration for a job will run &lt;code class=&quot;highlighter-rouge&quot;&gt;npm test&lt;/code&gt; using every combination of Node 10, 12, &amp;amp; 14 with npm 5, 6, and 7:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;strategy:
  matrix:
    node: [10,12,14]
    npm: [5,6,7]
steps:
  - run: volta run --node ${{ matrix.node }} --npm ${{ matrix.npm }} npm test
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As with any Volta command, if one of the versions you set at the command line hasn’t been seen before, Volta will automatically download it and make it available. No need to install it separately, just tell Volta which version to use and it will make it happen! For more details about the available command-line flags, visit the &lt;a href=&quot;https://docs.volta.sh/reference/run&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While most of the time Volta’s automatic version detection means you don’t have to worry about which version of Node or npm is needed, sometimes you need to take over and have full control. In those situations, &lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt; is a powerful tool that lets you tell Volta directly which versions to use for a one-off command.&lt;/p&gt;

      </description>
      <pubDate>Wed, 25 Nov 2020 15:00:00 +0000</pubDate>
      <guid>
        /2020/11/25/command-spotlight-volta-run/
      </guid>
    </item>
    
    <item>
      <title>Announcing Volta 0.9.0</title>
      <link>
        /2020/10/22/announcing-volta-090/
      </link>
      <description>
        &lt;p&gt;The Volta team is happy to announce that Volta 0.9.0 is now available! This release includes a significant update to how global packages are handled that we’re excited to share!
&lt;!--more--&gt;&lt;/p&gt;

&lt;h1 id=&quot;whats-new&quot;&gt;What’s New?&lt;/h1&gt;

&lt;h2 id=&quot;install-packages-with-your-package-manager&quot;&gt;Install Packages with Your Package Manager&lt;/h2&gt;

&lt;p&gt;Installing global packages with Volta has &lt;a href=&quot;/2019/06/18/global-installs-done-right/&quot;&gt;many benefits over traditional globals&lt;/a&gt;. Until now, to take advantage of those benefits, you needed to install the packages using &lt;code class=&quot;highlighter-rouge&quot;&gt;volta install&lt;/code&gt; instead of your package manager. With Volta 0.9.0, you can now install packages directly using your package manager and still get the upside that Volta provides:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--global&lt;/span&gt; typescript
yarn global add typescript
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Volta will ensure that a shim is set up and pin the Node version so that the package continues to work, even if you change your default Node in the future. Similarly, you can use your package manager to uninstall a global package and Volta will make sure everything is cleaned up correctly:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm uninstall &lt;span class=&quot;nt&quot;&gt;--global&lt;/span&gt; yo
yarn global remove yo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;direct-control-over-pinned-node-version&quot;&gt;Direct Control Over Pinned Node Version&lt;/h2&gt;

&lt;p&gt;When pinning the Node version for an installed package, Volta will now use your current default Node version, so there should be no surprises about which Node is used after installing a package. If you want to adjust that to install a package with a different version, you can use &lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt; to modify the command:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;volta run &lt;span class=&quot;nt&quot;&gt;--node&lt;/span&gt; 15 npm &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--global&lt;/span&gt; ts-node
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;better-interop-between-packages&quot;&gt;Better Interop Between Packages&lt;/h2&gt;

&lt;p&gt;Previously, a consequence of Volta’s isolation for packages was that packages weren’t able to call or interact with one another. With Volta 0.9.0, we have resolved those issues so that global binaries can now correctly call other global binaries or &lt;code class=&quot;highlighter-rouge&quot;&gt;require&lt;/code&gt; global libraries.&lt;/p&gt;

&lt;h2 id=&quot;removal-of-package-hooks&quot;&gt;Removal of Package Hooks&lt;/h2&gt;

&lt;p&gt;Now that the installation is handled by the package managers, Volta no longer supports &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;package&quot;&lt;/code&gt; hooks in the &lt;code class=&quot;highlighter-rouge&quot;&gt;hooks.json&lt;/code&gt; file. Instead, if you need to modify the download location for packages, use the standard configuration files for your package manager (i.e. &lt;code class=&quot;highlighter-rouge&quot;&gt;.npmrc&lt;/code&gt; and/or &lt;code class=&quot;highlighter-rouge&quot;&gt;.yarnrc&lt;/code&gt;).&lt;/p&gt;

&lt;h2 id=&quot;miscellaneous-improvements&quot;&gt;Miscellaneous Improvements&lt;/h2&gt;

&lt;p&gt;In addition to the global package improvements, Volta 0.9.0 also includes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Support for proxying network requests using the &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTP_PROXY&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;HTTPS_PROXY&lt;/code&gt;, and &lt;code class=&quot;highlighter-rouge&quot;&gt;NO_PROXY&lt;/code&gt; environment variables.&lt;/li&gt;
  &lt;li&gt;Further reductions in unnecessary filesystem operations to improve startup time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;try-it-out&quot;&gt;Try it out!&lt;/h1&gt;

&lt;p&gt;To try Volta for the first time or upgrade your existing installation, follow the instructions on our &lt;a href=&quot;https://docs.volta.sh/guide/getting-started&quot;&gt;Getting Started&lt;/a&gt; page!&lt;/p&gt;

&lt;p&gt;Finally, a huge amount of work went into making this release possible, and we would like to thank everyone who contributed ideas, feedback, bug reports, code, and moral support to the project.&lt;/p&gt;

      </description>
      <pubDate>Thu, 22 Oct 2020 15:00:00 +0000</pubDate>
      <guid>
        /2020/10/22/announcing-volta-090/
      </guid>
    </item>
    
    <item>
      <title>Declare Your Tools, Don't Install Them</title>
      <link>
        /2020/07/23/declare-your-tools/
      </link>
      <description>
        &lt;p&gt;Declarative UI—powered by packages like React, Vue, or Ember—has completely taken over the world. These techniques let you focus on describing how an app should look and feel, without having to worry about how the page is updated. Despite that, installing the tools you need for development is often stuck in an imperative world. In the same way that modern frameworks take the worry out of updating your UI, &lt;strong&gt;Volta liberates you from worrying about the state of your tools!&lt;/strong&gt;
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Installing your development tools—Node, package managers, and others—is almost always done imperatively: You have to tell the computer to use specific versions and when to switch versions. This makes things complicated and error-prone, especially when you are working in multiple projects that have different tool requirements.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Every time you switch to a new project, you have to remember which tools and versions are needed for the new project and manually switch.&lt;/li&gt;
  &lt;li&gt;For teams, when a decision is made to upgrade to a new version of Node, the entire team needs to be notified.&lt;/li&gt;
  &lt;li&gt;Forgetting to switch can lead to confusing bugs that are difficult for other contributors to reproduce.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this model, every time you run a tool, you need to be aware of the context in which you are working to make sure you are running the correct version. By contrast, Volta takes care of picking the correct version of your tools for every context, leaving you free to focus on your work.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Volta delegates to the correct local versions of global packages when you are working in a project (see &lt;a href=&quot;https://blog.volta.sh/2019/06/18/global-installs-done-right/&quot;&gt;Global Installs Done Right&lt;/a&gt; for more).&lt;/li&gt;
  &lt;li&gt;Node and package manager versions are specified directly in &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; and Volta will always use those versions.&lt;/li&gt;
  &lt;li&gt;The shims that power Volta re-evaluate the context on every execution, so whenever those values change, the new versions are immediately reflect in your terminal.&lt;/li&gt;
  &lt;li&gt;If a team decides to update the Node version, they only need to change the value in &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; and every member will immediately start using the new version.&lt;/li&gt;
  &lt;li&gt;Volta automatically downloads new versions of tools that it hasn’t seen before, so you don’t even need to track whether you have installed it or not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite all this context detection, Volta is built as a native binary and committed to speed, so the overhead is nearly imperceptible.&lt;/p&gt;

&lt;p&gt;Volta’s declarative model frees you from having to constantly track which context you are in, letting you focus on writing great software. You no longer need to think, “Did I remember to switch to the correct npm version?,” just run &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt; and you get the right version!&lt;/p&gt;

      </description>
      <pubDate>Thu, 23 Jul 2020 15:00:00 +0000</pubDate>
      <guid>
        /2020/07/23/declare-your-tools/
      </guid>
    </item>
    
    <item>
      <title>Announcing Volta 0.8.0</title>
      <link>
        /2020/05/01/announcing-volta-080/
      </link>
      <description>
        &lt;p&gt;The Volta team is happy to announce that Volta 0.8.0 is now available! This is a significant release, with several new features we’re excited to share with you: Custom &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt; versions, &lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt;, and more!
&lt;!--more--&gt;&lt;/p&gt;

&lt;h1 id=&quot;whats-new&quot;&gt;What’s New?&lt;/h1&gt;

&lt;h2 id=&quot;support-for-custom-npm&quot;&gt;Support for Custom npm&lt;/h2&gt;

&lt;p&gt;With Volta 0.8.0, you can now use custom versions of &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt; and are not tied to the version bundled with Node. Using the same commands you use to manage &lt;code class=&quot;highlighter-rouge&quot;&gt;yarn&lt;/code&gt;, you can now also manage &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt; to select a custom version:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;volta pin npm@latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you’re using a custom &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt; version but want to switch back to using the version bundled with Node, no need to go searching for the specific version! You can use the &lt;code class=&quot;highlighter-rouge&quot;&gt;bundled&lt;/code&gt; tag to switch back to the version that is bundled with your Node distribution:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;volta pin npm@bundled
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can also manage your default version of &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt; using &lt;code class=&quot;highlighter-rouge&quot;&gt;volta install&lt;/code&gt; in the same way.&lt;/p&gt;

&lt;h2 id=&quot;new-command--volta-run&quot;&gt;New Command – &lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt; is a new command that lets you run a one-off command with custom versions of your tools – &lt;em&gt;without&lt;/em&gt; needing to modify your pinned or default versions! Say you want to do a test run of your app with a new version of Node and Yarn, simply pass those versions to the &lt;code class=&quot;highlighter-rouge&quot;&gt;volta run&lt;/code&gt; command:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;volta run &lt;span class=&quot;nt&quot;&gt;--node&lt;/span&gt; latest &lt;span class=&quot;nt&quot;&gt;--yarn&lt;/span&gt; 1.19 yarn &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Volta will resolve the versions you selected, and automatically download any tools that aren’t already available, then run your command using those tools. Any versions you don’t set at the command-line will be filled using the pinned versions for your project or your defaults.&lt;/p&gt;

&lt;p&gt;For full details on the options, see the &lt;a href=&quot;https://docs.volta.sh/reference/run&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;human-formatter-for-volta-list&quot;&gt;Human Formatter for &lt;code class=&quot;highlighter-rouge&quot;&gt;volta list&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;We added &lt;code class=&quot;highlighter-rouge&quot;&gt;volta list&lt;/code&gt; all the way back in Volta 0.6.2, to allow inspecting the tools and versions you have available. At the time, the only output format we supported was &lt;code class=&quot;highlighter-rouge&quot;&gt;plain&lt;/code&gt;, which output the tools in a simple way, suitable for parsing in a script. In Volta 0.8.0, we added a new format – &lt;code class=&quot;highlighter-rouge&quot;&gt;human&lt;/code&gt; – which is designed to be clearer and more user-friendly:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;volta list
⚡️ Currently active tools:

    Node: v12.16.2 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;default&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    npm: v6.14.4 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;default&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    Yarn: v1.22.4 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;default&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    Tool binaries available:
        ember &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;default&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The new format is the default when you run &lt;code class=&quot;highlighter-rouge&quot;&gt;volta list&lt;/code&gt;, so you don’t need to do anything special to see the new output.&lt;/p&gt;

&lt;h2 id=&quot;bug-fixes-and-experience-improvements&quot;&gt;Bug Fixes and Experience Improvements&lt;/h2&gt;

&lt;p&gt;In addition to the big features, Volta 0.8.0 has a number of performance enhancements, UX improvements, and bug fixes. Including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;More accurate installation - The Volta installer will now do a better job of ensuring that it is correctly configured on your system.&lt;/li&gt;
  &lt;li&gt;Faster startup - We reduced some of the filesystem operations so that tools start up even faster than they did before.&lt;/li&gt;
  &lt;li&gt;Error details are now always written to the terminal in CI environments.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;volta list&lt;/code&gt; correctly handles showing scoped packages.&lt;/li&gt;
  &lt;li&gt;Node resolution now handles switching between internal and external repos more smoothly.&lt;/li&gt;
  &lt;li&gt;Small typo fixes and improvements in the output formatting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;try-it-out&quot;&gt;Try it out!&lt;/h1&gt;

&lt;p&gt;To try Volta for the first time or upgrade your existing installation, follow the instructions on our &lt;a href=&quot;https://docs.volta.sh/guide/getting-started&quot;&gt;Getting Started&lt;/a&gt; page!&lt;/p&gt;

&lt;p&gt;Finally, a huge amount of work went into making this release possible, and we would like to thank everyone who contributed ideas, feedback, bug reports, code, and moral support to the project.&lt;/p&gt;

      </description>
      <pubDate>Fri, 01 May 2020 15:00:00 +0000</pubDate>
      <guid>
        /2020/05/01/announcing-volta-080/
      </guid>
    </item>
    
    <item>
      <title>Every Error is a Help Screen in Disguise</title>
      <link>
        /2020/03/30/every-error-help-screen/
      </link>
      <description>
        &lt;p&gt;Nothing is quite so frustrating as a piece of technology giving you an error message that you don’t understand. We’ve all felt that surge of anger like we were a character in &lt;em&gt;Office Space&lt;/em&gt;, “’PC Load Letter,’ what the $&amp;amp;@# does that mean?!” With Volta, we’re committed to having helpful errors. In fact, &lt;strong&gt;if you ever find yourself frustrated or confused by an error message from Volta, we consider that a bug&lt;/strong&gt;, so please &lt;a href=&quot;https://github.com/volta-cli/volta/issues/new&quot;&gt;file an issue&lt;/a&gt;!
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Early on in the development of Volta, we revamped our error-handling code so that every error in the program is associated with a custom error message. These error messages provide context of what Volta was trying to do when the error occurred and they all provide a call-to-action for what you can do to solve the problem. For example, if you try to run &lt;code class=&quot;highlighter-rouge&quot;&gt;node&lt;/code&gt; before installing a version of Node, you don’t see a generic &lt;code class=&quot;highlighter-rouge&quot;&gt;command not found&lt;/code&gt; message, you see this:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;
  &lt;div class=&quot;highlight&quot;&gt;
    &lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ node --version
&lt;span style=&quot;color: #FF6D67; font-weight: bold;&quot;&gt;Volta error:&lt;/span&gt; Node is not available.

To run any Node command, first set a default version using `volta install node`
Error details written to ~/.volta/log/volta-error-2020-03-30_08_00_00.log&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;First, we let the user know what happened and why the command didn’t work. Next, we give advice on how to fix the problem. Finally, we provide an error log with more information in case the user needs to dig in deeper. All of our error messages are structured similarly: Context of what the problem is, call-to-action, and additional information.&lt;/p&gt;

&lt;p&gt;We believe in putting effort into the error experience because we recognize that unexpected errors are when users are at their most frustrated. Something went wrong, you didn’t expect it, and now you have to figure out what to do next. If we just show you a generic error message or a cryptic error code with no guidance, we only compound that frustration. Now you have to go figure out &lt;em&gt;what&lt;/em&gt; went wrong, then figure out &lt;em&gt;how&lt;/em&gt; to fix it, before you can finally get back to the task at hand. Our goal is to give you a helpful error message and guidance on how to move forward, so that you can quickly and easily get back to your work.&lt;/p&gt;

&lt;p&gt;Errors are easy to overlook because they aren’t part of what software is &lt;em&gt;supposed&lt;/em&gt; to do. We’ve dedicated the time to make our error experience as gentle as possible in order to make using Volta a delightful experience, even when things aren’t working correctly.&lt;/p&gt;

      </description>
      <pubDate>Mon, 30 Mar 2020 15:00:00 +0000</pubDate>
      <guid>
        /2020/03/30/every-error-help-screen/
      </guid>
    </item>
    
    <item>
      <title>Global installs done right</title>
      <link>
        /2019/06/18/global-installs-done-right/
      </link>
      <description>
        &lt;p&gt;We built Volta to make managing, sharing, and using JavaScript command-line tools convenient and reliable. To make this work, we had to tackle the problem of global installs: a simple way to distribute command-line binaries but with issues that cause some developers to shy away from using them. &lt;strong&gt;Volta makes global installs a first-class part of the JavaScript tooling experience&lt;/strong&gt;, making them both convenient and safe to use.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;So why do folks avoid global installs in the first place?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Relying on global tools can make your project depend on something that isn’t listed in its &lt;code class=&quot;highlighter-rouge&quot;&gt;dependencies&lt;/code&gt; or &lt;code class=&quot;highlighter-rouge&quot;&gt;devDependencies&lt;/code&gt;, making it harder for other developers to contribute.&lt;/li&gt;
  &lt;li&gt;Other developers could have different versions of the same global tools, leading to hard-to-identify bugs or inconsistencies in behavior.&lt;/li&gt;
  &lt;li&gt;Unrelated projects on your own machine might depend on different versions of a tool, meaning you now have to manage those versions and switch between them when switching projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some experts advocate including any tools your project depends on in your dependencies and then using the &lt;code class=&quot;highlighter-rouge&quot;&gt;scripts&lt;/code&gt; hash in package.json to facilitate running those tools. This way any developer using your code will be able to easily run the same versions of the same tools that you do. This solution, while powerful, is not without its own issues:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Requires the mental overhead of knowing what script to run to invoke a given tool (&lt;code class=&quot;highlighter-rouge&quot;&gt;npm test&lt;/code&gt; vs &lt;code class=&quot;highlighter-rouge&quot;&gt;mocha&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;Can make it tricky to customize the command, for example to run a single test from a test suite.&lt;/li&gt;
  &lt;li&gt;Doesn’t work for tools that are used to bootstrap projects, like &lt;code class=&quot;highlighter-rouge&quot;&gt;create-react-app&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Volta solves both of these sets of problems by providing smart proxies for any and all of your JS tools.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;By running &lt;code class=&quot;highlighter-rouge&quot;&gt;volta install mocha&lt;/code&gt;, you let Volta know that you want &lt;code class=&quot;highlighter-rouge&quot;&gt;mocha&lt;/code&gt; to be available everywhere in your terminal. Volta will download the latest version (or if you want you can specify a specific version) to use as the default.&lt;/li&gt;
  &lt;li&gt;From that point forward, you’ll be able to run that default version of &lt;code class=&quot;highlighter-rouge&quot;&gt;mocha&lt;/code&gt; directly in your terminal, just as if you had globally installed it with npm.&lt;/li&gt;
  &lt;li&gt;However, if you run &lt;code class=&quot;highlighter-rouge&quot;&gt;mocha&lt;/code&gt; in a project that has the &lt;code class=&quot;highlighter-rouge&quot;&gt;mocha&lt;/code&gt; package as a dependency, Volta will automatically delegate to the local version installed in &lt;code class=&quot;highlighter-rouge&quot;&gt;node_modules&lt;/code&gt;, without you having to change the command at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This proxy behavior lets you get all the usefulness of having tools directly available in your terminal, without having to worry about switching versions when switching projects. As a bonus, Volta will also pin a version of Node when installing each tool, so you don’t have to worry about having to re-install the tools if you update your default version of Node—they will all continue to work!&lt;/p&gt;

&lt;p&gt;To learn more and try Volta for yourself, check out our home page &lt;a href=&quot;https://volta.sh&quot;&gt;https://volta.sh&lt;/a&gt;. You can also reach us on Twitter &lt;a href=&quot;https://twitter.com/usevolta&quot;&gt;@usevolta&lt;/a&gt; or join our Discord &lt;a href=&quot;https://discord.gg/hgPTz9A&quot;&gt;https://discord.gg/hgPTz9A&lt;/a&gt;&lt;/p&gt;

      </description>
      <pubDate>Tue, 18 Jun 2019 15:00:00 +0000</pubDate>
      <guid>
        /2019/06/18/global-installs-done-right/
      </guid>
    </item>
    
    <item>
      <title>Hello Volta!</title>
      <link>
        /2019/05/13/hello-volta/
      </link>
      <description>
        &lt;p&gt;We’ve got a new version available… and a new name!&lt;/p&gt;

&lt;p&gt;Volta 0.5.0 is out, with lots of new features and improvements, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Improved stability&lt;/li&gt;
  &lt;li&gt;Simpler and more helpful error messages&lt;/li&gt;
  &lt;li&gt;Safe, fast management of npm-distributed binaries!&lt;/li&gt;
  &lt;li&gt;Idiomatic version syntax (e.g. &lt;code class=&quot;highlighter-rouge&quot;&gt;typescript@3.4&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Compatibility note for current users:&lt;/strong&gt; The &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; key for pinned tools is now called &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;volta&quot;&lt;/code&gt;. You’ll need to rename the &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;toolchain&quot;&lt;/code&gt; key to &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;volta&quot;&lt;/code&gt; in any existing pinned projects.&lt;/p&gt;

&lt;p&gt;About the name: This project started as a Node version manager (hence the “No—” alliteration in the old name Notion). Since then, two things happened: first, a number of people brought to our attention the Notion productivity tool, and we decided the polite thing to do would be to rename. Second, since the project has grown in scope to let you &lt;a href=&quot;https://docs.volta.sh/guide/understanding#installing-package-binaries&quot;&gt;manage arbitrary JavaScript tools&lt;/a&gt;, we figured it was a good opportunity to rethink the name anyway!&lt;/p&gt;

&lt;p&gt;For these reasons and after internal discussion, we decided on a new name. What we once called Notion is now Volta: The JavaScript Launcher ⚡! Our new website is up at &lt;a href=&quot;https://volta.sh/&quot;&gt;https://volta.sh/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Download Volta 0.5.0 and let us know what you think!&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl &lt;span class=&quot;nt&quot;&gt;-sSLf&lt;/span&gt; https://get.volta.sh | bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Last but not least, we owe our progress to a bunch of amazing collaborators and contributors. Special thanks to Ben Blank, Steve Calvert, Travis Hoover, Rob Jackson, Chris Krycho, Stef Penner, NullVoxPopuli, and Michael Stewart for their great feedback and contributions.&lt;/p&gt;

      </description>
      <pubDate>Mon, 13 May 2019 17:07:41 +0000</pubDate>
      <guid>
        /2019/05/13/hello-volta/
      </guid>
    </item>
    
    <item>
      <title>State of the Notion</title>
      <link>
        /2019/02/05/state-of-the-notion/
      </link>
      <description>
        &lt;p&gt;&lt;span class=&quot;blog-notice&quot;&gt;&lt;strong&gt;NOTE: This post predates this project’s &lt;a href=&quot;https://blog.volta.sh/2019/05/13/hello-volta/&quot;&gt;rename to Volta&lt;/a&gt;.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Notion is a &lt;strong&gt;JavaScript toolchain manager&lt;/strong&gt;, making sure you always get the right version of Node, package managers like npm and Yarn, and JS command-line tools. Best of all, Notion makes tool requirements &lt;strong&gt;declarative and reproducible&lt;/strong&gt; by using&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; &lt;em&gt;to remember and launch the right versions of a project’s required tools, so developers and users always see their projects build and run in a consistent environment.&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;whats-new&quot;&gt;What’s new?&lt;/h1&gt;

&lt;p&gt;Lots of good stuff is happening—I can feel the momentum picking up!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Michael Stewart is making great progress on &lt;a href=&quot;https://github.com/notion-cli/notion/issues/148&quot;&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;notion install &amp;lt;package&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Chuck Pierce is getting us started on &lt;a href=&quot;https://github.com/notion-cli/notion/pull/241&quot;&gt;hooks&lt;/a&gt; and &lt;a href=&quot;https://github.com/notion-cli/notion/pull/249&quot;&gt;error message quality&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Chris Krycho and I have been working on the &lt;a href=&quot;https://www.notionjs.com/&quot;&gt;web site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;!--more--&gt;

&lt;h1 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h1&gt;

&lt;p&gt;Some of the big things I think we need to tackle next are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Get the work I mentioned done, of course!&lt;/li&gt;
  &lt;li&gt;Take another pass at the Unix installation scripts and make them more robust for all shells.&lt;/li&gt;
  &lt;li&gt;Get the Windows installer working.&lt;/li&gt;
  &lt;li&gt;Make the shims more robust (signal handling, shim name detection logic).&lt;/li&gt;
  &lt;li&gt;Easier self-update workflow.&lt;/li&gt;
  &lt;li&gt;Get lots of user input and address whatever issues come up!&lt;/li&gt;
&lt;/ul&gt;

      </description>
      <pubDate>Tue, 05 Feb 2019 17:07:41 +0000</pubDate>
      <guid>
        /2019/02/05/state-of-the-notion/
      </guid>
    </item>
    
    <item>
      <title>State of the Notion</title>
      <link>
        /2018/08/20/state-of-the-notion/
      </link>
      <description>
        &lt;p&gt;&lt;span class=&quot;blog-notice&quot;&gt;&lt;strong&gt;NOTE: This post predates this project’s &lt;a href=&quot;https://blog.volta.sh/2019/05/13/hello-volta/&quot;&gt;rename to Volta&lt;/a&gt;.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Notion is a &lt;strong&gt;JavaScript toolchain manager&lt;/strong&gt;, making sure you always get the right version of Node, package managers like npm and Yarn, and JS command-line tools. Best of all, Notion makes tool requirements &lt;strong&gt;declarative and reproducible&lt;/strong&gt; by using&lt;/em&gt; &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt; &lt;em&gt;to remember and launch the right versions of a project’s required tools, so developers and users always see their projects build and run in a consistent environment.&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;minimum-viable-status-update&quot;&gt;Minimum viable status update&lt;/h1&gt;

&lt;p&gt;If you’re reading this, it’s probably because one of our contributors reached out to you for early feedback. (Thank you!) Either that, or word spread faster than we expected… 😝&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;To get started using Notion, you can install the current snapshot with:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;curl &lt;span class=&quot;nt&quot;&gt;-sSLf&lt;/span&gt; https://get.notionjs.com | bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then when you open a new terminal, you should be able to run Notion—you can explore its usage by typing &lt;code class=&quot;highlighter-rouge&quot;&gt;notion help&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So here’s where we are so far: we’ve reached a first milestone that hits enough significant use cases to be able to start dogfooding. It’s currently working on Linux and Mac (bash only), but we’ve got the structure in place to start adding support for other shells as well as Windows.&lt;/p&gt;

&lt;p&gt;We’re still a ways off from a full release, but this first release demonstrates a few of the things we think are going to make Notion powerful: in particular, a new approach to collaborating on Node projects.&lt;/p&gt;

&lt;h1 id=&quot;projects&quot;&gt;Projects&lt;/h1&gt;

&lt;p&gt;The goal of Notion is to enable collaborators on a project to always work with the same version of Node. You can select the Node version for a project with &lt;code class=&quot;highlighter-rouge&quot;&gt;notion pin&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/projects/my-app
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;notion pin node 10.7
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This command resolves the Node version, fetches the installer, and pins your project to that version by adding a &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;toolchain&quot;&lt;/code&gt; key to your &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-json highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;s2&quot;&gt;&quot;toolchain&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;10.7.0&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can think of this as a declarative way of documenting the version of the Node platform that the project is intended to build and run on.&lt;/p&gt;

&lt;p&gt;Now here’s the cool part: whenever you’re in a directory inside your project, Notion’s shims to Node executables (like &lt;code class=&quot;highlighter-rouge&quot;&gt;node&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;npm&lt;/code&gt;) &lt;em&gt;automatically&lt;/em&gt; switch to the right versions. For example, if &lt;code class=&quot;highlighter-rouge&quot;&gt;app1&lt;/code&gt; is pinned to Node 10.7.0, you’d see this when entering the project directory:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/projects/app1
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;node &lt;span class=&quot;nt&quot;&gt;--version&lt;/span&gt;
v10.7.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And then if &lt;code class=&quot;highlighter-rouge&quot;&gt;app2&lt;/code&gt; is pinned to, say, Node 8.9.4, you’d see this instead:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/projects/app2
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;node &lt;span class=&quot;nt&quot;&gt;--version&lt;/span&gt;
v8.9.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In other words, &lt;strong&gt;you never have to think about switching Node setups&lt;/strong&gt; as you navigate between projects. And all your project’s collaborators can use Notion to be sure they’re always working with the right toolchain for the project. Once you check in the changes to &lt;code class=&quot;highlighter-rouge&quot;&gt;package.json&lt;/code&gt;, your team will automatically get the right versions of all the relevant tools.&lt;/p&gt;

&lt;h1 id=&quot;user-toolchains&quot;&gt;User toolchains&lt;/h1&gt;

&lt;p&gt;(First, a caveat: this part of Notion’s implementation is still pretty basic, and some of the workflows are going to change and improve before Notion 1.0 ships.)&lt;/p&gt;

&lt;p&gt;The command for installing user tools is &lt;code class=&quot;highlighter-rouge&quot;&gt;notion install&lt;/code&gt;. For example, you can choose your version of Node for personal use, which is what you get when you run &lt;code class=&quot;highlighter-rouge&quot;&gt;node&lt;/code&gt; anywhere &lt;em&gt;other&lt;/em&gt; than in a pinned project:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;notion &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;node 10
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; ~/Desktop &lt;span class=&quot;c&quot;&gt;# or anywhere that isn&#39;t a pinned project&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;node &lt;span class=&quot;nt&quot;&gt;--version&lt;/span&gt;
v10.7.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There will eventually be a similar workflow for installing package binaries, and automatic creation of shims in your &lt;code class=&quot;highlighter-rouge&quot;&gt;PATH&lt;/code&gt; for using them.&lt;/p&gt;

&lt;h1 id=&quot;where-can-we-go-from-here&quot;&gt;Where can we go from here?&lt;/h1&gt;

&lt;p&gt;Here’s a few of the topics we plan to tackle eventually, in no particular order:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Windows support, and other shells:&lt;/strong&gt; We will ensure that Notion 1.0 ships on Windows as a fully supported platform! We also intend to support popular Unix shells like zsh, fish, and any others that contributors might want to implement.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Plugins:&lt;/strong&gt; We plan to make Notion extensible, so e.g. your company’s IT department can configure Notion to provision tools from a private intranet. We’re also working on enabling companies to collect metrics about usage patterns, outages, etc. (These are all disabled by default for privacy.)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CI and offline support:&lt;/strong&gt; Continuous integration environments bring some extra requirements, like the ability to choose from a matrix of toolchain options, and the ability to split apart the fetching of remote assets and using those assets (often in a network-disabled sandbox) into separate phases.&lt;/li&gt;
&lt;/ul&gt;

      </description>
      <pubDate>Mon, 20 Aug 2018 17:32:05 +0000</pubDate>
      <guid>
        /2018/08/20/state-of-the-notion/
      </guid>
    </item>
    
  </channel>
</rss>
