diff --git a/docs/specs/devcontainer-features.md b/docs/specs/devcontainer-features.md
index 844575a..7b1c410 100644
--- a/docs/specs/devcontainer-features.md
+++ b/docs/specs/devcontainer-features.md
@@ -29,13 +29,13 @@ All properties are optional **except for `id`, `version`, and `name`**.
| Property | Type | Description |
| :--- | :--- | :--- |
-| `id` | string | **Required**: Identifier of the Feature. Must be unique in the context of the repository where the Feature exists and must match the name of the directory where the `devcontainer-feature.json` resides. ID should be provided lowercase. |
+| `id` | string | **Required**: The identifier of the Feature. Must be unique in the context of the repository where the Feature exists and must match the name of the directory where the `devcontainer-feature.json` resides. ID should be provided lowercase. |
| `version` | string | **Required**: The semantic version of the Feature (e.g: `1.0.0`). |
| `name` | string | **Required**: A "human-friendly" display name for the Feature. |
-| `description` | string | Description of the Feature. |
-| `documentationURL` | string | Url that points to the documentation of the Feature. |
-| `licenseURL` | string | Url that points to the license of the Feature. |
-| `keywords` | array | List of strings relevant to a user that would search for this Feature. |
+| `description` | string | The description of the Feature. |
+| `documentationURL` | string | A URL that points to the documentation of the Feature. |
+| `licenseURL` | string | A URL that points to the license of the Feature. |
+| `keywords` | array | A list of strings relevant to a user that would search for this Feature. |
| `options` | object | A map of options that will be passed as environment variables to the execution of the script. |
| `containerEnv` | object | A set of name value pairs that sets or overrides environment variables. |
| `privileged` | boolean | Sets [privileged mode](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) for the container (required by things like docker-in-docker) when the Feature is used. |
@@ -45,8 +45,8 @@ All properties are optional **except for `id`, `version`, and `name`**.
| `entrypoint` | string | Set if the Feature requires an "entrypoint" script that should fire at container start up. |
| `customizations` | object | Product specific properties, each namespace under `customizations` is treated as a separate set of properties. For each of this sets the object is parsed, values are replaced while arrays are set as a union. |
| `dependsOn` | `object` | An object (\**) of Feature dependencies that **must** be satisified before this Feature is installed. Elements follow the same semantics of the `features` object in `devcontainer.json`. [See *Installation Order* for further information](#installation-order). |
-| `installsAfter` | array | Array of ID's of Features (omitting a version tag) that should execute before this one. Allows control for Feature authors on soft dependencies between different Features. [See *Installation Order* for further information](#installation-order). |
-| `legacyIds` | array | Array of old IDs used to publish this Feature. The property is useful for renaming a currently published Feature within a single namespace. |
+| `installsAfter` | array | An array of IDs of Features (omitting a version tag) that should execute before this one. Allows control for Feature authors on soft dependencies between different Features. [See *Installation Order* for further information](#installation-order). |
+| `legacyIds` | array | An array of old IDs used to publish this Feature. The property is useful for renaming a currently published Feature within a single namespace. |
| `deprecated` | boolean | Indicates that the Feature is deprecated, and will not receive any further updates/support. This property is intended to be used by the supporting tools for highlighting Feature deprecation. |
| `mounts` | object | Defaults to unset. Cross-orchestrator way to add additional mounts to a container. Each value is an object that accepts the same values as the [Docker CLI `--mount` flag](https://docs.docker.com/engine/reference/commandline/run/#mount). The Pre-defined [devcontainerId](./devcontainerjson-reference.md/#variables-in-devcontainerjson) variable may be referenced in the value. For example:
`"mounts": [{ "source": "dind-var-lib-docker", "target": "/var/lib/docker", "type": "volume" }]` |
@@ -93,12 +93,12 @@ The options property is contains a map of option IDs and their related configura
| Property | Type | Description |
| :--- | :--- | :--- |
-| `optionId` | string | ID of the option that is converted into an all-caps environment variable with the selected value in it. |
-| `optionId.type` | string | Type of the option. Valid types are currently: `boolean`, `string` |
+| `optionId` | string | The ID of the option that is converted into an all-caps environment variable with the selected value in it. |
+| `optionId.type` | string | The type of the option. Valid types are currently: `boolean`, `string` |
| `optionId.proposals` | array | A list of suggested string values. Free-form values **are** allowed. Omit when using `optionId.enum`. |
| `optionId.enum` | array | A strict list of allowed string values. Free-form values are **not** allowed. Omit when using `optionId.proposals`. |
| `optionId.default` | string or boolean | Default value for the option. |
-| `optionId.description` | string | Description for the option. |
+| `optionId.description` | string | A description for the option. |
### User environment variables
diff --git a/docs/specs/devcontainer-templates.md b/docs/specs/devcontainer-templates.md
index 7e53f6e..f748a67 100644
--- a/docs/specs/devcontainer-templates.md
+++ b/docs/specs/devcontainer-templates.md
@@ -27,16 +27,16 @@ The properties of the file are as follows:
| Property | Type | Description |
| :--- | :--- | :--- |
-| `id` | string | ID of the Template. The `id` should be unique in the context of the repository/published package where the Template exists and must match the name of the directory where the `devcontainer-template.json` resides. |
+| `id` | string | The ID of the Template. The `id` should be unique in the context of the repository/published package where the Template exists and must match the name of the directory where the `devcontainer-template.json` resides. |
| `version` | string | The semantic version of the Template. |
-| `name` | string | Name of the Template. |
-| `description` | string | Description of the Template. |
-| `documentationURL` | string | Url that points to the documentation of the Template. |
-| `licenseURL` | string | Url that points to the license of the Template. |
+| `name` | string | The name of the Template. |
+| `description` | string | The description of the Template. |
+| `documentationURL` | string | A URL that points to the documentation of the Template. |
+| `licenseURL` | string | A URL that points to the license of the Template. |
| [`options`](#the-options-property) | object | A map of options that the supporting tools should use to populate different configuration options for the Template. |
| `platforms` | array | Languages and platforms supported by the Template. |
-| `publisher` | string | Name of the publisher/maintainer of the Template. |
-| `keywords` | array | List of strings relevant to a user that would search for this Template. |
+| `publisher` | string | The name of the publisher/maintainer of the Template. |
+| `keywords` | array | A list of strings relevant to a user that would search for this Template. |
| [`optionalPaths`](#the-optionalpaths-property) | array | An array of files or directories that tooling may consider "optional" when applying a Template. Directories are indicated with a trailing `/*`, (eg: `.github/*`).
### The `options` property
@@ -58,9 +58,9 @@ The `options` property contains a map of option IDs and their related configurat
| Property | Type | Description |
| :--- | :--- | :--- |
-| `optionId` | string | ID of the option used by the supporting tools to replace the selected value in the files within the sub-directory of the Template. |
-| `optionId.type` | string | Type of the option. Valid types are currently: `boolean`, `string` |
-| `optionId.description` | string | Description for the option. |
+| `optionId` | string | The ID of the option used by the supporting tools to replace the selected value in the files within the sub-directory of the Template. |
+| `optionId.type` | string | The type of the option. Valid types are currently: `boolean`, `string` |
+| `optionId.description` | string | A description for the option. |
| `optionId.proposals` | array | A list of suggested string values. Free-form values **are** allowed. Omit when using `optionId.enum`. |
| `optionId.enum` | array | A strict list of allowed string values. Free-form values are **not** allowed. Omit when using `optionId.proposals`. |
| `optionId.default` | string | Default value for the option. |
diff --git a/docs/specs/devcontainerjson-reference.md b/docs/specs/devcontainerjson-reference.md
index a479b5e..f3c2301 100644
--- a/docs/specs/devcontainerjson-reference.md
+++ b/docs/specs/devcontainerjson-reference.md
@@ -10,7 +10,7 @@ Metadata properties marked with a 🏷️ can be stored in the `devcontainer.met
|----------|------|-------------|
| `name` | string | A name for the dev container displayed in the UI |
| `forwardPorts` 🏷️ | array | An array of port numbers or `"host:port"` values (e.g. `[3000, "db:5432"]`) that should always be forwarded from inside the primary container to the local machine (including on the web). The property is most useful for forwarding ports that cannot be auto-forwarded because the related process that starts before the `devcontainer.json` supporting service / tool connects or for forwarding a service not in the primary container in Docker Compose scenarios (e.g. `"db:5432"`). Defaults to `[]`. |
-| `portsAttributes` 🏷️ | object | Object that maps a port number, `"host:port"` value, range, or regular expression to a set of default options. See [port attributes](#port-attributes) for available options. For example:
`"portsAttributes": {"3000": {"label": "Application port"}}` |
+| `portsAttributes` 🏷️ | object | An object that maps a port number, `"host:port"` value, range, or regular expression to a set of default options. See [port attributes](#port-attributes) for available options. For example:
`"portsAttributes": {"3000": {"label": "Application port"}}` |
| `otherPortsAttributes` 🏷️ | object | Default options for ports, port ranges, and hosts that aren't configured using `portsAttributes`. See [port attributes](#port-attributes) for available options. For example:
`"otherPortsAttributes": {"onAutoForward": "silent"}` |
| `containerEnv` 🏷️ | object | A set of name-value pairs that sets or overrides environment variables for the container. Environment and [pre-defined variables](#variables-in-devcontainerjson) may be referenced in the values. For example:
`"containerEnv": { "MY_VARIABLE": "${localEnv:MY_VARIABLE}" }`
If you want to reference an existing container variable while setting this one (like updating the `PATH`), use `remoteEnv` instead.
`containerEnv` will set the variable on the Docker container itself, so all processes spawned in the container will have access to it. But it will also be static for the life of the container - you must rebuild the container to update the value.
We recommend using `containerEnv` (over `remoteEnv`) as much as possible since it allows all processes to see the variable and isn't client-specific. |
| `remoteEnv` 🏷️ | object | A set of name-value pairs that sets or overrides environment variables for the `devcontainer.json` supporting service / tool (or sub-processes like terminals) but not the container as a whole. Environment and [pre-defined variables](#variables-in-devcontainerjson) may be referenced in the values.
You may want to use `remoteEnv` (over `containerEnv`) if the value isn't static since you can update its value without having to rebuild the full container. |
@@ -39,7 +39,7 @@ The focus of `devcontainer.json` is to describe how to enrich a container for th
|----------|------|-------------|
| `image` | string | **Required** when using an image. The name of an image in a container registry ([DockerHub](https://hub.docker.com), [GitHub Container Registry](https://docs.github.com/packages/guides/about-github-container-registry), [Azure Container Registry](https://azure.microsoft.com/services/container-registry/)) that `devcontainer.json` supporting services / tools should use to create the dev container. |
| `build.dockerfile` | string |**Required** when using a Dockerfile. The location of a [Dockerfile](https://docs.docker.com/engine/reference/builder/) that defines the contents of the container. The path is relative to the `devcontainer.json` file. |
-| `build.context` | string | Path that the Docker build should be run from relative to `devcontainer.json`. For example, a value of `".."` would allow you to reference content in sibling directories. Defaults to `"."`. |
+| `build.context` | string | The path that the Docker build should be run from relative to `devcontainer.json`. For example, a value of `".."` would allow you to reference content in sibling directories. Defaults to `"."`. |
| `build.args` | Object | A set of name-value pairs containing [Docker image build arguments](https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg) that should be passed when building a Dockerfile. Environment and [pre-defined variables](#variables-in-devcontainerjson) may be referenced in the values. Defaults to not set. For example: `"build": { "args": { "MYARG": "MYVALUE", "MYARGFROMENVVAR": "${localEnv:VARIABLE_NAME}" } }` |
| `build.options` | array | An array of [Docker image build options](https://docs.docker.com/engine/reference/commandline/build/#options) that should be passed to the build command when building a Dockerfile. Defaults to `[]`. For example: `"build": { "options": [ "--add-host=host.docker.internal:host-gateway" ] }` |
| `build.target` | string | A string that specifies a [Docker image build target](https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target) that should be passed when building a Dockerfile. Defaults to not set. For example: `"build": { "target": "development" }` |
@@ -152,12 +152,12 @@ Variables can be referenced in certain string values in `devcontainer.json` in t
| Variable | Properties | Description |
|----------|---------|----------------------|
-| `${localEnv:VARIABLE_NAME}` | Any | Value of an environment variable on the **host machine** (in the examples below, called `VARIABLE_NAME`). Unset variables are left blank.
⚠️ Clients (like VS Code) may need to be **restarted** to pick up newly set variables.
⚠️ For a cloud service, the host is in the cloud rather than your local machine.
**Examples**
**1.** Set a variable containing your local home folder on Linux / macOS or the user folder on Windows:
`"remoteEnv": { "LOCAL_USER_PATH": "${localEnv:HOME}${localEnv:USERPROFILE}" }`.
A default value for when the environment variable is not set can be given with `${localEnv:VARIABLE_NAME:default_value}`.
**2.** In modern versions of macOS, default configurations allow setting local variables with the command `echo 'export VARIABLE_NAME=my-value' >> ~/.zshenv`. |
-| `${containerEnv:VARIABLE_NAME}` | `remoteEnv` | Value of an existing environment variable inside the container once it is up and running (in this case, called `VARIABLE_NAME`). For example:
`"remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }`
A default value for when the environment variable is not set can be given with `${containerEnv:VARIABLE_NAME:default_value}`. |
-| `${localWorkspaceFolder}` | Any | Path of the local folder that was opened in the `devcontainer.json` supporting service / tool (that contains `.devcontainer/devcontainer.json`). |
+| `${localEnv:VARIABLE_NAME}` | Any | The value of an environment variable on the **host machine** (in the examples below, called `VARIABLE_NAME`). Unset variables are left blank.
⚠️ Clients (like VS Code) may need to be **restarted** to pick up newly set variables.
⚠️ For a cloud service, the host is in the cloud rather than your local machine.
**Examples**
**1.** Set a variable containing your local home folder on Linux / macOS or the user folder on Windows:
`"remoteEnv": { "LOCAL_USER_PATH": "${localEnv:HOME}${localEnv:USERPROFILE}" }`.
A default value for when the environment variable is not set can be given with `${localEnv:VARIABLE_NAME:default_value}`.
**2.** In modern versions of macOS, default configurations allow setting local variables with the command `echo 'export VARIABLE_NAME=my-value' >> ~/.zshenv`. |
+| `${containerEnv:VARIABLE_NAME}` | `remoteEnv` | The value of an existing environment variable inside the container once it is up and running (in this case, called `VARIABLE_NAME`). For example:
`"remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }`
A default value for when the environment variable is not set can be given with `${containerEnv:VARIABLE_NAME:default_value}`. |
+| `${localWorkspaceFolder}` | Any | The path of the local folder that was opened in the `devcontainer.json` supporting service / tool (that contains `.devcontainer/devcontainer.json`). |
| `${containerWorkspaceFolder}` | Any | The path that the workspaces files can be found in the container. |
-| `${localWorkspaceFolderBasename}` | Any | Name of the local folder that was opened in the `devcontainer.json` supporting service / tool (that contains `.devcontainer/devcontainer.json`). |
-| `${containerWorkspaceFolderBasename}` | Any | Name of the folder where the workspace files can be found in the container. |
+| `${localWorkspaceFolderBasename}` | Any | The name of the local folder that was opened in the `devcontainer.json` supporting service / tool (that contains `.devcontainer/devcontainer.json`). |
+| `${containerWorkspaceFolderBasename}` | Any | The name of the folder where the workspace files can be found in the container. |
| `${devcontainerId}` | Any | Allow features to refer to an identifier that is unique to the dev container they are installed into and that is stable across rebuilds.
The properties supporting it in devcontainer.json are: `name`, `runArgs`, `initializeCommand`, `onCreateCommand`, `updateContentCommand`, `postCreateCommand`, `postStartCommand`, `postAttachCommand`, `workspaceFolder`, `workspaceMount`, `mounts`, `containerEnv`, `remoteEnv`, `containerUser`, `remoteUser`, and `customizations`. |
## Schema