Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
425 lines (335 sloc) 38.2 KB

Leaflet Changelog

(all changes without author notice are by @mourner)


An in-progress version being developed on the master branch.


  • Replaced L.Transition with a much better and simpler L.PosAnimation.
  • Adjusted panning inertia to be more natural.
  • Improved panning animation performance in IE6-8.
  • Improved zoom control to zoom by 3 levels if you hold shift while clicking on a button.
  • Added optional delta argument to Map zoomIn and zoomOut (1 by default).


  • Fixed a bug with pan animation where it jumped to its end position if you tried to drag the map.
  • Fixed a bug with shift-clicking on a zoom button leading to unexpected result.
  • Fixed a bug where "Not implemented" error sometimes appeared in IE6-8 (by @bryguy and @lookfirst). #892 #893

0.4.4 (August 7, 2012)


  • Improved GeoJSON setStyle to also accept function (like the corresponding option).
  • Added GeoJSON resetStyle(layer), useful for resetting hover state.
  • Added feature property to layers created with GeoJSON (containing the GeoJSON feature data).
  • Added FeatureGroup bringToFront and bringToBack methods (so that they would work for multipolys).
  • Added optional animate argument to Map invalidateSize (by @ajbeaven). #857


  • Fixed a bug where tiles sometimes disappeared on initial map load on Android 2/3 (by @danzel). #868
  • Fixed a bug where map would occasionally flicker near the border on zoom or pan on Chrome.
  • Fixed a bug where Path bringToFront and bringToBack didn't return this.
  • Removed zoom out on Win/Meta key binding (since it interferes with global keyboard shortcuts). #869

0.4.2 (August 1, 2012)

  • Fixed a bug where layers control radio buttons would not work correctly in IE7 (by @danzel). #862
  • Fixed a bug where FeatureGroup removeLayer would unbind popups of removed layers even if the popups were not put by the group (affected Leaflet.markercluster plugin) (by @danzel). #861

0.4.1 (July 31, 2012)

  • Fixed a bug that caused marker shadows appear as opaque black in IE6-8. #850
  • Fixed a bug with incorrect calculation of scale by the scale control. #852
  • Fixed broken L.tileLayer.wms class factory (by @mattcurrie). #856
  • Improved retina detection for TileLayer detectRetina option (by @sxua). #854

0.4 (July 30, 2012)

API simplification

Leaflet 0.4 contains several API improvements that allow simpler, jQuery-like syntax (example) while being backwards compatible with the previous approach (so you can use both styles):

  • Improved most methods and options to accept LatLng, LatLngBounds, Point and Bounds values in an array form (e.g. map.panTo([lat, lng]) will be the same as map.panTo(new L.LatLng(lat, lng)))
  • Added addTo method to all layer classes, e.g. marker.addTo(map) is equivalent to map.addLayer(marker)
  • Added factory methods to most classes to be able to write code without new keyword, named the same as classes but starting with a lowercase letter, e.g.'map') is the same as new L.Map('map')

Notable new features

  • Added configurable panning inertia - after a quick pan, the map slows down in the same direction.
  • Added keyboard navigation for panning/zooming with keyboard arrows and +/- keys (by @ericmmartinez). #663 #646
  • Added smooth zoom animation of markers, vector layers, image overlays and popups (by @danzel). #740 #758
  • Added Android 4+ pinch-zoom support (by @danzel). #774
  • Added polyline and polygon editing. #174
  • Added an unobtrusive scale control.
  • Added DivIcon class that easily allows you to create lightweight div-based markers.
  • Added Rectangle vector layer (by @JasonSanford). #504


Usability improvements

  • Improved zooming so that you don't get a blank map when you zoom in or out twice quickly (by @danzel). #7 #729
  • Drag-panning now works even when there are markers in the starting point (helps on maps with lots of markers). #506
  • Improved panning performance even more (there are no wasted frames now).
  • Improved pinch-zoom performance in mobile Chrome and Firefox.
  • Improved map performance on window resize.
  • Replaced box-shadow with border on controls for mobile devices to improve performance.
  • Slightly improved default popup styling.
  • Added TileLayer detectRetina option (false by default) that makes tiles show in a higher resolution on iOS retina displays (by @Mithgol). #586

GeoJSON API changes

GeoJSON API was improved to be simpler and more flexible (example). The changes are not backwards-compatible, so be sure to update your old code.

  • Added style option for styling vector layers, passed either as an object or as a function (to style vector layers according to GeoJSON properties).
  • Added filter option to leave out features that don't correspond to a certain criteria (e.g. based on properties).
  • Added onEachFeature option to execute certain code on each feature layer based on its properties (binding popups, etc).
  • Changed pointToLayer function signature to provide geojson in addition to latlng when creating point features for more flexibility.

Icon API changes

Icon API was improved to be more flexible, but one of the changes is backwards-incompatible: you now need to pass different icon properties (like iconUrl) inside an options object (example).

  • Converted Icon properties to options, changed constructor signature to Icon(options).
  • Moved default marker icon options to L.Icon.Default class (which extends from L.Icon).
  • Added Icon className option to assign a custom class to an icon.
  • Added Icon shadowAnchor option to set the anchor of the shadow.
  • Made all Icon options except iconUrl optional (if not specified, they'll be chosen automatically or implemented using CSS). Anchor is centered by default (if size is specified), and otherwise can be set through CSS using negative margins.

Control API changes

  • Added setPosition and getPosition to all controls, as well as ability to pass certain position as an option when creating a control.
  • Made controls implementation easier (now more magic happens under the hood).
  • Replaced ugly control position constants (e.g. L.Control.Position.TOP_LEFT) with light strings ('topleft', 'bottomright', etc.)

Other breaking API changes

  • Improved TileLayer constructor to interpolate URL template values from options (removed third urlParams argument).
  • Changed TileLayer scheme: 'tms' option to tms: true.
  • Removed Map locateAndSetView method (use locate with setView: true option)
  • Changed popup minWidth and maxWidth options to be applied to content element, not the whole popup.
  • Moved prefix argument to options in Control.Attribution constructor.
  • Renamed L.VERSION to L.version.

Other API improvements

  • Improved on and off methods to also accept (eventHash[, context]), as well as multiple space-separated events (by @Guiswa). #770
  • Improved off to remove all listeners of the event if no function was specified (by @Guiswa). #770 #691
  • Added TileLayer setZIndex method for controlling the order of tile layers (thanks to @mattcurrie). #837
  • Added Control.Layers autoZIndex option (on by default) to preserve the order of tile layers when switching.
  • Added TileLayer redraw method for re-requesting tiles (by @greeninfo). #719
  • Added TileLayer setUrl method for dynamically changing the tile URL template.
  • Added bringToFront and bringToBack methods to TileLayer, ImageOverlay and vector layers. #185 #505
  • Added TileLayer loading event that fires when its tiles start to load (thanks to @lapinos03). #177
  • Added TileLayer.WMS setParams method for setting WMS parameters at runtime (by @greeninfo). #719
  • Added TileLayer.WMS subdomain support ({s} in the url) (by @greeninfo). #735
  • Added originalEvent property to MouseEvent (by @k4). #521
  • Added containerPoint property to MouseEvent. #413
  • Added contextmenu event to vector layers (by @ErrorProne). #500
  • Added LayerGroup eachLayer method for iterating over its members.
  • Added FeatureGroup mousemove and contextmenu events (by @jacobtoye). #816
  • Added chaining to DomEvent methods.
  • Added on and off aliases for DomEvent addListener and removeListener methods.
  • Added L_NO_TOUCH global variable switch (set it before Leaflet inclusion) which disables touch detection, helpful for desktop apps built using QT. #572
  • Added dashArray option to vector layers for making dashed strokes (by jacobtoye). #821 #165
  • Added Circle getBounds method. #440
  • Added Circle getLatLng and getRadius methods (by @Guiswa). #655
  • Added openPopup method to all vector layers. #246
  • Added public redraw method to vector layers (useful if you manipulate their LatLng points directly).
  • Added Marker opacity option and setOpacity method.
  • Added Marker update method. #392
  • Improved Marker openPopup not to raise an error if it doesn't have a popup. #507
  • Added ImageOverlay opacity option and setOpacity method. #438
  • Added Popup maxHeight option that makes content inside the popup scrolled if it doesn't fit the specified max height.
  • Added Popup openOn(map) method (similar to Map openPopup).
  • Added Map getContainer method (by @Guiswa). #654
  • Added Map containerPointToLatLng and latLngToContainerPoint methods. #474
  • Added Map addHandler method.
  • Added Map mouseup and autopanstart events.
  • Added LatLngBounds pad method that returns bounds extended by a percentage (by @jacobtoye). #492
  • Moved dragging cursor styles from JS code to CSS.

Bug fixes

General bugfixes

  • Fixed a bug where the map was zooming incorrectly inside a position: fixed container (by @chx007). #602
  • Fixed a bug where scaled tiles weren't cleared up after zoom in some cases (by @cfis) #683
  • Fixed a bug where map wouldn't drag over a polygon with a mousedown listener. #834

API bugfixes

  • Fixed a regression where removeLayer would not remove corresponding attribution. #488
  • Fixed a bug where popup close button wouldn't work on manually added popups. #423
  • Fixed a bug where marker click event would stop working if you dragged it and then disabled dragging. #434
  • Fixed a bug where TileLayer setOpacity wouldn't work when setting it back to 1.
  • Fixed a bug where vector layer setStyle({stroke: false}) wouldn't remove stroke and the same for fill. #441
  • Fixed a bug where Marker bindPopup method wouldn't take offset option into account.
  • Fixed a bug where TileLayer load event wasn't fired if some tile didn't load (by @lapinos03 and @cfis) #682
  • Fixed error when removing GeoJSON layer. #685
  • Fixed error when calling GeoJSON clearLayer (by @runderwood). #617
  • Fixed a bug where Control setPosition wasn't always working correctly (by @ericmmartinez). #657
  • Fixed a bug with Util.bind sometimes losing arguments (by @johtso). #588
  • Fixed a bug where drag event was sometimes fired after dragend. #555
  • Fixed a bug where TileLayer load event was firing only once (by @lapinos03 and shintonik). #742 #177
  • Fixed a bug where FeatureGroup popup events where not cleaned up after removing a layer from it (by @danzel). #775
  • Fixed a bug where DomUtil.removeClass didn't remove trailing spaces (by @jieter). #784
  • Fixed a bug where marker popup didn't take popup offset into account.
  • Fixed a bug that led to an error when polyline was removed inside a moveend listener.
  • Fixed a bug where LayerGroup addLayer wouldn't check if a layer has already been added (by @danzel). 798

Browser bugfixes

  • Fixed broken zooming on IE10 beta (by @danzel). #650 #751
  • Fixed a bug that broke Leaflet for websites that had XHTML content-type header set (by lars-sh). #801
  • Fixed a bug that caused popups to be empty in IE when passing a DOM node as the content (by @nrenner). #472
  • Fixed inability to use scrolled content inside popup due to mouse wheel propagation.
  • Fixed a bug that caused jumping/stuttering of panning animation in some cases.
  • Fixed a bug where popup size was calculated incorrectly in IE.
  • Fixed a bug where cursor would flicker when dragging a marker.
  • Fixed a bug where clickable paths on IE9 didn't have a hand cursor (by naehrstoff). #671
  • Fixed a bug in IE with disappearing icons when changing opacity (by @tagliala and DamonOehlman). #667 #600
  • Fixed a bug with setting opacity on IE10 (by @danzel). 796
  • Fixed a bug where Control.Layers didn't work on IE7. #652
  • Fixed a bug that could cause false mousemove events on click in Chrome (by @stsydow). #757
  • Fixed a bug in IE6-8 where adding fill or stroke on vector layers after initialization with setStyle would break the map. #641
  • Fixed a bug with setOpacity in IE where it would not work correctly if used more than once on the same element (by @ajbeaven). #827
  • Fixed a bug in Chrome where transparent control corners sometimes couldn't be clicked through (by @danzel). #836 #575

Mobile browser bugfixes

  • Fixed a bug that sometimes caused map to disappear completely after zoom on iOS (by @fr1n63). #580 #777
  • Fixed a bug that often caused vector layers to flicker on drag end on iOS (by @krawaller). #18
  • Fixed a bug with false map click events on pinch-zoom and zoom/layers controls click. #485
  • Fixed a bug where touching the map with two or more fingers simultaneously would raise an error.
  • Fixed a bug where zoom control wasn't always visible on Android 3. #335
  • Fixed a bug where opening the layers control would propagate a click to the map (by @jacobtoye). #638
  • Fixed a bug where ImageOverlay wouldn't stretch properly on zoom on Android 2. #651
  • Fixed a bug where clearLayers for vector layers on a Canvas backend (e.g. on Android 2) would take unreasonable amount of time. #785
  • Fixed a bug where setLatLngs and similar methods on vector layers on a Canvas backend would not update the layers immediately. #732

0.3.1 (February 14, 2012)

  • Fixed a regression where default marker icons wouldn't work if Leaflet include url contained a query string.
  • Fixed a regression where tiles sometimes flickered with black on panning in iOS.

0.3 (February 13, 2012)

Major features

  • Added Canvas backend for vector layers (polylines, polygons, circles). This enables vector support on Android < 3, and it can also be optionally preferred over SVG for a performance gain in some cases. Thanks to @florianf for a big part of this work.
  • Added layers control (Control.Layers) for convenient layer switching.
  • Added ability to set max bounds within which users can pan/zoom. #93


Usability improvements

  • Map now preserves its center after resize.
  • When panning to another copy of the world (that's infinite horizontally), map overlays now jump to corresponding positions. #273
  • Limited maximum zoom change on a single mouse wheel movement (so you won't zoom across the whole zoom range in one scroll). #149
  • Significantly improved line simplification performance (noticeable when rendering polylines/polygons with tens of thousands of points)
  • Improved circles performance by not drawing them if they're off the clip region.
  • Improved stability of zoom animation (less flickering of tiles).

API improvements

  • Added ability to add a tile layer below all others (map.addLayer(layer, true)) (useful for switching base tile layers).
  • Added Map zoomstart event (thanks to @Fabiz). #377
  • Improved Map locate method, added ability to watch location continuously and more options. #212
  • Added second argument inside to Map getBoundsZoom method that allows you to get appropriate zoom for the view to fit inside the given bounds.
  • Added hasLayer method to Map.
  • Added Marker zIndexOffset option to be able to set certain markers below/above others. #65
  • Added urlParams third optional argument to TileLayer constructor for convenience: an object with properties that will be evaluated in the URL template.
  • Added TileLayer continuousWorld option to disable tile coordinates checking/wrapping.
  • Added TileLayer tileunload event fired when tile gets removed after panning (by @CodeJosch). #256
  • Added TileLayer zoomOffset option useful for non-256px tiles (by @msaspence).
  • Added TileLayer zoomReverse option to reverse zoom numbering (by @Majiir). #406
  • Added TileLayer.Canvas redraw method (by @mortenbekditlevsen). #459
  • Added Polyline closestLayerPoint method that's can be useful for interaction features (by @anru). #186
  • Added setLatLngs method to MultiPolyline and MultiPolygon (by @anru). #194
  • Added getBounds method to Polyline and Polygon (by @JasonSanford). #253
  • Added getBounds method to FeatureGroup (by @JasonSanford). #557
  • Added FeatureGroup setStyle method (also inherited by MultiPolyline and MultiPolygon). #353
  • Added FeatureGroup invoke method to call a particular method on all layers of the group with the given arguments.
  • Added ImageOverlay load event. #213
  • Added minWidth option to Popup (by @marphi). #214
  • Improved LatLng constructor to be more tolerant (and throw descriptive error if latitude or longitude can't be interpreted as a number). #136
  • Added LatLng distanceTo method (great circle distance) (by @mortenbekditlevsen). #462
  • Added LatLngBounds toBBoxString method for convenience (by @JasonSanford). #263
  • Added LatLngBounds intersects(otherBounds) method (thanks to @pagameba). #350
  • Made LatLngBounds extend method to accept other LatLngBounds in addition to LatLng (by @JasonSanford). #553
  • Added Bounds intersects(otherBounds) method. #461
  • Added L.Util.template method for simple string template evaluation.
  • Added DomUtil.removeClass method (by @anru).
  • Improved browser-specific code to rely more on feature detection rather than user agent string.
  • Improved superclass access mechanism to work with inheritance chains of 3 or more classes; now you should use Klass.superclass instead of this.superclass (by @anru). #179
  • Added Map boxzoomstart and boxzoomend events (by @zedd45). #554
  • Added Popup contentupdate event (by @mehmeta). #548

Breaking API changes

  • shiftDragZoom map option/property renamed to boxZoom.
  • Removed mouseEventToLatLng method (bringed back in 0.4).

Development workflow improvements

  • Build system completely overhauled to be based on Node.js, Jake, JSHint and UglifyJS.
  • All code is now linted for errors and conformity with a strict code style (with JSHint), and wont build unless the check passes.


General bugfixes

  • Fixed a bug where Circle was rendered with incorrect radius (didn't take projection exagerration into account). #331
  • Fixed a bug where Map getBounds would work incorrectly on a date line cross. #295
  • Fixed a bug where polygons and polylines sometimes rendered incorrectly on some zoom levels. #381
  • Fixed a bug where fast mouse wheel zoom worked incorrectly when approaching min/max zoom values.
  • Fixed a bug where GeoJSON pointToLayer option wouldn't work in a GeometryCollection. #391
  • Fixed a bug with incorrect rendering of GeoJSON on a date line cross. #354
  • Fixed a bug where map panning would stuck forever after releasing the mouse over an iframe or a flash object (thanks to @sten82). #297 #64
  • Fixed a bug where mouse wheel zoom worked incorrectly if map is inside scrolled container (partially by @chrillo). #206
  • Fixed a bug where it was possible to add the same listener twice. #281
  • Fixed a bug where Circle was rendered with incorrect radius (didn't take projection exaggeration into account). #331
  • Fixed a bug where Marker setIcon was not working properly (by @marphi). #218 #311
  • Fixed a bug where Marker setLatLng was not working if it's set before adding the marker to a map. #222
  • Fixed a bug where marker popup would not move on Marker setLatLng (by @tjarratt). #272
  • Fixed a bug where static properties of a child class would not override the parent ones.
  • Fixed broken popup closePopup option (by @jgerigmeyer).
  • Fixed a bug that caused en error when dragging marker with icon without shadow (by @anru). #178
  • Fixed a typo in Bounds contains method (by @anru). #180
  • Fixed a bug where creating an empty Polygon with new L.Polygon() would raise an error.
  • Fixed a bug where drag event fired before the actual movement of layer (by @anru). #197
  • Fixed a bug where map click caused an error if dragging is initially disabled. #196
  • Fixed a bug where map movestart event would fire after zoom animation.
  • Fixed a bug where attribution prefix would not update on setPrefix. #195
  • Fixed a bug where TileLayer load event wouldn't fire in some edge cases (by @dravnic).
  • Fixed a bug related to clearing background tiles after zooming (by @neno-giscloud & @dravnic).
  • Fixed a bug that sometimes caused map flickering after zoom animation.
  • Fixed a bug related to cleaning up after removing tile layers (by @dravnic). #276
  • Fixed a bug that made selecting text in the attribution control impossible. #279
  • Fixed a bug when initializing a map in a non-empty div. #278
  • Fixed a bug where movestart didn't fire on panning animation.
  • Fixed a bug in Elliptical Mercator formula that affeted EPSG:3395 CRS (by @Savvkin). #358

Browser bugfixes

  • Fixed occasional crashes on Mac Safari (thanks to @lapinos03). #191
  • Fixed a bug where resizing the map would sometimes make it blurry on WebKit (by @mortenbekditlevsen). #453
  • Fixed a bug that raised error in IE6-8 when clicking on popup close button. #235
  • Fixed a bug with Safari not redrawing UI immediately after closing a popup. #296
  • Fixed a bug that caused performance drop and high CPU usage when calling setView or panTo to the current center. #231
  • Fixed a bug that caused map overlays to appear blurry in some cases under WebKit browsers.
  • Fixed a bug that was causing errors in some Webkit/Linux builds (requestAnimationFrame-related), thanks to Chris Martens.

Mobile browser bugfixes

  • Fixed a bug that caused an error when clicking vector layers under iOS. #204
  • Fixed crash on Android 3+ when panning or zooming (by @florian). #137
  • Fixed a bug on Android 2/3 that sometimes caused the map to disappear after zooming. #69
  • Fixed a bug on Android 3 that caused tiles to shift position on a big map.
  • Fixed a bug that caused the map to pan when touch-panning inside a popup. #452
  • Fixed a bug that caused click delays on zoom control.

0.2.1 (2011-06-18)

  • Fixed regression that caused error in TileLayer.Canvas.

0.2 (2011-06-17)

Major features

  • Added WMS support (TileLayer.WMS layer).
  • Added different projections support, having EPSG:3857, EPSG:4326 and EPSG:3395 out of the box (through crs option in Map). Thanks to @Miroff & @Komzpa for great advice and explanation regarding this.
  • Added GeoJSON layer support.


Usability improvements

  • Improved panning performance in Chrome and FF considerably with the help of requestAnimationFrame. #130
  • Improved click responsiveness in mobile WebKit (now it happens without delay). #26
  • Added tap tolerance (so click happens even if you moved your finger slighly when tapping).
  • Improved geolocation error handling: better error messages, explicit timeout, set world view on locateAndSetView failure. #61

API improvements

  • Added MultiPolyline and MultiPolygon layers. #77
  • Added LayerGroup and FeatureGroup layers for grouping other layers.
  • Added TileLayer.Canvas for easy creation of canvas-based tile layers.
  • Changed Circle to be zoom-dependent (with radius in meters); circle of a permanent size is now called CircleMarker.
  • Added mouseover and mouseout events to map, markers and paths; added map mousemove event.
  • Added setLatLngs, spliceLatLngs, addLatLng, getLatLngs methods to polylines and polygons.
  • Added setLatLng and setRadius methods to Circle and CircleMarker.
  • Improved LatLngBounds contains method to accept LatLng in addition to LatLngBounds, the same for Bounds contains and Point
  • Improved LatLngBounds & Bounds to allow their instantiation without arguments (by @snc).
  • Added TMS tile numbering support through TileLayer scheme: 'tms' option (by @tmcw).
  • Added TileLayer noWrap option to disable wrapping x tile coordinate (by @jasondavies).
  • Added opacity option and setOpacity method to TileLayer.
  • Added setLatLng and setIcon methods to Marker.
  • Added title option to Marker.
  • Added maxZoom argument to map.locateAndSetView method.
  • Added ability to pass Geolocation options to map locate and locateAndSetView methods (by @JasonSanford).
  • Improved Popup to accept HTML elements in addition to strings as its content.

Development workflow improvements

  • Added Makefile for building leaflet.js on non-Windows machines (by @tmcw).
  • Improved debug/leaflet-include.js script to allow using it outside of debug folder (by @antonj).
  • Improved L definition to be compatible with CommonJS. #122

Bug fixes

General bugfixes

  • Fixed a bug where zooming is broken if the map contains a polygon and you zoom to an area where it's not visible. #47
  • Fixed a bug where closed polylines would not appear on the map.
  • Fixed a bug where marker that was added, removed and then added again would not appear on the map. #66
  • Fixed a bug where tile layer that was added, removed and then added again would not appear on the map.
  • Fixed a bug where some tiles would not load when panning across the date line. #97
  • Fixed a bug where map div with position: absolute is reset to relative. #100
  • Fixed a bug that caused an error when trying to add a marker without shadow in its icon.
  • Fixed a bug where popup content would not update on setContent call. #94
  • Fixed a bug where double click zoom wouldn't work if popup is opened on map click
  • Fixed a bug with click propagation on popup close button. #99
  • Fixed inability to remove ImageOverlay layer.

Browser bugfixes

  • Fixed a bug where paths would not appear in IE8.
  • Fixed a bug where there were occasional slowdowns before zoom animation in WebKit. #123
  • Fixed incorrect zoom animation & popup styling in Opera 11.11.
  • Fixed popup fade animation in Firefox and Opera.
  • Fixed a bug where map isn't displayed in Firefox when there's an img { max-width: 100% } rule.

Mobile browsers bugfixes

  • Fixed a bug that prevented panning on some Android 2.1 (and possibly older) devices. #84
  • Disabled zoom animation on Android by default because it's buggy on some devices (will be enabled back when it's stable enough). #32
  • Fixed a bug where map would occasionally break while multi-touch-zooming on iOS. #32
  • Fixed a bug that prevented panning/clicking on Android 3 tablets. #121
  • Fixed a bug that prevented panning/clicking on Opera Mobile. #138
  • Fixed potentional memory leak on WebKit when removing tiles, thanks to @Scalar4eg. #107

0.1 (2011-05-13)

Initial Leaflet release.

Jump to Line
Something went wrong with that request. Please try again.