Until now our Bun runtime had a Node.js-shaped secret. Your task code ran on Bun, but the deploy image also shipped Node.js 20, and Trigger.dev's own code in the container ran on it.
bun-1.4 takes Node.js out of the image entirely. Everything in the container, your code and ours, runs on Bun 1.4.4.
It's available from CLI v4.8.2.
What you get
Bun 1.4. It's a big jump from the 1.3.3 we ran before. By Bun's own numbers on Linux, a hello-world script starts in 5.1 ms (down from 10.9 ms on 1.3), and peak memory for HTTP servers under load drops 20 to 48%. It also adds process.on("memoryPressure"), so a long-running task can drop its caches before it gets killed, and passes 1,517 more tests from Node.js's own suite. The Bun 1.4 release post has the full list.
A 25% smaller image. With Node.js gone, the base image is 118 MB compressed, down from 158 MB for the old Bun image (roughly the same size as our Node.js 24 image). That's 40 MB less to pull when a run lands on a machine that hasn't seen your deployment yet.
Your deployment is built with Bun 1.4.4 too, so dependencies install and your code bundles on the same version it runs on.
Checkpoints work end to end. When a task waits on wait.for, triggerAndWait or a waitpoint, we snapshot the Bun process, give the machine back, and restore it when the wait is over. You aren't charged for compute while it's suspended.
And 1.4.4 picks up the fixes from Bun's October security advisories, including an updated brotli decoder and a root certificate store without the compromised emSign root.
We measured it
We ran the same small task 20 times on each runtime on Trigger.dev Cloud, every run a cold start on a small-1x machine, and read how much memory the whole container was using as the task started.
Memory per container dropped 41%, which leaves a lot more room for your own code, especially on the smaller machines.
Cold starts got 18% faster, measured from the container starting to the first line of your task running. Bigger projects will see different numbers (more dependencies, more to load), but the gap comes from the runtime, so it should carry over.
Before you switch
The new image has no Node.js binary. If something in your task spawns node (a CLI that's really a Node.js script, say, or a postinstall hook), it'll fail on bun-1.4. Add Node.js with a build extension first.
Bun 1.4 also has an open regression in its node:http2 client (oven-sh/bun#39796), which shows up in some gRPC and Google Cloud SDKs. If your tasks rely on those, stay on bun until it's fixed (but keep reading).
For local development, run bun upgrade so trigger dev uses the same minor version you deploy on.
The old Bun runtime is deprecated
runtime: "bun" (and its explicit spelling, bun-legacy) still deploys Bun 1.3.3 with Node.js 20 alongside it. Node.js 20 reached end of life in April, so from CLI v4.8.3 using it prints a deprecation warning, and deploys that use it will be rejected from January 5, 2027.
Versions you've already deployed keep the image they were built with, so nothing changes until you redeploy:
npx trigger.dev@latest deploy
The Bun guide covers both runtimes side by side.
