Skip to content

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

FeatureOpen SourcePro
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

  1. Purchase a subscription

    Visit contractshield.dev/pricing and choose a plan:

    PlanPriceBest For
    Pro Monthly$49/monthTesting, small projects
    Pro Yearly$39/monthProduction (save 20%)
    EnterpriseCustomLarge teams, custom needs
  2. Receive your license key

    After purchase, you’ll receive an email with your license key (UUID format):

    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  3. Activate in your application

    Add the license key to your ContractShield configuration.

Activating Your License

.env
CONTRACTSHIELD_LICENSE_KEY=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
import { 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 used

How Validation Works

  1. Your app sends the license key to api.lemonsqueezy.com
  2. LemonSqueezy verifies the key and returns status
  3. ContractShield caches the result (valid for 24 hours)
  4. 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).

PlanInstances
Pro3
EnterpriseUnlimited

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

  1. Go to LemonSqueezy Customer Portal
  2. Sign in with your purchase email
  3. Manage billing, update card, cancel

Switch Monthly ↔ Yearly

You can switch plans anytime. Prorated credits apply.

Cancel Subscription

  1. Go to Customer Portal
  2. Click “Cancel subscription”
  3. 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:

  1. Upgrade to Enterprise (unlimited instances)
  2. Deactivate unused instances
  3. Contact support to reset activations

”License validation failed”

Network issue reaching the license API.

Solutions:

  1. Check outbound connectivity to api.lemonsqueezy.com
  2. Check firewall/proxy settings
  3. Retry after a few minutes

License not working in Kubernetes

Each pod counts as an instance. For many pods:

  1. Use Enterprise license (unlimited)
  2. Or use centralized deployment (single license instance)

Support

ChannelOpen SourcePro
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.