Package selection guidance compiled from public package information, community data, and project usage.
The figma package is a Dart library that provides a clean, pure-Dart interface to the Figma API, enabling developers to programmatically interact with Figma documents. It supports fetching design files, retrieving assets, and managing components across multiple platforms. Ideal for integrating Figma data into Flutter apps or tools, it simplifies authentication and request handling. The library is actively maintained and compatible with Android, iOS, Web, macOS, Windows, and Linux.
Use cases
Fetching design files from Figma
Syncing design tokens in apps
Automating asset extraction
Integrating Figma data into CI/CD pipelines
Building design collaboration tools
Key features
Pure Dart implementation
Cross-platform support
Authentication handling
Type-safe API responses
Easy integration with Flutter
Suitable for
Flutter developers working with Figma
Design system tooling
CI/CD workflows involving design assets
Teams automating design-to-code processes
Considerations
Requires Figma API personal access token
Rate limits apply on Figma API
Limited to public or shared Figma files unless properly authorized
Not a full Figma client, only API interaction
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
figma
A library for interacting with Figma APIs with typed responses and data structures for working with Figma programatically.
Features
🚀 Full Figma API coverage with typed responses
🔒 Support for both API token and OAuth authentication
🔄 Support for variables (both local and published)
🛠️ Comprehensive component and style handling
📱 Export capabilities including PDF format
🧩 Support for component sets and variants
Installation
Add the package to your pubspec.yaml:
dependencies:figma:^7.3.4
Or install it using the Dart package manager:
dart pub add figma
Getting Started
Authentication
To use the Figma API, you'll need an access token. You can obtain one in two ways:
Personal Access Token: Generate from your Figma account settings
OAuth Token: Implement OAuth flow in your application
Basic Usage
import'package:figma/figma.dart';
voidmain() async {
// Initialize the client with your access tokenfinal figma = FigmaClient('your_access_token');
// Get a Figma filefinal file = await figma.getFile('file_key');
// Access file dataprint(file.name);
print(file.lastModified);
}
Working with Files
Retrieving File Information
// Get file with componentsfinal fileWithComponents = await figma.getFileWithNodes(
'file_key',
['node_id_1', 'node_id_2']
);
// Get file stylesfinal styles = await figma.getFileStyles('file_key');
// Get component setsfinal components = await figma.getFileComponentSets('file_key');
// Get local variablesfinal localVars = await figma.getLocalVariables('file_key');
// Get published variablesfinal publishedVars = await figma.getPublishedVariables('file_key');
Component Management
// Get team componentsfinal teamComponents = await figma.getTeamComponents('team_id');
// Get component infofinal componentInfo = await figma.getComponent('component_id');
Comments and Collaboration
// Post a commentawait figma.postComment(
'file_key',
'This is a comment',
clientMetadata: {'key': 'value'}
);
// Get file commentsfinal comments = await figma.getComments('file_key');
Best Practices
Error Handling: The library throws FigmaException for API errors. Always implement proper error handling:
try {
final file = await figma.getFile('file_key');
} onFigmaExceptioncatch (e) {
print('Figma API error: ${e.message}');
}
Resource Management: When working with large files, request only the nodes you need:
// Instead of getting the entire filefinal specificNodes = await figma.getFileNodes(
'file_key',
['specific_node_id']
);
Rate Limiting: Implement appropriate rate limiting in your application to avoid hitting Figma's API limits.
Automation Examples
Export All Frame Images
Future<void> exportAllFrames(String fileKey) async {
final figma = FigmaClient('your_token');
final file = await figma.getFile(fileKey);
final frameIds = file.document.children
.whereType<Frame>()
.map((frame) => frame.id)
.toList();
final images = await figma.getImage(
fileKey,
frameIds,
format: 'png'
);
}
TypeScript/JavaScript Integration
When using this library in Flutter web projects that interact with JavaScript/TypeScript codebases:
// Dartfinal jsonData = await figma.getFile('file_key');
// Convert to JSON string for JS interopfinal jsonString = jsonEncode(jsonData);
// TypeScriptinterfaceFigmaFile {
// Your TypeScript type definitions
}
constfigmaData: FigmaFile = JSON.parse(jsonString);