diff --git a/.mintlify/ia-map.yml b/.mintlify/ia-map.yml
index bae5b8e0..331a508e 100644
--- a/.mintlify/ia-map.yml
+++ b/.mintlify/ia-map.yml
@@ -77,6 +77,9 @@ integrations/dbt:
for: The dbt integration. dbt is one way to express the semantic layer, not a requirement of it.
not: Modeling advice, which outlives the dbt dependency (semantic-layer).
+integrations/google-sheets:
+ for: Connecting Google Sheets, exporting results, and querying Lightdash from the add-on.
+
workspace-admin:
for: Governance that affects other people.
not: One person's own preference or credential (personal-settings).
diff --git a/agents/effective-analytics-with-agents.mdx b/agents/effective-analytics-with-agents.mdx
index 9cffe8b9..ffb076cc 100644
--- a/agents/effective-analytics-with-agents.mdx
+++ b/agents/effective-analytics-with-agents.mdx
@@ -63,7 +63,13 @@ Because "always include" changes every future response, switching a document *to
### View, edit, or download a document
-You don't need to delete and re-upload a document to fix a typo, refresh guidance, or update frontmatter. In the agent's knowledge documents list, select the document and click the **View and edit document** (eye) icon to open the fullscreen viewer. From there, click **Edit** to make changes or **Download** to save a copy of the current file.
+#### Open a document
+
+In the agent's knowledge documents list, select the document and click the **View and edit document** (eye) icon to open the fullscreen viewer. Read the document there, or click **Download** to save a copy of the current file.
+
+#### Edit a document
+
+From the document viewer, click **Edit** to change the document. You don't need to delete and re-upload it to fix a typo, refresh guidance, or update frontmatter.
You can edit the document's name and content. Markdown documents open in an editor with a live preview, while plain-text documents open in a monospace text area. YAML frontmatter remains in the raw Markdown source but isn't shown in the preview.
diff --git a/embed/reference.mdx b/embed/reference.mdx
index 101b7cb7..7ac44c08 100644
--- a/embed/reference.mdx
+++ b/embed/reference.mdx
@@ -119,7 +119,8 @@ All configuration options (`dashboardFiltersInteractivity`, `canExportCsv`, `can
},
// Export capabilities
- canExportCsv?: boolean, // Allow CSV export
+ canExportCsv?: boolean, // Allow per-chart CSV export
+ canExportDashboardCsv?: boolean, // Allow dashboard CSV/XLSX ZIP export
canExportImages?: boolean, // Allow image/PNG export
canExportPagePdf?: boolean, // Allow PDF export
@@ -631,6 +632,14 @@ Control what users can export from embedded content.

+### Export all dashboard tiles
+
+Set `content.canExportDashboardCsv: true` to show **Export all tiles** in the embedded dashboard header. Viewers can choose **Export all as .csv (.zip)** or **Export all as .xlsx (.zip)** to download the dashboard's chart tiles in a ZIP archive.
+
+This option is off by default and independent of `canExportCsv`, which controls per-chart CSV downloads. It applies only to the dashboard identified by the embed token. In scope-based embed permissions, the corresponding scope is `view:EmbedDashboardCsvExport`.
+
+Exports use formatted values, each chart's table row limit, and pivoted results. They apply the current dashboard filters, date zoom, and parameter values. The embedded export menu uses these defaults without an export-options dialog.
+
### Date zoom
Allows users to zoom into time-series data by changing granularity.
@@ -661,10 +670,7 @@ Users can:
- Change chart types
- Run custom queries
-Users cannot:
-- Save charts
-- Share results
-- View SQL
+The `canExplore` option alone does not allow users to save charts, share results, or view SQL. To let users save new charts from Explore, configure a [writeActions claim](#write-actions).
### View underlying data
diff --git a/explore/metrics-catalog.mdx b/explore/metrics-catalog.mdx
index 4298d848..89d3794a 100644
--- a/explore/metrics-catalog.mdx
+++ b/explore/metrics-catalog.mdx
@@ -22,3 +22,15 @@ The Metrics page has two views, switched with the toggle in the top-right corner
- **Metric/model level** — per-metric overrides, set under `meta.spotlight` in your dbt model `.yml` (see [curating the catalog](/explore/metrics-catalog/curate-the-catalog#curating-metrics-catalog-for-your-business-users))
Whenever you see `spotlight` in YAML, it's configuring something on this page.
+
+## View catalog column configuration
+
+The metrics catalog table has a **Manage column visibility** control (the eye icon). Open it to see which columns are shown and the order they appear in. The **Metric** column is pinned: it cannot be hidden or moved.
+
+You can toggle the other columns or drag their handles to reorder them for your current view. **Discard** returns to the saved project configuration. Reading the project's saved column configuration uses the **View spotlight table configuration** permission.
+
+## Save catalog column configuration
+
+Users with **Configure spotlight table settings** permission can save the catalog's column visibility and order for everyone in the project. Open **Manage column visibility**, adjust the columns, and select **Save for everyone**.
+
+If there are unsaved changes, **Discard** restores the saved configuration. With no unsaved changes, **Reset** removes the project's saved configuration and restores the default columns for everyone. These controls configure the catalog table's columns; metric visibility, categories, and time defaults are configured separately through [the spotlight YAML namespace](#the-spotlight-config).
diff --git a/explore/metrics-catalog/build-saved-trees.mdx b/explore/metrics-catalog/build-saved-trees.mdx
index 88a4a662..f0891268 100644
--- a/explore/metrics-catalog/build-saved-trees.mdx
+++ b/explore/metrics-catalog/build-saved-trees.mdx
@@ -27,7 +27,7 @@ You build and view Saved Trees on a canvas: switch to the canvas view using the
1. **Start a new tree**: In the **Saved Trees** sidebar, click **New** to enter edit mode, and type a name in the text input at the top of the canvas.
2. **Find your metrics**: Use the search bar, categories, or table filters to narrow down the metrics sidebar. Click **Load more** at the bottom to pull additional metrics from the catalog.
-3. **Add metrics**: Drag metrics from the sidebar onto the canvas.
+3. **Add metrics**: Click the plus button beside a metric in the sidebar to add it to the canvas, or drag the metric onto the canvas.
4. **Create connections**: Drag between node handles to draw edges representing relationships and dependencies. Metrics with [drivers](/explore/metrics-catalog/drivers) defined in `.yml` get their edges drawn automatically.
5. **Remove nodes**: Select a node and press **Backspace** to delete it.
6. **Save**: Click **Save**. The button is disabled until you provide a name and add at least one node.
diff --git a/explore/metrics-catalog/drivers.mdx b/explore/metrics-catalog/drivers.mdx
index 0e484cda..558636cd 100644
--- a/explore/metrics-catalog/drivers.mdx
+++ b/explore/metrics-catalog/drivers.mdx
@@ -107,6 +107,8 @@ metrics:
In Saved Trees, driver edges are displayed alongside manually-created edges, giving you a complete picture of both the relationships you've drawn and the ones defined in your data model.
+While editing a Saved Tree, click **Add drivers from YAML** on a metric to add its missing driver metrics to the canvas. Their driver edges appear automatically.
+
Driver edges cannot be removed from a Saved Tree. If you don't want a driver edge to appear, remove one of its endpoint nodes from the canvas.
diff --git a/explore/sql-runner.mdx b/explore/sql-runner.mdx
index 5eb43dcd..d02183da 100644
--- a/explore/sql-runner.mdx
+++ b/explore/sql-runner.mdx
@@ -41,7 +41,7 @@ You can access your **Query history** from your session by clicking on the `SQL
Once you've run your query, you can either:
-1. [**Build and save a Chart**](#building-charts-in-the-sql-runner)
+1. [**Build and save a Chart**](#saved-charts-in-the-sql-runner)
2. [**Create a Virtual View so your query becomes a reusable table in Lightdash**](/semantic-layer/virtual-views)
3. [**Write-back to dbt so your query is saved as a governed model.**](/integrations/dbt/write-back)
4. Click the link icon in the top-right to share your query draft with a coworker (or save it yourself to return to later).
diff --git a/explore/verified-content.mdx b/explore/verified-content.mdx
index dc1544e8..2c09a1fb 100644
--- a/explore/verified-content.mdx
+++ b/explore/verified-content.mdx
@@ -67,12 +67,18 @@ The tool returns both admin-verified content and [verified answers](/agents/veri
This works hand in hand with [verified answers](/agents/verified-answers), where users mark answers an AI agent produced as good examples. When one of those answers is saved as a chart or dashboard, verifying it also makes it verified content — see [Verified answers and verified content](#verified-answers-and-verified-content) below.
+## Who can edit or delete verified content
+
+Editing or deleting a verified chart or dashboard requires the usual permission to edit or delete that content, plus **Edit or delete verified charts and dashboards** (`manage:VerifiedContent`). The original verifier can also change the content without that additional scope. Developers and admins receive the scope by default; a custom role can grant it to other users.
+
+Without that scope or the original-verifier exception, verified content is read-only. Permission to edit verified content is separate from permission to preserve or apply its verified badge when saving.
+
## What happens to verification when content is edited
Verification is tied to the exact state of the content at the time it was verified, so editing a verified chart or dashboard puts its badge at risk. To make sure the badge never disappears silently, Lightdash shows a confirmation dialog whenever you save changes to verified content. What you can do in that dialog depends on whether you're allowed to preserve verification:
- **If you can verify content** (you have verify permission, or you're the original verifier), you're offered the choice to keep the badge as part of saving. Choosing **Save & verify** re-approves the current version and keeps the badge (updating the verification timestamp to your save); choosing **Save** drops it.
-- **If you can't verify content** (for example, an editor saving a chart verified by someone else), saving removes the badge. You're warned first and can cancel, but you can't keep it — someone with verify permission then needs to review the updated version and re-verify it.
+- **If you can't verify content** (for example, a custom role that allows editing verified content but not verifying it), saving removes the badge. You're warned first and can cancel, but you can't keep it — someone with verify permission then needs to review the updated version and re-verify it.
This guarantees a verified badge always reflects content that someone with verify permission has explicitly approved in its current form.
@@ -83,7 +89,7 @@ The confirmation dialog comes in two variants:
- **If you can keep the badge** (verify permission or original verifier), you get a **Keep this verified after saving?** prompt with two options: **Save** drops the badge, and **Save & verify** keeps it and updates the verification timestamp to your save. Note there's no automatic retention — even the original verifier keeps the badge only by choosing **Save & verify**.
- **If you cannot keep the badge**, you get a warning: *"Saving your changes will remove its verified status until someone verifies it again."* You can **Cancel** to back out, or **Save anyway** to save and drop the badge.
-For example, if an editor on your team edits the **Ecom sales overview** dashboard (verified by a developer), they'll see the warning and can decide whether to save and drop the badge or cancel and let the developer make the change instead.
+For example, if a user with permission to edit verified content but not to verify it edits the **Ecom sales overview** dashboard (verified by someone else), they'll see the warning and can decide whether to save and drop the badge or cancel and let the verifier make the change instead.
## Verified answers and verified content
diff --git a/explore/version-history.mdx b/explore/version-history.mdx
index 7b427874..ec7f2884 100644
--- a/explore/version-history.mdx
+++ b/explore/version-history.mdx
@@ -66,14 +66,16 @@ For more granular control over chart changes, use the chart's own version histor
## Recently deleted charts and dashboards
-Charts and dashboards deleted in the last 30 days can be restored or permanently deleted from the **Recently deleted** page in project settings.
+When soft delete is enabled, charts and dashboards deleted within the retention window (30 days by default) can be restored or permanently deleted from the **Recently deleted** page in project settings.
+
+You need access to the project. Users with **Manage soft-deleted content** (`manage:DeletedContent`) can review and manage items deleted by other users. Without that permission, you can only see and manage items you deleted.
To access it, go to **Project settings** → **Recently deleted**. For each item you'll see who deleted it and when, along with options to:
* **Restore** the item back to its original space.
-* **Delete permanently** to remove it immediately.
+* **Delete permanently** to remove it immediately. Confirm **Delete permanently** in the dialog; the item can no longer be restored.
-Items in **Recently deleted** are automatically purged after 30 days.
+Items in **Recently deleted** are automatically purged after the configured retention window.
Self-hosted Soft delete is opt-in. Set `SOFT_DELETE_ENABLED=true` to route deletes through **Recently deleted** instead of removing items immediately, and optionally set `SOFT_DELETE_RETENTION_DAYS` (default `30`) to change the retention window. See [environment variables](/self-host/customize-deployment/environment-variables).
diff --git a/integrations/google-sheets/add-on.mdx b/integrations/google-sheets/add-on.mdx
index 300e96bf..0bf78222 100644
--- a/integrations/google-sheets/add-on.mdx
+++ b/integrations/google-sheets/add-on.mdx
@@ -6,7 +6,7 @@ tag: "Experimental"
---
- The add-on is built and supported by Lightdash. [What Experimental means](/support/feature-maturity-levels).
+ Experimental The add-on is built and supported by Lightdash. [What Experimental means](/support/feature-maturity-levels).
Lightdash for Google Sheets™ is an add-on that runs inside Google Sheets™ as a sidebar so you can build and load queries from your Lightdash instance without leaving the spreadsheet. It connects to your instance with OAuth and uses your existing Lightdash permissions, user attributes, and caching.
diff --git a/workflow/content-as-code.mdx b/workflow/content-as-code.mdx
index 20fad59f..6735a1eb 100644
--- a/workflow/content-as-code.mdx
+++ b/workflow/content-as-code.mdx
@@ -11,7 +11,7 @@ There are two main approaches to working with content as code. You can mix and m
| | Disposable editing | Git-managed dashboards |
| --- | --- | --- |
| **Source of truth** | Lightdash UI | Git repository |
-| **UI editing** | Anyone can edit freely | Restricted to view-only for managed content |
+| **UI editing** | Users with edit access can edit | Restricted to view-only for managed content |
| **Version history** | Lightdash's built-in history | Full Git audit trail with diffs and blame |
| **Review process** | None required | Pull requests with approvals |
| **Setup complexity** | Minimal — just the CLI | Requires CI/CD and space permissions |
@@ -233,7 +233,7 @@ This will upload all content from: `/Users/katiehindson/lightdash/lightdash-anal
You can also use relative paths like:
```bash
-lightdash download -p ../
+lightdash upload -p ../
```
### Specify a project to upload to
diff --git a/workspace-admin/usage-analytics.mdx b/workspace-admin/usage-analytics.mdx
index d8f255c5..9eea4bc0 100644
--- a/workspace-admin/usage-analytics.mdx
+++ b/workspace-admin/usage-analytics.mdx
@@ -40,7 +40,7 @@ Here's an overview of the fields used in the dashboard:
- **Weekly average number of queries per user**: the rolling 7 day average number of queries that each user is running in your project.
- **Users that have run the most queries in the last 7 days**: a list of the users that have run the most queries in your project in the last 7 days.
- **Users that have updated the most charts in the last 7 days**: a list of users that have updated (including created) the most charts in the project in the last 7 days.
-- **Users that have not run a query in the last 90 days**: a list of users that have not run a query in the project in the last 7 days. This includes viewing charts and dashboards.
+- **Users that have not run a query in the last 90 days**: a list of users that have not run a query in the project in the last 90 days. This includes viewing charts and dashboards.
#### Extended usage analytics