Licensing
import { Aside, Steps, Tabs, TabItem } from ‘@astrojs/starlight/components’;
Licensing
ContractShield uses an open-core model. The core features are free and open source (Apache 2.0). Pro features require a commercial license.
Feature Comparison
| Feature | Open Source | Pro |
|---|---|---|
| Contract validation (JSON Schema) | ✅ | ✅ |
| CEL invariants | ✅ | ✅ |
| Vulnerability checks | ✅ | ✅ |
| Express, Fastify adapters | ✅ | ✅ |
| Webhook validation | ✅ | ✅ |
| Sidecar deployment | ✅ | ✅ |
| Prometheus metrics | ✅ | ✅ |
| Sink-aware RASP | ❌ | ✅ |
| Policy hot reload | ❌ | ✅ |
| Priority support | ❌ | ✅ |
Getting a License
-
Purchase a subscription
Visit contractshield.dev/pricing and choose a plan:
Plan Price Best For Pro Monthly $49/month Testing, small projects Pro Yearly $39/month Production (save 20%) Enterprise Custom Large teams, custom needs -
Receive your license key
After purchase, you’ll receive an email with your license key (UUID format):
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -
Activate in your application
Add the license key to your ContractShield configuration.
Activating Your License
Environment Variable (Recommended)
CONTRACTSHIELD_LICENSE_KEY=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxximport { contractshield } from '@cshield/pep-express';
app.use(contractshield({ policy: './policy.yaml', license: process.env.CONTRACTSHIELD_LICENSE_KEY}));Direct Configuration
app.use(contractshield({ policy: './policy.yaml', license: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'}));License Validation
ContractShield validates your license at startup:
ContractShield Pro activated Plan: Pro Expires: 2027-01-17 Instances: 1/3 usedHow Validation Works
- Your app sends the license key to
api.lemonsqueezy.com - LemonSqueezy verifies the key and returns status
- ContractShield caches the result (valid for 24 hours)
- Pro features are enabled if valid
Offline Mode
If your server can’t reach the license API:
- First run: License validation required (fails if offline)
- Subsequent runs: Cached validation used (up to 7 days)
For air-gapped environments, contact us for offline licensing.
Instance Limits
Each license has an activation limit (default: 3 instances).
| Plan | Instances |
|---|---|
| Pro | 3 |
| Enterprise | Unlimited |
An “instance” is a unique deployment (server, container, pod). Development and staging share the pool.
Checking Usage
import { getLicenseInfo } from '@cshield/license';
const info = await getLicenseInfo(process.env.CONTRACTSHIELD_LICENSE_KEY);
console.log(info);// {// valid: true,// plan: 'Pro',// activationsUsed: 1,// activationsLimit: 3,// expiresAt: '2027-01-17T00:00:00Z'// }Managing Your Subscription
View/Update Subscription
- Go to LemonSqueezy Customer Portal
- Sign in with your purchase email
- Manage billing, update card, cancel
Switch Monthly ↔ Yearly
You can switch plans anytime. Prorated credits apply.
Cancel Subscription
- Go to Customer Portal
- Click “Cancel subscription”
- Your license remains valid until the end of the billing period
Troubleshooting
”Invalid license key”
- Check for typos (copy-paste the full key)
- Verify the key hasn’t expired
- Ensure you’re using the correct environment variable
”Activation limit exceeded”
You’ve deployed to more instances than your plan allows.
Solutions:
- Upgrade to Enterprise (unlimited instances)
- Deactivate unused instances
- Contact support to reset activations
”License validation failed”
Network issue reaching the license API.
Solutions:
- Check outbound connectivity to
api.lemonsqueezy.com - Check firewall/proxy settings
- Retry after a few minutes
License not working in Kubernetes
Each pod counts as an instance. For many pods:
- Use Enterprise license (unlimited)
- Or use centralized deployment (single license instance)
Support
| Channel | Open Source | Pro |
|---|---|---|
| GitHub Issues | ✅ | ✅ |
| GitHub Discussions | ✅ | ✅ |
| Email support | ❌ | ✅ (48h response) |
| Priority fixes | ❌ | ✅ |
Pro support email: [email protected]
Enterprise Licensing
For teams needing:
- Unlimited instances
- Custom SLA
- Dedicated support engineer
- SSO/SAML integration
- Invoice billing
Contact: [email protected]
FAQ
Can I try Pro before buying?
Yes! Pro includes a 14-day free trial. No credit card required.
What happens if my license expires?
Pro features stop working, but your app continues with Open Source features. No downtime.
Can I use one license for dev + staging + production?
Yes, as long as you stay within the instance limit (3 for Pro).
Do I need internet access for the license?
For initial activation, yes. After that, the license is cached for up to 7 days.
Can I transfer my license?
Licenses are non-transferable between organizations. Contact support for exceptions.