sidequest is a free, open source orchestration & scheduling project written in TypeScript and released under LGPL-3.0. It has 1,020 GitHub stars, 31 forks and 14 open issues, and was last pushed 15 days ago. On this registry it ranks #97 of 130 tracked projects in Orchestration & Scheduling, with 5 head-to-head comparisons available. It gained 3 stars over the last 30 tracked days.

What is sidequest?

Sidequest is a Redis-free background job processor for Node.js that persists jobs in the PostgreSQL, MySQL, SQLite, or MongoDB database an application already runs, aimed at teams that need durable, distributed queue processing without operating Redis.

What it is

Sidequest is a TypeScript job queue library for the Node.js ecosystem, listed in this registry under Infrastructure & Operations / Orchestration & Scheduling. It stores jobs inside a database the application already depends on — PostgreSQL, MySQL, SQLite, or MongoDB — so jobs are durable and persisted rather than held in memory. The engine runs across multiple nodes against one shared database, and on PostgreSQL and MySQL jobs are claimed atomically with SELECT ... FOR UPDATE SKIP LOCKED, so each job runs once even when several workers contend for it. The package is LGPL-3.0 licensed, with 1,015 stars and 25 forks, and its documentation lives at docs.sidequestjs.com.

The concrete problem it solves is the extra piece of infrastructure a queue usually demands. It replaces a dedicated Redis instance and the BullMQ worker stack layered on top of it, which means teams no longer run, secure, back up, and monitor a second datastore purely to move background work around. Sidequest is positioned as a production-grade BullMQ and pg-boss alternative, and the documentation ships a dedicated migration path from BullMQ for teams already invested in that API.

Key capabilities

  • Multiple storage backends through separate driver packages: @sidequest/postgres-backend, @sidequest/mysql-backend, @sidequest/sqlite-backend, and @sidequest/mongo-backend; the main sidequest package deliberately excludes drivers.
  • Distributed execution across multiple nodes sharing one database, with atomic job claiming so a job is processed once.
  • A built-in web dashboard for monitoring jobs and queues.
  • Job lifecycle control: retries with exponential or fixed backoff, snooze, fail mechanisms, and automatic stale-job recovery.
  • Scheduling features including cron scheduling and jobs scheduled to run at specific times.
  • Job uniqueness constraints to prevent duplicate work.
  • Multiple queues with configurable workers and priorities, plus CLI tools for database migrations.
  • Isolation model with the engine in a forked child process and jobs in worker threads; inline and no-fork execution modes are also available.

Who uses it and how

  • Teams already operating PostgreSQL, MySQL, or MongoDB that want background jobs without adding Redis to their operational surface.
  • Multi-node deployments where several application instances or worker nodes drain one shared queue table and rely on atomic claiming to avoid double execution.
  • Local development and test suites using the SQLite backend, which the README recommends for development and tests rather than production.
  • Existing BullMQ users evaluating a migration, following the documented migrating-from-BullMQ guide.
  • Operators who want queue visibility from the bundled dashboard rather than a separate monitoring tool.

Getting started

Install the core package with npm install sidequest and add the driver for the chosen database, for example npm install @sidequest/postgres-backend; the CLI tools cover database migrations. Node.js 22.6.0 or newer is required.

How it compares

Among the tools named in its own facts, Sidequest sits against BullMQ, which requires Redis, and pg-boss, which targets PostgreSQL. It differentiates by offering four backends, a built-in web dashboard, and a documented migration path from BullMQ, while keeping the same durable, distributed job-processing model.

When to use it — and when not to

A self-hoster must run and maintain the backing database, apply schema migrations through the CLI, and accept that queue load shares capacity with application queries. It is not a fit for Bun users, since the README states it does not run on Bun yet, nor for anyone below Node.js 22.6.0, and the SQLite backend is explicitly not recommended for production. The LGPL-3.0 licence and the modest fork count are worth checking against project requirements before committing.

project readme (upstream, from github) — read inline

Sidequest

NPM Version License Build Status TypeScript Node.js Version Docs

Sidequest.js Logo

Sidequest is a Redis-free background job processor for Node.js. It persists jobs in the database you already run (PostgreSQL, MySQL, SQLite, or MongoDB), so you get durable, distributed background processing without standing up Redis. It is a production-grade BullMQ and pg-boss alternative, with a built-in web dashboard.

At a glance

  • Runtime: Node.js (>= 22.6.0). Does not run on Bun yet.
  • Storage: PostgreSQL, MySQL, SQLite, or MongoDB. Jobs are durable and persisted in your database, not in memory. SQLite is recommended for local development and tests.
  • Distribution: runs across multiple nodes against one shared database. Jobs are claimed atomically (SELECT ... FOR UPDATE SKIP LOCKED on Postgres/MySQL), so each job runs once.
  • Isolation: the engine runs in a forked child process; jobs execute in worker threads. Inline and no-fork execution modes are also available.
  • Built in: web dashboard, retries with exponential/fixed backoff, job uniqueness, cron scheduling, and automatic stale-job recovery.

For the complete documentation, visit docs.sidequestjs.com.

For a comprehensive FAQ, visit docs.sidequestjs.com/faq.

✨ Features

  • 🚀 High Performance - Worker threads for non-blocking job processing
  • 🗄️ Multiple Backends - PostgreSQL, MySQL, SQLite, MongoDB support out of the box
  • ✅ ESM and CJS support - Fully compatible with modern JavaScript
  • 📝 Support for Typescript - Supports TypeScript jobs by default if you are using Node.js >= v23.6.0
  • 📊 Web Dashboard - Beautiful, responsive dashboard for monitoring jobs and queues
  • 🎯 Queue Management - Multiple queues with configurable workers and priorities
  • 🫀 Job Lifecycle Management - Configurable retry with exponential backoff, snooze, and fail mechanisms
  • ⏰ Scheduled Jobs - Support for scheduling jobs to run at specific times
  • 🔒 Job Uniqueness - Prevent duplicate jobs with flexible uniqueness constraints
  • 🛠️ CLI Tools - Command-line interface for database migrations and management
  • 🏗️ Monorepo Architecture - Modular packages for flexible deployment

📦 Installation

To get started with Sidequest, first install the main package:

npm install sidequest
# or
yarn add sidequest

Make sure you are using Node.js >= 22.6.0. Also, Sidequest does not run with Bun yet.

To keep the application minimal, the main package does not include the backend drivers. Thus you need to install only the driver you will use:

PostgreSQL (recommended)

npm install @sidequest/postgres-backend
# or
yarn add @sidequest/postgres-backend
MySQL
npm install @sidequest/mysql-backend
# or
yarn add @sidequest/mysql-backend
SQLite (default - not recommended for production)
npm install @sidequest/sqlite-backend
# or
yarn add @sidequest/sqlite-backend
MongoDB
npm install @sidequest/mongo-backend
# or
yarn add @sidequest/mongo-backend

⚙️ Usage

1. Create a Job class

// jobs/EmailJob.js
import { Job } from "sidequest";

export class EmailJob extends Job {
  async run(to, subject, body) {
    console.log(`Sending email to ${to}: ${subject}`);
    // Your email sending logic here
    return { sent: true, timestamp: new Date() };
  }
}

2. Configure and Start Sidequest

// app.js
import { Sidequest } from "sidequest";

// Start Sidequest
await Sidequest.start({
  // You can leave the config empty to use the default SQLite backend.
  // Make sure to install the SQLite backend driver if you want to use it.
  backend: {
    driver: "@sidequest/postgres-backend",
    config: "postgres://postgres:postgres@localhost:5432",
  },
});

console.log("Sidequest started! Dashboard: http://localhost:8678");

3. Enqueue Jobs

// Somewhere in your application
import { Sidequest } from "sidequest";
import { EmailJob } from "./jobs/EmailJob.js";

// Simple job
await Sidequest.build(EmailJob).enqueue("user@example.com", "Welcome!", "Thanks for signing up!");

🤝 Contributing

We welcome contributions! Please see our Contributing Guidelines for details.

📄 License

This project is licensed under the LGPL-3.0-or-later license.

🆘 Support


Made with ❤️ by Lucas Merencia and Giovani Guizzo

Frequently asked questions

Is sidequest free to use?

sidequest is open source under the LGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does sidequest do?

Redis-free background jobs for Node.js. Persist jobs in your existing Postgres, MySQL, SQLite, or MongoDB. A distributed, durable BullMQ alternative with a buil

What is sidequest written in?

sidequest is primarily written in TypeScript. Its source is publicly available at https://github.com/sidequestjs/sidequest, and it has 1,020 GitHub stars.