Skip to content


Switch branches/tags


Creates a Leaflet Feature Group that adds its child layers into a parent group when added to a map (e.g. through L.Control.Layers).

Typical usage is to dynamically add/remove groups of markers from Marker Cluster.

Leaflet.markercluster plugin provides beautiful animated Marker Clustering functionality.

Leaflet is the leading open-source JavaScript library for mobile-friendly interactive maps.

GitHub releases npm TypeScript definitions on DefinitelyTyped types

Size: 2 kB minified, < 1 kB gzipped.


Requires Leaflet ^1.0.0

For Leaflet ~0.7.7 use the v0.1.2 release or the leaflet-0.7 branch

Optional: Leaflet.markercluster plugin


Usage instructions

Quick Guide


<!-- after Leaflet script -->
<script src="leaflet.featuregroup.subgroup.js"></script>


var map ="map"),
  parentGroup = L.markerClusterGroup(options), // Could be any other Layer Group type.
  // This is where the magic happens!
  mySubGroup = L.featureGroup.subGroup(parentGroup, arrayOfMarkers);


Now adding the sub-group to the map adds clustered markers!

It should virtually be compatible with any LayerGroup plugin, not only MarkerCluster.

Installing the sub-plugin

Local copy

  1. Download the "leaflet.featuregroup.subgroup.js" file from the v1.0.2 release.
  2. Place the file alongside your page.
  3. Add the script tag (see Quick Guide > HTML) to your page after Leaflet script.


You can alternatively use the free unpkg CDN service, but keep in mind that it "is a free, best-effort service and cannot provide any uptime or support guarantees".

<!-- After Leaflet script -->
<script src=""></script>


  1. Add this package to your project:

    $ npm install leaflet.featuregroup.subgroup --save
  2. If you are using a bundling tool, import in your JavaScript. It only performs the side effect of attaching to the global L namespace, so you do not need to store it into a local variable or import a namespace.

    // Or with ES6:
    import "leaflet.featuregroup.subgroup";


Simply use the L.featureGroup.subGroup factory instead of your regular L.featureGroup or L.layerGroup:

var mySubGroup = L.featureGroup.subGroup(parentGroup);


Do not forget to add the parent group to your map.

API Reference


Factory Description
L.featureGroup.subGroup( <ILayer> parentGroup?, <ILayer[]> layersArray? ) Creates a sub-group with events, optionally given a parent group and an initial array of child layers.


Method Returns Description
setParentGroup( <ILayer> parentGroup ) this Changes the parent group into which child markers are added to / removed from.
setParentGroupSafe( <ILayer> parentGroup ) this Removes the current sub-group from map before changing the parent group. Re-adds the sub-group to map if it was before changing.
getParentGroup() <ILayer> Returns the current parent group.

SubGroup does not provide any extra option or event beyond what L.LayerGroup and L.FeatureGroup already provide.


If you change the parent group while the sub-group and/or its child markers are still on map, unexpected behaviour of the previous and/or new parent groups can happen.

Make sure the sub-group and its child layers are removed from map before changing the parent group, or use the setParentGroupSafe method instead.



Leaflet.FeatureGroup.SubGroup is distributed under the BSD 2-clause "Simplified" License, like Leaflet.