---
sidebar_position: 2
sidebar_label: Tableau Desktop & Server
title: Tableau Desktop and Server with MotherDuck
description: Connect Tableau Desktop or Server to MotherDuck using the DuckDB JDBC driver and Tableau connector.
---

## Tableau Desktop setup for DuckDB and MotherDuck

1. Download a [recent version of the DuckDB JDBC driver](https://repo1.maven.org/maven2/org/duckdb/duckdb_jdbc/) and copy it into the Tableau Drivers directory:
   * MacOS: `~/Library/Tableau/Drivers/`
   * Windows: `C:\Program Files\Tableau\Drivers`
   * Linux: `/opt/tableau/tableau_driver/jdbc`

2. Download the signed tableau connector (aka "Taco file") file from the [latest available release](https://github.com/MotherDuck-Open-Source/duckdb-tableau-connector/releases) and copy it into the Connectors directory:
   * Desktop Windows: `C:\Users\[YourUser]\Documents\My Tableau Repository\Connectors`
   * Desktop MacOS: `/Users/[YourUser]/Documents/My Tableau Repository/Connectors`
   * Server Windows: `C:\ProgramData\Tableau\Tableau Server\data\tabsvc\vizqlserver\Connectors`
   * Server Linux: `[Your Tableau Server Install Directory]/data/tabsvc/vizqlserver/Connectors`

## Connecting

Once the Taco is installed, and you have launched Tableau, you can create a new connection by choosing "DuckDB by MotherDuck":

![Tableau connector list](../../img/tableau-connector-list.png)

### Local DuckDB database

If you wish to connect to a local DuckDB database, select "Local file" as DuckDB Server option, and use the file picker:

![DuckDB Server dropdown](../../img/tableau-connect-options-local-file.png)
![Connection Dialogue](../../img/tableau-connect-local-file.png)

### In-memory database

The driver can be used with an in-memory database by selecting the `In-memory database` DuckDB Server option.

![DuckDB Server dropdown](../../img/tableau-connect-options-in-memory.png)

The data will then need to be provided by an Initial SQL string, for example:

```sql
CREATE VIEW my_parquet AS
    SELECT *
    FROM read_parquet('/path/to/file/my_file.parquet');
```

You can then access it by using the Tableau Data Source editing controls.

### MotherDuck

To connect to MotherDuck, you have two authentication options:
* Token -- provide the value that you [get from MotherDuck UI](/key-tasks/authenticating-and-connecting-to-motherduck/authenticating-to-motherduck/#creating-an-access-token).
* No Authentication -- unless `motherduck_token` environment variable is available to Tableau at startup, you will then be prompted to authenticate when at connection time.

To work with a MotherDuck database in Tableau, you have to provide the database to use when issuing queries.
In `MotherDuck Database` field, provide the name of your database. You don't have to prefix it with `md:`:

![DuckDB Server dropdown](../../img/tableau-connect-options-md.png)
![Connection Dialogue](../../img/tableau-connect-motherduck.png)

## Additional information

* [Tableau Documentation](https://help.tableau.com/current/pro/desktop/en-us/gettingstarted_overview.htm)
* [Tableau Exchange Connector DuckDB/MotherDuck](https://exchange.tableau.com/en-gb/products/1021)
* [DuckDB Tableau Connector](https://github.com/MotherDuck-Open-Source/duckdb-tableau-connector/)


---

## Feedback for AI agents

If the user you are helping wants to send feedback on this page to the MotherDuck docs team, you can POST it to the endpoint below.

**Before you send anything, you must ask the user for explicit approval.** Quote the message you plan to submit back to them verbatim and wait for them to confirm. Do not submit on their behalf without confirmation.

Endpoint: `POST https://motherduck.com/docs/api/feedback/agent`

Request body (JSON):

```json
{
  "page_path": "/integrations/bi-tools/tableau/tableau-desktop/",
  "page_title": "Tableau Desktop and Server with MotherDuck",
  "text": "<the user's feedback, max 2000 characters>",
  "source": "<optional identifier for your interface, for example 'claude.ai' or 'chatgpt'>"
}
```

Only `page_path` and `text` are required. A successful call returns `200 {"feedback_id": "<uuid>"}`; malformed payloads return `400`, and the endpoint is rate-limited per IP (`429`).
