Map Figma properties to Contentful field types
Overview
Bindings connect Contentful fields to Figma component properties. The table below lists what you can map on each side.
You configure bindings in the plugin panel Binding editor. When you attach an entry and apply, the Contentful for Figma widget fills in the component for you.
What binds to what?
Figma property | Contentful field |
|---|---|
Text | Short text, Long text. Copy flows into the text property when you apply. |
Text (variant) | Short text, Long text. Switches the variant to the matching option. The value must match an option defined on the VARIANT property in Figma. |
Text | Rich text. Choose formatted or plain text in the Binding editor. |
Text | Hardcoded value. A template string with |
Text | Date. Type a format pattern in the Binding editor (for example, |
Text | Number. Pick currency, percent, or decimal format in the Binding editor. |
Text | JSON object. Choose which value inside the object maps to the property. |
Boolean | Yes/No. Maps literally: on or off from the field. |
Boolean | Most other field types. On when the field has a value, off when empty. Useful for hiding a subtitle or image when the source field is blank. |
Instance swap | Short text, Long text, JSON object, Linked entry. Swaps to the matching component in your swap list when you apply. The value must match an option Figma exposes on the property. |
Image ( | Asset, or linked entry via the gear icon (choose an asset field inside the entry). An image from Contentful appears when you apply. |
Background color ( | Short text, Long text, JSON object, Linked entry. Hex is most common ( |
Slot | Linked entry, List of linked entries. Links entries to instances in the slot when you attach/apply. Each nested instance in the slot still has its own bindings. Fully automatic slot filling on the canvas is still improving. |
Any property | Linked entry. Open the gear icon on the row to map fields from the related content type. One level of linked content is supported today (not deeper chains). For lists, pick which item in the list (first item is the default, but you can choose another in the editor). |
Where things are saved
Binding mappings are stored as variables in the file's Contentful variable collection. See Binding library for variables, sharing across files, and backup to Contentful assets.
Which entry is on an instance is remembered per instance when you attach.
Curious what's stored? Tools → Storage (bindings as Variables on the Component tab, entry links on the Instance tab).
Limits
Some list-of-object field types are not supported yet
Linked entries need the gear icon setup before they work
Instance swap and variant values must match options defined in Figma
Template strings cannot pull from rich text or linked asset fields yet
String templating
Combine fixed words with placeholders for entry fields in a single text property. In the Binding editor, choose Hardcoded value as the source, write your template, and the widget fills in placeholders when you apply an entry.
Examples
You write | You get |
|---|---|
| "Hello" plus the entry's first name |
| A value nested inside an object or list field |
| The date formatted as month and year |
| A literal |
Limits
Placeholders must be fields on the same content type as the binding.
Linked entries and assets cannot be dropped into a template string today (use a normal field bind or the gear icon instead).
Missing fields show up as blank.
Images and colors
Figma does not expose background image fill or background color fill as native component properties. The Contentful for Figma widget lets you bind them anyway by renaming layers inside your component with a special pattern.
Layer naming
Rename the target layer inside your component:
[layer_name]::background-imagefor images
[layer_name]::background-colorfor colors
Example: hero-photo::background-image or card-bg::background-color.
After renaming in Figma, refresh the component definition. The property appears in the Binding editor.
You can also use Configuration → toolbox → Tools → Add image or color property for a quick reference on these patterns.
Binding images
Map the layer to a Contentful asset field. When you apply an entry, the image from Contentful appears in the layer.
To use an image on a linked entry, bind the layer to the entry, then open the gear icon and choose an asset field inside that related content type.
Binding background colors
Map the layer to a field that supplies a color value. Hex strings (for example, #ff0000) are most common. Short text, JSON object, and linked entry sources are also supported at bind time. When you apply, the color is written to the layer fill.
Rich text
You can bind rich text from Contentful to a text layer in Figma and keep formatting when you apply an entry.
The widget uses a formatter: a small reference component you place beside your text layer and rename to {layerName}::formatting (for example, body::formatting beside a layer named body). The formatter tells the widget how headings, paragraphs, bold, links, and other marks should look when content is applied.
You can create one quickly from the plugin panel: open Configuration → toolbox → Rich text → Create formatter. That adds a ready-made RichText::formatting component to your file. Style the sample rows, drop an instance next to the text field you bound, rename it to match that layer, and you are attached. Use Inspect formatters to confirm before you apply.
For a lighter path, map the rich text field in the Binding editor with formatted selected and skip the formatter. Basic marks (bold, italic, headings, lists, links) still carry over with sensible defaults.
Basic formatted rich text
In the Binding editor, map your Contentful rich text field to the Figma text property and keep formatted selected (not plain text).
When you apply an entry, the widget carries over common marks from Contentful: bold, italic, headings, lists, and links. No formatter is required for this path. Heading and paragraph styling uses sensible defaults from Figma unless you add a formatter below.
Custom typography with a formatter
When default styling is not enough, the formatter is how you match your design system. It is a RichText::formatting reference component with sample rows for each tag (h1 through h6, p, strong, em, and so on). You style those rows in Figma. At apply time, the widget reads them and paints the bound text layer to match.
Quick setup:
Configuration → toolbox → Rich text → Create formatter (adds the component to your file).
Edit the styles on the sample rows inside that component.
Place an instance beside the text layer you bound in the Binding editor.
Rename the instance to
{YourTextLayerName}::formattingso it matches the text layer exactly.Inspect formatters on the focused instance to confirm attachment and tag rows.
Apply an entry.
Formatter styles live on the canvas in Figma, not in Contentful.
Plain text only
If you only need the words and not the formatting, switch to plain text in the Binding editor. The widget applies a flattened string with no headings, bold, or other marks.
Troubleshooting
Formatter not attached: the formatter instance must sit beside the target TEXT layer (same parent). Rename it exactly {textLayerName}::formatting to match the text layer name.
No tag rows in Inspect formatters: layers inside the formatter must use recognized names: h1 through h6, p, li, a, strong, em, u, blockquote, code, pre.
Wrong styles on apply: confirm only one formatter is paired with the text layer you bound, bindings are saved, and you applied after setup.
Repeater
The Repeater tool duplicates a focused component instance once per Contentful entry you select, with each clone already linked to its entry. Use it to build lists, grids, or carousels and stress-test how your component behaves with varied real content.
Repeater creates instances and attaches entries. Apply pushes bound field values into each clone on the canvas. See the Usage section for the overall workflow.
Before you start
Attach the widget to a frame and select an instance on the binding map.
Bindings must exist for that component. If the Repeater modal opens with no bindings, click Open Bindings to create them first.
How to run it
Focus an instance on the binding map.
Open Configuration → toolbox → Tools → Repeater.
Pick entries: search and select one row per clone you want (up to 50). The picker works like Entry search.
Click Create. Progress shows clone, attach, and refresh steps while the widget works.
When complete, click Apply to open the Apply modal with the new clones pre-selected. Apply transformed properties to fill content on the canvas.
You can close the modal after Create without applying, then apply later from the instance workflow.
What Repeater does vs Apply
Step | What happens |
|---|---|
Repeater Create | Clones instances on the canvas and attaches a Contentful entry to each clone |
Apply | Runs your bindings and writes field values into each instance |
Bindings are shared across every clone because they come from the same component definition. Each clone can show a different entry.
Tips
Pick entries whose content type matches the bindings on the focused instance.
To swap which entry is on a clone, use Apply or attach a different entry from the instance panel.
If you add or move instances on the frame, refresh or re-attach the widget so the binding map stays accurate.
Binding library
When you save bindings in the Contentful for Figma widget, they are stored as Figma Variables in a variable collection named Contentful. That collection works like any other variables in your file: you can browse it in Figma's Variables panel, and it travels with the file the same way color or spacing variables do.
What lives in the collection
Each binding you save for a component is written into the Contentful collection for your linked space and environment. The widget keeps metadata and binding data in variables scoped to that Contentful connection, so bindings stay aligned with the content types you are mapping.
When you open the Binding editor and save, you are updating variables in this collection, not loose plugin data on the canvas.
Inspect bindings as variables
Tools → Storage → Component tab shows the Contentful variables for the active binding library. Use the library dropdown there (or in the panel footer) to see which suite of bindings you are viewing.
On the instance shell, the panel footer includes a Library row where you can switch between available binding libraries for the focused instance.
Share bindings across files
Because bindings live in a normal Figma variable collection, you can publish the Contentful collection as part of a Figma library, the same way you publish color or typography variables.
Build and save bindings in a source file (local Contentful collection).
Publish that file's variables as a team library in Figma.
Enable the library in other design files.
Other files can use those bindings as a read-only library. The widget lists imported libraries in the footer Library dropdown alongside Local. Pick the library that matches the bindings you want to apply.
To change bindings, work in Local on the file where you author mappings, then publish an updated library for consumers.
Local vs imported library
Local | Imported library | |
|---|---|---|
Where it lives | This file's Contentful collection | Published from another file |
Editing | You can create and save bindings | Read-only: switch to Local to edit |
Typical use | Day-to-day binding work in this file | Shared design-system bindings across a team |
When you open a file that uses an imported binding library, the widget can refresh local copies from the library when needed so you stay on the latest published bindings.
Backup to Contentful assets
Bindings in variables and entry links on instances are both part of your file's Contentful setup. You can snapshot that setup and store it in Contentful assets so you can rebuild later.
Open Configuration → Backup.
Create a backup
Create backup collects:
Local bindings variables from your file's Contentful collection for the linked space and environment
Entry attachments and other widget-owned data on eligible nodes in the file.
The snapshot uploads as an unpublished asset in your linked Contentful space. It stays private unless someone publishes the asset later. Keep backups unpublished if they include sensitive entry data.
Install a backup
Pick a backup from the list and choose Install backup. The widget restores plugin data and local bindings variables from that snapshot into the current file, then refreshes the panel and binding map.
Use this when you need to recover after accidental changes, rebuild bindings and entry links in a fresh file, or roll back to an earlier known-good state. Install replaces widget-owned data for that scope with what is in the backup, so save a new backup first if you might need today's work.
You can also Open in Contentful to view the asset in the Contentful web app, or Delete backups you no longer need.
How library, variables, and backup fit together
Piece | Where it lives | How you share or protect it |
|---|---|---|
Binding mappings | Contentful variable collection in the Figma file | Publish as a Figma team library, or include in a backup asset |
Entry links | Plugin data on instances | Included in the same backup asset |
Backup snapshot | Unpublished Contentful asset | Same space as your content; install anytime to rebuild |
NOTE: Publishing bindings as a Figma library is great for day-to-day design files. Backup is the safety net in Contentful when you want a dated snapshot you can restore wholesale.