Use Custom Formatting Themes
Tableau comes installed with many formatting options so that you can customize your visualizations and dashboards to suit your needs. If you use the same formatting for many workbooks, or if you have special fonts and colors that work better for your business, you can use a custom formatting theme to save time. Custom themes quickly apply your formatting choices to the entire Tableau workbook.
You can add a custom theme to your Tableau workbook by importing a JSON file that specifies your formatting choices. Likewise, if you’re viewing a workbook and you want to use the same theme on another workbook, you can export the custom theme file.
Note: This feature is available only in Tableau Desktop 2025.1.
Import a custom theme
Open Tableau Desktop and create a worksheet.
From the toolbar, select Format.
Select Import Custom Theme…
Select a JSON file to import and select Open.
A dialog appears with options to Override or Preserve any existing formatting edits that you've made.
You can choose to have the custom theme override all formatting changes made to your Tableau workbook before importing the custom theme. You can also choose to keep changes made through the formatting pane before importing the custom theme.
Note: If you choose to have the custom theme override existing formatting edits, it will only override style changes that you have included in the JSON file. It also will not override style changes made through the rich text editor.
Override: The custom theme file will override any formatting done to your Tableau workbook.
Preserve: The custom theme file will preserve any formatting done to your Tableau workbook.
Select Override or Preserve.
Your custom theme imports and applies formatting to your workbook.
Export a custom theme
You can export a custom theme in two ways: You can export the custom theme file, or you can export a workbook with a custom theme applied. When you export a theme, the export file includes the formatting choices made on the worksheet you selected. For example, if you have different formatting choices on two different worksheets within a workbook, the custom theme file you export will reflect the formatting choices on the worksheet you selected when you exported the file. Only style elements that are supported and present in the custom theme file will be exported.
Export a JSON file that contains a custom theme
From the toolbar, select Format.
Select Export Custom Theme…
Navigate to the folder where you'd like to save the custom theme file and press Save.
You can now find the custom theme file locally. This theme file can be imported to and used with other workbooks.
Export a workbook with a custom theme applied
From the toolbar on a worksheet, select File and then choose Save As.
Alternatively, you can select Export Packaged Workbook.
Save the workbook as a .twb or a .twbx file.
When you reopen the workbook in Tableau, the custom theme will be applied.
Create the JSON theme file
A JSON file is where the styles in your custom theme are defined. You can create a file using your favorite text editor, making sure to include the style elements you want for your custom theme. Use the example file as a template for creating your file.
There are many third-party resources that can help you validate your file, such as https://www.jsonschemavalidator.net.
Copy the JSON schema file needed to validate your theme file here.
Elements to include in the custom theme file
Your custom theme file should contain a version, base theme, style elements, style attributes, and formatting choices.
Version
The first line of the custom theme file should contain the version. As of Tableau 25.1, the version number is 1.0.0, and the line should look like this: "version": "1.0.0".
The version number may be updated in future versions of Tableau.
Base-theme
The second entry of the custom theme file should contain the base-theme. The base theme corresponds to existing workbook themes available in Tableau, and are based on different versions of Tableau Desktop. Any formatting styles specified in the json theme file will be applied on top of the base theme.
Base theme | Corresponds with | Entry in the theme file |
---|---|---|
Smooth | Tableau Desktop Versions 10.x and newer | "base-theme": "smooth" |
Clean | Tableau Desktop Versions 8.0.x – 9.3.x | "base-theme": "clean" |
Modern | Tableau Desktop Versions 3.5 – 7.0. | "base-theme": "modern" |
Classic | Tableau Desktop Versions 1.0 – 3.2 | "base-theme": "classic" |
For more information on workbook themes, see Upgrade or change your workbook theme (Tableau Desktop only)
Style elements
The style elements specify at what level the formatting choices will be applied. For example, All fonts, filter titles, or just tooltip fonts. See the style elements table for a list of available elements to specify.
Style attributes
The style attributes specify the part of the style element that you'd like the formatting choices to be applied to. For example, font-color and font-size for the All style element.
Be sure to check the list of attributes for the style element you’re using. For example, while the highlighter style element supports a background color style attribute, the highlighter-title element does not.
Formatting choices
The formatting choices specify what you'd like to apply to the style element and style attribute. For example, a font color, font family, and font size. The formatting choice must be entered as a string or an integer, depending on the style attribute. Colors must be entered as a hex color code, such as #FF0000.
A string input type contains text.
An integer input type contains whole numbers.
Example custom theme file
{ "version": "1.0.0",
"base-theme": "smooth",
"styles": {
"all": {
"font-color": "#d16302",
"font-family": "Tableau Bold"
},
"worksheet": {
"font-color": "#d16302",
"font-family": "Tableau Bold",
"font-size": 14
},
"worksheet-title": {
"font-color": "#d16302",
"font-family": "Tableau Bold",
"font-size": 14
},
"view": {
"background-color": "#ffb370"
}
}
}
Style elements supported with custom themes
This table contains a list of supported style elements and their corresponding supported style attributes. While not all style elements available in Tableau are currently supported for custom themes, we will be adding more style elements in future releases. When you import a custom theme file, its style elements will apply to all worksheets in the workbook.
Style Element | Description | Style Attributes | Input Type | Formatting Choice |
---|---|---|---|---|
all | Formats all fonts across the entire workbook. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
worksheet | Formats the worksheet default font. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
worksheet-title | Formats the worksheet title font. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
tooltip | Formats the tooltip font. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
dashboard-title | Formats the dashboard title. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
font-weight | String | String specified as normal or bold. | ||
story-title | Formats the story title font. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
header | Formats the header font. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
legend | Formats the legend body font and background color. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
background-color | String | String that follows the format of a hex color code, such as #FF0000. This element also supports two additional digits for transparency, such as #FF000080. | ||
legend-title | Formats the legend title font on all worksheets. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
filter | Formats the filter body font and background color on all worksheets. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
background-color | String | String that follows the format of a hex color code, such as #FF0000. This element also supports two additional digits for transparency, such as #FF000080. | ||
filter-title | Formats the filter title font on all worksheets. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
parameter-ctrl | Formats the parameter body font and background color on all worksheets. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
background-color | String | String that follows the format of a hex color code, such as #FF0000. This element also supports two additional digits for transparency, such as #FF000080. | ||
parameter-ctrl-title | Formats the parameter control title font on all worksheets. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
highlighter | Formats the highlighter body font and background color on all worksheets. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
background-color | String | String that follows the format of a hex color code, such as #FF0000. This element also supports two additional digits for transparency, such as #FF000080. | ||
Highlighter-title | Formats the highlighter control title font on all worksheets. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
font-size | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
page-ctrl-title | Formats the page card title font on all worksheets. | font-color | String | String that follows the format of a hex color code, such as #FF0000. |
font-family | String | String with a maximum length of 50 characters. | ||
gridline | Formats the gridlines on a view. | line-visibility | String | String specified as on or off . |
line-pattern | String | String specified as dotted , dashed , or solid . | ||
line-width | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
line-color | String | String that follows the format of a hex color code, such as #FF0000. This element also supports two additional digits for transparency, such as #FF000080. | ||
zeroline | Formats the zeroline on a view. | line-visibility | String | String specified as on or off . |
line-pattern | String | String specified as dotted , dashed , or solid . | ||
line-width | Integer | Integer with a minimum value of 1 and a maximum value of 99. | ||
line-color | String | String that follows the format of a hex color code, such as #FF0000. This element also supports two additional digits for transparency, such as #FF000080. | ||
mark | Formats the mark color on a view. | mark-color | String | String that follows the format of a hex color code, such as #FF0000. |
view | Formats the background color on a view. | String | String that follows the format of a hex color code, such as #FF0000. |