Skip to content

Figma Plugin

The Grails Figma Plugin is the interface that connects your Figma file to the platform. From here you can scan and sync your variables, text and color styles, components, and screens directly to the Grails Vault — no manual exporting or copying required.

The plugin lives inside Figma and has full access to your file: it reads the document’s content, detects what changed since the last sync, and gives you precise control over what to sync and when.


Initial Connection

Before syncing, the plugin needs to know which Grails team it should communicate with. This process is done once per team.

Step 1 — Enter Your Sync Token

When you open the plugin for the first time in a file, you’ll see the connection screen:

  • Token field: A password field (hidden by default) where you enter your personal Sync Token.
  • Eye button: Toggles between showing and hiding the token as you type.
  • “Connect” button: Validates the token against the Grails API.

If the token is invalid or the connection fails, an error message with details will appear below the field.

Step 2 — Select a Project (if you have more than one)

If your team has more than one project in Grails, a project selection screen appears after connecting:

  • Project list: Each project shows a folder icon, the project name, and the team name in smaller text.
  • Selected item: Marked with a checkmark on the right.
  • “Start syncing” button: Confirms the selection and opens the full plugin.
  • “Back” button: Returns to the token screen if you need to switch accounts.

Main Interface

Once connected, the plugin shows the full interface divided into three zones:

  • “Grails” title on the left.
  • Team badge in the center: shows the active team name. Hovering reveals a tooltip in the format {team name} · {project name}.
  • Disconnect button (unplugged cable icon) on the right: unlinks the plugin from your account. Asks for confirmation before proceeding.

Four vertical tabs on the left side of the plugin, each with its icon:

TabIconWhat it syncs
Variables{} (braces)Variable collections and design tokens
StylesPaletteText, color, effect, and grid styles
ComponentsDiamondComponents and component sets
Screens & FlowsBranch (git)Frames/screens to Vault flows

At the bottom of the sidebar: Settings button (gear icon) to access plugin configuration.


Sync Status Badge System

All items in the Variables, Styles, and Components tabs display a badge indicating their sync status with Grails. Understanding these badges is key to knowing what needs to be synced.

Sync Status Badges

BadgeColorMeaning
SyncedGreenThe item is in sync with Grails. The content in Figma matches exactly what’s in Grails. No action needed.
OutdatedYellowThe item was published to the Figma library (changes confirmed) but hasn’t been synced to Grails yet. The change is ready — just needs to be synced.
WIPYellowThe item has local changes in Figma that haven’t been published to the library yet. Work is in progress. It’s recommended to wait for the designer to publish the changes before syncing.
UnsyncedGrayThe item exists in Figma but was never synced to Grails.
NewBlueNewly detected item in the scan with no previous history in the plugin.

The difference between Outdated and WIP

This is the most important distinction in the plugin:

  • Outdated → Changes in Figma are already published to the team library. The component/variable/style is “done” from a design perspective — just needs to be brought into Grails. ✅ Safe to sync.

  • WIP (Work in Progress) → Changes exist in Figma but haven’t been published to the library yet. The designer is still working on it. If you sync now, you’ll capture an intermediate state of the design. ⚠️ Evaluate whether you want to sync before it’s published.

Version Badge (Components only)

Already-synced components also show a version badge alongside the status badge:

  • v1, v2, v3… — Indicates how many saved versions this component has in Grails. The badge color matches the status (green for Synced, yellow for Outdated or WIP).

Tab: Variables

The Variables tab lets you sync all variable collections defined in your Figma file to the Grails Vault.

Main View

Action Bar

At the top of the list:

  • Counter: “X collections · Y selected” — shows total collections and how many are selected.
  • Status filters: Buttons to filter the list: All, Synced, Outdated, Unsynced.
  • Quick-select buttons: All (selects all) and None (deselects all).

Collection List

Collections appear in two groups:

  • SYNCED COLLECTIONS (dark header) — Collections that already have history in Grails (any sync status).
  • UNSYNCED COLLECTIONS (light header) — Collections never synced before.

Each collection item shows:

  • Checkbox on the left to select.
  • Collection name.
  • Status badge (Synced, Outdated, WIP, Unsynced, New).
  • Count badge: “X vars” — how many variables the collection has.
  • Token Role badge (if one is assigned): the semantic group name (e.g., “Brand Colors”). Clicking the tag icon opens the Token Role manager.
  • Unlink icon (red, only if synced): unsyncs the collection from Grails.
  • No items: “Scan variables” (primary) — starts the scan.
  • Items present, nothing selected: “Rescan variables” (secondary) — rescans the file.
  • Items selected: “Sync X collection(s)” (primary) — syncs the selected collections.

Progress Bar

During scanning or syncing, a progress bar appears with:

  • Descriptive text: “Scanning variables…” or “Syncing…”
  • Counter: “X / Y”

Assigning a Token Role to a Collection

From the tag icon next to each collection you can assign a Token Role — a semantic name that groups the collection in the Grails Vault (e.g., “Brand Colors”, “Spacing Scale”).

The Token Role side panel shows:

  • Header: “Token Group — {collection name}” with a back button.
  • List of existing roles: Each role with its name and a delete button (trash icon).
  • Create new role: Text field with placeholder “e.g. Brand Colors” and a “Create” button.

The Token Role is saved in the Figma file and sent to Grails when the collection is synced.

Unlinking a Collection

The red unlink icon next to each synced collection opens a confirmation to remove that collection from Grails. The collection still exists in Figma — only the Grails data is deleted.


Tab: Styles

The Styles tab lets you sync the local styles from your Figma file: text (typography), color, effect, and grid styles.

Main View

Action Bar

  • Counter: “X styles · Y selected.”
  • Filters: All, Synced, Outdated, Unsynced.
  • Quick-select: All and None.

Style List

Styles are organized by type with section headers:

  • TEXT — Typographic styles (fonts, sizes, weights).
  • COLOR — Color and fill styles (PAINT).
  • EFFECT — Effect styles (shadows, blur).
  • GRID — Layout grid styles.

Within each type, styles are sub-grouped into:

  • SYNCED STYLES — Those with history in Grails.
  • UNSYNCED STYLES — Those never synced.

Each style item shows:

  • Checkbox on the left.
  • Style name (e.g., “Body / Large”).
  • Description (small gray text, if available).
  • Status badge (Synced, Outdated, WIP, Unsynced).
  • Unlink icon (red, if synced).
  • No items: “Scan styles” (primary).
  • Items present, nothing selected: “Rescan styles” (secondary).
  • Items selected: “Sync X style(s)” (primary).

Tab: Components

The Components tab lets you sync components and component sets from your Figma file. This is the tab with the most options, including the ability to create versioned snapshots with commit messages.

Main View

Action Bar

  • Counter: “X components · Y selected.”
  • Filters: All, Synced, Outdated, Unsynced.
  • Quick-select: All and None.

Component List

Components are organized in two groups:

  • SYNCED COMPONENTS — Components with history in Grails, sorted alphabetically.
  • UNSYNCED COMPONENTS — New or never-synced components.

Each component item shows:

  • Checkbox on the left.
  • Component name, prefixed with the page name: “Page Name / Component Name”.
  • Type badge: “Set” if it’s a Component Set (a family of variants).
  • Status badge: Synced, Outdated, WIP, or Unsynced.
  • Version badge: “v1”, “v2”, etc. — only on already-synced components. Color matches status.
SituationAvailable buttons
No items”Scan components” (primary)
Items present, nothing selected”Rescan components” (secondary)
1 component selected (not yet synced)“Sync selected” (primary)
1 component selected (already synced)“Sync selected” (primary) · “Sync as New Version” (secondary)
2 or more components selected”Sync X components” (primary)

Standard Sync (“Sync selected” / “Sync X components”)

Standard sync updates the current state of the component in Grails. If the component was already in Grails, it overwrites the data with the latest version from Figma. No additional history is created.

Version Sync (“Sync as New Version”)

Available only when exactly 1 already-synced component is selected. Opens a version modal with:

  • Component name and its metrics:
    • “[X PROPS]” badge — how many properties it has.
    • “[Y VARIANTS]” badge — how many variants it has (if it’s a Set).
    • “[Z SUBCOMPS]” badge — how many sub-components it uses.
  • Message field (required): “What changed in this version?” — describes the changes for the history log.
  • “Cancel” button: Closes the modal without syncing.
  • “Sync version” button: Disabled until the message field has content. On confirmation, creates a new entry in the component’s version history in Grails.

Progress Bar

During scanning:

  • “Found N components…” — shows components as they’re discovered.

During sync:

  • “N / M” — counter of processed components.

Tab: Screens & Flows

The Screens & Flows tab lets you sync Figma frames (screens) directly into visual flows in the Grails Vault.

How it works

Unlike the other tabs, this tab works with your active selection in Figma. First you select one or more frames (or a full section) on the Figma canvas, then scan them from the plugin.

Main View

Top Bar

  • Counter: “N frame(s) ready” when frames are scanned, or “No frames scanned” if not scanned yet.
  • “Scan selection” button: Scans the frames or section currently selected in Figma. Disabled while loading.

Frame Preview List (appears after scanning)

Each scanned frame shows:

  • Monitor icon.
  • Frame name (truncated if too long).
  • Dimensions: “W × H” in pixels (e.g., “1280 × 720”).

If the scan was of a Figma Section, additional text appears: “From section: {section name}”.

Flow Picker (“Sync to flow”)

Below the frame list, you need to choose which Vault flow to send the screens to:

  • Label: “Sync to flow” with a ”+ New” button on the right to create a new flow.
  • Dropdown: List of existing flows in the project, with their emoji icon as a prefix. Placeholder option “Select a flow…”.
  • No flows yet: Text appears: “No flows yet. Create one to get started.”

Creating a new flow (”+ New” button):

  • The area changes to a “Flow name” text field and a “Create” button (disabled if the name is empty).
  • When created, the flow appears in the dropdown and is automatically selected.

Section Title (only when a Figma Section was scanned)

An additional “Section title” field appears to name the container in the Vault flow. The placeholder is the section’s name from Figma.

Success State

After a successful sync, a green checkmark icon appears with the message:

“Screens synced! Open the flow in Grails to see them.”

  • Available when frames are scanned and sync isn’t complete yet.
  • “Sync N screen(s) to flow” (primary) — disabled if no flow is selected.
  • During upload: shows “Uploading N/M…” with a spinner.

Plugin Settings

Accessed from the gear button in the sidebar. Changes are saved per team member and persist between Figma sessions.

Section: Sync Options

OptionWhat it does
Show hidden assetsIncludes in the scan components and variables whose names start with . or _. By default these are excluded because they’re considered internal library assets.
Sync imagesExports and uploads thumbnails for components when syncing. Active by default. Disabling it syncs components without a preview image.
Variant thumbnailsExports a separate thumbnail for each individual variant of a Component Set. If disabled, only one thumbnail for the entire Set is exported.
Mode thumbnails(Coming soon) Will export thumbnails for each variable mode. Currently disabled.

Section: Instance Scanning

OptionWhat it does
Nesting depthControls how deep the plugin scans nested instances inside a component to detect sub-components and dependencies. Options: Level 2 or Level 3.

Section: Connection

FieldWhat it shows
TokenThe first 8 characters of your Sync Token followed by ”…” (read-only).
ProjectThe first 8 characters of the project ID followed by ”…” (read-only).
  • “Cancel” — Closes the settings screen without saving changes.
  • “Save & close” — Saves the settings and returns to the previous view.

The typical flow for syncing any type of content always follows the same pattern:

1. Scan → The plugin reads the Figma file and detects what exists and its current status.

2. Review statuses → Identify what’s Outdated (ready to sync), WIP (in-progress changes), or Unsynced (never synced).

3. Select → Check the items you want to sync. You can filter by status to focus on what matters most.

4. Sync → Click the sync button at the bottom. The plugin processes and sends the data to Grails.


Available Actions

ActionWhereDescription
Connect with tokenInitial screenLinks the plugin to your Grails team and account.
Select projectOnboarding step 2Chooses which Grails project this Figma file syncs to.
DisconnectHeaderUnlinks the plugin from your account (requires confirmation).
Scan variablesVariables tabReads all variable collections in the file.
Sync collection(s)Variables tabSends selected collections to Grails.
Assign Token RoleVariables tabAssigns a semantic name to a collection (created in Grails when syncing).
Unlink collectionVariables tabRemoves the collection from Grails (requires confirmation).
Scan stylesStyles tabReads all local styles in the file (text, color, effect, grid).
Sync style(s)Styles tabSends selected styles to Grails.
Scan componentsComponents tabReads all components and Component Sets in the file.
Sync componentsComponents tabStandard sync — updates the current state in Grails.
Sync as new versionComponents tabCreates a snapshot with a commit message in the component’s history.
Scan selectionScreens & Flows tabReads the frames or section currently selected on the Figma canvas.
Create new flowScreens & Flows tabCreates a new visual flow in the Grails Vault.
Sync screensScreens & Flows tabSends scanned frames to the selected flow.
Open SettingsSidebar (gear icon)Accesses plugin configuration options.
Save settingsSettingsPersists sync options for this team member.