Setting up Tercen Studio
If you wish to develop operators then you need to set up a development environment.
Installing Tercen Studio
1. Install docker-compose
First you need to install docker-compose.
For Windows:
If you use Windows, you can install Docker-Desktop for Windows that includes docker-compose.
Advise: Select the WSL 2 backend system option when installing on Windows.
For Mac and Linux:
Check out how to install docker-compose on Mac or Linux.
2. Clone tercen-studio repository
Then, get tercen-studio by cloning the following repository:
git clone https://github.com/tercen/tercen_studio.git
cd tercen_studioThe latest instructions on how to install Tercen Studio can be found in the README of the Tercen Studio GitHub repository.
Starting Tercen Studio
Once docker-compose is installed and the tercen-studio repository cloned, you can start tercen by running:
# optional but recommended: lets the studio install operators from private
# GitHub repositories and pull private ghcr.io images. Use a CLASSIC personal
# access token with `repo` scope (fine-grained github_pat_… tokens are not
# accepted by the git zipball endpoint).
export GITHUB_TOKEN=ghp_your_token_here
docker compose up -dSince 2026-08 the studio runs the same released images and architecture as production: tercen main + a separate worker (each running podman internally — the main manages the sarno table engine, the worker executes operator containers), ha-scheduler, redis and couchdb. Image versions are pinned in docker-compose.yaml; to update, bump them to the currently deployed production versions — tercen and ha-scheduler are the image tags on the production deployments, and sarno is tercen.sarno.image in the tercen-config ConfigMap rather than a pod image. Upgrading from a pre-2026-08 studio: the architecture changed — run docker compose down -v (wipes local data) and start fresh. For GPU operator development see the GPU chapter — and use tercen/gpu_smoke_operator to verify GPU passthrough on any Tercen instance.
You can run Tercen by going to http://127.0.0.1:5402.
Username: admin
Password: admin
Published ports bind to 127.0.0.1 only. The studio has a fixed admin/admin login and can install operators with whatever GITHUB_TOKEN you gave it, so it should not be on the network by default.
This matters most for GPU work, where the studio usually runs on a separate machine with the GPU rather than the one you browse from. Reaching it on that machine’s address will simply refuse the connection.
Prefer an SSH tunnel, which needs no change to the studio:
ssh -L 5402:127.0.0.1:5402 <host> # then use http://127.0.0.1:5402 as usualTo expose it deliberately instead, set BIND_ADDR:
BIND_ADDR=0.0.0.0 docker compose up -d # or a specific interface addressRStudio is not started by default. It is available with docker compose --profile rstudio up -d, then http://127.0.0.1:8787/.
Username: rstudio
Password: tercen
Do not generate expected test output in RStudio. Its R is 4.4.3 — the same version operators use — but the rest of the environment differs from the base images operators are built on:
| RStudio | runtime-r44-minimal (operator tiers 1–2) |
|
|---|---|---|
| OS / libc | Ubuntu 24.04, glibc | Alpine, musl |
| BLAS/LAPACK | OpenBLAS 0.3.26 | reference libRlapack |
| Packages | 190 | 36 |
OpenBLAS and reference LAPACK do not agree bit-for-bit on svd, lm, prcomp or matrix multiplication — small differences, and exactly large enough to break an exact-match golden comparison. Tier 3 operators build on rocker/r-ver, which RStudio does not match either.
Run main.R in the operator’s own image instead, which is CI-exact by construction:
docker run --rm -v "$PWD:/operator" -w /operator \
--network tercen_studio_tercen \
tercen/runtime-r44-minimal:4.4.3-2 \
R --no-save -f main.R --args --taskId=<id> --serviceUri=http://tercen:5400/api/v1/VS Code (Python development) is optional; start it with docker compose --profile python up -d and open http://127.0.0.1:8443/.
- Password: tercen
Now you’re all set!