hub.env reference
Every typed setting of a hub, as in release v0.5.0. An empty key means the default
named here. Values are plain text, one key per line, no quotes.
Features
| Key |
Default |
Meaning |
features |
|
What the hub is for, comma separated: r, python, deploy. Selects the rules, skills, plugins and instructions the coding agents get; the IDE tiles and the deploy stack are chosen in kustomization.yaml. |
ai |
true |
false makes a hub without any AI: IDE images without Claude Code and Posit Assistant, no agent content, no AI packages. |
Registry
The hub keeps its images, the IDE and base images with your layer and every built app, in a
registry: its own behind the Ingress, or one you provide.
| Key |
Default |
Meaning |
registry |
|
Host name of the registry. With the platform's own registry, the host name its Ingress serves; otherwise the registry you provide. |
registry_insecure |
false |
true for a registry reached over plain HTTP. Only for a throwaway cluster; it needs the address on every node. |
registry_storage |
filesystem |
Where the platform's own registry keeps images: filesystem (a volume) or s3 (the object store below), which makes the registry stateless. |
registry_backend |
distribution |
For a registry you provide: distribution for any v2 registry such as Harbor, or ecr. |
registry_user |
hub |
The user name of the registry credential, if not hub. The password is registry-password in secrets.env. |
Single host
Used by the host setup only; a cluster's ingress handles TLS itself.
| Key |
Default |
Meaning |
acme_email |
|
The e-mail Let's Encrypt notifies about the host's certificates. |
tls_cert, tls_key |
|
Your own certificate for the host names instead of Let's Encrypt: two files on the host. |
Release
| Key |
Default |
Meaning |
image_tag |
dev |
The release the hub runs, for example v0.5.0. The installer sets it on every install, upgrade and rollback. Changing it rolls the platform; new sessions start on the new images, apps are rebuilt on their next deploy. |
Storage and object store
| Key |
Default |
Meaning |
home_size |
20Gi |
Size of a user's home volume, set when it is created at their first session. Growing an existing one is a volume patch. |
object_store_endpoint |
|
URL of an S3-compatible object store; empty for AWS S3 itself. Used by registry_storage=s3 and by backups. Keys in secrets.env. |
object_store_bucket |
|
Its bucket. |
object_store_region |
|
Its region. |
loki_s3_from |
|
Logs on the object store: the date from which they go there. Tomorrow on a hub that already has logs, any past date on a new one. Empty keeps logs on a volume. |
Redis
With the redis/external component only; the hub's own Redis needs nothing here.
| Key |
Default |
Meaning |
redis_host |
|
Host name of your Redis. |
redis_port |
6379 |
Its port. |
R packages
| Key |
Default |
Meaning |
r_snapshot |
latest |
The snapshot date of the package repository that the stack and every app build install from, 2026-09-01 or latest. Pin it for reproducible builds. |
cran |
|
Your own repository instead of the public one: the full URL, for example https://ppm.acme.internal/cran/__linux__/noble/2026-09-01. A Posit Package Manager URL keeps Linux binaries; a plain mirror builds from source. |
sysreqs_api |
|
Where app builds look system dependencies up: empty for the public service, a Posit Package Manager's .../__api__/repos/<repo>/sysreqs, or none (then only system-packages in hub.yaml). |
deploy_mode |
renv |
renv: an app restores its own lock file on top of the stack. stack: an app may use only the stack's packages, builds take seconds. |
Python
| Key |
Default |
Meaning |
py_snapshot |
|
The date that pins package resolution in the IDEs and in app builds; empty takes the newest. |
pypi_index |
|
Your own package index instead of PyPI. |
Sessions
| Key |
Default |
Meaning |
ide_idle_timeout |
never |
Milliseconds an IDE session keeps running with no open browser tab before it is stopped. Files on the home volume persist; the R process and unsaved editor state do not. -1 or empty: never. |
ide_max_instances |
3 |
Sessions of one IDE a user may run at the same time, each with its own size. 1 gives one session per IDE. |
Deploys
| Key |
Default |
Meaning |
max_builds |
2 |
Builds that run at the same time; further deploys wait in line. |
ingress_class |
traefik |
The ingress class for the Ingress of each deployed API. Any class works; the API's authentication is a sidecar in its pod. |
timezone |
UTC |
The time zone that pipeline schedules (schedule: in hub.yaml) are read in. |
Cluster
Nothing here matters on a single host, where single_node=true is set for you.
| Key |
Default |
Meaning |
single_node |
false |
true on one machine: pipeline stores that apps mount can then be shared without a ReadWriteMany class. |
storage_class_rwx |
|
A ReadWriteMany StorageClass (EFS, CephFS) for pipeline stores that apps mount from other nodes. Without this or single_node, uses: in hub.yaml is refused. |
session_pool |
false |
true on a cluster whose nodes for user code carry the label and taint hub.linnerprogramming.com/pool=sessions. Sessions, apps, builds and pipeline runs then run there only, the platform's pods stay on the others, and an autoscaler can scale that pool. |
Tokens at APIs and MCP servers
A deployed API or MCP server is called from inside the hub with the caller's identity, and from
outside with its API key. With these keys, a token of your identity provider works from outside
too: a script or another service sends Authorization: Bearer <token>, and the API sees the
user and groups behind it.
| Key |
Default |
Meaning |
api_token_issuer |
|
The OpenID Connect issuer, for example https://cognito-idp.<region>.amazonaws.com/<pool id> or https://<keycloak>/realms/<realm>. Empty: no tokens, the API key stays the way in from outside. |
api_token_client_id |
|
The client the hub logs people in with. Its tokens are people; a token of any other client is a machine, admitted per API by access-clients in hub.yaml. |
api_token_user_claim |
email |
The claim with the user id. |
api_token_groups_claim |
cognito:groups |
The claim with the groups. With Cognito send the ID token, which carries the email. |