Skip to content

Licensing

Specs works at two tiers: Free and Pro. Both tiers use the same configuration and generate the same component structure — the difference is in how much detail the generate command’s output contains. Other commands (fetch, scan, init) are not affected by licensing.

A Pro license can be purchased via Polar. Once checkout is completed, you’ll receive an email with license keys. From there you can manage the subscription via your Polar customer portal.

What You Get

A Pro subscription is $10/month and includes:

Plugin License

Your Figma plugin license key activates Pro features when generating specs from the Figma plugin. Each key is meant for an individual user and can be activated on up to two machines (e.g. a work laptop and a personal machine).

CLI License

A separate CLI license key activates Pro features when generating specs via the command line.

CLI usage is metered at 50 generations per month, resetting each billing cycle. Each generate call that produces Pro-tier output counts as one generation. Other commands — fetch, scan, init — are not metered. If you hit your monthly limit, you can purchase top-off packs to add more generations without waiting for the next cycle.

To avoid spending generations unnecessarily, omit your license key during trial runs — while you’re iterating on config, testing component selection, or troubleshooting setup, free-tier output gives you the same structure without counting against your quota. Save Pro runs for when your config and component selection are dialed in.

Subscription and Billing

Pro subscriptions are purchased and managed through Polar, the merchant of record for Specs. Polar is a platform built for developers selling digital products — they handle payment processing, subscription management, and invoicing so you can manage your plan from a single portal.

From your Polar dashboard you can:

  • View your current billing cycle and generation usage
  • Upgrade, downgrade, or cancel your subscription
  • Purchase top-off generation packs
  • Download invoices

Free vs Pro

Free

Without a license key, every generated spec includes:

  • Component structure — anatomy (element tree), props (with raw values), and layout
  • Default variant — the component in its base state, with all style values as raw numbers, colors, and strings
  • Metadata — generator info, author, timestamps, and the config used to produce the spec

Free-tier output gives you a complete structural picture of each component — enough to understand what a component is, how it’s built, and what its default state looks like.

Pro

With a valid license key, specs additionally include:

FeatureWhat it adds
Non-default variantsAll variant combinations beyond the default — size, state, kind, and any other variant properties
Design token referencesVariable bindings on style properties (spacing, color, corner radius, stroke, typography, shadows, gradients) — connecting raw values to your token system
Named style referencesLinks to Figma text styles, color styles, and effect styles instead of inline values
Prop bindings$binding references connecting anatomy elements to component props (slot content, instance swaps, visibility toggles, text overrides)
Invalid combinationsThe invalidVariantCombinations array showing which property combinations are impossible (requires config.include.invalidCombinations: true)

Example: Free vs Pro Output

The same component property at each tier:

Free — raw values only, default variant only:

elements:
label:
typography:
fontSize: 14
lineHeight: 20
fill:
color: "#1A1A1A"
visible: true

Pro — token references, style references, and bindings:

elements:
label:
typography:
$style:
name: Body/Medium
key: S:abc123
fontSize:
$value: 14
$variable: typography/body-medium/font-size
lineHeight:
$value: 20
$variable: typography/body-medium/line-height
fill:
color:
$value: "#1A1A1A"
$variable: colors/text/primary
visible:
$value: true
$binding: "#/props/showLabel"

Pro features are never stripped from output — they’re simply not created at the free tier. If a style property has a bound Figma variable, free-tier output shows the raw resolved value; pro-tier output shows the token reference alongside the value.

Note: Token references require that your source config includes variables in the data array. Style references require styles. See Configuration for details.

Config Settings and Licensing

All config settings work at both tiers. Two settings interact with licensing:

format.tokens

Controls how token references are serialized — not whether they appear. At free tier, no token references are created regardless of this setting. At pro tier, this controls the output shape.

include.invalidCombinations

Controls whether invalid variant combinations are computed. Even when set to true (the default), this feature requires a pro license. At free tier, the setting is accepted but the computation is skipped — the invalidVariantCombinations array is simply absent from output.

Activating a License

CLI

Provide your license key in any of these ways (recommended first):

  1. .env file in your project directory (loaded automatically):

    SPECS_LICENSE_KEY=your-license-key
  2. Environment variable: SPECS_LICENSE_KEY

    Terminal window
    export SPECS_LICENSE_KEY="your-license-key"
    specs generate
  3. CLI flag: -l or --license (useful for one-off runs or CI)

    Terminal window
    specs generate -l "your-license-key"

When multiple sources are present, CLI flag takes priority over env var, which takes priority over .env file.

What the CLI prints: When a license key is provided, the CLI displays the result after generation:

ScenarioCLI output
Valid keyLicense: PRO (active)
Invalid keyLicense: FREE (invalid — key not recognized)
Expired keyLicense: FREE (expired — key expired)
Network errorLicense: FREE (network-error — could not reach license server)

When no license key is provided, the CLI runs silently in free mode — no license line is printed.

Figma Plugin

Enter your license key in the plugin’s Account pane.

Output Metadata

Generated specs include license information in metadata when a license key was provided:

metadata:
generator:
license:
level: PRO # FREE or PRO
status: active # active, invalid, expired, none

When no license key is provided, the license block is omitted from metadata. When a key is provided but invalid or expired, the block is present with level: FREE and the relevant status.

Troubleshooting

I have a Pro key but my output looks like free tier

  1. Check that the CLI prints License: PRO (active) after generation. If it prints FREE, the key wasn’t accepted.
  2. Verify the key is being picked up: CLI flag (-l) takes priority over SPECS_LICENSE_KEY env var, which takes priority over .env file. Make sure .env is in the directory you’re running from.
  3. For token references specifically, confirm your source config includes variables in the data array — tokens require fetched variable data.

I see “network-error” in the license output License validation requires a brief network call to the license server. If your network blocks outbound HTTPS or you’re offline, validation fails and output falls back to free tier. Generation still completes — it does not error out.

My invalidVariantCombinations are missing This requires both config.include.invalidCombinations: true (the default) and an active Pro license. If either condition is missing, the array is silently omitted.

FAQ

Can I use all config settings at the free tier? Yes. Every config setting is accepted at both tiers. Settings that affect pro-only features (like format.tokens or include.invalidCombinations) are stored in your config and take effect when you add a license key.

Will my specs break if my license expires? No. Previously generated specs are static files — they don’t change. Future generations will produce free-tier output (raw values, default variant only) until the license is renewed.

I just got a Pro license. Do I need to regenerate? Yes. Previously generated specs are static files and won’t retroactively gain Pro features. Run your generation commands again with the license key to produce Pro-tier output.

Are CLI and plugin license keys the same? No. The CLI and Figma plugin use separate license keys. Each is purchased and activated independently.

Does license validation require internet access? Yes. The CLI makes a brief HTTPS call to validate your key. If the network is unavailable, generation continues with free-tier output and reports network-error in the license status. Previously validated sessions do not cache — each generation validates independently.

Can I share my license key with my team? License terms depend on your plan, but generally, no. Each Pro license is intended for an individual user.

See Also