Configuration ​
Kloud Workspace follows the convention over configuration principle, shipping with sensible defaults.
Nearly every setting can be overridden with environment variables, giving you maximum flexibility.
All configuration is supplied exclusively through environment variables. No JSON, YAML, or CLI flags required. This makes the workspace fully stateless and cloud-friendly.
WS_<GROUP>
Prefix Convention
Variables that are consumed solely by Kloud Workspace start with WS_<GROUP>_
followed by the name (example: WS_ZSH_PLUGINS
).
When a variable is also consumed by an underlying tool, we keep its original name. Such variables can be reviewed in the global variables section.
Boolean Values
To enable a boolean environment variable, set it to a truthy value, either 1
or true
.
APT ​
WS_APT_ADDITIONAL_GPG_KEYS
List of trusted gpg pairs.
Accepts a space-delimited list of name:url
pairs installed to
/etc/apt/keyrings
.
The key file is downloaded and saved as /etc/apt/keyrings/<name>.gpg
.
If you list more than one URL, separate them with spaces.
WS_APT_ADDITIONAL_GPG_KEYS="name1:keys.example.com/key1.asc \
name2:keys.example.com/key2.gpg"
WS_APT_ADDITIONAL_PACKAGES
Additional APT packages installed during startup.
Accepts a space-delimited package list.
WS_APT_ADDITIONAL_PACKAGES="cmake nano"
WS_APT_ADDITIONAL_REPOS
Appends additional repository lines to /etc/apt/sources.list
.
Accepts a semicolon-delimited list of full deb
entries.
Each entry is copied as is, you're responsible for correct suite
(bookworm
) and component names (main
, contrib
, ...).
WS_APT_ADDITIONAL_REPOS="deb http://one.test bookworm main; deb \
http://two.test bookworm main"
WS_APT_DISABLE_REPOS
Disables specified APT repositories or all repositories.
This is useful when you rely exclusively on a private mirror.
Accepts either:
- A space-delimited list of repository names (
debian
,additional
,trixie
). - A boolean
true
or*
value to disable all repositories.
WS_APT_DISABLE_REPOS="debian additional"
WS_APT_UPDATE_CACHE
Forces apt-get update
before any package action.
Read More →Auth ​
WS_AUTH_DISABLE_SUDO
Disables password-less sudo
.
WS_AUTH_PASSWORD
Plaintext password for web login.
Use only in ephemeral or local environments, never in shared or production deployments.
WS_AUTH_PASSWORD="super_duper_secret"
WS_AUTH_PASSWORD_HASHED
Argon2 hash used for web login.
Takes precedence over plaintext password when both are set.
WS_AUTH_PASSWORD_HASHED="$argon2i$v=19$m=4096,t=3,p=1$...$..."
Enterprise CA ​
WS_CA_ADDITIONAL_CERT_ENDPOINTS
URLs of additional CA certificates to trust (HTTPS only).
Accepts a space-delimited URL list pointing to a PEM-encoded certificate. Only HTTPS URLs are supported for secure certificate retrieval.
WS_CA_ADDITIONAL_CERT_ENDPOINTS="https://corp.com/ca.pem \
https://alt.com/root.crt"
WS_CA_ADDITIONAL_CERT_INSECURE_ENDPOINTS
URLs of additional CA certificates to trust (HTTP or insecure HTTPS).
Accepts a space-delimited URL list pointing to a PEM-encoded certificate. Supports both HTTP and HTTPS URLs. For HTTPS URLs, certificate validation is bypassed using insecure connections.
Use only in fully trusted network environments.
WS_CA_ADDITIONAL_CERT_INSECURE_ENDPOINTS="http://corp.com/ca.pem \
https://untrusted.com/root.crt"
Docker ​
WS_DOCKER_ENABLE_CLIENT
Enables Docker inside the container.Read More →
Editor ​
WS_EDITOR_ADDITIONAL_VS_EXTENSIONS
Installs these Marketplace extension IDs at startup.
Accepts a space-delimited list of extensions.
WS_EDITOR_ADDITIONAL_VS_EXTENSIONS="dbaeumer.vscode-eslint \
esbenp.prettier-vscode"
WS_EDITOR_ADDITIONAL_VS_EXTENSIONS_DIR
Installs .vsix
file found in this directory.
Use this when you package proprietary or pre-downloaded extensions.
WS_EDITOR_ADDITIONAL_VS_EXTENSIONS_DIR="/additional-extensions"
WS_EDITOR_COMMENTS_DISABLE_FONT
Disables the custom font used for code comments.Read More →
WS_EDITOR_SCROLLBAR_SIZE
Editor's scrollbar size.
You may pass either a bare number (6
, becomes 6px
) or
the full CSS value with the px
suffix (i.e. 6px
).
Features ​
WS_FEATURES_ADDITIONAL_FEATURES
Installs additional feature at startup.
Accepts a space-delimited list of features.
WS_FEATURES_ADDITIONAL_FEATURES="dotnet jupyter"
WS_FEATURES_DIR
Directory path where additional features are located.
Specify the full path to the directory containing the features to be loaded or referenced at startup.
Git ​
WS_GIT_CLEAR_NOTEBOOK_OUTPUT
Clears outputs from Jupyter notebooks during git operations.
When true
, the git filter removes execution outputs and execution
counts from .ipynb
files when they are staged for commit.
This helps keep repository history clean by excluding dynamic
output data.
WS_GIT_CLONE_REPO
Clones this repository into ${WS_SERVER_ROOT}
at startup.
The clone happens only if the target directory is empty. Supports HTTPS and SSH URLs (requires configured SSH keys).
WS_GIT_CLONE_REPO="https://github.com/example/repo.git"
WS_GIT_CREDENTIAL_CACHE_TIMEOUT
Lifetime (seconds) of cached Git credentials.
Providing a value of -1
will sech the cache timeout to 1
year (31536000 seconds).
Helm ​
WS_HELM_PRELOAD_CACHE
Restores the Helm repo cache.Read More →
Logging ​
WS_LOGGING_DIR
Base directory for all workspace logs.
WS_LOGGING_DISABLE_CONSOLE_OUTPUT
Disable console logging.
When true
, console logging will not be redirected to
stdout/stderr
, however, logs will still be stored on disk at
"${WS_LOGGING_DIR}/${WS_LOGGING_MAIN_FILE}"
.
WS_LOGGING_MAIN_FILE
Combined log file forstdout
andstderr
.
Server ​
WS_SERVER_PORT
Port on which the web server listens.
WS_SERVER_PROXY_DOMAIN
Domain suffix used to expose server's forwarded ports.
Accepts either a single domain suffix or multiple space-delimited suffixes. > Multiple domain support was added in v0.0.22
.
WS_SERVER_PROXY_DOMAIN="ws.dev local.ws.dev"
WS_SERVER_ROOT_DIR
Root directory for the workspace.
This should only be overridden in extreme cases.
WS_SERVER_SSL_CERT
Path or inline PEM for the server certificate.
Accepts either:
- A full path to the mounted PEM-encoded certificate
- Literal certificate body starting with
-----BEGIN CERTIFICATE-----
(newline characters may be provided as\n
escapes).
When this is unset but WS_SERVER_SSL_KEY
is provided, the
key is reused to mint a self-signed certificate for
WS_SERVER_SSL_HOSTS
(or localhost
).
WS_SERVER_SSL_CERT="/etc/workspace/ssl/server.crt"
WS_SERVER_SSL_HOSTS
Space-delimited DNS names for self-signed certificate.
WS_SERVER_SSL_HOSTS="ws.dev *.ws.dev"
WS_SERVER_SSL_KEY
Path or inline PEM for the private key.
WS_SERVER_SSL_KEY="/etc/workspace/ssl/server.key"
Startup ​
WS_STARTUP_FAIL_ON_ERROR
Fail fast if any startup script exits non-zero.
Terminal ​
WS_TERMINAL_PROMPT_HIDE_DOCKER_CONTEXT
Hides Docker context info in the prompt.Read More →
WS_TERMINAL_PROMPT_HIDE_HOSTNAME
Hides the container hostname in the prompt.Read More →
WS_TERMINAL_PROMPT_HIDE_KUBERNETES_CONTEXT
Hides current Kubernetes context in the prompt.Read More →
WS_TERMINAL_PROMPT_HIDE_NODEJS_VERSION
Hides active Node.js version in the prompt.Read More →
WS_TERMINAL_PROMPT_HIDE_PYTHON_VERSION
Hides active Python version in the prompt.Read More →
WS_TERMINAL_PROMPT_HIDE_USER
Hides the current user in the prompt.Read More →
Zsh ​
WS_ZSH_ADDITIONAL_PLUGINS
Loads additional oh-my-zsh
plugins.
WS_ZSH_ADDITIONAL_PLUGINS="php"
WS_ZSH_PLUGINS
Enables built-in oh-my-zsh
plugins.
WS_ZSH_PLUGINS="kubectl npm python pip"
Deprecated ​
Name | Replacement | Since | Removal |
---|---|---|---|
WS_APT_UPDATE_REPOS | WS_APT_UPDATE_CACHE | v0.0.20 | v0.1.0 |
WS_CA_ADDITIONAL_CERT_ALLOW_INSECURE | WS_CA_ADDITIONAL_CERT_INSECURE_ENDPOINTS | v0.0.22 | v0.1.0 |
WS_CLONE_WORKSPACE_REPO | WS_GIT_CLONE_REPO | v0.0.20 | v0.1.0 |
WS_COMMENTS_DISABLE_FONT | WS_EDITOR_COMMENTS_DISABLE_FONT | v0.0.20 | v0.1.0 |
WS_CONFIGURE_DOCKER | WS_DOCKER_ENABLE_CLIENT | v0.0.20 | v0.1.0 |
WS_CONFIGURE_HELM | WS_HELM_PRELOAD_CACHE | v0.0.20 | v0.1.0 |
WS_DISABLE_SUDO | WS_AUTH_DISABLE_SUDO | v0.0.20 | v0.1.0 |
WS_EXTRA_CA_CERT_ENDPOINTS | WS_CA_ADDITIONAL_CERT_ENDPOINTS | v0.0.20 | v0.1.0 |
WS_EXTRA_CA_CERT_INSECURE | WS_CA_ADDITIONAL_CERT_ALLOW_INSECURE | v0.0.20 | v0.1.0 |
WS_EXTRA_FEATURES | WS_FEATURES_ADDITIONAL_FEATURES | v0.0.20 | v0.1.0 |
WS_EXTRA_VS_EXTENSIONS | WS_EDITOR_ADDITIONAL_VS_EXTENSIONS | v0.0.20 | v0.1.0 |
WS_EXTRA_VS_EXTENSIONS_DIR | WS_EDITOR_ADDITIONAL_VS_EXTENSIONS_DIR | v0.0.20 | v0.1.0 |
WS_PASSWORD | WS_AUTH_PASSWORD | v0.0.20 | v0.1.0 |
WS_PASSWORD_HASHED | WS_AUTH_PASSWORD_HASHED | v0.0.20 | v0.1.0 |
WS_PORT | WS_SERVER_PORT | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_DOCKER | WS_TERMINAL_PROMPT_HIDE_DOCKER_CONTEXT | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_HOSTNAME | WS_TERMINAL_PROMPT_HIDE_HOSTNAME | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_KUBERNETES | WS_TERMINAL_PROMPT_HIDE_KUBERNETES_CONTEXT | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_NODEJS | WS_TERMINAL_PROMPT_HIDE_NODEJS_VERSION | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_PYTHON | WS_TERMINAL_PROMPT_HIDE_PYTHON_VERSION | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_USER | WS_TERMINAL_PROMPT_HIDE_USER | v0.0.20 | v0.1.0 |
WS_PROXY_DOMAIN | WS_SERVER_PROXY_DOMAIN | v0.0.20 | v0.1.0 |
WS_ROOT | WS_SERVER_ROOT | v0.0.20 | v0.1.0 |
WS_ZSH_EXTRA_PLUGINS | WS_ZSH_ADDITIONAL_PLUGINS | v0.0.20 | v0.1.0 |
Global Variables ​
ENV | Description | Read More |
---|---|---|
EDITOR | Default terminal editor (default: code ) | |
GIT_COMMITTER_NAME | Name to be used in ~/.gitconfig | → |
GIT_COMMITTER_EMAIL | Email to be used in ~/.gitconfig | → |
PAGER | Default terminal pager (default: less ) | |
TZ | Define the timezone |