# Deprecations

## Deprecations

This document collects the features that have been deprecated in Garden 0.14.

## Old configuration syntax

### `hotReload` configuration field in modules <a href="#hotreload" id="hotreload"></a>

The module-level `hotReload` configuration field was removed in Garden 0.13 and has no effect. Please use actions with the `sync` mode instead.

See the [Code Synchronization Guide](/features/code-synchronization.md) for details.

### `serviceResource.hotReloadArgs` configuration field in `kubernetes` modules <a href="#hotreloadargs" id="hotreloadargs"></a>

The `serviceResource.hotReload` configuration field in `kubernetes` modules was removed in Garden 0.13 and has no effect. Please use actions with the `sync` mode instead.

See the [Code Synchronization Guide](/features/code-synchronization.md) for details.

### `spec.devMode` configuration field in actions <a href="#devmode" id="devmode"></a>

The `spec.devMode` configuration field in actions is deprecated in Garden 0.14. Please use `spec.sync` configuration field instead.

The old fields `spec.devMode` are automatically converted to `spec.sync` in Garden 0.14 when using `apiVersion: garden.io/v2` in the project-level configuration.

### `spec.localMode` configuration field in `helm`, `kubernetes` and `container` Deploy actions <a href="#localmode" id="localmode"></a>

The local-mode feature was completely removed in 0.14, and the `spec.localMode` configuration syntax has no effect. Please remove all `spec.localMode` entries from your configuration files.

### `resources.sync` config field in the `kubernetes` provider <a href="#kubernetesprovidersyncresourcelimit" id="kubernetesprovidersyncresourcelimit"></a>

The `resources.sync` config field in the `kubernetes` provider has no effect in Garden 0.13 and 0.14., Please remove it from your `kubernetes` provider configuration.

The `resources.sync` config field in the `kubernetes` provider was only used for the `cluster-docker` build mode, which was removed in Garden 0.13.",

### `spec.files` configuration field in `kubernetes-pod` action type <a href="#kubernetespodspecfiles" id="kubernetespodspecfiles"></a>

The `spec.files` configuration field in `kubernetes-pod` action type has no effect. Please remove it and use `spec.manifestFiles` or `spec.manifestTemplates` instead.

See the reference documentation for details.

For the `Run` action kind see [`spec.manifestFiles`](https://docs.garden.io/misc/pages/sKkj9JWVt2riJKoCbe63#spec.manifestfiles) and [`spec.manifestTemplates`](https://docs.garden.io/misc/pages/sKkj9JWVt2riJKoCbe63#spec.manifesttemplates). For the `Test` action kind see [`spec.manifestFiles`](https://docs.garden.io/misc/pages/BVS6aNzV7ukZRo1oOLud#spec.manifestfiles) and [`spec.manifestTemplates`](https://docs.garden.io/misc/pages/BVS6aNzV7ukZRo1oOLud#spec.manifesttemplates).

### `spec.limits` configuration field in `container` Deploy action <a href="#containerdeployactionlimits" id="containerdeployactionlimits"></a>

Please use the `cpu` and `memory` configuration fields instead.

Note! If the deprecated field [`spec.limits`](https://docs.garden.io/misc/pages/UGLh94RvdOJn8iqOws9Q#spec.limits) is defined in the `container` Deploy action config, Garden 0.14 automatically copies the field's contents to the `spec.cpu` and `spec.memory`, even if the latter are defined explicitly.

Please do not use both `spec.limits` and `spec.cpu` and/or `spec.memory` simultaneously, and use only the latter pair of fields. Otherwise, the values from the old field `spec.limits` will be used.

See [`spec.cpu`](https://docs.garden.io/misc/pages/UGLh94RvdOJn8iqOws9Q#spec.cpu) and [`spec.memory`](https://docs.garden.io/misc/pages/UGLh94RvdOJn8iqOws9Q#spec.memory) for the new syntax details.

## Unsupported commands

### `cleanup-cluster-registry` <a href="#kubernetesplugincleanupclusterregistrycommand" id="kubernetesplugincleanupclusterregistrycommand"></a>

The `cleanup-cluster-registry` command in the `kubernetes` and `local-kubernetes` plugins is not supported in Garden 0.14. This command no longer has any effect as of version 0.13! Please remove this from any pipelines running it.

## Deprecated configuration

### `podSelector` configuration field in sync mode <a href="#podselectorinsyncmode" id="podselectorinsyncmode"></a>

The `podSelector` configuration field is deprecated and has no effect in `spec.sync.overrides[].target` and `spec.sync.paths[].target` configurations of `kubernetes` and `helm` Deploy actions. Please, use the combination of `kind` and `name` configuration fields instead.

Usage of the `podSelector` as a target sync resource can cause unpredicted behaviour, because such selector picks up the first matching Pod in the cluster. Instead, a pair of `kind` and `name` should be used with one of the following kinds: `Deployment`, `DaemonSet` or `StatefulSet`. Garden ensures that each kind of these resources has exactly 1 Pod when running in sync mode.

For `kubernetes` Deploy actions see [`spec.sync.overrides[].target`](/reference/action-types/deploy/kubernetes.md#specsyncoverridestarget) and [`spec.sync.paths[].target`](/reference/action-types/deploy/kubernetes.md#specsyncpathstarget). For `helm` Deploy actions see [`spec.sync.overrides[].target`](/reference/action-types/deploy/helm.md#specsyncoverridestarget) and [`spec.sync.paths[].target`](/reference/action-types/deploy/helm.md#specsyncpathstarget).

### `spec.ports[].hostPort` configuration field in `container` Deploy action <a href="#containerdeployactionhostport" id="containerdeployactionhostport"></a>

It's generally not recommended to use the `hostPort` field of the `V1ContainerPort` spec. You can learn more about Kubernetes best practices at: <https://kubernetes.io/docs/concepts/configuration/overview/>

### Remote workflow configuration fields in Workflow configs <a href="#remoteworkflows" id="remoteworkflows"></a>

The remote workflows feature is deprecated and will be removed in a future release.

### `setupIngressController: nginx` in the `kubernetes` and `local-kubernetes` providers <a href="#nginxingresscontroller" id="nginxingresscontroller"></a>

The bundled nginx ingress controller is deprecated and will be removed in a future release. Garden now ships a Traefik ingress controller as a replacement. To migrate, run `garden plugins kubernetes migrate-ingress-controller` and set `setupIngressController: traefik` in your provider configuration.

The bundled nginx ingress controller is deprecated. Garden now ships Traefik as a replacement. To migrate:

1. Run `garden plugins kubernetes migrate-ingress-controller` to uninstall nginx and install Traefik.
2. Update your provider configuration to set `setupIngressController: traefik`.
3. Update `ingressClass` from `nginx` to `traefik` if explicitly set.
4. If you use any nginx-specific ingress annotations, you will need to migrate those manually.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.garden.io/misc/deprecations.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
