Changelog
This page is updated automatically when new features are released. Each entry comes from the development team’s annotations in the source code.
November 2026
Sign in
- Improved a failed sign-in says why inside the form, under the title, instead of in a corner notice
- Improved Tab goes from Email straight to Password; Forgot password? comes after it
- Improved the grail builds itself block by block before its light and sparks start, and its half of the page stays dark; light or dark applies to the form’s half, and follows your system until you choose one
CLI
- New grails-cli tokens pending —locate adds, under each change, where in your repository to edit it, read locally (nothing is sent) and never written: with “dtcg”, the file and the JSON pointer that define the token in each mode; without it, the file and line of your CSS, Tailwind or TypeScript source, marked approximate. Words after the place say what you must decide: an alias (its target is named), a token written in more than one place, a file that looks generated by a tool, a computed value. A new token, collection or mode has no place, since where it goes is your decision; a removal shows where the token is defined. —json adds a location to each change. If your files cannot be read, the list still prints, with one warning.
Components
- Fixed a sync closed by Grails rather than by the plugin (one left open for two days, or one found already finished) now finishes like any other sync: the nesting depth and build order of its components are no longer left out.
- Fixed a component sync that cannot check your plan’s component limit now fails and can be retried, instead of uploading and saving every component past the limit.
- Fixed a variable bound to a shadow, a gradient stop or a text’s font family now appears in the component’s tokens and in that variable’s blast radius
Docs
- Improved inside a pair, a property set with a Figma token that is not synced with Grails now shows the value Figma gives it, marked in Figma, and is compared with the code’s. Components synced before this show the token as not synced until they are synced again.
- Improved inside a pair, Back between the two tables’ titles takes you back to the list of elements.
- Fixed inside a pair, a property set with a Figma token that is not synced with Grails no longer reads as not set: its row shows the token and says not synced, and its wire is dashed because there is nothing to compare.
- Improved a colour style is drawn with its value in Figma whether it is synced or not, a padding keeps the sides it can draw when one side’s token is not synced, and Font size shows the text style it comes from.
Styles
- Fixed a style sync that cannot check your plan’s style limit now fails and can be retried, instead of saving every style past the limit.
Variables & Tokens
- Fixed a variable sync that cannot check your plan’s variable limit now fails and can be retried, instead of saving every collection past the limit.
Versions
- Fixed a sync that could not read your tokens or styles completely no longer records a version where every token or style shows as changed, removed or new
- Fixed a version’s details no longer list a style as changed when only its stored precision moved: a token is not shown changing into itself, nor a size as 74.66667 → 74.67
- Fixed unlinking a token from only part of a value, such as one side of a padding or one corner of a radius, is a major version like unlinking it from the whole value
October 2026
API & MCP
- Improved an id answers with its canonical entity. The same component held by two Figma files is one entity with one id; asking by the id of a second copy answers with the entity and names the copy it read in
representation_id; the id of an entity merged into another answers with the one it was merged into, never a 404. - Improved listings return one row per entity, not one per Figma file: components, tokens and styles carry
representations, every copy of the entity with its file, the primary first. - Fixed asking by id for a flow or a screen deleted in Figma while keeping its documentation answered 500 for the whole request. It now answers with the entity.
- Improved the entity graph, the search and the related entities answer by entity. The same relationship recorded by two Figma files is one edge with
edge_countandorigins, each with its own metadata; a search returns one hit per entity; a related entity is reached once. - New a code token sync accepts DTCG files from any tool (Tokens Studio, Style Dictionary, your own build): send
dtcg: { files, resolver? }instead oftokens, and name the tool inclient. Grails stores its own re-serialization; an upload it cannot read answers 422 (413 for a size limit) with the first 50 findings, each with its file and pointer. - New
GET /v1/code/token-changeslists the changes people queued in Grails for a code source’s tokens: each with its label, collection, mode and its value before and after, in DTCG. Grails never writes to your repository: you carry the changes into your source. - Improved
GET /v1/code/token-changesalso gives each change its tokentype, andbeforeis the value your repository holds now (resolved: an alias in your code is the colour it resolves to), no longer the text that was queued. - New a code token sync marks the changes asked for in Grails as applied once your repository holds their value, and answers
token_changes: { checked, applied, target_removed, open }. An alias counts by the value it resolves to, and colours and sizes use the same tolerance as the token match. A change whose token holds another value stays open and Grails keeps proposing it; one whose token is gone closes. A comparison that fails never fails the sync. - New
POST /v1/code/token-changes/{change_id}/discardcloses a change your team will not carry into the repository, with a requiredreason(1 to 1000 characters), on a key withwrite:code. Grails keeps the change, with the owner of the key, that it came from code, and the reason. A change that is not an open change of the key’s project answers 404, and one already applied or discarded answers 409. - New
POST /v1/code/token-changes:discardcloses many changes at once, in one step: every change waiting for a source, those of one collection, those of one change request, or a list of ids (scope), with a requiredreasonunlessdry_run. It is all of them or none, at most 1000 (more answers 422 and says to narrow it), and anything that is not an open change of the key’s project and source answers one 404 for the whole call.dry_run: truelists the changes that would be discarded and changes nothing. - New
GET /v1/code/token-changestakescollectionandrequest_idto list only one collection’s changes or one change request’s, and each change carries itsrequest_id. - New
POST /v1/code/token-syncs:previewanswerstoken_changes: how many of the changes asked for in Grails the real sync would mark applied, close because their token is gone, or leave open, with their ids. It uses the same comparison the sync applies and writes nothing. - New
GET /v1/code/sourcesgives each sourceopen_changes, the number of changes asked for in Grails that wait for it (null when it could not be counted). - Improved a property serves at most 20 suggested values (a slot’s
anyOfandpreferredValues, cut in the same order) and says how many there are inprops[name].candidates, with the call that brings the rest. A spec with large slots went from ~134 KB to 5–12 KB. - New the values a property suggests come a page at a time:
listEntities({ of: "prop-candidates" })takeslimit(50 by default, at most 200) andcursor, and answersunresolved_keys, the page’s suggestions this project does not hold. Over REST:GET /v1/components/{id}/props/{prop}/candidates. - Improved the token export now carries your boolean and text variables. DTCG has no type for them, so they arrive with no
$type, the text as$valueand the real value in$extensions["design.grails.value"]; a colour whose opacity is a token addsdesign.grails.composed. A code sync of DTCG files now checks those extensions too: a malformed one answers 422 withextension_invalidand the place. - Fixed in the token export, the Figma opacity variable that a colour takes as its opacity is a
numberwith no unit when it has no scope (it came out aspx, as a length). A scope on the variable still decides its type. - New every component, token and token collection says where it lives:
lives_inlists its Figma files (with the node, a link and whether it has a spec) and its code (source, package, repo, file and export, or collection and path for a token). An empty list means it is not there;nullmeans that side could not be read. - Improved Changed — a component named in Grails answers with that
nameeverywhere, andrepresentation_namecarries what Figma calls it; search finds it by either. A token or collection keeps itsname, which is its address, and addsdisplay_name. - New a component that lives only in code is found, listed and read by its id, with its Figma fields null and
lives_insaying it lives in code. The component listing sayssideon every row. - New the code spec through the same door:
getComponentSpectakesside: "design" | "code"(REST?side=). With nosideit reads the side the component has, and the answer always says which; the code spec comes with its source, file, export, CHI, coverage and commit. - New
getBlastRadius(RESTGET /v1/entities/{entity_type}/{entity_id}/blast-radius): everything that uses a component, token or style, directly or not, in Figma and in code, up to 16 levels. One row per entity, withdepth,via,throughandsides;countscovers every page.
Sign in
- Improved the link in a password recovery email now opens a page with a Continue button, so an email scanner can no longer use it up before you do
- Improved after you change your password every session closes, on every device, and you sign in again with the new one
- Improved the link in an account confirmation email opens the same page with a Continue button, for the same reason
- Improved the sign-in page has a new look: the form on the left and, on a wide screen, the Grails grail on the right. The form is ready as soon as it appears; the rest loads after
- New show or hide your password while you type it, and switch between light and dark from the sign-in page
- Fixed in the dark theme, Continue with Google no longer sits on a white box
CLI
- New grails-cli tokens discard <change-id> —reason ”…” closes a change asked for in Grails that your team will not carry into the repository. Grails keeps the change with who discarded it (the owner of the API key), that it was from code, and your reason, which is required. The id is the one grails-cli tokens pending prints. Discarding a collection takes its modes and tokens with it.
- New grails-cli tokens discard —all [—collection <name>] —reason ”…” and tokens discard —request <request-id> —reason ”…” close many changes at once: every change waiting for this repository, those of one collection, or those of one change request. It is one step: all of them or none. Add —dry-run to see the changes that would be closed (id, token, before → after) and change nothing; it says how many were closed when it runs for real, and —json prints the ids. More than 1000 at once is refused: narrow it to a collection or a request.
- New grails-cli tokens pending shows each change’s type and id, and the value your repository holds now as the “before”. The next grails-cli sync marks a change applied once the repository holds the value, and says how many it closed; a change whose token holds another value stays open and Grails keeps proposing it.
- New grails-cli tokens pending —collection <name> and —request <id> list only the changes of one collection or of one change request (its id is printed under the heading of the list). They are the same selections grails-cli tokens discard —all —collection and —request close, so you can look before you close.
- New grails-cli tokens pending lists the changes admins and editors asked for in Grails for your repository’s tokens (a value, a new token, collection or mode, a removal), by collection, before → after, as DTCG values. It writes nothing: Grails never writes your repository. —json prints the list with every value exact.
- Improved a component that passes its own props on with a spread (
<button {...props} />, the way shadcn writes most of its components) now shows where its children go: the anatomy has a children slot under that element, and the props list children with what it accepts (any content, text, a single element or a function). Components that already wrote {children} keep their slot; children now also says what it accepts. Use the same CLI version across a team: syncing one source alternately with 0.5.x and 0.6.0 makes those components switch back and forth on every sync. - New grails-cli unsync takes a token collection (—collection) or a component (—component) out of grails.code.json and out of Grails in one step, keeps the names of the collections that stay, and —dry-run shows what would change without writing anything.
- New a TypeScript token source in grails.code.json can fix the name of its collection with “collection”, so taking out another source that exports the same name no longer renames it and moves its tokens in Grails.
- Fixed grails-cli update, and the line that says the CLI is out of date, now suggest the global command (npm i -g, pnpm add -g or yarn global add) for a global install, instead of npx grails-cli@latest, which left the installed copy as old as it was.
- Fixed a flag that takes a value and is given none (grails-cli sync —profile with an empty variable, say) is now refused with “—profile needs a value” and exit code 2, instead of being ignored and running on the profile it detected.
- Improved when a token source named in grails.code.json is found but gives no token, grails-cli now says why: a name the file does not declare, an object wrapped in a call such as StyleSheet.create(typographyObject), or no token among its values.
- Fixed grails-cli sync now records every component of your library that another one renders, including the ones the anatomy shows as text, an icon, an image or a container (your own Text, Icon, Image or Modal). Before, those had no “used by” in Grails. A component from a library you install is still not counted. Your components do not show as changed: only the usage grows.
- Fixed grails-cli sync no longer mixes up two TypeScript token sources exported under the same name from different folders (an old Color and a v2 Color, say). Each style now resolves to the token of the file it imports, and the component spec names that token by its path in Grails (v2-Color.GRAY_400), so the usage Grails records and the name it shows point at the right collection. The first sync with this version shows the affected components as changed once.
- New grails-cli connect keeps your API key in the operating system’s keychain (macOS Keychain, the Linux Secret Service, the Windows Credential Manager), checked against Grails first, so commands no longer need GRAILS_API_KEY in your shell; grails-cli disconnect removes it. The key comes from the clipboard (which it then clears) or from a hidden prompt with —prompt, never from an argument.
- New grails-cli says once a day, on every run while it is behind, that a newer version exists and which command updates it; grails-cli update checks right now and prints that command for your package manager without running it. GRAILS_CLI_NO_UPDATE_CHECK=1 turns the daily check off.
- New grails-code sync also records what each component of your code renders (other components of the same repository) and which tokens its styles use, and prints how many uses were recorded and which references matched nothing.
- New your repository’s own DTCG files can be its token source: list them under “dtcg” in grails.code.json, with or without a resolver, and grails-cli sync uploads them as they are. When Grails cannot read one, it names the file and the place in it. With “dtcg”, the tokens in Tailwind and CSS are not read.
- New grails-cli tokens baseline writes the tokens it reads from your code as DTCG files and a resolver, in the folder you pass with —out, as a first version for your team to own. Review the files, commit them and list them under “dtcg”. It lists the values it left out, sends nothing, writes only where you say, and does not touch a folder that already has files.
- New grails-cli sync —dry-run, with the key, says what the real sync would do with the changes asked for in Grails: how many it would mark applied, close because their token is gone, or leave open, with their ids. It stores nothing; —json and the job summary carry it too.
- New grails-cli status shows how many changes asked for in Grails wait for each source.
- New grails-cli skill prints an agent skill that explains the CLI to your coding agent: setting up grails.code.json, syncing, writing DTCG that Grails accepts, and listing the changes asked for in Grails.
- New grails-cli is on npm. Install it in your repository with npm i -D grails-cli, or run any command as npx grails-cli <command>; it needs Node 20 or newer. The GitHub workflow that Grails shows under Team Settings › Integrations runs npx —yes grails-cli, so it works as written, and a version can be pinned in it.
- Fixed a token the scanner leaves out no longer leaves behind the tokens that point at it: they are left out too, and each is listed with its reason. Before, the sync could upload an alias to a token that was not there.
code
- New Rules: one place for what Grails decided or proposes. Decide pending matches, separate a join, forget a rejection, and change the naming rules and the color tolerance, with what needs your attention first.
- Improved accepting a match asks what the matched item is called when its Design and Code sides are named differently: Design’s name, Code’s, or your own. When the two names are the same, Accept stays one click.
- Improved Rules is now Code, under Design System in the top bar: the same matches, joins, rejections and rules. Links to the old address still open it.
Components
- New Components has a head with its name, how many components it holds, and a Design / Code switch. Code lists the components your repository uploaded with grails-code sync, with their file and CHI, grouped by folder; a component opens its panel with its props, its CHI and its stories, and a link to its file at the commit it was read at.
- Improved the search, the filters and List / Grid are in the left panel, over the tree of groups, and the bar across the top is gone. Two filters are added: Variants (with or without) and Documentation (documented or not). Components and Assets are chosen in a bar at the foot of the list.
- Fixed “Open in Figma” is shown only when Grails can open the component’s Figma file. It used to be shown for every component, and for most it could not open the file.
- New a component shows the Figma file it came from: its name in the details panel, a Snowflake chip when the file is not a library, and a Source picker in the bar at the foot of the list when the project’s components come from more than one file.
- Fixed “Find in Figma” in a prop’s preferred values now finds the components Figma has, including variant sets; one Figma no longer has is marked “Not found in Figma — It may have been moved or deleted”, and one Figma did not answer for is marked “Could not check in Figma”.
- Improved a prop’s preferred values are grouped the way Figma groups them: a variant offered as a preferred value shows as its component set, once, and the button counts what the panel lists. A component set’s card says “Component set”.
- Improved the Published column says “Not published” where it said “Private”, and says nothing for a snowflake.
- Improved “Open in Figma” opens the component once Grails knows its file’s real key: Figma gives it to development builds and organization plugins, and in the Community plugin you paste the file’s link in “Link this file”.
- Improved a component’s panel has History and Documentation in its header, beside the close button, where a token’s and a style’s panel have Documentation.
- Fixed a component set’s panel lists every variant, the default included, and shows the same number of variants while it loads and after.
- Fixed in a component’s details panel, a text property shows the text it has in Figma. It showed “[object Object]”.
- Fixed “Add group to Assets” and “Remove group from Assets” move the whole group. For components synced by the current plugin they said the group had moved and changed nothing.
- Improved moving a group between Components and Assets can be followed: the button is more prominent and shows a spinner, the group folds away, a folder flies to the Assets (or Components) button, and that button flashes and updates its count.
- New download assets: one from its row or card, or a whole folder as a ZIP from the sidebar’s tree, choosing SVG, PDF, PNG or JPG each time. It uses the team’s Figma token
- Fixed downloading an asset from its details panel asked Figma for the wrong file whenever the asset came from a file other than the project’s, and failed; it now asks the asset’s own file
- Improved Components and Assets are now two tabs at the top of the sidebar, where its “Groups” title was; the bar at the foot keeps the Source, when there is one to choose
- Fixed downloading assets asked Figma for a file key Grails makes up for files synced with the Community plugin, and Figma refused every one. It now asks for the real key, the one pasted in “Link this file”; for a file without it, the download says to paste the link
- New a component you matched with its code has a Figma / Code switch at the top of its panel: it opens on the side you clicked, and shows the other side in the same panel.
- Fixed in Assets, the download buttons are always on screen, on a phone too: each card’s at its top right, and a group’s ZIP in the group’s header, beside “Remove group from Assets”. They appeared only under the mouse, so a phone never showed them
- New Assets has a Grid size in the bar at the foot: Large, Medium or Small, remembered in this browser. Assets is always a grid
- Improved List and Grid moved to the bar at the foot of the list, and the Components and Assets tabs no longer show counts
- Fixed on a phone, a group with a long name no longer makes the list scroll sideways
- Fixed in an asset’s panel, a download button shows that it is downloading and takes no second click, as in the grid: each click asked Figma for the image again. On a phone the panel also shows each token’s id and the arrows of the related components, which appeared only under the mouse
- New a CHI filter in the panel: Poor, Monitor or Good, where Good includes Optimal. A component is at the level its CHI shows in the list and in its panel
- Improved Assets is its own section in the top bar, beside Components, with its own address. The tabs at the top of the list’s panel are gone, and a group added to Assets flies to Assets in the top bar
- Improved in Pending matches each pair is one card: both sides joined by a link, each with the icon of where it comes from, and Match and Not the same at the foot of the card.
- Improved in Pending matches, the reasons have short names (Match by Name, Match by Values, Match by Key…); hover one to read it in a sentence.
- Fixed the Design / Code switch answers when you tap it: the side you tapped lights up at once and the page shows a skeleton until the new side has loaded. Before, the old side stayed lit and nothing moved until the data arrived.
- Fixed a component opened from Assets keeps Assets highlighted in the top bar, also after a reload, and closing its panel goes back to the Assets list.
- New Pending matches: when Grails finds a component that looks like the same one kept in Figma and in your code, a callout over the list offers to review the pairs. Match joins them for good; Not the same dismisses the pair, and Grails will not propose it again. Both ask first.
- New one row per component, also when it lives in more than one Figma file (the row says how many), and a Lives in column: a palette for Figma and code tags for your code, lit where the component is. The Code side has the same column.
- Improved when two components cannot be matched because both already have a block a component keeps only once, the notice says which block: for example, “both have a Related block”.
- Fixed an outdated component is no longer marked as changed by a token when the token that differed belongs to another Figma file of the project.
- Improved publishing a library in Figma now reaches projects synced with the plugin when the file’s Figma link is known: the components, tokens and styles that changed are marked as outdated. Before, only projects connected the old way were updated.
- Fixed in a component’s Anatomy, a token shows the one from the component’s own Figma file. When two other files of the project have it, the chip says so instead of picking one.
- New a match can be undone. Pending matches has a Matched tab with what was matched, newest first, by a person or by Grails, and Unmatch on each; a matched component’s panel has Unmatch in the ⋯ menu beside its Figma and Code switch. The two become separate again, each with its own documentation, and the pair is not proposed again.
- Improved a component’s Tokens tab shows its tokens sooner: the panel reads the tokens the component is bound to, not every token of the project.
- Improved the Matches panel (was Pending matches) has three tabs: Pending review, Accepted and Rejected. A rejected pair can be forgotten from Rejected, so Grails may propose it again. The list’s title is its reason filter, a drop-down, and Match all beside it joins every pair the filter shows. Match and Not the same can stop asking, with Don’t ask again.
- Improved a code component’s panel looks like a Figma component’s: Properties, Components (its sub-components, linked when this repository has them, and where it is used), Tokens (with the hardcoded values) and the CHI health board, whose help speaks of the repository.
- New a component’s panel has the Docs icon on its Code side too, beside the close button, and it opens the same documentation as the Figma side. A component that lives only in code opens its documentation to read.
- New when you match a pair you choose the name the matched thing takes: Design’s name and folder, Code’s, or one you type. A later rename in Figma or in code does not change it, and you can edit it from the component’s page in Docs. Match all asks once whether every pair takes Design’s names or Code’s names, and Don’t ask again on Match uses Design’s name.
- Improved a matched component is called by its chosen name in the list, its folders, its panel’s title and everywhere else in Grails, and an accepted match shows the name it was given.
- Improved the documentation panel of a component, a token, a token collection or a style is for reading, whatever your role: it no longer has Add block or Save, and a checklist step is ticked in Docs, not in the panel. A bar at the bottom has Open in Docs, which opens the entity’s page in Docs, a component’s on its Docs tab, where documentation is written. With nothing written the panel says “No documentation yet” and, for admins and editors on a screen at least 768 pixels wide, offers Edit in Docs, which opens the page already editing.
- Improved the component panel opens on Overview with its health score; Relations lists the components it uses, those that use it and the patterns built with it; Tokens shows its token adherence with a link to inspect the anatomy in Docs.
- Improved a code component’s panel has the same three tabs as a Figma component’s: Overview with its Health · CHI card (a click opens the health breakdown), Relations with the components it uses, those that use it and the patterns built with it, and Tokens with its token adherence and a link to inspect the anatomy of its code in Docs.
- Improved Changed — Token Adherence counts each value once: the same value on the same layer used to count again in every variant, so large component sets weighed their repeated values hundreds of times. A text with no Text Style now counts by its parts (family, weight, size, line height, letter and paragraph spacing), so binding its size to a variable counts even when the family is typed in. Scores can move a few points with no change in Figma: the measurement changed, not the components. Every stored score is recalculated the night after the release, and the recalculation does not change a component’s last-modified date.
- Improved Changed — API Surface is now two metrics: Variant Grid (10%), the variant combinations someone has to design, and Toggles (15%), the booleans and slots. API Surface multiplied the variants by two for every boolean, so a button with 12 variants and 5 booleans lost the whole penalty. Each new metric charges only past where a value stops being typical across real design systems, measured rather than picked: 32 variants and 5 toggles. Most components with several booleans gain points. A few that API Surface did not charge lose up to 5: those with 6 booleans and slots, or with more than 32 variants and few toggles. Every stored score is recalculated the night after the release.
Docs
- New Import Markdown, beside Export and on an empty page: add documentation from a .md file or from Markdown you paste. Headings become titles, tables become tables and the rest becomes text, and the dialog shows each block before anything is added.
- Improved Import Markdown replaces the JSON import (“import from another source”).
- Fixed a Text block shows its text, its formatting and its mentions, and no other HTML: a frame, a style or a form saved in one is no longer displayed.
- Fixed a mention of something deleted, or of something outside the project, opens a panel that says it was not found instead of loading forever.
- Fixed a title that mentions a component or a token shows the mention, as text does, instead of its code, and On this page lists it by name.
- Fixed the side panels follow your Floating or Fixed setting when you move between sections, come back to a tab or go back: they could open in the old mode until you reloaded.
- Improved on a component’s Anatomy tab, the padding box says when a size hugs or fills, and the minimum and maximum Figma sets on a width or a height show beside it.
- Improved the bar at the bottom of Docs is now Edit, History, Import and Export, with Copy link under More; the Anatomy bar is the variant, Compare and Export (spec, Markdown, PNG), with Copy link and Open in Figma under More.
- Improved documentation is edited on screens at least 768 pixels wide; on a phone it is for reading, and you can still tick a checklist step and save it.
- Fixed on a component’s Anatomy tab, Open in Figma is in the More menu only when Grails can open the component’s Figma file.
- New a component’s page names the Figma file it came from, beside its last sync, and marks a snowflake.
- Fixed a component’s documentation comes back when the component is synced again after being unsynced or deleted in Figma. It returns to the component of the same Figma file, after anything written since.
- Improved on a phone, a drawer opens over the whole screen from the bottom, with its close button and its bar at the foot, and the bar at the foot of every section stays above the browser’s own bar.
- Improved typing @ in documentation offers text styles too, and ranks what you type the way the project search does, so an exact name comes first whatever it is. A text style’s mention opens it in Typography; a color, effect or grid style’s mention shows its name and says it opens nothing.
- Improved a panel takes the keyboard focus when it opens: Tab moves through the panel on top and not the page behind it, a screen reader announces it by its title, and when it closes the focus goes back to what opened it.
- New a Figma block: paste the link of a frame or a component of a Figma design file. On a desktop, View live opens it inside the page as it is in Figma, and Open in Figma opens the file; on a phone the block shows its name and caption
- New a Figma block shows a preview image when the team has a Figma token: it is drawn when you paste the link, on a desktop and on a phone. Refresh preview draws it again, and Generate preview draws one for a block that has none
- New a component that lives in code shows its Anatomy in Docs: its layers, the tokens and the measurements its code declares, with literal values marked hardcoded. A component in Figma and in code has Design, Code and Both in its page’s head; Both puts them side by side, what differs first. Code has no image, so its layer tree is drawn instead.
- New components that live only in code are listed in the Docs panel, in a Code only folder at the end, with the code mark, grouped by the folder of their file.
- Improved a component’s page in Docs has one address for the component, whichever of its Figma files or its code you came from; older links still open it.
- New the Docs panel has a Source filter beside Type and Status: Canonical (a component in Figma and in code), Design (only in Figma) or Code (only in code). Every component is in exactly one, and token collections and styles are left out while a Source is chosen. A component in Figma and in code wears both marks in the panel, and one only in code wears the code mark.
- New a component that lives in code has an Inspector in the right panel, with its box model always drawn: each side of the padding shows the token it uses, the hardcoded value it declares or the property that sets it, and a dash where the code says nothing. Width and height are shown as the code declares them. Pick an element in Structure or in Elements to inspect it. A component in Figma and in code shows it when its page is on Code; Design keeps the Figma inspector.
- Improved on Both, the comparison opens on the Figma layers against the code’s layer tree; a Layers / Design switch in the Figma title shows the render.
- Improved the Inspector of a code component shows its Text and Appearance, in the order of the Figma one: the typography and the colours it uses, each as a token, a hardcoded value or a property. A token chip opens the token’s own panel.
- Improved on Code, the bar at the foot of a component’s page picks the code variant (it is no longer a row of chips on the page) and its menu copies the link or opens the component’s file in its GitHub or GitLab repository. Picking one property keeps every other at its default.
- Improved on Both, the right panel steps aside and the comparison takes the full width. The bar has two pickers, the Figma variant and the code variant, and Both compares the pair you pick instead of only the defaults.
- New a component can have a name and a folder of its own, shown everywhere in Grails. Admins and editors change them with the pencil beside the name on the component’s page, and a later rename in Figma or in code does not move them. Emptying a field goes back to the name from Figma or code. A token collection matched with its code is called by its chosen name in Docs and in search; the Tokens table keeps the Figma names.
- Fixed opening Docs now shows its loading state straight away. If you clicked Docs while the app was still preparing it, the page you were on stayed in front for a second or two with nothing to say it was working; now the panel and the page draw their placeholders at once.
- Improved Create Doc page is a button fixed at the bottom of the Docs panel while its Pages tab is open, and it replaces the + beside the search. The Overview has the same button in the bar at its bottom.
- Improved a page named in the Overview’s activity is a link to it, unless the page has been deleted.
- Improved the Pages tab shows each page’s own icon, and the document icon for a page without one.
- New a component’s page in Docs has a Graph tab that answers “if I change this, what do I affect?”. It draws the component and only what uses it, in columns by level (Direct, Level 1 and so on). Open what an entity leads to with its + or − handle, or use Expand all and Collapse all.
- New the bar at the bottom of the Graph tab filters the map by kind (Components, Tokens, Styles) and by relation (aliased by, bound by, used by). Each option draws the shape or the line it stands for, so the bar is also the legend. Fit and the zoom buttons frame the map.
- New click an entity on the Graph tab to inspect it. The Inspector sums up the whole map (“If you change X: N entities across L levels”, by kind), then says how the entity is reached and through what, how many entities use it, and opens its panel or its page in Docs. Double-click an entity, or press Centre graph here, to map what uses it instead; the breadcrumb at the top left goes back.
- New a token synced from Figma has a page in Docs, with two tabs: Docs, its documentation, and Graph, what a change to it would affect. Open it from the token’s name in its collection’s page. The head shows the token’s name, where it lives, its sync state, its role and its value in each mode, and a link above the name goes back to the collection. The left panel does not list tokens: while you are on a token’s page it marks the token’s collection. A token that lives only in code has no page and keeps its panel.
- Improved on the Graph tab, Open in Docs in the Inspector also opens the page of a token synced from Figma, not only a component’s.
- New the Graph tab shows the patterns that use a component, directly or through another pattern that contains it, drawn as diamonds with “Draft” under a draft’s name. The new Patterns chip in the bar shows or hides them; picking one offers Open pattern, which goes to its page. A pattern cannot be made the centre of the map.
- Fixed choosing another component, collection, token, style or page in the Docs panel shows its loading skeleton at once, instead of leaving the previous page on screen for about a second.
- Improved Save writes your changes and goes back to reading, without a Done after it; if the save fails, the documentation stays open with your changes. An image takes its final size while it loads, so the page no longer jumps when it arrives.
- Improved Docs pages open faster: documentation arrives with the page instead of loading after it, links to tokens and the top bar prefetch when you point at them rather than all at once, and a component page reads less and in parallel.
- Fixed The Graph tab’s bar fits the page at every width: on a narrower screen the actions and then the kinds show their icon alone (the name stays as the tooltip), so Fit and the zoom are never cut off.
- New the variants of a component set have a bar with Grails and Figma: Figma shows the component live in Figma, for anyone with access to the file there. Grails, the grid, is still the default.
- New Both now draws a component’s Design and Code as two schematics side by side, and lists their props and elements in two tables joined by wires: solid green where a pair matches, dashed amber where it matches in part, red where nothing does. A summary under the tables counts what matches, what drifts and what exists on one side only.
- New admins and editors can link the parts of a component’s Design and Code by dragging a row onto the other side, or unlink a pair by pointing at its wire. Each change offers Undo. Linking two props that have values opens Link values, a panel to link their values the same way.
- New click a linked element’s row or wire in Both to go into the pair, and its properties are compared one by one. Matches, in the bar, chooses which kinds of pair the tables show.
- Improved the panel on the right is now there in Both: empty until you pick something on either schematic or in the tables, then it shows the element and its counterpart, with a Design tab and a Code tab.
- Fixed two linked elements with nothing to compare no longer show a green wire as if they matched: their wire is grey and dashed, the row says nothing to compare, and the summary counts them apart. Matches has an option for them.
- Improved a code token’s chip is now the same chip as a Figma variable’s: a colour token shows its colour before its name, in one chip, and the value as your code writes it (an oklch(), for example) is in the chip’s tooltip and in the token’s panel.
- Improved in a component set, the Elements section has a switch, All elements and This variant, to list every element or only the ones the variant on screen shows. A component without variants has no switch.
- Improved a slot property’s default now shows the name of the component that fills it, linked to its page, instead of an id.
- Improved lengths on the Anatomy tab are shown with at most two decimals.
- New the bar at the bottom of the Anatomy tab has a Modes picker: one mode for each token collection the component uses, listing only the collections that have more than one mode. The schematic and the inspector show every token at its value in the mode picked for its collection, or in the collection’s default mode when you pick none. Design, Code and Both have it.
- New the Anatomy tab can now show a component’s Design as a Schematic, drawn from its spec, in place of the Figma Screenshot: layout, sizes with their minimum and maximum width and height, padding, gap, corner radius, colours and text, only for the elements the variant on screen shows. The preview’s markers, spacing, measure, background and zoom work on it.
- New the Code view now draws the code component as a schematic too, with the same tools and the same inspector. A slot the code declares, such as children, is drawn as a dashed box with its name.
- Improved under a schematic, a line names what it could not draw and why: the token is not synced with Grails (sync the library it comes from), Grails cannot tell which token it is, or the value is not one the drawing can use.
Figma Plugin
- New Grails now knows which Figma file each component came from. Every scan sends the file’s name, and after connecting the plugin asks for the file’s link (“Link this file”), so Grails can open your components in Figma. The step is optional and can be reopened from Settings.
- Fixed Two Figma files synced into one project no longer overwrite each other’s components when they share node ids, which a duplicated file always does.
- New Variables and modes you delete in Figma are now removed from Grails when you sync their collection, and they stop counting toward your plan’s limit. Their documentation goes to the trash and comes back if the variable does. If Figma cannot read some variables, the sync tells you how many and in which collection, and nothing is removed from that collection. Requires plugin 1.7.0; older versions remove nothing.
- New Effect and grid styles now sync to Grails. They live with paint styles in one Visual Styles section, split by type (Paint, Effects, Grid) with a filter for each, and grouped by name inside each type. Text styles keep their own section.
- Improved A component’s colour style now reaches Grails as a reference that says whether it is on the fill or on the stroke. The first sync with plugin 1.8.0 shows every component that uses a colour style as modified, once: the plugin now reads those styles more precisely, nothing changed in Figma. Syncing them once brings them up to date.
- Improved Hovering a row shows its full name, path included. Inside a group the row shows only the part after the group’s name.
- Fixed “Unsync” now also appears when the selection includes entities marked Modified. It used to appear only when everything selected was Synced, so a changed collection could not be removed from Grails from the plugin.
- New Hovering a component shows an arrow that takes you to that component in the file: Figma switches to its page, selects it and zooms to it.
- New After connecting, the plugin asks once per open for the file’s link until someone pastes it. Paste it from Figma (Share → Copy link) or skip; the plugin warns when the link looks like another file and still lets you continue. The link is kept in the Figma file, so a duplicate of the file starts with its original’s link: paste the duplicate’s own link from Settings.
Figma Widget
- New The Grails Docs widget for Figma: insert it on a page, connect it with your Grails token, and pick one of the page’s components documented in Grails. It shows that component’s documentation on the canvas (titles, text, lists and tables), its sync state and when it was last updated, for everyone who opens the file. Refresh brings the latest; images come in a later version.
- Improved The widget draws each block as the doc page does: its category badge, Do and Don’t with thumbs, checklists with their boxes, and bolder titles. Any component of the page that Grails holds can be picked, documented or not, and the text size goes 1x, 2x or 3x. The date line says when the documentation was last updated and by whom.
- New Under the documentation, a panel shows what Grails holds about the component and how to ask for it: its component key, which the Grails MCP resolves, the REST path of its spec, what was measured in Figma (properties, anatomy, variants, tokens, styles, uses) apart from what was declared in Grails (documentation, patterns, relations), and when it was synced, changed and documented.
Overview
- Improved links in the top bar, the side panels and a collection’s token list load their page only when you click them, and show a small loading mark at once until it arrives.
- Improved the top bar groups its sections in two menus, Design System and Knowledge, beside Overview and Audits, and no longer shows counts. Flows is hidden for now.
- New the team’s activity now records patterns: created, edited, published, unpublished and deleted, whether a person or an agent through the API did it (the row says “Through the API”). The type filter has a Patterns group, and a pattern’s name opens its page when the event is from the project you are viewing.
- New Search your whole project from the top bar, or press ⌘K (Ctrl+K on Windows and Linux): find a component, token, style (text styles included) or Docs page by name, and what the documentation says about it, side by side. Pick a result to open it in a panel or on its Docs page.
- Improved a component, a token or a collection that was matched with its code is one result, not one for Figma and one for the code, and it is called by the name chosen for it. A component result opens its page in Docs, where both of its sides are; ⌘ or Ctrl with Enter opens its panel instead.
- New Search finds patterns, drafts included, each marked Draft or Published, and Enter opens the pattern’s page. Typing @ in documentation finds them too, and a mention of a pattern is a link to its page (in the editor it opens in a new tab, so unsaved changes stay put).
- Improved tokens and collections that live only in code are found too, in green: a code token opens its code panel and a code collection opens its page in Docs.
- Improved in the @ list of the documentation and in the component picker of Patterns, the icon of a component, token or collection is green when it comes from code and violet when it has a Figma side, and its tooltip says which.
patterns
- New Patterns: each pattern says the problem it solves, when to use it and when not, its parts with the components they accept, and its rules. A pattern whose components changed is marked for a look. Agents write patterns through the API; editing them in Grails comes later.
- New Patterns are built in Grails by composition: sections, screens of sections and flows of screens, edited in place with Edit, Save and Done, and published or taken back to draft from their head. The overview shows every pattern as a card with its kind, its documentation, its author and when it changed; the left panel searches and filters them by status and author. Each pattern has a Graph tab with what it uses and which patterns use it.
- New Each pattern has its own documentation under its sections, written with the same blocks and categories as Docs and edited together with the pattern from Edit, Add block and Save. Its categories show on its card and in its Overview panel.
- Fixed Saving or publishing a pattern no longer overwrites changes someone else made since the page was opened: Grails says so and saves nothing. Publish and Unpublish change only the status.
- New Export a pattern to Markdown, with its documentation, or copy it; delete a pattern after a confirmation that names the patterns using it; a pattern’s Updated date counts changes to its documentation.
- Improved while editing a pattern you can set each component a section accepts: mark one as the section’s default component, and choose the values its properties take there (for example variant: primary). Under “Avoid when” you can name the pattern to use instead, and a section’s content guidance can have a maximum length.
Styles
- Improved the search and the Status filter are in the left panel, over the list of styles, and the bar across the top is gone. The design system version sits beside the panel’s name.
- Fixed when a project has two Figma files with the same styles, such as a file and its duplicate, syncing the second one now brings its styles in. Before, they were taken as already synced and skipped.
- Fixed deleting a style in one Figma file no longer removes the style with the same key from another file of the project, and each file’s changes stay apart in the history.
- Improved a grid style shows its grid in the list: columns, rows or a square grid, how many and how they align, with the exact measures in its tooltip.
Team Settings
- New Team Settings › Integrations has a Code Sync section: one card per connected repository with its last component sync and its last token sync, and, before any is connected, the three steps to connect one, with Create key already set to the right scope and the GitHub workflow to copy.
- Fixed Integrations › Code Sync no longer calls a teammate whose profile has no name “a former member”: it says “a teammate”. “A former member” is only someone who left the team.
- New the Pairing (write) scope lets an agent link and unlink a component’s Figma and code parts
Typography
- Improved the search and the Status filter are in the left panel, over the list of text styles, and the bar across the top is gone. The design system version sits beside the panel’s name.
- Fixed in a team with more than one project, Typography shows the text styles of the project you are in, and the variables a style uses come from that same project. Before, the page could show no styles at all.
- Fixed in a text style’s panel, every property bound to a token shows it. A token this project has not synced, such as one from a library, shows as “Token not in Grails”, where the panel showed nothing. A token’s chip opens it wherever the panel was opened from, and a keyboard reaches it.
- Improved Typography has a head with its name and how many text styles the project has, and the styles open as a table: sample, name, family, weight, size, line height, letter spacing and status, a small mark beside every value bound to a token. The bar at the foot switches between Table and Cards, the list the page had before. Clicking a row opens the style’s panel, and the left panel’s search, filter and groups work in both.
- New Typography has a Design / Code switch in its head. Code shows the text styles your repository uploaded with grails-code sync, as a table or as cards: family, size, weight, line height and letter spacing, and under each value that the style does not set itself, where it comes from (a token, a CSS rule, or the CSS default). A value Grails worked out from next/font says “guessed”. It is read-only, and with several repositories the head lets you pick one.
- Improved the Design / Code switch answers when you tap it: the side you tapped lights up at once and the page shows a skeleton until the new side has loaded.
- Fixed a text style’s tokens come from the style’s own Figma file when the project has more than one file with the same tokens.
Personal Settings
- Fixed Grails follows your system’s Reduce motion setting: side panels, dialogs and menus open and close at once, and loading indicators keep moving.
Variables & Tokens
- Improved the search and the Status filter are in the left panel, and the bar across the top is gone. Edit and Export are in a bar at the foot of the table: Edit shows the pencils, Done hides them, and each change is still queued for Figma as you make it.
- Fixed a token’s or a style’s panel has its Documentation button wherever you open it from: a component’s panel, a mention, the Anatomy tab, not only the Tokens and Typography lists.
- New the Tokens page has a head with its name, how many tokens it shows, and a Design / Code switch. Code shows the tokens your component library’s repository uploaded with grails-code sync, in the same table: collections, modes, values and aliases. It is read-only, and with several repositories the head lets you pick one. A link keeps the side it was opened on.
- New Diff, the third side of the Tokens page: what differs between your Figma tokens and your repository’s, pair by pair and mode by mode, opening on what differs. When the code calls something by another word, Diff suggests a naming rule, and admins and editors can add it, or change the colour threshold, from there.
- New a colour the code writes in a space wider than sRGB (display-p3, oklch) is marked in its cell: the swatch shows the nearest colour sRGB holds.
- Fixed the Design / Code / Diff switch answers when you tap it: the side you tapped lights up at once and the page shows a skeleton until the new side has loaded. Before, the old side stayed lit and nothing moved until the data arrived.
- New admins and editors can now edit your repository’s tokens from the Code side, on a plan with Code Sync. Turn on Edit and the pencil on a value opens a dialog with a Value tab made for the token’s type (a colour in its own colour space, a size in px or rem, a number, a font weight, a list of font families) and an Alias tab to point it at another token of the repository. The row menu copies a token’s path or queues its removal. Nothing is written to the repository: each change waits, shown in its cell as before → after, until a developer adds it to the repository’s tokens, or to the rules that generate them. A chip in the head and a counter in the top bar open the list of what waits and what was recently applied.
- New every kind of code token can be edited now except typography: durations, curves, stroke styles, text, shadows, borders, gradients and transitions, and a part of a shadow or a border can point at another token. The Alias tab offers tokens in design and code, in code only, and Figma variables whose value it copies. Pending changes can be discarded from either list, and if the repository changed while you were editing, the dialog shows its new value and lets you start again from it.
- Improved in the dialog that edits a code token, a unit (px or rem, ms or s) is a toggle beside the number, and every list opens from a drop-down whose arrow no longer touches its edge. The pieces of the dialog (fields, chips, warnings, the before → after) look the same in every type’s editor and in the pending changes.
- New Export on the Code side: downloads the repository’s last upload as Grails stored it, in the same format and with the same panel as the Figma export.
- New Pending matches in Tokens: the token and collection pairs Grails finds between Figma and your code, in the same panel as Components’. Match all joins, in one go, the pairs with the same name and the same value.
- New a Figma variable matched with a code token says so at the foot of its panel: “Code: color.ink · @acme/ui”.
- Fixed the pending changes panel no longer names a command to run: it says how a change reaches your repository (a developer adds it to the repository’s tokens, or to the rules that generate them).
- Improved the pending changes panel now says what happens next. The next sync marks a change applied once your repository holds its value, and a developer lists them with grails-cli tokens pending and can discard one from the repository with a reason (grails-cli tokens discard). A change the repository has moved past stays queued and shows “In code now” beside it. Under Recently closed, a change discarded from code reads “Discarded from code”, with who discarded it and why.
- Fixed in a shadow, a border, a gradient or a transition, turning off a part’s link to a token starts that part from the token’s value, not from black or 0px.
- Fixed on the Code side, a collection’s tokens are listed by name, with numbers in their natural order (stone-50 before stone-100); they came in no order a person could follow.
- Fixed when a project has two Figma files with the same collections, such as a file and its duplicate, syncing the second one now brings its collections in. Before, they were taken as already synced and skipped.
- Fixed deleting a variable in one Figma file no longer removes the variable with the same key from another file of the project, and each file’s changes stay apart in the token history.
- Fixed a token that aliases another follows it inside its own Figma file. When two other files of the project have that token, its panel says so instead of picking one.
- Fixed Pending matches no longer stops the Tokens page with an error when a code token in a pair holds a size, a colour written by its parts or a shadow; the value is shown in words, as in the Code table.
- New token and collection matches can be undone: Pending matches has a Matched tab with Unmatch on each, and a matched Figma variable’s panel has Unmatch in the ⋯ menu beside its Code line.
- Fixed in a matched variable’s panel, the ⋯ menu with Unmatch sits right after its Code line instead of floating in the middle of the panel.
- Improved a token’s panel opens faster: it reads that token and the tokens its aliases point to, not every token of the project.
- Improved Export now includes boolean variables and text variables that are not font families: they arrive with no
$type, the text as$value(“true”, “false”) and the real value in$extensions["design.grails.value"]. A colour built from a colour and an opacity variable also names both, so a tool that reads it keeps the link. - Fixed in Export, an opacity variable with no scope that a colour is built from is written as a number (50), no longer as 50px. A scope on the variable still decides its type.
- Improved a token’s panel, from Figma or from code, has the component panel’s tabs: Overview, Tokens, Styles and Components. Tokens shows what it aliases and what aliases it, Styles the styles that use it, and Components the components that use it, one per set with how many of its variants do.
- Improved the Tokens, Styles and Components tabs of a token’s panel no longer show a number, and a Figma token’s panel reads what they list only when you open one of them.
- New the Overview of a Figma token has a Blast radius button: it counts every token, style and component the token reaches, through aliases and styles too, and in how many levels.
- New a code token opens in its own panel from a row of the Code view: its value in each mode, its collection and repository, the components that use it, and its Figma variable when it is matched.
- Improved a colour from code shows as a hex, like the Figma side, with a switch in the same chip that shows the value as the code writes it (oklch, rgb, hsl). A click copies what you see. In the Code view and in the Matches panel.
- Improved the Matches panel (was Pending matches) has three tabs: Pending review, Accepted and Rejected. A rejected pair can be forgotten from Rejected, so Grails may propose it again. The list’s title is its reason filter, a drop-down, and Match all beside it joins every pair the filter shows. Match and Not the same can stop asking, with Don’t ask again.
Versions
- Fixed adding a layer with the same name above another one is recorded as a layer added, with the version it deserves, instead of as the existing layer changing to another component
September 2026
Components
- Improved documentation is now saved when you press Save, instead of after every edit. You can add, rewrite, reorder and remove blocks freely and commit them all at once; closing the panel with unsaved changes asks before discarding them.
- Fixed a component nested from ANOTHER Figma library now resolves to the real component and shows its name, instead of appearing unlinked under a 40-character code. Requires the updated plugin.
- Fixed in the Tokens tab, a colour with an opacity on top shows its colour and the percentage instead of raw text.
- Improved On a phone, the list of groups opens from a button at the foot of the screen and closes when you pick a group, so the components get the whole width.
- Fixed on a phone, tapping the search no longer zooms the page: its text is 16px there now.
- Improved the list beside the page is now a side panel like Docs’: it floats over the edge of the page as a card or docks to its side, as chosen in User Settings → Appearance → Side panels, and it widens with the text size. Components and Assets are tabs at its top.
- Fixed When Grails re-reads a component without any design change, version history and the commit changelog now show it as a Spec Version Update instead of a new version or a modified component.
- Fixed Layers that share a name are now separate elements in version history, each shown with its name from Figma. Before, only one of them was kept.
- Improved Version history now shows when a layout’s alignment changes between start and end (left and right in a row), which was previously not captured. When a value only moved to a different field and did not change, it appears as a single “moved” row instead of one removal and one addition.
- Fixed Components Figma Cannot Read: Such a component no longer shows up in your library as an empty “Unknown” component. It is skipped, and the sync records it by name as skipped instead of pretending it arrived.
- Fixed Search After Moving a Component: Moving a component to another folder in Figma now brings search up to date with its new folder.
- Fixed Uploads Beyond Your Plan: A sync no longer uploads thumbnails for components your plan will not accept, and the thumbnail a re-sync replaces is now cleaned up instead of staying in your storage.
- Improved Schema Upgrade v0.33.0: Components now record when a text is truncated with an ellipsis and after how many lines, and whether a layout is aligned to the start or the end (left or right in a row). Every component asks to be re-synced once from the Figma plugin, where you can sync all or skip; re-syncing records a “Spec Version Update” in version history — no diff and no version bump, because re-reading the same design under a newer schema is not a design change.
- Fixed line height now keeps its unit (150%, auto or pixels), and a fill hidden in Figma is no longer shown as the component’s colour
- Fixed On a large design system a sync used to leave many components without a build order, and the API answered “not computed” for them, so an agent could not tell what to build first. The order is no longer prepared during the sync at all: it is worked out when you ask for it, so it is always available and always current. Nothing you call changes for reading it, and syncs of large libraries finish sooner.
Docs
- New you can now write your own documentation pages, not only documentation attached to Figma components and tokens. A page’s link comes from its title and then stays put, so renaming one later does not break anything you already shared.
- New you can now group pages into folders, and rename or remove a folder without touching the pages inside it: removing one simply leaves its pages ungrouped. Moving a page between folders never changes its link.
- New Docs now opens with a coverage panel: how much of your design system is documented, broken down by components, token collections, styles and pages, and how much documentation went out of date after a sync. A category your project does not use says so instead of showing 0%.
- New you can now add a real table to any documentation: rows and columns you edit in place, with controls to add or remove either, turn the header row on or off, and drag column widths that stay where you put them. Cells take bold and italic.
- New headings are their own block now, with a level you choose, so a long page can be broken into sections. Text went back to being text: prose and lists.
- Improved the block that used to be called Table is now Specs, because that is what it does: each row names something and defines what it is. Cross references between rows now say HOW they relate — instead of, along with, requires, replaces, replaced by, see also — where before every reference silently meant «instead of».
- Improved editing a block no longer wraps it in a box. The toolbar appears when you focus it, and a block with unsaved changes is marked so you can tell at a glance.
- New Library now lists every component, token collection and style in your project alongside your pages, showing which are documented, which have documentation that went out of date after a sync, and which have none. You can filter by status, origin, type and subject, and the filters stay in the link so you can share a view. Clicking an entity opens its documentation panel. Until now this part of the screen said the view was not built.
- New you can now delete a documentation page. Unlike the documentation attached to a Figma component, which comes back the next time you sync, a page and everything written on it are removed permanently.
- Improved clicking an entity in Docs now opens its documentation panel directly, instead of the entity’s own details
- New a Related block connects an entity to others with a verb and a reason, and the entity on the other side sees it too
- Improved a page’s address now names what it is, so
Voice and Tonelives at/docs/page/voice-and-tone. Links you already saved keep working, and a page can now be called anything — including words the section itself uses, like “Components” - Improved Docs now has a panel on the left that stays with you on every Docs page: an Overview entry, your design system by folder — components as the Components section lists them, token collections and styles — with each one’s documentation status, and your pages by folder. Search, filters and New page sit at its top, and each page and folder has its own menu. The panel floats over the page or docks to the side, and collapses; choose which you prefer for both panels in User Settings.
- New clicking a component in Docs opens its page. Its Anatomy tab shows what the component is made of: every element and when it shows, the auto layout of each container, the properties a designer can change and what each one controls, and the tokens it uses with their values. Pick any element to inspect it in the panel on the right, and copy its tokens or its spec.
- New a component set now opens on its variants, laid out as in Figma with each variant’s image. Pick one to see its anatomy, compare it with another variant to see exactly what changes, and keep only what changes in every section. The link names the variant, so you can share it.
- New the Anatomy tab now shows the component’s image with a numbered marker on each element. Pick an element on the image to inspect it, see its padding and the gaps between its children drawn over it, hold Alt to measure the distance to another element, and pick the background it sits on. Components synced with the current Figma plugin get the markers; older ones show their image and ask for a new sync.
- New Docs now opens on an Overview of what changed in your project’s documentation, newest first: pages created or deleted, and documentation written, edited or removed. The coverage panel Docs used to open with is no longer part of the section.
- Improved on a component’s page, the inspector is now the section’s right panel: it floats over the page or docks to the side, and collapses, like the left one, and the Side panels setting applies to both. It shows on the Anatomy tab once the component has its anatomy. On a phone both panels open from the same bar at the foot of the screen.
- New a bar at the bottom of a component’s Anatomy tab keeps its tools at hand wherever you scroll: change the variant on screen (or, on a single component, which of its elements show), open the component in Figma, copy a link to exactly what you are looking at or an element’s spec, and export the anatomy as a PNG sheet or as a Markdown file to paste into a pull request, a wiki or a ticket.
- Improved the side panels no longer carry a button to float or dock them: choose it once in User Settings → Appearance → Side panels. Their tabs now run the whole panel, and a component’s page keeps its right panel on the Docs tab too, so switching tabs moves nothing.
- Fixed a component set’s image on the Anatomy tab now shows its markers and measurements, as a single component’s always did, and an exported anatomy sheet keeps every image instead of leaving them blank. When a component needs a new sync from Figma to show them, a note under the image says so.
- Improved a component set’s page now shows the variant you picked on its own: comparing is optional. Compare, in the bar at the bottom, picks the variant to compare it with, and only then does the page mark A and B, list what changes, and offer Only what changes.
- New a component’s Docs tab now shows its documentation in the page, as a written page shows its own. It opens to read; admins and editors press Edit in the bar at the bottom to add blocks, save them together and finish with Done, which asks before losing unsaved changes. The same bar exports the documentation as Markdown, copies a link to it and, once the component has been synced, opens its version history. On this page, on the right, lists its Title blocks and scrolls to each one.
- Improved a written page now opens to read, with the same bar as a component’s Docs tab: Edit opens its title, summary, icon and blocks, and Move to folder and Delete page moved to the bar’s More. On this page, on the right, lists its Title blocks.
- Fixed opening a component’s Docs tab or a written page no longer goes back to a loading state after its content has appeared, which happened when Grails’ theme and your computer’s differed. While a page loads, the panel on the right shows its name and the bar waits until it can be used.
- Improved Docs pages scroll without a visible scrollbar, as the side panels already did: a component’s page, a page you wrote and the Overview.
- Fixed on a phone, tapping the search in the left panel no longer zooms the page: its text is 16px there now.
- Improved the side panels widen with the text size, and stay over the page’s head when it scrolls.
- Improved on a component’s Anatomy tab the image shows as soon as it downloads, before its markers, and a component set no longer downloads it twice.
- Improved on a component’s Anatomy tab the image arrives sooner: it downloads with the page instead of after the tab’s code.
- New a token collection and a style have a page of their own, with their documentation: open one from the left panel.
- Improved on a component’s Anatomy tab, a token opens in its panel when you click it, and one that is not synced with Grails says so.
- Improved a component’s Anatomy tab shows its preview sooner on a slow connection: it no longer downloads the documentation editor, which only the Docs tab uses. The Docs tab’s code comes in the background once the preview is on screen.
- Fixed on a component’s Anatomy tab, the Markdown export leaves out the elements you turned off, an element that is not drawn shows no position, and a padding whose sides differ shows each side’s value.
- Fixed exporting documentation as Markdown keeps a prop whose name has a pipe or a backtick in its row, and keeps text with an underscore or an asterisk inside its italics or bold.
- Fixed exporting documentation as Markdown writes what you typed exactly as you typed it: an asterisk, an underscore, a bracket or a tilde no longer turns into italics, a link or a strikethrough. Text and Table blocks keep their formatting.
- Fixed exporting a component’s anatomy as Markdown writes its names as they are in Figma: an asterisk or an underscore in a name no longer turns into italics, and a backtick no longer cuts a property’s name.
Figma Plugin
- Improved When the plugin is too old for the server, the screen now names BOTH versions: the one you are running and the one required. It also tells local builds to update their checkout and rebuild, instead of advising a reopen that reloads the same files.
- Improved The console now reports which plugin version is running and which server it talks to, as soon as the plugin opens, so it is visible even when something fails before any screen appears.
- Fixed Failures while caching scan results now say what went wrong instead of “undefined”, and the plugin no longer reports the cache as complete when none of it was written.
- New The Connect and Settings screens now show which plugin version is running. The “Update required” screen already named it; these two are where you look before any request has been made, so there is nothing for the server to echo back.
- New Each variable collection now brings its default mode to Grails. Changing the default mode, renaming a collection or renaming one of its modes in Figma now marks the collection as outdated, where before none of the three did. The first sync after updating shows every variable collection as outdated once; syncing them once brings them up to date, and nothing is lost or duplicated.
- Fixed The plugin no longer freezes on the first open after an update while it clears data older versions left behind. The cleanup now waits until the scan has finished and does a bounded amount of work each time.
- Improved a component now counts as changed when anything it shows changes — colors, sizes, spacing, typography, alignment — and when a token or style it uses changes value. After updating the plugin, every component re-syncs once.
- Improved the scan finds components much faster on large files (from over a minute to a few seconds on a 64-page file), and the progress bar names the page it is on.
- Fixed a component deleted in Figma no longer shows as “pending update” forever; it appears under Removed entities, where it can be reviewed.
- Improved Components are split into “Changed in design” and the ones “Affected by token changes” or “Affected by style changes”, each naming the token or style that affected it. Affected components still need a re-sync, so their specs and images stay current.
Overview
- Improved Your project’s sections now sit in the top bar, so each section’s content gets the full width of the screen. On narrow screens they fold into a single menu that shows where you are.
- Improved Text across Grails is smaller and quieter, and every screen now uses the same sizes for the same kind of text: page titles, section headings, body text, labels, tables and badges. More of your design system fits on screen at once.
- Fixed the team’s activity now names the page when someone creates or deletes a documentation page, instead of “Unknown”. On a phone each line reads as a sentence instead of breaking into narrow columns, and when the list cannot be loaded it says so and offers to try again, instead of reading as no activity or spinning forever.
Styles
- Improved On a phone, the list of style groups opens from a button at the foot of the screen and closes when you pick a group, so the styles get the whole width.
- Fixed on a phone, tapping the search no longer zooms the page: its text is 16px there now.
- Improved the list beside the page is now a side panel like Docs’: it floats over the edge of the page as a card or docks to its side, as chosen in User Settings → Appearance → Side panels, and it widens with the text size.
Team Settings
- Improved Team settings open from the team button in the top bar, which shows your team’s name and plan. To go to another team, use My Teams in the user menu.
- Improved the panel is now two clear steps: connect your token, then choose which Figma teams to subscribe to. Connections are saved, so they survive a reload. Paste a Figma team URL instead of hunting for its ID. Plans without webhook auto-sync now say so up front instead of failing when you flip the switch.
- Fixed your plugin token is shown again so you can copy it. It was there all along; the panel could not read it and said “No token generated”, which offered a Create Token button that rotated without asking — invalidating the token your plugin was already using. If the token ever cannot be read, the panel now says exactly that and refuses to rotate instead of offering the destructive path.
- New your team now sees a warning at 80% and 90% of its storage limit, instead of only finding out when an upload is rejected
- Fixed Revoking an invitation now tells you when it could not be revoked because it had already been accepted or revoked, instead of confirming a revocation that did not happen. Refresh the list to see the current invitations.
- Improved storage now shows Documents as its own segment, so you can see how much space uploaded files take. The Docs count reflects how many entities you have documented, and each segment shows the size in the right unit instead of rounding small files down to 0.0 MB.
Typography
- New Typography styles can now be documented. Hover a style in the list and a book icon opens its documentation; the same button sits at the top of the style’s own panel.
- Improved On a phone, the list of font styles opens from a button at the foot of the screen and closes when you pick one, so the styles get the whole width.
- Fixed on a phone, tapping the search no longer zooms the page: its text is 16px there now.
- Improved the list beside the page is now a side panel like Docs’: it floats over the edge of the page as a card or docks to its side, as chosen in User Settings → Appearance → Side panels, and it widens with the text size.
Personal Settings
- New choose whether side panels float over the page or dock to its side. Docs is the first section with them, and each panel also has its own button to switch
- Improved Side panels is now the one place to choose floating or docked: the panels no longer have a button of their own, and the choice always applies to both.
- New choose the text size, Small, Medium or Large. It changes the text across Grails and leaves the spacing as it is, and it applies to the browser you choose it in, like the theme.
Variables & Tokens
- Fixed Tokens that control the opacity of a colour can now be edited. Figma added that kind of token in September and Grails was refusing to save changes to it.
- New Colours that mix another colour with an opacity now show what they actually are: the opacity, and the colour underneath, with its chain. They used to appear as a block of raw text that looked broken.
- New Those colours can be seen but not edited, and a lock explains why: Figma does not let a plugin write them. Edit the colour in Figma and sync again. Every other colour keeps working exactly as before, including in the other modes of the same token.
- Fixed In the variables table, a colour with an opacity on top now shows its colour and the percentage, like Figma, instead of “[object Object]”. In its detail panel, the token the opacity comes from appears as its own step with the percentage it ends at.
- Improved The lock on those colours can be reached with the Tab key and is announced by screen readers, so the explanation no longer needs a mouse.
- New Tokens and whole collections can now be documented. Hover a token in the list, or a collection in the sidebar, and a book icon opens its documentation; the same button sits at the top of a token’s own panel. A collection is documented on its own, so “what this set of tokens is for” no longer has to be repeated on every token in it.
- New Tokens can now be exported as a standard DTCG file. Export in the toolbar opens a panel that prepares a zip with one file per collection and mode, plus a resolver that says how they combine. Before you download it, the panel lists anything the standard could not hold exactly — a token left out, a collection that produced no file, a unit that had to be guessed — so you know what you are handing over.
- New Variables marked hidden from publishing in Figma are left out of an export by default, because an export is what reaches the people who consume your design system. A switch in the panel includes them, for when the export is a backup or a migration; either way the panel says how many were affected.
- Improved On a phone, the list of collections opens from a button at the foot of the screen and closes when you pick a group, so the table gets the whole width.
- Fixed on a phone, tapping the search no longer zooms the page: its text is 16px there now.
- Improved the list beside the page is now a side panel like Docs’: it floats over the edge of the page as a card or docks to its side, as chosen in User Settings → Appearance → Side panels, and it widens with the text size.
Versions
- Fixed a style value that is not a complete token reference is no longer shown as a token chip that leads nowhere; it is displayed as the value it actually is
- New when a token or style a component uses changes value, the component gets its own “Inherited” version saying which token changed, from what to what, and in which mode
August 2026
Components
- Improved Schema Upgrade v0.28.0: Components now capture absolute positioning and logical offsets, dashed stroke patterns, image fills, border colour, layout sizing and per-instance overrides. Because none of this was ever extracted before, every component must be re-synced once from the Figma plugin; until then it is marked “Spec upgrade required”. Re-syncing records a “Spec Version Update” in version history — no diff and no version bump, because re-reading the same design under a newer schema is not a design change.
- Fixed Text Styles no longer lower your CHI score: text that uses a Figma Text Style was being counted as hardcoded by Token Adherence, because the applied style was flattened into raw font values before the score was calculated. Applying a Text Style is the correct way to type text in a design system, so it now counts as tokenized — the same as a bound variable. Expect Token Adherence, and therefore the CHI score, to rise for components that use Text Styles, once they are re-synced from the Figma plugin. Nothing about those components changed; what changed is that the score now measures them correctly.
Figma Plugin
- Fixed A sync that loses batches no longer reports success. The commit stays open and the Dashboard offers “Resume sync” until every declared entity has actually arrived.
- Fixed When a sync fails mid-way, the interrupted-sync banner now appears immediately instead of only after reopening the plugin.
- New Entities that could not sync because the plan limit was reached, or because they need a newer plugin build, are now reported separately from ones a retry can still deliver.
- New Each entity card on the Dashboard shows when that entity type has reached its plan quota, without blocking the rest of the plugin.
- Fixed “Re-sync now” on the update notice now actually re-imports the affected components. It previously reported success without changing anything, so the same notice reappeared every time.
- New The Variables card warns when variables changed in Figma and your plan cannot bring them in automatically, so a manual sync from the plugin is the only way.
- New If the plugin build is too old for the server, it now shows a dedicated screen asking you to reopen it, instead of failing mid-sync.
- Fixed Syncing a file for the first time no longer reports thousands of entities that “did not sync”. Individual variants were counted as things to sync, but variants are always synced as part of their set — so the target could never be reached and the sync stayed stuck as interrupted no matter how often it was retried.
- Fixed “Sync All” on the scan results screen now syncs standalone components too. It previously synced component sets only, so a design system built without variants synced nothing at all.
- New when your team edits token values or scopes in Grails, the dashboard now shows those queued changes and lets an admin or editor apply them to the open Figma file
- New a review screen lists every queued token change with its path, mode and before → after value, so nothing is applied blind; untick anything you do not want and it is discarded
- Improved token sync is paused for a file while changes from Grails are still waiting, so an incoming sync can no longer overwrite work that has not been applied yet
- New when your team reaches its plan limit for components, variables or styles, the notice now appears inside that entity’s own card, showing usage against the limit; every other alert keeps working, and syncing or un-syncing to free quota stays available
- Fixed The component list no longer offers individual variants as separately selectable entities. Every other screen already listed component sets and standalone components only; this one did not, so the selection count promised far more than a sync could deliver.
- New When Grails improves how it reads your components, the plugin now opens on a dedicated screen that tells you how many need re-syncing and syncs them in one action. Previously this sent you to the review screen, where the “Modified” and “New” filter tabs showed an empty list for exactly these components — because they are neither.
Team Settings
- New issue API keys so external tools, agents and CI can read your project
- New revoke a key at any time, and see when each one was last used
- New copy a ready-made MCP configuration for Claude, VS Code, Cursor, Gemini or ChatGPT
- New see each key’s rate limit, and whether it is enforced
Variables & Tokens
- New Admins and editors can now edit token values and scopes directly from Grails. Turn on “Enable Editing” to reveal a pencil on each value; changes are queued for Figma rather than applied straight away, and the whole team contributes to the same batch.
- New A “Review changes” panel lists every queued change with its author, the current value and the proposed one, and lets you remove any single change without discarding the rest.
- Improved Values that point at another token now always show the value they finally resolve to, even through several hops or across collections that use different mode names.
Versions
- Fixed a component re-extracted under a newer spec schema is no longer labelled “Modified” at a version identical to its previous one; it now reads “Spec Version Update”
- Improved opening a “Spec Version Update” now says the two versions were extracted under different spec schemas and are not comparable, instead of reporting the diff as missing
- Improved a component re-extracted under a newer spec schema now shows up as its own “Spec Version Update” entry, so two entries sharing a version number read as what they are instead of looking like a duplicate
July 2026
Components
- Fixed switching back to the default variant in the component drawer no longer loses the active prop context; thumbnails update correctly across all prop combinations.
- New Figma Asset Sync: Sincronización automática de componentes de Figma con opciones de exportación, permitiendo clasificarlos como assets y administrarlos de forma masiva por grupos.
- Fixed Components that appeared as outdated immediately after a fresh batch sync (due to missing metadata) are now correctly detected and re-synced automatically.
- New the components table shows a CHI health score per component and a “Published” column with its Figma library state, tracked separately from the Grails sync status.
- Improved the components list opens noticeably faster on large projects, and the “Modes” column was removed.
- Improved Token Adherence (TA) metric added; components not yet re-synced show a re-sync prompt instead of a blank panel
- New Figma Asset Sync: Implemented automatic propagation of component export settings (PNG, SVG, etc.) to the database
asset_propsand enabled default asset tagging (is_asset) when sync options are active in the plugin. - Improved Sync Pipeline Cleanup: Plugin PUSH is now the sole path for component spec versioning. REST is excluded from the component pipeline, eliminating incomplete specs and false-positive diffs from non-Enterprise Figma plans.
- New Storage Quota Gate: The plugin now informs users when a team has exhausted their storage quota. New components are skipped during sync when the team is over-quota, and a feedback message is shown after sync indicating which components could not be synced and why.
Figma Plugin
- Improved Component variants are no longer synced as separate entities; the plugin now syncs each component set as a single unit with all variants embedded.
- Improved Auto-mark assets: when enabled, components with Figma export settings are automatically classified as assets. Export settings are always synced for components that already have them, even if auto-mark is off.
- Fixed Components with no previous sync history are no longer incorrectly reported as synced when evaluated; they are now correctly queued for a full re-sync.
- Fixed “Changes detected” alert now only appears when previously-synced entities drifted (hash mismatch), not when there are never-synced entities pending their first sync
- Improved clicking “Review Changes” from the Dashboard pre-applies the Modified filter in Review & Sync, showing only drifted entities
- Improved plugin now runs a full DS scan automatically on every open, so the dashboard always shows live sync status without manual intervention
- Fixed adding a new variant (or a new variant property) to a component set now correctly triggers an “outdated” status on the next scan
- Improved dashboard footer simplified to a single “Update Sync Status” primary action that triggers the full scan
- Improved sync progress now shows two parallel bars: metadata sync (blue) and thumbnail uploads (amber) run simultaneously, so syncing completes faster
- Improved a “do not close” warning appears while thumbnails are still uploading in the background after the sync data is saved
- New storage quota widget in the dashboard footer shows current usage (MB/GB), a color-coded progress bar, and a warning message when the team has exhausted their storage allowance
- New components that need updating to the current Grails format now block the dashboard with a “Re-sync now” prompt that preselects exactly those entities
- Fixed the dashboard shows one alert at a time in a defined priority order, so an interrupted sync is never hidden behind a lower-priority notice
- Improved Selection bar is now always visible at the bottom of the screen, with the primary action button disabled by default when no items are selected.
- Improved Added “Select All” and “None” bulk actions next to the selection count. “Select All” targets only the visible items in the current active tab.
- Improved Selection counting is now filter-aware: switching tabs preserves the global selection but dynamically updates the counter and actions to target only the selected items visible in the active tab.
- Improved Items are grouped by path prefix (e.g. “Icons”, “Buttons”) with a collapsible header and group-level select/deselect checkbox.
- New Library Status filter: in files published as a Figma library, a “Library” control filters by whether each entity is published, changed since its last publish, or not published. It combines with the sync-status tabs instead of replacing them, and is hidden in files that were never published.
- Improved Entities deleted from Figma no longer live behind a “Removed” tab; they now appear as a persistent notice above the list so they cannot be missed.
- Fixed “Re-sync” and “Unsync” now appear for any fully-synced selection. They previously disappeared for components edited visually in Figma, even though the row still read “Synced”. Selecting a mix of states now offers a single “Sync Selected” action.
- Improved filter tabs are pre-applied when navigating from the Dashboard “Changes detected” alert, landing directly on Modified entities
- Fixed filter tabs now appear correctly even when all entities in the current seed are Modified (no Unsynced entities visible)
- Improved when entering from a specific selection (“Sync Selected”), the screen shows only the seeded items (checked by default) and hides the segment filter tabs.
- Improved commented out the WIP warning banner in the footer.
- Fixed resolved a race condition where reviewSyncSeed was cleared on mount, causing the selection list to reset and show all components.
- New Added ReviewUnsyncScreen to fix black-screen bug when clicking “Unsync” in the Components list
Variables & Tokens
- Fixed Variable alias relationships (e.g., Color → Color Primitives) are now correctly tracked after every sync; the full token dependency graph is always up to date.
Versions
- Fixed each entry in the design system changelog now shows one badge per area (Tokens, Typography, Styles) instead of sometimes repeating the same area twice, and the Styles count no longer includes typography styles
- Improved clicking a component marked “Modified” now opens the changes introduced by that specific sync, instead of the component’s current state
- Improved version details can now also be opened straight from a component marked “Modified” in the design system changelog, not just from the Version History timeline
June 2026
Components
- Improved Outdated component warnings in the drawer now clearly notify users of modifications in Figma without showing disabled review actions.
- New REST Sync Structural Parity: Implemented
normalizeRestNode()to align structural representation between REST sync and Plugin API syncs, achieving ~93% parity. - Fixed Token Bindings: Resolved token bindings for bifurcated properties (such as per-axis spacing/sizing) and per-corner cornerRadius values.
- New Component Depth & Build Order: Post-sync pipeline that pre-computes component_depth, children_count, and build_order from entity_edges after each DS commit, enabling O(1) reads by the API layer.
Figma Plugin
- Improved The Modified filter on the Review screen now displays strictly those entities that are already synced to Grails but have a hash mismatch (modified in Figma).
- Improved Split combined styles state into visualStyles and textStyles to allow independent filters, and optimized payload serializations.
- Improved Components now show their current version number (e.g. v3) as a badge in the entity list and review screens.
- New connect to Grails, scan any Figma file, and sync components, variables, and styles to the Vault
- New Dashboard shows per-entity-type sync status cards with Modified and Removed badge counts
- New first-time users land directly on Review & Sync after scanning (no intermediate Scan Results screen)
- Improved Dashboard card counts show synced entities and a “of N total” sub-label
- New staging area with collapsible entity groups, search, and bulk selection before sync
- Improved filter tabs (All / Modified / Unsynced) to focus the staging list
Overview
- Improved complete Design System Dashboard with stats cards, alerts, cadence chart, and audit score.
- Improved Dashboard out-of-sync alert now displays count of outdated token collections and links directly to the tokens page.
- Improved migrated design system composition and dependencies to the new unified entity relationship graph
- Fixed resolved relative timestamp hydration mismatch errors in the recent activity feed
- Improved each entity type (Components, Tokens, Styles, Typography) now has a distinct canonical color across all dashboard cards and charts, making it easier to identify what you’re looking at at a glance
Styles
- Improved Styles now display a sync status badge next to their names, and the status filter dropdown synchronizes correctly with the URL parameters.
Team Settings
- Improved Figma PAT Resolution: Fixed PAT resolution during webhook pulls by pulling team-level Figma Personal Access Tokens correctly, supporting database-level decryption.
- Fixed Team Settings drawer now closes correctly after deleting or leaving a team, and the user is redirected to the teams list
Typography
- Improved Typography styles now display a sync status badge next to their names, and the status filter dropdown synchronizes correctly with the URL parameters.
Variables & Tokens
- Improved Token collection sidebar filter now filters collection items directly, and status badges represent collection-level synchronicity.
April 2026
Components
- New component health scores appear on the Audit (CHI) tab with four metrics and actionable suggestions
- New Component Specifications (SPECs): We implemented a platform-agnostic layer to store component architecture and properties semantically, replacing raw Figma metadata. This includes deep serialization of styles, layout, and effects, with full support for differentiating between Slots (content placeholders) and Instance Swaps. This architecture is inspired by and contains attribution to the work of Nathan Curtis / Directed Edges (@directededges/specs-schema) and the Design Tokens Community Group (DTCG).
- Improved Version History (CHI): New graphical interface (Component Historical Diff Drawer) to compare component versions. We eliminated technical JSON views and now structural, prop, and variant changes—including specific Slot style overrides—are presented clearly and visually.
- New Schema Upgrade Status: Introduced a new ‘schema_upgrade_required’ status for components. This handles the transition between different spec versions (e.g., from v0.17 to v0.18), ensuring all data remains consistent with the latest engine.
- Improved Schema Upgrade v0.18.0: Transitioned component spec properties and anatomy nodes to Dictionary (Record) structures, enabling high-performance property lookups and more precise structural diffs.
- Improved Specs Engine v0.18.0 & DTCG Compliance: Upgraded the core parser to the latest spec architecture. This introduces support for Design Tokens Community Group (DTCG) compliant token references ($token/$type), advanced layout bifurcations (per-axis spacing/sizing), and improved Figma variable resolution.
Team Settings
- Improved Team Storage: Unified calculation and detailed breakdown of the storage used by each team, allowing better visibility into plan limits.
Versions
- New view the full structural diff of any past version directly from the Version History timeline
March 2026
Components
- New browse all synced components with table and grid views
Team Settings
- New configure your Figma Personal Access Token for advanced sync features
- New manage team members, settings, and Figma integrations
Personal Settings
- New manage your profile information and theme preferences
Versions
- New track component version history, view past snapshots, and resolve sync conflicts