Skip to content
See Also

Additional Features ​

Pre-installing and configuring every possible package would compromise a flexible workspace footprint. Instead, we developed an opt-in method to seamlessly install and configure features at your discretion.

Behind the scenes, we are simply running an Ansible playbook to install the desired feature.

Installing Features ​

We provide two methods for installing additional features in the Kloud Workspace. You can choose the method that best fits your needs.

Install at Boot ​

Kloud Workspace evaluates the WS_FEATURES_ADDITIONAL_FEATURES environment variable at startup to determine which features to install automatically.

sh
docker run \
  -e WS_FEATURES_ADDITIONAL_FEATURES="dotnet jupyter" \
  ghcr.io/kloudkit/workspace:v0.1.2

Manual Installation ​

To manually install a feature, run the following command:

sh
# Help information
ws feature install -h

# Example: installing PHP
ws feature install php

As previously mentioned, all features are powered by Ansible playbooks. These playbooks are located in the /usr/share/workspace/features directory, as specified by the WS_FEATURES_DIR environment variable (which is not intended to be overridden).

The directory location can be overridden with the --root flag when installing. In the example below, we use /alternate, but any directory you have access to will work. The command will look for a playbook at /alternate/php.yaml:

sh
ws feature install php --root /alternate

Optional Variables ​

As mentioned above, features are installed using playbooks. Certain playbooks support additional variables for customization.

To do this, use the --opt flag (equivalent to Ansible's --extra-vars), zero or more times, as shown in the example below:

sh
ws feature install dagger --opt dagger_version=0.13.3

Custom Features ​

You can create custom playbooks for specific needs. The template below offers a starting point. Ensure that hosts: workspace remains unchanged, as this targets the active workspace session.

πŸ’‘ TIP

It may also help to explicitly mention that the custom playbook template can be saved as cool.yaml in the /alternate directory.

yaml
# /alternate/cool.yaml
- name: Install a cool new feature
  gather_facts: false
  hosts: workspace

  tasks:
    - name: Just saying hello
      ansible.builtin.debug:
        msg: Hello world! πŸ‘‹
sh
ws feature install custom --feature cool --root /alternate

Feature Store ​

Some features require packages from third-party APT repositories (i.e. cloudflared, gcloud, gh, etc.) or binary artifacts (i.e. sops, composer, etc.).

By default, Kloud Workspace enables the individual vendor repositories and artifacts at install time.

When the WS_FEATURES_STORE_URL environment variable is set, packages and artifacts are fetched from the ws-feature-store instead of from individual vendor repositories.

Use Cases ​

  • Airgapped (offline) environments: run the feature store on a local network with no internet access.
  • High-latency on-prem: avoid slow connections to upstream vendor CDNs by serving packages locally.
  • Quick caching: reduce startup time by fetching from a nearby mirror instead of multiple remote sources.

Quick Start ​

Point the workspace at a running feature store instance:

sh
docker run \
  -e WS_APT_DISABLE_REPOS="*" \
  -e WS_FEATURES_STORE_URL="http://feature-store.local" \
  -e WS_FEATURES_ADDITIONAL_FEATURES="gh terraform" \
  ghcr.io/kloudkit/workspace:v0.1.3

The feature store image is available at ghcr.io/kloudkit/ws-feature-store. Tags are released monthly with the latest package updates and follow a :v{YYYY}.{MM} convention (e.g. :v2026.02).

πŸ’‘ TIP

Combine with WS_APT_DISABLE_REPOS set to * to ensure no traffic leaves the local network.

Available Features ​

ℹ️ INFO

Have a feature in mind that we haven’t covered? Feel free to suggest it or contribute directly.

For more information, visit our contribution guide.

FeatureDescriptionSinceStore
bunBun JavaScript runtime and package managerv0.1.3βœ…
cloudflaredCloudflare tunnel CLIβœ…
codexcodex CLIv0.0.20
conanConan CLI and related toolsv0.0.21
continuecn CLI and continue extension
cppC++ and related toolsβœ…
daggerdagger.io CLI and SDK
doctlDigitalOcean CLIv0.1.3
dotnet.NET framework and related extensionsβœ…
gcloudGoogle Cloud CLI for GCPβœ…
ghGitHub CLIβœ…
helm-extrasHelm plugins and related extensionsv0.1.3βœ…
jfJFrog CLIβœ…
jupyterJupyter packages and related extensions
ocOpenShift CLIv0.1.3βœ…
opencodeOpenCode CLI and related extensionv0.1.1
phpPHP and related extensionsβœ…
rclonerclone CLIβœ…
resticRestic CLIβœ…
rustRust and Cargo
snykSnyk CLI and related extensionv0.0.20
sopsSOPS CLIv0.0.21βœ…
talosTalos CLIβœ…
terraformTerraform packages and related extensionsβœ…

Released under the MIT License