How can I use Mapcreator vector tiles in my own mapstyle?
This article describes how to use our vector tiles in your own mapstyle.
You can render maps with our vector tiles using mapping engines such as Maplibre or Mapbox. To make it easier for you to style this data, we’ve created our Maputnik version. Enter your Mapcreator vector token to access it. If you don’t already have one, please contact our team at info@mapcreator.io.
This guide introduces the basics of working with our data in your map styles. The examples include both raw JSON snippets and screenshots from Maputnik. For more advanced details on styling, we recommend consulting the official documentation for Maplibre or Mapbox, depending on your chosen rendering engine.
This article is organized into the following sections:
o Examples to Get You Started - Adding Disputed Area
- Highlight a Country
- Hide (Parts of) a Specific Label
o Overview of Our Vector Tile Sets and Their Source Layers
- Base
- Administrative
- Hillshading
- Landcover
o Text Field Translations
Examples to Get You Started
If you’re working outside of our Maputnik version, you’ll need to enter your token separately for each data source.
In our Maputnik version, you only need to enter your vector token once to access all data sources. In this case, don’t forget to verify that Include Mapcreator Access Tokens is checked when saving your style. This option should be enabled by default, and ensures that your access token is included in the saved mapstyle wherever it is needed.

Don’t forget to add the glyphs URL:https://vapi.mc-cdn.io/fonts/{fontstack}/{range}.pbf?access_token=YOUR_ACCESS_TOKEN. This will give you access to the fonts. In Maputnik, you can do this in the Style Settings menu.

In the following section, we’ll go through both workflow options: one using Maputnik and one working directly with the style JSON file.
Adding Layers Using Our Base Data
To use our tiles, you'll need to include our tiles as a source in the sources section of your mapstyle. Use the following URL: https://vapi.mc-cdn.io/dataset/base-v2/json?access_token=YOUR_ACCESS_TOKEN. Don't forget to replace YOUR_ACCESS_TOKEN with a valid access token.
"mc-base-v2": {
"type": "vector",
"url": "https://vapi.mc-cdn.io/dataset/base-v2/json?access_token=YOUR_ACCESS_TOKEN"
}
In Maputnik, you can add one of our default map styles and modify it, or choose an Empty style to start from scratch. To do this, go to Open and click on the desired style.

For this example, we’ll add an Empty style, then go to Data Sources and add the mc-base-v2 source.
Once the data source is added to Maputnik, you can toggle the View in the top bar from Map to Inspect. This will provide you with an interface showing all the layers and features in your data sources. You can inspect the properties of features by hovering over them.

Next up, you'll need to add layers that use this data source. Let's create a background layer first, showing a blue oceanic color.
{
"id": "Landuse-background",
"type": "background",
"layout": {"visibility": "visible"},
"paint": {
"background-color": "#85CBFA"
}
}
In Maptunik, add a new layer using the Add Layer button in the top-left. Set the type to Background and give it an informative ID (for example, Landuse-background):

Now, let's add a layer to show all land.
{
"id": "Landuse-land",
"type": "fill",
"source": "mc-base-v2",
"source-layer": "land_polygons",
"filter": ["==", ["get", "categ"], "land"],
"layout": {"visibility": "visible"},
"paint": {
"fill-color": "rgba(255, 255, 229, 1)",
"fill-antialias": false
}
}
This looks as follows in Maputnik. To add the layer:

And then to edit the color:

Let's add a line layer next that shows us the boundaries of all countries. The filter will ensure we only show administrative boundaries with level 2, and that they are not maritime. This makes sure we do not draw other boundaries in this source layer. We also adapt the line width depending on the zoom level.
{
"id": "Boundary-country",
"type": "line",
"source": "mc-base-v2",
"source-layer": "administrative_boundaries",
"filter": [
"all",
["==", ["get", "level"], 2],
["!", ["has", "is_maritime"]]
],
"paint": {
"line-color": "rgba(154, 154, 154, 1)",
"line-width": [
"interpolate",
["linear"],
["zoom"],
0,
0.5,
4,
1,
6,
1.3,
8,
2,
12,
2.5,
16,
3,
23,
25
]
}
}


By default, Maputnik shows the function builder, which is a legacy way to define mapstyle filters in Mapbox/Maplibre. We recommend using expressions instead. To convert a field into an expression, click the fx button. This will allow you to type your expressions as shown in the previous screenshot.

Next up, let's add a label layer to show all country names.
{
"id": "World-country-name",
"type": "symbol",
"source": "mc-base-v2",
"source-layer": "administrative_names",
"filter": ["==", ["get", "level"], 2],
"layout": {
"text-field": [
"coalesce",
["get", "name:en"],
["get", "name"]
],
"symbol-sort-key": [
"-",
["get", "area"]
],
"text-font": ["Arial-BoldMT"],
"text-size": [
"interpolate",
["linear"],
["zoom"],
6,
15,
8,
18
],
"text-letter-spacing": 0.1
},
"maxzoom": 8,
"minzoom": 0,
"paint": {
"text-color": "rgba(110, 110, 110, 1)",
"text-halo-color": "rgba(255, 255, 255, 1)",
"text-halo-width": 0.5
}
}


![]()

At the time of writing, there is no symbol-sort-key option in the Maputnik interface, so the expression needs to be added manually in the layout section of the JSON. See lines 13 to 16 in the image below:

More information about the various source layers within our base data can be found below, as well as recommendations for the expression to be used with the text field property.
Adding Disputed Areas
In the example above, we added all country boundaries. However, if you need more flexibility, you can further filter them to show either disputed or undisputed boundaries. In this case, the setup remains the same as before, but you add one of the following filters.
For disputed boundaries:
["has", "is_disputed"]
For undisputed boundaries:
["!", ["has", "is_disputed"]]
Additionally, you can apply different styling based on the boundary type. For example, add a dashed line to disputed boundaries:
{
"id": "Boundary-country-disputed",
"type": "line",
"source": "mc-base-v2",
"source-layer": "administrative_boundaries",
"filter": [
"all",
["==", ["get", "level"], 2],
["!", ["has", "is_maritime"]],
["has", "is_disputed"]
],
"paint": {
"line-color": "rgba(154, 154, 154, 1)",
"line-width": [
"interpolate",
["linear"],
["zoom"],
0,
0.5,
4,
1,
6,
1.3,
8,
2,
12,
2.5,
16,
3,
23,
25
],
"line-dasharray": [
"literal",
[3, 2]
]
},
"layout": {
"line-cap": "butt",
"visibility": "visible",
"line-join": "round"
}
}

Highlight a Country
To highlight a country, we will first add a World Countries source, with URL https://vapi.mc-cdn.io/dataset/saga-countries/json?access_token=YOUR_ACCESS_TOKEN. Don't forget to replace YOUR_ACCESS_TOKEN with your personal access token.
"mc-countries": {
"type": "vector",
"url": "https://vapi.mc-cdn.io/dataset/saga-countries/json?access_token=YOUR_ACCESS_TOKEN&include_token=true"
}
If you work in Maputnik, select the source in the Data Sources menu.

Next up, we add a new polygon layer using this data source and source layer data. We add a filter on the ISO-code property iso. Make sure to add the layer above the background, landuse, and other polygons, but below our lines and labels.
{
"id": "Italy",
"type": "fill",
"source": "mc-countries",
"source-layer": "data",
"filter": [
"all",
["==", "iso", "IT"]
],
"paint": {
"fill-color": "rgba(20, 80, 79, 1)"
}
}


Hide (Parts of) a Specific Label
Let's say we have a layer with labels for Iraqi governorates. This might look as follows:
{
"id": "Iraq-governorates-boundary",
"type": "line",
"source": "mc-base-v2",
"source-layer": "administrative_boundaries",
"filter": [
"all",
[
"match",
["get", "level"],
[3, 4],
true,
false
],
["!", ["has", "is_maritime"]],
["==", ["get", "iso_code"], "IQ"]
],
"layout": {"visibility": "visible"},
"paint": {
"line-color": "rgba(208, 208, 208, 1)",
"line-width": [
"interpolate",
["linear"],
["zoom"],
0,
0.5,
4,
1,
6,
1.3,
8,
2,
12,
2.5,
16,
3,
23,
25
]
}
},
{
"id": "Iraq-governorates-labels",
"type": "symbol",
"source": "mc-base-v2",
"source-layer": "administrative_names",
"filter": [
"all",
["==", "level", 4],
["==", "iso_code", "IQ"]
],
"layout": {
"text-field": ["get", "name:en"],
"text-font": ["Arial-BoldMT"]
}

Even though the word "governorate" is officially part of the administrative divisions, we might want to hide those. We can use an expression for the text field as follows to display the names differently:
[
"slice",
["get", "name:en"],
0,
[
"-",
["length", ["get", "name:en"]],
12
]
]

Let's say we want to change a single name on the map. We can use an expression like this:
[
"match",
["get", "name:en"],
["Karbala"],
"Karbala Governorate",
["get", "name:en"]
]

Overview of Our Vector Tile Sets and Their Source Layers
Base Data
URL: https://vapi.mc-cdn.io/dataset/base-v2/json?access_token=YOUR_ACCESS_TOKEN
The base data is divided into source layers, each belonging to one of three geometry types: polygons, lines, or points. Each source layer has properties derived from OpenStreetMap. These properties can be used to filter the data. For your convenience, a list of these properties per source layer is provided below.
polygons
| land_polygons | |
| Property | Explanation/value |
| iso_code | The iso code of the country this line is located in. |
| land_use | |
| Property | Explanation/value |
| type | airport, ice, sand, grassland, recreation, park, forest, heath, university, education, hospital, transport, cemetery, residential, retail, industrial, pitch, playground, stadium, golf_course, sports_centre, national_park, protected_area, cape, island, parking, greenhouse, square, bridge, piste, winter_sports, horse_racing, brownfield, construction. |
| water_bodies | |
| Property | Explanation/value |
| is_intermittent | If present, indicates that a body of water can regularly fall dry. |
| rank | 0 till 5, where 0 denotes the most important lakes and 5 the least important ones, based on the area of the polygons in pixels |
| type | lake, strait, canal, reef, bay, or river. |
| buildings | |
| Property | Explanation/value |
| colour | The colour of the building (#RGB or textual) |
| hide_3d | Present for building outlines that should not be rendered in 3D, has no value. |
| render_height | The building height in meters. |
| render_min_height | The start rendering height in meters (for building parts which do not start on the ground). |
The properties render_min_height and render_height can be used as the extrusion base and height, respectively. This is useful when rendering buildings in 3D. When hide_3d is present, the building should not be rendered. This is usually the outline of a building that should not be part of the 3D model.
lines
This group includes source layers with both the lines and the labels that run along them.
| administrative_boundaries | |
| Property | Explanation/value |
| is_disputed | If present, indicates that the administrative boundary is disputed. |
| is_maritime | If present, indicates that the administrative boundary lies in the ocean. |
| iso_code | The iso code of the country this line is located in. |
| level | Integer values from 2 to 10 correspond to administrative levels in OSM. |
| roads | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| bridge_level | A whole number indicating the level of elevation. Using this value, bridges and tunnels can be rendered in the correct order. |
| is_tunnel | If present, indicates that the line is a tunnel. |
| is_construction | If present, indicates that the road or track is under construction. |
| is_private | If present, indicates that the road or track is not publicly accessible. |
| is_one_way | If present, indicates this is a unidirectional road. |
| is_indoor | If present, indicates that the road is inside a building. |
| iso_code | The iso code of the country this line is located in. This is mainly useful to render road shields and road numbers conditionally. |
| is_connector | If present, indicates that the road is a connector. |
| is_ramp | If present, indicates that the road is a ramp. |
|
international_road_number_cardinal |
The numeric part of an international road number (e.g. 105 in "E105"). The property is numeric. |
|
international_road_number_is_non_latin |
If present, indicates that the international number contains non-Latin characters. |
|
international_road_number_prefix |
The letter prefix of an international road number (e.g. "E" in "E105"). |
|
international_road_number_separator |
The symbol or character used to separate the prefix and value in an international road number, if applicable (e.g. "–" in "E–105"). |
|
international_road_number_value |
The numeric part of an international road number (e.g. "105" in "E105"). The property is a string. |
|
road_number_cardinal |
The numeric part of a national road number (e.g. 6 in "A6"). The property is numeric. |
|
road_number_is_non_latin |
If present, indicates that the national number contains non-Latin characters. |
|
road_number_prefix |
The letter prefix of a national road number (e.g. "A" in "A6"). |
|
road_number_separator |
The symbol or character used to separate the prefix and value in a national road number, if applicable (e.g. "–" in "A–6"). |
|
road_number_value |
The numeric part of a national road number (e.g. "6" in "A6"). The property is a string. |
| type | motorway, highway, throughway, main, minor, local, service, track, bridleway, pedestrian, cycleway, footway, steps, corridor, platform, raceway, busway, cycleway, footway, bridleway, path. |
| rails | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| bridge_level | A whole number indicating the level of elevation. Using this value, bridges and tunnels can be rendered in the correct order. |
| is_tunnel | If present, indicates that the line is a tunnel. |
| is_construction | If present, indicates that the road or track is under construction. |
|
colour |
The colour of the track is commonly used with metros/subways. |
| is_side_rail | If present, indicates that the line is a side rail. |
| type | rail, tram, subway, monorail, narrowrail. |
| aerialways | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| bridge_level | A whole number indicating the level of elevation. Using this value, bridges and tunnels can be rendered in the correct order. |
| is_indoor | If present, indicates that the road is inside a building. |
| iso_code | The iso code of the country this line is located in. |
| runways | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| bridge_level | A whole number indicating the level of elevation. Using this value, bridges and tunnels can be rendered in the correct order. |
| is_construction | If present, indicates that the road or track is under construction. |
| is_indoor | If present, indicates that the road is inside a building. |
| is_one_way | If present, indicates this is a unidirectional road. |
| is_tunnel | If present, indicates that the line is a tunnel. |
| waterways | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| length | The length of the river or stream in meters (in Web Mercator). |
| area | The area of the lake in square meters (in Web Mercator). |
| bridge_level | A whole number indicating the level of elevation. Using this value, bridges and tunnels can be rendered in the correct order. |
| is_indoor | If present, indicates that the road is inside a building. |
| is_intermittent | If present, indicates that a body of water can regularly fall dry. |
| is_tunnel | If present, indicates that the line is a tunnel. |
| type | river, canal, ditch, stream, bay, lake. |
| ski_slopes | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| difficulty (on pistes) | Values like easy, novice, intermediate, advanced, expert, freeride, and more (see OSM). |
| is_construction | If present, indicates that the road or track is under construction. |
| is_indoor | If present, indicates that the road is inside a building. |
| ferry_lines | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| mountain_ranges | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| island_groups | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| plateaus | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
points
| place_names | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| capital_level | The capital level of the place. Corresponds to the admin_level values used by OSM. For example, capital_level = 2 usually means it's a country capital, level 4 means it's a state capital in the US and a Bundesländ capital in Germany. |
| iso_code | Only present for places that also have capital_level 2. Contains the iso code of the country the capital belongs to. |
| population | This value should be taken with a grain of salt. It varies in quality and is not always up to date. It can be useful to sort places. |
| scale_rank | Sorting value from natural earth. |
| sort_order | Value between 0 (most important) and 400 (least important) within each tile. |
| type | One of (from large to small) city, town, village, hamlet, borough, suburb, quarter, or neighbourhood. |
To order place labels properly, there are a few properties that can help you: sortorder, scalerank, and population. The sortorder is a value between 0 and 400 giving the most important places in each tile. The lower the sortorder, the more cartographically relevant the place. To influence how busy the map looks without leaving desolate areas completely empty, we suggest setting a filter on the sortorder. For example: "filter": ["<=", ["get", "sortorder"], 60]. It is advisable to use the same threshold on every layer with placenames. More importantly, do not use a less strict sortorder on a layer with less important places. The scalerank property comes from Natural Earth and rates the importance of places from 0 to 10. Lastly, the population property can be used. It is recommended to use this as a symbol sort key: "symbol-sort-key": ["-", ["get", "population"]].
| land_use_names | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| area | Denotes the area of the source polygon in square meters (in Web Mercator). |
| type | bridge, cemetery, construction, education, forest, golf_course, grassland, heath, hospital, ice, industrial, national_park, park, pitch, playground, protected_area, recreation, residential, retail, sand, square, stadium, transport, university, winter_sports. |
| water_names | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| area | Denotes the area of the source polygon in square meters (in Web Mercator). |
| is_intermittent | If present, indicates that a body of water can regularly fall dry. |
| type | ocean, sea, bay, cape, lake, reef, river, strait. |
| administrative_names | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| area | Denotes the area of the source polygon in square meters (in Web Mercator). |
| iso_code | Only present for places that also have capital_level 2. Contains the iso code of the country the capital belongs to. |
| level | Denote the administrative boundaries. Usually, level 2 is the country level, level 4 the first level below that (states in the USA, bundesländer in Germany, etc). For more information, see the OSM wiki. |
| island_names | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| area | Denotes the area of the source polygon in square meters (in Web Mercator). |
| building_names | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| area | Denotes the area of the source polygon in square meters (in Web Mercator). |
| motorway_junctions | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| reference | A number or value indicating the exit/junction. See example here. |
| mountain_peaks | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| elevation | Elevation in meters. |
| house_numbers | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| points_of_interest | |
| Property | Explanation/value |
| name* | see the Text Field Translations |
| type | pharmacy, clinic, doctors, dentist, veterinary, horse_riding, wildlife_hide, bird_hide, beach_resort, surfing, scuba_dive, sport_centre, fitness, camping, playground, swimming_pool, dog_park, skiing, community_centre, minigolf, casino, arcade, cinema, fountain, theatre, place_of_worship, horse_racing, monument, memorial, castle, museum, artwork, attraction, zoo, theme_park, monastery, archaeological_site, water_park, information, viewpoint, mountain_pass, volcano, grave_yard, marina, marketplace, lighthouse, aquarium, picnic_site, fast_food, restaurant, pub, cafe, bar, apartment, chalet, guest_house, hostel, hotel, motel, thermal, alpine_hut, wilderness_hut, shelter, library, caravan, shop, airport, subway_station, lightrail_station, monorail_station, railway_station, tram_station, bus, ferry, parking, bicycle_parking, park_ride, traffic_light, charging_station, helipad, hospital, dam, recycling, post_office, police, fire_department, bank, atm, kindergarten, dog_toilet, gas_station, ranger_station, diplomatic, government, ngo, townhall, courthouse, mines, power, wind_turbine, crematorium, watermill, windmill, fort. |
Administrative Data
The Landuse-land layer we added in the first example is a single polygon, which means it can only be styled with one color. If you want to assign different colors to individual countries, you can use the following source: https://vapi.mc-cdn.io/dataset/saga-countries/json?access_token=YOUR_ACCESS_TOKEN.
"mc-countries": {
"type": "vector",
"url": "https://vapi.mc-cdn.io/dataset/saga-countries/json"
}

The World Countries source contains separate country polygons that can be filtered by name or iso. For example, you can add one country and assign it a different color from the Landuse-land layer to make it stand out. Let’s assign a unique color to Brazil.
{
"id": "Brazil",
"type": "fill",
"source": "mc-countries",
"source-layer": "data",
"filter": ["==", ["get", "iso"], "BR"],
"layout": {"visibility": "none"},
"paint": {"fill-color": "rgba(255, 255, 189, 1)"}
}

This layer can be used on top of the Landuse-land layer or independently.
In addition to countries, you can also add regions, municipalities, and other subdivisions. You can explore all available datasets here. Click on a country and check the dropdown to see all the data it contains.
For instance, you can add the states of Brazil by creating a new source in the Data Sources section with the following URL: https://vapi.mc-cdn.io/dataset/saga-brazil/json?access_token=YOUR_ACCESS_TOKEN

Hillshading
You can enrich your map with additional data by including extra data sources. To create a relief effect, you can add a raster data source: https://vapi.mc-cdn.io/dataset/jaxa_terrainrgb/{z}/{x}/{y}?access_token=YOUR_ACCESS_TOKEN.
"hillshading": {
"type": "raster-dem",
"tiles": ["https://vapi.mc-cdn.io/dataset/jaxa_terrainrgb/{z}/{x}/{y}?access_token=YOUR_ACCESS_TOKEN"],
"minzoom": 0,
"maxzoom": 12,
"attribution": "<a href=\"https://earth.jaxa.jp/en/data/policy\" target=\"_blank\">© AW3D30 (JAXA)</a>"
}
In Maputnik, you can add it from the Data Sources menu.

You can adjust the shades by specifying color values for shadow and accent.
The exaggeration parameter controls the layer’s visibility, with values ranging from 0 (fully transparent) to 1 (fully opaque). If you want the hillshading to gradually fade as you zoom in on the map, you can add an interpolation to the value.
{
"id": "Hillshading",
"type": "hillshade",
"source": "hillshading",
"maxzoom": 24,
"paint": {
"hillshade-illumination-anchor": "map",
"hillshade-exaggeration": [
"interpolate",
["linear"],
["zoom"],
4,
0.3,
8,
0.15
],
"hillshade-shadow-color": "rgba(70, 70, 70, 1)",
"hillshade-accent-color": "rgba(70, 70, 70, 1)"
}
Landcover
To create a natural cover, add the following data source: https://vapi.mc-cdn.io/dataset/landcover/json?access_token=YOUR_ACCESS_TOKEN.
"landcover": {
"type": "vector",
"url": "https://vapi.mc-cdn.io/dataset/landcover/json?access_token=YOUR_ACCESS_TOKEN&include_token=true""
}
Select it from the Data Sources menu if you work in Maputnik.

Landcover allows you to create layers with different land_type values such as snow, barren, crop, grass, shrub, forest, moss, mangrove, wetland, and urban.
As an example, let’s create a layer with the forest.
{
"id": "Landuse-cover-forest",
"type": "fill",
"source": "landcover",
"source-layer": "data",
"minzoom": 0,
"maxzoom": 24,
"filter": ["==", ["get", "land_type"], "forest"],
"layout": {"visibility": "visible"},
"paint": {
"fill-color": "rgba(230, 248, 223, 1)",
"fill-antialias": false,
"fill-opacity": 1
}

As you can see, the only required parameters are land_type and color. To create smooth transitions between different types of landcover on the map, we recommend using similar colors for forest, shrub, and grass, with slight variations in brightness or lightness.
Pro tip: The mc-base-v2 source also includes similar categories such as ice, sand, grassland, park, forest, and nationalpark. For better results, you can combine these data sources.
Text Field Translations
Many of our data sources have labels in various translations. We generally support these languages (with the abbreviated ISO-639 language codes in brackets) on top of the native name:
o English (en)
o Danish (da)
o Dutch (nl)
o Finish (fi)
o French (fr)
o German (de)
o Italian (it)
o Norse (no)
o Polish (pl)
o Portuguese (pt)
o Spanish (es)
o Swedish (sv)
o Japanese (ja)
o Chinese (zh)
o Russian (ru)
o Ukrainian (uk)
o Latvian (lv)
o Kazakh (kk)
o Arabic (ar)
Most of our source layers that have a name property (containing the native name) also have various other properties in the format name:language_code where the language code is either of the language codes listed above. In our base data, there is an additional property name_is_latin that is only present if the native name property contains only Latin characters.
We recommend using this to your advantage in the following way. For each symbol layer with labels, use a coalesce expression as follows. If your desired language uses the Latin script:
"text-field": [
'coalesce',
['get', 'name:language_code'],
['case', ['has', 'name_is_latin'], ['get', 'name'], ['get', 'name:en']],
]
This will make sure that the label will be shown in your desired language, if available. If not, it will fall back to the native name if that uses the Latin script, or English otherwise.
Alternatively, you can simply specify the label order manually like this:
['coalesce', ['get', 'name:language_code'], ['get', 'name:en'], ['get', 'name']]
