Skip to content

Add a blog for the new bun runtime#18051

Open
julienp wants to merge 6 commits intomasterfrom
julienp/bun-blog
Open

Add a blog for the new bun runtime#18051
julienp wants to merge 6 commits intomasterfrom
julienp/bun-blog

Conversation

@julienp
Copy link
Copy Markdown
Contributor

@julienp julienp commented Mar 19, 2026

Requires CLI 3.227.0 (about to be released) and @pulumi/pulumi 3.226.0 (already released)
Edit: everything's been released

Need to first merge:

Fixes #18052

@pulumi-bot
Copy link
Copy Markdown
Collaborator

@claude
Copy link
Copy Markdown
Contributor

claude bot commented Mar 19, 2026

Docs Review — PR #18051

Issues

  1. meta_image is a placeholder (blocker) — The meta.png file is literally a "100% CERTIFIED PLACEHOLDER IMAGE". The PR TODO already notes this ("TODO: Image"), but this must be replaced with a real meta image before merging. The review criteria require that meta_image is set and not the default placeholder.

  2. Near-duplicate H2 headings — The post has both "Getting started" (line 47) and "Get started" (line 193) as H2 headings. These are confusingly similar. Consider renaming the final section to something more distinct, e.g., "Try it out" or "Start using Bun with Pulumi".

  3. social frontmatter fields are empty (line 16–18) — The twitter and linkedin fields under social: are blank. If these aren't needed yet, consider removing the empty keys to keep the frontmatter clean, or fill them in before publishing.

Suggestions

  • Line 23 (opening paragraph): The sentence "This was one of our most requested features, and we're excited to ship it." — consider dropping "and we're excited to ship it" to keep the tone more matter-of-fact per blog review guidelines (avoid filler).

What looks good

  • <!--more--> break is correctly positioned after the intro paragraph.
  • All code blocks have language specifiers.
  • Internal links verified: /docs/iac/clouds/aws/guides/lambda/, /docs/iac/concepts/providers/dynamic-providers/, /docs/iac/concepts/functions/function-serialization/, /docs/iac/languages-sdks/javascript/ all resolve.
  • Title is 41 characters (under 60-char limit).
  • Meta description is ~152 characters (under 160-char limit).
  • Author profile julien-poissonnier.toml exists.
  • H2 headings use sentence case correctly.
  • No "easy"/"simple" language detected.
  • The comparison table (runtime vs package manager) is a clear, helpful addition.
  • The known limitations section with the warning callout is well-structured.
  • Adding the bun tag to the existing bun-package-manager post is a nice touch for discoverability.

Publishing readiness checklist

  • <!--more--> break present after intro
  • meta_image set and not the default placeholder — PLACEHOLDER, must be replaced
  • meta_image uses current Pulumi logos — cannot verify, placeholder image
  • Author profile exists with avatar
  • All links resolve
  • Code examples correct with language specifiers
  • No animated GIFs used as meta_image
  • Images have alt text; screenshots have 1px gray borders (no screenshots in this post)
  • Title ≤60 chars or allow_long_title: true set

Mention @claude in a comment if you'd like additional reviews or fixes.

@julienp julienp marked this pull request as ready for review March 19, 2026 12:36
@claude
Copy link
Copy Markdown
Contributor

claude bot commented Mar 19, 2026

Docs Review — PR #18051

Scope: content/blog/introducing-bun-as-a-runtime-for-pulumi/index.md, content/blog/bun-package-manager/index.md, content/blog/introducing-bun-as-a-runtime-for-pulumi/meta.png

Overall this is a well-structured, clearly written blog post. The conversion guide is particularly useful — breaking it into numbered steps with before/after examples makes it easy to follow. A few items to address before merging:


Issues

  1. meta.png is a placeholder image (blocking)
    The meta.png file is the default Pulumi placeholder image ("100% CERTIFIED PLACEHOLDER IMAGE"). The PR description notes "TODO: Image." This must be replaced with a real meta image before merging — placeholder images hurt social sharing and brand perception. Consider using /blog-meta-image to generate one.

  2. Line 63 — "Prerequisites" section placement
    The prerequisites (Bun 1.3+, Pulumi 3.227.0+) appear after the "Getting started" code examples. Readers should see requirements before running commands. Consider moving "Prerequisites" above the pulumi new bun step, or at minimum to right after the ## Getting started heading.

  3. Line 196 — "Start using Bun with Pulumi" heading could be stronger
    The closing section heading reads like a generic CTA. Consider something more specific like "Get started with Bun" or "Try Bun with Pulumi today" to better hook readers scanning headings.

  4. Line 188 — Warning shortcode wrapping entire list may be too heavy
    The {{% notes type="warning" %}} wraps both bullet points plus their explanations. This is a lot of content inside a warning callout. Consider using the warning only for a short summary sentence (e.g., "Callback functions and dynamic providers are not supported with the Bun runtime.") and then explaining each item as regular text below.

Suggestions

  1. Line 22 — Opening paragraph
    The opening line reads well but "with no Node.js required" could be emphasized more since it's a key selling point. Consider: "...Bun will execute your entire Pulumi program — no Node.js required."

  2. Line 172 — Table section
    The table comparing runtime: bun vs. the package-manager-only mode is helpful. Consider adding a brief recommendation sentence after it, e.g., "For new TypeScript projects, we recommend runtime: bun unless you need function serialization."

  3. Lines 15–18 — Empty social fields
    The social.twitter and social.linkedin fields are empty. If these aren't needed, consider removing the entire social block to keep the frontmatter clean.


Publishing readiness checklist

  • <!--more--> break present after intro
  • meta_image set and not the default placeholder — PLACEHOLDER, must replace
  • meta_image uses current Pulumi logos (once replaced)
  • Author profile exists with avatar (julien-poissonnier)
  • All links resolve (verified internal doc links and blog cross-reference)
  • Code examples correct with language specifiers
  • No animated GIFs used as meta_image
  • Images have alt text; screenshots have 1px gray borders (N/A — no screenshots)
  • Title ≤60 chars (39 chars)
  • Meta description ≤160 chars (151 chars)
  • H2+ headings use sentence case
  • No "easy"/"simple" language

Mention @claude if you'd like additional reviews or automated fixes.

@pulumi-bot
Copy link
Copy Markdown
Collaborator


```typescript
// CommonJS (Node.js default)
const pulumi = require("@pulumi/pulumi");
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the ESM section to talk about export = ... instead, a case we actually do have in our documentation.


```typescript
// CommonJS
module.exports = { bucketName: bucket.id };
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Co-authored-by: Piers Karsenbarg <piers@pulumi.com>
@pulumi-bot
Copy link
Copy Markdown
Collaborator

@pulumi-bot
Copy link
Copy Markdown
Collaborator

@cnunciato cnunciato self-requested a review March 21, 2026 03:26
@cnunciato cnunciato added needs-design Needs input from design/UX and removed needs-design Needs input from design/UX labels Mar 21, 2026
Copy link
Copy Markdown
Contributor

@cnunciato cnunciato left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Super stoked to see this and can't wait build out more content around it. 🔥

- **Fast package management**: Bun's built-in package manager can install dependencies significantly faster than npm.
- **Node.js compatibility**: Bun [aims for 100% Node.js compatibility](https://bun.sh/docs/runtime/nodejs-apis), so the npm packages you already use with Pulumi should work out of the box.

With `runtime: bun`, Pulumi uses Bun for both running your program and managing your packages, giving you a streamlined single-tool experience.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Presumably also much faster startup times, native ESM support for Pulumi programs, all the goodies that come with that, etc.?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

native ESM support for Pulumi programs

Pulumi supports native ESM just fine with Node.js, but we don't default to it.

I don't think the startup time matters much, so I'd rather not talk about better performance when it's unlikely to meaningfully impact the total duration of the operation.

- **Node.js compatibility**: Bun [aims for 100% Node.js compatibility](https://bun.sh/docs/runtime/nodejs-apis), so the npm packages you already use with Pulumi should work out of the box.

With `runtime: bun`, Pulumi uses Bun for both running your program and managing your packages, giving you a streamlined single-tool experience.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is all good, but one thing that feels like it's somewhat missing (and could add a bit of color) is an answer to the the question, "What took you so long?" 😄 Looking back at the issue, it seems the missing piece was mainly support for http2, but as a user of both Bun and Pulumi, I'd love to hear more about how that matters and whether we hit any other issues along the way. Not a deep dive of course, just a bit more of the technical story (as it's probably pretty interesting!).

We should also update Piers's post to revise the bit about only supporting package management. I'm happy to take that on if you like — up to you!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apparently bun started supporting GRPC on the server side in https://bun.sh/blog/bun-v1.1.31#support-for-node-http2-server-and-grpc in October 18, 2024. So I think the main reason we didn't support it as a runtime earlier was that we didn't get around to it.

@pulumi-bot
Copy link
Copy Markdown
Collaborator

@CamSoper CamSoper added the awaiting-upstream The issue cannot be resolved without action in another repository (may be owned by Pulumi). label Mar 27, 2026
Co-authored-by: Christian Nunciato <c@nunciato.org>
Co-authored-by: Christian Nunciato <c@nunciato.org>
@pulumi-bot
Copy link
Copy Markdown
Collaborator

@pulumi-bot
Copy link
Copy Markdown
Collaborator

@julienp julienp removed the awaiting-upstream The issue cannot be resolved without action in another repository (may be owned by Pulumi). label Apr 1, 2026
@julienp
Copy link
Copy Markdown
Contributor Author

julienp commented Apr 1, 2026

I think this is ready to go, we only need to update the date for the post.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-design Needs input from design/UX

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Write a blog for the new bun runtime

7 participants