The @proompteng/temporal-bun-sdk package just shipped version 0.3.0. It brings a Bun native Temporal worker that matches the familiar TypeScript SDK surface while leaning on Effect for typed workflows. The new release trims setup to a few lines so you can run workflows and activities without leaving the Bun runtime.
What landed in 0.3.0
- Effect first workflow helpers that keep deterministic logic predictable across replays
- A Bun friendly worker bootstrap that mirrors the official Temporal TypeScript API
- Updated examples that cover activity cancellation, signals, and deterministic timers
- Published artifacts on npm so you can install with a single command
Installing the SDK
Add the dependency to your Bun project:
bun add @proompteng/temporal-bun-sdkThen wire up the worker entry point. The SDK exports a createWorker helper that reads a workflows directory and connects to your Temporal namespace:
import { createWorker } from '@proompteng/temporal-bun-sdk'
const worker = await createWorker({
workflowsPath: './workflows',
taskQueue: 'bun-effects',
namespace: 'default',
})
await worker.run()Writing workflows with Effect
Workflows compose naturally with Effect so you get strong typing and deterministic control flow:
import { Workflow } from '@proompteng/temporal-bun-sdk'
import { Effect } from 'effect'
export const sendWelcomeEmail = Workflow.make('sendWelcomeEmail', ({ activities }) =>
Effect.gen(function* () {
const user = yield* activities.fetchUser()
yield* activities.sendEmail({ to: user.email, template: 'welcome' })
return 'sent'
}),
)Each activity can use Bun native modules without Node polyfills. Register them alongside the worker:
import { Activities } from '@proompteng/temporal-bun-sdk'
export const activities = Activities.make({
fetchUser: async () => ({ email: 'hello@example.com' }),
sendEmail: async ({ to, template }) => {
console.log(`Email to ${to} using template ${template}`)
},
})Running the worker with Bun
Start the worker with Bun and point it at your Temporal server:
bun run src/worker.tsPair that worker with a client call to kick off the workflow:
import { createClient } from '@proompteng/temporal-bun-sdk'
const client = await createClient({ namespace: 'default' })
const handle = await client.workflow.start(sendWelcomeEmail, {
taskQueue: 'bun-effects',
args: [],
})
const result = await handle.result()
console.log(result)Why this matters for Bun users
Temporal workloads stay inside Bun from start to finish, which means faster startup and fewer interop surprises. Effect keeps your workflow logic pure while the SDK takes care of wiring deterministic timers, signals, and cancellation. With 0.3.0 on npm you can ship production ready orchestration without waiting for Node bindings.