Workers
A worker is the process that runs your code. One worker image covers every language — Python, TypeScript, JavaScript, C, C++ and SQL — and runs several jobs at once. To run more at the same time, add workers; the Workers tab shows each one live, and lets you keep a worker for some projects or some languages only.
- Follow a job from the queue to its result
- Read a worker card: status, slots, memory, what it runs now
- Assign a worker to projects or restrict its languages
- Add workers to run more jobs at the same time
From the queue to a result
Pressing Run, a schedule firing or an API call all do the same thing: they put a job in the queue. A worker that serves the job’s project and language picks it up, and every job is picked up by exactly one worker — never two at once.
- Pick up — the job is claimed by one worker with a free slot.
- Install — the packages the script imports are installed on first use and cached for the next run.
- Run — the code runs isolated, in a clean environment, with no network and no access to the platform’s database.
- Report — the result and logs are stored, and the screen that is waiting gets them the moment the job ends.
The Workers tab
On the Projects page, open Workers. The header counts the fleet — online, busy, offline, jobs run in total — and refreshes every 5 seconds. Filter by language or status, or search by name.
| On a card | What it tells you |
|---|---|
| Status | Online: ready for work. Busy: running a job right now. Offline: not running — it may have crashed or been stopped. |
| Slots | How many jobs it runs at once, busy ones in amber and free ones in green. SQL has its own row. |
| Memory | Use against its limit, from Plenty of room to Critical — almost out of memory. |
| Jobs done · Avg time | Jobs completed since it started, and their average run time. |
| Currently running | The script it runs now, with Watch run → to follow it live. |
The Language versions tab lists the runtime versions the fleet offers and which scripts follow or pin each one — see Runtime versions.
Keep a worker for some projects
A worker with no assignment is global: it picks up jobs from every project. Assigning it keeps it for those projects only — useful to give an important project capacity nobody else can take.
- Open the worker
Click its card to open the details.
- Restrict it
Press + Restrict to projects and pick the projects, or Assign to this project only from inside a project.
- Undo at any time
↺ All projects makes it global again. Removing its last project does the same.
Run more at once
Each worker runs up to WORKER_CONCURRENCY jobs at once (12 by default) and, separately, up to WORKER_SQL_CONCURRENCY SQL queries (4 by default) with database connections kept ready. To run more at the same time, start more workers — on a self-hosted installation:
docker compose up -d --scale worker=3SQL runs in the same worker
There is no separate SQL service: PostgreSQL and MySQL scripts, SQL flow steps and the SQL workbench run inside each worker, in their own slots, so a long report never takes a script’s slot.