dbt-labs / dbt-labs/dbt

[v2 Bug] `dbt docs generate` failing with "this build has no embedded docs UI"

Open
#16,306 0 comments 0 reactions 0 assignees View on GitHub
area:adapters bug duckdb engine:v2 status:triage triage type:bug v2
Dominant language
Rust
Stars
13.8k
Forks
2.6k
Avg merge
21h 31m
Merged PRs (30d)
56

Description

### Is this a new bug in dbt v2.x compared to the latest version of dbt 1.x?

- [x] I believe this is a new bug in dbt v2.x
- [x] I have searched the existing issues and could not find a duplicate

### Current Behavior

I am attempting to build the v2 dbt docs site using `dbt-oss==2.0.1`. Instead of the site being generated in my local directory, I am receiving an error:
```
[error] [Generic (dbt1000)]: dbt docs generate: this build has no embedded docs UI (built without the `embed-ui` feature), so there is no site to write
```

### Expected Behavior

Per the [docs](https://docs.getdbt.com/docs/build/view-documentation?version=2#dbt-docs-v2) (accessed today), I would expect the compiled static site to be available for me to preview:
> To generate and serve dbt Docs v2 with dbt v2, run `dbt docs generate` to build the site, then `dbt docs serve` to preview it locally. `dbt docs generate` compiles your project and writes the index for you in a single command.

### Steps To Reproduce

1. Create a new directory to house the project.
With the following `requirements.txt`:
```
dbt-oss==2.0.1
```

Run the following:
```bash
mkdir ~/dbt-reprex
cd ~/dbt-reprex
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
dbt init
```

2. Set up a local profile (using DuckDB).
```yaml
# ./jaffle_shop/profiles.yml
jaffle_shop:
target: dev
outputs:
dev:
type: duckdb
path: reprex.duckdb
schema: main
threads: 4
timeout_seconds: 300
```

3. Verify the connection, and build the project:
```
dbt debug
dbt build
```

4. Attempt to generate the docs site:
```
dbt docs generate
```

### Relevant log output

```shell
dbt debug
dbt-oss 2.0.1
Loading profiles.yml
Debugging profile: dev
Debugging dbt version: 2.0.1
Debugging platform: macos aarch64 (unix)
Debugging adapter type: duckdb (remote)
Debugging dependencies:
git: OK
Debugging connection:
"path": "reprex.duckdb",
"schema": "main"
Debugging connection test: OK
Debugged All checks passed!

============================= Execution Summary ==============================
Finished 'debug' successfully for target 'dev' [625ms]

dbt docs generate
Running compile; pass `--no-compile` to export the existing index instead.
dbt-oss 2.0.1
Succeeded seed main_raw.raw_stores (table) [32 of 45 in 0.00s]
Succeeded seed main_raw.raw_customers (table) [35 of 45 in 0.00s]
Succeeded seed main_raw.raw_supplies (table) [39 of 45 in 0.00s]
Succeeded seed main_raw.raw_products (table) [41 of 45 in 0.00s]
Succeeded seed main_raw.raw_orders (table) [43 of 45 in 0.00s]
Succeeded seed main_raw.raw_items (table) [45 of 45 in 0.00s]
Succeeded test relationships_orders_customer_id__customer_id__ref_stg_customers_ (models/marts/orders.yml:20:13) [11 of 45 in 0.00s]
Succeeded test unique_orders_order_id (models/marts/orders.yml:16:13) [7 of 45 in 0.00s]
Succeeded test relationships_order_items_order_id__order_id__ref_orders_ (models/marts/order_items.yml:10:13) [12 of 45 in 0.00s]
Succeeded test not_null_stg_supplies_supply_uuid (models/staging/stg_supplies.yml:11:13) [13 of 45 in 0.00s]
Succeeded test not_null_stg_customers_customer_id (models/staging/stg_customers.yml:8:13) [19 of 45 in 0.00s]
Succeeded test dbt_utils_expression_is_true_orders_order_total_subtotal_tax_paid (models/marts/orders.yml:8:9) [24 of 45 in 0.00s]
Succeeded test not_null_stg_products_product_id (models/staging/stg_products.yml:8:13) [14 of 45 in 0.00s]
Succeeded test not_null_stg_order_items_order_id (models/staging/stg_order_items.yml:13:13) [17 of 45 in 0.00s]
Succeeded test dbt_utils_expression_is_true_orders_order_items_subtotal_subtotal (models/marts/orders.yml:5:9) [25 of 45 in 0.00s]
Succeeded model main.stg_locations (view) [31 of 45 in 0.00s]
Succeeded model main.customers (table) [33 of 45 in 0.00s]
Succeeded model main.stg_customers (view) [34 of 45 in 0.00s]
Succeeded model main.orders (table) [36 of 45 in 0.00s]
Succeeded model main.stg_order_items (view) [44 of 45 in 0.00s]
Succeeded test unique_stg_order_items_order_item_id (models/staging/stg_order_items.yml:9:13) [4 of 45 in 0.01s]
Succeeded test not_null_stg_orders_order_id (models/staging/stg_orders.yml:12:13) [15 of 45 in 0.01s]
Succeeded test unique_order_items_order_item_id (models/marts/order_items.yml:7:13) [8 of 45 in 0.01s]
Succeeded test unique_stg_products_product_id (models/staging/stg_products.yml:9:13) [2 of 45 in 0.01s]
Succeeded test unique_stg_customers_customer_id (models/staging/stg_customers.yml:9:13) [6 of 45 in 0.01s]
Succeeded test dbt_utils_expression_is_true_stg_orders_order_total_tax_paid_subtotal (models/staging/stg_orders.yml:5:9) [23 of 45 in 0.01s]
Succeeded model main.products (table) [29 of 45 in 0.00s]
Succeeded test not_null_stg_order_items_order_item_id (models/staging/stg_order_items.yml:8:13) [16 of 45 in 0.01s]
Succeeded test dbt_utils_expression_is_true_customers_lifetime_spend_pretax_lifetime_tax_paid_lifetime_spend (models/marts/customers.yml:5:9) [26 of 45 in 0.01s]
Succeeded model main.supplies (table) [28 of 45 in 0.00s]
Succeeded test not_null_orders_order_id (models/marts/orders.yml:15:13) [20 of 45 in 0.01s]
Succeeded model main.order_items (table) [37 of 45 in 0.00s]
Succeeded test unique_stg_supplies_supply_uuid (models/staging/stg_supplies.yml:12:13) [1 of 45 in 0.01s]
Succeeded model main.stg_products (view) [40 of 45 in 0.00s]
Succeeded test unique_stg_locations_location_id (models/staging/stg_locations.yml:9:13) [5 of 45 in 0.01s]
Succeeded test accepted_values_customers_customer_type__new__returning (models/marts/customers.yml:31:13) [27 of 45 in 0.01s]
Succeeded test unique_stg_orders_order_id (models/staging/stg_orders.yml:13:13) [3 of 45 in 0.01s]
Succeeded test not_null_stg_locations_location_id (models/staging/stg_locations.yml:8:13) [18 of 45 in 0.01s]
Succeeded test not_null_customers_customer_id (models/marts/customers.yml:12:13) [22 of 45 in 0.01s]
Succeeded test unique_customers_customer_id (models/marts/customers.yml:13:13) [9 of 45 in 0.01s]
Succeeded model main.locations (table) [30 of 45 in 0.01s]
Succeeded test not_null_order_items_order_item_id (models/marts/order_items.yml:6:13) [21 of 45 in 0.01s]
Succeeded test relationships_stg_order_items_order_id__order_id__ref_stg_orders_ (models/staging/stg_order_items.yml:14:13) [10 of 45 in 0.01s]
Succeeded model main.stg_supplies (view) [38 of 45 in 0.01s]
Succeeded model main.stg_orders (view) [42 of 45 in 0.00s]

============================ Errors and Warnings =============================
[error] [Generic (dbt1000)]: dbt docs generate: this build has no embedded docs UI (built without the `embed-ui` feature), so there is no site to write

============================= Execution Summary ==============================
Finished 'docs' with 1 error [615ms]
```

### Environment

```markdown
- OS: MacOS (Tahoe 26.6.2)
- CPU: ARM
- dbt distribution and version: dbt-oss 2.0.1
```

### Which database adapter are you using?

duckdb

### Is this a discrepancy vs. dbt 1.x?

- [x] Yes — this works in dbt 1.x but not in dbt v2.x

### Additional Context

[This page](https://docs.getdbt.com/docs/dbt/dbt-availability?version=2) indicates that at least a "lite" form of the docs site should be available under the OSS version.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.