---
title: "How feature editing works in MangoMap"
description: "Understand which layers you can edit, who can edit them, and why a saved feature edit changes the dataset on every map that uses it."
sidebar:
  label: "How feature editing works"
---

Feature editing changes the dataset behind a layer. The saved change appears on every map that uses the dataset.

## Available actions

For an editable vector feature, the popup menu provides:

- `Edit attributes`
- `Edit geometry`
- `Add feature`
- `Delete feature`

Raster and WMS layers do not contain editable vector features.

## Permissions

The editing actions appear only when the signed-in user can edit features in the dataset. Your account role and your access to the dataset both matter.

See [How dataset access works](/docs/dataset-access/concepts-dataset-access) and [Account roles](/docs/account-roles) for that model.

## Popups are the entry point

Select an existing feature to open its popup, then use the three-dot menu. A layer with popups disabled does not provide this entry point.

Adding also starts from an existing feature. MangoMap uses it to identify the dataset, layer, and attributes. The dataset's geometry type sets what you draw. Because adding needs an existing feature, the map editor cannot add the first feature to an empty dataset.

## Changes affect source data

| Action | Dataset effect |
| --- | --- |
| Edit attributes | Changes the values of one feature |
| Edit geometry | Changes one feature's shape |
| Add feature | Adds a feature |
| Delete feature | Permanently removes the feature |

A map that is already open picks up the change within about 20 seconds.

One saved edit reaches every map that uses the dataset, and a later file update replaces it:

<!-- diagram:feature-edit-flow -->
<svg class="dark:hidden" style="width: 100%; height: auto" viewBox="0 0 640 224" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="feature-edit-flow-inline-title feature-edit-flow-inline-desc">
  <title id="feature-edit-flow-inline-title">Where a feature edit goes</title>
  <desc id="feature-edit-flow-inline-desc">Data flow: an edit, add or delete in a popup writes to the dataset, which gets a new tile version, so the layer on every map that uses the dataset shows the change; there is no per-map copy and no undo, and a file update or Dropbox sync replaces the dataset's features and overwrites the edits.</desc>
  <defs>
    <marker id="feature-edit-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="feature-edit-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="M160 76 L238 76" fill="none" stroke="#c4360c" stroke-width="1.4" marker-end="url(#feature-edit-flow-inline-arrow-accent)"/>
  <path d="M160 164 L238 164" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#feature-edit-flow-inline-arrow)"/>
  <path d="M392 76 L478 76" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#feature-edit-flow-inline-arrow)"/>
  <path d="M392 120 L478 120" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#feature-edit-flow-inline-arrow)"/>
  <path d="M392 164 L478 164" fill="none" stroke="#525252" stroke-width="1.2" marker-end="url(#feature-edit-flow-inline-arrow)"/>
  <rect x="172" y="52" width="56" height="16" rx="2" fill="#f5f5f5"/><text x="200" y="64" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">WRITES</text>
  <rect x="163" y="140" width="74" height="16" rx="2" fill="#f5f5f5"/><text x="200" y="152" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">REPLACES</text>
  <rect x="16" y="48" width="144" height="56" rx="6" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="88" y="73" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Popup edit</text><text x="88" y="91" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">edit, add or delete</text>
  <rect x="16" y="136" width="144" height="56" rx="6" fill="rgba(23,23,23,0.04)" stroke="rgba(23,23,23,0.32)" stroke-width="1"/><text x="88" y="161" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">File update</text><text x="88" y="179" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">or Dropbox sync</text>
  <rect x="240" y="32" width="152" height="176" rx="6" fill="#f5f5f5"/>
  <rect x="240" y="32" width="152" height="176" rx="6" fill="rgba(196,54,12,0.08)" stroke="#c4360c" stroke-width="1.4"/>
  <text x="316" y="98" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Dataset</text>
  <text x="316" y="118" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">new tile version</text>
  <text x="316" y="136" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">no per-map copy</text>
  <text x="316" y="154" fill="#525252" font-size="12" font-family="inherit" text-anchor="middle">no undo</text>
  <text x="552" y="40" fill="#525252" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">ON EVERY MAP</text>
  <rect x="480" y="60" width="144" height="32" rx="6" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="552" y="81" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Layer on map 1</text>
  <rect x="480" y="104" width="144" height="32" rx="6" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="552" y="125" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Layer on map 2</text>
  <rect x="480" y="148" width="144" height="32" rx="6" fill="#ffffff" stroke="#171717" stroke-width="1"/><text x="552" y="169" fill="#171717" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Layer on map 3</text>
</svg>
<svg class="hidden dark:block" style="width: 100%; height: auto" viewBox="0 0 640 224" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="feature-edit-flow-inline-dark-title feature-edit-flow-inline-dark-desc">
  <title id="feature-edit-flow-inline-dark-title">Where a feature edit goes</title>
  <desc id="feature-edit-flow-inline-dark-desc">Data flow: an edit, add or delete in a popup writes to the dataset, which gets a new tile version, so the layer on every map that uses the dataset shows the change; there is no per-map copy and no undo, and a file update or Dropbox sync replaces the dataset's features and overwrites the edits.</desc>
  <defs>
    <marker id="feature-edit-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="feature-edit-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="M160 76 L238 76" fill="none" stroke="#ff7a4d" stroke-width="1.4" marker-end="url(#feature-edit-flow-inline-dark-arrow-accent)"/>
  <path d="M160 164 L238 164" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#feature-edit-flow-inline-dark-arrow)"/>
  <path d="M392 76 L478 76" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#feature-edit-flow-inline-dark-arrow)"/>
  <path d="M392 120 L478 120" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#feature-edit-flow-inline-dark-arrow)"/>
  <path d="M392 164 L478 164" fill="none" stroke="#a3a3a3" stroke-width="1.2" marker-end="url(#feature-edit-flow-inline-dark-arrow)"/>
  <rect x="172" y="52" width="56" height="16" rx="2" fill="#141414"/><text x="200" y="64" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">WRITES</text>
  <rect x="163" y="140" width="74" height="16" rx="2" fill="#141414"/><text x="200" y="152" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">REPLACES</text>
  <rect x="16" y="48" width="144" height="56" rx="6" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="88" y="73" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Popup edit</text><text x="88" y="91" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">edit, add or delete</text>
  <rect x="16" y="136" width="144" height="56" rx="6" fill="rgba(242,242,242,0.05)" stroke="rgba(242,242,242,0.34)" stroke-width="1"/><text x="88" y="161" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">File update</text><text x="88" y="179" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">or Dropbox sync</text>
  <rect x="240" y="32" width="152" height="176" rx="6" fill="#141414"/>
  <rect x="240" y="32" width="152" height="176" rx="6" fill="rgba(255,122,77,0.10)" stroke="#ff7a4d" stroke-width="1.4"/>
  <text x="316" y="98" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Dataset</text>
  <text x="316" y="118" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">new tile version</text>
  <text x="316" y="136" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">no per-map copy</text>
  <text x="316" y="154" fill="#a3a3a3" font-size="12" font-family="inherit" text-anchor="middle">no undo</text>
  <text x="552" y="40" fill="#a3a3a3" font-size="10" font-weight="600" letter-spacing="0.1em" font-family="inherit" text-anchor="middle">ON EVERY MAP</text>
  <rect x="480" y="60" width="144" height="32" rx="6" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="552" y="81" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Layer on map 1</text>
  <rect x="480" y="104" width="144" height="32" rx="6" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="552" y="125" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Layer on map 2</text>
  <rect x="480" y="148" width="144" height="32" rx="6" fill="#1c1c1c" stroke="#f2f2f2" stroke-width="1"/><text x="552" y="169" fill="#f2f2f2" font-size="14" font-weight="600" font-family="inherit" text-anchor="middle">Layer on map 3</text>
</svg>
<!-- /diagram:feature-edit-flow -->

## No per-map edit or undo

Data edits apply to the dataset, not one map. Layer styling, popup configuration, and attribute formatting can differ per map, but feature values and geometry belong to the dataset.

MangoMap does not keep an in-product revision history for feature edits. `Delete feature` asks you to confirm, but after you confirm you cannot undo the deletion.

For large changes or recovery from an external source, update the dataset from a prepared file instead of editing features one at a time. A file update or a Dropbox sync replaces all the dataset's features with the ones in the file, so it overwrites any edits made in the map.

## Related

- [Edit a feature's attributes](/docs/editing-features/edit-feature-attributes)
- [Edit a feature's geometry](/docs/editing-features/edit-feature-geometry)
- [Add a feature](/docs/editing-features/add-a-feature)
- [Delete a feature](/docs/editing-features/delete-a-feature)
- [Feature edit controls](/docs/editing-features/feature-edit-controls-reference)
