Embed a map

Embed a map

Put a live map in a README, a Notion page, a Confluence doc, or your own site. It stays current: edit the map in Canopy and every embed updates.

Notion · Confluence · your site

Interactive iframe

Made with Canopy

Pan and zoom, never edit.

README

Static image

![map](…/map.svg)

GitHub strips <iframe>, so this is the only form that works there.

Both follow the map's sharing state, and both carry the badge.

Two snippets, and they are not interchangeable

Notion, Confluence, a blog, a wiki get an iframe. Readers can pan and zoom; nobody can edit.

html
<iframe
  src="https://embed.canopy.8starlabs.com/embed/map/<map-id>"
  width="100%"
  height="460"
  loading="lazy"
  allow="fullscreen"
  style="border:1px solid #e5e7eb;border-radius:12px"
  title="Architecture map"
></iframe>

A GitHub README needs the image form instead:

Markdown
[![Architecture map](https://embed.canopy.8starlabs.com/embed/map/<map-id>/map.svg)](https://canopy.8starlabs.com)

Why READMEs are different

GitHub's markdown sanitizer strips <iframe> entirely, so the interactive embed cannot appear there at all. The image is not a lesser fallback, it is the only thing that works. It updates whenever you save the map, and because GitHub proxies external images through its own CDN, even a heavily-read README barely touches Canopy.

Both snippets are generated for you: open a map and click the embed icon in the header.

Dark theme

Choose Dark in the embed dialog. Canopy puts theme=dark in the generated URL, so the theme is explicit and stays consistent in a cross-origin iframe or an image proxy such as GitHub Camo.

html
<iframe
  src="https://embed.canopy.8starlabs.com/embed/map/<map-id>?theme=dark"
  width="100%"
  height="460"
  loading="lazy"
  allow="fullscreen"
  style="border:1px solid #2b343a;border-radius:12px"
  title="Architecture map"
></iframe>

The same option works for a README image:

Markdown
[![Architecture map](https://embed.canopy.8starlabs.com/embed/map/<map-id>/map.svg?theme=dark)](https://canopy.8starlabs.com)

The embed does not guess the parent page theme. The explicit URL keeps the interactive and image versions stable, including when a cached image is shown.

The map must be public

An embed follows the map's sharing state. A private map's embed returns 404, and setting a public map back to private stops every existing embed immediately.

There is no separate embed link or token. Deciding to embed a map is the same decision as making it public: anyone with the URL can see it.

Embeds are allowed to be framed

Canopy blocks framing for dashboard pages, but the embed route intentionally allows framing from any site with frame-ancestors *. It is served from a separate cookieless host, can only read public map data, and is read-only. The generated iframe requests fullscreen only.

Options

ParameterValuesDefault
themelight, darklight
spend1 to show costhidden

Append them to either URL, e.g. /embed/map/<map-id>?theme=dark&spend=1. Anything else is ignored.

Cost is hidden unless you ask for it

Monthly spend is off by default in embeds, even though a public map page shows it. An embed travels further than a page someone chose to visit - into READMEs, wikis, and search results - so turning cost on is a deliberate act.

Attribution

Every embed carries a Made with Canopy badge, on every plan:

Made with Canopy

This differs from exports, where Pro can remove the watermark: an export is your own data leaving Canopy, whereas an embed is Canopy rendering inside someone else's page.

Sizing

The iframe fills whatever box you give it. 460px tall suits most maps; give a large map more height, or let readers zoom. The image form scales to its container like any other image.

Why embeds are served from a different domain

Embeds come from embed.canopy.8starlabs.com, never from the app domain. That is deliberate: an embed renders inside a page Canopy does not control, so it is served from an origin that holds no Canopy session. An embed cannot read your cookies, act as you, or reach the API, because on that origin there is nothing to reach with.

The embed also loads no external scripts or fonts and makes no network calls of its own.

to paste into any AI.

Ask ChatGPT about this page.

Ask Claude about this page.

Need help? Sign in to chat with support

Have ideas?

General inquiry? Email support.