diff --git a/website/api/get-discourse-comments.js b/website/api/get-discourse-comments.js index 5ac59cfe5f2..2409de0a61b 100644 --- a/website/api/get-discourse-comments.js +++ b/website/api/get-discourse-comments.js @@ -9,10 +9,12 @@ const PREVIEW_ENV = 'deploy-preview-' // Set API endpoint and headers let discourse_endpoint = `https://discourse.getdbt.com` let headers = { - 'Accept': 'application/json', - 'Api-Key': DISCOURSE_DEVBLOG_API_KEY, - 'Api-Username': DISCOURSE_USER_SYSTEM, -} + Accept: "application/json", + "Api-Key": DISCOURSE_DEVBLOG_API_KEY, + "Api-Username": DISCOURSE_USER_SYSTEM, + // Cache comments in the browser (max-age) & CDN (s-maxage) for 1 day + "Cache-Control": "max-age=86400, s-maxage=86400 stale-while-revalidate", +}; async function getDiscourseComments(request, response) { let topicId, comments, DISCOURSE_TOPIC_ID; diff --git a/website/api/get-discourse-topics.js b/website/api/get-discourse-topics.js index 90d6e5af80e..503358a9e9f 100644 --- a/website/api/get-discourse-topics.js +++ b/website/api/get-discourse-topics.js @@ -9,10 +9,12 @@ async function getDiscourseTopics(request, response) { // Set API endpoint and headers let discourse_endpoint = `https://discourse.getdbt.com` let headers = { - 'Accept': 'application/json', - 'Api-Key': DISCOURSE_API_KEY, - 'Api-Username': DISCOURSE_USER, - } + Accept: "application/json", + "Api-Key": DISCOURSE_API_KEY, + "Api-Username": DISCOURSE_USER, + // Cache topics in the browser (max-age) & CDN (s-maxage) for 1 day + "Cache-Control": "max-age=86400, s-maxage=86400 stale-while-revalidate", + }; const query = buildQueryString(body) if(!query) throw new Error('Unable to build query string.') diff --git a/website/docs/docs/build/documentation.md b/website/docs/docs/build/documentation.md index 455fc9e70e0..684f35c0f9d 100644 --- a/website/docs/docs/build/documentation.md +++ b/website/docs/docs/build/documentation.md @@ -1,16 +1,19 @@ --- -title: "Documentation" +title: "About documentation" description: "Learn how good documentation for your dbt models helps stakeholders discover and understand your datasets." id: "documentation" +pagination_next: "docs/build/view-documentation" --- +import CopilotBeta from '/snippets/_dbt-copilot-avail.md'; + Good documentation for your dbt models will help downstream consumers discover and understand the datasets you curate for them. dbt provides a way to generate documentation for your dbt project and render it as a website. -import CopilotBeta from '/snippets/_dbt-copilot-avail.md'; + ## Related documentation * [Declaring properties](/reference/configs-and-properties) @@ -24,14 +27,16 @@ import CopilotBeta from '/snippets/_dbt-copilot-avail.md'; ## Overview -dbt provides a way to generate documentation for your dbt project. The documentation for your project includes: +dbt provides a scalable way to [generate](#generating-documentation) documentation for your dbt project using descriptions and commands. The documentation for your project includes: * **Information about your project**: including model code, a DAG of your project, any tests you've added to a column, and more. * **Information about your **: including column data types, and sizes. This information is generated by running queries against the information schema. +* Importantly, dbt also provides a way to add **descriptions** to models, columns, sources, and more, to further enhance your documentation. -Importantly, dbt also provides a way to add **descriptions** to models, columns, sources, and more, to further enhance your documentation. +The following sections describe how to [add descriptions](#adding-descriptions-to-your-project) to your project, [generate documentation](#generating-documentation), how to use [docs blocks](#using-docs-blocks), and set a [custom overview](#setting-a-custom-overview) for your documentation. ## Adding descriptions to your project -To add descriptions to your project, use the `description:` key in the same files where you declare [tests](/docs/build/data-tests), like so: + +Before generating documentation, add [descriptions](/reference/resource-properties/description) to your project resources. Add the `description:` key to the same YAML files where you declare [tests](/docs/build/data-tests). For example: @@ -56,33 +61,42 @@ models: - not_null ``` - -## Generating project documentation -The default documentation experience in dbt Cloud is [dbt Explorer](/docs/collaborate/explore-projects), available on [Team or Enterprise plans](https://www.getdbt.com/pricing/). Use dbt Explorer to view your project's resources (such as models, tests, and metrics), its [metadata](/docs/collaborate/explore-projects#generate-metadata), and their lineage to gain a better understanding of its latest production state. +### FAQs + + + + + -dbt Cloud developer and dbt Core users can use [dbt Docs](/docs/collaborate/build-and-view-your-docs#dbt-docs), which generates basic documentation, but doesn't offer the same speed, metadata, or visibility as dbt Explorer. +## Generating documentation Generate documentation for your project by following these steps: -1. Run `dbt docs generate` — this command tells dbt to compile relevant information about your dbt project and warehouse into `manifest.json` and `catalog.json` files, respectively. -2. Ensure you've created the models with `dbt run` to view the documentation for all columns, not just those described in your project. -3. Run `dbt docs serve` if you're developing locally to use these `.json` files to populate a local website. +1. Run the `dbt docs generate` [command](/reference/commands/cmd-docs#dbt-docs-generate) to compile relevant information about your dbt project and warehouse into `manifest.json` and `catalog.json` files, respectively. +2. Ensure you've created the models with `dbt run` or `dbt build` to view the documentation for all columns, not just those described in your project. +3. Run the `dbt docs serve` [command](/reference/commands/cmd-docs#dbt-docs-serve) if you're developing locally to use these `.json` files to populate a local website. -To view a resource, its metadata, and what commands are needed in dbt Explorer, refer to [generate metadata](/docs/collaborate/explore-projects#generate-metadata) for more details. +dbt provides two complementary ways to [view documentation](/docs/build/view-documentation), and your descriptions, after it's generated: -## FAQs - - - - - +- [**dbt Docs**:](/docs/build/view-documentation#dbt-docs) A static documentation site with model lineage, metadata, and documentation that can be hosted on your web server (like S3 or Netlify). Available for dbt Core or dbt Cloud Developer plans. +- [**dbt Explorer**](/docs/collaborate/explore-projects): Builds upon dbt Docs to provide a dynamic, real-time interface with enhanced metadata, customizable views, deeper project insights, and collaboration tools. Available on dbt Cloud Team or Enterprise plans. + +See [View documentation](/docs/build/view-documentation) to get the most out of your dbt project's documentation. ## Using docs blocks + +Docs blocks provide a robust method for documenting models and other resources using Jinja and markdown. Docs block files can contain arbitrary markdown, but they must be uniquely named. + ### Syntax -To declare a docs block, use the jinja `docs` tag. Docs blocks can contain arbitrary markdown, but they must be uniquely named. Their names may contain uppercase and lowercase letters (A-Z, a-z), digits (0-9), and underscores (_), but can't start with a digit. +To declare a docs block, use the Jinja `docs` tag. Their names may contain: + +- Can't start with a digit +- Uppercase and lowercase letters (A-Z, a-z) +- Digits (0-9) +- Underscores (_) @@ -102,7 +116,7 @@ The events in this table are recorded by [Snowplow](http://github.com/snowplow/s -In the above example, a docs block named `table_events` is defined with some descriptive markdown contents. There is nothing significant about the name `table_events` — docs blocks can be named however you like, as long as the name only contains alphanumeric and underscore characters and does not start with a numeric character. +In this example, a docs block named `table_events` is defined with some descriptive markdown contents. There is nothing significant about the name `table_events` — docs blocks can be named however you like, as long as the name only contains alphanumeric and underscore characters and doesn't start with a numeric character. ### Placement @@ -118,9 +132,8 @@ Docs blocks should be placed in files with a `.md` file extension. By default, d - ### Usage -To use a docs block, reference it from your `schema.yml` file with the [doc()](/reference/dbt-jinja-functions/doc) function in place of a markdown string. Using the examples above, the `table_events` docs can be included in the `schema.yml` file as shown below: +To use a docs block, reference it from your `schema.yml` file with the [doc()](/reference/dbt-jinja-functions/doc) function in place of a markdown string. Using the examples above, the `table_events` docs can be included in the `schema.yml` file as shown here: @@ -147,7 +160,11 @@ In the resulting documentation, `'{{ doc("table_events") }}'` will be expanded t ## Setting a custom overview *Currently available for dbt Docs only.* -The "overview" shown in the dbt Docs website can be overridden by supplying your own docs block called `__overview__`. By default, dbt supplies an overview with helpful information about the docs site itself. Depending on your needs, it may be a good idea to override this docs block with specific information about your company style guide, links to reports, or information about who to contact for help. To override the default overview, create a docs block that looks like this: +The "overview" shown in the dbt Docs website can be overridden by supplying your own docs block called `__overview__`. + +- By default, dbt supplies an overview with helpful information about the docs site itself. +- Depending on your needs, it may be a good idea to override this docs block with specific information about your company style guide, links to reports, or information about who to contact for help. +- To override the default overview, create a docs block that looks like this: @@ -168,7 +185,9 @@ as well as the repo for this project \[here](https://github.com/dbt-labs/mrr-pla *Currently available for dbt Docs only.* You can set different overviews for each dbt project/package included in your documentation site -by creating a docs block named `__[project_name]__`. For example, in order to define +by creating a docs block named `__[project_name]__`. + +For example, in order to define custom overview pages that appear when a viewer navigates inside the `dbt_utils` or `snowplow` package: @@ -190,48 +209,3 @@ up to page views and sessions. ``` - -## Navigating the documentation site - -Use [dbt Explorer](/docs/collaborate/explore-projects) for a richer documentation experience and more interactive experience for understanding your project's resources and lineage. Available on [Team or Enterprise plans](https://www.getdbt.com/pricing/). - -For additional details on how to explore your lineage and navigate your resources, refer to [dbt Explorer](/docs/collaborate/explore-projects). - - - - -If you're using the dbt Docs interface, you can navigate to the documentation for a specific model. That might look something like this: - - - -Here, you can see a representation of the project structure, a markdown description for a model, and a list of all of the columns (with documentation) in the model. - -From the dbt Docs page, you can click the green button in the bottom-right corner of the webpage to expand a "mini-map" of your DAG. This pane (shown below) will display the immediate parents and children of the model that you're exploring. - - - -In this example, the `fct_subscription_transactions` model only has one direct parent. By clicking the "Expand" button in the top-right corner of the window, we can pivot the graph horizontally and view the full lineage for our model. This lineage is filterable using the `--select` and `--exclude` flags, which are consistent with the semantics of [model selection syntax](/reference/node-selection/syntax). Further, you can right-click to interact with the DAG, jump to documentation, or share links to your graph visualization with your coworkers. - - - - - -## Deploying the documentation site - -With dbt Cloud, use [dbt Explorer](/docs/collaborate/explore-projects) automatically retrieves the metadata updates after each job run in the production or staging deployment environment so it always has the latest results for your project — meaning it's always automatically updated after each job run. - -:::caution Security - -The `dbt docs serve` command is only intended for local/development hosting of the documentation site. Please use one of the methods listed below (or similar) to ensure that your documentation site is hosted securely! - -::: - -#### For dbt Docs users - -dbt's documentation website was built to make it easy to host on the web. The site is "static,” meaning you don't need any "dynamic" servers to serve the docs. You can host your documentation in several ways: - -* Use [dbt Cloud's](/docs/collaborate/build-and-view-your-docs) default documentation experience with [dbt Explorer](/docs/collaborate/explore-projects). -* Host on [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) (optionally [with IP access restrictions](https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-3)) -* Publish with [Netlify](https://discourse.getdbt.com/t/publishing-dbt-docs-to-netlify/121) -* Use your own web server like Apache/Nginx - diff --git a/website/docs/docs/build/view-documentation.md b/website/docs/docs/build/view-documentation.md new file mode 100644 index 00000000000..d257f566dec --- /dev/null +++ b/website/docs/docs/build/view-documentation.md @@ -0,0 +1,85 @@ +--- +title: "View documentation" +description: "Learn how robust documentation for your dbt models helps stakeholders discover and understand your datasets." +id: "view-documentation" +--- + +dbt provides intuitive and scalable tools for viewing your dbt documentation. Detailed documentation is essential for your developers and other stakeholders to gain shared context for your dbt project. + +You can view documentation in two complementary ways, depending on your needs: + +| Option | Description | Availability | +|------|-------------|--------------| +| [**dbt Docs**](#dbt-docs) | Generates a static website with model lineage, metadata, and documentation that can be hosted on your web server (like S3 or Netlify). | dbt Core or dbt Cloud Developer plans | +| [**dbt Explorer**](/docs/collaborate/explore-projects) | The premier documentation experience in dbt Cloud. Builds on dbt Docs to provide a dynamic, real-time interface with rich [metadata](/docs/collaborate/explore-projects#generate-metadata), customizable views, deep insight into your project and resources, and collaborative tools. | dbt Cloud Team or Enterprise plans | + +## Navigating your documentation +The following sections describe how to navigate your documentation in dbt Explorer and dbt Docs. + +### dbt Explorer + +[dbt Explorer](/docs/collaborate/explore-projects) offers a dynamic, interactive way to explore your models, sources, and lineage. +To access dbt Explorer, navigate to the **Explore** option in the dbt Cloud navigation menu. + + + + + + + + + +dbt Explorer offers users a comprehensive suite of features to enhance data project navigation and understanding, like: + +- Interactive lineage visualization for your project's DAG to understand relationships between resources. +- Resource search bar with comprehensive filters to help find project resources efficiently and quickly. +- Model performance insights to access metadata on dbt Cloud runs for in-depth analysis of model performance and quality. +- Project recommendations with suggestions to improve test coverage and documentation across your data estate. +- Data health signals to monitor the health and performance of each resource through data health indicators. +- Model query history to track consumption queries on your models to gain deeper insights into data usage. +- Auto-exposures to automatically expose relevant data models from tools like Tableau to enhance visibility. + +For additional details and instructions on how to explore your lineage, navigate your resources, view model query history and data health signals, feature availability, and more — refer to [Discover data with dbt Explorer](/docs/collaborate/explore-projects). + +### dbt Docs + +dbt Docs provides valuable insights into your dbt Core or dbt Cloud Developer plan projects. The interface enables you to navigate to the documentation for specific models. That might look something like this: + + + +Here, you can see a representation of the project structure, a markdown description for a model, and a list of all of the columns (with documentation) in the model. + +From the dbt Docs page, click the green button in the bottom-right corner of the webpage to expand a "mini-map" of your DAG. This pane displays the immediate parents and children of the model that you're exploring. + + + +In this example, the `fct_subscription_transactions` model only has one direct parent. By clicking the "Expand" button in the top-right corner of the window, we can pivot the graph horizontally and view the full lineage for our model. This lineage is filterable using the `--select` and `--exclude` flags, which are consistent with the semantics of [model selection syntax](/reference/node-selection/syntax). Further, you can right-click to interact with the DAG, jump to documentation, or share links to your graph visualization with your coworkers. + + + +## Deploy the documentation site + +Effortlessly deploy documentation in dbt Explorer or dbt Docs to make it available to your teams. + +:::caution Security + +The `dbt docs serve` command is only intended for local/development hosting of the documentation site. Please use one of the methods listed in the next section (or similar) to ensure that your documentation site is hosted securely! + +::: + +### dbt Explorer + + +dbt Explorer automatically updates documentation after each production or staging job run using the metadata generated. This means it always has the latest results for your project with no manual deployment required. For details on how dbt Explorer uses metadata to automatically update documentation, refer to [Generate metadata](/docs/collaborate/explore-projects#generate-metadata). + +To learn how to deploy your documentation site, see [Build and view your docs with dbt Cloud](/docs/collaborate/build-and-view-your-docs). + +### dbt Docs +dbt Docs was built to make it easy to host on the web. The site is "static," meaning you don't need any "dynamic" servers to serve the docs. You can host your documentation in several ways: + +* Host on [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) (optionally [with IP access restrictions](https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-3)) +* Publish with [Netlify](https://discourse.getdbt.com/t/publishing-dbt-docs-to-netlify/121) +* Use your own web server like Apache/Nginx +* If you're on a dbt Cloud Developer plan, see [Build and view your docs with dbt Cloud](/docs/collaborate/build-and-view-your-docs#dbt-docs) to learn how to deploy your documentation site. + +Interested in using dbt Explorer for the complete dbt documentation experience, sign up for a free [dbt Cloud trial](https://www.getdbt.com/signup) or [contact us](https://www.getdbt.com/contact). diff --git a/website/docs/docs/collaborate/explore-projects.md b/website/docs/docs/collaborate/explore-projects.md index 8f2f2eca0cc..c07d23134f3 100644 --- a/website/docs/docs/collaborate/explore-projects.md +++ b/website/docs/docs/collaborate/explore-projects.md @@ -33,7 +33,7 @@ Navigate the dbt Explorer overview page to access your project's resources and m - **Auto-exposures** — [Set up and view auto-exposures](/docs/collaborate/auto-exposures) to automatically expose relevant data models from Tableau to enhance visibility. - **Data health signals** — View the [data-health-signals](/docs/collaborate/data-health-signals) for each resource to understand its health and performance. - + ## Generate metadata diff --git a/website/docs/reference/data-test-configs.md b/website/docs/reference/data-test-configs.md index 0044a707db1..6ac9e59e2c0 100644 --- a/website/docs/reference/data-test-configs.md +++ b/website/docs/reference/data-test-configs.md @@ -87,6 +87,7 @@ version: 2 tests: - : # # Actual name of the test. For example, dbt_utils.equality name: # Human friendly name for the test. For example, equality_fct_test_coverage + [description](/reference/resource-properties/description): "markdown formatting" : [config](/reference/resource-properties/config): [fail_calc](/reference/resource-configs/fail_calc): @@ -102,6 +103,7 @@ version: 2 tests: - : name: + [description](/reference/resource-properties/description): "markdown formatting" : [config](/reference/resource-properties/config): [fail_calc](/reference/resource-configs/fail_calc): @@ -182,6 +184,7 @@ version: 2 tests: - : # Actual name of the test. For example, dbt_utils.equality name: # Human friendly name for the test. For example, equality_fct_test_coverage + [description](/reference/resource-properties/description): "markdown formatting" : [config](/reference/resource-properties/config): [enabled](/reference/resource-configs/enabled): true | false @@ -197,6 +200,7 @@ version: 2 tests: - : name: + [description](/reference/resource-properties/description): "markdown formatting" : [config](/reference/resource-properties/config): [enabled](/reference/resource-configs/enabled): true | false @@ -296,3 +300,41 @@ models: ``` Given the config, the data test runs on a different Snowflake virtual warehouse than the one in your default connection to enable better price-performance with a different warehouse size or more granular cost allocation and visibility. + +#### Add a description to generic and singular tests + +Starting from dbt v1.9 (also available to dbt Cloud [release tracks](/docs/dbt-versions/cloud-release-tracks)), you can add [descriptions](/reference/resource-properties/data-tests#description) to both generic and singular tests. + +For a generic test, add the description in line with the existing YAML: + + + +```yml + +models: + - name: my_model + columns: + - name: delivery_status + tests: + - accepted_values: + values: ['delivered', 'pending', 'failed'] + description: "This test checks whether there are unexpected delivery statuses. If it fails, check with logistics team" + +``` + + +For a singular test, define it in the test's directory: + + + +```yml + +data_tests: + - name: my_custom_test + description: "This test checks whether the rolling average of returns is inside of expected bounds. If it isn't, flag to customer success team" + +``` + + +For more information refer to [Add a description to a data test](/reference/resource-properties/description#add-a-description-to-a-data-test). + diff --git a/website/package-lock.json b/website/package-lock.json index 3fa85f32338..50c3a8de8ea 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "website", "version": "0.0.0", "dependencies": { "@docusaurus/core": "3.7.0", diff --git a/website/sidebars.js b/website/sidebars.js index b6923f9d87a..ef5a66c889b 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -340,7 +340,15 @@ const sidebarSettings = { link: { type: "doc", id: "docs/build/data-tests" }, items: ["docs/build/data-tests", "docs/build/unit-tests"], }, - "docs/build/documentation", + { + type: "category", + label: "Documentation", + link: { type: "doc", id: "docs/build/documentation" }, + items: [ + "docs/build/documentation", + "docs/build/view-documentation", + ], + }, "docs/build/snapshots", "docs/build/seeds", "docs/build/jinja-macros", diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 2c796ae7e3a..fc0964355b2 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -2148,3 +2148,74 @@ table th { color: #000000; /* Black text on darker background */ font-weight: bold; } + +/* Begin tab borders */ + +.tabs { + background-color: transparent; + padding: 10px; +} + +/* Default color and border for tabs */ +.tabs__item { + background-color: var(--color-white); /* Sets the tab color the same as the file borders */ + border: 2px solid var(--color-nav-text); + padding: 5px 10px; + margin-right: 5px; + border-radius: 4px; + cursor: pointer; + transition: background-color 0.3s; +} + +/* Default color and border for tabs in dark mode */ +[data-theme='dark'] .tabs__item { + background-color: var(--color-primary-blue); + border: 1px solid var(--color-nav-text); + padding: 5px 10px; + margin-right: 5px; + border-radius: 4px; + cursor: pointer; + transition: background-color 0.3s; +} + +/*Color when hovering over tabs */ +.tabs__item:hover { + background-color: var(--ifm-color-primary); + color: var(--color-white); +} + +[data-theme='dark'] .tabs__item:hover { + background-color: var(--ifm-color-primary); + color: var(--color-white); +} + +/* Color when the tab is clicked*/ +.tabs__item--active { + background-color: var(--ifm-color-primary); + color: var(--color-white); + border-color: var(--ifm-color-primary); +} + +[data-theme='dark'] .tabs__item--active { + background-color: var(--ifm-color-primary); + color: var(--color-white); + border-color: var(--ifm-color-primary); +} + +/* Sets the tab content border and background color */ +[data-theme='dark'] .tabs-container{ + border: 1px solid var(--color-nav-text); + padding: 15px; + border-radius: 10px; + margin-top: 10px; + background-color: transparent; +} + +[data-theme='light'] .tabs-container{ + border: 1px solid var(--ifm-toc-border-color); + padding: 15px; + border-radius: 10px; + margin-top: 10px; + background-color: transparent; +} +/* End tab borders */ diff --git a/website/static/img/docs/collaborate/dbt-explorer/explorer-main-page.gif b/website/static/img/docs/collaborate/dbt-explorer/explorer-main-page.gif index 6009e54197f..e5e57a3be3b 100644 Binary files a/website/static/img/docs/collaborate/dbt-explorer/explorer-main-page.gif and b/website/static/img/docs/collaborate/dbt-explorer/explorer-main-page.gif differ diff --git a/website/vercel.json b/website/vercel.json index d3dad9fb500..8d14878dff2 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -1,6 +1,42 @@ { "cleanUrls": true, "trailingSlash": false, + "headers": [ + { + "source": "/(.*)", + "headers": [ + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Content-Security-Policy", + "value": "img-src 'self' data: https:; frame-ancestors 'self' https://*.mutinyhq.com https://*.getdbt.com" + }, + { + "key": "Strict-Transport-Security", + "value": "max-age=63072000; includeSubDomains; preload" + }, + { + "key": "Cache-Control", + "value": "max-age=0, s-maxage=86400 stale-while-revalidate" + } + ] + }, + { + "source": "/:path*.(jpg|jpeg|png|svg|gif|webp)", + "headers": [ + { + "key": "Cache-Control", + "value": "max-age=2678400, s-maxage=604800 stale-while-revalidate" + } + ] + } + ], "redirects": [ { "source": "/blog/dbt-cloud-api-postman-collection-announcement", @@ -3676,28 +3712,5 @@ "destination": "https://www.getdbt.com/blog", "permanent": true } - ], - "headers": [ - { - "source": "/(.*)", - "headers": [ - { - "key": "X-Content-Type-Options", - "value": "nosniff" - }, - { - "key": "X-Frame-Options", - "value": "DENY" - }, - { - "key": "Content-Security-Policy", - "value": "img-src 'self' data: https:; frame-ancestors 'self' https://*.mutinyhq.com https://*.getdbt.com" - }, - { - "key": "Strict-Transport-Security", - "value": "max-age=63072000; includeSubDomains; preload" - } - ] - } ] }