---
title: "How popups work in MangoMap"
description: "The four popup types, how popups take labels and formats from the Format tab, where viewers see them, and why raster and WMS layers have no Popup tab."
sidebar:
  label: "How popups work"
---

This page explains each popup type and how popups use layer attribute formatting. Read it before you configure a complex layer.

## The Popup tab in one sentence

The `Popup` tab sets what viewers see when they click a map feature. The same settings apply to every feature, with each feature's values filled in where needed.

## The four popup types

The first control on the Popup tab is the `Type` dropdown. It has four options:

- **`None`** — popups are disabled. Clicking a feature does nothing.
- **`Default`** — MangoMap renders an automatic list of every visible attribute on the layer. The list, the labels, the formatting, and the order all come from the `Format` tab. There are no controls on the Popup tab beyond the type and an optional `Title`. New layers start with this type.
- **`Custom`** — you design the popup in a rich-text editor. Embed field values, format text, add images, tables, charts, conditionals, equations, and interactive buttons.
- **`Calculator`** — viewers fill in a form, and a formula combining their inputs with feature attributes computes a result. Useful for fertiliser-per-hectare or travel-time style popups.

Each layer has its own type. Layers on the same map can use different types.

If you are not sure which type to pick, answer three questions about the layer:

<!-- diagram:popup-type-flow -->
<svg class="dark:hidden" style="width: 100%; height: auto" viewBox="0 0 640 584" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="popup-type-flow-inline-title popup-type-flow-inline-desc">
  <title id="popup-type-flow-inline-title">Which popup type to use</title>
  <desc id="popup-type-flow-inline-desc">Flowchart: choose None when clicking a feature should show nothing; Default for a list of the visible attributes, which is where new layers start; Calculator when viewers type in values for a formula; and Custom when you need your own layout, media or logic.</desc>
  <defs>
    <marker id="popup-type-flow-inline-arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#525252"/></marker>
    <marker id="popup-type-flow-inline-arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#c4360c"/></marker>
  </defs>
  <rect width="100%" height="100%" fill="#f5f5f5"/>
  <path d="M192 60 L192 86" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-arrow)"/>
  <path d="M316 136 L358 136" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-arrow)"/>
  <path d="M316 272 L358 272" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-arrow)"/>
  <path d="M316 408 L358 408" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-arrow)"/>
  <path d="M192 184 L192 222" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-arrow)"/>
  <path d="M192 320 L192 358" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-arrow)"/>
  <path d="M192 456 L192 494" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-arrow)"/>
  <rect x="322" y="112" width="26" height="16" rx="2" fill="#f5f5f5"/><text x="335" y="124" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="322" y="248" width="26" height="16" rx="2" fill="#f5f5f5"/><text x="335" y="260" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="318" y="384" width="34" height="16" rx="2" fill="#f5f5f5"/><text x="335" y="396" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="200" y="195" width="34" height="16" rx="2" fill="#f5f5f5"/><text x="217" y="207" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="200" y="331" width="34" height="16" rx="2" fill="#f5f5f5"/><text x="217" y="343" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="200" y="467" width="26" height="16" rx="2" fill="#f5f5f5"/><text x="213" y="479" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="76" y="16" width="232" height="44" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/>
  <text x="192" y="43" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">You set up a layer’s popup</text>
  <polygon points="192,88 316,136 192,184 68,136" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="192" y="131" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Show something when</text><text x="192" y="149" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">a feature is clicked?</text>
  <polygon points="192,224 316,272 192,320 68,272" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="192" y="267" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Need your own layout,</text><text x="192" y="285" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">media or logic?</text>
  <polygon points="192,360 316,408 192,456 68,408" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="192" y="403" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Do viewers type</text><text x="192" y="421" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">in values?</text>
  <rect x="360" y="100" width="264" height="72" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="492" y="122" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">None</text><text x="492" y="142" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">popups are off:</text><text x="492" y="158" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">clicking a feature does nothing</text>
  <rect x="360" y="236" width="264" height="72" rx="20" fill="rgba(196,54,12,0.08)" stroke="#c4360c" stroke-width="1.4"/><text x="492" y="258" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Default</text><text x="492" y="278" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">a list of the visible attributes;</text><text x="492" y="294" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">new layers start with this type</text>
  <rect x="360" y="372" width="264" height="72" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="492" y="394" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Calculator</text><text x="492" y="414" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">a form and a formula that works</text><text x="492" y="430" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">out a result from inputs and fields</text>
  <rect x="62" y="496" width="260" height="72" rx="20" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/>
  <text x="192" y="518" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Custom</text>
  <text x="192" y="538" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">your own text, field values, images,</text>
  <text x="192" y="554" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">charts, conditionals and buttons</text>
</svg>
<svg class="hidden dark:block" style="width: 100%; height: auto" viewBox="0 0 640 584" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="popup-type-flow-inline-dark-title popup-type-flow-inline-dark-desc">
  <title id="popup-type-flow-inline-dark-title">Which popup type to use</title>
  <desc id="popup-type-flow-inline-dark-desc">Flowchart: choose None when clicking a feature should show nothing; Default for a list of the visible attributes, which is where new layers start; Calculator when viewers type in values for a formula; and Custom when you need your own layout, media or logic.</desc>
  <defs>
    <marker id="popup-type-flow-inline-dark-arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#a3a3a3"/></marker>
    <marker id="popup-type-flow-inline-dark-arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#ff7a4d"/></marker>
  </defs>
  <rect width="100%" height="100%" fill="#141414"/>
  <path d="M192 60 L192 86" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-dark-arrow)"/>
  <path d="M316 136 L358 136" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-dark-arrow)"/>
  <path d="M316 272 L358 272" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-dark-arrow)"/>
  <path d="M316 408 L358 408" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-dark-arrow)"/>
  <path d="M192 184 L192 222" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-dark-arrow)"/>
  <path d="M192 320 L192 358" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-dark-arrow)"/>
  <path d="M192 456 L192 494" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-type-flow-inline-dark-arrow)"/>
  <rect x="322" y="112" width="26" height="16" rx="2" fill="#141414"/><text x="335" y="124" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="322" y="248" width="26" height="16" rx="2" fill="#141414"/><text x="335" y="260" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="318" y="384" width="34" height="16" rx="2" fill="#141414"/><text x="335" y="396" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="200" y="195" width="34" height="16" rx="2" fill="#141414"/><text x="217" y="207" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="200" y="331" width="34" height="16" rx="2" fill="#141414"/><text x="217" y="343" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">YES</text>
  <rect x="200" y="467" width="26" height="16" rx="2" fill="#141414"/><text x="213" y="479" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">NO</text>
  <rect x="76" y="16" width="232" height="44" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/>
  <text x="192" y="43" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">You set up a layer’s popup</text>
  <polygon points="192,88 316,136 192,184 68,136" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="192" y="131" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Show something when</text><text x="192" y="149" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">a feature is clicked?</text>
  <polygon points="192,224 316,272 192,320 68,272" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="192" y="267" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Need your own layout,</text><text x="192" y="285" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">media or logic?</text>
  <polygon points="192,360 316,408 192,456 68,408" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="192" y="403" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Do viewers type</text><text x="192" y="421" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">in values?</text>
  <rect x="360" y="100" width="264" height="72" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="492" y="122" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">None</text><text x="492" y="142" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">popups are off:</text><text x="492" y="158" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">clicking a feature does nothing</text>
  <rect x="360" y="236" width="264" height="72" rx="20" fill="rgba(255,122,77,0.10)" stroke="#ff7a4d" stroke-width="1.4"/><text x="492" y="258" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Default</text><text x="492" y="278" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">a list of the visible attributes;</text><text x="492" y="294" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">new layers start with this type</text>
  <rect x="360" y="372" width="264" height="72" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="492" y="394" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Calculator</text><text x="492" y="414" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">a form and a formula that works</text><text x="492" y="430" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">out a result from inputs and fields</text>
  <rect x="62" y="496" width="260" height="72" rx="20" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/>
  <text x="192" y="518" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Custom</text>
  <text x="192" y="538" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">your own text, field values, images,</text>
  <text x="192" y="554" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">charts, conditionals and buttons</text>
</svg>
<!-- /diagram:popup-type-flow -->

## How popups interact with the Format tab

The `Format` tab controls three things per attribute: the **alias** (display label), the **format** (how the value displays — `12,345.68`, `$12,345.68`, `9 May 2026`, etc.), and **visibility** (whether the attribute appears in the default popup at all).

- **Default popups** show only attributes whose visibility eye is on, labelled by their alias, formatted by their format config. Attributes that hold an image URL are the exception: they show as images at the top of the popup even when hidden.
- **Custom popups** substitute `{field_name}` variables using the underlying field name, not the alias. Hidden attributes still resolve in `{field_name}` references — the visibility toggle only governs the _default_ popup.
- **Calculator popups** use the same field-name variables in the title and the formula. The description takes no variables. Variables in the title and the formula format the same way as in Custom popups.

The diagram shows which Format tab settings each popup type uses:

<!-- diagram:popup-format-flow -->
<svg class="dark:hidden" style="width: 100%; height: auto" viewBox="0 0 640 480" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="popup-format-flow-inline-title popup-format-flow-inline-desc">
  <title id="popup-format-flow-inline-title">How the Format tab feeds each popup</title>
  <desc id="popup-format-flow-inline-desc">Data flow: a clicked feature’s attributes pass through the Format tab’s alias, format and visibility; the Default popup uses all three and shows image URLs on top even when hidden, while Custom and Calculator popups use only the format, resolve hidden attributes too, and give equations the raw values.</desc>
  <defs>
    <marker id="popup-format-flow-inline-arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#525252"/></marker>
    <marker id="popup-format-flow-inline-arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#c4360c"/></marker>
  </defs>
  <rect width="100%" height="100%" fill="#f5f5f5"/>
  <path d="M320 68 L320 98" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-format-flow-inline-arrow)"/>
  <path d="M290 220 L290 236 Q290 244 282 244 L172 244 Q164 244 164 252 L164 318" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-format-flow-inline-arrow)"/>
  <path d="M350 220 L350 236 Q350 244 358 244 L468 244 Q476 244 476 252 L476 318" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#popup-format-flow-inline-arrow)"/>
  <rect x="172" y="270" width="104" height="16" rx="2" fill="#f5f5f5"/><text x="224" y="282" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">USES ALL THREE</text>
  <rect x="484" y="270" width="84" height="16" rx="2" fill="#f5f5f5"/><text x="526" y="282" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">FORMAT ONLY</text>
  <rect x="208" y="16" width="224" height="52" rx="6" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="320" y="39" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">A clicked feature</text><text x="320" y="57" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">every attribute, as stored</text>
  <rect x="196" y="100" width="248" height="120" rx="6" fill="#f5f5f5"/><rect x="196" y="100" width="248" height="120" rx="6" fill="rgba(196,54,12,0.08)" stroke="#c4360c" stroke-width="1.4"/><line x1="196" y1="148" x2="444" y2="148" stroke="rgba(23,23,23,0.12)" stroke-width="1"/><text x="212" y="122" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="start">Format tab</text><text x="212" y="139" fill="#525252" font-size="12" font-family="inherit" text-anchor="start">one setting per attribute</text><text x="212" y="168" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Alias: the label</text><text x="212" y="188" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Format: how a value shows</text><text x="212" y="208" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Visibility: the eye, on or off</text>
  <rect x="16" y="320" width="296" height="140" rx="6" fill="#f5f5f5"/><rect x="16" y="320" width="296" height="140" rx="6" fill="#ffffff" stroke="#171717" stroke-width="1"/><line x1="16" y1="368" x2="312" y2="368" stroke="rgba(23,23,23,0.12)" stroke-width="1"/><text x="32" y="342" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="start">Default popup</text><text x="32" y="359" fill="#525252" font-size="12" font-family="inherit" text-anchor="start">a list built for you</text><text x="32" y="388" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Only attributes with the eye on</text><text x="32" y="408" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Labelled with the alias</text><text x="32" y="428" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Values formatted</text><text x="32" y="448" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Image URLs on top, even when hidden</text>
  <rect x="328" y="320" width="296" height="140" rx="6" fill="#f5f5f5"/><rect x="328" y="320" width="296" height="140" rx="6" fill="#ffffff" stroke="#171717" stroke-width="1"/><line x1="328" y1="368" x2="624" y2="368" stroke="rgba(23,23,23,0.12)" stroke-width="1"/><text x="344" y="342" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="start">Custom and Calculator popups</text><text x="344" y="359" fill="#525252" font-size="12" font-family="inherit" text-anchor="start">field values you place yourself</text><text x="344" y="388" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Any attribute, hidden or not</text><text x="344" y="408" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Values formatted; alias not used</text><text x="344" y="428" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">Equations use the raw values</text><text x="344" y="448" fill="#171717" font-size="12" font-family="inherit" text-anchor="start">No values in a Calculator description</text>
</svg>
<svg class="hidden dark:block" style="width: 100%; height: auto" viewBox="0 0 640 480" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="popup-format-flow-inline-dark-title popup-format-flow-inline-dark-desc">
  <title id="popup-format-flow-inline-dark-title">How the Format tab feeds each popup</title>
  <desc id="popup-format-flow-inline-dark-desc">Data flow: a clicked feature’s attributes pass through the Format tab’s alias, format and visibility; the Default popup uses all three and shows image URLs on top even when hidden, while Custom and Calculator popups use only the format, resolve hidden attributes too, and give equations the raw values.</desc>
  <defs>
    <marker id="popup-format-flow-inline-dark-arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#a3a3a3"/></marker>
    <marker id="popup-format-flow-inline-dark-arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#ff7a4d"/></marker>
  </defs>
  <rect width="100%" height="100%" fill="#141414"/>
  <path d="M320 68 L320 98" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-format-flow-inline-dark-arrow)"/>
  <path d="M290 220 L290 236 Q290 244 282 244 L172 244 Q164 244 164 252 L164 318" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-format-flow-inline-dark-arrow)"/>
  <path d="M350 220 L350 236 Q350 244 358 244 L468 244 Q476 244 476 252 L476 318" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#popup-format-flow-inline-dark-arrow)"/>
  <rect x="172" y="270" width="104" height="16" rx="2" fill="#141414"/><text x="224" y="282" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">USES ALL THREE</text>
  <rect x="484" y="270" width="84" height="16" rx="2" fill="#141414"/><text x="526" y="282" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">FORMAT ONLY</text>
  <rect x="208" y="16" width="224" height="52" rx="6" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="320" y="39" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">A clicked feature</text><text x="320" y="57" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">every attribute, as stored</text>
  <rect x="196" y="100" width="248" height="120" rx="6" fill="#141414"/><rect x="196" y="100" width="248" height="120" rx="6" fill="rgba(255,122,77,0.10)" stroke="#ff7a4d" stroke-width="1.4"/><line x1="196" y1="148" x2="444" y2="148" stroke="rgba(242,242,242,0.14)" stroke-width="1"/><text x="212" y="122" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="start">Format tab</text><text x="212" y="139" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="start">one setting per attribute</text><text x="212" y="168" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Alias: the label</text><text x="212" y="188" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Format: how a value shows</text><text x="212" y="208" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Visibility: the eye, on or off</text>
  <rect x="16" y="320" width="296" height="140" rx="6" fill="#141414"/><rect x="16" y="320" width="296" height="140" rx="6" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><line x1="16" y1="368" x2="312" y2="368" stroke="rgba(242,242,242,0.14)" stroke-width="1"/><text x="32" y="342" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="start">Default popup</text><text x="32" y="359" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="start">a list built for you</text><text x="32" y="388" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Only attributes with the eye on</text><text x="32" y="408" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Labelled with the alias</text><text x="32" y="428" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Values formatted</text><text x="32" y="448" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Image URLs on top, even when hidden</text>
  <rect x="328" y="320" width="296" height="140" rx="6" fill="#141414"/><rect x="328" y="320" width="296" height="140" rx="6" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><line x1="328" y1="368" x2="624" y2="368" stroke="rgba(242,242,242,0.14)" stroke-width="1"/><text x="344" y="342" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="start">Custom and Calculator popups</text><text x="344" y="359" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="start">field values you place yourself</text><text x="344" y="388" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Any attribute, hidden or not</text><text x="344" y="408" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Values formatted; alias not used</text><text x="344" y="428" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">Equations use the raw values</text><text x="344" y="448" fill="#f2f2f2" font-size="12" font-family="inherit" text-anchor="start">No values in a Calculator description</text>
</svg>
<!-- /diagram:popup-format-flow -->

If a popup looks wrong, check the Format tab first — see [Attribute formatting overview](/docs/formatting-attributes).

## Where popups appear

Popups render in:

- The popup panel on the right of the map, when a viewer clicks or taps a feature. Popups only load on click or tap; there's no hover-to-show behaviour.
- The same panel shows `Details could not be loaded` and a `Try again` button when MangoMap finds the feature but cannot load its values. See [A popup says “Details could not be loaded”](/docs/configuring-popups/troubleshoot-popup-details-not-loaded).
- The print and export popup overlay — popups in printed maps and PDFs.

## Variable substitution

Custom popups support two kinds of inline values. The unified `Title` field, for any non-`None` type, supports only `{field_name}`.

- `{field_name}` — substitutes the feature's value for that attribute, formatted via the Format tab. In Custom and Calculator popups, missing or empty values render as blank, not `NULL`.
- Equations — evaluate a small expression (arithmetic and numeric functions), such as `{population} / {area}`, and show the result. Same syntax as the Calculator's formula. Equations use each attribute's raw value, not the format from the Format tab.

Insert both from the editor toolbar. Insert an equation with `Insert equation`.

## HTML sanitisation

An iframe must use an `https://` address on another site: MangoMap removes one with an `http://` address, a MangoMap page, or a page on the map's own site. A video player needs an `https://` file address. See [How to embed an iframe in a custom popup](/docs/configuring-popups/embed-iframe-in-popup).

Links and buttons get one more check, after the variables are filled in. The target must be a web address, an email, phone, or text message link, or a path on the same site. Any other kind of link shows as plain text, or as a button that does nothing.

## Why raster and WMS layers don't have a Popup tab

Raster and WMS layers don't carry per-feature attributes on the MangoMap side. There's no clickable feature, no attribute table to render in a popup, and no `{field_name}` to substitute. The `Popup` tab is hidden for these layer types — only the `Details` tab appears.

To add clickable points over a raster basemap, use a vector layer.

## Common confusions

**"My popup shows blank for a field that has data."** The variable name doesn't match a field on the layer. Variable names are exact field names. If the field exists but the value is empty, that also renders blank in Custom and Calculator popups.

**"I changed the alias on the Format tab but my custom popup still shows the old name."** The custom popup uses the literal text you typed into the editor. The `{field_name}` variable substitutes the _value_, not the label — so if you typed `Population:` next to a `{population}` variable, only the value updates when you change the alias. Edit the label text in the popup template directly.

**"Calculator popup users don't see the Calculate button."** The button text is configured in Step 1 of the Calculator wizard. The default is `Calculate`. If users see no button at all, check that all three steps were completed and the popup was saved.

## Related

- [Popup tab controls](/docs/configuring-popups/popup-reference)
- [How attribute formatting works in MangoMap](/docs/formatting-attributes/concepts-attribute-formatting)
- [How to use the default popup](/docs/configuring-popups/use-default-popup)
- [How to write a custom popup template](/docs/configuring-popups/write-custom-popup-template)
- [How to build a calculator popup](/docs/configuring-popups/build-a-calculator-popup)

---
