For the complete documentation index, see llms.txt. This page is also available as Markdown.

Vector layers

Style your points, lines and polygons by customizing style properties to create engaging Felt maps.

The style editor provides different options for styling points, lines, and polygons, allowing you to control color, size, opacity, and many other visual properties. You can create simple maps or data-driven visualizations that vary based on attributes.

The style editor

Once your data is uploaded to Felt you can style your layers with the style editor.

  • To open the style editor, click on the layer you want to customize from the legend

Choosing your map type

Depending on the geometry of your vector layer (point, line or polygon), you will have different visualization options. To select your visualization choose it from the Type dropdown in the General section of the style editor.

If a polygon doesn't have a fill, popup interactions only work when clicking on the stroke (outline), not in the interior area. Make sure your polygon has a fill if you want clickable popups throughout.

Simple

The default style when you upload a data layer — a single color for all features. Available for point, line and polygon layers.

Categories

A categorical visualization maps a distinct color for every unique value of your chosen data attribute. A common type of categorical visualization are landuse maps where each landuse type is set to a distinct color. Available for point, line and polygon layers.

Felt supports up to 256 unique categories in the legend.

Color range

A color range visualization maps numeric data values to a gradient of colors, making patterns immediately visible. Traditionally used for choropleth maps with polygons, Felt extends this to points and lines as well. Colors can be applied continuously in direct proportion to values or grouped into distinct classes using various classification methods.

Learn more about classification methods for numeric data

There are many ways to style a data layer by a numeric field. For example, a Continuous style maps a color (or point size) for every unique value in your data, similarly to a categorical visualization. In this case, the color for each value is interpolated from the endpoint colors.

However, it’s more common to group values from numeric fields into classes (green from 0 to 5, yellow from 6 to 10, etc). Classes can be chosen manually or picked from one of Felt’s default classification methods:

  • Equal Intervals: classes are split by an interval of constant value (0, 5, 10, 15…). Useful for evenly distributed data. Equal interval classifications are very sensible to outliers - very small or large values can lead to the majority of values to be grouped into just one or two classes. This classification method follows an Arithmetic Series, where the value of each breakpoint is equal to the previous value plus a constant value.

  • Quantiles: contrary to equal intervals, the quantiles classification ensures that every class contains the same number of values. This can look nice from a visual standpoint, but often quantiles classifications can be misleading, since the size of each class may vary widely. They work well for evenly distributed datasets.

  • Standard Deviation: the Standard Deviation method chooses classes based on the number of standard deviations from the mean. This classification method works very well for data that follows a bell curve (a Gaussian or “normal” distribution).

By default, the legend in a Standard Deviation classification does not show the breakpoint values, using instead the nº of standard deviations.

  • Geometric Intervals: a classification method where the size of each class increases exponentially, very useful for right-skewed data. The term “Geometric” comes from the fact that the class breaks are chosen from a geometric series (where each value equals the previous value, multiplied by a constant coefficient).

  • Jenks Natural Breaks: the Jenks optimization method can be used to find “natural” classes inside your data by minimizing the variation inside classes while maximizing the variation between classes. It works well for most kinds of distributions, which is why it’s the default method in Felt.

Size range

A size range visualization scales points and lines based on numeric values, emphasizing differences in magnitude. Sizes can be applied continuously in direct proportion to values or grouped into distinct classes using various classification methods. Available for point and line layers.

Learn more about classification methods for numeric data

There are many ways to style a data layer by a numeric field. For example, a Continuous style maps a color (or point size) for every unique value in your data, similarly to a categorical visualization. In this case, the color for each value is interpolated from the endpoint colors.

However, it’s more common to group values from numeric fields into classes (green from 0 to 5, yellow from 6 to 10, etc). Classes can be chosen manually or picked from one of Felt’s default classification methods:

  • Equal Intervals: classes are split by an interval of constant value (0, 5, 10, 15…). Useful for evenly distributed data. Equal interval classifications are very sensible to outliers - very small or large values can lead to the majority of values to be grouped into just one or two classes. This classification method follows an Arithmetic Series, where the value of each breakpoint is equal to the previous value plus a constant value.

  • Quantiles: contrary to equal intervals, the quantiles classification ensures that every class contains the same number of values. This can look nice from a visual standpoint, but often quantiles classifications can be misleading, since the size of each class may vary widely. They work well for evenly distributed datasets.

  • Standard Deviation: the Standard Deviation method chooses classes based on the number of standard deviations from the mean. This classification method works very well for data that follows a bell curve (a Gaussian or “normal” distribution).

By default, the legend in a Standard Deviation classification does not show the breakpoint values, using instead the nº of standard deviations.

  • Geometric Intervals: a classification method where the size of each class increases exponentially, very useful for right-skewed data. The term “Geometric” comes from the fact that the class breaks are chosen from a geometric series (where each value equals the previous value, multiplied by a constant coefficient).

  • Jenks Natural Breaks: the Jenks optimization method can be used to find “natural” classes inside your data by minimizing the variation inside classes while maximizing the variation between classes. It works well for most kinds of distributions, which is why it’s the default method in Felt.

Heatmap

A heatmap visualization uses color gradients to represent point density, highlighting areas of higher and lower concentration. Colors transition smoothly to reflect varying densities, with options to adjust intensity, radius, and color scheme. Available for point layers.

H3

A H3 visualization groups points into hexagons, displaying point counts or aggregated numeric attributes (sum, average, max, or min). Choose a fixed H3 resolution for a consistent view across zoom levels or allow the resolution to adjust dynamically. Use popups to reveal additional aggregated values on hover or click. Available for point layers.

Check out this video to learn more about H3 visualizations.

Filtered H3 visualizations are estimates. For optimal accuracy, create a new layer from the filter and apply the H3 visualization to the new layer.

Icons

Customize your point data with a variety of icons to make your map more intuitive and visually appealing. Select from Felt's built-in icon library, emojis or upload custom icons by clicking the Icon dropdown in the Point section of the style editor. Available for point layers.

Custom icons

Upload your own icon sets to Felt to personalize your maps, highlight key features, or align them with your organization's branding. Icons are a powerful way to visually differentiate categories or other attributes within your point data, helping viewers quickly interpret the information. With Felt, you can organize your icons into Themes, making it easy to manage and apply them consistently across projects. Plus, shared access within your workspace ensures seamless collaboration and a unified look for your maps.

Uploading custom icons

Felt supports a wide variety of image formats, including .png, .jpg, .svg, and other common image file types. To add icons, click the Upload icons button from the Custom tab of a point layer’s Icon picker.

You can upload icons one at a time, or you can select many icons to upload at once by selecting them in the file picker.

Add icons to a single map, or make them available across all maps by adding them to your workspace. When you have many icons, you can assign icons themes to make browsing and searching more manageable.

Once icons have been uploaded, you can edit or delete them via the Edit icons button on the Custom tab of the Icon picker.

Fill patterns

Fill polygons with a repeating pattern instead of a solid color — hatching for disputed areas, dots for soil types, and other classic cartographic textures. Available for polygon layers using the Simple visualization type.

To apply a pattern:

  • Click Fill in the Polygon section of the style editor

  • In the Fill style section below the color picker, choose a style: Solid, Hatch, Reverse hatch, Cross-hatch, Horizontal lines, Vertical lines, or Dots

  • Adjust Spacing to control the gap between lines or dots, and Thickness to control their weight

Felt draws the pattern in the layer's fill color, and the basemap shows through between the strokes. The legend and the Fill chip both update to match the pattern on the map. Patterns also follow zoom-based fill colors, so a pattern can change color as viewers zoom in or out.

Fill patterns are currently only available with the Simple visualization type. Switching a patterned layer to Categories or Color range clears the pattern.

Labelling

Good labeling give maps meaning by improving clarity, directing attention, and maintaining visual balance. A well-labeled map helps users quickly find what they need without feeling cluttered or overwhelming.

To turn labels on for a layer, choose the attribute from the Label by dropdown

You can then fine-tune them in the following ways:

  • Size: choose between small, medium and large sizes.

  • Color: choose a color from the color picker or directly input an RGB, hex or HSL value.

  • Halo: choose a color and width for the halo surrounding the label text.

  • Style: many more options to customize your labels, including:

    • Weight: regular, medium, bold and italic weights, or a combination of these.

    • Case: convert labels to lower or uppercase.

    • Letter spacing: spacing between letters, in pixels.

    • Line spacing: spacing between lines, in pixels.

    • Max length: max character length for labels.

    • Placement: choose between automatic placement or prefer a certain direction (top, right, etc).

    • Offset: the offset between the feature and label, in pixels.

    • Padding: label padding is the amount of transparent pixels to add around your label items. Increasing this amount will result in fewer labels in the map.

Formatting labels

Labels use the column's formatting automatically. When a column is set to display as currency, a percentage, or a fixed number of decimals, its labels update to match, with no style override needed. A revenue column formatted as currency labels each feature $1,234,567 instead of 1234567.

To change how a label's values are formatted:

  • Open the table view and click the column name, then choose Format

  • Pick a Number, Percent, Distance, Area, or Custom format and adjust the decimals, units, or thousands separators

  • The label on the map updates to match, along with the same column in the table, popups, and components

To combine several attributes into one label, add literal text, or split a label across lines, use a text-field MapLibre style override.

Zoom-based styling

One of the more challenging aspects of digital cartography is ensuring your maps look good at all zoom levels. Felt gives you control over what your visualizations look like at each zoom by letting you not only control visibility of features and labels but also interpolate styling properties between zoom levels.

The legend will always sync to the style that matches the current zoom level of the map. This ensures a viewer always sees accurate symbology between the legend and map.

Setting Visibility

Adjust feature and label visibility by setting a visible zoom range for each using the Limit visibility option. This helps maintain visual hierarchy and readability, ensuring labels and features appear only at the zoom levels where they are most effective.

Interpolating style properties

Zoom-based styling in Felt allows you to adjust visual elements like line thickness, opacity, and color at different zoom levels, creating maps that reveal appropriate details as users zoom in or out. This technique enables features like roads to appear thinner at zoomed-out views and thicker when zoomed in, or polygons to gradually fade in as the user zooms closer to a specific area.

Check out this video to learn more about interpolating style properties.

Customizing your legend

Add a caption, retouch colors and display names in the Legend tab.

Style multiple layers at once

Select two or more layers to style them all at once from the Legend or List view. Use Shift+click to select a range or Cmd+click (Mac) / Ctrl+click (Windows) to add layers individually.

With multiple layers selected, the style panel opens with the same controls as the single-layer Style tab, and every edit you make applies to the whole selection. This is the fastest way to turn off popups or legends for a batch of layers, or to give them all the same color or label style.

Controls are grouped by geometry type, so a mixed selection of points, lines, and polygons shows a section for each (heatmaps get their own section too). The following apply across the whole selection:

  • Geometry styling — fill (including patterns), stroke, casing, size, opacity, icons, and position

  • Labels — all label controls

  • Legend visibility (show/hide)

  • Popup interaction

  • Visibility range

Mixed values

When the selected layers don't already share the same value for a control, that control reads Mixed instead of showing a value. Setting a new value from Mixed applies it to every layer in the selection. Each change you make — including one made from Mixed — is a single undo step across the whole selection.

Label by

The Label by dropdown lists only the columns every selected layer has, so any column you choose can be applied to all of them. If the layers currently label by different columns, it reads Mixed. If the layers share no columns at all, the dropdown has nothing to offer, but the label section stays open and the rest of the label styling remains editable across the selection.

What stays per layer

A few settings are still edited one layer at a time, even within a multi-layer selection: classification and categories, color-by, legend contents, per-band raster settings, and popup contents. These follow one representative layer from your selection.

Resetting layer styles

If at any point you want to go back to a layer's original style, click Actions > Reset styles from a layer’s overflow (···) menu.

Copy and paste layers

Copying and pasting layers between maps streamlines your workflow when working with multiple maps and ensures consistent visualization across your projects. This is particularly useful when you want to bring an already styled layer, multiple layers or a layer group onto another map or quickly use template layers across multiple maps. All styling, layer filters, components, popup and legend configurations are copied over.

This same functionality is available for raster layers.

Copy and paste a single layer

  • Click on the layer's ··· menu and choose the option to Copy (or use the keyboard shortcut Ctrl+C (Windows) or Cmd+C (Mac))

  • Navigate to the destination map and right-click anywhere on the map canvas and choose the option Paste here (or use the keyboard shortcut Ctrl+V (Windows) or Cmd+V (Mac))

  • The copied layer will appear with all its original styling and configurations intact

Copy and paste multiple layers

Select multiple layers to copy and paste them to another map at once from the Legend or List view.

  • Use Shift+click to select a range of layers or Cmd+click (Mac) / Ctrl+click (Windows) to add layers individually, then right-click and choose Copy (or use the keyboard shortcut Ctrl+C (Windows) or Cmd+C (Mac))

  • Navigate to the destination map and right-click anywhere on the map canvas and choose the option to Paste here (or use the keyboard shortcut Ctrl+V (Windows) or Cmd+V (Mac))

  • The copied layers will appear with their original styling and configurations intact

Duplicate layers

When working within the same map, you can use the Duplicate option to duplicate a single layer or multiple layers with all styling and configurations preserved.

  • Click on the layer's ··· menu and choose the option to Duplicate (or use the keyboard shortcut Ctrl+D (Windows) or Cmd+D (Mac))

  • To duplicate multiple layers, select them in the List view or the Legend view using Shift+click or Cmd+click (Mac) / Ctrl+click (Windows), then right-click and select the option to Duplicate

  • The duplicated layers will appear with their original styling and configurations intact

Advanced styling

For more control fine-tuning your visualization or if you prefer writing style through code you can use the advanced style editor.

To open the advanced editor for any layer

  • Click on the layer's ··· menu and select Actions > Edit style language

  • Once opened, you’ll see the advanced editor open on the right-hand side of the screen. This panel contains the Felt Style Language (FSL) for the selected layer.

The Felt Style Language (FSL) is a JSON-based specification of Felt styles, and is the single source of truth for a layer’s style. You can check this yourself by making changes in the style editor while having the advanced style editor open:

Learn more about FSL in our Developer docs.

MapLibre style overrides

Use paintPropertyOverrides in the advanced style editor to access any of MapLibre’s paint or layout styling capabilities. This lets you apply advanced effects like icon rotation, drop shadows, and offset geometry, or build custom, data-driven visualizations such as bivariate maps and attribute-based styles. It’s especially useful when you need more control than Felt’s built-in style options.

To apply a MapLibre override

  • Open the advanced style editor

  • Inside the paint block, add a paintPropertyOverrides object

  • Insert any supported MapLibre property

Tips & Best Practices

  • Property names must match MapLibre's documentation

  • Overrides take precedence over FSL’s auto-generated properties (for example, if you set the MapLibre fill-color property it will override the FSL color property)

  • The legend will not reflect the MapLibre style overrides

  • Invalid or mismatched properties are silently ignored

Examples

Color based on a column/attribute

  • If your data includes a field with color values (like #FF5733), you can use style overrides to color each feature based on its assigned color in the data. In the example below, you can see that fill-color overrides the FSL color property.

Bivariate styling

  • A bivariate map visualizes two variables at once - often by combining color (for a categorical attribute) and size (for a numeric attribute). In the example below, each country point is colored by its continent using a categorical style set in the style editor and then sized by its population by adding the MapLibre circle-radius property in the advanced style editor

Concatenating labels

Style overrides work on labels too. In the label block's paintPropertyOverrides you can set any of MapLibre's text and symbol properties, for finer control than the built-in label options give you. The example below combines several attributes into one label, but the same approach applies to anything MapLibre exposes for label rendering.

A label set through the Label by dropdown already respects the column's formatting: set a column to currency, percent, or a fixed number of decimals and its labels match, with no override needed. To build a label from more than one attribute, override the text-field property.

Two expressions do most of the work here:

  • concat joins pieces together: attributes, literal text like "$" or " feet", and line breaks. Use \n to start a new line.

  • number-format formats a number. A text-field override builds the label from scratch, so a raw value like 1234567 comes through unformatted. Wrap it in number-format to get 1,234,567.

String + numeric label with formatting

This example puts a product category on the first line and a formatted revenue value below it.

Tip: Add { "max-fraction-digits": 0 } to drop decimals, or { "min-fraction-digits": 2, "max-fraction-digits": 2 } to add.

Concatenate multiple attributes

When you are only joining text, no number formatting is needed. concat alone builds a clean multi-line label. The example below concatenates address, city and state attributes.

Percentage

number-format has no percent mode, so multiply the value by 100 yourself and append "%". A rate of 0.873 becomes 87.3%. For a single-attribute label, the column's Percent format does this for you.

A few things to keep in mind:

  • A single-attribute label already uses the column's formatting, so you only need a text-field override to combine attributes, add literal text, or split a label across lines.

  • Use number-format, not to-string, when you want thousands separators. to-string returns the raw digits with no grouping.

  • Don't wrap identifiers like ZIP codes or years in number-format, or they'll pick up separators (33,511, 2,024). Reference those fields directly.

  • The full list of number-format options (currency, locale, min-fraction-digits, max-fraction-digits) is in MapLibre's number-format reference. If currency doesn't render in your map, prepend a literal "$" instead.

Styling vector tiles

Because the data are streaming into Felt from a remote server, you first need to read in attribute values before you can style layers.

  • Click the layer in the legend to open the style editor

  • In the detail panel, choose a visualization type

  • If it is a categorical visualization

    • Use the Color by dropdown and choose the attribute you want to style by

    • For the Showing dropdown click Add categories

    • In the Set Categories panel, click Add all to pull in the attribute values in your current view

  • If it is a numeric visualization

    • Use the Color by or Size by dropdown to choose the attribute you want to style by

    • Click Set steps next to the Steps dropdown

    • Click Set as range to use values from the current view or manually enter a custom min and max Range

Tips

  • Attribute values are loaded from the data currently visible in your map view. Zoom or pan to see more, then click Add all again to expand the category list or Set as range to update the min/max.

  • Because the data are streaming directly from a remote server, some classification methods, the data table, Components and Filters are unavailable.

Frequently asked questions

How do I open the style editor?

Open a map in Edit mode and then click on any layer in your map legend to open the style editor. It will appear on the right-side.

Can I reset a layer to its original style?

Yes! Click on the layer's ··· menu and select Actions > Reset styles to revert to the default styling.

What visualization types are available in Felt?

Felt offers several visualization types depending on your layer geometry:

  • Simple: One color for all features (points, lines, polygons)

  • Categories: Distinct colors for unique attribute values (points, lines, polygons)

  • Color range: Gradient colors based on numeric values (points, lines, polygons)

  • Size range: Scaled sizing based on numeric values (points, lines)

  • Heatmap: Density visualization using color gradients (points only)

  • H3: Hexagonal aggregation of point data (points only)

How many categories can I display in a categorical map?

Felt supports up to 256 unique categories in the legend.

What's the difference between Color range and Size range?

Color range applies color gradients based on numeric values, while Size range changes the physical size of points or line thickness based on numeric values. Both can help emphasize patterns in your data.

Can I do per-category styling in Felt?

Yes! Per-category styling is available for Categorical, non-continuous Color range, and non-continuous Size range visualization types. One example of this is setting different icons for various POI categories on a map.

To access specific styling for each class or category, click on the All Points, All Lines, or All Polygons menu when styling the appearance and drill down into the specific settings for that group of features.

What is an H3 visualization? Does Felt support H3?

H3 visualizations group points into hexagons and can display point counts or aggregate numeric attributes (sum, average, max, or min). You can use fixed or dynamic resolution levels. Felt supports visualizing points as H3 hexagons as well as H3 geomatching (see H3 geomatching).

Can I fill polygons with a pattern like hatching or dots?

Yes! For polygon layers using the Simple visualization type, click Fill in the style editor and choose a pattern in the Fill style section: Hatch, Reverse hatch, Cross-hatch, Horizontal lines, Vertical lines, or Dots. The Spacing and Thickness sliders control the density and weight of the pattern, and it is drawn in the layer's fill color.

Can I use custom icons for my point data?

Yes! You can upload custom icons in formats like .png, .jpg, and .svg. Icons can be uploaded individually or in bulk, organized into themes, and shared across your workspace.

Where can I find icons to use?

You can choose from Felt's built-in icon library, use emojis, or upload your own custom icons.

How do I add labels to my map?

Select an attribute from the Label by dropdown in the style editor to turn labels on for a layer.

What label properties can I customize?

You can adjust:

  • Size (small, medium, large)

  • Color (RGB, hex, or HSL values)

  • Halo color and width

  • Weight (regular, medium, bold, italic)

  • Case (uppercase/lowercase)

  • Letter spacing and line spacing

  • Max character length

  • Placement and offset

  • Padding

Why are some features labeled and others not?

Felt skips labels rather than crowd the map: where one would overlap another, where a line is too short on screen to fit the text, or where it bends too sharply for text to follow. Lower Padding or Size to fit more. For lines, the advanced style editor adds maxAngle, which sets how far text may turn between characters, and repeatDistance, the spacing between repeats of a label.

Can I format the numbers in my labels?

Yes. Labels use your column's formatting automatically, so setting a column to currency, percent, or a fixed number of decimals updates its labels to match. To combine several attributes into one label or split a label across lines, use a text-field MapLibre style override.

How can I control visibility at different zoom levels?

Use the Limit visibility option to set a visible zoom range for features and labels.

Can I change styling properties at different zoom levels?

Yes! You can interpolate style properties like line thickness, opacity, and color between zoom levels, so features automatically adjust as users zoom in or out.

I just styled a layer, how can I get copy layer onto another map? How do I copy multiple layers at once?

You can copy layers between different maps with copy & paste. Copy a layer (Ctrl+C or Cmd+C), navigate to your new map, and paste it (Ctrl+V or Cmd+V). All styling, filters, popups, and legend configurations will be preserved.

To copy multiple layers at once: use the List view in Edit mode, hold Shift and click to select multiple layers, then right-click and choose Copy. Then paste them on your new map.

Are there advanced style controls I can access? Can I style a layer programmatically with Felt's REST API?

Yes, Felt's style editor is powered by Felt Style Language (FSL), which is a JSON-based specification that provides more control over styling through code. The advanced style editor in Felt's UI gives you access to Felt Style Language (FSL). To access the advanced style editor, click on a layer's ··· menu and select Actions > Edit style language.

See Felt's developer docs to learn more about Felt Style Language.

What are MapLibre style overrides? What can I do with MapLibre style overrides?

MapLibre overrides let you access advanced styling capabilities like icon rotation, drop shadows, offset geometry, and bivariate visualizations by adding paintPropertyOverrides to the FSL using the advanced style editor in Felt. These settings do not appear or reflect in the legend but are applied directly to the layer rendering.

How do I style vector tile layers?

Vector tiles stream data from remote servers, so you need to:

  1. Open the style editor and choose a visualization type

  2. For categorical styles: Select your attribute and click Add all to load values from your current view

  3. For numeric styles: Choose your attribute and click Set as range to use values from your current view

What styling features are unavailable for vector tiles?

Because vector tile data streams from remote servers, some classification methods, the data table, Components, and Filters are not available.

How can I customize my legend?

In the Legend section of the style editor, you can add captions, adjust colors, and edit display names to make your legend more informative and visually cohesive.

Why aren't my popups working on polygons?

If a polygon doesn't have a fill, popup interactions only work when clicking on the stroke (outline), not in the interior area. Make sure your polygon has a fill if you want clickable popups throughout.

Last updated

Was this helpful?