<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Louis Chenais</title>
    <description>The latest articles on DEV Community by Louis Chenais (@chuckn0risk).</description>
    <link>https://dev.to/chuckn0risk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F567737%2F3b042c78-dd5e-42a1-b5b9-785d1dd600fe.jpeg</url>
      <title>DEV Community: Louis Chenais</title>
      <link>https://dev.to/chuckn0risk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chuckn0risk"/>
    <language>en</language>
    <item>
      <title>Specify VS Style Dictionary</title>
      <dc:creator>Louis Chenais</dc:creator>
      <pubDate>Tue, 25 Oct 2022 09:57:15 +0000</pubDate>
      <link>https://dev.to/specifyapp/specify-vs-style-dictionary-3f7e</link>
      <guid>https://dev.to/specifyapp/specify-vs-style-dictionary-3f7e</guid>
      <description>&lt;p&gt;I'm often asked: "What's the difference between Specify and Style Dictionary?". My answer is always the same: "Yes, they look alike, and Specify is not meant to replace Style Dictionary: it actually enhances it.".&lt;/p&gt;

&lt;p&gt;Let's see why together.&lt;/p&gt;

&lt;p&gt;This article helps you understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;differences between Specify and Style Dictionary&lt;/li&gt;
&lt;li&gt;how to couple them to generate design tokens and assets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Style Dictionary and Specify are both design tokens generators, and you can use them to generate design tokens and assets respecting your company standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Style Dictionary?
&lt;/h2&gt;

&lt;p&gt;Created by Danny Banks in 2017, Style Dictionary is a build system that allows you to generate styles for any platform from static design tokens in an agnostic format (e.g., JSON).&lt;/p&gt;

&lt;p&gt;For instance, you can feed Style Dictionary with raw colors in JSON and configure it to generate colors in specific formats for different platforms like Android (e.g., Kotlin), iOS (e.g., Swift), or Web (e.g., Sass).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjg4tb348ov2yitevhdzb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjg4tb348ov2yitevhdzb.jpg" alt="How Style Dictionary generates design tokens"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Style Dictionary is open source and available through a CLI or a node module.&lt;/p&gt;

&lt;h3&gt;
  
  
  Style Dictionary generates design data
&lt;/h3&gt;

&lt;p&gt;Style Dictionary provides out-of-the-box &lt;a href="https://amzn.github.io/style-dictionary/#/transforms" rel="noopener noreferrer"&gt;transforms functions&lt;/a&gt; to help you create and transform design tokens. Transforms are functions that range from converting colors to &lt;code&gt;HSL&lt;/code&gt;, converting dimension design tokens from &lt;code&gt;rem&lt;/code&gt; to &lt;code&gt;dp&lt;/code&gt;, or even converting an image in &lt;code&gt;base64&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In short, Style Dictionary helps you transform your design tokens to make them compatible with your company standards.&lt;/p&gt;

&lt;h3&gt;
  
  
  But Style Dictionary doesn't sync your design data
&lt;/h3&gt;

&lt;p&gt;Keeping design data up-to-date at scale means transforming your design tokens for target platforms &lt;strong&gt;every time a design token is updated&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68ulw37yigqkc2rjjlx5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68ulw37yigqkc2rjjlx5.jpg" alt="Design tokens used by Style Dictionary need to be updated"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Style Dictionary helps with the transformation part, but you still need to run it every time your design tokens get updated.&lt;/p&gt;

&lt;h3&gt;
  
  
  See for yourself
&lt;/h3&gt;

&lt;p&gt;First of all, let's install Style Dictionary in our directory: &lt;code&gt;yarn add style-dictionary&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, let's generate our design tokens, shall we!&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/3f3e5f4855bd4557bca0a970c5c7b186"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn run style-dictionary init basic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This command generates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A &lt;code&gt;tokens&lt;/code&gt; folder containing agnostic colors and sizes&lt;/li&gt;
&lt;li&gt;A Style Dictionary configuration file: &lt;code&gt;config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Our design tokens in Swift, Objective C, XML, Kotlin and SCSS in a &lt;code&gt;build&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;README.md&lt;/code&gt; file describing us what this configuration is doing&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Want to know more about this command?
&lt;/h4&gt;

&lt;p&gt;Check out &lt;a href="https://github.com/amzn/style-dictionary/tree/442a5eccf5eb18edae7877ff96712d189316a6dd/examples" rel="noopener noreferrer"&gt;the official examples projects&lt;/a&gt; provided by Style Dictionary. In our case, we just used the &lt;code&gt;basic&lt;/code&gt; example 👍&lt;/p&gt;

&lt;p&gt;Style Dictionary helps you generate and transform your design tokens. But &lt;strong&gt;you still need to run Style Dictionary every time they get updated&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Specify and Style Dictionary make the perfect match
&lt;/h2&gt;

&lt;p&gt;Specify is a Design API that helps you collect design data from Figma and distribute it in the right format, in the right project, at the right time, and to top it all: automatically.&lt;/p&gt;

&lt;p&gt;Let's focus on the "distribution" part. Like Style Dictionary, Specify helps you generate design data for any target platforms.&lt;/p&gt;

&lt;p&gt;By default Specify returns design data in JSON but thanks its &lt;a href="https://github.com/Specifyapp/parsers/" rel="noopener noreferrer"&gt;open source parsers&lt;/a&gt; you can transform your design data in any formats. I repeat, in &lt;strong&gt;any formats&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Are you starting to see where I'm going here?&lt;/p&gt;

&lt;p&gt;Specify can generate design tokens compatible with Style Dictionary. The same ones you feed Style Dictionary with. And as good things come in pairs, Specify automatically detects updates coming Figma and updates agnostic design tokens consumed by Style Dictionary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3x0x4jn78rzuvm6t3h7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3x0x4jn78rzuvm6t3h7.jpg" alt="Specify syncs your design tokens so Style Dictionary can transform them afterwards"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Working example
&lt;/h2&gt;

&lt;p&gt;This example project will help you understand how to use Specify and Style Dictionary together.&lt;/p&gt;

&lt;p&gt;Please make sure you already have synchronized design tokens in a Specify repository. Want to learn more about this? &lt;a href="https://www.youtube.com/watch?v=ylKuC8uJdRk" rel="noopener noreferrer"&gt;Watch this 3min tutorial&lt;/a&gt; 🎬&lt;/p&gt;

&lt;p&gt;From there, we will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pull design data from Specify and generate agnostic design tokens compatible with Style Dictionary&lt;/li&gt;
&lt;li&gt;Run Style Dictionary and generate design tokens for iOS, Android, and Web&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Specify and Style Dictionary are both flexible and powerful generators. However, we must configure them so they understand what to generate for us.&lt;/p&gt;
&lt;h3&gt;
  
  
  From Specify to Style Dictionary
&lt;/h3&gt;

&lt;p&gt;Let's start by pulling our design data from Specify in our project. The "project" I'm referring to is a directory called &lt;code&gt;your-project&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We will use the Specify CLI to pull design data programmatically from a local directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6lppstlfre9dmd8vtlp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6lppstlfre9dmd8vtlp.jpg" alt="Specify generates design tokens for Style Dictionary from your Specify repositories"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's install it by running in the terminal: &lt;code&gt;yarn add @specify/cli&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If things went well you should have the following help menu displayed after running the following command: &lt;code&gt;specify&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnv6alk7ne74fp30hnpd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnv6alk7ne74fp30hnpd.jpg" alt="Specify CLI main commands"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of manually configuring Specify, we will ask Specify to generate a working &lt;a href="https://specifyapp.com/templates/style-dictionary-for-android" rel="noopener noreferrer"&gt;configuration designed for Style Dictionary&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Under the hood, this configuration is mostly using the &lt;a href="https://github.com/Specifyapp/parsers/tree/master/parsers/to-style-dictionary" rel="noopener noreferrer"&gt;to-style-dictionary&lt;/a&gt; parser.&lt;/p&gt;

&lt;p&gt;Here's a short video showing how Specify can generate design tokens compatible with Style Dictionary:&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/42354190c3b247d8b600bf98df3a5d28"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;



&lt;p&gt;Let's break down what we just did here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We created a Specify configuration file tailored for Style Dictionary with the command &lt;code&gt;specify init&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;We finalized the configuration by updating the Specify repository and our &lt;code&gt;personalAccessToken&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;We pulled our design tokens and assets with the command &lt;code&gt;specify pull&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Which generated the following files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;🗂 output
├── 🗂 tokens
|   ├── 🗂 color
|   |   └── base.json
|   └── 🗂 asset
|       └── font.json
|       └── icon.json
└── 🗂 assets
    ├── 🗂 fonts
    └── 🗂 vectors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;What now? Now we've generated agnostic colors, icons and font files, it's time to transform them with Style Dictionary.&lt;/p&gt;
&lt;h3&gt;
  
  
  From Style Dictionary to target platforms
&lt;/h3&gt;

&lt;p&gt;Here's the following workflow we want to setup:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83wuq037kmqgqjc1s7jx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83wuq037kmqgqjc1s7jx.jpg" alt="Style Dictionary generates design tokens to target platforms from agnostic design tokens"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have agnostic design tokens at hand let's configure Style Dictionary to transform them.&lt;/p&gt;
&lt;h4&gt;
  
  
  Remove example tokens and use the ones coming from Specify
&lt;/h4&gt;

&lt;p&gt;Instead of writing our configuration from scratch we'll update the one Style Dictionary generated for us with the &lt;code&gt;init&lt;/code&gt; command. We want Style Dictionary to run our config against tokens located in the &lt;code&gt;output/&lt;/code&gt; folder Specify generated.&lt;/p&gt;
&lt;h4&gt;
  
  
  Update the Style Dictionary config file
&lt;/h4&gt;

&lt;p&gt;Our &lt;code&gt;config.json&lt;/code&gt; file becomes:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"output/**/*.json"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"platforms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"scss"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformGroup"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"scss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"buildPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build/scss/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"_variables.scss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"scss/variables"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"android"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformGroup"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"android"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"buildPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build/android/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"font_dimens.xml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"android/fontDimens"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"colors.xml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"android/colors"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"compose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformGroup"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"compose"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"buildPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build/compose/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor.kt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"compose/object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"packageName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize.kt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"compose/object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"packageName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"float"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"size"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ios"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformGroup"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"buildPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build/ios/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor.h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios/colors.h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColorName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor.m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios/colors.m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColorName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize.h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios/static.h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"float"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"size"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize.m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios/static.m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"float"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"size"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ios-swift"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformGroup"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios-swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"buildPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build/ios-swift/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionary+Class.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios-swift/class.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryClass"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionary+Enum.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios-swift/enum.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryEnum"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionary+Struct.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios-swift/any.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryStruct"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"imports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SwiftUI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"objectType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"struct"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"accessControl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"internal"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ios-swift-separate-enums"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformGroup"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios-swift-separate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"buildPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"build/ios-swift/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios-swift/enum.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionaryColor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ios-swift/enum.swift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"className"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"StyleDictionarySize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"size"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Generate tokens for target platforms-
&lt;/h4&gt;

&lt;p&gt;Now if we run &lt;code&gt;yarn run style-dictionary build&lt;/code&gt; we see our colors, vectors and font files transformed for our target platforms.&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/9027f543c19f40c6b5aee2e8c698efd7"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;



&lt;p&gt;Did you see the magic happen here?&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;config.json&lt;/code&gt; is composed of two main properties:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;source&lt;/code&gt; property tells Style Dictionary where to look for design tokens (in our case the &lt;code&gt;output&lt;/code&gt; folder)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;platforms&lt;/code&gt; property tells Style Dictionary how to transform our design tokens&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Let's sum things up
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqps2bcpf7mbtfjlvz77d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqps2bcpf7mbtfjlvz77d.jpg" alt="How Specify and Style Dictionary work with each other"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We just saw how Specify generates design tokens for Style Dictionary while keeping them up-to-date.&lt;/p&gt;

&lt;p&gt;Specify helps you generate design tokens that are always updated so you can transform them with Style Dictionary. Specify doesn't replace Style Dictionary. It enhances it.&lt;/p&gt;

&lt;p&gt;In our working example we used the Specify CLI and executed Style Dictionary in a local directory. However, you could totally set this workflow in a GitHub repository thanks to a GitHub Action. But this is for another blog post.&lt;/p&gt;

&lt;p&gt;Cheers ✌️&lt;/p&gt;

</description>
      <category>designtokens</category>
      <category>devops</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introduction to DesignOps</title>
      <dc:creator>Louis Chenais</dc:creator>
      <pubDate>Tue, 27 Sep 2022 12:59:31 +0000</pubDate>
      <link>https://dev.to/specifyapp/introduction-to-designops-5od</link>
      <guid>https://dev.to/specifyapp/introduction-to-designops-5od</guid>
      <description>&lt;p&gt;After reading this post, you'll have a clear idea of what DesignOps is and how it can help your team deliver design improvements in the hands of your users as quickly and with as little friction as possible.&lt;/p&gt;

&lt;p&gt;Here's what's on our plate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Origins of DesignOps&lt;/li&gt;
&lt;li&gt;What is DesignOps?&lt;/li&gt;
&lt;li&gt;DesignOps in practice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ready? Let's dive in 🤿&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ℹ️ In this post, we use the terms "design" and "designer." However, DesignOps embraces anyone using user-centered and design-thinking processes to solve problems.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Origins of DesignOps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  In the beginning, there was DevOps…
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://a16z.com/2011/08/20/why-software-is-eating-the-world/"&gt;Software is eating the world&lt;/a&gt;. Engineering teams were divided into two types of developers: the ones writing code and the ones maintaining the infrastructure. This gap between them slowly narrowed, as "agile" emerged and continuous deployment became the norm. Multi-disciplined individuals, able to deploy code faster and more efficiently, eventually appeared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In other words, DevOps was born.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  …and then DesignOps
&lt;/h3&gt;

&lt;p&gt;Historically, developers were always more involved in strategic decisions than designers. Luckily, this started to change once organizations took design more seriously, doubling the average number of designers in their teams &lt;a href="https://techcrunch.com/2017/05/31/here-are-some-reasons-behind-techs-design-shortage/"&gt;over the past decade&lt;/a&gt;. Designers eventually won the fight to be "at the table" and became part of strategic decisions. Agile made organizations close the gap between design and engineering teams.&lt;/p&gt;

&lt;p&gt;This recognition had its drawbacks, though. Designers had an additional workload alongside their "day jobs" of researching and designing. To top it all, decision-making was even more challenging as designers were usually spread across different teams and products. In short, designers stopped working on their own and faced the same set of pressures developers faced years ago. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DesignOps was born.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DesignOps and DevOps have something in common: "Ops," which means "Operations". Behind this term lies all the processes, methods, and tools that help teams work better together.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is DesignOps?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"What we've learned over time is that when our [designers] are spending more than 50% of their time doing operational work, that's a problem."&lt;br&gt;
— &lt;a href="https://www.linkedin.com/in/adriennekallnutt/"&gt;Adrienne Allnutt&lt;/a&gt;, Design Operations Leader, LinkedIn&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DesignOps is a mentality that helps you innovate how you build your products. To quote Alex Schleifer, former VP of Design at Airbnb: "you can't innovate on products without first innovating the way you build them." — &lt;a href="https://airbnb.design/the-way-we-build/"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Where is DesignOps?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/andybudd"&gt;Andy Budd&lt;/a&gt;, co-founder of Clearleft, states that "DesignOps is the practice of reducing operational inefficiencies in the design workflow." — &lt;a href="https://clearleft.com/posts/design-ops-a-new-discipline"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And what is the design workflow? Glad you asked. The design workflow is what happens between the time you make the decision to design something and the time it's available for your users.&lt;/p&gt;

&lt;p&gt;DesignOps is all about the interface between designers, developers, and product owners to design and deliver a great user experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n00GHKw9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9wzqq3bur6qwljujt69o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n00GHKw9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9wzqq3bur6qwljujt69o.png" alt="DesignOps is all about the interface between designers, developers, and product owners to design and deliver a great user experience." width="880" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, DesignOps isn't just for designers. DesignOps aims to optimize the execution of projects as a whole, with the least possible friction at each stage.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Design Operations focuses on the how so that design can focus on the what. It's the design discipline that owns the intentional operationalizing, optimizing and scaling of design."&lt;br&gt;
— &lt;a href="https://www.linkedin.com/in/rachelposman/"&gt;Rachel Posman&lt;/a&gt;, Senior Director of Design Operations, Salesforce&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Who does DesignOps?
&lt;/h3&gt;

&lt;p&gt;DesignOps is both a role and a practice. DesignOps as a role may be a single person or an entire team. DesignOps as a practice can and should be embraced by everyone on the team.&lt;/p&gt;

&lt;p&gt;There's a good chance you've already set DesignOps practices and processes without knowing it. For instance, you may have defined a naming convention for your design tokens and components, created a component library, or even set up a Design API like Specify for your design system. These efforts are low-hanging fruits, and you'd be right to focus on these first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ℹ️ We've been talking about design systems several times already in this post. However, keep in mind that design systems are one of the tools you can use to reduce inefficiencies. You can do DesignOps without having a design system.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  DesignOps in practice
&lt;/h2&gt;

&lt;p&gt;All organizations differ from each other. Hence, DesignOps is and should be different from your team to another one.&lt;/p&gt;

&lt;p&gt;However, even if organizations pick what they need from &lt;a href="https://www.nngroup.com/articles/design-operations-101/"&gt;the DesignOps menu&lt;/a&gt;, their respective recipe will differ.&lt;/p&gt;

&lt;p&gt;DesignOps menu is all about:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;People: "How we work together"&lt;/li&gt;
&lt;li&gt;Work: "How we get work done"&lt;/li&gt;
&lt;li&gt;Impact: "How our work creates impact"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XGcly844--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rndxikvwkxrxgkp4jasa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XGcly844--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rndxikvwkxrxgkp4jasa.png" alt="The DesignOps menu shows how DesignOps tackles how we work together, how we get our work done and how our work creates impact." width="880" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"DesignOps is all about increasing the impact of design at scale."&lt;br&gt;
— &lt;a href="https://twitter.com/SeanRice"&gt;Sean Rice&lt;/a&gt;, Senior Product Designer, GoDaddy&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You may be eager to start but also wondering where you should start from and you'd be right. What I can tell you is you only need to start somewhere and the rest will follow.&lt;/p&gt;

&lt;p&gt;To help you get started, here are some real-world examples from teams at Dropbox, Pinterest, Fitbit, and Pitch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dropbox improves feedback loops
&lt;/h3&gt;

&lt;p&gt;Dropbox improves creative reviews by creating "blue boxes" at the top of each document. Those checkboxes state what feedback designers are looking for, from whom, and what types of feedback aren't helpful.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This approach is a great reminder at each review of roles and responsibilities; while we want everyone to be heard, we also want to clarify who is the ultimate decision maker for different aspects of the creative output."&lt;br&gt;
— &lt;a href="https://twitter.com/CollinWhitehead"&gt;Collin Whitehead&lt;/a&gt;, Head of Brand, Dropbox&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Pinterest keeps its design org up-to-date
&lt;/h3&gt;

&lt;p&gt;Every Monday morning, Pinterest's design org sends out a visual status document that lists what everyone is working on and shows design comps from each team.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This keeps our design org of 60 people up to date on what other designers are working on, and also serves as a guide for our cross-functional teams to understand what everyone is working on."&lt;br&gt;
— Meredith Black, Head of Design Operations, Pinterest&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Fitbit aligns design and business goals
&lt;/h3&gt;

&lt;p&gt;The Fitbit design org meets quarterly to reflect on the previous three to six months, discuss any urgent priorities, and set goals for the coming months.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"DesignOps can facilitate conversations at the design leadership level to ensure success is being defined based on the company's goals."&lt;br&gt;
— Kate Battles, Manager of Design Operations, Fitbit&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Pitch automatically syncs icons from design to code
&lt;/h3&gt;

&lt;p&gt;The product team at Pitch uses a library of 680 icons across 6 products and apps. The team automates its design workflows for continuous integration and delivery (CI/CD) to cut down on manual tasks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"When we add icons to our library in Figma, Specify automatically triggers a Pull Request in GitHub that adds, removes, or changes icons in our defined output folders, using some custom parsers and settings we've defined."&lt;br&gt;
— &lt;a href="https://twitter.com/RvRoo"&gt;Roy van Rooijen&lt;/a&gt;, Senior Product Designer, Pitch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;DesignOps is the practice of reducing operational inefficiencies in the design workflow. It involves anyone using user-centered and design-thinking processes to solve problems: designers, developers, and product owners.&lt;/p&gt;

&lt;p&gt;DesignOps is about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How product teams work together&lt;/li&gt;
&lt;li&gt;How they get work done&lt;/li&gt;
&lt;li&gt;How their work creates impact to optimize the execution of projects as a whole&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Specify was born with DesignOps in mind. We started building a Design API to connect design to code and knew it could do even more. That's why we're now &lt;a href="http://specifyapp.com/blog/notion-design-system-documentation"&gt;experimenting with a design system documentation in Notion&lt;/a&gt; that automatically syncs with Figma.&lt;/p&gt;

&lt;p&gt;Want to try it out? 👉 &lt;a href="http://specifyapp.com/notion"&gt;Join the Beta Program&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Design has never been more essential in organizations than it is now and its impact is stronger than ever. With DesignOps, we're just scratching the surface of design, and the future of design work.&lt;/p&gt;

&lt;p&gt;I hope you're as excited as I am.&lt;/p&gt;

</description>
      <category>design</category>
      <category>ux</category>
      <category>designops</category>
    </item>
    <item>
      <title>Introduction to Design Tokens</title>
      <dc:creator>Louis Chenais</dc:creator>
      <pubDate>Tue, 09 Aug 2022 09:28:06 +0000</pubDate>
      <link>https://dev.to/specifyapp/introduction-to-design-tokens-580p</link>
      <guid>https://dev.to/specifyapp/introduction-to-design-tokens-580p</guid>
      <description>&lt;p&gt;Whether you're a designer, a developer, a manager or a curious executive wanting to scale your company's branding with consistency: this post is for you.&lt;/p&gt;

&lt;p&gt;After reading this post, you'll have a clear idea of what design tokens are and how they can help your team manage branding at scale.&lt;/p&gt;

&lt;p&gt;However, this article focuses on the why's and the what's of design tokens. I won't share with you how to create, name, transform or distribute them within your design system. These subjects deserve their own article.&lt;/p&gt;

&lt;p&gt;Ready? Let's dive in 🤿&lt;/p&gt;

&lt;p&gt;&lt;iframe class="speakerdeck-iframe ltag_speakerdeck" src="https://speakerdeck.com/player/19bd364a2b2145bb9b2d1421e17f8263"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The underlying business issue
&lt;/h2&gt;

&lt;p&gt;To present you what design tokens are I'll emphasise first on the business issue they solve.&lt;/p&gt;

&lt;p&gt;All organisations in the world share one thing in common: they have a branding. This branding allows them to communicate and differentiate from one to another. To make a long story short, your organisation's branding is the backbone of its communication.&lt;/p&gt;

&lt;p&gt;In the past, when print was king, a branding was defined in a graphical charter. Nowadays, this set of graphical rules has evolved to take into account the myriad of screens surrounding us. Your branding must be applied consistently everywhere, whatever the channel you're communicating on. Design systems are the logical evolution of graphical charters. They help everyone involved in the creation, maintain and usage of a branding work together.&lt;/p&gt;

&lt;p&gt;Your branding is part of the trust your audience has in your organisation. Cherish it to keep your audience with you.&lt;/p&gt;

&lt;p&gt;How would you react if you received an email from your bank with an outdated logo?&lt;br&gt;
How would you feel if your bank website and mobile application didn't share the same branding?&lt;br&gt;
What would you think at night with a full light mode interface burning your tiny eyes?&lt;/p&gt;

&lt;p&gt;Let me tell you a story. It's about a simple rebranding of the ACME organisation. We will be in the shoes of a designer trying to apply a design decision at scale.&lt;/p&gt;



&lt;p&gt;That's it. You're the new Head of Design at ACME Corp. You're excited and can't wait to start the rebranding you've been hired for. This rebranding consists in replacing the main color of your organisation by a new one. One single color replacement.&lt;/p&gt;

&lt;p&gt;Some time goes by and you're finally satisfied with the new branding. It "just" has to be applied in every interface of every product your organisation provides.&lt;/p&gt;

&lt;p&gt;Unfortunately for you, your organisation has many interfaces and many platforms to maintain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A marketing website&lt;/li&gt;
&lt;li&gt;A web application&lt;/li&gt;
&lt;li&gt;An Android application&lt;/li&gt;
&lt;li&gt;An iOS application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're brave and determined to fulfil your mission. You decide to personally ask every manager of every engineering team to update the color in their codebase with the new value you chose.&lt;/p&gt;

&lt;p&gt;You open Slack and start writing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hey Steve,

I've updated our main brand color.
The old one is rgb(237, 200, 078).
The new one is rgb(187, 45, 23).

Can you update your codebase with the new value please?

Cheers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You think this will be a no brainer. Spoiler alert: you're wrong.&lt;/p&gt;

&lt;p&gt;Steve, the manager in charge of the web platform answers and the conversation looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Steve:&lt;/strong&gt; Thanks for the new color value. Do you have the HEX value?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You:&lt;/strong&gt; This is &lt;code&gt;#EDC840&lt;/code&gt;. I think so... 😬&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steve:&lt;/strong&gt; Are you sure? I'm not really confident about this and have a lot of work to do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And you didn't even receive the answer from the managers of the Android and iOS teams. And by the way, as you may have guessed, these platforms handle color in different formats.&lt;/p&gt;

&lt;p&gt;You start to realise that something is broken between you and the developers you're working with. Communicating design decisions and making sure they are correctly applied is a tedious task. In other words, your organisation doesn't have a "design language" designers and developers can use.&lt;/p&gt;




&lt;p&gt;We're human beings. Not machines. Absolute values like a RGB or a HEX color code don't speak for themselves.&lt;/p&gt;

&lt;p&gt;To emphasise this, let's butcher this famous quote:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Roses are &lt;code&gt;#ff0000&lt;/code&gt;,&lt;br&gt;&lt;br&gt;
Violets are &lt;code&gt;#624de3&lt;/code&gt;,&lt;br&gt;&lt;br&gt;
Design tokens are sweet,&lt;br&gt;&lt;br&gt;
And so are you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Applying a new color on several platforms shouldn't take months...
&lt;/h3&gt;

&lt;p&gt;In 2015, Spotify was rebranded and by extension updated its brand guidelines. It took them several months to propagate the new green color to all of their platforms. Now, thanks to their design system foundation based on &lt;a href="https://spotify.design/article/reimagining-design-systems-at-spotify" rel="noopener noreferrer"&gt;design tokens&lt;/a&gt;, it would take them only several minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe76c5d0e215zuxjcegrb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe76c5d0e215zuxjcegrb.jpeg" alt="Design tokens are the foundations of Spotify's design system — Encore." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  And updating a typeface across many websites shouldn't cost millions
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/ilikescience" rel="noopener noreferrer"&gt;Matthew Ström&lt;/a&gt; is a designer who previously worked at the Wall Street Journal. They had to update the typeface on the main website and all its sub brands. &lt;a href="https://soundcloud.com/digitaleleute/dlinsight-33-matthew-stroem-design-systems-and-design-apis" rel="noopener noreferrer"&gt;It took them 2 years and 100 people to change it&lt;/a&gt;. And even now some pages are still using the old typeface.&lt;/p&gt;

&lt;p&gt;As a front-end developer, I assume designers are responsible for taking design decisions. Updating a color, a font-size or any "core style" and seeing the result in whatever platform should be effortless for them. Unfortunately, this is not currently the case.&lt;/p&gt;

&lt;p&gt;Wouldn't it be great if designers could make a design decision and see it applied correctly everywhere, automatically?&lt;/p&gt;

&lt;h2&gt;
  
  
  What are design tokens?
&lt;/h2&gt;

&lt;p&gt;Design tokens are names used to express design decisions in your organisation's design language. Those names are meant to be used and understood by humans like you and me. Design decisions can be a color, a typeface, a border radius, an icon, a font size, a gradient or even an animation duration.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Design tokens are a language for communicating intent between disparate parts of a system."&lt;br&gt;
Ethan Marcotte, &lt;a href="https://ethanmarcotte.com/wrote/designish-systems/" rel="noopener noreferrer"&gt;Design-ish systems&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The design system is your land, and your design tokens are the language people use to communicate design decisions with each other.&lt;/p&gt;

&lt;p&gt;Aside from using design tokens in conversations, you will mostly use them in your products. Design tokens are literally everywhere, this page included.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpuxqs9vsqcx95lcso7fi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpuxqs9vsqcx95lcso7fi.png" alt="If you are familiar with the Atomic Design taxonomy, design tokens are what atoms are made of." width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's breakdown a digital product:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A digital product is composed of features&lt;/li&gt;
&lt;li&gt;A feature is composed of interfaces&lt;/li&gt;
&lt;li&gt;An interface is composed of components&lt;/li&gt;
&lt;li&gt;A component is composed of design tokens&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6vh2v3v15yvbt14t5n7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6vh2v3v15yvbt14t5n7.png" alt="The anatomy of a button component showing every design tokens composing it." width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At Specify, our primary brand color is called &lt;del&gt;purple&lt;/del&gt; "app-base-violet" and its value is &lt;code&gt;#624de3&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here is the anatomy of our primary brand color:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"app-base-violet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#624de3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This color can be transformed and formatted to meet the needs of any platform: Android, iOS, Web, etc…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmf8e8v68fu8mkrl1ael.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmf8e8v68fu8mkrl1ael.png" alt="How design decisions are transformed in design tokens to be used in specific platforms." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Design tokens can be stored in code. This makes them only as powerful as the engineers enable them to be. Remember that design tokens are meant to be used across your design system and products. To do so, you will have to transform them so they can be used by many different teams.&lt;/p&gt;

&lt;p&gt;By using design tokens you secure your organisation's branding and ease its management.&lt;/p&gt;

&lt;p&gt;Design tokens help you reach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unique source of truth for your branding&lt;/li&gt;
&lt;li&gt;Better translation from design to development&lt;/li&gt;
&lt;li&gt;Design consistency across any product UI&lt;/li&gt;
&lt;li&gt;Improved management of your design system&lt;/li&gt;
&lt;li&gt;Easier management of themes and white-labelling features&lt;/li&gt;
&lt;li&gt;Proper methodology to collaborate between teams&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For designers
&lt;/h3&gt;

&lt;p&gt;Use design tokens if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're tired of seeing that design is sacrificed because developers don't or fail to correctly implement your work&lt;/li&gt;
&lt;li&gt;You want the power to handle a design decision from its definition to its deployment&lt;/li&gt;
&lt;li&gt;You want every part of the app interface and all the elements to have the same look and feel&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For developers
&lt;/h3&gt;

&lt;p&gt;Use design tokens if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want to spend more time working on valuable business features and not manually updating design tokens values&lt;/li&gt;
&lt;li&gt;You want to improve your experience when using and refactoring your styles&lt;/li&gt;
&lt;li&gt;You want to use dark/light themes and/or multi brand products&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For managers
&lt;/h3&gt;

&lt;p&gt;Use design tokens if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're tired of seeing tickets about styling bugs stacking up&lt;/li&gt;
&lt;li&gt;You want designers and developers to find a common ground and collaborate seamlessly&lt;/li&gt;
&lt;li&gt;You need to ease the scaling of your teams&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Design tokens allow product teams to better collaborate and ensure brand consistency across any platform.&lt;/p&gt;

&lt;p&gt;This is truly an exciting time to be designing and building consistent UIs at scale. &lt;a href="https://www.designtokens.org/" rel="noopener noreferrer"&gt;Design tokens are here to last&lt;/a&gt;. Our ecosystem is embracing them and so should you. Let’s make styling fun again. Together.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>ux</category>
      <category>design</category>
    </item>
    <item>
      <title>How to sync design tokens from Figma to SCSS variables</title>
      <dc:creator>Louis Chenais</dc:creator>
      <pubDate>Wed, 03 Aug 2022 06:50:00 +0000</pubDate>
      <link>https://dev.to/specifyapp/how-to-sync-design-tokens-from-figma-to-scss-variables-27oa</link>
      <guid>https://dev.to/specifyapp/how-to-sync-design-tokens-from-figma-to-scss-variables-27oa</guid>
      <description>&lt;p&gt;At Specify, we want to help you work better as a product team. As a developer, one of your job is to implement &lt;a href="https://dev.to/specifyapp/introduction-to-design-tokens-580p"&gt;design tokens&lt;/a&gt; in your codebase. And let's face it, manually updating design data is cumbersome.&lt;/p&gt;

&lt;p&gt;Specify helps you collect design data from Figma and distribute it in the right format, in the right project, at the right time, and to top it all: automatically.&lt;/p&gt;

&lt;p&gt;Let's see how to sync design tokens and assets from Figma to a web project using SCSS variables.&lt;/p&gt;




&lt;p&gt;We'll pull design data from the following Specify repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GbWFF6Is--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Specifyapp/Specify/develop/front/landing/assets/img/shared/base-specify-repository-dark.jpg%3Ftoken%3DGHSAT0AAAAAABWRZKMROAQMTOCI6LEFOUF6YXKE6EA" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GbWFF6Is--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Specifyapp/Specify/develop/front/landing/assets/img/shared/base-specify-repository-dark.jpg%3Ftoken%3DGHSAT0AAAAAABWRZKMROAQMTOCI6LEFOUF6YXKE6EA" alt="The Specify repository we'll pull our design data from." width="880" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll generate the following files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🗂 output
└── 🗂 styles
│   └── colors.scss
│   └── fonts.scss
│   └── text-styles.scss
├── 🗂 assets
|   ├── 🗂 fonts
└── └── 🗂 vectors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before anything else, please make sure you have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;created a Specify account&lt;/li&gt;
&lt;li&gt;collected design data from Figma to a Specify repository&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ylKuC8uJdRk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Specify is a Design API.&lt;/p&gt;

&lt;p&gt;You can pull design data from Specify through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Specify REST API&lt;/li&gt;
&lt;li&gt;The Specify CLI&lt;/li&gt;
&lt;li&gt;Our native GitHub application&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Using the CLI
&lt;/h2&gt;

&lt;p&gt;The Specify CLI helps you get design tokens and assets from Specify right from the terminal or even in a CI/CD pipeline.&lt;/p&gt;

&lt;p&gt;Here's a short video tutorial to help you use the CLI to generate SCSS variables:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/12EZw2-sbqo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;First of all, let's install the Specify CLI: &lt;code&gt;yarn global add @specifyapp/cli&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Once the Specify CLI is installed, run the &lt;code&gt;specify&lt;/code&gt; command. You should get the following menu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PvjcjG1j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Specifyapp/Specify/develop/front/landing/assets/img/shared/cli-menu.jpg%3Ftoken%3DGHSAT0AAAAAABWRZKMQX6R6WHOGZZ3KHCPAYXKFA4A" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PvjcjG1j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Specifyapp/Specify/develop/front/landing/assets/img/shared/cli-menu.jpg%3Ftoken%3DGHSAT0AAAAAABWRZKMQX6R6WHOGZZ3KHCPAYXKFA4A" alt="Welcome to the Specify CLI" width="880" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;Specify is flexible. It was designed to adapt to your needs and not the other way around. However you must configure Specify to get design tokens and assets that fit your needs.&lt;/p&gt;

&lt;p&gt;We want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;our design tokens to be pulled and transformed as SCSS variables&lt;/li&gt;
&lt;li&gt;our icons and our font files to be pulled, converted and optimized&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, let's create a &lt;code&gt;.specifyrc.json&lt;/code&gt; Specify configuration inside our project folder. &lt;/p&gt;

&lt;p&gt;Instead of writing our configuration manually, let's use our &lt;a href="https://specifyapp.com/templates/scss"&gt;Configuration Template for SCSS variables&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We could copy the suggested &lt;code&gt;.specifyrc.json (CLI)&lt;/code&gt; template inside our config file. However, we could use this template right from the CLI thanks to the &lt;code&gt;specify init&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;This commands help you setup a Specify configuration file right from the CLI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You either choose to use a dedicated configuration template or start from scratch&lt;/li&gt;
&lt;li&gt;You choose your template&lt;/li&gt;
&lt;li&gt;You choose your configuration format (&lt;code&gt;.js&lt;/code&gt; or &lt;code&gt;.json&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Finalizing the configuration
&lt;/h3&gt;

&lt;p&gt;Our configuration is almost done but we still need to change a couple of things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We must set the Specify &lt;code&gt;repository&lt;/code&gt; we're pulling design data from. In our case we're pulling design data from the &lt;code&gt;all-design-data&lt;/code&gt; repository created in the &lt;code&gt;@acme-inc&lt;/code&gt; organization.&lt;/li&gt;
&lt;li&gt;We must &lt;a href="https://help.specifyapp.com/en/articles/4722408-manage-your-personal-access-tokens"&gt;generate a new personal access token&lt;/a&gt; and set it in the &lt;code&gt;personalAccessToken&lt;/code&gt; property&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our final configuration is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@acme-inc/all-design-data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"personalAccessToken"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1518676e8cb6a7d5f909acdaa59a00ae9d1f72263e49d1211a52e6303f7f2ece"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Colors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/styles/colors.scss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sort-by"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"to-scss-variables"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"formatName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"camelCase"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"formatTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hex"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Text Styles"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/styles/text-styles.scss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"textStyle"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kebabcasify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sort-by"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"to-scss-mixin-text-style"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"exclude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"text-indent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"vertical-align"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"text-align"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"relativeLineHeight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"genericFamily"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"serif"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fonts Declaration"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/styles/fonts.scss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"font"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"to-css-font-import"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"formats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"woff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"woff2"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"genericFamily"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sans-serif"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"fontsPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"../assets/fonts"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fonts Import"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/assets/fonts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"font"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"convert-font"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"formats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"woff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"woff2"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Assets / Vectors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/assets/vectors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"vector"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kebabcasify"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"svgo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"svgo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"js2svg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"pretty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration is now ready to be executed.&lt;/p&gt;

&lt;p&gt;Let's run it by executing: &lt;code&gt;specify pull&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;pull&lt;/code&gt; command helps you pull design data from the Specify repository you set in the &lt;code&gt;repository&lt;/code&gt; property of your configuration. It tells Specify to read and execute your configuration and so it can generate design tokens and assets in your project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using the GitHub app
&lt;/h2&gt;

&lt;p&gt;The Specify GitHub app helps you distribute your design tokens and assets from your Specify to your GitHub repositories. Every changes detected in your Specify repository creates a Pull Request in your GitHub repositories.&lt;/p&gt;

&lt;p&gt;How to do this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Head over to your Specify repository you want to pull design data from&lt;/li&gt;
&lt;li&gt;Go to your repository Destinations page&lt;/li&gt;
&lt;li&gt;Add a Destination&lt;/li&gt;
&lt;li&gt;Select GitHub app&lt;/li&gt;
&lt;li&gt;Select your GitHub account and your GitHub repository&lt;/li&gt;
&lt;li&gt;Select the "SCSS" template&lt;/li&gt;
&lt;li&gt;Create the Pull Request&lt;/li&gt;
&lt;li&gt;Merge the Pull Request on GitHub&lt;/li&gt;
&lt;li&gt;A new Pull Request containing your design data is created 🎉&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Let's sum things up
&lt;/h2&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;We've learned how to sync our design tokens and assets from Figma to a web project.&lt;/p&gt;

&lt;p&gt;We've used the &lt;a href="https://specifyapp.com/templates/css-custom-properties"&gt;SCSS Configuration Template&lt;/a&gt; in two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;with the Specify CLI to pull design data in a local directory&lt;/li&gt;
&lt;li&gt;with the Specify GitHub app to pull design data in our GitHub repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Did enjoy the tutorial? &lt;a href="https://twitter.com/specifyapp/status/1554497351024136195"&gt;Please do share&lt;/a&gt;! Don't see the configuration template you're looking for? Feel free to &lt;a href="https://feedback.specifyapp.com/configuration-templates"&gt;request a template&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>design</category>
      <category>css</category>
      <category>specify</category>
    </item>
    <item>
      <title>How to sync design tokens from Figma to React Native</title>
      <dc:creator>Louis Chenais</dc:creator>
      <pubDate>Tue, 02 Aug 2022 06:55:00 +0000</pubDate>
      <link>https://dev.to/specifyapp/how-to-sync-design-tokens-from-figma-to-react-native-4b9</link>
      <guid>https://dev.to/specifyapp/how-to-sync-design-tokens-from-figma-to-react-native-4b9</guid>
      <description>&lt;p&gt;At Specify, we want to help you work better as a product team. As a developer, one of your job is to implement &lt;a href="https://dev.to/specifyapp/introduction-to-design-tokens-580p"&gt;design tokens&lt;/a&gt; in your codebase. And let's face it, manually updating design data is cumbersome.&lt;/p&gt;

&lt;p&gt;Specify helps you collect design data from Figma and distribute it in the right format, in the right project, at the right time, and to top it all: automatically.&lt;/p&gt;

&lt;p&gt;Let's see how to sync design tokens and assets from Figma to a React Native project.&lt;/p&gt;




&lt;p&gt;We'll pull design data from the following Specify repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cukUs1F6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Specifyapp/Specify/develop/front/landing/assets/img/blog/15-figma-to-react-native/base-specify-repository-dark.jpg%3Ftoken%3DGHSAT0AAAAAABWRZKMQMXXTC6KCCDNDUN44YXI26GQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cukUs1F6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Specifyapp/Specify/develop/front/landing/assets/img/blog/15-figma-to-react-native/base-specify-repository-dark.jpg%3Ftoken%3DGHSAT0AAAAAABWRZKMQMXXTC6KCCDNDUN44YXI26GQ" alt="The Specify repository we'll pull our design data from." width="880" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll generate the following files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🗂 output
├── theme.ts
├── 🗂 fonts
└── 🗂 vectors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before anything else, please make sure you have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;created a Specify account&lt;/li&gt;
&lt;li&gt;collected design data from Figma to a Specify repository&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ylKuC8uJdRk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Specify is a Design API. You can pull design data from Specify through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Specify REST API&lt;/li&gt;
&lt;li&gt;The Specify CLI&lt;/li&gt;
&lt;li&gt;Our native GitHub app&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Using the CLI
&lt;/h2&gt;

&lt;p&gt;The Specify CLI helps you get design tokens and assets from Specify right from the terminal or even in a CI/CD pipeline.&lt;/p&gt;

&lt;p&gt;Here's a short video tutorial to help you use the CLI to generate assets and a theme compatible with React Native:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rwVtOCpI5sE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;First of all, let's install the Specify CLI: &lt;code&gt;yarn global add @specifyapp/cli&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Once the Specify CLI is installed, run the &lt;code&gt;specify&lt;/code&gt; command. You should get the following menu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7PLgyKHa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Specifyapp/Specify/develop/front/landing/assets/img/blog/15-figma-to-react-native/cli-menu.jpg%3Ftoken%3DGHSAT0AAAAAABWRZKMRQAFY2J4KGMDW35B4YXI273Q" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7PLgyKHa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/Specifyapp/Specify/develop/front/landing/assets/img/blog/15-figma-to-react-native/cli-menu.jpg%3Ftoken%3DGHSAT0AAAAAABWRZKMRQAFY2J4KGMDW35B4YXI273Q" alt="Specify CLI's menu" width="880" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;Specify is flexible. It was designed to adapt to your needs and not the other way around. However you must configure Specify to get design tokens and assets that fit your needs.&lt;/p&gt;

&lt;p&gt;We want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;our design tokens to be pulled and transformed as CSS Custom Properties&lt;/li&gt;
&lt;li&gt;our icons and our font files to be pulled, converted and optimized&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, let's create a &lt;code&gt;.specifyrc.json&lt;/code&gt; Specify configuration inside our project folder. &lt;/p&gt;

&lt;p&gt;Instead of writing our configuration manually, let's use our &lt;a href="https://specifyapp.com/templates/react-native"&gt;Configuration Template for React Native&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We could copy the suggested &lt;code&gt;.specifyrc.json (CLI)&lt;/code&gt; template inside our config file. However, we could use this template right from the CLI thanks to the &lt;code&gt;specify init&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;This commands help you setup a Specify configuration file right from the CLI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You either choose to use a dedicated configuration template or start from scratch&lt;/li&gt;
&lt;li&gt;You choose your template&lt;/li&gt;
&lt;li&gt;You choose your configuration format (&lt;code&gt;.js&lt;/code&gt; or &lt;code&gt;.json&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Finalizing the configuration
&lt;/h3&gt;

&lt;p&gt;Our configuration is almost done but we still need to change a couple of things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We must set the Specify &lt;code&gt;repository&lt;/code&gt; we're pulling design data from. In our case we're pulling design data from the &lt;code&gt;all-design-data&lt;/code&gt; repository created in the &lt;code&gt;@acme-inc&lt;/code&gt; organization.&lt;/li&gt;
&lt;li&gt;We must &lt;a href="https://help.specifyapp.com/en/articles/4722408-manage-your-personal-access-tokens"&gt;generate a new personal access token&lt;/a&gt; and set it in the &lt;code&gt;personalAccessToken&lt;/code&gt; property&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our final configuration is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@acme-inc/all-design-data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"personalAccessToken"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1518676e8cb6a7d5f909acdaa59a00ae9d1f72263e49d1211a52e6303f7f2ece"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Design Tokens / Colors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/styles/colors.css"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sort-by"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"name"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"to-css-custom-properties"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"formatName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kebabCase"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Design Tokens / Text Styles"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/styles/text-styles.css"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"textStyle"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"to-css-text-style"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"exclude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"text-indent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"vertical-align"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"text-align"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"relativeLineHeight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"genericFamily"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"serif"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Design Tokens / Import font files in CSS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/styles/fonts.css"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"font"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"to-css-font-import"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"formats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"woff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"woff2"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"fontsPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"../fonts"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Design Tokens / Import font files"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/fonts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"font"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"convert-font"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"formats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"woff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"woff2"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Design Tokens / Vectors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./output/vectors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"filter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="s2"&gt;"vector"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parsers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"svgo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"svgo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"js2svg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"pretty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration is now ready to be executed.&lt;/p&gt;

&lt;p&gt;Let's run it by executing: &lt;code&gt;specify pull&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;pull&lt;/code&gt; command helps you pull design data from the Specify repository you set in the &lt;code&gt;repository&lt;/code&gt; property of your configuration. It tells Specify to read and execute your configuration and so it can generate design tokens and assets in your project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using the GitHub app
&lt;/h2&gt;

&lt;p&gt;The Specify GitHub app helps you distribute your design tokens and assets from your Specify to your GitHub repositories. Every changes detected in your Specify repository will create a Pull Request in your GitHub repositories.&lt;/p&gt;

&lt;p&gt;How to do this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Head over to your Specify repository you want to pull design data from&lt;/li&gt;
&lt;li&gt;Go to your repository Destinations page&lt;/li&gt;
&lt;li&gt;Add a Destination&lt;/li&gt;
&lt;li&gt;Select GitHub app&lt;/li&gt;
&lt;li&gt;Select your GitHub account and your GitHub repository&lt;/li&gt;
&lt;li&gt;Select the "React Native" template&lt;/li&gt;
&lt;li&gt;Create the Pull Request&lt;/li&gt;
&lt;li&gt;Merge the Pull Request on GitHub&lt;/li&gt;
&lt;li&gt;A new Pull Request containing your design data is created 🎉&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Let's sum things up
&lt;/h2&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;In this post, we learned how to pull in our React Native project our design tokens tokens and assets with Specify and the &lt;a href="https://specifyapp.com/templates/react-native"&gt;React Native Configuration Template&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We learned how to use the configuration template directly within the Specify CLI and the GitHub app.&lt;/p&gt;

&lt;p&gt;Did you find this tutorial helpful? &lt;a href="https://twitter.com/specifyapp/status/1550450706225672192"&gt;Please do share&lt;/a&gt;! Don't see the configuration template you're looking for? Feel free to &lt;a href="https://feedback.specifyapp.com/configuration-templates"&gt;request a template&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>design</category>
      <category>reactnative</category>
      <category>specify</category>
    </item>
    <item>
      <title>How to sync design tokens from Figma to Tailwind</title>
      <dc:creator>Louis Chenais</dc:creator>
      <pubDate>Sat, 12 Mar 2022 11:21:00 +0000</pubDate>
      <link>https://dev.to/specifyapp/how-to-sync-your-design-tokens-from-figma-to-tailwind-ama</link>
      <guid>https://dev.to/specifyapp/how-to-sync-your-design-tokens-from-figma-to-tailwind-ama</guid>
      <description>&lt;h2&gt;
  
  
  Why use an automatic sync tool?
&lt;/h2&gt;

&lt;p&gt;Keeping in sync design decisions coming from design to code helps your branding be consistent at scale. Let me explain you what I mean by "from design to code".&lt;/p&gt;

&lt;p&gt;It means your design decisions must go through several steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extract those decisions from your design tool (i.e. Figma)&lt;/li&gt;
&lt;li&gt;Make those decisions available to developers so they can use them in a specific platform (i.e. web)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Developers are not the only one to use those design decisions. Other parties like designers and business stakeholders will need them too.&lt;/p&gt;

&lt;p&gt;Hence, your design decisions must be extracted from design and synchronised into your organization's design system.&lt;/p&gt;

&lt;p&gt;Let's go back on developers. More precisely, web developers who are using design tokens thanks to the Tailwind framework. How can they ensure to always use the latest design tokens in their Tailwind configuration? Manually updating is a way to go but it's error-prone and surely not the most efficient.&lt;/p&gt;

&lt;p&gt;What if you could have your Tailwind theme always in sync with the latest design decisions — automatically?&lt;/p&gt;

&lt;p&gt;Thanks to Specify and the &lt;code&gt;to-tailwind&lt;/code&gt; parser, it's now possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is this parser?
&lt;/h2&gt;

&lt;p&gt;From your Specify repository, you can easily extract all your design decisions using the &lt;code&gt;to-tailwind&lt;/code&gt; parser. It helps you format design tokens to create a theme compatible with the &lt;a href="https://tailwindcss.com/docs/theme" rel="noopener noreferrer"&gt;TailwindCSS specification&lt;/a&gt;. By the way, the theme is also compatible with &lt;a href="https://windicss.org/" rel="noopener noreferrer"&gt;WindiCSS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This parser creates a file containing the whole theme. It can then be used in your tailwind.config.js file. To use this parser head into your Specify configuration file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up the automatic sync
&lt;/h2&gt;

&lt;p&gt;Let's setup a simple config to sync our colors coming from a Specify repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fspecifyapp.com%2F_nuxt%2Fimg%2Fspecify-repository-example-dark.7a21e60.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fspecifyapp.com%2F_nuxt%2Fimg%2Fspecify-repository-example-dark.7a21e60.jpg" alt="A Specify repository set up for the example with design tokens" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From this repository, we will extract all the colors using this configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "repository": "@my_organization/my-repository",
  "personalAccessToken": "my_personal_access_token",
  "rules": [
    {
      "name": "Design Tokens / Colors",
      "path": "tailwind-theme.js",
      "filter": {
        "types": ["colors"]
      },
      "parsers": [
        {
          "name": "to-tailwind"
        }
      ]
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The personal access token can be extracted from our application in your personal settings.&lt;/p&gt;

&lt;p&gt;This configuration will generate a file named &lt;code&gt;tailwind-theme.js&lt;/code&gt; in your root directory containing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const theme = {
  colors: {
    accent: "#6650ef",
    black: "#1e212b",
    green: "#58cd52",
    grey: "#ccd5e1",
    orange: "#ff8e05",
    red: "#f5483f",
    white: "#ffffff",
  },
};

module.exports = theme;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now use the freshly extracted colors in your &lt;code&gt;tailwind.config.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { colors } = require('./tailwind-theme');

module.exports = {
  // ... your Tailwind config
  theme: {
    extend: {
      colors,
    },
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you're all set. You can now use the class &lt;code&gt;.text-accent&lt;/code&gt; in your HTML document.&lt;/p&gt;

&lt;h2&gt;
  
  
  A more advanced setup
&lt;/h2&gt;

&lt;p&gt;Colors are easily synced but sometimes you will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need more than just colors&lt;/li&gt;
&lt;li&gt;Need to be able to override values&lt;/li&gt;
&lt;li&gt;Need to extract design tokens from another source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, let's say you are currently transitioning from a CSS-in-JS to a Tailwind style implementation.&lt;/p&gt;

&lt;p&gt;You want to extract your colors, text styles, fonts and shadows from your Specify repository but you still want to keep some of the old shadow values until you have completely migrated.&lt;/p&gt;

&lt;p&gt;You can easily extract all the information from your Specify repository using this configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "repository": "@my_organization/my-repository",
  "personalAccessToken": "my_personal_access_token",
  "rules": [
    {
      "name": "Design Tokens / Colors - Shadows - Text Styles",
      "path": "tailwind-theme.js",
      "filter": {
        "types": ["color", "shadow", "textStyle"]
      },
      "parsers": [
        {
          "name": "to-tailwind",
          "options": {
            "formatName": "kebabCase",
            "formatConfig": {
              "module": "commonjs"
            }
          }
        }
      ]
    },
    // Rule to extract the fonts assets in the `.woff2` format
    {
      "name": "Assets / Font files",
      "path": "public/fonts",
      "filter": {
        "types": ["font"]
      },
      "parsers": [
        {
          "name": "convert-font",
          "options": {
            "formats": ["woff2"]
          }
        }
      ]
    },
    // Rule to create a css file that import the correct
    // `@font-face` in a `fonts.css` file
    {
      "name": "Design Tokens / Font face",
      "path": "public/fonts/fonts.css",
      "filter": {
        "types": ["font"]
      },
      "parsers": [
        {
          "name": "to-css-font-import",
          "options": {
            "formats": ["woff2"]
          }
        }
      ]
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration allows you to extract every design tokens you need.&lt;/p&gt;

&lt;p&gt;Now, let's say you have some old shadows coming from a style file like this one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const shadows = {
    elevation1: 'box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);'
};

module.exports = shadows;
To use them in your config file, you would use it like this:

const { colors, boxShadow, fontSize, fontFamily } = require('./tailwind-theme');
const { shadows as oldShadows } = require('./style/shadows');

module.exports = {
  // your Tailwind config
  theme: {
    extend: {
      colors,
            boxShadow: {
                ...boxShadow,
                ...oldShadows, // this way, oldShadows will override the new ones
            },
      fontSize,
      fontFamily,
    },
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find more examples on our &lt;a href="https://github.com/Specifyapp/configurations-examples/tree/main/examples/tailwind-windi" rel="noopener noreferrer"&gt;GitHub configuration examples repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Figma → Specify → Tailwind = 🔥&lt;/p&gt;

&lt;p&gt;By using Specify and its &lt;code&gt;to-tailwind&lt;/code&gt; parser you can easily extract design tokens from Figma to Specify and then from your Specify repository to your codebase.&lt;/p&gt;

</description>
      <category>design</category>
      <category>tailwindcss</category>
      <category>tutorial</category>
      <category>specify</category>
    </item>
  </channel>
</rss>
