For a code-first job scheduler, the first results are quartz-scheduler/quartz (Quartz is a comprehensive Java job scheduling framework that lets you define jobs and triggers programmatically in code, with full support for cron expressions, interval scheduling, job persistence, and concurrency control—exactly the code-first scheduler you’re looking for), sidekiq/sidekiq and hangfireio/hangfire (Hangfire is a ). riverqueue/river and agronholm/apscheduler round out the shortlist. Compare the match explanations and check the project documentation against your requirements.
Discover open-source libraries for defining and managing recurring background tasks directly within your application code.
Quartz is a Java job scheduling framework and task execution engine designed to manage and execute scheduled tasks within application environments. It functions as an enterprise job scheduler that persists job state and execution history to maintain reliability across system restarts. The system distinguishes itself through a decoupled architecture that separates the definition of a job's action from the trigger logic that determines when it runs. It supports distributed task coordination across multiple server nodes to provide high availability and load balancing. The framework covers a bro
Quartz is a comprehensive Java job scheduling framework that lets you define jobs and triggers programmatically in code, with full support for cron expressions, interval scheduling, job persistence, and concurrency control—exactly the code-first scheduler you’re looking for.
Sidekiq is a background job processor and queue manager for Ruby that uses Redis to manage asynchronous tasks. It functions as a distributed task scheduler capable of handling periodic, delayed, and recurring jobs across a cluster of worker processes. The project features a job monitoring dashboard and administrative web interface for visualizing system state, tracking worker performance, and managing failed or dead jobs. It provides a distributed rate limiter to control execution frequency across multiple processes. The framework covers a broad range of operational capabilities, including j
Sidekiq is a background job processor and scheduler for Ruby that lets you define jobs in code and schedule recurring tasks via cron-like expressions (through extensions like sidekiq-cron), with robust persistence, concurrency control, and the option to run in-process or standalone — exactly the kind of programmatic scheduler this search aims for.
Hangfire is a background job scheduler and distributed task queue for .NET applications. It serves as a job orchestration framework that offloads heavy processing to background workers using a SQL-backed processor to manage job state across multiple servers. The framework distinguishes itself through reliable task scheduling, where job metadata and arguments are persisted in an external database to ensure tasks survive application restarts. It supports advanced orchestration patterns, including the ability to chain dependent tasks so that a child job triggers automatically upon the successful
Hangfire is a .NET background job scheduler that lets you define recurring jobs programmatically using cron expressions and intervals, with database-backed persistence and concurrency control, exactly matching the need for a code-first job scheduler.
River is a transactional job queue and distributed job scheduler for Go that uses PostgreSQL for persistence and state management. It functions as a resumable task framework, allowing long-running background work to be broken into persisted steps that can resume from the last saved checkpoint after a failure. The system ensures strict data consistency by allowing background tasks to be enqueued and completed within the same database transaction as the primary application data. It distinguishes itself through a coordinator model that employs leader election to manage periodic and delayed tasks
River is a Go-based transactional job queue and scheduler that lets you define and manage recurring jobs programmatically, supports periodic/delayed scheduling with PostgreSQL persistence, concurrency control, and runs in-process or standalone — squarely matching your code-first job scheduler requirements.
APScheduler is a Python task scheduler designed to execute functions at specific times or recurring intervals. It functions as an asynchronous background scheduler and distributed job dispatcher, allowing tasks to run concurrently with application lifecycles and web server request handling. The system distinguishes itself through a persistent job store that saves schedules and task states in external databases, ensuring continuity across process restarts. It separates task scheduling from execution by dispatching jobs to distributed workers in separate processes to prevent execution bottlenec
APScheduler is a mature Python library that lets you define and manage recurring jobs entirely in code, supporting cron expressions, interval delays, persistent job stores, and concurrency controls—exactly the programmatic code-first scheduler you need.
gocron is a task scheduling library for Go designed to automate recurring tasks using crontab expressions, fixed durations, and specific calendar dates. It functions as a concurrent job manager and execution monitor that tracks task lifecycles and performance. The project provides distributed task scheduling through leader election and distributed locking to prevent duplicate job execution across multiple nodes. It further distinguishes itself with a concurrency management system that implements singleton constraints and global execution quotas to protect system resources. The scheduler cove
gocron is a Go library that lets you define and manage recurring jobs entirely in code using cron expressions, intervals, or specific dates, with built-in concurrency control and distributed locking, making it a direct fit for a code-first job scheduler.
This project is a lightweight Python scheduling library used for managing recurring jobs and automating the execution of functions within a single process. It serves as an event-based task scheduler that triggers functions at specific intervals or weekdays. The library utilizes human-readable timing syntax to schedule periodic function calls. It supports the organization of timed workflows through job tag filtering and provides mechanisms for scheduler state inspection to track planned execution times. The system handles both periodic and specific job scheduling with timezone support. It inc
A lightweight Python library that schedules recurring jobs directly in code using human-readable intervals — it's a true code-first scheduler, though it lacks cron expressions and persistence.
Oban is a distributed background job processing system and task scheduler that uses PostgreSQL for transactional job storage and reliable execution across multiple nodes. It serves as a PostgreSQL-backed background worker and job queue, coordinating task execution and concurrency through a relational database to ensure delivery guarantees. The system differentiates itself through a distributed workflow orchestrator capable of managing multi-step processing pipelines, dependent job sequencing, and shared context. It provides advanced orchestration tools including job batching, chunked processi
Oban is a code-first job scheduler that lets you define recurring jobs programmatically as Elixir workers, supporting cron expressions, PostgreSQL-backed persistence, concurrency controls, and both in-process and standalone deployment—matching every feature you listed.
Agenda is a persistent background job scheduler and distributed task runner for Node.js applications. It functions as a cron job manager and task queue that ensures background processes survive application restarts by storing job state and metadata in a database. The system coordinates execution across multiple worker instances using distributed locking mechanisms to prevent duplicate processing. It supports flexible scheduling via cron expressions or specific dates and includes a pluggable storage interface for backends such as MongoDB, PostgreSQL, and Redis. The platform provides controls
Agenda is a Node.js job scheduler that lets you define and manage recurring jobs entirely in code using cron expressions or intervals, with database persistence and distributed locking for concurrency — exactly the programmatic scheduler you're looking for.
Celery is an asynchronous job processor and distributed task queue designed to offload time-consuming operations to background worker nodes. By utilizing a message-passing architecture, it decouples task producers from consumers, allowing applications to maintain responsiveness while scaling workloads across multiple isolated environments. The system functions as a distributed workload orchestrator that manages the lifecycle of deferred operations through persistent queues. It distinguishes itself by providing a pluggable transport abstraction, which allows the core task logic to remain indep
Celery is a code-first distributed task queue where you define periodic and scheduled jobs programmatically in Python, supporting cron expressions, intervals, persistence, and concurrency control, making it exactly the code-first scheduler this search targets.
Airflow is a platform for programmatically authoring, scheduling, and monitoring complex data pipelines. It functions as a workflow automation engine that manages the lifecycle of recurring business processes by executing code-defined task dependencies. By representing workflows as directed acyclic graphs, the system ensures that task execution order and data flow are explicitly defined and reliably maintained across distributed computing environments. The platform distinguishes itself through a highly modular, provider-based architecture that decouples core orchestration logic from external
Apache Airflow is a code-first workflow scheduler that defines jobs as Python DAGs with cron expressions, interval scheduling, persistent state, and concurrency controls—exactly matching the search for a programmatic job scheduler.
node-schedule is a job scheduler for Node.js that executes arbitrary functions based on specific dates or recurring rules. It functions as a date-based and event-driven scheduling system for JavaScript environments, allowing for the automation of one-off events and periodic tasks. The project supports recurring job scheduling through cron-style strings and recurrence rules, as well as the ability to schedule tasks for precise, single execution dates. It includes timezone-aware date calculations to map recurring rules against global or local time offsets. The system provides a comprehensive j
node-schedule is a Node.js library for scheduling jobs entirely in code using cron expressions and recurrence rules, which matches the code-first scheduler intent — it lacks built-in persistence and concurrency control, but squarely fits the category as a time-based job scheduler.
rq is a distributed task queue and background worker system for Python that uses a Redis backend to decouple task submission from execution. It functions as a reliable message queue and task scheduler, allowing Python functions or asyncio coroutines to be processed asynchronously across multiple worker processes. The project distinguishes itself through reliable queuing mechanisms that prevent job loss during worker crashes using atomic operations. It provides specialized orchestration capabilities, including the prevention of duplicate jobs, job execution prioritization, and the ability to m
RQ is a Python task queue that lets you define jobs programmatically and supports cron-like scheduling for recurring execution, covering the core need for a code-first job scheduler even if its primary focus is task queuing.
Asynq is a distributed background job processing framework for Go applications. It manages asynchronous task queues by offloading heavy operations to persistent storage, allowing the main application to remain responsive while background workers handle workloads. The system utilizes Redis to manage task state, concurrency, and message distribution across multiple worker instances. It employs atomic Lua scripting and sorted sets to ensure reliable job acquisition, precise scheduling of delayed tasks, and fault-tolerant processing through a two-stage acknowledgement flow. The framework support
Asynq is a Go framework that lets you define and schedule background jobs programmatically in code, with support for delayed tasks via Redis and concurrency control through worker pools, which aligns well with the request for a code-first recurring scheduler—though cron-like expression support is not explicitly confirmed in the description.
Dagster is a data orchestration platform designed to manage the entire lifecycle of data assets through declarative modeling and version-controlled code. It functions as a workflow engine that treats data assets as first-class primitives, allowing teams to define, schedule, and monitor complex pipelines while maintaining clear visibility into lineage, dependencies, and data quality. The platform distinguishes itself by using a code-as-configuration framework that enables standard software engineering practices, such as unit testing and local mocking, to be applied directly to data workflows.
Dagster is a code-first data orchestration platform that lets you define, schedule, and monitor recurring jobs using Python code with cron-like expressions and interval scheduling, making it a solid match for a programmatic job scheduler — though its focus on data pipelines may include more infrastructure than a generic scheduler.
Bree is a Node.js and JavaScript job task scheduler with worker threads, cron, Date, and human syntax. Built for @ladjs, @forwardemail, @spamscanner, @cabinjs.
Bree is a Node.js job scheduler that lets you define recurring jobs programmatically with cron, Date, or human syntax, runs each job in a worker thread for concurrency, and can be used in-process — a direct fit for a code-first scheduler, though it does not emphasize built-in job persistence.
This library provides a task scheduling framework for Node.js applications, enabling the automation of recurring operations using standard cron syntax. It functions as a background task manager that maintains a stateful registry of jobs, allowing for runtime inspection, modification, and lifecycle control of scheduled operations. The project distinguishes itself through support for distributed environments and resource management. It includes mechanisms to coordinate tasks across multiple application instances, ensuring that scheduled work executes exactly once to prevent overlap or resource
node-cron is a code-first job scheduler for Node.js that lets you define recurring jobs programmatically using cron expressions, with built-in concurrency control via overlap prevention; it lacks built-in job persistence but covers most other required features.
| Repository | Stars | Language | License | Last push |
|---|---|---|---|---|
| quartz-scheduler/quartz | 6.7K | Java | Apache-2.0 | |
| sidekiq/sidekiq | 13.5K | Ruby | NOASSERTION | |
| 10K |
| C# |
| other |
| riverqueue/river | 5.3K | Go | MPL-2.0 |
| agronholm/apscheduler | 7.5K | Python | MIT |
| go-co-op/gocron | 7.1K | Go | MIT |
| dbader/schedule | 12.2K | Python | MIT |
| oban-bg/oban | 3.8K | Elixir | apache-2.0 |
| agenda/agenda | 9.7K | HTML | NOASSERTION |
| celery/celery | 28.6K | Python | NOASSERTION |