Pulumi has announced that Bun is now a fully supported runtime for Pulumi, going beyond its previous role as merely a package manager option. With the new release of Pulumi 3.227.0, developers can set runtime: bun in their Pulumi.yaml and have Bun execute their entire infrastructure program, with no Node.js installation required.
When Bun first launched in 2022, the pitch was simple: a faster JavaScript runtime built on JavaScriptCore instead of V8. Since then, the project has grown substantially in scope and ambition. Bun was invented by Jarred Sumner, first previewed in May 2021, and released as version 1.0 in September 2023. The runtime distinguishes itself by bundling a package manager, bundler, and test runner into a single binary, all built with the Zig programming language and powered by JavaScriptCore, Apple's WebKit engine. This is rather than the V8 engine used by Node.js and Deno.
The project gained significant institutional backing when it was acquired by Anthropic, which already uses the product for deploying Claude Code. Anthropic stated that Bun "will remain open source and MIT-licensed" and that its development for general use by JavaScript and TypeScript developers will continue. Performance figures have been a consistent selling point: Bun delivers 4x faster startup times (5–15ms vs 60–120ms) and 6–35x faster package installs compared to Node.js.
The integration was among the most requested features in Pulumi's GitHub issue tracker since Bun's 1.0 release. Three capabilities make Bun particularly attractive for Pulumi users. First, native TypeScript execution: Bun runs TypeScript files directly without requiring ts-node or a separate compile step, which has historically added friction to Pulumi TypeScript workflows. Second, faster dependency installation, which speeds up the bootstrapping of infrastructure programs in CI/CD pipelines. Third, Bun aims for 100% Node.js compatibility, so the npm packages already used with Pulumi should work out of the box.
When runtime: bun is configured, Pulumi uses Bun for both running programs and managing packages, removing the need to configure a separate package manager option. A new project template is available via pulumi new bun.
One notable ergonomic improvement concerns async code. In CommonJS Pulumi programs, awaiting a data source before declaring resources required wrapping the program in an async entrypoint function. With Bun's full ESM support, top-level await works at the module level without any wrapper, simplifying program structure considerably.
Teams with existing Node.js-based Pulumi projects can migrate by updating the runtime field in Pulumi.yaml, adjusting tsconfig.json to use Bun's recommended compiler options, including module: "Preserve" and moduleResolution: "bundler", and adding "type": "module" to package.json to opt into ESM.
The release does carry two notable limitations. Pulumi's callback functions, sometimes called magic lambdas, are not supported under the Bun runtime because they rely on function serialization that depends on Node.js v8 and inspector modules not fully available in Bun. Dynamic providers are similarly unsupported for the same reason. Teams that rely on either of these features should remain on runtime: nodejs, though they can still benefit from Bun's faster package management by setting packagemanager: bun in their Node.js runtime configuration.
Bun runtime support requires Bun 1.3 or later and Pulumi 3.227.0 or later.