Build a Tableau Viz Extension with AI, Live and No Code
A live session building three custom Tableau viz extensions with Claude Code on flight delay data: a heat map with total bars, a Nightingale rose and a beeswarm, wrong turns included.
The short version
Eric builds three custom chart types as Tableau viz extensions, live, using Claude Code in VS Code: a heat map of departure delay by weekday and hour with total bars on the top and side, a Nightingale rose of delay by hour, and a beeswarm with one dot per flight. The heat map and rose start from screenshots. The beeswarm starts from a written description that asks for size, color and grouping options.
Along the way he shows the parts that trip people up: what the .trex manifest does, loading an extension from local files, why a manifest change means adding the extension again while a web change only needs a reselect, and what to do with a load error (copy it and paste it back to Claude). The live beeswarm build never loads cleanly, so he falls back to the version he built that morning.
His case for viz extensions is the middle ground. AI produces the polished web chart quickly, and Tableau still supplies the security, governance and permissions a company needs. A viewer asks whether Claude could just build the native Tableau version instead. Eric's answer: it is getting better at writing workbook XML directly, results are mixed so far, and you can mix the two by building the dashboard natively around an extension.
The breakdown
Viz extensions sit between fully native and fully vibe coded
Eric has built dashboards entirely in native Tableau and entirely as vibe coded web pages. Viz extensions are the middle, leaning Tableau: the chart is a web element, but it runs inside Tableau's infrastructure.
That is why he likes building here. AI gets the good looking chart out fast, and the workbook keeps the security, governance and permissions a corporate setting needs.
A skill carries the hurdles so the session can skip them
The common problems with building a viz extension in Claude are handled in a skill Eric uses for all his extension work. He keeps it global, a viz extension markdown file Claude reads whenever he opens an extension project.
It does not catch everything. This session still hits errors the skill did not cover, but he says his first live extension build had far more in the way.
A screenshot is often the easiest prompt
For the heat map and the Nightingale rose, Eric pastes a screenshot of the chart he wants and tells Claude to recreate it for the flight data, referencing the data file by its copied path. He has also had success starting from a rough mockup.
He runs all three builds in parallel. When he later asked Claude what a full written prompt to recreate these extensions would take, the answer was a lot, which is why he tests screenshots first.
Plan on a strong model, build on a cheaper one
The live builds run on Sonnet 5 at low effort, partly to test the minimum model that still does a good job. For anything complex built from scratch, Eric suggests using Fable for the plan, then switching to a lower model to execute it.
Once the plan is in place, he finds other models run it fine. With Fable he finds low effort works well: faster and far fewer tokens.
The .trex manifest just tells Tableau where the code lives
The .trex file is an XML manifest that points Tableau at the files the extension needs. During development it points at localhost. To use the extension in a workbook on Cloud or Server, you host the web files somewhere reachable, even inside a corporate network, and change the manifest to point there.
On the Exchange, a partner listing runs on Cloud, Server and locally, but only certified extensions with the badge run on Tableau Public. He names Tableau, LiveDataViz and InfoTopics as the trusted options he has seen.
The marks card is whatever the extension defines
On the Nightingale rose the marks card reads value, hour and detail, not color, size, text and tooltip. Viz extensions define their own encodings, so Claude built ones that fit the purpose it was prompted for.
Field choices are also set by the code. The heat map only accepts a single hour value, not a datetime, because that is how it was built. You can have Claude accept either.
Reselect for web changes, re-add for manifest changes
If the .trex has not changed, clicking the already loaded extension refreshes the web side with Claude's latest changes. If the manifest changed, for example a new marks card, you have to add the extension again, since there is no way to break the cache on the manifest. Fields already dropped on the marks card carry over.
When the beeswarm throws a load error, Eric copies the whole message back to Claude. He says these errors usually mean two extensions are colliding somewhere, and this one turns out to reuse standard card names. It still fails live, so he loads the morning's build.
Dashboard extensions can do much more than one chart
Viz extensions focus on a single custom chart with its own config. Dashboard extensions, the original type, sit on the dashboard as an object and can read data from every chart on it.
Eric is building a universal search with one: type a field name like carrier to get its values, or type a value like AA and it finds which field holds it, in place of ten dropdown filters.
Key takeaways
- Viz extensions let AI build the web chart while Tableau keeps security, governance and permissions.
- A screenshot of the chart you want is often a better first prompt than a long written spec.
- Plan complex builds on a strong model, then let a cheaper model execute the plan.
- Reselect the extension for web changes, but add it again when the .trex manifest changes.
- When Tableau shows a load error, paste the whole message back to Claude.
- Ask for live config updates and hover tooltips up front; they are easy for Claude to add.
Watch this when
You want to see a real, unedited viz extension build with Claude, including the load errors and the fixes, before you try one on your own data.
Mentioned in this video
- 10:42Tableau extension skill (free) ↗
The skill Eric uses for all his extension builds
- 1:04:16
- 26:47How to host a Tableau extension →
Pointing the .trex at hosted files for Cloud or Server
- 27:50Tableau Exchange ↗
Certified vs partner extensions, and which run on Public
- 1:02:24TableauOps extensions →
Includes the universal search dashboard extension Eric previews
- Viz Extension Kit ↗
Every extension with full source, to modify and self host
- 90 minute 1:1 build session ↗
Build one on your own data with Eric, includes the Kit
- Directed Analysis ↗
Eric's writing on this approach