Skip to content

Add Figma plugin v1.1.0 for monitoring teams, projects, components and styles#89

Open
conor-richey wants to merge 1 commit into
squaredup:mainfrom
conor-richey:add-figma-plugin
Open

Add Figma plugin v1.1.0 for monitoring teams, projects, components and styles#89
conor-richey wants to merge 1 commit into
squaredup:mainfrom
conor-richey:add-figma-plugin

Conversation

@conor-richey

@conor-richey conor-richey commented Jul 10, 2026

Copy link
Copy Markdown

What does this do?

Adds a new SquaredUp plugin for Figma. It indexes Figma Projects, Components, and Styles from a configured team via Figma's REST API, and ships dashboards for an account-wide overview, per-project file browsing, and per-object (Project/Component/Style) perspectives.

Why is it useful?

Lets teams monitor their Figma workspace alongside other tools in SquaredUp — see project/file activity, track published design-system components and styles, and drill into file version history and comments without leaving SquaredUp.

Known limitations

  • Figma's REST API has no endpoint to list a user's teams, so the Team ID must be entered manually (documented in the plugin README).
  • Figma also has no team-wide "list all files" endpoint (only per-project), which is incompatible with SquaredUp's import architecture — so Files are not an indexed object type. File-level data (summary, thumbnail, last edited, version history, comments) is still available via a manual project → file picker on dedicated data streams and a "File Explorer" dashboard, and via a per-project Files table on the Project perspective.
  • Activity Logs and Variables APIs are Enterprise-only / require org-admin OAuth scopes not available to a personal access token, so they're not implemented.

Testing performed

  • squaredup validate passes.
  • Deployed to a live dev tenant and authenticated with a real Figma personal access token.
  • All 9 data streams tested against the live API (squaredup test), including pagination (up to 729 rows / 25 pages on fileVersions) and the two-object scoping check on object-scoped streams.
  • Ran a full import against a real team (13 projects, 823 components, 95 styles indexed successfully).
  • Verified dashboards render correctly against real data.

Summary by CodeRabbit

  • New Features
    • Added a Figma integration for indexing projects, components, styles, files, versions, and comments.
    • Added dashboards for overview, projects, files, components, and styles.
    • Added selectable scopes for Figma projects, components, and styles.
    • Added configuration fields for Personal Access Token and Team ID, including validation.
  • Documentation
    • Added setup instructions, configuration guidance, and known limitations for the Figma integration.

…d styles

Indexes Figma Projects, Components, and Styles via the REST API, with
dashboards for an account-wide overview, per-project file browsing, and
a manual project/file picker for version history and comments (Figma has
no team-wide file-list endpoint, so files can't be indexed as objects).
@conor-richey conor-richey requested a review from a team July 10, 2026 13:21
@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Changes

Figma integration

Layer / File(s) Summary
Integration contract and setup
plugins/Figma/v1/metadata.json, plugins/Figma/v1/ui.json, plugins/Figma/v1/configValidation.json, plugins/Figma/v1/custom_types.json, plugins/Figma/v1/docs/README.md
Defines Figma metadata, token and Team ID inputs, authentication validation, custom object types, and setup documentation.
Team indexing
plugins/Figma/v1/dataStreams/teamProjects.json, plugins/Figma/v1/dataStreams/teamComponents.json, plugins/Figma/v1/dataStreams/teamStyles.json, plugins/Figma/v1/indexDefinitions/default.json
Fetches team projects, components, and styles with pagination and maps them to indexed Figma object types.
Project and file data streams
plugins/Figma/v1/dataStreams/projectsPicker.json, plugins/Figma/v1/dataStreams/filesInProject.json, plugins/Figma/v1/dataStreams/projectFiles.json, plugins/Figma/v1/dataStreams/fileSummary.json, plugins/Figma/v1/dataStreams/fileVersions.json, plugins/Figma/v1/dataStreams/fileComments.json
Adds project and file selection streams and retrieves file metadata, versions, and comments.
Scopes and dashboards
plugins/Figma/v1/defaultContent/scopes.json, plugins/Figma/v1/defaultContent/*.dash.json, plugins/Figma/v1/defaultContent/manifest.json
Adds Figma entity scopes and default dashboards for overview, projects, components, styles, and file exploration.

Sequence Diagram(s)

sequenceDiagram
  participant FigmaAPI
  participant DataStreams
  participant IndexDefinitions
  participant Dashboards
  FigmaAPI->>DataStreams: Return team and file data
  DataStreams->>IndexDefinitions: Map team records to Figma object types
  DataStreams->>Dashboards: Supply projects, files, versions, and comments
  Dashboards->>Dashboards: Render configured tables, counts, charts, and properties
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding a new Figma plugin version for teams, projects, components, and styles.
Description check ✅ Passed The description covers what changed, why it is useful, known limitations, and testing performed, matching the repository’s expected detail level.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/Figma/v1/docs/README.md`:
- Around line 3-13: Update the “What gets indexed” table in the Figma README to
remove the Figma File row, or explicitly clarify that files are surfaced through
data streams rather than indexed as an object type; retain the entries for Figma
Project, Figma Component, and Figma Style.
- Around line 33-37: Add the `text` language identifier to the fenced code block
containing the Figma Team URL and explanatory marker in the documentation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: d1a510e8-7f63-4e83-868d-7667035b42c3

📥 Commits

Reviewing files that changed from the base of the PR and between 18219a1 and 7d3fee6.

⛔ Files ignored due to path filters (1)
  • plugins/Figma/v1/icon.svg is excluded by !**/*.svg
📒 Files selected for processing (22)
  • plugins/Figma/v1/configValidation.json
  • plugins/Figma/v1/custom_types.json
  • plugins/Figma/v1/dataStreams/fileComments.json
  • plugins/Figma/v1/dataStreams/fileSummary.json
  • plugins/Figma/v1/dataStreams/fileVersions.json
  • plugins/Figma/v1/dataStreams/filesInProject.json
  • plugins/Figma/v1/dataStreams/projectFiles.json
  • plugins/Figma/v1/dataStreams/projectsPicker.json
  • plugins/Figma/v1/dataStreams/teamComponents.json
  • plugins/Figma/v1/dataStreams/teamProjects.json
  • plugins/Figma/v1/dataStreams/teamStyles.json
  • plugins/Figma/v1/defaultContent/componentDashboard.dash.json
  • plugins/Figma/v1/defaultContent/fileExplorer.dash.json
  • plugins/Figma/v1/defaultContent/manifest.json
  • plugins/Figma/v1/defaultContent/overview.dash.json
  • plugins/Figma/v1/defaultContent/projectDashboard.dash.json
  • plugins/Figma/v1/defaultContent/scopes.json
  • plugins/Figma/v1/defaultContent/styleDashboard.dash.json
  • plugins/Figma/v1/docs/README.md
  • plugins/Figma/v1/indexDefinitions/default.json
  • plugins/Figma/v1/metadata.json
  • plugins/Figma/v1/ui.json

Comment on lines +3 to +13
Bring your Figma team into SquaredUp. This plugin indexes the projects, files, components and styles in a Figma team, and lets you dashboard file summaries, version history and comments.

## What gets indexed

| Object type | Represents |
| --- | --- |
| `Figma Project` | A project within the configured Figma team |
| `Figma File` | A design file within a project |
| `Figma Component` | A published component in the team's library |
| `Figma Style` | A published style (fill, text, effect or grid) in the team's library |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check if "Figma File" is defined as an indexed type in indexDefinitions.
rg -n "Figma File" plugins/Figma/v1/indexDefinitions/default.json

Repository: squaredup/plugins

Length of output: 155


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== files ==\n'
git ls-files plugins/Figma/v1 | sed -n '1,200p'

printf '\n== indexDefinitions/default.json mentions ==\n'
rg -n '"Figma File"|Figma File|Figma Project|Figma Component|Figma Style' \
  plugins/Figma/v1/indexDefinitions/default.json plugins/Figma/v1/custom_types.json plugins/Figma/v1/docs/README.md || true

printf '\n== README excerpt ==\n'
sed -n '1,30p' plugins/Figma/v1/docs/README.md

printf '\n== custom_types.json excerpt ==\n'
if [ -f plugins/Figma/v1/custom_types.json ]; then
  sed -n '1,220p' plugins/Figma/v1/custom_types.json
fi

printf '\n== indexDefinitions/default.json excerpt ==\n'
if [ -f plugins/Figma/v1/indexDefinitions/default.json ]; then
  sed -n '1,260p' plugins/Figma/v1/indexDefinitions/default.json
fi

Repository: squaredup/plugins

Length of output: 5506


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== tree near Figma plugin ==\n'
find plugins/Figma/v1 -maxdepth 3 -type f | sort

printf '\n== version metadata ==\n'
if [ -f plugins/Figma/v1/metadata.json ]; then
  cat plugins/Figma/v1/metadata.json
fi

printf '\n== search for file indexing terms ==\n'
rg -n '"file(s)?"|files are not indexed|team-wide file-list|Figma File|project-scoped' plugins/Figma/v1 -g '!**/node_modules/**' || true

Repository: squaredup/plugins

Length of output: 3089


Clarify the Figma indexed objects list
Figma File isn’t an indexed object here; only Figma Project, Figma Component, and Figma Style are defined. Remove it from the table or clarify that files are surfaced via data streams, not indexed as a type.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/Figma/v1/docs/README.md` around lines 3 - 13, Update the “What gets
indexed” table in the Figma README to remove the Figma File row, or explicitly
clarify that files are surfaced through data streams rather than indexed as an
object type; retain the entries for Figma Project, Figma Component, and Figma
Style.

Comment on lines +33 to +37
```
https://www.figma.com/files/team/1234567890123456789/My-Team
^^^^^^^^^^^^^^^^^^^
This is your Team ID
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Specify a language for the fenced code block.

The fenced code block at line 33 has no language specified, which triggers markdownlint MD040. Add text as the language identifier.

📝 Proposed fix
-```
+```text
 https://www.figma.com/files/team/1234567890123456789/My-Team
                                   ^^^^^^^^^^^^^^^^^^^
                                   This is your Team ID
</details>

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.22.1)</summary>

[warning] 33-33: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

</details>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @plugins/Figma/v1/docs/README.md around lines 33 - 37, Add the text
language identifier to the fenced code block containing the Figma Team URL and
explanatory marker in the documentation.


</details>

<!-- cr-indicator-types:potential_issue -->

<!-- cr-comment:v1:babc4cfd60dfc84c4641582c -->

_Source: Linters/SAST tools_

<!-- This is an auto-generated comment by CodeRabbit -->

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant