<i>A set of simple and reusable 'features'. Quickly add a language/tool/CLI to a development container.
<i>A set of simple and reusable Features. Quickly add a language/tool/CLI to a development container.
</td>
</td>
</tr></table>
</tr></table>
'Features' are self-contained units of installation code and development container configuration. Features are designed
'Features' are self-contained units of installation code and development container configuration. Features are designed
to install atop a wide-range of base container images (**this repo focuses on `debian` based images**).
to install atop a wide-range of base container images (**this repo focuses on `debian` based images**).
Missing a CLI or language in your otherwise _perfect_ container image? Add the relevant 'feature' to the `features`
Missing a CLI or language in your otherwise _perfect_ container image? Add the relevant Feature to the `features`
property of a [`devcontainer.json`](https://containers.dev/implementors/json_reference/#general-properties). A
property of a [`devcontainer.json`](https://containers.dev/implementors/json_reference/#general-properties). A
[tool supporting the dev container specification](https://containers.dev/supporting) is required to build a development
[tool supporting the dev container specification](https://containers.dev/supporting) is required to build a development
container.
container.
⚠️ Development container 'features' are a
You may learn about Features at [containers.dev](https://containers.dev/implementors/features/), which is the website for the dev container specification.
[**proposed**](https://github.com/devcontainers/spec/blob/main/proposals/devcontainer-features.md) addition to the
[development container specification](https://containers.dev/implementors/spec/). **Please note that 'features' are in
preview and subject to breaking changes**.
Once the [**proposed**](https://github.com/devcontainers/spec/blob/main/proposals/devcontainer-features.md)
specification is accepted, implementation details will be published at
To reference a feature from this repository, add the desired features to a `devcontainer.json`. Each feature has a `README.md` that shows how to reference the feature and which options are available for that feature.
To reference a Feature from this repository, add the desired Features to a `devcontainer.json`. Each Feature has a `README.md` that shows how to reference the Feature and which options are available for that Feature.
The example below installs the `go` and `docker-in-docker` declared in the [`./src`](./src) directory of this
The example below installs the `go` and `docker-in-docker` declared in the [`./src`](./src) directory of this
repository.
repository.
See the relevant feature's README for supported options.
See the relevant Feature's README for supported options.
```jsonc
```jsonc
"name": "my-project-devcontainer",
"name": "my-project-devcontainer",
...
@@ -51,7 +43,7 @@ See the relevant feature's README for supported options.
...
@@ -51,7 +43,7 @@ See the relevant feature's README for supported options.
The `:latest` version annotation is added implicitly if omitted. To pin to a specific package version
The `:latest` version annotation is added implicitly if omitted. To pin to a specific package version
([example](https://github.com/devcontainers/features/pkgs/container/features/go/versions)), append it to the end of the
([example](https://github.com/devcontainers/features/pkgs/container/features/go/versions)), append it to the end of the
feature. Features follow semantic versioning conventions, so you can pin to a major version `:1`, minor version `:1.0`, or patch version `:1.0.0` by specifying the appropriate label.
Feature. Features follow semantic versioning conventions, so you can pin to a major version `:1`, minor version `:1.0`, or patch version `:1.0.0` by specifying the appropriate label.
```jsonc
```jsonc
"features": {
"features": {
...
@@ -63,7 +55,7 @@ feature. Features follow semantic versioning conventions, so you can pin to a ma
...
@@ -63,7 +55,7 @@ feature. Features follow semantic versioning conventions, so you can pin to a ma
The [devcontainer CLI reference implementation](https://github.com/devcontainers/cli)(or a
The [devcontainer CLI reference implementation](https://github.com/devcontainers/cli)(or a
[supporting tool](https://containers.dev/supporting)) can be used to build a project's dev container declaring
[supporting tool](https://containers.dev/supporting)) can be used to build a project's dev container declaring
The [feature distribution specification](https://github.com/devcontainers/spec/blob/main/proposals/devcontainer-features-distribution.md) outlines a pattern for community members and organizations to self-author features in repositories they control.
The [Feature distribution specification](https://containers.dev/implementors/features-distribution/) outlines a pattern for community members and organizations to self-author Features in repositories they control.
A template repo [`devcontainers/feature-template`](https://github.com/devcontainers/feature-template) and [GitHub Action](https://github.com/devcontainers/action) are available to help bootstrap self-authored features.
A template repo [`devcontainers/feature-template`](https://github.com/devcontainers/feature-template) and [GitHub Action](https://github.com/devcontainers/action) are available to help bootstrap self-authored Features.
We are eager to hear your feedback on self-authoring! Please provide comments and feedback on [spec issue #70](https://github.com/devcontainers/spec/issues/70).
We are eager to hear your feedback on self-authoring! Please provide comments and feedback on [spec issue #70](https://github.com/devcontainers/spec/issues/70).
### Contributing to this repository
### Contributing to this repository
This repository will accept improvement and bug fix contributions related to the
This repository will accept improvement and bug fix contributions related to the