...

Sidequest

A modern, scalable background job processor for Node.js applications.
github-icon
GitHub
432star-icon
Created 20 days ago, last commit a day ago
6 contributors
351 commits
8star-icon added yesterday
npmPackage on NPM
Monthly downloads on NPM
0
0
0
0
0
0
0
0
0
0
0
8
9
10
11
12
1
2
3
4
5
6
7
2024
2025
README

Sidequest

NPM Version License Build Status TypeScript Node.js Version Docs

Sidequest.js Logo

Sidequest is a modern, scalable background job processor for Node.js applications. Built with TypeScript and designed for production use, it provides reliable job processing with multiple database backends, a beautiful web dashboard, and comprehensive monitoring capabilities.

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

✨ Features

  • 🚀 High Performance - Worker threads for non-blocking job processing
  • 🗄️ Multiple Backends - SQLite, PostgreSQL, MySQL 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 >= 24
  • 📊 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

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
SQLite (default - not recommended for production)
npm install @sidequest/sqlite-backend
# or
yarn add @sidequest/sqlite-backend
MySQL
npm install @sidequest/mysql-backend
# or
yarn add @sidequest/mysql-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