@fylgja/props-builder

中文文档
2.3.0发布于 2026/10/15MITES Module零依赖构建来源已验证近 30 天下载 3.8万

Effortlessly generate Design Tokens (CSS custom properties) from JavaScript objects.

原始使用文档
文档目录6 节
  1. Installation
  2. Usage
  3. Basic Usage with JavaScript
  4. Output formats
  5. To Design Tokens 2025.10
  6. From Design Tokens to CSS

Fylgja - Props Builder

NPM version NPM Downloads License

The Fylgja Props Builder simplifies the creation of Design Tokens (CSS custom properties) by converting JavaScript objects or JSON files into CSS variables or other token formats.

This tool empowers you to construct comprehensive Design Token sets with ease.

Installation

You can install Fylgja Props Builder via npm or other Node-based package managers like pnpm or bun:

npm install @fylgja/props-builder

Usage

Basic Usage with JavaScript

Import the propsBuilder function into your Node.js scripts:

import { propsBuilder } from "@fylgja/props-builder";

Then, use it to generate output files based on your configuration:

import { propsBuilder } from "@fylgja/props-builder";

propsBuilder(
  props, // Required: JavaScript object containing your design tokens.
  filename, // Required: Name of the output file.
  {
    parseAs: "auto", // Optional: Specifies the output format. Defaults to "auto".
    writeToFile: true, // Optional: If false, outputs the generated content to the console. Defaults to true.
    selector: ":where(:root)", // Optional: CSS selector for custom property declarations (CSS output only).
    wrapper: "", // Optional: Wrapper for design system-specific formatting (e.g., Figma).
    name: "Design Tokens", // Optional: Name of the Design Tokens Resolver (dtcg output only).
    description: "", // Optional: Description of the Design Tokens Resolver (dtcg output only).
    inputTypeTokens: false, // Optional: Set to true if the input `props` are in a design token format. Defaults to false.
    inputTypeSyntax: "default", // Optional: Specifies the syntax of the input tokens if `inputTypeTokens` is true.
    stripPrefix: "", // Optional: Dot/dash separated key path (or array of keys) to unwrap, dropping wrapping keys (e.g. "tokens.values").
    rename: null, // Optional: Map of `{ [currentKey]: newKey }` applied recursively, to align naming (e.g. `{ colors: "color" }`).
  },
);

For basic usage, only the props and filename arguments are necessary.

The optional parameters provide flexibility for advanced scenarios.

import { propsBuilder } from "@fylgja/props-builder";

propsBuilder(
  {
    color: {
      red: "#f00",
      green: "#0f0",
      blue: "#00f",
    },
  },
  "output.css",
);

This will generate output.css with the following content:

:where(:root) {
  --color-red: #f00;
  --color-green: #0f0;
  --color-blue: #00f;
}

This example demonstrates a simple use case with a plain JavaScript object.

Output formats

The output format is picked from the filename, unless parseAs is set.

FilenameparseAsOutput
*.csscssCSS custom properties
*.scssscssSCSS variables
*.js, *.mjs, *.cjs, *.jsonmjs, cjs, jsonThe props as is
*.resolver.jsondtcgDesign Tokens Resolver (2025.10)
*tokens.jsontokensDesign Tokens (legacy draft syntax)
*figma-tokens.jsonfigmaFigma Tokens
*style-dictionary-tokens.jsonstyle-dictionaryStyle Dictionary tokens
css-jitA flat object for JIT tools, like jit-props

To Design Tokens 2025.10

The dtcg output follows the Design Tokens 2025.10 specification. Values are converted to typed token values, e.g. 0.5rem becomes a dimension token with { "value": 0.5, "unit": "rem" }, and var(--shadow-color) becomes a {shadow-color.$root} reference.

propsBuilder(props, "tokens/fylgja.resolver.json", { name: "Fylgja" });

All tokens go in a single set of a Resolver document. Dark mode values (@media:dark) are left out.

The specification has no way to express some CSS values, such as calc(), clamp(), var() inside a color, or units other than px and rem (or ms and s for durations). These tokens are skipped with a warning, together with any token referencing them.

For more advanced scenarios, including how to use different JSON file formats, see the "From Design Tokens to CSS" section below.

From Design Tokens to CSS

Using the Props Builder with a JSON file is a common use case. The process is straightforward, with a small adjustment depending on the format of your JSON file.

1. Create your Design Tokens file

Your JSON file can be a simple key-value object, or it can follow a standard format like the W3C Design Tokens spec or the format exported by the Figma Tokens plugin.

2. Create a build script

Create a Node.js script (e.g., build.js) to read your tokens file and run the builder.

import { readFileSync } from "node:fs";
import { propsBuilder } from "@fylgja/props-builder";

// Read and parse the JSON file
const tokens = JSON.parse(readFileSync("path/to/your/tokens.json", "utf-8"));

// 👇 Configure the builder based on your token format
const options = {
  // inputTypeTokens: ...,
  // inputTypeSyntax: ...,
};

// Build the CSS file
propsBuilder(tokens, "tokens.css", options);

console.log("Successfully built tokens.css!");

3. Configure the builder

The key step is to configure the options object based on your JSON file's format.

  • For a simple, key-value JSON file: You don't need any special options. The builder handles it by default.

    const options = {};
    
  • For a W3C Design Tokens spec file (including 2025.10 and Resolver files): Set inputTypeTokens to true.

    const options = { inputTypeTokens: true };
    

    Design Tokens 2025.10 values, such as color objects or dimensions, are converted to CSS values. Composite tokens become CSS shorthands (border, shadow, transition, and gradient color stops), except for typography, which becomes a custom property per part (e.g. --heading-font-size). Groups support $type inheritance, $root tokens, and $extends. Both {token.path} references and $ref JSON Pointers within the same file are supported.

    For a Resolver file, all sets are merged in the resolution order, and each modifier uses its default context. A $ref to another file is not supported, merge those files into a single document first.

  • For a Figma Tokens file: Set inputTypeTokens to true and inputTypeSyntax to 'figma'.

    const options = {
      inputTypeTokens: true,
      inputTypeSyntax: "figma",
    };
    
  • For a Google Stitch Markdown export: Set inputTypeTokens to true and inputTypeSyntax to 'stitch'. Pass the raw Markdown file content (a string) as props, not a parsed object. Only the YAML frontmatter is used, and every key in it is converted to tokens, except for known metadata keys (name, description). The colors group is automatically renamed to the singular color (unless a color group already exists).

    const options = {
      inputTypeTokens: true,
      inputTypeSyntax: "stitch",
    };
    

4. Run the build script

Finally, run your script from the terminal:

node build.js

This will generate a tokens.css file with your design tokens converted to CSS Custom Properties.

版本与发布记录

@fylgja/props-builder 共发布 17 个版本,首次发布于 2022/06/05;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.3.0latest2026/10/151 个月前
2.2.02026/07/064 个月前
2.1.12026/06/105 个月前
2.1.02025/08/211.2 年前
2.0.12025/07/191.3 年前
2.0.02025/03/171.7 年前

关于 @fylgja/props-builder 的常见问题

@fylgja/props-builder 是什么?

Effortlessly generate Design Tokens (CSS custom properties) from JavaScript objects.

如何安装 @fylgja/props-builder?

在项目目录运行 npm install @fylgja/props-builder,或使用 pnpm add / yarn add / bun add。

@fylgja/props-builder 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/fylgja__props-builder 是否存在。

@fylgja/props-builder 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fylgja/props-builder 可以商用吗?

@fylgja/props-builder 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fylgja/props-builder 的下载量有多少?

根据 npm 官方下载统计,@fylgja/props-builder 在 2026/10/16 – 2026/11/14 这 30 天内被下载 38,214 次,日均约 1,274 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fylgja/props-builder 还在维护吗?

最新版本 2.3.0 发布于 2026/10/15(1 个月前);至今共发布 17 个版本,其中过去 12 个月发布了 3 个;首次发布于 2022/06/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。