# Experimental Features

Atmos introduces new capabilities as experimental features before stabilizing them. The `settings.experimental` configuration controls how these experimental features behave, letting you choose between silent operation, warnings, disabled access, or strict error handling.

> **Key points**
>
> - Control experimental feature visibility and behavior
> - Choose from four modes: silence, disable, warn, error
> - Commands self-register as experimental
> - Automatic notifications without manual configuration

## Configuration

**File:** `atmos.yaml`

```yaml
settings:
  # Control experimental feature handling
  # Values: "silence", "disable", "warn" (default), "error"
  experimental: warn
```

## Behavior Modes

The `settings.experimental` setting accepts four values that control how Atmos handles experimental commands:

- **`silence`**

  Run experimental commands without any output or notification. Use this when you've already acknowledged the experimental status and want clean output.
  ```yaml
  settings:
    experimental: silence
  ```
- **`disable`**

  Completely disable experimental commands. When a user attempts to run an experimental command, Atmos will display an error and exit. Use this in production environments where experimental features should not be accessible.
  ```yaml
  settings:
    experimental: disable
  ```
  **Example output:**
  ```
  # Error

  **Error:** experimental command is disabled

  ## Hints

  💡 Enable with settings.experimental: warn
  ```
- **`warn` (default)**

  Show a warning notification when running experimental commands, then continue execution. This is the recommended setting for most users - you'll be informed about experimental features while still being able to use them.
  ```yaml
  settings:
    experimental: warn
  ```
  **Example output:**
  ```
  🧪 `devcontainer` is an experimental feature. Learn more https://atmos.tools/experimental
  ```
- **`error`**

  Show a warning notification and exit with an error code. Use this when you want to be notified about experimental features but prefer explicit opt-in before using them.
  ```yaml
  settings:
    experimental: error
  ```
  **Example output:**
  ```
  🧪 `devcontainer` is an experimental feature. Learn more https://atmos.tools/experimental

  # Error

  **Error:** experimental command requires explicit opt-in

  ## Hints

  💡 Enable with settings.experimental: warn
  ```

## Environment Variable

You can also control experimental feature handling via environment variable:

```bash
# Silence all experimental warnings
export ATMOS_EXPERIMENTAL=silence

# Disable experimental features
export ATMOS_EXPERIMENTAL=disable

# Enable with warnings (default)
export ATMOS_EXPERIMENTAL=warn

# Require explicit opt-in
export ATMOS_EXPERIMENTAL=error
```

The environment variable takes precedence over the configuration file setting.

## Current Experimental Features

The following features are currently marked as experimental:

| Feature | Command | Description |
|---------|---------|-------------|
| AI Assistant | `atmos ai` | AI-powered assistance for infrastructure management |
| IDE Integration | `atmos lsp` | Language Server Protocol for IDE integration |
| Devcontainers | `atmos devcontainer` | Development container lifecycle management |
| Toolchain | `atmos toolchain` | Tool version management and installation |
| Backend Provisioning | `atmos terraform backend` | Terraform state backend management |
| Workdir Management | `atmos terraform workdir` | Component working directory management |
| Affected Components | `atmos list affected` | Identify changes for targeted CI/CD |

> **Note**
>
> Experimental features may change significantly or be removed in future releases. We encourage you to try them and provide feedback, but avoid relying on them in production workflows until they are stabilized.

## Use Cases

### Development Environment

For local development where you want to experiment with new features:

```yaml
settings:
  experimental: warn  # See warnings but continue working
```

### CI/CD Pipeline

For continuous integration where you want stability:

```yaml
settings:
  experimental: disable  # Block experimental commands in CI
```

Or use environment-specific configuration:

```bash
# In your CI environment
export ATMOS_EXPERIMENTAL=disable
```

### Production Environment

For production where experimental features must be explicitly enabled:

```yaml
settings:
  experimental: error  # Require explicit opt-in
```

## See Also

- [Experimental Features](/experimental) - What "experimental" means and how to provide feedback
- [Settings](/cli/configuration/settings) - Overview of all settings
- [Devcontainers](/cli/commands/devcontainer) - Experimental devcontainer support
