Using Framer X with custom Sass build

Framer X is a slick tool, you can express your creativity creating not only design mockups but also React components from real code. Is it possible to use your own Sass build?



Yesterday I started using Framer X, and I am excited about the possibilities it opens. I am still looking at the video tutorials and documentation and one of the first tasks I want to achieve is the possibility to import my own components and use my custom Sass build inside Framer X.

You can save projects in two formats, we a folder-backed project. It is a .framerfx folder that you can version using git, and contains a package.json so you can install depependencies.


It looks a good idea use the Framer CLI to authenticate and set your FRAMER_TOKEN in a permanent environment variable. I assume you already have a Framer X account, use your email address of course

npx framer-cli authenticate <email@address>

Then I edited my .bash_profile with something like

export FRAMER_TOKEN=123...

Create project

Open Framer X, create a new project and save it as a folder-backed project. You need to choose as File Format the option Framer X (Folder).

My Goal is to create a custom Sass build, importing it into the project and design components with that style into Framer X.

I also uploaded it on GitHub, this is the final result: fibo/sass-build-example.framerfx.

After I created the empty project and uplaoded it on GitHub for the first time I see the following

├── .gitignore
├── build
│   ├── index.js
│   └── vendors.js
├── code
├── design
│   └── document.json
├── metadata
│   └── .gitignore
├── package.json
├── tsconfig.json
└── yarn.lock

Also, I edited my package.json accordingly, in particular I do not want to upload it on the npm registry, so I added

  "private": true,

Sass build

I am going to import my component library Trunx which uses Bulma, and customize the Sass build. So I created a sass/ folder with the following files:

File: _custom-variables.scss.

$azure: hsl(180, 100%, 97%);
$limegreen: hsl(120, 61%, 50%);
$steelblue: hsl(207, 44%, 49%);
$tomato: hsl(9, 100%, 64%);

$body-background-color: $azure;

$primary: hsl(197, 79%, 60%);
$link: hsl(219, 61%, 57%);
$info: $steelblue;
$success: $limegreen;
$warning: hsl(48, 89%, 60%);
$danger: $tomato;

File: app.scss.

/* Import variables first, then the whole Bulma. */
@import "custom-variables";
@import "bulma/bulma";

Let’s install some dependencies

yarn add framer react react-dom node-sass --dev

I also added trunx, cause it is needed in my case. Probably you do not need it

yarn add trunx --dev
I am an npm fan but in a Framer X project I am going to use yarn. Both will get the job done.

Then add a sass script in package.json

"scripts": {
  "sass": "node-sass --include-path node_modules sass/app.scss > code/app.css"

And run it

yarn sass

It creates a code/app.css file, and here it is the trick! Create a code/loadStyles.js file with the following content

const id = 'app-css'

function loadStyles () {
  const css = document.createElement('link')
  css.href = './app.css' = id

if (document.getElementById(id) === null) loadStyles()

And you are done, Framer X will import the Sass build under the hood.

You can use any file name, just create a dot js file in the code folder.

Create a component

I started creating a Button component, Framer X generated a code/Button.tsx file I could edit to get the following

import * as React from "react"
import { Frame, addPropertyControls, ControlType } from "framer"
import * as Tx from "trunx"

export function Button({ isPrimary, text, ...props }) {
    return (
        <Frame {...props}>
            <Tx.Button isPrimary={isPrimary}>{text}</Tx.Button>

Button.defaultProps = {
    isPrimary: false,
    text: "Click me",

addPropertyControls(Button, {
    isPrimary: {
        title: "Primary",
        type: ControlType.Boolean,
        defaultValue: false,
    text: {
        title: "Text",
        type: ControlType.String,
        defaultValue: "Hello Framer!",
You may need to restart Framer X in case during the steps above you see an error message in the canvas.


Framer X looks really promising, I just started and even if usually I am picky it looks this is an awesome tool and it is worth to spend time learning it.