Skip to content
No description or website provided.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


What is Job?

Job is a delayed jobs scheduler inspired by the Ruby project delayed_job and written for

Where before you might write mailer.registrationEmail('userID'), you can now write mailer.delay.registrationEmail(5*1000, 'medium', 'userID') to delay the email by 5 minutes.


Add to package.json and install via npm:

npm install job

And wherever you bootstrap your application, you need to require('job') and initialize it:

require('job').startJobsRunner({ kue: { username: 'example', password: 'password', port: 2442 }})

Optionally, you may provide the path of an initialization script that will bootstrap the jobs runner, since all delayed jobs are run in a separate process. You may need to initialize a database connection, for example. In the future I would like to better support Architect plugins to eliminate the need for a dedicated startup script.

require('job').startJobsRunner({ initScript: './init_job_worker.js', kue: { username: 'example', password: 'password', port: 2442 }})

And the initialization script should be in the form:

module.exports = function initJobsWorker (done) {
  // Initialize database connections, etc

Then, in any modules where you want to have a delayed job:

exports.registationEmail = function (userID) {
  model.Users.findById(userID).exec(function (err, user) {
    // ... send out email


exports.registationEmail = function (userID) {
  model.Users.findById(userID).exec(function (err, user) {
    // ... send out email
exports.registationEmail.delayable = true;


That's it! Note that your helper method must take database IDs, not objects; generally, anything passed into the helper method will first be serialized into Redis, and furthermore will be accessed in a different process. Thus, things like Mongoose objects or anything that requires lookup in an in-memory cache are out.

Delay the method by calling:

lib.delay.registrationEmail(ms, 'priority', args)

where ms is the number of milliseconds to delay by, and priority is 'low', 'medium', 'high', or 'critical'.

As a job queue server

Job can also be used as a simple queue server. For example, if you want to perform an operation ASAP but only want to perform X operations simultaneously:

exports.method = function () { ... }
exports.method.delayable = true;
exports.method.concurrentProcesses = 5;

Then, you can call lib.delay.method(0, 'critical', ...).

By default, concurrentProcesses is 1.

Kue server

Job uses a Kue server to process jobs. The Kue username, password, and port you provide can be used to monitor the status of delayed jobs.

For example, if had supplied a port of 1234, we could go to, type in the username and password, and monitor the health of all delayed jobs.


Joshua Gross, (creator)


MIT license.

Something went wrong with that request. Please try again.