Skip to main content


Here are some of the terms you may come across when using Graphile Worker:


Something that can be executed, the type of work that a Job may take, such as send email, convert image or process webhook.

Task identifier

The unique name given to a task, for example send_email or convert_image.

Task executor

The code responsible for executing a particular task; typically defined via a JavaScript or TypeScript function:

import type { Task } from "graphile-worker";
import { ses, Source } from "../lib/aws-ses.js";

export const send_email: Task = async (payload, helpers) => {
const send = ses.sendEmail({
Destination: { ToAddresses: [payload.address] },
Message: {
Subject: { Charset: "UTF-8", Data: payload.subject },
Body: { Text: { Charset: "UTF-8", Data: payload.body } },
await send.promise();


A single job to be done: which Task to execute and what parameters (Payload) to execute it with. Also contains additional details such as how many attempts it has had so far, what the max attempts are, when it will be attempted next, etc. Created via the JS addJob() or SQL graphile_worker.add_job() function.


The data associated with a particular Job, for example a job might reference the send_email Task and indicate via the Payload the address to which to send the email plus the subject and body of the email.


A JS routine that is provided a list of Tasks it is capable of executing and then looks for a single Job to execute matching one of the provided Tasks. Executes the Job, reporting success or failure back to the database. Then finds the next Job and continues this process.


Manages a collection of Workers such that multiple Jobs can be executed in parallel (within the constraints of the Node.js event loop). Responsible for listening for and dispatching new job events.


A system of executing recurring tasks.


Manages a Cron instance and a WorkerPool instance; if you're using Graphile Worker in "library mode" then this is the main way you would execute Graphile Worker. (Really small piece of code:

Graceful shutdown

When a WorkerPool stops accepting new jobs and exits once all its Workers have finished their currently executing jobs. This is triggered on a SIGTERM/SIGINT or similar signal, or via the runner.stop() API.

Forceful shutdown

When a WorkerPool stops accepting new jobs and explicitly unlocks all in progress tasks. The process should exit as soon as the in progress tasks have been unlocked, to ensure that they do not continue to be processed.

Three ants crawling atop the footer