<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0"><channel><title>Pulumi Blog: Package manager</title><link>https://www.pulumi.com/blog/tag/package-manager/</link><description>Pulumi blog posts: Package manager.</description><language>en-us</language><pubDate>Mon, 28 Jul 2025 09:50:26 +0100</pubDate><item><title>Pulumi + Bun: Supercharge Your Infrastructure Dependencies</title><link>https://www.pulumi.com/blog/bun-package-manager/</link><pubDate>Mon, 28 Jul 2025 09:50:26 +0100</pubDate><guid>https://www.pulumi.com/blog/bun-package-manager/</guid><description>
&lt;img src="https://www.pulumi.com/images/generated/blog/bun-package-manager/index.png" /&gt;
&lt;p&gt;Today, we are announcing a new addition that allows Pulumi users to use &lt;a href="https://bun.sh/"&gt;Bun&lt;/a&gt; as their package manager, offering an alternative to npm, Yarn, or pnpm. Bun, a recently released JavaScript runtime, bundler, transpiler, and package manager, provides a faster way to manage Pulumi project dependencies.&lt;/p&gt;
&lt;h2 id="what-is-this-bun-thing-youre-talking-about"&gt;What is this Bun thing you&amp;rsquo;re talking about?&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve spent time around the JavaScript ecosystem, then you&amp;rsquo;ve probably heard of Bun. If you haven’t, then be aware that it presents itself as a JavaScript toolkit, a direct drop-in replacement for NodeJS. However, the part that we like at Pulumi is its use as a package manager. According to the &lt;a href="https://bun.com/docs/cli/install"&gt;Bun install documentation&lt;/a&gt;, switching from &lt;code&gt;npm install&lt;/code&gt; to &lt;code&gt;bun install&lt;/code&gt; can make your installations up to 25 times faster.&lt;/p&gt;
&lt;div class="note note-warning"&gt;
&lt;div class="icon-and-line"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" class="ph-icon ph-icon--fill" fill="currentColor" aria-hidden="true" focusable="false"&gt;&lt;use href="https://www.pulumi.com/icons/sprite.fd29ca76b1ea49dbd3f6703cc46ae6138b0ed98cabf8d2c60a23a474880f964d.svg#p-warning-fill"/&gt;&lt;/svg&gt;
&lt;div class="line"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="content"&gt;&lt;ol&gt;
&lt;li&gt;Pulumi uses Bun solely as a package manager. You cannot use Bun to write Automation API-based applications, nor do we have a language plugin for Bun.&lt;/li&gt;
&lt;li&gt;This requires Bun version 1.2 or greater due to the text-based lockfile introduced in this version.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="getting-started-with-bun-and-pulumi"&gt;Getting started with Bun and Pulumi&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re already using NodeJS with Pulumi, the easiest way to install Bun is to run the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g bun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;a href="https://bun.com/docs/installation"&gt;Bun installation documentation&lt;/a&gt; has more information on other methods available.&lt;/p&gt;
&lt;h2 id="how-to-use-in-a-new-project"&gt;How to use in a new project&lt;/h2&gt;
&lt;p&gt;If you want to try this out on a new project, you can use&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir new-bun-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; new-bun-project
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi new typescript
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You&amp;rsquo;ll get the usual prompts to set the project name, the description, and the stack name:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This &lt;span class="nb"&gt;command&lt;/span&gt; will walk you through creating a new Pulumi project.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter a value or leave blank to accept the &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;, and press &amp;lt;ENTER&amp;gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Press ^C at any &lt;span class="nb"&gt;time&lt;/span&gt; to quit.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Project name &lt;span class="o"&gt;(&lt;/span&gt;new-bun-project&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Project description &lt;span class="o"&gt;(&lt;/span&gt;A minimal TypeScript Pulumi program&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created project &lt;span class="s1"&gt;&amp;#39;new-bun-project&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter your desired stack name.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To create a stack in an organization, use the format &amp;lt;org-name&amp;gt;/&amp;lt;stack-name&amp;gt; &lt;span class="o"&gt;(&lt;/span&gt;e.g. &lt;span class="sb"&gt;`&lt;/span&gt;acmecorp/dev&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stack name &lt;span class="o"&gt;(&lt;/span&gt;dev&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then you&amp;rsquo;ll be shown a list of the package managers to choose from (obviously we&amp;rsquo;ll use the arrow keys to select the bun option):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The package manager to use &lt;span class="k"&gt;for&lt;/span&gt; installing dependencies &lt;span class="o"&gt;[&lt;/span&gt;Use arrows to move, &lt;span class="nb"&gt;type&lt;/span&gt; to filter&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; npm
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pnpm
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; yarn
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; bun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hit the &lt;code&gt;ENTER&lt;/code&gt; key to make your selection, and you&amp;rsquo;ll see the &lt;code&gt;bun install&lt;/code&gt; output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The package manager to use &lt;span class="k"&gt;for&lt;/span&gt; installing dependencies bun
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Installing dependencies...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bun install v1.2.18 &lt;span class="o"&gt;(&lt;/span&gt;0d4089ea&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ @types/node@18.19.120 &lt;span class="o"&gt;(&lt;/span&gt;v24.1.0 available&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ typescript@5.8.3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+ @pulumi/pulumi@3.186.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;272&lt;/span&gt; packages installed &lt;span class="o"&gt;[&lt;/span&gt;1240.00ms&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Blocked &lt;span class="m"&gt;1&lt;/span&gt; postinstall. Run &lt;span class="sb"&gt;`&lt;/span&gt;bun pm untrusted&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; details.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Finished installing dependencies
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your new project is ready to go! ✨
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To perform an initial deployment, run &lt;span class="sb"&gt;`&lt;/span&gt;pulumi up&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The files in the folder look a little different:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x@ - piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:13 node_modules
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;21&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:11 .gitignore
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ 61k piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:13 bun.lock
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;42&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:11 index.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;217&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:11 package.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;198&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:13 Pulumi.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;438&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:11 tsconfig.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(note the &lt;code&gt;bun.lock&lt;/code&gt; instead of the &lt;code&gt;package-lock.json&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;and in the &lt;code&gt;Pulumi.yaml&lt;/code&gt; file, the &lt;code&gt;packagemanager&lt;/code&gt; option is set to &lt;code&gt;bun&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;name: new-bun-project
description: A minimal TypeScript Pulumi program
runtime:
name: nodejs
options:
packagemanager: bun
config:
pulumi:tags:
value:
pulumi:template: typescript
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We will use the Random provider to generate a new password. Let&amp;rsquo;s add the &lt;code&gt;@pulumi/random&lt;/code&gt; package:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;❯ bun add @pulumi/random
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bun add v1.2.18 &lt;span class="o"&gt;(&lt;/span&gt;0d4089ea&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;installed @pulumi/random@4.18.3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;345.00ms&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since we&amp;rsquo;re still using the Pulumi NodeJS runtime, that&amp;rsquo;s all we need Bun for right now.&lt;/p&gt;
&lt;p&gt;The rest is business as usual, so the &lt;code&gt;index.ts&lt;/code&gt; file looks like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;random&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;@pulumi/random&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RandomPassword&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;length&lt;/span&gt;: &lt;span class="kt"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then it&amp;rsquo;s just a case of running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and creating the resources.&lt;/p&gt;
&lt;h2 id="migrating-an-existing-project"&gt;Migrating an existing project&lt;/h2&gt;
&lt;p&gt;If you already have a project set up and are using npm as your package manager, there are a few steps you&amp;rsquo;ll need to follow.&lt;/p&gt;
&lt;p&gt;For this example, I&amp;rsquo;m going to use the code from the Bun example above but set it up using npm instead:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;❯ pulumi new typescript
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This &lt;span class="nb"&gt;command&lt;/span&gt; will walk you through creating a new Pulumi project.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter a value or leave blank to accept the &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;, and press &amp;lt;ENTER&amp;gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Press ^C at any &lt;span class="nb"&gt;time&lt;/span&gt; to quit.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Project name &lt;span class="o"&gt;(&lt;/span&gt;migrate-project&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Project description &lt;span class="o"&gt;(&lt;/span&gt;A minimal TypeScript Pulumi program&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Created project &lt;span class="s1"&gt;&amp;#39;migrate-project&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter your desired stack name.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To create a stack in an organization, use the format &amp;lt;org-name&amp;gt;/&amp;lt;stack-name&amp;gt; &lt;span class="o"&gt;(&lt;/span&gt;e.g. &lt;span class="sb"&gt;`&lt;/span&gt;acmecorp/dev&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stack name &lt;span class="o"&gt;(&lt;/span&gt;dev&lt;span class="o"&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The package manager to use &lt;span class="k"&gt;for&lt;/span&gt; installing dependencies npm
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Installing dependencies...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;added &lt;span class="m"&gt;293&lt;/span&gt; packages, and audited &lt;span class="m"&gt;294&lt;/span&gt; packages in 9s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;43&lt;/span&gt; packages are looking &lt;span class="k"&gt;for&lt;/span&gt; funding
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; run &lt;span class="sb"&gt;`&lt;/span&gt;npm fund&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; details
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;found &lt;span class="m"&gt;0&lt;/span&gt; vulnerabilities
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Finished installing dependencies
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Your new project is ready to go! ✨
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To perform an initial deployment, run &lt;span class="sb"&gt;`&lt;/span&gt;pulumi up&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then we&amp;rsquo;ll install the &lt;code&gt;@pulumi/random&lt;/code&gt; package:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install @pulumi/random
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and checking the folder listing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x@ - piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 node_modules
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;21&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 .gitignore
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;42&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 index.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ 149k piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 package-lock.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;217&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 package.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;198&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 Pulumi.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;438&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 tsconfig.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;we can see that we&amp;rsquo;ve got the usual &lt;code&gt;package-lock.json&lt;/code&gt; file that we expect, and the &lt;code&gt;Pulumi.yaml&lt;/code&gt; file looks like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;name: migrate-project
description: A minimal TypeScript Pulumi program
runtime:
name: nodejs
options:
packagemanager: npm
config:
pulumi:tags:
value:
pulumi:template: typescript
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Note the &lt;code&gt;packagemanager&lt;/code&gt; option).&lt;/p&gt;
&lt;p&gt;To migrate this project to use Bun as the package manager instead, we need to update the &lt;code&gt;Pulumi.yaml&lt;/code&gt; to set the &lt;code&gt;packagemanager&lt;/code&gt; to be &lt;code&gt;bun&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;name: migrate-project
description: A minimal TypeScript Pulumi program
runtime:
name: nodejs
options:
packagemanager: bun
config:
pulumi:tags:
value:
pulumi:template: typescript
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We can use the &lt;code&gt;bun&lt;/code&gt; CLI to migrate the &lt;code&gt;package-lock.json&lt;/code&gt; file to the &lt;code&gt;bun.lock&lt;/code&gt; file, running the following command:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;bun pm migrate
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;which gives us the file structure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x@ - piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 node_modules
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;21&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 .gitignore
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ 64k piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:43 bun.lock
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;42&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 index.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ 149k piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 package-lock.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;217&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 package.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;198&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 Pulumi.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.rw-r--r--@ &lt;span class="m"&gt;438&lt;/span&gt; piers &lt;span class="m"&gt;28&lt;/span&gt; Jul 18:32 tsconfig.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can then delete the &lt;code&gt;package-lock.json&lt;/code&gt; if we want to.&lt;/p&gt;
&lt;p&gt;Then we can run &lt;code&gt;pulumi install&lt;/code&gt; to install the packages to Bun&amp;rsquo;s global cache:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;❯ pulumi install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Installing dependencies...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bun install v1.2.18 &lt;span class="o"&gt;(&lt;/span&gt;0d4089ea&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;15&lt;/span&gt; packages installed &lt;span class="o"&gt;[&lt;/span&gt;60.00ms&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Finished installing dependencies
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and continue with&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pulumi up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="what-else"&gt;What else?&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve baked Bun into the &lt;code&gt;pulumi/pulumi&lt;/code&gt; container, allowing you to make use of the faster package installer in your CI/CD pipeline, including in Pulumi Deployments. If you&amp;rsquo;d like to see Bun become more integrated into Pulumi, there&amp;rsquo;s &lt;a href="https://github.com/pulumi/pulumi/issues/13904"&gt;an open issue&lt;/a&gt; that you can vote on, or even implement if you&amp;rsquo;re interested.&lt;/p&gt;
&lt;h2 id="final-thoughts"&gt;Final thoughts&lt;/h2&gt;
&lt;p&gt;Bun is in the process of establishing itself as the new player in the JavaScript ecosystem. Its focus on speed makes it a great alternative to npm, Yarn, and pnpm when managing Pulumi project dependencies. Give it a try on your next project, and you may wonder how you ever lived without it.&lt;/p&gt;</description><author>Piers Karsenbarg</author><category>typescript</category><category>package-manager</category><category>bun</category></item></channel></rss>