diff --git a/website/app/styles/app.scss b/website/app/styles/app.scss
index 28b0680547..678ecb11e8 100644
--- a/website/app/styles/app.scss
+++ b/website/app/styles/app.scss
@@ -51,6 +51,7 @@
@use "pages/components/table" as components-table;
@use "pages/components/tabs" as components-tabs;
@use "pages/layouts/app-frame" as layouts-app-frame;
+@use "pages/layouts/grid" as layouts-grid;
@use "pages/whats-new/changelog" as whats-new-changelog;
@use "pages/patterns/table-multi-select" as patterns-table-multi-select;
@use "pages/patterns/filter-patterns" as patterns-filter-patterns;
diff --git a/website/app/styles/pages/layouts/grid.scss b/website/app/styles/pages/layouts/grid.scss
new file mode 100644
index 0000000000..f8f68b1569
--- /dev/null
+++ b/website/app/styles/pages/layouts/grid.scss
@@ -0,0 +1,36 @@
+/**
+ * Copyright (c) HashiCorp, Inc.
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+// COMPONENTS > GRID
+
+#show-content-layouts-grid {
+ .doc-grid-mobile-view {
+ position: relative;
+ max-width: 280px;
+ padding: 16px 16px 65px;
+ background: #fff;
+ border: 1px solid;
+ border-radius: 16px;
+ aspect-ratio: 9 / 16;
+
+ // home button
+ &::before {
+ position: absolute;
+ inset: auto 0 15px 0;
+ width: 40px;
+ height: 40px;
+ margin: 0 auto;
+ background: var(--token-color-palette-neutral-200);
+ border-radius: 50%;
+ content: "";
+ }
+ }
+
+ .doc-grid-plain-list {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ }
+}
diff --git a/website/docs/layouts/grid/index.md b/website/docs/layouts/grid/index.md
new file mode 100644
index 0000000000..3c57f11d14
--- /dev/null
+++ b/website/docs/layouts/grid/index.md
@@ -0,0 +1,16 @@
+---
+title: Layout::Grid
+description: A component used to implement layouts based on CSS grid
+caption: A layout-only component for the organization of content based on the CSS grid model
+links:
+ github: https://github.com/hashicorp/design-system/tree/main/packages/components/src/components/hds/layout/grid
+previewImage: assets/illustrations/layouts/grid.jpg
+navigation:
+ keywords: ['layout', 'grid', 'columns', 'rows', 'spacing']
+ label: "Grid"
+---
+
+
+ @include "partials/code/how-to-use.md"
+ @include "partials/code/component-api.md"
+
diff --git a/website/docs/layouts/grid/partials/code/component-api.md b/website/docs/layouts/grid/partials/code/component-api.md
new file mode 100644
index 0000000000..0002f1e50e
--- /dev/null
+++ b/website/docs/layouts/grid/partials/code/component-api.md
@@ -0,0 +1,49 @@
+## Component API
+
+### Layout::Grid
+
+
+
+ A valid HTML tag name to be used to render the grid element.
+
+
+ Set any valid CSS dimension as a minimum width for the grid columns. If the total width of columns in a row exceeds 100% of the parent, columns will begin to wrap to the next row as necessary to fit. The column gap size is subtracted from this minimum width.
+
+ Note: With the default min-width of 0px, the columns will never wrap.
+
+
+ The value of the CSS `align-items` property, which controls the alignment of the grid items on the block axis within their grid areas (for a technical explanation: [see MDN reference](https://developer.mozilla.org/en-US/docs/Web/CSS/align-items)).
+
+ Note: we only expose a subset of the values allowed for this property, which cover the most common use cases.
+
+
+ The gap spacing between rows and columns of the grid. Specify as either a single value or array of two values for setting the row and column spacing separately.
+
+
+ This component supports use of [`...attributes`](https://guides.emberjs.com/release/in-depth-topics/patterns-for-components/#toc_attribute-ordering).
+
+
+
+### Contextual components
+
+#### [LG].Item
+
+The `Layout::Grid::Item` component, yielded as contextual component, to be used as child of the `grid` element to control its `colspan/rowspan` values (and other properties).
+
+
+
+ HTML tag to be used to render the grid item element.
+
+
+ The number of columns an item should span.
+
+
+ The number of rows an item should span.
+
+
+ Elements passed as children are yielded as inner content of the element.
+
+
+ This component supports use of [`...attributes`](https://guides.emberjs.com/release/in-depth-topics/patterns-for-components/#toc_attribute-ordering).
+
+
diff --git a/website/docs/layouts/grid/partials/code/how-to-use.md b/website/docs/layouts/grid/partials/code/how-to-use.md
new file mode 100644
index 0000000000..29efb46201
--- /dev/null
+++ b/website/docs/layouts/grid/partials/code/how-to-use.md
@@ -0,0 +1,353 @@
+## How to use this component
+
+!!! Insight
+
+While it’s not necessary to be familiar with CSS3 grid specifications to use this component, some knowledge may be helpful in achieving more complex layouts.
+
+A helpful reference with clear examples: [CSS Tricks: Complete grid layout guide](https://css-tricks.com/snippets/css/complete-guide-grid/).
+
+!!!
+
+The `Layout::Grid` and optional `Layout::Grid::Item` components provide a way to quickly build out flexible grid-based layouts of components or elements without needing to write a lot of custom CSS code or understand all the intricacies of CSS grid styles.
+
+### Basic usage
+
+The simplest way to implement a grid layout is by using the `Layout::Grid` component to wrap content directly. A grid layout of equal width “columns” is created by default.
+
+```handlebars
+
+
+
+
+
+
+```
+
+Every child of the **grid container** will be stretched to fit evenly within the underlying grid column tracks behaving as a **grid item** (for details on what this means, refer to the guide linked at the top of the page).
+
+In some cases, it may be necessary to wrap one or more content items within the optional `Layout::Grid::Item` component. i.e., to group content together within a column or row, prevent content from being stretched to fit the underlying grid column width, or to make use of `rowspan` and `colspan` options in order to create more complex layouts. (See below for more details and examples on these features.)
+
+!!! Info
+
+Note: there is no strict need to use the `Layout::Grid::Item` subcomponent as a direct child of `Layout::Grid`; use it only when necessary to tweak grid styles of an individual child item such as via the `@colspan/@rowspan` arguments (to avoid rendering an extra Ember component).
+
+!!!
+
+### Preventing content stretch
+
+Wrap content in a `Grid::Item` to prevent it from stretching to fill the grid column.
+
+```handlebars
+
+
+
+
+
+
+
+```
+
+### Tag
+
+To specify the HTML tag used to render the grid container and/or item(s), use the `@tag` argument.
+
+```handlebars{data-execute=false}
+
+ {{! some content here }}
+
+ {{! some other content here }}
+
+ {{! more content here }}
+
+```
+
+!!! Insight
+
+While, by default, the component renders a `
`, we invite consumers to consider which semantic HTML tag is the correct one for the context in which the text is used to meet WCAG Success Criterion [1.3.1 Info and Relationships](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html) as the visual experience should match what is presented to the user with assistive technology.
+
+!!!
+
+### Gap
+
+To control the spacing between grid items, use the `@gap` argument.
+
+```handlebars{data-execute=false}
+
+ {{! multiple grid items here, with a gap of 16px between them }}
+
+```
+
+To differentiate the vertical and horizontal spacing between items when they wrap on multiple rows, provide an array of two values to the `@gap` argument.
+
+```handlebars{data-execute=false}
+
+ {{!
+ multiple grid items appearing on multiple rows
+ with a vertical gap of 16px and a horizontal one of 48px
+ }}
+
+```
+
+The first value in the array refers to the vertical gap between “rows” of items (`row-gap` in CSS), the second one to the horizontal spacing between “columns” of items (`column-gap` in CSS).
+
+The `@gap` argument accepts only **pre-defined values**, it can’t be used to provide custom spacing values. Refer to the [Component API](#component-api) section for details on which values are accepted.
+
+If you need to provide custom spacing values, see below how you can use a special escape hatch for this.
+
+!!! Warning
+
+**Important**
+
+The **pre-defined value(s)** passed to the `@gap` argument **must be string(s)**, not numbers!
+
+!!!
+
+#### Non-standard gap values
+
+If you absolutely have to use non-standard spacing value(s) for the grid `gap`, you can use the internal `--hds-layout-grid-row-gap` and `--hds-layout-grid-column-gap` CSS variables and pass custom values to them (e.g., via a local CSS variable or an inline style).
+
+```handlebars{data-execute=false}
+
+ {{!
+ multiple grid items here, with a non-standard gap between them
+ by assigning a custom value for `--hds-layout-grid-column-gap`
+ declared in the `.doc-grid-demo-custom-grid-column-gap` local class
+ }}
+
+```
+
+In this case we’re overwriting only the “column” gap value via the custom CSS class.
+
+If the grid items are wrapping on multiple lines, you have to overwrite both the “row” and “column” gap values.
+
+```handlebars{data-execute=false}
+
+ {{!
+ multiple grid items appearing on multiple rows
+ with a vertical gap of 10px and a horizontal one of 0.625rem
+ }}
+
+```
+
+### Column min width
+
+Specify a `columnMinWidth` size to exercise control over how many columns occupy a row. If the total widths of the columns add up to more than 100% of the parent they will automatically wrap to the next row as necessary to fit.
+
+Note: The `gap` size will be subtracted from the `columnMinWidth`, so take this into account when specifying a column min width.
+
+#### Using percentage values
+
+Column min-widths specified as a percentage value will maintain the same size ratio in all browser screen widths.
+
+```handlebars
+
+
+
+
+
+
+```
+
+#### Using fixed values
+
+Column min-widths specified using pixels or other fixed units, allows you to create layouts which are “automatically” responsive.
+
+##### Grid within a wider view
+
+Narrow your browser window to see the responsive behavior.
+
+```handlebars
+
+
+
+
+
+
+```
+
+##### The same grid within a narrower view
+
+At the specified column min width, columns are forced to stack in this narrower view.
+
+```handlebars
+
+
+
+
+
+
+
+
+```
+
+### Align
+
+Use the `@align` argument to align grid items to the "start", "end", "center" or "stretch" them within the grid parent.
+
+Note: The `Grid` parent will need a height set for the effect to be visible.
+
+```handlebars
+
+
+
+
+
+
+
+
+```
+
+### Colspan & rowspan
+
+Use the `colspan` and `rowspan` arguments of the `Grid::Item` component to set the number of columns or rows an item should occupy.
+
+The following example has an underlying 4-column grid specified by setting a `columnMinWidth` of “25%”. It uses `colspan` and `rowspan` to create a flexible layout roughly resembling a typical web page layout.
+
+Note: By default, if a height is set on the `Grid` parent, grid row heights will stretch proportionally to fill the `Grid`. To instead make a row conform to the minimum height of its content, you can pass an inline style as shown in the example.
+
+```handlebars
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+---
+
+## Common layout patterns
+
+Below are examples of common layout patterns that can be achieved using the `Layout::Grid` component in combination with other HDS components.
+
+!!! Warning
+
+**Important**
+
+The examples below are meant to show how one _could_ use the `Layout::Grid` component to implement certain common/standard UI patterns. They're **not** meant to be taken literally as they are and be used in production code. Also, some of these patterns may already be implemented directly in HDS components that are ready to use.
+
+!!!
+
+### Card layouts
+
+Note: The following example makes use of nested `Grid` and [Flex](/layouts/flex) components to achieve its layout. This may be overkill in actual practice but demonstrates the possibilities for achieving layouts with just these layout components alone.
+
+#### Basic 3-column layout
+
+```handlebars
+
+
+
+
+
+
+ Active resources
+
+
+
+
+
+
+
+ There are 5 active resources inside this project.
+
+
+
+
+
+
+
+ Card #2
+
+
+
+ Card #3
+
+
+```
+
+#### More complex layout
+
+Wrap content with a `Grid::Item` as needed to achieve more complex layouts.
+
+```handlebars
+
+
+
+
+
+
+
+ Better together
+
+
+ HCP Terraform now works together with HCP Vault Secrets.
+
+
+ The combined solution enables your team to provision infrastructure with a scalable and least-privilege security approach for your secrets.
+
+
+
+
+
+
+ content
+
+
+
+ content
+
+
+
+
+
+ HCP Terraform Provider Resources
+
+
+ Deploy HCP Vault
+
+ Integrate HCP Vault into your environment faster.
+
+
+
+ Deploy HCP Consul
+
+ Manage your provisions and snapshot.
+
+
+
+
+
+
+
+```