Skip to content

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 ​

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/go
toml
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 ​

When something does not behave, start with Troubleshooting and the Best practices. Every route and field is in the REST API reference.

JoobQ Core is MIT licensed. JoobQ Pro needs a licence key.