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.
- Purchase Pro
- Manage your subscription via Polar
- Need help? Contact nathan@specsplugin.com
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:
| Feature | What it adds |
|---|---|
| Non-default variants | All variant combinations beyond the default — size, state, kind, and any other variant properties |
| Design token references | Variable bindings on style properties (spacing, color, corner radius, stroke, typography, shadows, gradients) — connecting raw values to your token system |
| Named style references | Links 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 combinations | The 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: truePro — 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
variablesin thedataarray. Style references requirestyles. 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):
-
.envfile in your project directory (loaded automatically):SPECS_LICENSE_KEY=your-license-key -
Environment variable:
SPECS_LICENSE_KEYTerminal window export SPECS_LICENSE_KEY="your-license-key"specs generate -
CLI flag:
-lor--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:
| Scenario | CLI output |
|---|---|
| Valid key | License: PRO (active) |
| Invalid key | License: FREE (invalid — key not recognized) |
| Expired key | License: FREE (expired — key expired) |
| Network error | License: 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, noneWhen 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
- Check that the CLI prints
License: PRO (active)after generation. If it printsFREE, the key wasn’t accepted. - Verify the key is being picked up: CLI flag (
-l) takes priority overSPECS_LICENSE_KEYenv var, which takes priority over.envfile. Make sure.envis in the directory you’re running from. - For token references specifically, confirm your source config includes
variablesin thedataarray — 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
- Getting Started — Installation and first spec
- Configuration Reference — All config options
- Config Schema — Config type reference and defaults