> For the complete documentation index, see [llms.txt](https://docs.mapbox.com/mapbox-gl-js/llms.txt)

# Use a custom render function with a geocoder

This example uses a custom HTML rendering function to customize the [mapbox-gl-geocoder](https://github.com/mapbox/mapbox-gl-geocoder) dropdown menu.

The [mapbox-gl-geocoder](https://github.com/mapbox/mapbox-gl-geocoder) plugin enables place search using the [Mapbox Geocoding API](https://docs.mapbox.com/api/search/geocoding/).

> Example code:

**JavaScript**

```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Use a custom render function with a geocoder</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<link href="https://api.mapbox.com/mapbox-gl-js/v3.30.0/mapbox-gl.css" rel="stylesheet">
<script src="https://api.mapbox.com/mapbox-gl-js/v3.30.0/mapbox-gl.js"></script>
<style>
body { margin: 0; padding: 0; }
#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
</head>
<body>
<script src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.1.0/mapbox-gl-geocoder.min.js"></script>
<link rel="stylesheet" href="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.1.0/mapbox-gl-geocoder.css" type="text/css">

<style>
    .geocoder-dropdown-item {
        padding: 5px;
    }
    .geocoder-dropdown-icon {
        margin-right: 10px;
    }
    .geocoder-dropdown-text {
        color: #5a3fc0;
        font-family: Arial, Helvetica, sans-serif;
        font-size: larger;
    }
</style>

<div id="map"></div>

<script>
    const map = new mapboxgl.Map({
        // TO MAKE THE MAP APPEAR YOU MUST
        // ADD YOUR ACCESS TOKEN FROM
        // https://account.mapbox.com
        accessToken: 'YOUR_MAPBOX_ACCESS_TOKEN',
        container: 'map',
        // Choose from Mapbox's core styles, or make your own style with Mapbox Studio
        style: 'mapbox://styles/mapbox/standard',
        center: [-79.4512, 43.6568],
        zoom: 13
    });

    const geocoder = new MapboxGeocoder({
        accessToken: 'YOUR_MAPBOX_ACCESS_TOKEN',
        useBrowserFocus: true,
        // see https://docs.mapbox.com/api/search/#geocoding-response-object for information about the schema of each response feature
        render: function (item) {
            let maki = '';
            // selects the item's maki icon based on feature or use a default
            switch (item.id.split('.').shift()) {
                case 'address':
                    maki = 'building';
                    break;
                case 'locality':
                case 'place':
                case 'neighborhood':
                    maki = 'city';
                    break;
                default:
                    maki = 'marker';
            }

            return `<div class='geocoder-dropdown-item'>
                    <img class='geocoder-dropdown-icon' src='https://unpkg.com/@mapbox/maki@6.1.0/icons/${maki}-15.svg'>
                    <span class='geocoder-dropdown-text'>
                    ${item.text}
                    </span>
                </div>`;
        },
        mapboxgl: mapboxgl
    });
    map.addControl(geocoder);
</script>

</body>
</html>
```