0.15.0
~~~~~~

Breaking changes

- Remove deprecated Stamen tiles (@ocefpaf #1811)
- Remove `_env` instance attributes (@Conengmo #1817)
- Use write_png from Branca, remove from Folium (@Conengmo #1708)
- Remove deprecated Map.choropleth method (@Conengmo #1684)

New features

- Draggable layer control option (@Conengmo #1760)
- Add fit enabled overlays feature (@Conengmo #1693)
- Add type hints (@Conengmo #1677)

Improvements

- Update leaflet.fullscreen plugin to 3.0.0 (@afontenot #1818)
- Allow Choropleth key_on to traverse through array (@amrutharajashekar #1772)
- Support TagFilterButton in PolyLine, AntPath and GeoJson (@jamiechoi1995 #1756)
- Multiple instances of TimeSliderChoropleth on a single map (@Conengmo #1749)
- Make VectorGridProtobuf an overlay by default (@iwpnd #1723)
- Change internally where layers are added to the map (@Conengmo #1690)
- TimestampedWmsTileLayers inherit from MacroElement, not Layer (@Conengmo #1696)
- SideBySideLayers inherit from MacroElement, not Layer (@Conengmo #1695)
- Consolidate duplicate utility functions with Branca (@Conengmo #1676)

Bug fixes

- Fix interaction between DualMap and Draw (@Qweaper #1776)
- Fix MeasureControl plugin for Leaflet>=1.8.0 (@Conengmo #1748)
- Pin older version of leaflet side by side to fix SideBySideLayers plugin (@jtmiclat #1732)
- Fix Map.show_in_browser() by adding local file prefix to url (@RileyLeff #1704)

Documentation

- Deprecate example notebooks (@Conengmo #1798)
- Documentation overhaul (@Conengmo #1700)
- Update example notebooks after new Pandas version (@Conengmo #1761)


0.14.0
~~~~~~

Breaking changes

- Use keyword arguments as CSS properties in FloatImage (@Conengmo #1668)
- Upgrade Leaflet 1.6.0 to 1.9.3, set default font size (@Conengmo #1660)
- Upgrade Bootstrap 3.2.0 to 5.2.2 (@Conengmo #1650)

New plugins

- Add GroupedLayerControl plugin (@chansooligans #1592)
- Add SideBySide plugin (@fralc #1292)
- Add TagFilterButton plugin (@Waffleboy #1343)

Major improvements

- Add optional Jenks Natural Breaks Optimization to Choropleth (@pmains #1634)
- Add Map.show_in_browser() method (@Conengmo #1651)
- Accept TileProvider objects from the xyzservices package (@martinfleis #1498)
- Add support for Vega-Lite v4 and v5 (@wd60622 #1525)
- Upgrade Font Awesome 4.6.3 to 6.2.0 (@Sujithkumardola #1637)

Minor improvements

- Allow cql_filter argument in WmsTileLayer (@Conengmo #1673)
- Silently allow lowerCamelCase for vector path options (@Conengmo #1672)
- Allow html popups and templating in ClickForMarker (@Conengmo #1666)
- Add show_geometry_on_click argument to Draw plugin (@Conengmo #1657)
- Automatically join string and numeric key_on values for Choropleth (@alessioarena #1193)
- Add speed_slider argument to TimeStampedGeoJson (@gokyori #1279)
- Add gradient option to vector path options (@nocturnalAndroid #1433)
- Add initial timestamp argument to TimeSliderChoropleth (@jjbenes #1435)
- Allow passing TileLayer to Map (@Conengmo #1624)
- Use fullscreen window in Map._to_png() (@Conengmo #1656)
- Expose webdriver argument in Map._to_png() (@WooilJeong #1620)
- Export the map only in Map._to_png() (@Vayel #1197)

Bug fixes

- Fix LayerControl visibility on multiple renders (@Conengmo #1674)
- Fix the new TagFilterButton plugin, it's not a Layer (@Conengmo #1671)
- Fix TopoJson object path lookup (@Conengmo #1665)
- Fix Choropleth when `bins` is a list of integers (@Conengmo #1664)
- Fix attribution links in Notebooks opening within iframe (@Conengmo #1655)
- Fix empty geojson failing when using style_function (@agussman #1213)
- Fix Marker location validation for numpy array (@Conengmo #1647)
- Fix date sorting in TimeSliderChoropleth (@Ade-StapleHill #1503)
- Fix unescaped backticks in Popup (@Conengmo #1642)
- Fix `map.get_bounds()` when using GeometryCollection (@amrutha1098 #1633)
- Fix ClickForLatLng not imported in __init__ (@amrutha1098  #1627)

Documentation

- More Flask examples (@Conengmo #1675)
- Add PolyLine example to Quickstart.ipynb (@IamPhytan #1492)

Thanks to:

- All contributors to this release
- @giswqs for fixing typos
- @pmains for fixing flake8 warnings
- @amrutha1098 for fixing tests
- Our maintainers @ocefpaf and @Conengmo


0.13.0
~~~~~~

- Lazy popup: only load content on click (@marciogranzotto #1511)
- Add Leaflet.VectorGrid plugin: VectorGridProtobuf (@iwpnd #1576)
- Add blur parameter to HeatMapWithTime plugin (@Demetrio92 #1529)
- New ClickForLatLng class: click to save lat/lon to clipboard (@BibMartin #1530)
- Add width parameter to css for FloatImage (@beautah #1570)
- Add support for tooltips in TimestampedGeoJson objects (@tblundy #1472)
- Expose GeoJson's web retrieval to its own function (@beautah #1458)

Bug fixes

- Restore allowing simple Popup in GeoJson (@ocefpaf #1528)

Tests

- Fix test failure with recent branca change on map ids (@oefe #1556)

Documentation

- Thanks to @oefe, @Demetrio92 and @giswqs for helping out with the documentation


0.12.0
~~~~~~

- GeoJson add `zoom_on_click` option, default False (@conengmo #1349)
- Add Geocoder plugin (@WBP20 #1323)
- Replace githack.com CDN with jsdelivr.com (@conengmo #1337)
- Add SemiCircle plugin (@kuaka #1238)
- Move hardcoded JS CDN links to class variables (@and-viceversa @conengmo #1312 #1416)
- Treat data uris as valid (@Kirill888 #1428)
- Add GeoJson marker option (@jtbaker #957)

Bug fixes

- Fix TimeSliderChoropleth breaking when using layer control (@markhudson42 #1380)
- Fix GeoJson data loading (@conengmo #1353)
- Fix heatmap weights/intensity (@conengmo #1354 #1282)
- Fix multiple GeoJsonPopup 'name_getter' JS SyntaxError (@jtbaker #1347)
- Fix TimestampedWmsTileLayers layer control (@conengmo #1319)

API changes

- Remove deprecated Mapbox and Cloudmade tilesets (@conengmo #1339)


0.11.0
~~~~~~

- Upgrade Leaflet 1.5.1 -> 1.6.0 (@conengmo #1241)
- Add auto_start parameter to locate control plugin (@fullonic #1220)
- New feature: GeoJsonPopup (@jtbaker #1023)

Bug fixes

- Choropleth: default color for with and without data (@conengmo #1288)
- Update WMS data url in WmsTimeDimension example notebook (@sknzl #1259)
- Search plugin: fix position argument (@jjbenes #1304)
- Fix GeoJsonPopupAndTooltip example notebook (@conengmo #1298)
- Change geopandas dataframe `to_crs()` usage syntax (@artnikitin #1251)
- GeoJson: fix `show` parameter when embedding data (@conengmo #1289)
- Use https CDN for leaflet.timedimension.control.min.css (@sknzl #1256)
- Host leaflet-heatmap.js under different name to avoid adblockers (@conengmo #1240)

API changes

- Removed unused `folium.utilities.iter_points` function, use instead `iter_coords` (@conengmo #1294)

0.10.1
~~~~~~

Bug fixes

- Fix TimeSliderChoropleth plugin broken setStyle (@khllkcm #1227)
- Fix HeatMapWithTime plugin (@farisnanosoft @conengmo #1228)
- Fix adding GeoJSON to MarkerCluster (@conengmo #1190)

Documentation

- Typo corrections in examples/Colormaps.ipynb (@nik-ahuja #1215)

0.10.0
~~~~~~

- Bump Leaflet version from 1.4.0 to 1.5.1 (@ocefpaf #1149)
- Choropleth: warn if `key_on` not found in data (@evwhiz #1144)

Bug fixes

- Fix layer control in DualMap plugin (@conengmo #1156)
- Fix typo in DivIcon options (@fullonic #1181)
- Fix JS error in Draw plugin export option (@fullonic #1180)
- Fix typo in color options in Icon (@adnanhemani #1171)
- Fix draw and edit options in Draw plugin (@mccarthyryanc #1175)
- Remove warnings about conflicts with Draw plugin (@fullonic #1184)
- More explicit `key_on` check in Choropleth (@leandroordonez #1169)

Documentation

- Add Flask example (@penguindustin #1140)
- Improve contribution guide (@leonardofurtado #1173)

0.9.1
~~~~~

Bug fixes

- Fix geojson identifier (conengmo #1155)

0.9.0
~~~~~

This version drops support for Python 2.7. (#1100, #1104, #1111)
Python 3.5+ is required.

- Geojson separate style mapping (conengmo #1058)
- Warn for wrong color values in Icon (conengmo #1099)
- Use Jinja2's `tojson` filter to convert data (conengmo #1101)
- Pass **kwargs as options to Leaflet classes (conengmo #1101)
- Explicit coordinate validation (conengmo #1090)
- Add `icon_create_function` arg to `FastMarkerCluster` plugin (Gordonei #1109)
- Add `PolyLineOffset` plugin (FabeG #1091)
- Add Locate Control plugin (fullonic #1116)
- Add Leaflet `CustomPane` class (Ipkirwin #1094)

API changes

- Remove `add_tile_layer` method from `Map` (conengmo #1127)
- Remove args from `Map`, if needed use `TileLayer` instead (conengmo #1127)

Bug fixes

- Fix broken attribution for built-in tiles (FabeG #1128)
- Fix broken prefer_canvas option of `Map` (FabeG #1133)

0.8.3
~~~~~

- Relaxing location data type restriction (dskkato #1084)
- Add options to draw control (EtsuNDmA  #1035)
- folium 0.8.x will be the last version series to support Python 2 (conengmo #1087)

Bug Fixes

- Use jquery.com CDN instead of Google (conengmo #1086)

0.8.0
~~~~~

- Warn when using geojson data with GeometryCollection type in GeoJsonToolTip (jtbaker #988)
- Change default popup width from 300px to 100% (ocefpaf #1040)
- Automatically detect VegaLite version from specs (JarnoRFB #959)
- Validate style and highlight functions in GeoJson (jtbaker #1024)
- AntPath plugin (ocefpaf #1016)
- Update Leaflet version to 1.4.0 (conengmo #1047)
- DualMap plugin (conengmo #933)
- CirclePattern and StripePattern plugins (talbertc-usgs #966)
- Add option to make Marker draggable (Conengmo #1053)
- Example notebook on creating polygons from points (HZALK #1056)

API changes

- Improved Search plugin (jtbaker #995)

Bug Fixes

- Re-add missing GeoJsonTooltip in __init__ (Conengmo  #1029)
- Use Javascript template literals in DivIcon (Conengmo #1054)

0.7.0
~~~~~

- Fixed HeatMap silently fail on incompatible data types (ocefpaf #1017)
- Proper scaling on mobile phones (Conengmo #992)
- Update leaflet to 1.3.4 (ocefpaf #939)
- More options (tms, opacity, kwargs) in TileLayer (mpickering #948)
- Add MousePosition plugin (btozer #916)
- Add Minimap plugin (talbertc-usgs #968)
- Replace Rawgit CDN with Githack (jtbaker #1002)
- Handling of NaN and missing values in choropleth (FloChehab #1005)

API changes

- `threshold_scale` argument of choropleth is replaced by `bins` (FloChehab #1005)
- `Map.choropleth()` moved to `Choropleth` class, former is deprecated (Conengmo #1011)

Bug Fixes

- Fix wrong default value for fmt argument of WmsTileLayer (conengmo #950)
- Fix icon_create_function argument in MarkerCluster (conengmo #954)
- Update stylesheet url in TimestampedGeoJson (frodebjerke #963)
- Use Javascript template literals in Tooltip and Popup (jtbaker #955 #962)
- Proper scaling on mobile phones (conengmo #992)

0.6.0
~~~~~

- `Popup` accepts new arguments `show` (render open on page load) and `sticky` (popups
  only close when explicitly clicked) (jwhendy #778)
- Added leaflet-search plugin (ghandic #759)
- Improved Vector Layers docs, notebooks, and optional arguments (ocefpaf #731)
- Implemented `export=False/True` option to the Draw plugin layer for saving
  GeoJSON files (ocefpaf #727)
- Internal re-factor to reflect leaflet's organization (ocefpaf #725)
- Added `tooltip` support to `Marker`s (ocefpaf #724)
- Added `tooltip` support to all vector layers (ocefpaf #722)
- Added `TimeSliderChoropleth` plugin (halfdanrump #736)
- Added `show` parameter to choose which overlays to show on opening (conengmo #772)
- Added BeautifyIcon Plugin (arthuralvim and jeremybyu #819)
- Explicit WMSTileLayer options, accept all **kwargs (conengmo #838)
- Updated links to Draw plugin (conengmo #868)
- Ingest any object that __geo_interface__ (ocefpaf #880)
- Added `FeatureGroupSubGroup` plugin (shtrom #875)
- Added `duration` option to `TimestampedGeoJson` (andy23512 #894)
- Added `zoom_control` to `Map` to toggle zoom controls as per enhancement (#795) (okomarov #899)
- Change default `date_options` in TimestampedGeoJson (andy23512 #914)
- Added gradient argument to HeatMapWithTime (jtbaker #925)
- Added `Tooltip` and `GeoJsonTooltip` classes (jtbaker #883)

API changes

- Refactor `ImageOverlay`, `VideoOverlay`, `WmsTileLayer`, and `TileLayer` to a
  new `raster_layers.py` module (ocefpaf #729)
- `Rectangle` and `Polygon` were renamed and set to leaflet's defaults.
  Both now accepted all `Path`'s optional arguments (ocefpaf #722)

Bug Fixes

- Fixed numpy array bug (#749) in _flatten
- Unify `get_bounds` routine to avoid wrong responses
- If Path option `fill_color` is present it will override `fill=False`
- Fix disappearing layer control when using FastMarkerCluster (conengmo #866)
- Host heatmap.js to circumvent adblockers (conengmo #886)
- Fix permission error in Map._to_png() due to tempfile (conengmo #887)
- Replace strftime use in TimesliderChoropleth example (conengmo #919)

0.5.0
~~~~~

- Added `Draw` plugin (ocefpaf #720)
- Better handling of URL input (ocefpaf #717)
- Versioned docs! Visit http://python-visualization.github.io/folium/docs-v{{version}}
  or simply http://python-visualization.github.io/folium/ for the latest version.

Bug Fixes

- Fix `VideoOverlay` import (ocefpaf #719)
- Fix `choropleth` docstring (lsetiawan #713)
- Fix `choropleth` name in `LayerControl` (ocefpaf #493)

0.4.0
~~~~~
- Optional `iconCreateFunction` for `MarkerCluster` to customize the icons (odovad #701)
- Added `HeatMapWithTime` (Padarn #567)
- Added `MeasureControl` (ocefpaf #669)
- Added `VideoOverlay` plugin (ocefpaf #665)
- Added `TimestampedWmsTileLayers` plugin (acrosby #644 and #660)
- Vega-Lite features support via altair (njwilson23 #643)
- Experimental support for a static png output (ocefpaf #634)
- Added support for subdomains options in TileLayer (damselem #623)
- Updated to leaflet 1.2.0 (ocefpaf #693)
- Added `FastMarkerCluster` (James Gardiner #585 (proposed by ruoyu0088))
- Use the GIS standard "pixelated" css image-rendering in
  image overlays by default (dirkvdb #684 and ocefpaf #686)

API changes

- Removed features `MarkerCluster` in lieu of the plugin version (ocefpaf #704)
- `choropleth` now takes a single `geo_data` instead of `geo_path`/`geo_str`
  leaving the parsing to `GeoJSON`, remove the unused `data_out` option,
  add geopandas support (ocefpaf #702)
- All popups are considered HTML text by default (ocefpaf #689)
  If a popup requires rendering use the `kwarg` `parse_html=True`.
- `PolyLine`, `Circle` and `CircleMarker` are set to leaflet's defaults and
  accepted all `Path`'s optional arguments (ocefpaf #683 and #697)
- `WmsTileLayer` and `ImageOverlay` are set to leaflet's defaults and accepted
  all `TileLayer.WMS` and `ImageOverlay` optional arguments respectively (ocefpaf #695 and #697)
- Changed default `max_bounds` to `False` to reflect leaflet's default value (rdd9999 #641)
- Modified `Fullscreen` plugin `kwargs` to be more "pythonic"
- All `.format` properties are now `.fmt` for consistency
- Removed the `kwarg` `continuous_world` that is no longer in leaflet's API (ocefpaf #695)

Bug Fixes

- `subdomain` option in `TileLayer` should be a list and `WmsTileLayer`
  `overlay` default is `True` (ocefpaf #707)
- Checking if the lat, lon locations are floats to avoid empty maps
  (radumas #626)


0.3.0
~~~~~

- Added `FastMarkerCluster` (James Gardiner #585 (proposed by ruoyu0088))
- Added style option to 'Timestamped geojson' plugin (soymsk #627)
- Switched to `leaflet 1.0.1` (juoceano #531 and ocefpaf #535)
- Added `continuous_world`, `world_copy_jump`, and `no_wrap` options
  (ocefpaf #508)
- Update font-awesome to 4.6.3 (ocefpaf #478)
- Added text path (talespaiva #451 and ocefpaf #474)
- More options added to `LayerControl` (qingkaikong #473)
- More options added to `fullscreen` plugin (qingkaikong #468)
- Added `ColorLine` object (bibmartin #449)
- Added highlight function to `GeoJSON`, and `Chrorpleth` (JoshuaCano #341)
- Added `fullscreen` plugin (sanga #437)
- Added `smooth_factor `option to `GeoJSON`, `TopoJSON` and `Choropleth`
  (JamesGardiner #428)
- `Map` object now accepts Leaflet global switches (sgvandijk #424)
- Added weight option to CircleMarker (palewire #581)
- Added requests support to enable http(s) and ftp for geo_path parameter
  (jreades #602)

Bug Fixes

- Fixed image order (juoceano #536)
- Fixed Icon rotation (juoceano #530 and sseemayer #527)
- Fixed MIME type (text/plain) is not executable (talespaiva #440)
- Update Travis-CI testing to incorporate branca and fix notebook tests
  (ocefpaf #436)
- Removed MultiPolyLine and MultiPolygon, both are handled by PolyLine and
  PolyLine in leaflet 1.0.* (ocefpaf #554)
- Removed deprecated MapQuest tiles (HashCode55 #562)

0.2.1
~~~~~
Bugfix release

- TopoJson.get_bounds() returns [lon,lat] instead of [lat,lon] (eddies #383)
- HeatMap was not passing "name" argument (eddies #380)
- Fix heatmap.fit_bounds (same bug as #383) (BibMartin #384)
- Fix WMS rendering (ocefpaf #404)
- Change Leaflet.awesome-markers URL (BibMartin #393)

0.2.0
~~~~~
Major changes to the API with the new plugin system,
and several new features in this version. For more information check the docs:
http://python-visualization.github.io/folium/

- Added control_scale (BibMartin and jelmelk #355)
- WMS styles (ocefpaf #348)
- Docs! (BibMartin #344, #337, #329)
- No tile option (ocefpaf #330)
- GeoJSON and TopoJSON `style_function` (BibMartin #317 and #266)
- Colormaps (BibMartin # 300)
- Map CRS (BibMartin #297)
- GeoPandas drawing (BibMartin #296)
- Div Icons (BibMartin #250)
- CustomIcon (BibMartin #230)
- HeatMap (BibMartin #213)

And many bug fixes.
See https://github.com/python-visualization/folium/issues?&q=milestone:v0.2.0+is:closed+label:bug

0.1.6
~~~~~
- Added Image Overlay. (andrewgiessel b625613)
- All popups can take a `popup_width` keyword to adjust the width in
  text/HTML (ocefpaf #157).
- CAVEAT! Backwards incompatibly change: the keyword `width` in popups is now
  `popup_width` to avoid confusion with map `width`.


0.1.5
~~~~~
- Popups on lines. (themiurgo #122)
- Map auto bounds. (themiurgo #134)
- GeoJSON popup. (ocefpaf 7aad5e0)
- Added cartodb positron and dark_matter tiles (ocefpaf d4daee7)
- Forcing HTTPS when available. (ocefpaf c69ac89)
- Added Stamen Watercolor tiles. (ocefpaf 8c1f837)
- Added non-pixel width and height. (ocefpaf a87a449)
- Default map size is defined as non-pixel and equal to 100% of the window.
  (ocefpaf dcaf575)

Bug Fixes

- Draw GeoJSON first. (ocefpaf d92bdbe)
- Removed keyword unnecessary `popup_on`. (themiurgo 204d722)
- Fixed MapQuest Open Aerial URL. (ocefpaf 5e787fa)


0.1.4
~~~~~
- Popups allow unicode. (Anand Patil 545315a)
- Loading javascript over https. (Anand Patil ac9a4d6)
- Added `width` keyword to simple_popup. (ocefpaf 95325c4)
- Support multi_polyline. (Younggun Kim efbd1db)
- Added max and min zoom keywords. (ocefpaf 4ca4c92)

Bug Fixes

- Remove margins from leaflet-tiles. (Lennart Fricke 3c11433)
- Fix #50 template not found on Windows OSes. (ocefpaf 101daee)
- Fixed `add_wms_layer` py3k bug. (ocefpaf 154f0a5)


0.1.3
~~~~~
- Bootstrap glyphicon marker icons.  birdage
- Cluster marker group, and simple markers . (birdage 801d91c)
- WMS tile. (birdage 26f9668)
- Expanded color support to 253 with colorbrewer. (Adam Pah 3ba39ae)
- Port to python 3. (Pavel Tysliatski 5093e1b)
- Update geojson_template to Leaflet.js 0.7. (Justin Duke a917551)
- Update fol_template to Leaflet.js 0.7. (Justin Duke b328cec)
- Add support for lines. (Jacob Wasserman e3be077)
- Allow rendering w/ custom template. (Samat K Jain 1a85841)
- MapQuest Open tilesets. (Samat K Jain d536949)

Bug Fixes

- Vincent popups take padding into account. (Kyle Corbitt 26556fe)
- Simple popups correctly escape internal quotes. (Kyle Corbitt 20c979f)
- Add encoding specification.  jmduke
- Reverted change to mathchColor. (Roy Keyes 70d7f5c)
- Changed no-data fill to null/no-fill, rather than #fff. (Rob Story 6ff80a6)
- Fixed issue with counties TopoJSON. (Rob Story cddaab3)


0.1.2
~~~~~
- TopoJSON functionality. (Rob Story 5566b71)
- Vincent/Vega charts as popups. (Rob Story 4b7e402)
- GeoJSON overlays added. (Rob Story b5d9081)
- Click to add markers, popover Lat/Lng functionality. (Rob Story 9c809f9)
- Simple and Circle markers added. (Rob Story 181ac51)
- Initial commit. (Rob Story 6a43874)
