Blog · Tableau · Hosting

How to Host a Tableau Extension, Explained in Plain English

You have a .trex and a folder of files, and to use them they have to live on the internet. Here's the part nobody explains: why hosting exists, the one hard rule (HTTPS with a real certificate), and the two ways to get it done.

JUL 20, 2026

You have a .trex and a folder of files. To use them, they have to live on the internet. That's the part nobody explains, and it's the part that stops most people cold. Here it is in plain English: what hosting is, the one hard rule, and the two ways to get it done.

Why does a Tableau extension need hosting at all?

A Tableau extension is just web files, HTML, CSS, and JavaScript. But files sitting on your computer can't be reached by Tableau Cloud or Tableau Server. They have to be loaded onto a host first: an online address Tableau can reach. The .trex is the pointer that holds that address.

A three-step flow: the .trex holds one URL, your files sit on your machine, and once loaded onto a host they're served over HTTPS for Tableau to reach.
The .trex points at a URL. Until your files live at that URL, it points at nothing.

Until you load the files onto a host, the .trex points at nothing. Once they're up, Tableau Cloud or Server can reach the extension at that URL. That upload step is the whole reason hosting exists, and it's the step every "just build an extension" tutorial quietly skips.

The one rule: HTTPS, with a real certificate

There's exactly one hard requirement, and it trips people who try to cut a corner. Tableau will not load a production extension over plain http, and self-signed certificates fail. It has to be https with a certificate a browser actually trusts.

The good news: real certificates are free. Every static host worth using (Netlify, Cloudflare Pages, GitHub Pages) hands you an HTTPS URL with a valid certificate the moment you upload. So the rule sounds intimidating and turns out to be automatic, as long as you don't try to serve the files yourself off a laptop.

Two ways to do it

You can host the extension yourself, or let it be hosted for you. They lead to the same working extension, but they are very different amounts of ongoing work.

Two columns: hosting it yourself is six steps and about forty minutes, and you own uptime, certs, and updates forever; TableauOps hosting is one object and done.
Same working extension. The difference is what you own after setup day.

Host it yourself, six steps, about 40 minutes

You maintain uptime, certificates, and every future update. Forever. Here's the whole path:

  1. Test it locally (~5m). Run a small local server and point a dev .trex at localhost to confirm the extension works before it goes anywhere.
  2. Pick a host (~5m). A static host like Netlify or Cloudflare Pages. Free, with a real certificate included.
  3. Upload the files (~5m). Drag the folder in. You get an https URL back.
  4. Point the .trex (~5m). Set the URL inside the manifest to your new https address, not localhost.
  5. Safelist it (varies). For Tableau Cloud or Server, a site admin adds your URL to the extensions safe list, or it won't load for anyone.
  6. Maintain it (forever). Uptime, certificate renewals, and every future update are now yours.

None of the steps is hard. The catch is step six: hosting isn't a one-time task, it's a thing you now own. The URL has to stay up, the certificate has to keep renewing, and every change means re-uploading.

Five things that trip people up

Almost every "it worked yesterday" hosting problem is one of these five. Knowing the symptom tells you exactly where to look.

  • Works on my desktop, blank once published. The .trex is still pointing at localhost. It works on the one machine running the local server and nowhere else. Fix: point the manifest at the hosted https URL and re-share it.
  • "Extension failed to load." Usually the URL is http, a self-signed certificate, or, on Cloud/Server, a URL that was never added to the site safe list. Confirm real HTTPS, then check the safe list.
  • Blank box, no error at all. The host is serving the wrong path, so index.html returns a 404 that Tableau shows as empty. Open the URL directly in a browser; if you don't see the extension there, Tableau won't either.
  • Loads, but no data or NaN. The hosting is fine, the extension is reading the worksheet wrong, or reading before the data is ready. This is a code problem, not a hosting one, and it's a good sign: it means you're past the hosting wall.
  • The PDF or print is blank. Server-side rendering (subscriptions, exports) fetches your URL without a live browser session. If the extension depends on something only present in an interactive session, the printed copy comes back empty. Make sure it renders from data alone.

Or skip all of this

If step six, owning uptime and certificates and updates forever, is the part you don't want, don't do it. Point the .trex at a hosted, auto-updating URL instead. You add one object to your dashboard; the certificate, the uptime, and every future update are handled for you.

That's the trade in one line: host it yourself and own the maintenance, or point at a managed URL and own nothing but the dashboard. TableauOps hosting is the second path.

And if you'd rather build the extension itself the same way, without fighting the manifest and the localhost trap, the TableauOps Extension Kit gives Claude Code the rules up front so it hosts correctly on the first try. Prefer to watch first? Join a free live build and see one shipped end to end.

Eric Summers, Tableau Ambassador & founder of TableauOps


Frequently asked questions

Why does a Tableau extension need to be hosted online?

Because an extension is a set of web files, and Tableau Cloud or Server can only load it from a URL they can reach over the internet. Files on your own computer aren't reachable, so they have to be uploaded to a host first. The .trex manifest is just a pointer to that hosted URL.

Does a Tableau extension require HTTPS?

Yes. Tableau will not load a production extension over plain http, and self-signed certificates are rejected. You need https with a certificate a browser trusts, which every good static host (Netlify, Cloudflare Pages, GitHub Pages) provides for free automatically.

Where can I host a Tableau extension for free?

Any static host with real HTTPS: GitHub Pages, Netlify, or Cloudflare Pages are all free and include a valid certificate. Upload the folder, get an https URL back, and point the .trex at that URL instead of localhost.

My extension works on my desktop but is blank after publishing. Why?

Almost always the .trex is still pointing at localhost. That works on the single machine running your local server and nowhere else. Re-point the manifest at the hosted https URL and share that version.

Do I have to keep maintaining a hosted extension?

If you host it yourself, yes, uptime, certificate renewals, and every future update are yours to keep up. If you point the .trex at a managed, auto-updating host instead, that ongoing maintenance is handled for you and you only manage the dashboard object.