New Plugin: Tableau Enterprise


Genstate is launching it’s Tableau Enterprise Plugin! Bubble developers can securely embed private Tableau components into their Bubble applications. This plugin is intended for Bubble applications to act as the authentication resource for private Tableau components.

The Tableau Enterprise Plugin is a faithful thin wrapper around the Tableau Embedding JS v3 API; implementing Tableau’s development guidelines and recommended best practices for securely embedding Tableau components into web applications. For security, the plugin supports Connected Application Direct Trust authentication, and the inclusion of User Key-Value Pair Attributes in the authentication process for row level security.

The Tableau Enterprise Plugin provides four rich, full featured, responsive elements, offering:

  • Tableau’s JWT specification, including row level security with USER ATTRIBUTEs
  • Tableau Views
  • Tableau Metrics
  • Tableau Authoring
  • Tableau Ask Data
  • …and more to come, such as deeper REST API support

To give developers maximum control over the timing of rendering, the elements all have a render action that accept a security token and a Tableau Embedding URL. This action can be called anytime after the corresponding element has been initialized.

For a minimal implementation with row level security see the demonstration editor, plugin page and live page:

Road Map

The plugin contains a sufficiently rich set of features to get an enterprise application in Bubble launched. As our user base grows we will be looking to extend this plugin along three different lines:

  1. Deeper REST API integration, including personal access token authentication to services.
  2. More flexible configuration and workflow integration of element actions, states, properties, and events.


  1. In the Plugins tab, add the plugin to your application.
  2. In the Tableau Enterprise Plugin, enter the keys in the environment variables.
  3. In the Design tab, add a Tableau element to your page.
  4. In the Workflow tab, add the element’s Initialized event.
  5. In the event, add the Get Token action, passing the Tableau publisher’s name, expiration date, scopes, and optional user attribute key-value pairs.
  6. In the event, add the Render action, passing the token, and a Tableau URL.

Plugin Keys

  • Client Id - Unique identifier of the Connected Application.
  • Secret Id - Unique identifier of the secret token for the Connected Application.
  • Secret Value - Confidential and private secret of the Connected Application
  • Server Name - Domain name of the Tableau server instance, can be either a cloud domain or an on premise install, without the protocol specifier, or trailing backslashes.

Server-Side Actions

  • Get Token - Generates a JSON Web Token formatted according to Tableau security specifications.


  • Tableau View - Embed an interactive read only view.
  • Tableau Metric - Embed an interactive read only fixed dimensions metric.
  • Tableau Ask Data - Embed an interactive natural language query ask data.
  • Tableau Authoring - Embed a fully functional online workbook authoring.

Element Actions

  • pause - Pause layout updates. This is useful if you are resizing the visualization or performing multiple calls that could affect the layout.
  • redo - Redoes the last action performed on a sheet.
  • refresh - Equivalent to clicking on the Refresh Data toolbar button.
  • resume - Resume layout updates.
  • revert - Equivalent to clicking on the Revert All toolbar button, which restores the workbook to its starting state.
  • undo - Undoes the last action performed on a sheet.
  • toggle - Toggle layout updates.
  • export - Equivalent to clicking on Download > Image from the toolbar, which creates a PNG file of the current visualization.
  • dialog - Display one of the export dialogs based on the dialogType parameter. One of: “export-cross-tab”, “export-data”, “export-pdf”, “export-powerpoint”, “export-workbook”, “share”.
  • filter - Use this method to filter the viz before initialization. If used after initialization, it will re-render the viz. For filtering after initialization, use the other filtering methods, such as applyFilterAsync. If you add the same filter fields using the addFilter() method and by using the <viz-filter> element in the <tableau-viz> web component, you might experience unexpected behavior.
  • render - Display the visual in the element.

Element Events

  • initialized- Tableau element is instantiated.
  • rendered - Fired when a Tableau element first becomes interactive.
  • URL set - Raised when a URL action occurs.
  • opening in desktop - The access token will expire.
  • opening - Raised when the user clicks on the Edit In Desktop Button.
  • editing - Raised when the user clicks on the Edit In Tableau Cloud Button.
  • published - An event raised when the workbook has been published. This notification is sent when using embedded web authoring functionality.
  • renamed - An event raised when “publish as” is successful. This notification is sent when using embedded web authoring functionality.
  • closing - An event raised when the workbook is ready to close. This notification is sent when using embedded web authoring functionality.

Element States

  • Initialized - Tableau element is instantiated.
  • URL - The URL associated with the event.


  • Tableau’s IFRAME security architecture requires the browser have both Third Party Cookies ENABLED, and Incognito Mode DISABLED. This a limitation of Tableau, not of the plugin.
  • To test your embedding security settings you can use the playground, provided by The Information Lab.
  • The JSON web token is a one time authentication for the Tableau session. It does not require refreshing as long as the secure session is active.
  • The maximum expiration duration of a JSON web token is 10 minutes. This duration can be shortened, but cannot be lengthened.
  • The inactive timeout for secure sessions with a Tableau Server is configurable in the Tableau Server console. For long duration use of dashboards you may need to renew the token through a Bubble workflow.
  • For best responsive display we recommend resizing the report with the display by NOT enabling “fit to content”.