diff --git a/_docs/v0.63/README.md b/_docs/v0.63/README.md index 12cb64570b..7841f5d3fb 100644 --- a/_docs/v0.63/README.md +++ b/_docs/v0.63/README.md @@ -190,6 +190,7 @@ Metabase's reference documentation. - [Managing people and groups](./people-and-groups/managing) - [Password complexity](./people-and-groups/changing-password-complexity) - [Session expiration](./people-and-groups/changing-session-expiration) +- [Two-factor authentication](./people-and-groups/two-factor-authentication) - [Google Sign-In](./people-and-groups/google-sign-in) - [LDAP](./people-and-groups/ldap) - [API keys](./people-and-groups/api-keys) diff --git a/_docs/v0.63/api.json b/_docs/v0.63/api.json index 0359a4563a..6ef540efd5 100644 --- a/_docs/v0.63/api.json +++ b/_docs/v0.63/api.json @@ -4906,7 +4906,13 @@ } }, "required" : [ "channel_type", "details" ] - }, { } ] + }, { + "type" : "object", + "properties" : { + "channel_type" : { } + }, + "required" : [ "channel_type" ] + } ] }, "metabase.channel.models.channel.ChannelTemplateEmailDetails" : { "oneOf" : [ { @@ -4975,7 +4981,13 @@ } }, "required" : [ "channel_type", "details" ] - }, { } ] + }, { + "type" : "object", + "properties" : { + "channel_type" : { } + }, + "required" : [ "channel_type" ] + } ] }, "metabase.collections-rest.api.DashboardQuestionCandidate" : { "type" : "object", @@ -43390,7 +43402,7 @@ "get" : { "operationId" : "get-api-search", "summary" : "GET /api/search", - "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n `context` identifies the surface issuing the search; it selects the ranking weights and filter defaults.\n It defaults to `api`, the value for programmatic callers.\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filter_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `vector_search_strategy`: for the semantic engine: `hnsw` (approximate index search, default),\n `brute-force` (exact filter-first search), or `hnsw-iterative-relaxed` / `hnsw-iterative-strict`\n (index-backed iterative scans with inline filters); ignored by other engines\n - `vector_search_ef_search`: override pgvector's `hnsw.ef_search` (1-1000) for the iterative strategies; (admin only)\n - `vector_search_max_scan_tuples`: override pgvector's `hnsw.max_scan_tuples` for the iterative strategies; (admin only)\n - `vector_search_explain`: set to true to record vector-scan instrumentation for this search (expensive); (admin only)\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n - `display_type`: search for cards/models with specific display types\n - `non_temporal_dim_ids`: search for cards/metrics/datasets with this exact set of non temporal dimension field IDs (requires appdb engine)\n - `has_temporal_dim`: set to true for cards/metrics/datasets with 1 or more temporal dimensions (requires appdb engine)\n\n Note that not all item types support all filters, and the results will include only models that support the provided\n filters. For example:\n\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", + "description" : "Search for items in Metabase.\n For the list of supported models, check [[metabase.search.config/all-models]].\n\n `context` identifies the surface issuing the search; it selects the ranking weights and filter defaults.\n It defaults to `api`, the value for programmatic callers.\n\n Filters:\n - `archived`: set to true to search archived items only, default is false\n - `table_db_id`: search for tables, cards, and models of a certain DB\n - `models`: only search for items of specific models. If not provided, search for all models\n - `filter_items_in_personal_collection`: only search for items in personal collections\n - `created_at`: search for items created at a specific timestamp\n - `created_by`: search for items created by a specific user\n - `last_edited_at`: search for items last edited at a specific timestamp\n - `last_edited_by`: search for items last edited by a specific user\n - `search_native_query`: set to true to search the content of native queries\n - `vector_search_strategy`: for the semantic engine: `hnsw` (approximate index search, default),\n `brute-force` (exact filter-first search), or `hnsw-iterative-relaxed` / `hnsw-iterative-strict`\n (index-backed iterative scans with inline filters); ignored by other engines\n - `vector_search_ef_search`: override pgvector's `hnsw.ef_search` (1-1000) for the iterative strategies; (admin only)\n - `vector_search_max_scan_tuples`: override pgvector's `hnsw.max_scan_tuples` for the iterative strategies; (admin only)\n - `vector_search_explain`: set to true to record vector-scan instrumentation for this search (expensive); (admin only)\n - `verified`: set to true to search for verified items only (requires Content Management or Official Collections premium feature)\n - `ids`: search for items with those ids, works iff single value passed to `models`\n - `display_type`: search for cards/models with specific display types\n\n Note that not all item types support all filters, and the results will include only models that support the provided\n filters. For example:\n\n - The `created-by` filter supports dashboards, models, actions, and cards.\n - The `verified` filter supports models and cards.\n\n A search query that has both filters applied will only return models and cards.", "parameters" : [ { "in" : "query", "name" : "q", @@ -43692,29 +43704,6 @@ "type" : "null" } ] } - }, { - "in" : "query", - "name" : "non_temporal_dim_ids", - "required" : false, - "schema" : { - "oneOf" : [ { - "type" : "string", - "minLength" : 1 - }, { - "type" : "null" - } ] - } - }, { - "in" : "query", - "name" : "has_temporal_dim", - "required" : false, - "schema" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - } } ], "responses" : { "2XX" : { @@ -44036,29 +44025,6 @@ "type" : "null" } ] } - }, { - "in" : "query", - "name" : "non_temporal_dim_ids", - "required" : false, - "schema" : { - "oneOf" : [ { - "type" : "string", - "minLength" : 1 - }, { - "type" : "null" - } ] - } - }, { - "in" : "query", - "name" : "has_temporal_dim", - "required" : false, - "schema" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - } }, { "in" : "query", "name" : "expected_result_type", diff --git a/_docs/v0.63/developers-guide/custom-visualizations.md b/_docs/v0.63/developers-guide/custom-visualizations.md index 996788cd0a..3b5e3eaede 100644 --- a/_docs/v0.63/developers-guide/custom-visualizations.md +++ b/_docs/v0.63/developers-guide/custom-visualizations.md @@ -275,7 +275,7 @@ settings: { | `group` | Sub-heading within a section for grouping related settings. | | `index` | Display order within a group. | | `inline` | When `true`, renders the widget on the same line as `title` (handy for `"toggle"`). | -| `widget` | A [built-in widget](#built-in-widgets) name, or a [custom React component](#custom-widgets). | +| `widget` | A [built-in widget](#built-in-widgets) name, or a [custom React component](#custom-widgets). | | `getDefault(series, settings)` | Computes the default value when none is stored. | | `getValue(series, settings)` | Always-computed value — overrides the stored value on every render. | | `getProps(series, settings)` | Returns widget-specific props. | @@ -424,13 +424,15 @@ Metabase runs plugin code in an isolated sandbox, so a visualization works only - **Navigation and the rest of the app**: history changes, the host page's URL and referrer, and any DOM outside the plugin's own container. - **Unsafe DOM and timing APIs**: `document.write`, `execCommand`, constructable stylesheets, raw HTML parsers (`DOMParser`, `setHTMLUnsafe`, `XSLTProcessor`), and resource-timing APIs that expose other requests the page has made. -### Custom visualizations don't render in embeds or public links +### When embedding, custom visualizations are only available in the SDK -[Embeds](../embedding/introduction) and [public links](../embedding/public-links) (to questions, dashboards, and documents) don't render custom visualizations. Any card that uses one falls back to the default visualization (a table). +The [Modular embedding SDK](../embedding/sdk/introduction) renders custom visualizations when you allowlist them with the [`allowedCustomVisualizations` prop](../embedding/sdk/config#custom-visualizations) on `MetabaseProvider`. + +Other embedding types don't render custom visualizations. In [modular embedding](../embedding/modular-embedding) with web components and [public links](../embedding/public-links), any card that uses a custom visualization falls back to the default visualization for the query's results. ### Custom visualizations don't render in exports and subscriptions -Static renders—like charts in alerts or dashboard subscriptions—fall back to a table for any card that uses a custom visualization. +Static renders—like charts in alerts or dashboard subscriptions—fall back to a default visualization for the card's data shape. ## Example plugins diff --git a/_docs/v0.63/embedding/introduction.md b/_docs/v0.63/embedding/introduction.md index aa0248b973..a140dd785e 100644 --- a/_docs/v0.63/embedding/introduction.md +++ b/_docs/v0.63/embedding/introduction.md @@ -67,23 +67,24 @@ If you'd like to share your data with the good people of the internet, admins ca ## Comparison of embedding types -| Action | [Modular SDK](./sdk/introduction) | [Modular SSO](./modular-embedding) | [Modular Guest](./guest-embedding) | [Full app](./full-app-embedding) | [Public](../embedding/public-links) | -| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ------------------------------------- | ------------------------------------- | ----------------------------------- | -------------------------------------- | -| Charts and dashboards | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Filter widgets](/glossary/filter-widget) | ✅ | ✅ | ✅ | ✅ | ✅ | -| Export results\* | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Locked filters](./static-embedding-parameters#restricting-data-in-a-static-embed-with-locked-parameters) | ❌ | ❌ | ✅ | ❌ | ❌ | -| [Data segregation](../permissions/embedding) | ✅ | ✅ | ❌ | ✅ | ❌ | -| [Drill-through menu](../questions/visualizations/drill-through) | ✅ | ✅ | ❌ | ✅ | ❌ | -| [Query builder](../questions/query-builder/editor) | ✅ | ✅ | ❌ | ✅ | ❌ | -| [Basic appearance customization](../configuring-metabase/appearance)\*\* | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Advanced theming](./appearance) | ✅ | ✅ | ❌ | ❌ | ❌ | -| [Usage analytics](../usage-and-performance-tools/usage-analytics) | ✅ | ✅ | ❌ | ✅ | ❌ | -| Embed individual Metabase components | ✅ | ✅ | ❌ | ❌ | ❌ | -| Manage access and interactivity per component | ✅ | ✅ | ❌ | ❌ | ❌ | -| Custom layouts | ✅ | ❌ | ❌ | ❌ | ❌ | -| Customize behavior with [plugins](./sdk/plugins) | ✅ | ❌ | ❌ | ❌ | ❌ | -| AI chat | ✅ | ✅ | ❌ | ✅ | ❌ | +| Action | [Modular SDK](./sdk/introduction) | [Modular SSO](./modular-embedding) | [Modular Guest](./guest-embedding) | [Full app](./full-app-embedding) | [Public](../embedding/public-links) | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------ | ------------------------------------- | ------------------------------------- | ----------------------------------- | -------------------------------------- | +| Charts and dashboards | ✅ | ✅ | ✅ | ✅ | ✅ | +| [Filter widgets](/glossary/filter-widget) | ✅ | ✅ | ✅ | ✅ | ✅ | +| Export results\* | ✅ | ✅ | ✅ | ✅ | ✅ | +| [Locked filters](./static-embedding-parameters#restricting-data-in-a-static-embed-with-locked-parameters) | ❌ | ❌ | ✅ | ❌ | ❌ | +| [Data segregation](../permissions/embedding) | ✅ | ✅ | ❌ | ✅ | ❌ | +| [Drill-through menu](../questions/visualizations/drill-through) | ✅ | ✅ | ❌ | ✅ | ❌ | +| [Query builder](../questions/query-builder/editor) | ✅ | ✅ | ❌ | ✅ | ❌ | +| [Basic appearance customization](../configuring-metabase/appearance)\*\* | ✅ | ✅ | ✅ | ✅ | ✅ | +| [Advanced theming](./appearance) | ✅ | ✅ | ❌ | ❌ | ❌ | +| [Usage analytics](../usage-and-performance-tools/usage-analytics) | ✅ | ✅ | ❌ | ✅ | ❌ | +| Embed individual Metabase components | ✅ | ✅ | ❌ | ❌ | ❌ | +| Manage access and interactivity per component | ✅ | ✅ | ❌ | ❌ | ❌ | +| Custom layouts | ✅ | ❌ | ❌ | ❌ | ❌ | +| Customize behavior with [plugins](./sdk/plugins) | ✅ | ❌ | ❌ | ❌ | ❌ | +| [Custom visualizations](../questions/visualizations/custom) | ✅ | ❌ | ❌ | ❌ | ❌ | +| AI chat | ✅ | ✅ | ❌ | ✅ | ❌ | \* Each embedding type allows data downloads by default, but only [Pro and Enterprise](/pricing/) plans can disable data downloads. @@ -110,7 +111,7 @@ For information about the anonymous usage data Metabase collects from embedded c ## Embedding limitations - Currently, you can't embed [documents](../documents/introduction) (though you can create [public documents](./public-links)). -- Embeds don't render [custom visualizations](../questions/visualizations/custom): any card that uses one falls back to the default visualization (a table). +- Only the [Modular embedding SDK](./sdk/introduction) renders [custom visualizations](../questions/visualizations/custom), and only ones you allowlist with the [`allowedCustomVisualizations` prop](./sdk/config#custom-visualizations). In other embedding types, any card that uses a custom visualization falls back to the default visualization for the query's results. ## Further reading diff --git a/_docs/v0.63/embedding/sdk/api/CollectionBrowser.html b/_docs/v0.63/embedding/sdk/api/CollectionBrowser.html index 2fbf361f85..3fdb4c2df3 100644 --- a/_docs/v0.63/embedding/sdk/api/CollectionBrowser.html +++ b/_docs/v0.63/embedding/sdk/api/CollectionBrowser.html @@ -17,6 +17,7 @@
  • OptionalEmptyContentComponent?: ComponentType | null

    A component to display when there are no items in the collection.

  • OptionalonClick?: (item: MetabaseCollectionItem) => void

    A function to call when an item is clicked.

  • OptionalpageSize?: number

    The number of items to display per page. The default is 25.

    +
  • OptionalshowDashboardQuestions?: boolean

    Whether to show questions that belong to a dashboard alongside collection saved questions. Set to false to hide them and keep the list focused on collection content, matching the core Metabase app. Defaults to true.

  • Optionalstyle?: CSSProperties

    A custom style object to be added to the root element.

  • OptionalvisibleColumns?: CollectionBrowserListColumns[]

    The columns to display in the collection items table. If not provided, all columns will be shown.

  • OptionalvisibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[]

    The types of entities that should be visible. If not provided, all entities will be shown.

    diff --git a/_docs/v0.63/embedding/sdk/api/CollectionBrowserProps.html b/_docs/v0.63/embedding/sdk/api/CollectionBrowserProps.html index 7aa62fe2be..7812756bd4 100644 --- a/_docs/v0.63/embedding/sdk/api/CollectionBrowserProps.html +++ b/_docs/v0.63/embedding/sdk/api/CollectionBrowserProps.html @@ -11,11 +11,12 @@ - /docs/v0.63/embedding/api/CollectionBrowserProps --- -CollectionBrowserProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface CollectionBrowserProps

    interface CollectionBrowserProps {
        className?: string;
        collectionId?: SdkCollectionId;
        EmptyContentComponent?: ComponentType | null;
        onClick?: (item: MetabaseCollectionItem) => void;
        pageSize?: number;
        style?: CSSProperties;
        visibleColumns?: CollectionBrowserListColumns[];
        visibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[];
    }
    Index

    Properties

    className? +CollectionBrowserProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Interface CollectionBrowserProps

    interface CollectionBrowserProps {
        className?: string;
        collectionId?: SdkCollectionId;
        EmptyContentComponent?: ComponentType | null;
        onClick?: (item: MetabaseCollectionItem) => void;
        pageSize?: number;
        showDashboardQuestions?: boolean;
        style?: CSSProperties;
        visibleColumns?: CollectionBrowserListColumns[];
        visibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[];
    }
    Index

    Properties

    EmptyContentComponent?: ComponentType | null

    A component to display when there are no items in the collection.

    onClick?: (item: MetabaseCollectionItem) => void

    A function to call when an item is clicked.

    pageSize?: number

    The number of items to display per page. The default is 25.

    +
    showDashboardQuestions?: boolean

    Whether to show questions that belong to a dashboard alongside collection saved questions. Set to false to hide them and keep the list focused on collection content, matching the core Metabase app. Defaults to true.

    A custom style object to be added to the root element.

    visibleColumns?: CollectionBrowserListColumns[]

    The columns to display in the collection items table. If not provided, all columns will be shown.

    visibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[]

    The types of entities that should be visible. If not provided, all entities will be shown.

    -

    +
    diff --git a/_docs/v0.63/embedding/sdk/api/assets/search.js b/_docs/v0.63/embedding/sdk/api/assets/search.js index 06e697d9e6..b9e6d50ef6 100644 --- a/_docs/v0.63/embedding/sdk/api/assets/search.js +++ b/_docs/v0.63/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/_docs/v0.63/embedding/sdk/api/snippets/CollectionBrowserProps.md b/_docs/v0.63/embedding/sdk/api/snippets/CollectionBrowserProps.md index 83c0e96de7..c023b71b1d 100644 --- a/_docs/v0.63/embedding/sdk/api/snippets/CollectionBrowserProps.md +++ b/_docs/v0.63/embedding/sdk/api/snippets/CollectionBrowserProps.md @@ -15,15 +15,16 @@ layout: new-docs -| Property | Type | Description | -| :---------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `className?` | `string` | A custom class name to be added to the root element. | -| `collectionId?` | [`SdkCollectionId`](./api/SdkCollectionId) | The numerical ID of the collection, "personal" for the user's personal collection, "tenant" for the user's tenant collection, or "root" for the root collection. You can find this ID in the URL when accessing a collection in your Metabase instance. For example, the collection ID in `http://localhost:3000/collection/1-my-collection` would be `1`. Defaults to "personal" | -| `EmptyContentComponent?` | \| [`ComponentType`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L104) \| `null` | A component to display when there are no items in the collection. | -| `onClick?` | (`item`: [`MetabaseCollectionItem`](./api/MetabaseCollectionItem)) => `void` | A function to call when an item is clicked. | -| `pageSize?` | `number` | The number of items to display per page. The default is 25. | -| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | -| `visibleColumns?` | [`CollectionBrowserListColumns`](./api/CollectionBrowserListColumns)[] | The columns to display in the collection items table. If not provided, all columns will be shown. | -| `visibleEntityTypes?` | (`"collection"` \| `"dashboard"` \| `"question"` \| `"model"`)[] | The types of entities that should be visible. If not provided, all entities will be shown. | +| Property | Type | Description | +| :------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `className?` | `string` | A custom class name to be added to the root element. | +| `collectionId?` | [`SdkCollectionId`](./api/SdkCollectionId) | The numerical ID of the collection, "personal" for the user's personal collection, "tenant" for the user's tenant collection, or "root" for the root collection. You can find this ID in the URL when accessing a collection in your Metabase instance. For example, the collection ID in `http://localhost:3000/collection/1-my-collection` would be `1`. Defaults to "personal" | +| `EmptyContentComponent?` | \| [`ComponentType`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L104) \| `null` | A component to display when there are no items in the collection. | +| `onClick?` | (`item`: [`MetabaseCollectionItem`](./api/MetabaseCollectionItem)) => `void` | A function to call when an item is clicked. | +| `pageSize?` | `number` | The number of items to display per page. The default is 25. | +| `showDashboardQuestions?` | `boolean` | Whether to show questions that belong to a dashboard alongside collection saved questions. Set to false to hide them and keep the list focused on collection content, matching the core Metabase app. Defaults to true. | +| `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | +| `visibleColumns?` | [`CollectionBrowserListColumns`](./api/CollectionBrowserListColumns)[] | The columns to display in the collection items table. If not provided, all columns will be shown. | +| `visibleEntityTypes?` | (`"collection"` \| `"dashboard"` \| `"question"` \| `"model"`)[] | The types of entities that should be visible. If not provided, all entities will be shown. | diff --git a/_docs/v0.63/embedding/sdk/config.md b/_docs/v0.63/embedding/sdk/config.md index 3068f58305..79ed776a30 100644 --- a/_docs/v0.63/embedding/sdk/config.md +++ b/_docs/v0.63/embedding/sdk/config.md @@ -39,6 +39,21 @@ To pass a theme, use `defineMetabaseTheme`. See [Reuse a saved theme in the SDK] {% include_file "{{ dirname }}/api/snippets/MetabaseProviderProps.md" snippet="properties" %} +## Custom visualizations + +The SDK can render [custom visualizations](../../questions/visualizations/custom). To allow custom visualizations in the embed, pass an allowlist of the custom visualizations to the `allowedCustomVisualizations` prop on `MetabaseProvider`: + +```typescript +{% include_file "{{ dirname }}/snippets/config/config-with-custom-visualizations.tsx" snippet="example" %} +``` + +Only the custom visualizations you list will load. Each entry is the visualization's name (the manifest `name`, which you can find under **Admin** > **Settings** > **Custom visualizations** > **Manage visualizations**), prefixed with `custom:`. For example, a custom visualization named `Calendar Heatmap` becomes `"custom:Calendar Heatmap"`. Names are case-sensitive, so `"custom:calendar heatmap"` won't match a visualization named `Calendar Heatmap`. + +Omitting the prop, or passing an empty array, turns off custom visualizations. Cards that use a custom visualization will fall back to the default visualization for the query's results. If you allowlist a name that doesn't match an installed custom visualization, the SDK logs a warning to the console and falls back to the default visualization. + + +For security, the SDK runs each custom visualization's code in an isolated sandbox, so a visualization can't reach your app or make network requests. The sandbox doesn't block passive image loads, though. A visualization can still trigger outbound requests through `` tags or CSS `url()`. To limit where custom visualizations can load images from, set a Content Security Policy with an `img-src` allowlist in your app (the core Metabase app does this with [Restrict image domains](../../configuring-metabase/settings#restrict-image-domains)). [Only add visualizations you trust](../../questions/visualizations/custom#only-add-visualizations-you-trust). + ## Global event handlers You can listen for events by defining the `eventHandlers` prop for `MetabaseProvider`. diff --git a/_docs/v0.63/embedding/sdk/snippets/config/config-with-custom-visualizations.tsx b/_docs/v0.63/embedding/sdk/snippets/config/config-with-custom-visualizations.tsx new file mode 100644 index 0000000000..eda95fe244 --- /dev/null +++ b/_docs/v0.63/embedding/sdk/snippets/config/config-with-custom-visualizations.tsx @@ -0,0 +1,20 @@ +import type { PropsWithChildren } from "react"; +import { + type MetabaseAuthConfig, + MetabaseProvider, +} from "@metabase/embedding-sdk-react"; + +const authConfig = {} as MetabaseAuthConfig; + +const Example = ({ children }: PropsWithChildren) => ( + // [] + + {children} + + // [] +); diff --git a/_docs/v0.63/people-and-groups/account-settings.md b/_docs/v0.63/people-and-groups/account-settings.md index e630b022a2..a97662ea6a 100644 --- a/_docs/v0.63/people-and-groups/account-settings.md +++ b/_docs/v0.63/people-and-groups/account-settings.md @@ -12,43 +12,76 @@ redirect_from: - /docs/v0.63/users-guide/account-settings --- -# Account settings - -To access your account settings, click the **profile or grid icon** in the top right corner, then click your **profile name and email.** - -## Account profile - -You can set your first and last names, change your email address, and set your language. See our list of [supported languages](../configuring-metabase/localization). - -## Theme - -You can choose to display Metabase in light or dark mode. - -To quickly toggle dark mode, use the [command palette](../exploration-and-organization/exploration#command-palette). - -The theme only applies to your account. The theme doesn't apply to chart colors or embedded Metabases. - -## Account password - -You can change your password here. Note that if your Metabase uses Single Sign-On (SSO), your administrator will have disabled this password section, as your identity provider will manage logins. - -If you're having trouble logging in, see our [People can't log into Metabase](../troubleshooting-guide/cant-log-in). - -## Account login history - -The login history lists each login, along with some location information (if available), and some client information (like Browser (Firefox/Windows)). -If you see any suspicious login attempts, change your password and notify your administrator. - -### A note about new login emails - -Whenever you log in from a new device, Metabase will send you an email just to let you know someone (presumably you) has logged in from an unrecognized device. If you see this email, but don't remember logging in, or don't recognize the device, change your password and let your administrator know. - -## Disable animations in Metabase - -This isn't an in-Metabase setting, but just so you know: you can disable UI animations in Metabase (like sidebars sliding around, or rotating spinners) by changing the settings for your operating system so it respects the `prefers-reduced-motion` CSS media feature. This change will also affect other applications, not just Metabase. Check out the instructions for how to set the user preferences for your operating system in the [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion#user_preferences). - -## Notifications - -If you subscribe or are added to dashboard subscriptions or alerts, you’ll be able to manage those notifications here (as well as on the relevant question or dashboard themselves). - +# Account settings + +To access your account settings, click the **profile or grid icon** in the top right corner, then click your **profile name and email.** + +## Account profile + +You can set your first and last names, change your email address, and set your language. See our list of [supported languages](../configuring-metabase/localization). + +## Theme + +You can choose to display Metabase in light or dark mode. + +To quickly toggle dark mode, use the [command palette](../exploration-and-organization/exploration#command-palette). + +The theme only applies to your account. The theme doesn't apply to chart colors or embedded Metabases. + +## Account password + +You can change your password here. Note that if your Metabase uses Single Sign-On (SSO), your administrator will have disabled this password section, as your identity provider will manage logins. + +If you log in through LDAP, you won't see this password section either, since your directory manages your password. You may get a **Security** tab to enroll in 2FA if your admin has [turned it on](./two-factor-authentication#turn-on-two-factor-authentication). + +If you're having trouble logging in, see our [People can't log into Metabase](../troubleshooting-guide/cant-log-in). + +## Two-factor authentication + +{% include plans-blockquote.html feature="Two-factor authentication" %} + +If your admin has turned on [two-factor authentication](./two-factor-authentication) (2FA), you'll see a **Security** tab in your account settings. 2FA adds a second step to logging in: after your password, you enter a code from an authenticator app, so your password alone won't let someone into your account. + +### Set up two-factor authentication on your account + +1. Click the grid icon in the upper right. +2. Click your profile. +3. On the **Security** tab, click **Set up two-factor authentication**. +4. Confirm your password. +5. Scan the QR code with an authenticator app like Google Authenticator, 1Password, or Authy. If you can't scan it, enter the key manually in your authenticator app. +6. Enter the six-digit code from the app. +7. Save your recovery codes. Metabase shows these ten codes only once, so copy them and store them somewhere safe. Each recovery code only works once. If you [regenerate recovery codes](#regenerate-recovery-codes), the old codes will no longer work. + +### Logging in with two-factor authentication + +Once you set up two-factor authentication, Metabase will ask for a code every time you log in. After you enter your email and password: + +- Enter the six-digit code from your authenticator app. +- Lost your app? Click **Use a recovery code instead** and enter one of your saved codes. +- If your admin set up email, click **Email me a code** to get a one-time code in your inbox. + +### Regenerate recovery codes + +Recovery codes are single-use, so it's worth generating a fresh set if you're running low or think someone else has seen them. On the **Security** tab, click **Generate recovery codes** and confirm with a current authenticator or recovery code. Generating new codes invalidates the old ones. + +### Turn off two-factor authentication + +In your account settings, on the **Security** tab , click **Disable**. Your account will be protected by your password only, and your recovery codes will stop working. + +## Account login history + +The login history lists each login, along with some location information (if available), and some client information (like Browser (Firefox/Windows)). If you see any suspicious login attempts, change your password and notify your administrator. + +### A note about new login emails + +Whenever you log in from a new device, Metabase will send you an email just to let you know someone (presumably you) has logged in from an unrecognized device. If you see this email, but don't remember logging in, or don't recognize the device, change your password and let your administrator know. + +## Disable animations in Metabase + +This isn't an in-Metabase setting, but just so you know: you can disable UI animations in Metabase (like sidebars sliding around, or rotating spinners) by changing the settings for your operating system so it respects the `prefers-reduced-motion` CSS media feature. This change will also affect other applications, not just Metabase. Check out the instructions for how to set the user preferences for your operating system in the [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion#user_preferences). + +## Notifications + +If you subscribe or are added to dashboard subscriptions or alerts, you’ll be able to manage those notifications here (as well as on the relevant question or dashboard themselves). + Metabase excludes notifications for [comments](../documents/introduction#comment-notifications) from this page. diff --git a/_docs/v0.63/people-and-groups/start.md b/_docs/v0.63/people-and-groups/start.md index 9c662c67c1..a3f09243fa 100644 --- a/_docs/v0.63/people-and-groups/start.md +++ b/_docs/v0.63/people-and-groups/start.md @@ -32,12 +32,14 @@ Make people use longer and more complex passwords. Tell Metabase how long it should wait before asking people to log in again. +## [Two-factor authentication](./two-factor-authentication) + +Have people confirm their identity with an authenticator app when they log in. + ## Authentication Metabase offers several options for authentication. -> If you need to set up 2-step or multi-factor authentication (2FA or MFA) for your Metabase, consider using one of the SSO options below. - ### SSO for Metabase Open Source and Starter plans - [Google Sign-in](./google-sign-in) diff --git a/_docs/v0.63/people-and-groups/two-factor-authentication.md b/_docs/v0.63/people-and-groups/two-factor-authentication.md new file mode 100644 index 0000000000..a5420428ad --- /dev/null +++ b/_docs/v0.63/people-and-groups/two-factor-authentication.md @@ -0,0 +1,59 @@ +--- +version: v0.63 +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: 'People and Groups' +title: 'Two-factor authentication' +source_url: 'https://github.com/metabase/metabase/blob/master/docs/people-and-groups/two-factor-authentication.md' +layout: new-docs +summary: 'Add a second step to logins by having people confirm their identity with an authenticator app. A Pro/Enterprise feature.' +--- + +# Two-factor authentication + +{% include plans-blockquote.html feature="Two-factor authentication" %} + +Two-factor authentication (2FA) adds a second step to signing in. On top of people's email and password logins, they'll have to confirm their identity with a time-based code from an authenticator app. + +Metabase's native 2FA applies to password logins and LDAP logins. 2FA for Single Sign-on (SSO) via JWT, SAML, or OIDC is managed through your identity provider. + +## Turn on two-factor authentication + +An admin can turn 2FA on for your Metabase: + +1. Go to **Admin settings** > **Settings** > **Authentication**. +2. Find the **Two-factor authentication** card. +3. Toggle it to **Enabled**. +Once enabled, a **Security** tab shows up in each person's account settings, where they can enroll in 2FA. + +If you configure Metabase through environment variables or a [config file](../configuring-metabase/config-file), the matching setting is [`MB_MFA_ENFORCEMENT`](../configuring-metabase/environment-variables#mb_mfa_enforcement). Set `MB_MFA_ENFORCEMENT` to `optional` to let people enroll, or `off` to turn 2FA off. + +## Supported methods + +- **Authenticator app (primary).** People scan a QR code with an app like Google Authenticator or 1Password, which then generates a new six-digit code every 30 seconds. +- **Email code (fallback at login).** If an admin has set up [email](../configuring-metabase/email), people who are already enrolled in two-factor authentication can have Metabase email them a one-time code when they can't reach their authenticator app. You can only use the code once, and expires after ten minutes. If email isn't configured, Metabase hides this option. +- **Recovery codes.** When someone enrolls in 2FA, Metabase gives them ten single-use codes to save. + +Metabase doesn't support SMS codes or hardware keys (passkeys, U2F, or WebAuthn). + +## Before you turn on two-factor authentication + +### If you're self-hosting Metabase, set an encryption key + +Set the [`MB_ENCRYPTION_SECRET_KEY`](../databases/encrypting-details-at-rest) environment variable so Metabase encrypts authenticator secrets at rest. If you turn on 2FA without it, Metabase shows a warning on the settings page. + +If you're using Metabase Cloud, we've encrypted your keys for you. + +### Set up email for the fallback code + +Metabase requires people to use an email address as a login, but that doesn't mean that email is set up. The email fallback only appears if your Metabase can send [email](../configuring-metabase/email). If you skip setting up email, people will have to rely on their authenticator app and recovery codes only. + +## See who's enrolled + +When 2FA is on, go to **Admin settings** > **Settings** > **Authentication** > **Two-factor authentication**. The 2FA card shows how many people have enrolled in 2FA and how many haven't. + +## Further reading + +- [Enrolling in two-factor authentication](./account-settings#two-factor-authentication) +- [Authentication options](./start#authentication) diff --git a/_docs/v0.63/questions/visualizations/custom.md b/_docs/v0.63/questions/visualizations/custom.md index fb21a2c6d4..eb5d6be7d2 100644 --- a/_docs/v0.63/questions/visualizations/custom.md +++ b/_docs/v0.63/questions/visualizations/custom.md @@ -7,7 +7,7 @@ category: Questions title: 'Custom visualizations' source_url: 'https://github.com/metabase/metabase/blob/master/docs/questions/visualizations/custom.md' layout: new-docs -summary: 'Add your own chart types to Metabase by uploading visualization plugins built with the Custom Visualizations SDK.' +summary: 'Add your own chart types to Metabase by uploading custom visualizations built with the Custom Visualizations SDK.' --- # Custom visualizations @@ -26,7 +26,7 @@ This page covers how to add a custom visualization to your Metabase. To _create_ ### Restrict image domains first -Before you can turn on custom visualizations, you need to enable [Restrict image domains](../../configuring-metabase/settings#restrict-image-domains). A custom visualization runs third-party JavaScript in your Metabase. By restricting image (and font) domains, you limit where that code can load assets from, which narrows the ways a plugin could leak data through outbound asset requests. See [Only add plugins you trust](#only-add-plugins-you-trust). +Before you can turn on custom visualizations, you need to enable [Restrict image domains](../../configuring-metabase/settings#restrict-image-domains). A custom visualization runs third-party JavaScript in your Metabase. By restricting image (and font) domains, you limit where that code can load assets from, which narrows the ways a custom visualization could leak data through outbound asset requests. See [Only add visualizations you trust](#only-add-visualizations-you-trust). While custom visualizations are enabled, you can't turn **Restrict image domains** back off. You'll need to first disable custom visualizations. @@ -45,8 +45,8 @@ Once you've [built the custom visualization](../../developers-guide/custom-visua 3. Click **Add visualization**. - Bundles must be smaller than 5 MiB. -- Each plugin lists the Metabase versions it supports (for example, "Requires Metabase >=1.62"). If your Metabase version isn't in that range, Metabase rejects the upload and tells you which version the plugin needs. -- The **Manage visualizations** page shows each plugin's icon, name, the first eight characters of the bundle's hash, and its required Metabase version range, so you can tell which version is installed. +- Each custom visualization lists the Metabase versions it supports (for example, "Requires Metabase >=1.62"). If your Metabase version isn't in that range, Metabase rejects the upload and tells you which version the visualization needs. +- The **Manage visualizations** page shows each custom visualization's icon, name, the first eight characters of the bundle's hash, and its required Metabase version range, so you can tell which version is installed. ## Using a custom visualization @@ -54,42 +54,44 @@ On a question, dashboard or document card, open the visualization sidebar (the * ![Gondola line chart](../images/gondola-line-chart.png) -If a custom visualization can't render the current query results (for example, if the query is missing a column the visualization needs), Metabase shows the error message from the plugin so you can adjust the query or pick a different chart. +If a custom visualization can't render the current query results (for example, if the query is missing a column the visualization needs), Metabase shows the error message from the custom visualization so you can adjust the query or pick a different chart. Custom visualizations behave like built-in charts in most places: -- **Settings.** Click the **gear** icon in the visualization sidebar to change the visualization's settings. A plugin defines its own setting tabs: each setting names the section it belongs to. -- **Dark mode.** Plugins that use Metabase's colors adapt to [dark mode](../../people-and-groups/account-settings#theme) automatically. +- **Settings.** Click the **gear** icon in the visualization sidebar to change the visualization's settings. A custom visualization defines its own setting tabs: each setting names the section it belongs to. +- **Dark mode.** Custom visualizations that use Metabase's colors adapt to [dark mode](../../people-and-groups/account-settings#theme) automatically. - **Icons.** A custom visualization shows its own icon in the visualization picker, and questions that use it show that icon in collections and bookmarks. -### Custom visualizations don't render in embeds +### Custom visualizations in embeds only work when using the SDK -Custom visualizations only render in your Metabase. In [embeds](../../embedding/start) and [public links](../../embedding/public-links) (public questions, dashboards, and documents), any card that uses a custom visualization falls back to the default visualization (a table). +The [Modular embedding SDK](../../embedding/sdk/introduction) can render custom visualizations. You allowlist the custom visualizations you want to load with the [`allowedCustomVisualizations` prop](../../embedding/sdk/config#custom-visualizations) on `MetabaseProvider`. + +Other embedding types don't render custom visualizations. In [modular embedding](../../embedding/modular-embedding) with web components, [guest and static embeds](../../embedding/introduction), and [public links](../../embedding/public-links), any card that uses a custom visualization falls back to the default visualization for the query's results. ## Managing custom visualizations _Admin > Settings > Custom visualizations > Manage visualizations_ -- **Disable a visualization.** Any question, dashboard card, or document card that used the visualization falls back to the default visualization for that query's results. If you re-enable the plugin, those cards will go back to using the custom visualization. -- **Replace a bundle.** Upload a new `.tgz` to ship an updated version of a plugin. The new bundle's manifest `name` _must_ match the existing plugin's identifier, so questions that already use the visualization keep working. +- **Disable a visualization.** Any question, dashboard card, or document card that used the visualization falls back to the default visualization for that query's results. If you re-enable the visualization, those cards will go back to using the custom visualization. +- **Replace a bundle.** Upload a new `.tgz` to ship an updated version of a custom visualization. The new bundle's manifest `name` _must_ match the existing visualization's identifier, so questions that already use the visualization keep working. - **Remove a visualization.** Cards that used the custom viz fall back to the default visualization. ## Exports - **Dashboard subscriptions and alerts don't use custom visualizations**. Cards that use custom visualizations will fall back to a default visualization for the card's data shape. - **PDF exports of dashboards include custom visualizations**. -- **Custom visualizations can support PNG export**, but only if its developer turned on PNG export for that plugin. PNG export is off by default. +- **Custom visualizations can support PNG export**, but only if its developer turned on PNG export for that visualization. PNG export is off by default. -## Only add plugins you trust +## Only add visualizations you trust -A custom visualization plugin runs JavaScript in your Metabase. Only upload plugins from sources you trust (like plugins you've built yourself, or have vetted). +A custom visualization runs JavaScript in your Metabase. Only upload custom visualizations from sources you trust (like ones you've built yourself, or have vetted). -Metabase runs custom visualizations in a sandbox to limit what a plugin can do: +Metabase runs custom visualizations in a sandbox to limit what a custom visualization can do: -- A plugin renders inside an isolated container and can't reach the rest of the Metabase app. -- A plugin can't call Metabase's APIs or make network requests. +- A custom visualization renders inside an isolated container and can't reach the rest of the Metabase app. +- A custom visualization can't call Metabase's APIs or make network requests. -While this sandboxing limits the damage a plugin can do, you still need to review the code. +While this sandboxing limits the damage a custom visualization can do, you still need to review the code. ## Further reading