Start here · Developers
For developers
You write the handlers; the server keeps the rules. Jobs and workflows are code in your own language: Crystal on the JoobQ libraries, or Python, TypeScript, Ruby, Go, Rust, Java, PHP or .NET through a thin SDK that talks to the server's SDK gateway over HTTPS. Every example on this site is tested against a real server in all nine languages, so what you copy is what is tested.
Your first hour
Run a serverDocker Compose, the first admin, an example worker.Install an SDK and connectReference the SDK, give it the origin and the SDK token, start a worker.Define and enqueue jobsRetries with backoff, delays, run-at, options, the dead letter queue.Write a workflowProSteps the engine conducts, with references between them.
Pick your language
Each SDK is a copy of sdks/<language>/ referenced by path (none is on a package registry yet). This is how a worker in each language references it:
crystal
require "joobq"
require "joobq_pro"python
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..", "sdks", "python"))
from joobq import ( # noqa: E402
JoobQClient, JoobQWorker, NonRetryableError, compensation, gate, input, job, output, retry_policy, update_input, workflow,
)ts
import {
type ExecutionContext,
type TaskMiddleware,
JoobQClient,
JoobQWorker,
NonRetryableError,
compensation,
defineJob,
gate,
input,
output,
retryPolicy,
updateInput,
workflow,
} from '../../../sdks/typescript/src/index.ts'ruby
require_relative "../../../sdks/ruby/lib/joobq"go
require github.com/azutoolkit/joobq-sdk-go v0.1.0
replace github.com/azutoolkit/joobq-sdk-go => ../../../sdks/gotoml
joobq = { path = "../../../sdks/rust" }sh
build) rm -rf classes && javac -d classes ../../../sdks/java/src/main/java/io/joobq/JoobQClient.java Worker.java ;;php
require_once __DIR__ . '/../../../sdks/php/src/JoobQClient.php';xml
<ItemGroup>
<Compile Include="../../../sdks/dotnet/JoobQClient.cs" Link="JoobQClient.cs" />
</ItemGroup>Tested against a real server in every language shown.
Then
SchedulesCron or every, from code or YAML; workflow schedules with Pro.Unique jobsA unique key held while locked (Core) or until executed (Pro).Middleware and app contextYour application container and the request context in every handler.Payload encryptionFields sealed before the job is stored.Sagas and compensationProUndo the completed steps when a later one fails for good.Signals and timersProDurable waits that survive any worker crash.
When something does not behave, start with Troubleshooting and the Best practices. Every route and field is in the REST API reference.