Skip to content

Repository files navigation

specs

Specs is a fast, deterministic ecosystem for defining and generating production-ready component specifications across platforms. Available as a Figma plugin and a command-line interface, Specs produces compact, schema-valid specs — sidestepping the cost and errors of agentic Figma extraction.

Get started

Plugin

  • Visualize specs on-canvas in incomparable detail
  • Copy and paste compact spec data into LLMs
  • Customize output for styling and layout
  • Configure advanced data settings in the UI

Open the plugin →

CLI

  • Quickly initialize an environment and fetch data
  • Generate 50 component specs in a minute
  • Set up for continuous integration
  • Configure the files, formats, and data you need

Set up the CLI →

Both the plugin and CLI generate specs consistent with the Specs schema, a specifications model architected to unify component definitions for implementation across web, iOS, Android, and Figma.

Repeatable, production-grade specs in seconds

Evaluating and differencing Figma styles and layers across variants is mechanical and predictable — and with Specs, incredibly fast and efficient.

Update Figma → Generate specs → Agents refine → Update component

The result is a spec that's compact yet complete — not noisy like Figma's REST API data — and built on a schema that agents and engineers can extend. Leave inference about behavior, accessibility, motion, and nuanced customization downstream, where AI agents excel.

Specs ecosystemAgentic Figma extraction
Speed~1 sec (CLI) / ~10 sec (Plugin) per component~5–10 minutes per component
AI costScripted — 0 AI tokens per component25/50/100,000+ AI tokens per component
ConsistencyDeterministic and repeatableInference errors, gaps, and overconfidence
OutputSchema-valid YAML/MD, ideal for testing and versioningUnstructured Markdown that complicates repeatable verification
PlatformsTuned for cross-platform output and configurable Figma intentsInterprets and infers intents

Packages

@directededges/specs-cli

Command-line interface (CLI) for generating component specifications from Figma design files.

# 1. Install cli globally to run with the command `specs`
npm install -g @directededges/specs-cli
# 2. Initialize a specs.config.yaml file
specs init
# 3. Edit the config for your Figma file key and preferred settings # 4. Set up an .env file with a Figma PAT and – if subscribed - license key# 5. Fetch raw Figma data (file, variables, styles)
specs fetch
# 6. Scan the file to discover components and build a manifest
specs scan
# 7. Select components in the manifest to be generated# 8. Generate specs from the manifest
specs generate

Helpful documentation includes:

@directededges/specs-schema

The shared type system and JSON schema that defines the structure of UI component specifications is a dependency of specs-cli and installed when you install the command line interface as above. However, it is also available as a standalone package.

npm install @directededges/specs-schema

Exports include:

  • JSON Schema — the canonical schema for component spec output
  • TypeScript types — complete type definitions for all schema entities (Component, Config, Styles, Element, AnyProp, etc.)
  • DEFAULT_CONFIG — a runtime configuration object controlling output shape (format, token resolution, variant depth, etc.)

Learn more in the Schema docs, including details on each property including component, variants, styles, props and more.

@directededges/specs-from-figma

The specs-from-figma package is the engine that converts Figma assets into specs and is used for both the command line interface and the associated Figma plugin. It is developed in a private repository and its published package is installed as a dependency of the command line interface.

Architectural Decision Records

Schema changes are proposed and tracked through ADRs in the adr/ directory. Each ADR documents the context, options considered, and decision for a type or schema modification.

Contributing

Contributions are welcome. Clone the repo, run npm install at the root, and use npm run build and npm test to validate changes. All packages use Vitest with globals enabled.

Agents

This repo includes Claude Code agent skills for the full ADR lifecycle:

SkillPurpose
/specs.adr.createDraft a new ADR, claim the next number, and reserve it in the index
/specs.adr.implementApply the type and schema changes described in an ADR to types, schema, tests, and changelog
/specs.adr.acceptValidate the implementation is clean, mark the ADR as ACCEPTED, and update the index

Issues

Found a bug or have a feature request? Please check if it already exists in our Issues before creating a new one.

For bug reports, include:

  • Figma version and operating system
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)

For feature requests, include:

  • Clear description of the feature
  • Use case and benefits
  • Any relevant mockups or examples

Questions? Visit our Slack community.

Licensing

This repository contains packages with different licenses:

Attribution (Schema)

When extending or reusing the specs schema, you must:

Example attribution:

"This project uses the Specs UI Component Schema by Nathan Curtis of Directed Edges, licensed under CC BY 4.0."


Disclaimer: This is an independent project and is not officially affiliated with Figma Inc.

About

Schema, types, and command line tools to record and manage UI component specifications.

Resources

Stars

126 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - DirectedEdges/specs: Schema, types, and command line tools to record and manage UI component specifications. · GitHub
Skip to content

Repository files navigation

specs

Specs is a fast, deterministic ecosystem for defining and generating production-ready component specifications across platforms. Available as a Figma plugin and a command-line interface, Specs produces compact, schema-valid specs — sidestepping the cost and errors of agentic Figma extraction.

Get started

Plugin

  • Visualize specs on-canvas in incomparable detail
  • Copy and paste compact spec data into LLMs
  • Customize output for styling and layout
  • Configure advanced data settings in the UI

Open the plugin →

CLI

  • Quickly initialize an environment and fetch data
  • Generate 50 component specs in a minute
  • Set up for continuous integration
  • Configure the files, formats, and data you need

Set up the CLI →

Both the plugin and CLI generate specs consistent with the Specs schema, a specifications model architected to unify component definitions for implementation across web, iOS, Android, and Figma.

Repeatable, production-grade specs in seconds

Evaluating and differencing Figma styles and layers across variants is mechanical and predictable — and with Specs, incredibly fast and efficient.

Update Figma → Generate specs → Agents refine → Update component

The result is a spec that's compact yet complete — not noisy like Figma's REST API data — and built on a schema that agents and engineers can extend. Leave inference about behavior, accessibility, motion, and nuanced customization downstream, where AI agents excel.

Specs ecosystemAgentic Figma extraction
Speed~1 sec (CLI) / ~10 sec (Plugin) per component~5–10 minutes per component
AI costScripted — 0 AI tokens per component25/50/100,000+ AI tokens per component
ConsistencyDeterministic and repeatableInference errors, gaps, and overconfidence
OutputSchema-valid YAML/MD, ideal for testing and versioningUnstructured Markdown that complicates repeatable verification
PlatformsTuned for cross-platform output and configurable Figma intentsInterprets and infers intents

Packages

@directededges/specs-cli

Command-line interface (CLI) for generating component specifications from Figma design files.

# 1. Install cli globally to run with the command `specs`
npm install -g @directededges/specs-cli
# 2. Initialize a specs.config.yaml file
specs init
# 3. Edit the config for your Figma file key and preferred settings # 4. Set up an .env file with a Figma PAT and – if subscribed - license key# 5. Fetch raw Figma data (file, variables, styles)
specs fetch
# 6. Scan the file to discover components and build a manifest
specs scan
# 7. Select components in the manifest to be generated# 8. Generate specs from the manifest
specs generate

Helpful documentation includes:

@directededges/specs-schema

The shared type system and JSON schema that defines the structure of UI component specifications is a dependency of specs-cli and installed when you install the command line interface as above. However, it is also available as a standalone package.

npm install @directededges/specs-schema

Exports include:

  • JSON Schema — the canonical schema for component spec output
  • TypeScript types — complete type definitions for all schema entities (Component, Config, Styles, Element, AnyProp, etc.)
  • DEFAULT_CONFIG — a runtime configuration object controlling output shape (format, token resolution, variant depth, etc.)

Learn more in the Schema docs, including details on each property including component, variants, styles, props and more.

@directededges/specs-from-figma

The specs-from-figma package is the engine that converts Figma assets into specs and is used for both the command line interface and the associated Figma plugin. It is developed in a private repository and its published package is installed as a dependency of the command line interface.

Architectural Decision Records

Schema changes are proposed and tracked through ADRs in the adr/ directory. Each ADR documents the context, options considered, and decision for a type or schema modification.

Contributing

Contributions are welcome. Clone the repo, run npm install at the root, and use npm run build and npm test to validate changes. All packages use Vitest with globals enabled.

Agents

This repo includes Claude Code agent skills for the full ADR lifecycle:

SkillPurpose
/specs.adr.createDraft a new ADR, claim the next number, and reserve it in the index
/specs.adr.implementApply the type and schema changes described in an ADR to types, schema, tests, and changelog
/specs.adr.acceptValidate the implementation is clean, mark the ADR as ACCEPTED, and update the index

Issues

Found a bug or have a feature request? Please check if it already exists in our Issues before creating a new one.

For bug reports, include:

  • Figma version and operating system
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)

For feature requests, include:

  • Clear description of the feature
  • Use case and benefits
  • Any relevant mockups or examples

Questions? Visit our Slack community.

Licensing

This repository contains packages with different licenses:

Attribution (Schema)

When extending or reusing the specs schema, you must:

Example attribution:

"This project uses the Specs UI Component Schema by Nathan Curtis of Directed Edges, licensed under CC BY 4.0."


Disclaimer: This is an independent project and is not officially affiliated with Figma Inc.

About

Schema, types, and command line tools to record and manage UI component specifications.

Resources

Stars

126 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DirectedEdges/specs: Schema, types, and command line tools to record and manage UI component specifications. · GitHub
Skip to content

Repository files navigation

specs

Specs is a fast, deterministic ecosystem for defining and generating production-ready component specifications across platforms. Available as a Figma plugin and a command-line interface, Specs produces compact, schema-valid specs — sidestepping the cost and errors of agentic Figma extraction.

Get started

Plugin

  • Visualize specs on-canvas in incomparable detail
  • Copy and paste compact spec data into LLMs
  • Customize output for styling and layout
  • Configure advanced data settings in the UI

Open the plugin →

CLI

  • Quickly initialize an environment and fetch data
  • Generate 50 component specs in a minute
  • Set up for continuous integration
  • Configure the files, formats, and data you need

Set up the CLI →

Both the plugin and CLI generate specs consistent with the Specs schema, a specifications model architected to unify component definitions for implementation across web, iOS, Android, and Figma.

Repeatable, production-grade specs in seconds

Evaluating and differencing Figma styles and layers across variants is mechanical and predictable — and with Specs, incredibly fast and efficient.

Update Figma → Generate specs → Agents refine → Update component

The result is a spec that's compact yet complete — not noisy like Figma's REST API data — and built on a schema that agents and engineers can extend. Leave inference about behavior, accessibility, motion, and nuanced customization downstream, where AI agents excel.

Specs ecosystemAgentic Figma extraction
Speed~1 sec (CLI) / ~10 sec (Plugin) per component~5–10 minutes per component
AI costScripted — 0 AI tokens per component25/50/100,000+ AI tokens per component
ConsistencyDeterministic and repeatableInference errors, gaps, and overconfidence
OutputSchema-valid YAML/MD, ideal for testing and versioningUnstructured Markdown that complicates repeatable verification
PlatformsTuned for cross-platform output and configurable Figma intentsInterprets and infers intents

Packages

@directededges/specs-cli

Command-line interface (CLI) for generating component specifications from Figma design files.

# 1. Install cli globally to run with the command `specs`
npm install -g @directededges/specs-cli
# 2. Initialize a specs.config.yaml file
specs init
# 3. Edit the config for your Figma file key and preferred settings # 4. Set up an .env file with a Figma PAT and – if subscribed - license key# 5. Fetch raw Figma data (file, variables, styles)
specs fetch
# 6. Scan the file to discover components and build a manifest
specs scan
# 7. Select components in the manifest to be generated# 8. Generate specs from the manifest
specs generate

Helpful documentation includes:

@directededges/specs-schema

The shared type system and JSON schema that defines the structure of UI component specifications is a dependency of specs-cli and installed when you install the command line interface as above. However, it is also available as a standalone package.

npm install @directededges/specs-schema

Exports include:

  • JSON Schema — the canonical schema for component spec output
  • TypeScript types — complete type definitions for all schema entities (Component, Config, Styles, Element, AnyProp, etc.)
  • DEFAULT_CONFIG — a runtime configuration object controlling output shape (format, token resolution, variant depth, etc.)

Learn more in the Schema docs, including details on each property including component, variants, styles, props and more.

@directededges/specs-from-figma

The specs-from-figma package is the engine that converts Figma assets into specs and is used for both the command line interface and the associated Figma plugin. It is developed in a private repository and its published package is installed as a dependency of the command line interface.

Architectural Decision Records

Schema changes are proposed and tracked through ADRs in the adr/ directory. Each ADR documents the context, options considered, and decision for a type or schema modification.

Contributing

Contributions are welcome. Clone the repo, run npm install at the root, and use npm run build and npm test to validate changes. All packages use Vitest with globals enabled.

Agents

This repo includes Claude Code agent skills for the full ADR lifecycle:

SkillPurpose
/specs.adr.createDraft a new ADR, claim the next number, and reserve it in the index
/specs.adr.implementApply the type and schema changes described in an ADR to types, schema, tests, and changelog
/specs.adr.acceptValidate the implementation is clean, mark the ADR as ACCEPTED, and update the index

Issues

Found a bug or have a feature request? Please check if it already exists in our Issues before creating a new one.

For bug reports, include:

  • Figma version and operating system
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)

For feature requests, include:

  • Clear description of the feature
  • Use case and benefits
  • Any relevant mockups or examples

Questions? Visit our Slack community.

Licensing

This repository contains packages with different licenses:

Attribution (Schema)

When extending or reusing the specs schema, you must:

Example attribution:

"This project uses the Specs UI Component Schema by Nathan Curtis of Directed Edges, licensed under CC BY 4.0."


Disclaimer: This is an independent project and is not officially affiliated with Figma Inc.

About

Schema, types, and command line tools to record and manage UI component specifications.

Resources

Stars

126 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DirectedEdges/specs: Schema, types, and command line tools to record and manage UI component specifications. · GitHub
Skip to content

Repository files navigation

specs

Specs is a fast, deterministic ecosystem for defining and generating production-ready component specifications across platforms. Available as a Figma plugin and a command-line interface, Specs produces compact, schema-valid specs — sidestepping the cost and errors of agentic Figma extraction.

Get started

Plugin

  • Visualize specs on-canvas in incomparable detail
  • Copy and paste compact spec data into LLMs
  • Customize output for styling and layout
  • Configure advanced data settings in the UI

Open the plugin →

CLI

  • Quickly initialize an environment and fetch data
  • Generate 50 component specs in a minute
  • Set up for continuous integration
  • Configure the files, formats, and data you need

Set up the CLI →

Both the plugin and CLI generate specs consistent with the Specs schema, a specifications model architected to unify component definitions for implementation across web, iOS, Android, and Figma.

Repeatable, production-grade specs in seconds

Evaluating and differencing Figma styles and layers across variants is mechanical and predictable — and with Specs, incredibly fast and efficient.

Update Figma → Generate specs → Agents refine → Update component

The result is a spec that's compact yet complete — not noisy like Figma's REST API data — and built on a schema that agents and engineers can extend. Leave inference about behavior, accessibility, motion, and nuanced customization downstream, where AI agents excel.

Specs ecosystemAgentic Figma extraction
Speed~1 sec (CLI) / ~10 sec (Plugin) per component~5–10 minutes per component
AI costScripted — 0 AI tokens per component25/50/100,000+ AI tokens per component
ConsistencyDeterministic and repeatableInference errors, gaps, and overconfidence
OutputSchema-valid YAML/MD, ideal for testing and versioningUnstructured Markdown that complicates repeatable verification
PlatformsTuned for cross-platform output and configurable Figma intentsInterprets and infers intents

Packages

@directededges/specs-cli

Command-line interface (CLI) for generating component specifications from Figma design files.

# 1. Install cli globally to run with the command `specs`
npm install -g @directededges/specs-cli
# 2. Initialize a specs.config.yaml file
specs init
# 3. Edit the config for your Figma file key and preferred settings # 4. Set up an .env file with a Figma PAT and – if subscribed - license key# 5. Fetch raw Figma data (file, variables, styles)
specs fetch
# 6. Scan the file to discover components and build a manifest
specs scan
# 7. Select components in the manifest to be generated# 8. Generate specs from the manifest
specs generate

Helpful documentation includes:

@directededges/specs-schema

The shared type system and JSON schema that defines the structure of UI component specifications is a dependency of specs-cli and installed when you install the command line interface as above. However, it is also available as a standalone package.

npm install @directededges/specs-schema

Exports include:

  • JSON Schema — the canonical schema for component spec output
  • TypeScript types — complete type definitions for all schema entities (Component, Config, Styles, Element, AnyProp, etc.)
  • DEFAULT_CONFIG — a runtime configuration object controlling output shape (format, token resolution, variant depth, etc.)

Learn more in the Schema docs, including details on each property including component, variants, styles, props and more.

@directededges/specs-from-figma

The specs-from-figma package is the engine that converts Figma assets into specs and is used for both the command line interface and the associated Figma plugin. It is developed in a private repository and its published package is installed as a dependency of the command line interface.

Architectural Decision Records

Schema changes are proposed and tracked through ADRs in the adr/ directory. Each ADR documents the context, options considered, and decision for a type or schema modification.

Contributing

Contributions are welcome. Clone the repo, run npm install at the root, and use npm run build and npm test to validate changes. All packages use Vitest with globals enabled.

Agents

This repo includes Claude Code agent skills for the full ADR lifecycle:

SkillPurpose
/specs.adr.createDraft a new ADR, claim the next number, and reserve it in the index
/specs.adr.implementApply the type and schema changes described in an ADR to types, schema, tests, and changelog
/specs.adr.acceptValidate the implementation is clean, mark the ADR as ACCEPTED, and update the index

Issues

Found a bug or have a feature request? Please check if it already exists in our Issues before creating a new one.

For bug reports, include:

  • Figma version and operating system
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)

For feature requests, include:

  • Clear description of the feature
  • Use case and benefits
  • Any relevant mockups or examples

Questions? Visit our Slack community.

Licensing

This repository contains packages with different licenses:

Attribution (Schema)

When extending or reusing the specs schema, you must:

Example attribution:

"This project uses the Specs UI Component Schema by Nathan Curtis of Directed Edges, licensed under CC BY 4.0."


Disclaimer: This is an independent project and is not officially affiliated with Figma Inc.

About

Schema, types, and command line tools to record and manage UI component specifications.

Resources

Stars

126 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - DirectedEdges/specs: Schema, types, and command line tools to record and manage UI component specifications. · GitHub
Skip to content

Repository files navigation

specs

Specs is a fast, deterministic ecosystem for defining and generating production-ready component specifications across platforms. Available as a Figma plugin and a command-line interface, Specs produces compact, schema-valid specs — sidestepping the cost and errors of agentic Figma extraction.

Get started

Plugin

  • Visualize specs on-canvas in incomparable detail
  • Copy and paste compact spec data into LLMs
  • Customize output for styling and layout
  • Configure advanced data settings in the UI

Open the plugin →

CLI

  • Quickly initialize an environment and fetch data
  • Generate 50 component specs in a minute
  • Set up for continuous integration
  • Configure the files, formats, and data you need

Set up the CLI →

Both the plugin and CLI generate specs consistent with the Specs schema, a specifications model architected to unify component definitions for implementation across web, iOS, Android, and Figma.

Repeatable, production-grade specs in seconds

Evaluating and differencing Figma styles and layers across variants is mechanical and predictable — and with Specs, incredibly fast and efficient.

Update Figma → Generate specs → Agents refine → Update component

The result is a spec that's compact yet complete — not noisy like Figma's REST API data — and built on a schema that agents and engineers can extend. Leave inference about behavior, accessibility, motion, and nuanced customization downstream, where AI agents excel.

Specs ecosystemAgentic Figma extraction
Speed~1 sec (CLI) / ~10 sec (Plugin) per component~5–10 minutes per component
AI costScripted — 0 AI tokens per component25/50/100,000+ AI tokens per component
ConsistencyDeterministic and repeatableInference errors, gaps, and overconfidence
OutputSchema-valid YAML/MD, ideal for testing and versioningUnstructured Markdown that complicates repeatable verification
PlatformsTuned for cross-platform output and configurable Figma intentsInterprets and infers intents

Packages

@directededges/specs-cli

Command-line interface (CLI) for generating component specifications from Figma design files.

# 1. Install cli globally to run with the command `specs`
npm install -g @directededges/specs-cli
# 2. Initialize a specs.config.yaml file
specs init
# 3. Edit the config for your Figma file key and preferred settings # 4. Set up an .env file with a Figma PAT and – if subscribed - license key# 5. Fetch raw Figma data (file, variables, styles)
specs fetch
# 6. Scan the file to discover components and build a manifest
specs scan
# 7. Select components in the manifest to be generated# 8. Generate specs from the manifest
specs generate

Helpful documentation includes:

@directededges/specs-schema

The shared type system and JSON schema that defines the structure of UI component specifications is a dependency of specs-cli and installed when you install the command line interface as above. However, it is also available as a standalone package.

npm install @directededges/specs-schema

Exports include:

  • JSON Schema — the canonical schema for component spec output
  • TypeScript types — complete type definitions for all schema entities (Component, Config, Styles, Element, AnyProp, etc.)
  • DEFAULT_CONFIG — a runtime configuration object controlling output shape (format, token resolution, variant depth, etc.)

Learn more in the Schema docs, including details on each property including component, variants, styles, props and more.

@directededges/specs-from-figma

The specs-from-figma package is the engine that converts Figma assets into specs and is used for both the command line interface and the associated Figma plugin. It is developed in a private repository and its published package is installed as a dependency of the command line interface.

Architectural Decision Records

Schema changes are proposed and tracked through ADRs in the adr/ directory. Each ADR documents the context, options considered, and decision for a type or schema modification.

Contributing

Contributions are welcome. Clone the repo, run npm install at the root, and use npm run build and npm test to validate changes. All packages use Vitest with globals enabled.

Agents

This repo includes Claude Code agent skills for the full ADR lifecycle:

SkillPurpose
/specs.adr.createDraft a new ADR, claim the next number, and reserve it in the index
/specs.adr.implementApply the type and schema changes described in an ADR to types, schema, tests, and changelog
/specs.adr.acceptValidate the implementation is clean, mark the ADR as ACCEPTED, and update the index

Issues

Found a bug or have a feature request? Please check if it already exists in our Issues before creating a new one.

For bug reports, include:

  • Figma version and operating system
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)

For feature requests, include:

  • Clear description of the feature
  • Use case and benefits
  • Any relevant mockups or examples

Questions? Visit our Slack community.

Licensing

This repository contains packages with different licenses:

Attribution (Schema)

When extending or reusing the specs schema, you must:

Example attribution:

"This project uses the Specs UI Component Schema by Nathan Curtis of Directed Edges, licensed under CC BY 4.0."


Disclaimer: This is an independent project and is not officially affiliated with Figma Inc.

About

Schema, types, and command line tools to record and manage UI component specifications.

Resources

Stars

126 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DirectedEdges/specs: Schema, types, and command line tools to record and manage UI component specifications. · GitHub
Skip to content

Repository files navigation

specs

Specs is a fast, deterministic ecosystem for defining and generating production-ready component specifications across platforms. Available as a Figma plugin and a command-line interface, Specs produces compact, schema-valid specs — sidestepping the cost and errors of agentic Figma extraction.

Get started

Plugin

  • Visualize specs on-canvas in incomparable detail
  • Copy and paste compact spec data into LLMs
  • Customize output for styling and layout
  • Configure advanced data settings in the UI

Open the plugin →

CLI

  • Quickly initialize an environment and fetch data
  • Generate 50 component specs in a minute
  • Set up for continuous integration
  • Configure the files, formats, and data you need

Set up the CLI →

Both the plugin and CLI generate specs consistent with the Specs schema, a specifications model architected to unify component definitions for implementation across web, iOS, Android, and Figma.

Repeatable, production-grade specs in seconds

Evaluating and differencing Figma styles and layers across variants is mechanical and predictable — and with Specs, incredibly fast and efficient.

Update Figma → Generate specs → Agents refine → Update component

The result is a spec that's compact yet complete — not noisy like Figma's REST API data — and built on a schema that agents and engineers can extend. Leave inference about behavior, accessibility, motion, and nuanced customization downstream, where AI agents excel.

Specs ecosystemAgentic Figma extraction
Speed~1 sec (CLI) / ~10 sec (Plugin) per component~5–10 minutes per component
AI costScripted — 0 AI tokens per component25/50/100,000+ AI tokens per component
ConsistencyDeterministic and repeatableInference errors, gaps, and overconfidence
OutputSchema-valid YAML/MD, ideal for testing and versioningUnstructured Markdown that complicates repeatable verification
PlatformsTuned for cross-platform output and configurable Figma intentsInterprets and infers intents

Packages

@directededges/specs-cli

Command-line interface (CLI) for generating component specifications from Figma design files.

# 1. Install cli globally to run with the command `specs`
npm install -g @directededges/specs-cli
# 2. Initialize a specs.config.yaml file
specs init
# 3. Edit the config for your Figma file key and preferred settings # 4. Set up an .env file with a Figma PAT and – if subscribed - license key# 5. Fetch raw Figma data (file, variables, styles)
specs fetch
# 6. Scan the file to discover components and build a manifest
specs scan
# 7. Select components in the manifest to be generated# 8. Generate specs from the manifest
specs generate

Helpful documentation includes:

@directededges/specs-schema

The shared type system and JSON schema that defines the structure of UI component specifications is a dependency of specs-cli and installed when you install the command line interface as above. However, it is also available as a standalone package.

npm install @directededges/specs-schema

Exports include:

  • JSON Schema — the canonical schema for component spec output
  • TypeScript types — complete type definitions for all schema entities (Component, Config, Styles, Element, AnyProp, etc.)
  • DEFAULT_CONFIG — a runtime configuration object controlling output shape (format, token resolution, variant depth, etc.)

Learn more in the Schema docs, including details on each property including component, variants, styles, props and more.

@directededges/specs-from-figma

The specs-from-figma package is the engine that converts Figma assets into specs and is used for both the command line interface and the associated Figma plugin. It is developed in a private repository and its published package is installed as a dependency of the command line interface.

Architectural Decision Records

Schema changes are proposed and tracked through ADRs in the adr/ directory. Each ADR documents the context, options considered, and decision for a type or schema modification.

Contributing

Contributions are welcome. Clone the repo, run npm install at the root, and use npm run build and npm test to validate changes. All packages use Vitest with globals enabled.

Agents

This repo includes Claude Code agent skills for the full ADR lifecycle:

SkillPurpose
/specs.adr.createDraft a new ADR, claim the next number, and reserve it in the index
/specs.adr.implementApply the type and schema changes described in an ADR to types, schema, tests, and changelog
/specs.adr.acceptValidate the implementation is clean, mark the ADR as ACCEPTED, and update the index

Issues

Found a bug or have a feature request? Please check if it already exists in our Issues before creating a new one.

For bug reports, include:

  • Figma version and operating system
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)

For feature requests, include:

  • Clear description of the feature
  • Use case and benefits
  • Any relevant mockups or examples

Questions? Visit our Slack community.

Licensing

This repository contains packages with different licenses:

Attribution (Schema)

When extending or reusing the specs schema, you must:

Example attribution:

"This project uses the Specs UI Component Schema by Nathan Curtis of Directed Edges, licensed under CC BY 4.0."


Disclaimer: This is an independent project and is not officially affiliated with Figma Inc.

About

Schema, types, and command line tools to record and manage UI component specifications.

Resources

Stars

126 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - DirectedEdges/specs: Schema, types, and command line tools to record and manage UI component specifications. · GitHub
Skip to content

Repository files navigation

specs

Specs is a fast, deterministic ecosystem for defining and generating production-ready component specifications across platforms. Available as a Figma plugin and a command-line interface, Specs produces compact, schema-valid specs — sidestepping the cost and errors of agentic Figma extraction.

Get started

Plugin

  • Visualize specs on-canvas in incomparable detail
  • Copy and paste compact spec data into LLMs
  • Customize output for styling and layout
  • Configure advanced data settings in the UI

Open the plugin →

CLI

  • Quickly initialize an environment and fetch data
  • Generate 50 component specs in a minute
  • Set up for continuous integration
  • Configure the files, formats, and data you need

Set up the CLI →

Both the plugin and CLI generate specs consistent with the Specs schema, a specifications model architected to unify component definitions for implementation across web, iOS, Android, and Figma.

Repeatable, production-grade specs in seconds

Evaluating and differencing Figma styles and layers across variants is mechanical and predictable — and with Specs, incredibly fast and efficient.

Update Figma → Generate specs → Agents refine → Update component

The result is a spec that's compact yet complete — not noisy like Figma's REST API data — and built on a schema that agents and engineers can extend. Leave inference about behavior, accessibility, motion, and nuanced customization downstream, where AI agents excel.

Specs ecosystemAgentic Figma extraction
Speed~1 sec (CLI) / ~10 sec (Plugin) per component~5–10 minutes per component
AI costScripted — 0 AI tokens per component25/50/100,000+ AI tokens per component
ConsistencyDeterministic and repeatableInference errors, gaps, and overconfidence
OutputSchema-valid YAML/MD, ideal for testing and versioningUnstructured Markdown that complicates repeatable verification
PlatformsTuned for cross-platform output and configurable Figma intentsInterprets and infers intents

Packages

@directededges/specs-cli

Command-line interface (CLI) for generating component specifications from Figma design files.

# 1. Install cli globally to run with the command `specs`
npm install -g @directededges/specs-cli
# 2. Initialize a specs.config.yaml file
specs init
# 3. Edit the config for your Figma file key and preferred settings # 4. Set up an .env file with a Figma PAT and – if subscribed - license key# 5. Fetch raw Figma data (file, variables, styles)
specs fetch
# 6. Scan the file to discover components and build a manifest
specs scan
# 7. Select components in the manifest to be generated# 8. Generate specs from the manifest
specs generate

Helpful documentation includes:

@directededges/specs-schema

The shared type system and JSON schema that defines the structure of UI component specifications is a dependency of specs-cli and installed when you install the command line interface as above. However, it is also available as a standalone package.

npm install @directededges/specs-schema

Exports include:

  • JSON Schema — the canonical schema for component spec output
  • TypeScript types — complete type definitions for all schema entities (Component, Config, Styles, Element, AnyProp, etc.)
  • DEFAULT_CONFIG — a runtime configuration object controlling output shape (format, token resolution, variant depth, etc.)

Learn more in the Schema docs, including details on each property including component, variants, styles, props and more.

@directededges/specs-from-figma

The specs-from-figma package is the engine that converts Figma assets into specs and is used for both the command line interface and the associated Figma plugin. It is developed in a private repository and its published package is installed as a dependency of the command line interface.

Architectural Decision Records

Schema changes are proposed and tracked through ADRs in the adr/ directory. Each ADR documents the context, options considered, and decision for a type or schema modification.

Contributing

Contributions are welcome. Clone the repo, run npm install at the root, and use npm run build and npm test to validate changes. All packages use Vitest with globals enabled.

Agents

This repo includes Claude Code agent skills for the full ADR lifecycle:

SkillPurpose
/specs.adr.createDraft a new ADR, claim the next number, and reserve it in the index
/specs.adr.implementApply the type and schema changes described in an ADR to types, schema, tests, and changelog
/specs.adr.acceptValidate the implementation is clean, mark the ADR as ACCEPTED, and update the index

Issues

Found a bug or have a feature request? Please check if it already exists in our Issues before creating a new one.

For bug reports, include:

  • Figma version and operating system
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)

For feature requests, include:

  • Clear description of the feature
  • Use case and benefits
  • Any relevant mockups or examples

Questions? Visit our Slack community.

Licensing

This repository contains packages with different licenses:

Attribution (Schema)

When extending or reusing the specs schema, you must:

Example attribution:

"This project uses the Specs UI Component Schema by Nathan Curtis of Directed Edges, licensed under CC BY 4.0."


Disclaimer: This is an independent project and is not officially affiliated with Figma Inc.

About

Schema, types, and command line tools to record and manage UI component specifications.

Resources

Stars

126 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - DirectedEdges/specs: Schema, types, and command line tools to record and manage UI component specifications. · GitHub
Skip to content

Repository files navigation

specs

Specs is a fast, deterministic ecosystem for defining and generating production-ready component specifications across platforms. Available as a Figma plugin and a command-line interface, Specs produces compact, schema-valid specs — sidestepping the cost and errors of agentic Figma extraction.

Get started

Plugin

  • Visualize specs on-canvas in incomparable detail
  • Copy and paste compact spec data into LLMs
  • Customize output for styling and layout
  • Configure advanced data settings in the UI

Open the plugin →

CLI

  • Quickly initialize an environment and fetch data
  • Generate 50 component specs in a minute
  • Set up for continuous integration
  • Configure the files, formats, and data you need

Set up the CLI →

Both the plugin and CLI generate specs consistent with the Specs schema, a specifications model architected to unify component definitions for implementation across web, iOS, Android, and Figma.

Repeatable, production-grade specs in seconds

Evaluating and differencing Figma styles and layers across variants is mechanical and predictable — and with Specs, incredibly fast and efficient.

Update Figma → Generate specs → Agents refine → Update component

The result is a spec that's compact yet complete — not noisy like Figma's REST API data — and built on a schema that agents and engineers can extend. Leave inference about behavior, accessibility, motion, and nuanced customization downstream, where AI agents excel.

Specs ecosystemAgentic Figma extraction
Speed~1 sec (CLI) / ~10 sec (Plugin) per component~5–10 minutes per component
AI costScripted — 0 AI tokens per component25/50/100,000+ AI tokens per component
ConsistencyDeterministic and repeatableInference errors, gaps, and overconfidence
OutputSchema-valid YAML/MD, ideal for testing and versioningUnstructured Markdown that complicates repeatable verification
PlatformsTuned for cross-platform output and configurable Figma intentsInterprets and infers intents

Packages

@directededges/specs-cli

Command-line interface (CLI) for generating component specifications from Figma design files.

# 1. Install cli globally to run with the command `specs`
npm install -g @directededges/specs-cli
# 2. Initialize a specs.config.yaml file
specs init
# 3. Edit the config for your Figma file key and preferred settings # 4. Set up an .env file with a Figma PAT and – if subscribed - license key# 5. Fetch raw Figma data (file, variables, styles)
specs fetch
# 6. Scan the file to discover components and build a manifest
specs scan
# 7. Select components in the manifest to be generated# 8. Generate specs from the manifest
specs generate

Helpful documentation includes:

@directededges/specs-schema

The shared type system and JSON schema that defines the structure of UI component specifications is a dependency of specs-cli and installed when you install the command line interface as above. However, it is also available as a standalone package.

npm install @directededges/specs-schema

Exports include:

  • JSON Schema — the canonical schema for component spec output
  • TypeScript types — complete type definitions for all schema entities (Component, Config, Styles, Element, AnyProp, etc.)
  • DEFAULT_CONFIG — a runtime configuration object controlling output shape (format, token resolution, variant depth, etc.)

Learn more in the Schema docs, including details on each property including component, variants, styles, props and more.

@directededges/specs-from-figma

The specs-from-figma package is the engine that converts Figma assets into specs and is used for both the command line interface and the associated Figma plugin. It is developed in a private repository and its published package is installed as a dependency of the command line interface.

Architectural Decision Records

Schema changes are proposed and tracked through ADRs in the adr/ directory. Each ADR documents the context, options considered, and decision for a type or schema modification.

Contributing

Contributions are welcome. Clone the repo, run npm install at the root, and use npm run build and npm test to validate changes. All packages use Vitest with globals enabled.

Agents

This repo includes Claude Code agent skills for the full ADR lifecycle:

SkillPurpose
/specs.adr.createDraft a new ADR, claim the next number, and reserve it in the index
/specs.adr.implementApply the type and schema changes described in an ADR to types, schema, tests, and changelog
/specs.adr.acceptValidate the implementation is clean, mark the ADR as ACCEPTED, and update the index

Issues

Found a bug or have a feature request? Please check if it already exists in our Issues before creating a new one.

For bug reports, include:

  • Figma version and operating system
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)

For feature requests, include:

  • Clear description of the feature
  • Use case and benefits
  • Any relevant mockups or examples

Questions? Visit our Slack community.

Licensing

This repository contains packages with different licenses:

Attribution (Schema)

When extending or reusing the specs schema, you must:

Example attribution:

"This project uses the Specs UI Component Schema by Nathan Curtis of Directed Edges, licensed under CC BY 4.0."


Disclaimer: This is an independent project and is not officially affiliated with Figma Inc.

About

Schema, types, and command line tools to record and manage UI component specifications.

Resources

Stars

126 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages