# Constructs

> Version 10.8.1

> **Separate package**
>
> `constructs` is not part of `aws-cdk-lib` — install it separately:
>
> ```sh
> npm install constructs
> pip install constructs
> ```
> Software-defined persistent state

[![Release](https://github.com/aws/constructs/actions/workflows/release.yml/badge.svg)](https://github.com/aws/constructs/actions/workflows/release.yml)
[![npm version](https://badge.fury.io/js/constructs.svg)](https://badge.fury.io/js/constructs)
[![PyPI version](https://badge.fury.io/py/constructs.svg)](https://badge.fury.io/py/constructs)
[![NuGet version](https://badge.fury.io/nu/Constructs.svg)](https://badge.fury.io/nu/Constructs)
[![Maven Central](https://maven-badges.sml.io/maven-central/software.constructs/constructs/badge.svg?style=plastic)](https://maven-badges.sml.io/maven-central/software.constructs/constructs)

## What are constructs?

Constructs are classes which define a "piece of system state". Constructs can be composed together to form higher-level building blocks which represent more complex state.

Constructs are often used to represent the _desired state_ of cloud applications. For example, in the AWS CDK, which is used to define the desired state for AWS infrastructure using CloudFormation, the lowest-level construct represents a _resource definition_ in a CloudFormation template. These resources are composed to represent higher-level logical units of a cloud application, etc.

## Support policy

All [maintained Node.js versions](https://nodejs.org/en/about/previous-releases#release-schedule) are supported by this package.

## Contributing

This project has adopted the [Amazon Open Source Code of
Conduct](https://aws.github.io/code-of-conduct).

We welcome community contributions and pull requests. See our contribution
guide for more information on how to report issues, set up a
development environment and submit code.

## License

This project is distributed under the Apache License, Version 2.0.

## Types

| Name | Kind | Summary |
| --- | --- | --- |
| [`Construct`](/v2/docs/constructs.Construct) | Construct | Represents the building block of the construct graph. |
| [`ConstructOrder`](/v2/docs/constructs.ConstructOrder) | Enum | In what order to return constructs. |
| [`Dependable`](/v2/docs/constructs.Dependable) | Class | Trait for IDependable. |
| [`DependencyGroup`](/v2/docs/constructs.DependencyGroup) | Class | A set of constructs to be used as a dependable. |
| [`IConstruct`](/v2/docs/constructs.IConstruct) | Interface | Represents a construct. |
| [`IDependable`](/v2/docs/constructs.IDependable) | Interface | Trait marker for classes that can be depended upon. |
| [`IMixin`](/v2/docs/constructs.IMixin) | Mixin | A mixin is a reusable piece of functionality that can be applied to constructs to add behavior, properties, or modify existing functionality without inheritance. |
| [`IValidation`](/v2/docs/constructs.IValidation) | Interface | Implement this interface in order for the construct to be able to validate itself. |
| [`MetadataEntry`](/v2/docs/constructs.MetadataEntry) | Struct | An entry in the construct metadata table. |
| [`MetadataOptions`](/v2/docs/constructs.MetadataOptions) | Struct | Options for `construct.addMetadata()`. |
| [`Node`](/v2/docs/constructs.Node) | Class | Represents the construct node in the scope tree. |
| [`RootConstruct`](/v2/docs/constructs.RootConstruct) | Construct | Creates a new root construct node. |
