Skip to main content

Command Reference

1. Global Options​

FlagShortDefaultDescription
--output-otableOutput format: table, json, yaml, csv.
--quiet-qFalseSuppress informational output (errors still shown).
--verbose-vFalseEnable verbose/debug output.
--no-headers—FalseOmit column headers from table and CSV output.
--field-selector—NoneComma-separated list of fields to include in output (e.g. name,status).
--version-V—Print version and exit.
$ ilum --version
$ ilum -v install
$ ilum --output json status
$ ilum --quiet --output json module list

2. ilum init​

Interactive setup wizard for the Ilum CLI.

Synopsis​

ilum init [OPTIONS]

Options​

FlagShortDefaultDescription
--yes-yFalseNon-interactive mode with defaults.
--profile-pdefaultProfile name to create.

Wizard Steps​

StepAction
1. PreflightCheck for helm (>= 3.12), kubectl (>= 1.28), and docker (>= 24.0). In interactive mode, offers to install any missing or outdated tool automatically using platform-appropriate methods (see Prerequisites). In non-interactive mode (--yes), raises an error if a tool is missing.
2. ClusterDetect kubecontexts or create a local cluster (k3d, minikube, kind). If creating a cluster, also checks for the cluster provider binary and offers to install it.
3. ProfilePrompt for profile name, release name, namespace.
4. ModulesInteractive checkbox grouped by category with dependency resolution.
5. ConfirmDisplay summary table and ask for confirmation.
6. SaveWrite the profile to config.yaml.

Examples​

# Interactive wizard
$ ilum init

# Non-interactive with defaults
$ ilum init --yes

# Create a named profile
$ ilum init --profile staging

3. ilum quickstart​

Install Ilum in one command with sensible defaults.

Synopsis​

ilum quickstart [OPTIONS]

Options​

FlagShortDefaultDescription
--provider—minikubeLocal cluster provider if a new cluster is needed (minikube, k3d, kind).
--profile-pdefaultProfile name to create.
--module-mNoneAdditional module to enable (repeatable).
--preset—NoneDeployment preset to apply (e.g. tiny, default, data-engineering, production).
--timeout—15mHelm install timeout.

Steps Performed​

StepAction
1. PreflightCheck for helm (>= 3.12), kubectl (>= 1.28), docker (>= 24.0). In interactive mode, offers to install missing tools automatically (see Prerequisites). In non-interactive mode, raises an error if a tool is missing.
2. ClusterProbe current kubecontext. If unreachable, create a local cluster with the dev preset (4 CPUs, 8 GB). Also checks for the cluster provider binary and offers to install it.
3. ProfileCreate a profile with default modules plus any extras from --module.
4. InstallRun helm install with --atomic, auto-resolve NodePort conflicts.

Cluster Auto-Detection​

Quickstart probes the current kubeconfig context by listing namespaces. If the API server responds within 5 seconds, the existing cluster is used. Otherwise, a new local cluster is created using the provider specified by --provider (default: minikube).

Examples​

# Install with all defaults (detects cluster, default modules)
$ ilum quickstart

# Create a k3d cluster instead of minikube
$ ilum quickstart --provider k3d

# Enable additional modules beyond defaults
$ ilum quickstart -m sql -m airflow

# Use a named profile
$ ilum quickstart --profile staging

# Increase Helm install timeout
$ ilum quickstart --timeout 20m

4. ilum install​

Install the Ilum platform via Helm.

Synopsis​

ilum install [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--version—"" (latest)Chart version to install.
--values-fNoneValues file (repeatable).
--set—NoneHelm --set flag (repeatable).
--module-mNoneModule to enable (repeatable).
--preset—NoneDeployment preset to apply (e.g. tiny, default, data-engineering, production).
--atomic—TrueUse --atomic for Helm install.
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Module Priority Rule​

Modules are resolved in this order:

  1. Modules passed via --module flags.
  2. Modules saved in the active profile (get_enabled_modules).
  3. Default-enabled modules from the module registry.

NodePort Conflict Resolution​

Before Helm install, the CLI checks for NodePort conflicts on the cluster. If a default NodePort (e.g. 31777 for ilum-ui) is already allocated, the user is prompted to select a free port. In --yes mode, a free port is auto-assigned.

Examples​

# Install with defaults
$ ilum install

# Install a specific version with modules
$ ilum install --version 6.7.0 --module jupyter --module sql

# Install into a custom namespace, non-interactive
$ ilum install -n ilum-prod -r ilum-prod --yes

# Dry-run preview
$ ilum install --dry-run

# Install with custom values file and overrides
$ ilum install -f custom-values.yaml --set ilum-core.replicaCount=3

5. ilum upgrade​

Upgrade an existing Ilum installation.

Synopsis​

ilum upgrade [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--version—"" (latest)Chart version to upgrade to.
--values-fNoneValues file (repeatable).
--set—NoneHelm --set flag (repeatable).
--module-mNoneModule to enable (repeatable).
--atomic—TrueUse --atomic for Helm upgrade.
--force-rollback—FalseRollback a stuck release before upgrading.
--reset-defaults—FalseReset to new chart defaults before applying user values (uses Helm's --reset-then-reuse-values). Enabled automatically when the chart version changes.
--reuse-values—FalseForce reuse of previous values even when chart version changes. Overrides the automatic --reset-defaults behavior.
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Values Safety Pipeline​

  1. Stuck release detection -- if the release is in pending-install, pending-upgrade, or pending-rollback state, the CLI blocks unless --force-rollback is passed.
  2. Auto-reset chart defaults -- when the chart version changes, the CLI automatically uses --reset-then-reuse-values so new chart defaults (e.g. updated image tags) take effect. Pass --reuse-values to opt out.
  3. Drift detection -- external changes made since the last CLI operation are displayed as a diff table and preserved during upgrade.
  4. Breaking change warnings -- version transitions are checked for known breaking changes.
  5. No-op detection -- if the target version matches the current version and there are no value changes or new modules, the CLI exits early with a success message.

Examples​

# Upgrade to latest
$ ilum upgrade

# Upgrade to a specific version
$ ilum upgrade --version 6.8.0

# Recover a stuck release and upgrade
$ ilum upgrade --force-rollback

# Upgrade with additional modules
$ ilum upgrade --module airflow --module superset

# Dry-run preview
$ ilum upgrade --dry-run

6. ilum uninstall​

Uninstall the Ilum platform.

Synopsis​

ilum uninstall [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--delete-data—FalseDelete PersistentVolumeClaims after uninstall.
--delete-namespace—FalseDelete the namespace after uninstall.

Idempotent Behavior​

If the release does not exist, ilum uninstall exits with code 0 and prints an informational message. It does not fail.

Destructive Flag Confirmation​

When --delete-data or --delete-namespace is passed (without --yes), the user must type the release name to confirm.

Examples​

# Standard uninstall
$ ilum uninstall

# Uninstall and delete all data
$ ilum uninstall --delete-data

# Uninstall, delete data, and delete namespace
$ ilum uninstall --delete-data --delete-namespace --yes

# Dry-run preview
$ ilum uninstall --dry-run

6b. ilum cleanup​

Full environment teardown with tiered, opt-in destructiveness. Combines uninstall, cluster deletion, config removal, dependency removal, and CLI self-uninstall into a single command.

Synopsis​

ilum cleanup [OPTIONS]

Options​

FlagShortDefaultDescription
--cluster—FalseAlso delete CLI-managed local k8s cluster.
--config—FalseAlso remove CLI config/state/cache directories.
--deps—FalseAlso remove dependencies (helm, kubectl, minikube, k3d, kind, docker).
--self—FalseAlso uninstall the CLI itself (always last, never included in --all).
--all—FalseShorthand for --cluster --config --deps.
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--yes-yFalseSkip all confirmations.
--dry-run—FalsePreview without executing.

Tiers​

The command executes in order:

  1. Tier 1 (always): Uninstall Helm release + delete PVCs + delete namespace. Requires typing release name to confirm.
  2. Tier 2 (--cluster): Delete CLI-managed local cluster. Requires typing cluster name.
  3. Tier 3 (--config): Remove CLI directories and Helm repo. Requires typing DELETE.
  4. Tier 4 (--deps): Remove dependencies. Requires typing REMOVE per tool (or REMOVE DOCKER for Docker).
  5. Tier 5 (--self): Uninstall the CLI itself. Requires typing UNINSTALL.

Each tier is independent -- if one fails, the next still runs.

Examples​

# Preview what would be removed
$ ilum cleanup --all --dry-run

# Uninstall release only (Tier 1)
$ ilum cleanup --yes

# Full teardown: release + cluster + config + dependencies
$ ilum cleanup --all --yes

# Full teardown including CLI itself
$ ilum cleanup --all --self --yes

# Just release + cluster, skip deps
$ ilum cleanup --cluster --yes

7. ilum connect​

Connect the CLI to an existing Ilum installation.

Synopsis​

ilum connect [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rNoneHelm release name (skips auto-detection).
--namespace-nNoneKubernetes namespace (scans all if omitted).
--context—NoneKubernetes context.
--profile-pdefaultProfile name to create or update.
--yes-yFalseSkip confirmation prompts.
--no-switch—FalseDon't switch active profile after connecting.

Auto-detect vs Direct Mode​

ConditionModeBehavior
--release and --namespace both setDirectValidate the specific release in the given namespace.
--release set, --namespace omittedScanScan all namespaces for the named release.
Neither setScanScan all namespaces for any Ilum releases.

When multiple releases are found in scan mode, a table is displayed and the user selects one. In --yes mode, the first release is auto-selected.

Post-connect Actions​

  • Enabled modules are detected from live Helm values and synced to the profile.
  • A values snapshot is saved for drift detection.
  • Stuck releases produce a warning with recovery instructions.

Examples​

# Auto-detect
$ ilum connect

# Direct mode
$ ilum connect --release ilum --namespace production

# Connect to a named profile
$ ilum connect --profile staging

# Non-interactive
$ ilum connect --yes

8. ilum status​

Show the status of an Ilum installation.

Synopsis​

ilum status [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--pods/--no-pods—TrueShow pod readiness.
--modules/--no-modules—TrueShow enabled modules.
--wait-wFalseBlock until all pods are ready.
--wait-timeout—300Seconds to wait when --wait is used (0 = unlimited).
--events—FalseInclude recent Kubernetes events in output.
--events-type—NoneFilter events by type: Normal, Warning.
--events-since—5mShow events newer than this duration (e.g. 10m, 1h).

Examples​

# Full status
$ ilum status

# Status without pod details
$ ilum status --no-pods

# Status for a specific release
$ ilum status -r my-ilum -n staging

# Wait for all pods to become ready (up to 5 minutes)
$ ilum status --wait

# Wait with a custom timeout
$ ilum status --wait --wait-timeout 600

# Include recent warning events
$ ilum status --events --events-type Warning

# Show events from the last hour
$ ilum status --events --events-since 1h

8b. ilum values​

View or export live Helm values for the current release.

Synopsis​

ilum values [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--path—NoneDot-notation path to a specific key (e.g. ilum-core.replicaCount).
--all-aFalseShow all computed values (chart defaults + overrides), not just user-supplied.
--diff—FalseShow a diff between user-supplied values and chart defaults.
--revision—NoneShow values from a specific Helm revision number.
--export—NoneExport values to a file path instead of printing to stdout.

Examples​

# Show user-supplied values
$ ilum values

# Show a specific key
$ ilum values --path ilum-core.replicaCount

# Show all computed values
$ ilum values --all

# Show values from a previous revision
$ ilum values --revision 3

# Diff user values against chart defaults
$ ilum values --diff

# Export values to a file
$ ilum values --export my-values.yaml

# Combine path filter with JSON output
$ ilum values --path mongodb --output json

8c. ilum diff​

Compare Helm values across different sources.

Synopsis​

ilum diff [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--source-sdefaultsSource to compare live values against: defaults, file, revision, snapshot.
--values-file-fNoneValues file to compare against (required when --source file).
--revision—NoneHelm revision number to compare against (required when --source revision).
--path—NoneDot-notation path to limit comparison scope (e.g. ilum-core).

Source Modes​

SourceDescription
defaultsCompare live values against chart default values.
fileCompare live values against a local values file.
revisionCompare live values against a previous Helm revision.
snapshotCompare live values against the last CLI snapshot (drift detection).

Examples​

# Diff live values against chart defaults
$ ilum diff

# Diff against a local values file
$ ilum diff --source file --values-file custom-values.yaml

# Diff against a specific revision
$ ilum diff --source revision --revision 2

# Diff against the last CLI snapshot (detect drift)
$ ilum diff --source snapshot

# Limit diff to a specific path
$ ilum diff --path ilum-core

8d. ilum rollback​

Roll back the Ilum release to a previous Helm revision.

Synopsis​

ilum rollback [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--revision—NoneTarget revision number (defaults to previous revision if omitted).
--dry-run—FalsePreview the rollback without executing.
--yes-yFalseSkip confirmation prompt.
--timeout—10mHelm timeout.

Examples​

# Rollback to the previous revision
$ ilum rollback

# Rollback to a specific revision
$ ilum rollback --revision 3

# Dry-run preview
$ ilum rollback --dry-run

# Non-interactive rollback
$ ilum rollback --revision 5 --yes

# Rollback with a longer timeout
$ ilum rollback --timeout 15m

8e. ilum exec​

Open an interactive shell session inside a module's pod.

Synopsis​

ilum exec MODULE [OPTIONS]

Arguments​

ArgumentRequiredDescription
MODULEYesModule name (e.g. core, jupyter, sql).

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--shell—/bin/shShell binary to use (e.g. /bin/bash).
--container-cNoneContainer name (auto-detected if omitted).
--pod—NoneSpecific pod name (auto-detected if omitted).
--command—NoneRun a single command instead of opening an interactive shell.

Examples​

# Open a shell in the core pod
$ ilum exec core

# Use bash instead of sh
$ ilum exec core --shell /bin/bash

# Exec into a specific container
$ ilum exec jupyter --container ilum-jupyter

# Run a single command
$ ilum exec core --command "cat /opt/ilum/conf/application.conf"

# Exec into a specific pod
$ ilum exec core --pod ilum-core-0

8f. ilum top​

Show resource usage (CPU and memory) for module pods.

Synopsis​

ilum top [MODULE] [OPTIONS]

Arguments​

ArgumentRequiredDescription
MODULENoModule name to filter (shows all modules if omitted).

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--sort-by—cpuSort column: cpu, memory, name.
--watch-wFalseContinuously refresh the display.
--interval—5Refresh interval in seconds when --watch is used.

Examples​

# Show resource usage for all modules
$ ilum top

# Show resource usage for a specific module
$ ilum top core

# Sort by memory usage
$ ilum top --sort-by memory

# Watch mode with 10-second refresh
$ ilum top --watch --interval 10

# JSON output for scripting
$ ilum top --output json

9. ilum logs​

Show logs for an Ilum module's pod.

Synopsis​

ilum logs MODULE [OPTIONS]

Arguments​

ArgumentRequiredDescription
MODULEYesModule name (e.g. core, jupyter, sql).

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--follow-fFalseStream logs in real time.
--tail—100Number of lines to show (0 for all).
--container-cNoneContainer name (auto-detected if omitted).
--previous-pFalseShow logs from previously terminated container.
--max-duration—0Stop --follow after N seconds (0 = unlimited).

Piping Note​

Output is written to stdout via typer.echo, so logs can be piped to other tools:

$ ilum logs core --tail 0 | grep ERROR
$ ilum logs core -f | tee /tmp/core.log

Examples​

# Last 100 lines from core
$ ilum logs core

# Stream jupyter logs
$ ilum logs jupyter --follow

# All logs from a specific container
$ ilum logs core --tail 0 --container ilum-core

# Previous container logs (after restart)
$ ilum logs core --previous

10. ilum doctor​

Run health checks on the Ilum installation.

Synopsis​

ilum doctor [OPTIONS]

Options​

FlagShortDefaultDescription
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--release-rfrom profileHelm release name.
--check-cNoneRun a single check by name.
--failures-only—FalseOnly show failed and warning checks.
--fix—FalseAuto-fix simple issues (e.g., add missing Helm repo).

Checks Table​

Check NamePhaseWhat it verifies
helm1 - BinariesHelm is installed and version >= 3.12
kubectl1 - Binarieskubectl is installed and version >= 1.28
docker1 - BinariesDocker is installed and version >= 24.0
helm-repo2 - Helm repoThe ilum Helm repo is configured (charts.ilum.cloud)
cluster3 - ConnectivityKubernetes cluster is reachable
namespace4 - Cluster-dependentTarget namespace exists
pods4 - Cluster-dependentAll pods are healthy (detects CrashLoopBackOff)
pvcs4 - Cluster-dependentAll PVCs are bound (detects Pending PVCs)
rbac4 - Cluster-dependentRequired RBAC permissions are granted
release4 - Cluster-dependentHelm release exists and is not stuck or failed
compatibility4 - Cluster-dependentKubernetes version >= 1.28
service-endpoints4 - Cluster-dependentService endpoints have ready addresses
health-endpoints4 - Cluster-dependentHealth check endpoints respond for core, airflow, superset, minio

Phase Gating​

If the cluster check fails (phase 3), all phase-4 checks are skipped with status SKIP.

Examples​

# Run all checks
$ ilum doctor

# Run a single check
$ ilum doctor --check pods

# Check against a specific release
$ ilum doctor -r my-ilum -n staging

11. ilum module​

Manage Ilum platform modules.

11.1 ilum module list​

List all available Ilum modules.

Synopsis​

ilum module list [OPTIONS]

Options​

FlagShortDefaultDescription
--category-cNoneFilter by category.
--enabled/--disabled—NoneFilter by default-enabled status.
--search-sNoneSearch modules by name or description.

Examples​

# List all modules
$ ilum module list

# List only notebook modules
$ ilum module list --category notebook

# List only default-enabled modules
$ ilum module list --enabled

# Search for modules matching a term
$ ilum module list --search kafka

11.2 ilum module show​

Show detailed information about a module.

Synopsis​

ilum module show NAME

Arguments​

ArgumentRequiredDescription
NAMEYesModule name to inspect.

Examples​

$ ilum module show sql
$ ilum module show hive-metastore

11.3 ilum module tree​

Show the dependency tree for a module with resource estimates.

Synopsis​

ilum module tree NAME

Arguments​

ArgumentRequiredDescription
NAMEYesModule name to display tree for.

Examples​

$ ilum module tree sql
$ ilum module tree langfuse

11.4 ilum module enable​

Enable one or more modules on a running Ilum release.

Synopsis​

ilum module enable MODULES... [OPTIONS]

Arguments​

ArgumentRequiredDescription
MODULESYesModules to enable (one or more).

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--set—NoneAdditional Helm --set flag (repeatable).
--reset-defaults—FalseReset to new chart defaults before applying user values. Use when upgrading across chart versions with breaking changes.
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Examples​

# Enable a single module
$ ilum module enable jupyter

# Enable multiple modules
$ ilum module enable airflow superset

# Enable with additional Helm overrides
$ ilum module enable sql --set ilum-sql.replicaCount=2

# Dry-run preview
$ ilum module enable trino --dry-run

11.5 ilum module disable​

Disable one or more modules on a running Ilum release.

Synopsis​

ilum module disable MODULES... [OPTIONS]

Arguments​

ArgumentRequiredDescription
MODULESYesModules to disable (one or more).

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--set—NoneAdditional Helm --set flag (repeatable).
--reset-defaults—FalseReset to new chart defaults before applying user values. Use when upgrading across chart versions with breaking changes.
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Examples​

# Disable a module
$ ilum module disable zeppelin

# Disable multiple modules
$ ilum module disable airflow superset

# Dry-run preview
$ ilum module disable kafka --dry-run

11.6 ilum module status​

Show live module status on a running Ilum release.

Synopsis​

ilum module status [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--category-cNoneFilter by module category.
--timeout—10mHelm timeout.

Examples​

# Show all module statuses
$ ilum module status

# Filter by category
$ ilum module status --category orchestration

12. ilum config​

Manage Ilum CLI configuration.

12.1 ilum config show​

Show the current configuration (or a specific key).

Synopsis​

ilum config show [KEY]

Arguments​

ArgumentRequiredDescription
KEYNoDot-notation key to display (e.g. active_profile).

Examples​

# Show full config
$ ilum config show

# Show a specific key
$ ilum config show active_profile

12.2 ilum config set​

Set a configuration value.

Synopsis​

ilum config set KEY VALUE

Arguments​

ArgumentRequiredDescription
KEYYesDot-notation key (e.g. active_profile).
VALUEYesValue to set.

Examples​

$ ilum config set active_profile staging

12.3 ilum config path​

Print the configuration file path.

Synopsis​

ilum config path

Examples​

# Linux / macOS
$ ilum config path
/home/user/.config/ilum/config.yaml

# Windows
PS> ilum config path
C:\Users\user\AppData\Roaming\ilum\config.yaml

12.4 ilum config init​

Create a default configuration file.

Synopsis​

ilum config init [OPTIONS]

Options​

FlagShortDefaultDescription
--force-fFalseOverwrite existing config.

Examples​

# Create config if it doesn't exist
$ ilum config init

# Overwrite existing config
$ ilum config init --force

12.5 ilum config edit​

Open the configuration file in $EDITOR (falls back to vi on Linux/macOS, notepad on Windows).

Synopsis​

ilum config edit

Examples​

$ EDITOR=nano ilum config edit

12.6 ilum config use​

Switch the active profile.

Synopsis​

ilum config use PROFILE

Arguments​

ArgumentRequiredDescription
PROFILEYesProfile name to switch to.

Examples​

$ ilum config use staging
$ ilum config use production

12.7 ilum config list-profiles​

List all configured profiles.

Synopsis​

ilum config list-profiles

Examples​

$ ilum config list-profiles

12.8 ilum config validate​

Validate the configuration file for correctness.

Synopsis​

ilum config validate

Examples​

$ ilum config validate

12.9 ilum config backup​

Create a backup copy of the configuration file.

Synopsis​

ilum config backup

Examples​

$ ilum config backup

12.10 ilum config export​

Export a profile for team sharing.

Synopsis​

ilum config export PROFILE [OPTIONS]

Arguments​

ArgumentRequiredDescription
PROFILEYesProfile name to export.

Options​

FlagShortDefaultDescription
--out-o<profile>.yamlOutput file path.

Examples​

# Export to default filename
$ ilum config export production

# Export to a specific file
$ ilum config export production --out prod-profile.yaml

12.11 ilum config import​

Import a profile from a file.

Synopsis​

ilum config import FILE [OPTIONS]

Arguments​

ArgumentRequiredDescription
FILEYesPath to the profile file to import.

Options​

FlagShortDefaultDescription
--name-nfrom fileProfile name to use.

Examples​

# Import with the name from the file
$ ilum config import prod-profile.yaml

# Import with a custom name
$ ilum config import prod-profile.yaml --name production

13. ilum cluster​

Manage local Kubernetes clusters.

13.1 ilum cluster create​

Create a local Kubernetes cluster.

Synopsis​

ilum cluster create [OPTIONS]

Options​

FlagShortDefaultDescription
--provider—k3dCluster provider: minikube, k3d, kind.
--preset—devResource preset: dev, full.
--name—"" (from preset)Cluster name.

Presets Table​

PresetCPUsMemoryDefault Name
dev612gilum-dev
full818gilum

Examples​

# Create with defaults (k3d, dev preset)
$ ilum cluster create

# Create a minikube cluster with full resources
$ ilum cluster create --provider minikube --preset full

# Create with a custom name
$ ilum cluster create --name my-ilum-cluster

13.2 ilum cluster delete​

Delete a local Kubernetes cluster.

Synopsis​

ilum cluster delete NAME

Arguments​

ArgumentRequiredDescription
NAMEYesCluster name to delete.

Examples​

$ ilum cluster delete ilum-dev

13.3 ilum cluster list​

List tracked local Kubernetes clusters.

Synopsis​

ilum cluster list

Examples​

$ ilum cluster list

14. ilum preset list​

List all available deployment presets.

Synopsis​

ilum preset list

Description​

Lists all available deployment presets with their names, descriptions, and module counts. Presets are curated collections of modules designed for common deployment scenarios. The output is a Rich table with three columns: Name, Description, and Modules.

Output Columns​

ColumnDescription
NamePreset identifier used with --preset flags.
DescriptionShort summary of the preset's purpose.
ModulesNumber of modules included in the preset.

Examples​

# List all presets
$ ilum preset list

15. ilum airgap images​

List container images required by selected modules.

Synopsis​

ilum airgap images [OPTIONS]

Description​

Lists all container images required by the selected modules. Image references are extracted by running helm template against the chart and parsing the rendered manifests for container image fields. This is useful for pre-pulling images or preparing air-gapped environments.

Options​

FlagShortDefaultDescription
--preset—NoneDeployment preset to select modules from.
--module-mNoneModule to include (repeatable).
--version—"" (latest)Chart version to template.
--format—tableOutput format: table or plain.

Examples​

# List images for default modules
$ ilum airgap images

# List images for a preset
$ ilum airgap images --preset production

# List images for specific modules
$ ilum airgap images -m core -m jupyter -m mongodb

# Plain output for scripting
$ ilum airgap images --preset tiny --format plain

# List images for a specific chart version
$ ilum airgap images --version 6.7.0

16. ilum airgap export​

Export images and chart into a portable air-gapped bundle.

Synopsis​

ilum airgap export OUTPUT_DIR [OPTIONS]

Description​

Exports the Helm chart and all required container images into a portable bundle directory. The bundle includes a manifest.json file describing the contents, chart version, and image list. This bundle can be transferred to an air-gapped environment and imported with ilum airgap import.

Arguments​

ArgumentRequiredDescription
OUTPUT_DIRYesDirectory to write the bundle to. Created if it does not exist.

Options​

FlagShortDefaultDescription
--preset—NoneDeployment preset to select modules from.
--module-mNoneModule to include (repeatable).
--version—"" (latest)Chart version to export.

Examples​

# Export default modules
$ ilum airgap export ./bundle

# Export a specific preset
$ ilum airgap export ./bundle --preset analyst

# Export specific modules and version
$ ilum airgap export ./bundle -m core -m jupyter --version 6.7.0

17. ilum airgap import​

Import an air-gapped bundle into a private container registry.

Synopsis​

ilum airgap import BUNDLE_DIR --registry URL

Description​

Imports a previously exported air-gapped bundle into a private container registry. Reads the manifest.json from the bundle directory, loads the container images, re-tags them for the target registry, and pushes them. The Helm chart is also made available for installation from the bundle.

Arguments​

ArgumentRequiredDescription
BUNDLE_DIRYesPath to the bundle directory created by ilum airgap export.

Options​

FlagShortDefaultDescription
--registry—requiredTarget container registry URL (e.g. registry.internal:5000).

Examples​

# Import bundle into a private registry
$ ilum airgap import ./bundle --registry registry.internal:5000

# Import from an absolute path
$ ilum airgap import /mnt/usb/ilum-bundle --registry harbor.corp.local/ilum

18. ilum history​

View the operation audit log.

Synopsis​

ilum history [OPTIONS]

Options​

FlagShortDefaultDescription
--last-n20Number of recent operations to show.
--operation—NoneFilter by operation type (install, upgrade, enable, disable, uninstall).
--release-rfrom profileFilter by Helm release name.

Examples​

# Show recent operations
$ ilum history

# Show last 5 operations
$ ilum history --last 5

# Filter by operation type
$ ilum history --operation upgrade

# JSON output for CI/CD
$ ilum history --last 10 --output json

19. ilum deps​

Manage CLI dependencies (helm, kubectl, docker, k3d, etc.).

ilum deps install​

Install missing CLI dependencies.

Synopsis​

ilum deps install [TOOL...] [OPTIONS]

Arguments​

ArgumentRequiredDescription
TOOLNoOne or more tool names to install. If omitted, installs all core tools (helm, kubectl, docker) plus the selected provider.

Options​

FlagDefaultDescription
--providerk3dCluster provider to install: k3d, minikube, kind.
--dry-runFalsePreview what would be installed without executing.

Examples​

# Install all missing core tools + default provider (k3d)
$ ilum deps install

# Install only specific tools
$ ilum deps install helm kubectl

# Install with a different provider
$ ilum deps install --provider kind

# Preview without executing
$ ilum deps install --dry-run

ilum deps list​

List CLI dependencies and their status.

Synopsis​

ilum deps list

Examples​

$ ilum deps list

19b. ilum access​

Manage access to the Ilum UI via port-forward, NodePort, or ingress.

ilum access open​

Open the Ilum UI in a browser.

Synopsis​

ilum access open [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--access-afrom profileAccess method: nodeport, port-forward, or ingress.
--port-p9777Local port to forward to (port-forward mode).
--address—127.0.0.1Local address to bind to (port-forward mode).
--no-browser—FalseDon't open a browser automatically.

Examples​

# Open UI with default access method (from profile)
$ ilum access open

# Open via port-forward on a custom port
$ ilum access open --access port-forward --port 8080

# Open via NodePort without launching browser
$ ilum access open --access nodeport --no-browser

# Open via ingress
$ ilum access open --access ingress

ilum access ingress enable​

Enable ingress for the Ilum UI via Helm upgrade.

Synopsis​

ilum access ingress enable --host HOSTNAME [OPTIONS]

Options​

FlagShortDefaultDescription
--host—requiredIngress hostname.
--tls—FalseEnable TLS.
--tls-secret—""TLS secret name.
--class—""Ingress class name.
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--set—NoneAdditional Helm --set flag (repeatable).
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Examples​

# Enable ingress with a hostname
$ ilum access ingress enable --host ilum.example.com

# Enable ingress with TLS
$ ilum access ingress enable --host ilum.example.com --tls

# Enable with a specific ingress class
$ ilum access ingress enable --host ilum.example.com --class nginx

ilum access ingress disable​

Disable ingress for the Ilum UI.

Synopsis​

ilum access ingress disable [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--set—NoneAdditional Helm --set flag (repeatable).
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Examples​

# Disable ingress
$ ilum access ingress disable --yes

ilum access ingress show​

Show the current ingress configuration.

Synopsis​

ilum access ingress show [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.

Examples​

# Show ingress config
$ ilum access ingress show

# JSON output
$ ilum access ingress show --output json

19c. ilum auth​

Manage authentication and OAuth configuration.

ilum auth setup​

Interactive authentication setup wizard. Guides you through selecting an auth mode (internal Hydra, external OAuth2, or disable), choosing a provider, and collecting required parameters.

Synopsis​

ilum auth setup [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--set—NoneAdditional Helm --set flag (repeatable).
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Examples​

# Launch the interactive auth wizard
$ ilum auth setup

# Dry-run preview of auth changes
$ ilum auth setup --dry-run

ilum auth enable​

Enable authentication with a specific provider non-interactively.

Synopsis​

ilum auth enable PROVIDER [OPTIONS]

Arguments​

ArgumentRequiredDescription
PROVIDERYesProvider name (e.g. google, hydra, oidc, okta, gitlab, keycloak, cognito, azure).

Options​

FlagShortDefaultDescription
--client-id—NoneOAuth2 Client ID.
--client-secret—NoneOAuth2 Client Secret.
--domain—NoneDomain (Hydra UI domain or Okta domain).
--protocol—NoneProtocol — Hydra: http or https.
--url—NoneProvider URL (GitLab, Keycloak).
--realm—NoneKeycloak realm name.
--region—NoneAWS region (Cognito).
--user-pool-id—NoneCognito User Pool ID.
--tenant-id—NoneAzure AD Tenant ID.
--issuer-uri—NoneOIDC Issuer URI.
--scope—NoneOAuth2 scopes.
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--set—NoneAdditional Helm --set flag (repeatable).
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Examples​

# Enable Hydra (internal) auth
$ ilum auth enable hydra --domain ilum.example.com --yes

# Enable Google OAuth2
$ ilum auth enable google --client-id MY_ID --client-secret MY_SECRET --yes

# Enable a generic OIDC provider
$ ilum auth enable oidc --issuer-uri https://auth.example.com --client-id MY_ID --client-secret MY_SECRET

ilum auth disable​

Disable OAuth and revert to internal authentication.

Synopsis​

ilum auth disable [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.
--set—NoneAdditional Helm --set flag (repeatable).
--yes-yFalseSkip confirmation prompt.
--dry-run—FalsePreview without executing.
--timeout—10mHelm timeout.

Examples​

# Disable OAuth
$ ilum auth disable --yes

ilum auth status​

Show the current authentication configuration from live Helm values.

Synopsis​

ilum auth status [OPTIONS]

Options​

FlagShortDefaultDescription
--release-rfrom profileHelm release name.
--namespace-nfrom profileKubernetes namespace.
--context—from profileKubernetes context.

Examples​

# Show auth status
$ ilum auth status

# JSON output
$ ilum auth status --output json

ilum auth list​

List all available authentication providers.

Synopsis​

ilum auth list

Examples​

$ ilum auth list

20. Prerequisites​

The CLI requires the following tools to be installed on your system. These are checked during the preflight step of ilum init, ilum quickstart, and before operations like ilum install and ilum upgrade.

Required Tools​

ToolMinimum VersionPurpose
helm>= 3.12Deploys and manages the Ilum Helm chart
kubectl>= 1.28Communicates with the Kubernetes cluster
docker>= 24.0Container runtime for local clusters and image operations

Cluster Providers (optional)​

One of these is required only if creating a local cluster via ilum cluster create:

ProviderDescription
k3dLightweight k3s clusters in Docker containers (default provider)
minikubeFull Kubernetes in a VM or container
kindKubernetes-in-Docker for testing

Automatic Installation​

When running in an interactive terminal (TTY connected to stdin), the CLI offers to install missing or outdated tools automatically. This applies to:

  • ilum init (wizard preflight step)
  • ilum quickstart (preflight step)
  • ilum cluster create (cluster provider check)
  • Any command that calls ensure_tool() internally

The install methods are platform-specific:

PlatformMethodExample
LinuxOfficial install scripts or direct binary downloadscurl -fsSL https://get.docker.com | sh
macOSHomebrewbrew install helm
Windowswingetwinget install --id Helm.Helm

After installation, the CLI re-checks the tool version. If the check fails, it displays the tool's manual install URL.

Non-Interactive Behavior​

In non-interactive environments (CI/CD, scripts, piped output, --yes mode without TTY), the CLI does not offer auto-installation. Instead, it raises a PrerequisiteError (error code ILUM-001) with a manual install link:

Error: kubectl is required but not available [ILUM-001]
Suggestion: Install manually: https://kubernetes.io/docs/tasks/tools/

For CI/CD pipelines, install all required tools before invoking the CLI. See the guide's CI/CD section for an example GitHub Actions workflow.

Supported Tools and Install URLs​

ToolManual Install URL
helmhttps://helm.sh/docs/intro/install/
kubectlhttps://kubernetes.io/docs/tasks/tools/
dockerhttps://docs.docker.com/get-docker/
minikubehttps://minikube.sigs.k8s.io/docs/start/
k3dhttps://k3d.io/
kindhttps://kind.sigs.k8s.io/docs/user/quick-start/#installation

Docker Post-Install (Linux)​

On Linux, after installing Docker the CLI automatically:

  1. Adds the current user to the docker group (requires sudo)
  2. Starts the Docker daemon via systemctl
  3. Warns that a logout/login (or newgrp docker) may be required for group permissions

If passwordless sudo is not available, the CLI prints the manual commands instead.


21. Error Codes​

Structured error codes for programmatic error handling (see also Prerequisites for ILUM-001 and ILUM-002):

CodeCategoryTitle
ILUM-001prerequisiteTool not found
ILUM-002prerequisiteTool version too old
ILUM-010clusterCluster unreachable
ILUM-011clusterNamespace not found
ILUM-020helmHelm command failed
ILUM-021helmHelm timeout
ILUM-022helmRelease stuck
ILUM-023helmRelease not found
ILUM-024helmRelease already exists
ILUM-030configConfig file invalid
ILUM-031configConfig key not found
ILUM-040moduleUnknown module
ILUM-041moduleModule conflict
ILUM-050valuesValues parse error
ILUM-051valuesValues drift detected
ILUM-070execExec failed / No pods found
ILUM-071eventsEvents query failed
ILUM-072metricsMetrics unavailable
ILUM-073helmRollback failed

Error codes appear in both human-readable output and structured JSON/YAML output, enabling CI/CD pipelines to handle specific error conditions programmatically.


22. Module Registry​

All 32 modules registered in MODULE_REGISTRY, grouped by category.

Core​

NameDescriptionDefaultDependenciesConflicts
coreIlum backend API (Spring Boot on Spark)Yes——
uiIlum web frontend (React + Nginx reverse proxy)Yescore—
livy-proxyLivy-compatible Spark session proxyNocore—
apiIlum REST API for module managementYescore—

Infrastructure​

NameDescriptionDefaultDependenciesConflicts
mongodbMongoDB document store for metadataYes——
kafkaApache Kafka event busNocore—
postgresqlPostgreSQL relational databaseYes——
clickhouseClickHouse columnar analytics databaseNo——
giteaGitea self-hosted Git serviceYespostgresql—

Storage​

NameDescriptionDefaultDependenciesConflicts
rustfsRustFS S3-compatible object storage (bundled, opt-in; planned default in 6.8.0)No—minio (when both flagged as the active provider)
minioMinIO S3-compatible object storage (bundled default in 6.7.x)Yes—rustfs (when both flagged as the active provider)

Notebook​

NameDescriptionDefaultDependenciesConflicts
jupyterJupyter notebook server with SparkmagicYescore—
jupyterhubMulti-user JupyterHub (Kubernetes >= 1.28)Nocore—
zeppelinApache Zeppelin notebook serverNocore—

SQL​

NameDescriptionDefaultDependenciesConflicts
sqlIlum SQL engine (Kyuubi)Yespostgresql, core—
trinoTrino distributed SQL query engineNohive-metastore, sql—
hive-metastoreHive Metastore serviceYespostgresql, corenessie, unity-catalog
nessieNessie versioned data catalogNopostgresqlhive-metastore, unity-catalog
unity-catalogUnity Catalog for data governanceNopostgresqlhive-metastore, nessie

Orchestration​

NameDescriptionDefaultDependenciesConflicts
airflowApache Airflow workflow orchestrationNopostgresql—
kestraKestra declarative orchestration engineNopostgresql—
n8nn8n workflow automation platformNopostgresql—
nifiApache NiFi data integrationNocore—
mageaiMage.ai data pipeline toolNopostgresql—

Analytics​

NameDescriptionDefaultDependenciesConflicts
supersetApache Superset BI dashboardsNopostgresql—
streamlitStreamlit interactive data applicationsNocore—
marquezMarquez data lineage trackingYespostgresql—

AI​

NameDescriptionDefaultDependenciesConflicts
mlflowMLflow experiment tracking and model registryNopostgresql—
langfuseLangfuse LLM observability platformNopostgresql, clickhouse—

Monitoring​

NameDescriptionDefaultDependenciesConflicts
monitoringPrometheus + Grafana monitoring stackNo——
lokiGrafana Loki log aggregationNo——
graphiteGraphite metrics exporterNo——

Security​

NameDescriptionDefaultDependenciesConflicts
openldapOpenLDAP directory serviceNo——

Enable/Disable Flags Reference​

ModuleEnable FlagsDisable Flags
coreilum-core.enabled=trueilum-core.enabled=false
uiilum-ui.enabled=trueilum-ui.enabled=false
livy-proxyilum-livy-proxy.legacy.enabled=trueilum-livy-proxy.legacy.enabled=false
mongodbmongodb.enabled=truemongodb.enabled=false
kafkakafka.enabled=true, ilum-core.communication.type=kafkakafka.enabled=false, ilum-core.communication.type=grpc
postgresqlpostgresql.enabled=truepostgresql.enabled=false
clickhouseclickhouse.enabled=trueclickhouse.enabled=false
giteagitea.enabled=truegitea.enabled=false
rustfsrustfs.enabled=truerustfs.enabled=false
miniominio.enabled=trueminio.enabled=false
jupyterilum-jupyter.enabled=trueilum-jupyter.enabled=false
jupyterhubilum-jupyterhub.enabled=trueilum-jupyterhub.enabled=false
zeppelinilum-zeppelin.enabled=trueilum-zeppelin.enabled=false
sqlilum-sql.enabled=true, ilum-core.sql.enabled=trueilum-sql.enabled=false, ilum-core.sql.enabled=false
trinotrino.enabled=true, ilum-sql.config.trino.enabled=truetrino.enabled=false, ilum-sql.config.trino.enabled=false
hive-metastoreilum-hive-metastore.enabled=true, ilum-core.metastore.enabled=true, ilum-core.metastore.type=hiveilum-hive-metastore.enabled=false, ilum-core.metastore.enabled=false, ilum-core.metastore.type=hive
nessienessie.enabled=true, ilum-core.metastore.enabled=true, ilum-core.metastore.type=nessienessie.enabled=false, ilum-core.metastore.enabled=false, ilum-core.metastore.type=hive
unity-catalogilum-unity-catalog.enabled=true, ilum-core.metastore.enabled=true, ilum-core.metastore.type=unityilum-unity-catalog.enabled=false, ilum-core.metastore.enabled=false, ilum-core.metastore.type=hive
airflowairflow.enabled=trueairflow.enabled=false
kestrakestra.enabled=truekestra.enabled=false
n8nilum-n8n.enabled=trueilum-n8n.enabled=false
nifinifi.enabled=truenifi.enabled=false
mageaimageai.enabled=truemageai.enabled=false
supersetsuperset.enabled=truesuperset.enabled=false
streamlitstreamlit.enabled=truestreamlit.enabled=false
marquezglobal.lineage.enabled=trueglobal.lineage.enabled=false
mlflowmlflow.enabled=truemlflow.enabled=false
langfuselangfuse.enabled=truelangfuse.enabled=false
monitoringkube-prometheus-stack.enabled=truekube-prometheus-stack.enabled=false
lokiglobal.logAggregation.enabled=true, global.logAggregation.loki.enabled=true, global.logAggregation.promtail.enabled=trueglobal.logAggregation.enabled=false, global.logAggregation.loki.enabled=false, global.logAggregation.promtail.enabled=false
graphitegraphite-exporter.graphite.enabled=true, ilum-core.job.graphite.enabled=truegraphite-exporter.graphite.enabled=false, ilum-core.job.graphite.enabled=false
apiilum-api.enabled=trueilum-api.enabled=false
openldapopenldap.enabled=trueopenldap.enabled=false

23. Doctor Checks​

Check NamePhaseWhat it verifies
helm1 - BinariesHelm is on PATH and version >= 3.12
kubectl1 - Binarieskubectl is on PATH and version >= 1.28
docker1 - BinariesDocker is on PATH and version >= 24.0
helm-repo2 - Helm repoThe ilum chart repository (charts.ilum.cloud) is configured
cluster3 - ConnectivityKubernetes cluster is reachable via current kubeconfig
namespace4 - Cluster-dependentThe target namespace exists on the cluster
pods4 - Cluster-dependentAll pods in the namespace are healthy; detects CrashLoopBackOff (>5 restarts)
pvcs4 - Cluster-dependentAll PersistentVolumeClaims are Bound; detects Pending PVCs
rbac4 - Cluster-dependentRequired RBAC permissions are granted to the current user
release4 - Cluster-dependentHelm release exists and is not in stuck (pending-*) or failed state
compatibility4 - Cluster-dependentKubernetes server version >= 1.28
service-endpoints4 - Cluster-dependentService endpoints have ready addresses
health-endpoints4 - Cluster-dependentHealth check endpoints respond for core, airflow, superset, minio

24. Error Reference​

ClassParentWhen RaisedTypical Suggestion
IlumErrorExceptionBase exception for all Ilum CLI errors.—
PrerequisiteErrorIlumErrorA required tool or resource (helm, kubectl, docker) is missing.Install the missing tool.
ClusterConnectionErrorIlumErrorCannot connect to the Kubernetes cluster.Check kubeconfig: kubectl cluster-info.
HelmErrorIlumErrorA Helm operation failed.Check helm output for details.
HelmTimeoutErrorHelmErrorA Helm operation timed out.Increase --timeout or check cluster resources.
HelmReleaseErrorHelmErrorA Helm release is in a bad state (e.g. pending-install, pending-upgrade).Use ilum upgrade --force-rollback to recover.
ConfigErrorIlumErrorConfiguration is missing or invalid.Run ilum config init or ilum init.
ValuesErrorIlumErrorProblem with Helm values files.Validate your values YAML syntax.
ModuleErrorIlumErrorModule dependency or conflict error.Check ilum module show <name> for dependencies.
ReleaseExistsErrorIlumErrorA Helm release already exists when a fresh install was requested.Use ilum upgrade instead, or ilum uninstall first.
ReleaseNotFoundErrorIlumErrorA Helm release was expected but does not exist.Use ilum install to create the release, or ilum connect to attach to an existing one.

25. Exit Codes​

CodeMeaning
0Success.
1Error (any IlumError, invalid input, failed check, or failed Helm operation).
130Interrupted by user (Ctrl+C during ilum init).

ilum uninstall exits with code 0 even when the release does not exist (idempotent behavior).