Skip to content

Framework Integrations

Integrate bunqueue seamlessly with modern Bun-native frameworks.

Supported Frameworks

FrameworkDescriptionGuide
HonoUltrafast web framework for the EdgeHono Integration
ElysiaErgonomic framework with end-to-end type safetyElysia Integration

Quick Comparison

FeatureHonoElysia
Type SafetyManual typingBuilt-in with t schema
MiddlewareFunction-basedPlugin-based
ValidationExternal librariesNative with t.Object()
WebSocketVia adaptersBuilt-in
PerformanceExcellentExcellent

Best Practices

Project Structure

src/
├── api/
│ ├── routes/
│ │ ├── emails.ts
│ │ └── reports.ts
│ └── index.ts
├── queues/
│ ├── definitions.ts # Queue instances
│ └── index.ts
├── workers/
│ ├── email.worker.ts
│ ├── report.worker.ts
│ └── index.ts
└── index.ts # Entry point

Queue Definitions

queues/definitions.ts
import { Queue } from 'bunqueue/client';
export const queues = {
emails: new Queue('emails', {
embedded: true,
defaultJobOptions: {
attempts: 3,
backoff: 5000,
removeOnComplete: true,
},
}),
reports: new Queue('reports', {
embedded: true,
defaultJobOptions: {
timeout: 300000,
},
}),
notifications: new Queue('notifications', {
embedded: true,
defaultJobOptions: {
attempts: 5,
backoff: 1000,
},
}),
} as const;
export type QueueName = keyof typeof queues;

Graceful Shutdown

import { shutdownManager } from 'bunqueue/client';
import { queues } from './queues';
import { workers } from './workers';
async function shutdown() {
console.log('Shutting down...');
// Stop accepting new jobs
for (const worker of Object.values(workers)) {
worker.pause();
}
// Wait for active jobs to complete
await Promise.all(
Object.values(workers).map((w) => w.close())
);
// Close queue connections
await Promise.all(
Object.values(queues).map((q) => q.close())
);
// Shutdown the embedded manager
shutdownManager();
console.log('Shutdown complete');
process.exit(0);
}
process.on('SIGINT', shutdown);
process.on('SIGTERM', shutdown);

Next Steps