1.8.1 - 2023-09-22

1.8.0 - 2023-09-22

1.7.3 - 2023-09-18

1.7.2 - 2023-09-01

1.7.1 - 2023-08-28

  • quote URL in ajax proxy before passing it to Nginx

1.7.0 - 2023-08-28

1.6.1 - 2023-08-25

1.6.0 - 2023-08-22

1.5.1 - 2023-08-15

  • Fix layers behing hidden at zoom
  • Fix bad status show in edit header on map creation (cf #1260)

1.5.0 - 2023-08-15

1.4.4 - 2023-07-22

  • fix tooltip anchor unstable (cf #1224)
  • add a timeout in ajax proxy default view (cf #1222)
  • allow non ascii chars in variables (cf #1221)
  • add missing DB migration for label changes

1.4.3 - 2023-07-20

  • fix issue introduced in 1.4.2 where trying to read a non existent gzip

1.4.2 - 2023-07-19

  • fix If-Unmodified management for map prior to 1.3.0 (cf #1216)
  • allow arobases in variables (cf #1217)

1.4.1 - 2023-07-17

  • fix tooltip position, after Leaflet upgrade (cf #1207)
  • replace mousewheel event by wheel, to follow Leaflet change (cf #1211)
  • fallback user to dashboard after OAuth process (cf #1208)
  • add share status in user dashboard (cf #1209)

1.4.0 - 2023-07-15

  • add basic version of a "My Dashboard" page (cf #1196)
  • better fit iframe in popups (cf #1203)
  • fix missing line edit icons (cf #1205)
  • bump Leaflet from 1.3.4 to 1.9.4 (cf #1201)
  • fix permissions panel empty at first save (cf #1200)
  • add overflow-x: hidden to popup (cf #1198)
  • add time in datalayer versions list (cf #1195)

1.3.7 - 2023-07-03

  • changed datalayer and tilelayer icons (cf #1188)
  • fixed wrong language code passed to localeCompare (cf #1190)
  • fixed natural sort of feature not placing space before other chars (cf #1191)

1.3.6 - 2023-07-01

  • set font-display: swap; for fonts definition
  • do not force scroll on popup content
  • document Shift-Click and add Ctrl-Shift-click to edit datalayer
  • advanced filter should not affect non browsable layers
  • expose 'locale' parameter in templates
  • pass options at datalayer creation when importing from umap file
  • allow to set the lang while generating an anonymous_edit_url
  • control links target
  • allow to use properties as color value
  • add "delete" link in data browser
  • more natural sort of features
  • be more strict when coordinates are set manually
  • allow to sort reverse
  • handle CORS errors with an explicit message
  • add basic doc about settings
  • add umap command in Docker PATH
  • add a setting for the number of maps per search
  • use SVG icons
  • display latest created maps on empty search

1.3.5 - 2023-06-17

  • fix stars link in header

1.3.4 - 2023-06-17

  • allow to control icon opacity (cf #236)
  • display the number of maps on search results page
  • allow to customize user display name and URL slug
  • fix geo: scheme in (description) links (cf #1140)
  • fix popup footer floating within the content (cf #1146)

1.3.3 - 2023-06-07

  • add Dockerfile
  • fix content overlflow on popups (cf #1128)
  • display uMap version in the credit box + link to changelog (cf #1129)

1.3.2 - 2023-06-04

  • fix wrong message after creating a map while authenticated
  • display user name in the map edit toolbar when authenticated

1.3.1 - 2023-06-03

  • fix table rendering (cf #1117)
  • fix some errors not caught in ajax proxy (cf #1118 #1119)
  • add simple form to send secret edit link by email in anonymous mode (cf #1102)

1.3.0 - 2023-05-31

  • added a filter by category panel (cf #1041, thanks @k-3st3ban)
  • added a permanent credit (cf #1041, thanks @k-3st3ban)
  • allow to add an overlay tilelayer
  • replaced custom locate control with Leaflet.Locate (cf #1031, thanks @aleksejspopovs)
  • fixed bug where we coud not edit permissions of a new saved map unless reloading the page
  • CSS: Fix cut of text in iframes of popup content (cf #971, thanks @tordans)
  • enhanced property fallback in string formatting (cf #862, thanks @mstock)
  • lines and polygons measure is now displayed while drawing (cf #1068, thanks @knowname)
  • refactored zoomTo while making easing transition non default (cf #679 #179)
  • fixed old _storage_options not being cleaned when saving map (cf #1076)
  • added star maps feature (cf #683)
  • added a banner + removed create buttons when in read only mode (cf #1095)
  • added DOMPurify to escape malicious input from user (cf #1094)
  • expose direct map URL in the export panel (cf #699)
  • added a very basic /stats/ JSON view (cf #1100)
  • added max width for the help box (on small screens, cf #887)
  • display the steps for inputs of type range (cf #877)
  • lazy load tile layers thumbnails (cf #1089)
  • allow geolocation from iframe embeds (cf #898)
  • remove the limit of visible maps in user’s view (cf #1025)
  • switch to Django full text search instead of home made (cf #519)


  • redirect to user_maps at auth end when window.opener is unavailable (Twitter auth flow)


  • marked as protected, to fix Twitter auth


  • Allow to create search index without changing unaccent mutability (cf #519)
  • switched from If-None-Match to If-Unmodified-Since for concurrency control
  • prevent caching datalayers geojson when in edit mode
  • refactored gzip management


  • upgrade to Django 4.x, and upgrade of other deps
  • switched from custom DictField to propert JsonField


  • improved panel layout and image sizing (by @Binnette, cf #824)
  • upgraded Django to 2.2.17 and Pillow 8.0.1 (which drops support for python 3.5)
  • experimental fallback handling in templating (cf #820)
  • fixed search URL, and allow to control it from settings (cf #842)
  • fixed map frozen when setting by hand invalid coordinates (cf #799)
  • fixed changing map ownership (cf #780)
  • do not change map zoom when locating user (cf #763)
  • update map extent on first save if it has not been changed yet (cf #841)


  • fixed bug in popup inner HTML (cf #776)


  • minimal RTL support (cf #752)
  • fix username URL regex to allow spaces (cf #774)


  • added translations for ar, ast, et, he, id, is, no, pt-br, pt-pt, si-lk, sr, sv, th-th, tr
  • fixed username not updated when login with OAuth (by @Binnette, cf #754)
  • removed protocol from iframe URL (by @Binnette, cf #748)
  • fixed icon max-height (cf #143)
  • better image and iframe sizing in right panel (cf #184)
  • allow to use variables for tooltips (cf #737)
  • add a marker on user geolocation (cf #339)
  • change arrow direction when "more controls" is active (cf #485)
  • add an experimental feature permalink (cf #294)
  • fixed edge case where slideshow will run even when inactive
  • fixed bug when trying to add a property with a dot in the name (cf #426)


  • fixed parsing of two iframes
  • updated i18n
  • upgraded Django to 2.2.1 and psycopg2 to 2.8.1


  • downgraded psycopg2 to 2.7.7 (migrations where failing); should be fixed with Django 2.2.1
  • fixed annoying bug where "load more map" would fail
  • allow to filter by share status in admin page


  • added Map.BLOCKED share status, to redact maps issuing legal complaints (only available through the admin)
  • replaced DictField by JSONField (umap migrate needed)
  • added search_fields and autocomplete_fields to MapAdmin
  • lowercase frameborder in iframe export
  • fixed bug in slideshow since renaming of Leaflet.Storage


Upgrading to 1.0

  • because of the merge of django-leaflet-storage inside umap, the migrations has been reset, so a bit of SQL needs to be ran by hand:
DELETE FROM django_migrations WHERE app = 'leaflet_storage';
DELETE FROM django_migrations WHERE app = 'umap';
ALTER TABLE leaflet_storage_datalayer RENAME TO umap_datalayer;
ALTER TABLE leaflet_storage_datalayer_id_seq RENAME TO umap_datalayer_id_seq;
ALTER TABLE leaflet_storage_licence RENAME TO umap_licence;
ALTER TABLE leaflet_storage_licence_id_seq RENAME TO umap_licence_id_seq;
ALTER TABLE leaflet_storage_map RENAME TO umap_map;
ALTER TABLE leaflet_storage_map_editors RENAME TO umap_map_editors;
ALTER TABLE leaflet_storage_map_editors_id_seq RENAME TO umap_map_editors_id_seq;
ALTER TABLE leaflet_storage_map_id_seq RENAME TO umap_map_id_seq;
ALTER TABLE leaflet_storage_pictogram RENAME TO umap_pictogram;
ALTER TABLE leaflet_storage_pictogram_id_seq RENAME TO umap_pictogram_id_seq;
ALTER TABLE leaflet_storage_tilelayer RENAME TO umap_tilelayer;
ALTER TABLE leaflet_storage_tilelayer_id_seq RENAME TO umap_tilelayer_id_seq;
  • Then fake initial migrations:

    umap migrate --fake-initial
  • If you have customized some templates, change any leaflet_storage/ path to umap/

  • If you have customized some static, change any storage/ path to umap/

  • Each LEAFLET_STORAGE_XXX setting should be renamed in UMAP_XXX (but we still support them for now)

  • If you still have a MIDDLEWARE_CLASSES setting, rename to MIDDLEWARE

  • uMap now loads the local configuration from /etc/umap/umap.conf if UMAP_SETTINGS is not set, so you may want to use that path and remove the env var setting

  • As usual, remember to update statics:

    umap collectstatic
    umap compress


  • increased maps displayed in user maps page (cf #651)
  • exposed original map url in full export (cf #659)


  • fixed non browsable missing in caption panel
  • fixed remote datalayers missing in browse data panel when displayed on load (cf #509)


  • fixed table popup template not displaying name anymore (cf #647)


  • fixed OSM properties not read anymore (cf #641)
  • fixed permissions panel not active at first map save


  • fixed user autocompletion in permissions panel (cf #635)
  • fixed ternary choice dealing with unknown values (cf #633)


  • fixed geodjango defaulting geojson parsing to SRID 3857 instead of 4326
  • fixed tooltip on hover (cf #631)


  • added a readonly mode (UMAP_READONLY=True), useful to disallow update while migrating from one server to an other, for example


  • allow to cache proxied remote data requests (#513 #510 #160)
  • fixed popup template parsing of url with url as query string (#607)
  • naive support for nested variables in templates (#600)
  • Removed Map.tilelayer foreignkey
  • split popupTemplate in popupShape and popupTemplate: popupShape is for choosing between proper popup and panel, while popupTemplate now will allow to choose between default "name + description" mode, or table, or geoRSS ones. Allows to add more of those in the future also.
  • fixed popup not opening on first zoom button click when marker is clustered (#611)


  • BREAKING: support of python 2 is removed per upgrading to Django 2.0
  • WARNING: merge Leaflet-Storage and django-leaflet-storage inside umap to ease maintenance and contribution; See Upgrading to 1.0
  • permissions management forms are now built in JS directly
  • upgrade all dependencies
  • added a language switcher in the home page footer
  • added UMAP_CUSTOM_TEMPLATES and UMAP_CUSTOM_STATICS settings to make customization easier
  • added empty umap/theme.css to ease customization
  • add download link in the map and datalayers edit panel
  • fixed some touch related CSS issues
  • removed support for old URL (changed in version 0.3.0)
  • added languages: hr (Croatian), pl (Polish), hu (Hungarian), sl (Slovenian), el (Greek), gl (Galician)
  • JS locales are now bundled, no need to generate them while installing
  • local settings are now loaded from /etc/umap/umap.conf if available
  • fixed an issue where it was not possible to change the tilelayer if the tilelayer control was not added to the map (#587)
  • showLabel is now a ternary value (instead of having this plus labelHover) (#553)
  • fixed resetting a select to undefined for inheritable fields (#551)
  • fixed labelKey not being saved (#595)
  • filtering in data browser now is also reflected in the displayed features (#550)
  • fixed ClusterMarker text color on Chrome (#547)
  • allow to clone also markers
  • only list https ready tilerlayers when page is in https (#567)
  • allow to use an unicode character as Marker symbol (#527)
  • add {rank} as dynamic feature property (to be used in popup or icon symbol)
  • add an explicit button to attach a owner to an anonyous map (#568)
  • Add 'TablePanel' popup template (#481)


  • allow colon in properties to be consumed in popupTemplate
  • added am_ET, pl and sk_SK locales
  • fixed default licence being created in every available languages
  • switch to pytest for unit tests
  • Django 1.10 compatibility
  • add DataLayer.rank
  • Expose DataLayer versions
  • python3 support
  • add nofollow meta when map is not public


  • upgrade osmtogeojson to 2.1.0
  • localize and proxy dataUrl parameter


  • fix anonymous not able to edit map anymore


  • add tooltip when drawing
  • import multiple files at a time
  • added Chinese (Taiwan) locale
  • fixed right-click on path vertex not working propertly when editing


  • upgrade Leaflet.Editable to 0.2.0
  • fixed some bugs after Leaflet.Editable switch


  • introduce panel popup mode
  • upgraded leaflet.loading to 0.1.10
  • make the cluster text color dynamic
  • fix missing icons for transorm to polygon/polyline actions
  • add a slideshow mode
  • make possible to set cluster color by hand
  • make possible to manage showLabel from layer and map
  • basic kml/gpx download support
  • MultiLineString are merged at import
  • catch setMaxBounds errors (when using useless bounds)
  • first version of a table editor
  • it's now possible to cancel every mouse action of a polygon (useful when using them as background)
  • simple custom popup templates
  • more control over map data attribution (custom inputs added)
  • basic HTTP optimistic concurrency control
  • add "empty" button in limit bounds fieldset
  • make possible to decide which properties the data browser will filter on
  • add "datalayers" query string parameter to override shown datalayers on map load
  • add edit fieldset for changing marker latlng by hand
  • moved from Leaflet.Draw to Leaflet.Editable
  • added Vietnamese
  • by default, allow_edit is now false
  • added Chinese (Taiwan) locale


  • add TMS option to custom tilelayer
  • allow to define default properties at map level
  • support iframe in text formatting
  • fix bug where polygon export were adding a point
  • make that only visible elements are downloaded
  • iframe export helper
  • add Leaflet.label (for marker only atm)
  • GeoRSS support
  • heatmap support, thanks to
  • added optional caption bar
  • added new "large" popup template
  • added a button to empty a layer without deleting it
  • added a button to clone a datalayer
  • added dataUrl and dataFormat on map creation page
  • basic support for GeometryCollection import
  • removed submodules and switched to grunt for assets management
  • upgrade to django 1.6
  • sesql replaced by django-pgindex
  • support for gzip for datalayer geojson
  • support for X-Senfile/Accel-Redirect
  • more translations
  • fix anonymous map owner not able to delete their map
  • fix missing vendors assets
  • reset South migrations (some were bugged); to be back again with django 1.7
  • added russian locale
  • http optimistic concurrency control
  • longer anonymous cookie max_age (one month instead of session only)
  • add possibility to override default zoom with LEAFLET_ZOOM setting
  • fix bug where anonymous map wasn't editable by logged in users even if edit status was ANONYMOUS


  • datalayers are now sent to backend as geojson
  • there is now a global "save" button, and also a "cancel changes"
  • added a contextmenu, thanks to
  • added a loader, thanks to
  • import are processed client side, thanks to and
  • download is handled client side
  • option "outlink" as been added, to open external URL on polygon click
  • edit shortcuts has been added (Ctrl+E to toggle edit status, Ctrl+S to save, etc.)
  • links in popup now open in a now window
  • possibility to add custom icon symbols
  • new option to clusterize markers, thanks to
  • remote data option added to datalayer: this will fetch data from a given URL instead of from the local database
  • popup window can now display a table with all features properties
  • support of OSM XML format, thanks to
  • added a measure control, thanks to
  • added Transifex config
  • simple help boxes
  • it's now possible to set background layer with manual settings
  • add an edit button in the data browser (when in edit mode)
  • add icon URL formatting with feature properties
  • add "Transform to Polygon/Polyline" action
  • new link on contextmenu to open external routing service from clicked point
  • fix bug where features were duplicated when datalayer was deleted then reverted
  • add layer action to databrowser
  • add optional default CSS
  • allow to close panel by Ctrl+Enter when editing in textarea
  • add management for map max bounds
  • add Ctrl+Z for canceling changes
  • internal storage structure totally reviewed: datalayers are stored as geojson files, instead of being split in features stored in PostGIS
  • upload and download moved to client side (see Leaflet.Storage)
  • cloned map name is now prefixed by "Clone of "
  • added Transifex config
  • workaround for non asciiable map names
  • add a share_status fielf in Map model


  • add a data browser
  • add a popup footer with navigation between features
  • some work on IE compat
  • new tilelayer visual switcher
  • Spanish translation, thanks to @ikks
  • renamed internally category in datalayer
  • add a rank column to tilelayer to control their order in the tilelayer edit box
  • fix description that was not exported in the GeoJSON export
  • return proper 403 if bad signature on anonymous_edit_url access
  • refactored tilelayer management
  • smarter encoding management at import
  • smarter errors management at import
  • handle other delimiters than just comma for CSV import
  • Spanish translation, thanks to @ikks
  • map clone possibility


  • add a setting to display map caption on map load (cf #50)
  • add nl translation
  • update to Leaflet 0.6-dev and Leaflet.Draw 0.2
  • handle anonymous map creation
  • Fix color no more displayed in map info box (cf #70)
  • portuguese translation (thanks @FranciscoDS)
  • fix bug when the map title was too long (making the slug too long, and so over the database limit for this field)
  • add a setting to display map caption on map load (cf Leaflet.Storage#50)
  • update to django 1.5
  • first version of a CSV import
  • add a Textarea in import form
  • first version of data export (GeoJSON only for now)



  • first packaged version