Team & platformGuide

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.

What you will learn
  • 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.

  1. Pick up — the job is claimed by one worker with a free slot.
  2. Install — the packages the script imports are installed on first use and cached for the next run.
  3. Run — the code runs isolated, in a clean environment, with no network and no access to the platform’s database.
  4. Report — the result and logs are stored, and the screen that is waiting gets them the moment the job ends.
ProjectsWorkers3Users
The machines that run your scripts and flows. A worker with no assignment serves every project.
Search workers…Ctrl KOnline · 3Busy · 2live · refreshes every 5s
worker-98142bb7 StatusOnlineSlots3/12Jobs1,284Avg41 msMem212 MBRunning now report.py
worker-606b8c73 StatusOnlineSlots1/12Jobs1,197Avg38 msMem164 MBRunning now greet.ts
worker-eb57a201 StatusOnlineSlots0/12Jobs1,206Avg40 msMem98 MBRunning now—
The Workers tab: one card per worker with its status, busy and free slots, memory, jobs done and what it is running now.

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 cardWhat it tells you
StatusOnline: ready for work. Busy: running a job right now. Offline: not running — it may have crashed or been stopped.
SlotsHow many jobs it runs at once, busy ones in amber and free ones in green. SQL has its own row.
MemoryUse against its limit, from Plenty of room to Critical — almost out of memory.
Jobs done · Avg timeJobs completed since it started, and their average run time.
Currently runningThe 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.

  1. Open the worker

    Click its card to open the details.

  2. Restrict it

    Press + Restrict to projects and pick the projects, or Assign to this project only from inside a project.

  3. 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:

Shellterminal
docker compose up -d --scale worker=3

SQL 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.