diff --git a/package.json b/package.json index 9e2e51b5..4989b2d8 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "build": "astro build", "preview": "astro preview", "astro": "astro", - "lint:links": "astro build" + "lint:links": "astro build", + "sync:licensing-tags": "node scripts/sync-licensing-tags.mjs" }, "dependencies": { "@astrojs/markdoc": "^0.15.10", diff --git a/scripts/sync-licensing-tags.mjs b/scripts/sync-licensing-tags.mjs new file mode 100644 index 00000000..f3464a7b --- /dev/null +++ b/scripts/sync-licensing-tags.mjs @@ -0,0 +1,128 @@ +#!/usr/bin/env node + +/** + * Syncs the `tags` frontmatter in service docs with the canonical + * licensing data in src/data/licensing/current-plans.json. + * + * Usage: node scripts/sync-licensing-tags.mjs [--dry-run] + * + * --dry-run Print what would change without writing files. + */ + +import { readFileSync, writeFileSync, readdirSync } from 'node:fs'; +import { join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); +const ROOT = resolve(__dirname, '..'); + +const JSON_PATH = join(ROOT, 'src/data/licensing/current-plans.json'); +const SERVICES_DIR = join(ROOT, 'src/content/docs/aws/services'); + +const PLAN_HIERARCHY = ['Hobby', 'Base', 'Ultimate', 'Enterprise']; + +const dryRun = process.argv.includes('--dry-run'); + +const licensingData = JSON.parse(readFileSync(JSON_PATH, 'utf-8')); + +const serviceTagsMap = new Map(); + +for (const category of licensingData.categories) { + for (const svc of category.services) { + if (!svc.serviceId) continue; + if (!serviceTagsMap.has(svc.serviceId)) { + serviceTagsMap.set(svc.serviceId, new Set()); + } + serviceTagsMap.get(svc.serviceId).add(svc.minimumPlan); + } +} + +function deriveTags(serviceId) { + const plans = serviceTagsMap.get(serviceId); + if (!plans) return null; + return [...plans].sort( + (a, b) => PLAN_HIERARCHY.indexOf(a) - PLAN_HIERARCHY.indexOf(b) + ); +} + +const files = readdirSync(SERVICES_DIR).filter((f) => f.endsWith('.mdx')); + +let updated = 0; +let skipped = 0; +let unchanged = 0; + +for (const file of files) { + const serviceId = file.replace('.mdx', ''); + + if (serviceId === 'index') continue; + + const expectedTags = deriveTags(serviceId); + + if (!expectedTags) { + skipped++; + continue; + } + + const filePath = join(SERVICES_DIR, file); + const content = readFileSync(filePath, 'utf-8'); + + const fmMatch = content.match(/^(---\n)([\s\S]*?\n)(---)/); + if (!fmMatch) { + console.warn(` WARN: no frontmatter in ${file}, skipping`); + skipped++; + continue; + } + + const fmOpen = fmMatch[1]; + const fmBody = fmMatch[2]; + const fmClose = fmMatch[3]; + const afterFm = content.slice(fmMatch[0].length); + + const tagsLine = `tags: [${expectedTags.map((t) => `"${t}"`).join(', ')}]`; + + const existingTagsMatch = fmBody.match( + /^tags:\s*\[([^\]]*)\][^\S\n]*$/m + ); + + let newFmBody; + + if (existingTagsMatch) { + const currentTags = existingTagsMatch[1] + .split(',') + .map((t) => t.trim().replace(/["']/g, '')) + .filter(Boolean) + .sort((a, b) => PLAN_HIERARCHY.indexOf(a) - PLAN_HIERARCHY.indexOf(b)); + + if ( + currentTags.length === expectedTags.length && + currentTags.every((t, i) => t === expectedTags[i]) + ) { + unchanged++; + continue; + } + + newFmBody = fmBody.replace(/^tags:\s*\[.*\][^\S\n]*$/m, tagsLine); + } else { + newFmBody = fmBody + tagsLine + '\n'; + } + + const newContent = fmOpen + newFmBody + fmClose + afterFm; + + if (dryRun) { + const oldStr = existingTagsMatch + ? existingTagsMatch[0].trim() + : '(none)'; + console.log(` WOULD UPDATE ${file}: ${oldStr} → ${tagsLine}`); + } else { + writeFileSync(filePath, newContent, 'utf-8'); + const oldStr = existingTagsMatch + ? existingTagsMatch[0].trim() + : '(none)'; + console.log(` UPDATED ${file}: ${oldStr} → ${tagsLine}`); + } + updated++; +} + +console.log( + `\nDone${dryRun ? ' (dry run)' : ''}. Updated: ${updated}, Unchanged: ${unchanged}, Skipped (not in JSON): ${skipped}` +); diff --git a/src/components/licensing-coverage/LegacyLicensingCoverage.tsx b/src/components/licensing-coverage/LegacyLicensingCoverage.tsx new file mode 100644 index 00000000..1b1ed08a --- /dev/null +++ b/src/components/licensing-coverage/LegacyLicensingCoverage.tsx @@ -0,0 +1,236 @@ +import React, { useState, useMemo } from 'react'; +import data from '@/data/licensing/legacy-plans.json'; + +type ServiceEntry = { + name: string; + serviceId: string; + plans: Record; +}; + +type Category = { + name: string; + services: ServiceEntry[]; +}; + +type EnhancementEntry = { + name: string; + docsUrl?: string; + plans: Record; +}; + +type LegacyData = { + metadata: Record; + usageAllocations: Record; + categories: Category[]; + enhancements: EnhancementEntry[]; +}; + +const legacyData = data as LegacyData; + +const PLANS = ['Starter', 'Teams']; + +function renderCellValue(value: boolean | string): React.ReactNode { + if (value === true) return '✅'; + if (value === false) return '❌'; + return value; +} + +const headerStyle: React.CSSProperties = { + textAlign: 'center', + border: '1px solid #999CAD', + background: '#AFB2C2', + color: 'var(--sl-color-gray-1)', + fontFamily: 'AeonikFono', + fontSize: '14px', + fontWeight: '500', + lineHeight: '16px', + letterSpacing: '-0.15px', + padding: '12px 8px', +}; + +const bodyFont: React.CSSProperties = { + color: 'var(--sl-color-gray-1)', + fontFamily: 'AeonikFono', + fontSize: '14px', + fontWeight: '400', + lineHeight: '16px', + letterSpacing: '-0.15px', +}; + +const cellStyle: React.CSSProperties = { + border: '1px solid #999CAD', + padding: '12px 8px', + textAlign: 'center', + whiteSpace: 'normal', +}; + +const categoryRowStyle: React.CSSProperties = { + border: '1px solid #999CAD', + padding: '10px 8px', + fontFamily: 'AeonikFono', + fontSize: '14px', + fontWeight: '600', + color: 'var(--sl-color-gray-1)', + background: 'color-mix(in srgb, var(--sl-color-gray-6) 50%, transparent)', +}; + +const inputStyle: React.CSSProperties = { + color: '#707385', + fontFamily: 'AeonikFono', + fontSize: '14px', + fontWeight: '500', + lineHeight: '24px', + letterSpacing: '-0.2px', +}; + +export default function LegacyLicensingCoverage() { + const [filter, setFilter] = useState(''); + const lowerFilter = filter.toLowerCase(); + + const filteredCategories = useMemo(() => { + if (!lowerFilter) return legacyData.categories; + return legacyData.categories + .map((cat) => ({ + ...cat, + services: cat.services.filter((svc) => + svc.name.toLowerCase().includes(lowerFilter) + ), + })) + .filter((cat) => cat.services.length > 0); + }, [lowerFilter]); + + const filteredEnhancements = useMemo(() => { + if (!lowerFilter) return legacyData.enhancements; + return legacyData.enhancements.filter((e) => + e.name.toLowerCase().includes(lowerFilter) + ); + }, [lowerFilter]); + + const hasResults = + filteredCategories.length > 0 || filteredEnhancements.length > 0; + + return ( +
+
+ setFilter(e.target.value)} + className="border rounded px-3 py-2 w-full max-w-sm" + style={inputStyle} + /> +
+ +
+ + + + + + + + + + {PLANS.map((plan) => ( + + ))} + + + + {!hasResults && ( + + + + )} + {filteredCategories.map((cat) => ( + + + + + {cat.services.map((svc, idx) => ( + + + {PLANS.map((plan) => ( + + ))} + + ))} + + ))} + + {filteredEnhancements.length > 0 && ( + <> + + + + {filteredEnhancements.map((enh, idx) => ( + + + {PLANS.map((plan) => ( + + ))} + + ))} + + )} + +
+ AWS Services + + Legacy Plan: {plan} +
+ No matching services or features found. +
+ {cat.name} +
+ {svc.serviceId ? ( + + {svc.name} + + ) : ( + svc.name + )} + + {renderCellValue(svc.plans[plan])} +
+ Emulator Enhancements +
+ {enh.docsUrl ? ( + {enh.name} + ) : ( + enh.name + )} + + {renderCellValue(enh.plans[plan])} +
+
+
+ ); +} diff --git a/src/components/licensing-coverage/LicensingCoverage.tsx b/src/components/licensing-coverage/LicensingCoverage.tsx new file mode 100644 index 00000000..efa3d5f0 --- /dev/null +++ b/src/components/licensing-coverage/LicensingCoverage.tsx @@ -0,0 +1,247 @@ +import React, { useState, useMemo } from 'react'; +import data from '@/data/licensing/current-plans.json'; + +type ServiceEntry = { + name: string; + serviceId: string; + minimumPlan: string; +}; + +type Category = { + name: string; + services: ServiceEntry[]; +}; + +type EnhancementEntry = { + name: string; + docsUrl?: string; + plans: Record; +}; + +type LicensingData = { + metadata: Record; + categories: Category[]; + enhancements: EnhancementEntry[]; +}; + +const licensingData = data as LicensingData; + +const PLAN_HIERARCHY = ['Hobby', 'Base', 'Ultimate', 'Enterprise']; +const ALL_PLANS = ['Hobby', 'Base', 'Ultimate', 'Enterprise', 'Student']; + +function isAvailable(minimumPlan: string, plan: string): boolean { + if (plan === 'Student') return isAvailable(minimumPlan, 'Ultimate'); + const minIdx = PLAN_HIERARCHY.indexOf(minimumPlan); + const planIdx = PLAN_HIERARCHY.indexOf(plan); + if (minIdx === -1 || planIdx === -1) return false; + return planIdx >= minIdx; +} + +function renderCellValue(value: boolean | string): React.ReactNode { + if (value === true) return '✅'; + if (value === false) return '❌'; + return value; +} + +const headerStyle: React.CSSProperties = { + textAlign: 'center', + border: '1px solid #999CAD', + background: '#AFB2C2', + color: 'var(--sl-color-gray-1)', + fontFamily: 'AeonikFono', + fontSize: '14px', + fontWeight: '500', + lineHeight: '16px', + letterSpacing: '-0.15px', + padding: '12px 8px', +}; + +const bodyFont: React.CSSProperties = { + color: 'var(--sl-color-gray-1)', + fontFamily: 'AeonikFono', + fontSize: '14px', + fontWeight: '400', + lineHeight: '16px', + letterSpacing: '-0.15px', +}; + +const cellStyle: React.CSSProperties = { + border: '1px solid #999CAD', + padding: '12px 8px', + textAlign: 'center', + whiteSpace: 'normal', +}; + +const categoryRowStyle: React.CSSProperties = { + border: '1px solid #999CAD', + padding: '10px 8px', + fontFamily: 'AeonikFono', + fontSize: '14px', + fontWeight: '600', + color: 'var(--sl-color-gray-1)', + background: 'color-mix(in srgb, var(--sl-color-gray-6) 50%, transparent)', +}; + +const inputStyle: React.CSSProperties = { + color: '#707385', + fontFamily: 'AeonikFono', + fontSize: '14px', + fontWeight: '500', + lineHeight: '24px', + letterSpacing: '-0.2px', +}; + +export default function LicensingCoverage() { + const [filter, setFilter] = useState(''); + const lowerFilter = filter.toLowerCase(); + + const filteredCategories = useMemo(() => { + if (!lowerFilter) return licensingData.categories; + return licensingData.categories + .map((cat) => ({ + ...cat, + services: cat.services.filter((svc) => + svc.name.toLowerCase().includes(lowerFilter) + ), + })) + .filter((cat) => cat.services.length > 0); + }, [lowerFilter]); + + const filteredEnhancements = useMemo(() => { + if (!lowerFilter) return licensingData.enhancements; + return licensingData.enhancements.filter((e) => + e.name.toLowerCase().includes(lowerFilter) + ); + }, [lowerFilter]); + + const hasResults = + filteredCategories.length > 0 || filteredEnhancements.length > 0; + + return ( +
+
+ setFilter(e.target.value)} + className="border rounded px-3 py-2 w-full max-w-sm" + style={inputStyle} + /> +
+ +
+ + + + + + + + + + + + + {ALL_PLANS.map((plan) => ( + + ))} + + + + {!hasResults && ( + + + + )} + {filteredCategories.map((cat) => ( + + + + + {cat.services.map((svc, idx) => ( + + + {ALL_PLANS.map((plan) => ( + + ))} + + ))} + + ))} + + {filteredEnhancements.length > 0 && ( + <> + + + + {filteredEnhancements.map((enh, idx) => ( + + + {ALL_PLANS.map((plan) => ( + + ))} + + ))} + + )} + +
+ AWS Services + + {plan} +
+ No matching services or features found. +
+ {cat.name} +
+ {svc.serviceId ? ( + + {svc.name} + + ) : ( + svc.name + )} + + {renderCellValue(isAvailable(svc.minimumPlan, plan))} +
+ Emulator Enhancements +
+ {enh.docsUrl ? ( + {enh.name} + ) : ( + enh.name + )} + + {renderCellValue(enh.plans[plan])} +
+
+
+ ); +} diff --git a/src/content/docs/aws/licensing.md b/src/content/docs/aws/licensing.md deleted file mode 100644 index 5ea14a18..00000000 --- a/src/content/docs/aws/licensing.md +++ /dev/null @@ -1,376 +0,0 @@ ---- -title: "Licensing & Tiers" -description: Service availability and licensing details across LocalStack for AWS tiers. ---- - -## Introduction - -This document outlines the features, emulated AWS services, and enhancements included in each LocalStack for AWS tier. -It also clarifies how licensing works across workspaces and users. - -As of **March 23rd, 2026**, LocalStack for AWS offers the following subscriptions that provide licenses for commercial use:: - -- Base -- Ultimate -- Enterprise - -Customers looking to purchase LocalStack for use primarily in automated environments or through shared infrastructure, such as an internal developer platform are encouraged to reach out to our sales team. For more information, please refer to our fair use policy. - -We provide the following subscription for non-commercial use: -- Hobby - -We offer special subscriptions for select segments: -- Student, requires a verified GitHub Education student account -- OSS project sponsorship, requires approval from LocalStack. Applications can be submitted here. - -If you purchased a LocalStack license **before May 8, 2025**, [click here to learn about your available features and legacy entitlements](#legacy-plan-usage-allocations). - -### Licensing & Access Rules - -Each **workspace** can only be assigned a single pricing tier. -You cannot mix and match (e.g., Base and Ultimate) within the same workspace. - -Licenses must be assigned to individual users. -This generates an authentication token that enables access to the emulator and any enhancements included in the tier. - -Not sure which tier fits your use case? -Explore our [pricing page](https://www.localstack.cloud/pricing). - -For unique licensing needs across teams or environments, please contact Sales. - -### Usage Allocation Per Workspace - -All paid tiers include a fixed allocation of: - -- Cloud Sandbox (Ephemeral Instance) minutes (monthly pool) -- State Management (Cloud Pod) storage (per contract, shared across all users) - - -### Service Coverage Clarification - -The table below shows which AWS services are available in each pricing tier. -It does not indicate the level of API coverage or feature availability. - -To learn more about how a service behaves in LocalStack, refer to that individual service page or contact Support. - -| AWS Services | Hobby | Base | Ultimate | Enterprise | Student | -| --- | --- | --- | --- | --- | --- | -| Analytics | | | | | | -| [Amazon ElasticSearch](https://docs.localstack.cloud/user-guide/aws/es/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Kinesis Streams](https://docs.localstack.cloud/references/coverage/coverage_kinesis/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Kinesis Data Firehose](https://docs.localstack.cloud/references/coverage/coverage_firehose/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon OpenSearch](https://docs.localstack.cloud/references/coverage/coverage_opensearch/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Redshift](https://docs.localstack.cloud/references/coverage/coverage_redshift/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Athena](https://docs.localstack.cloud/references/coverage/coverage_athena/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon EMR](https://docs.localstack.cloud/references/coverage/coverage_emr/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon EMR Serverless](https://docs.localstack.cloud/references/coverage/coverage_emr-serverless/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Glue](https://docs.localstack.cloud/references/coverage/coverage_glue/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon Redshift Data API](https://docs.localstack.cloud/references/coverage/coverage_redshift-data/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Lake Formation](https://docs.localstack.cloud/references/coverage/coverage_lakeformation/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon Managed Streaming for Apache Kafka](https://docs.localstack.cloud/user-guide/aws/msk/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon Managed Service for Apache Flink](https://docs.localstack.cloud/user-guide/aws/kinesisanalyticsv2/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Application Integration | | | | | | -| [Amazon Simple Workflow Service (SWF)](https://docs.localstack.cloud/user-guide/aws/swf/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Simple Notification Service (SNS)](https://docs.localstack.cloud/user-guide/aws/sns/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Simple Queue Service (SQS)](https://docs.localstack.cloud/user-guide/aws/sqs/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Step Functions](https://docs.localstack.cloud/user-guide/aws/stepfunctions/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon EventBridge](https://docs.localstack.cloud/user-guide/aws/events/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon EventBridge Scheduler](https://docs.localstack.cloud/user-guide/aws/scheduler/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon MQ](https://docs.localstack.cloud/user-guide/aws/mq/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon EventBridge Pipes](https://docs.localstack.cloud/user-guide/aws/pipes/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon Managed Workflows for Apache Airflow](https://docs.localstack.cloud/user-guide/aws/mwaa/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| BlockChain | | | | | | -| [Amazon Managed Blockchain](https://docs.localstack.cloud/user-guide/aws/managedblockchain/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Business Applications | | | | | | -| [Amazon Simple Email Service (SES)](https://docs.localstack.cloud/user-guide/aws/ses/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Simple Email Service API V2 (SES)](https://docs.localstack.cloud/user-guide/aws/ses/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Pinpoint](https://docs.localstack.cloud/user-guide/aws/pinpoint/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Cloud Financial Management | | | | | | -| [AWS Cost Explorer](https://docs.localstack.cloud/user-guide/aws/ce/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Compute | | | | | | -| [Amazon Elastic Compute Cloud (EC2)](https://docs.localstack.cloud/user-guide/aws/ec2/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Lambda](https://docs.localstack.cloud/user-guide/aws/lambda/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Batch](https://docs.localstack.cloud/user-guide/aws/batch/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Elastic Beanstalk](https://docs.localstack.cloud/user-guide/aws/elasticbeanstalk/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Serverless Application Repository](https://docs.localstack.cloud/user-guide/aws/serverlessrepo/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Containers | | | | | | -| [Amazon Elastic Container Registry (ECR)](https://docs.localstack.cloud/user-guide/aws/ecr/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Elastic Container Service (ECS)](https://docs.localstack.cloud/user-guide/aws/ecr/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Elastic Kubernetes Service (EKS)](https://docs.localstack.cloud/user-guide/aws/eks/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Customer Enablement | | | | | -| [AWS Support API](https://docs.localstack.cloud/user-guide/aws/support/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| DataBases | | | | | | -| [Amazon DynamoDB](https://docs.localstack.cloud/user-guide/aws/dynamodb/) | ✅ | ✅ | ✅ | ✅ | -| [Amazon DynamoDB Streams](https://docs.localstack.cloud/user-guide/aws/dynamodbstreams/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon ElastiCache](https://docs.localstack.cloud/user-guide/aws/elasticache/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Relational Database Service (RDS)](https://docs.localstack.cloud/user-guide/aws/rds/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon RDS Data API](https://docs.localstack.cloud/references/coverage/coverage_rds-data/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon DocumentDB](https://docs.localstack.cloud/user-guide/aws/docdb/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon MemoryDB](https://docs.localstack.cloud/user-guide/aws/memorydb/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon Neptune](https://docs.localstack.cloud/user-guide/aws/neptune/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon Timestream](https://docs.localstack.cloud/user-guide/aws/timestream/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Developer Tools | | | | | | -| [AWS CodeCommit](https://docs.localstack.cloud/references/coverage/coverage_codecommit/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| AWS CodeArtifact | ❌ | ✅ | ✅ | ✅ | ✅ | -| AWS CodeBuild | ❌ | ✅ | ✅ | ✅ | ✅ | -| AWS CodeConnections | ❌ | ✅ | ✅ | ✅ | ✅ | -| [AWS Fault Injection Service](https://docs.localstack.cloud/user-guide/aws/fis/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| AWS CodeDeploy | ❌ | ❌ | ✅ | ✅ | ✅ | -| AWS CodePipeline | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS X-Ray](https://docs.localstack.cloud/user-guide/aws/xray/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Frontend Web & Mobile Services | | | | | | -| [AWS Amplify](https://docs.localstack.cloud/user-guide/aws/amplify/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS AppSync](https://docs.localstack.cloud/user-guide/aws/appsync/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| IoT | | | | | | -| [AWS IoT](https://docs.localstack.cloud/user-guide/aws/iot/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [AWS IoT Wireless](https://docs.localstack.cloud/user-guide/aws/iotwireless/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS IoT Data](https://docs.localstack.cloud/user-guide/aws/iotdata/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Management & Governance | | | | | | -| [AWS CloudFormation](https://docs.localstack.cloud/user-guide/aws/cloudformation/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon CloudWatch Metrics](https://docs.localstack.cloud/user-guide/aws/cloudwatch/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon CloudWatch Logs](https://docs.localstack.cloud/user-guide/aws/logs/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Resource Groups](https://docs.localstack.cloud/user-guide/aws/resource_groups/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Systems Manager Parameter Store](https://docs.localstack.cloud/references/coverage/coverage_ssm/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Cloud Control](https://docs.localstack.cloud/references/coverage/coverage_cloudcontrol/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Application Auto Scaling](https://docs.localstack.cloud/references/coverage/coverage_application-autoscaling/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon EC2 Auto Scaling](https://docs.localstack.cloud/references/coverage/coverage_autoscaling/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [AWS Config](https://docs.localstack.cloud/references/coverage/coverage_config/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS AppConfig](https://docs.localstack.cloud/references/coverage/coverage_appconfig/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [AWS CloudTrail](https://docs.localstack.cloud/references/coverage/coverage_cloudtrail/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Account Management](https://docs.localstack.cloud/references/coverage/coverage_account/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Organizations](https://docs.localstack.cloud/references/coverage/coverage_organizations/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Media | | | | | | -| [AWS Elemental MediaConvert](https://docs.localstack.cloud/references/coverage/coverage_mediaconvert/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Migration & Transfer | | | | | | -| [AWS Transfer Family](https://docs.localstack.cloud/references/coverage/coverage_transfer/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Database Migration Service](https://docs.localstack.cloud/references/coverage/coverage_dms/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Machine Learning | | | | | | -| [Amazon Transcribe](https://docs.localstack.cloud/references/coverage/coverage_transcribe/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Textract](https://docs.localstack.cloud/references/coverage/coverage_textract/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon SageMaker AI](https://docs.localstack.cloud/references/coverage/coverage_sagemaker/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon SageMaker Runtime](https://docs.localstack.cloud/references/coverage/coverage_sagemaker-runtime/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon Bedrock](https://docs.localstack.cloud/references/coverage/coverage_bedrock/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon Bedrock Runtime](https://docs.localstack.cloud/references/coverage/coverage_bedrock-runtime/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Networking & Content Delivery | | | | | | -| [Amazon Route 53](https://docs.localstack.cloud/references/coverage/coverage_route53/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Route 53 Resolver](https://docs.localstack.cloud/user-guide/aws/route53resolver/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon API Gateway REST API](https://docs.localstack.cloud/references/coverage/coverage_apigateway/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon API Gateway HTTP and WebSocket API](https://docs.localstack.cloud/references/coverage/coverage_apigatewayv2/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon API Gateway Management API](https://docs.localstack.cloud/references/coverage/coverage_apigatewaymanagementapi/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Elastic Load Balancing](https://docs.localstack.cloud/references/coverage/coverage_elb/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Elastic Load Balancing v2 (Application, Network)](https://docs.localstack.cloud/references/coverage/coverage_elbv2/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon CloudFront](https://docs.localstack.cloud/references/coverage/coverage_cloudfront/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [AWS Cloud Map](https://docs.localstack.cloud/references/coverage/coverage_servicediscovery/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Security, Identity & Compliance | | | | | | -| [AWS Key Management Service (KMS)](https://docs.localstack.cloud/references/coverage/coverage_kms/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Secrets Manager](https://docs.localstack.cloud/references/coverage/coverage_secretsmanager/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Security Token Service](https://docs.localstack.cloud/references/coverage/coverage_sts/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS Certificate Manager](https://docs.localstack.cloud/references/coverage/coverage_acm/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Cognito Identity Pools](https://docs.localstack.cloud/references/coverage/coverage_cognito-identity/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Cognito User Pools](https://docs.localstack.cloud/references/coverage/coverage_cognito-idp/) | ❌ | ✅ | ✅ | ✅ | ✅ | -| [Amazon Verified Permissions](https://docs.localstack.cloud/aws/services/verifiedpermissions/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Private Certificate Authority](https://docs.localstack.cloud/references/coverage/coverage_acm-pca/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Web Application Firewall (WAF)](https://docs.localstack.cloud/references/coverage/coverage_wafv2/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Identity and Access Management (IAM)](https://docs.localstack.cloud/references/coverage/coverage_iam/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [AWS IAM Identity Store API](https://docs.localstack.cloud/references/coverage/coverage_identitystore/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS IAM Identity Center](https://docs.localstack.cloud/references/coverage/coverage_sso-admin/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Resource Access Manager (RAM)](https://docs.localstack.cloud/references/coverage/coverage_ram/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Shield](https://docs.localstack.cloud/references/coverage/coverage_shield/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Storage | | | | | | -| [Amazon S3](https://docs.localstack.cloud/references/coverage/coverage_s3/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon S3 Control](https://docs.localstack.cloud/references/coverage/coverage_s3control/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Amazon S3 Glacier](https://docs.localstack.cloud/references/coverage/coverage_glacier/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [AWS Backup](https://docs.localstack.cloud/user-guide/aws/backup/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| [Amazon EFS](https://docs.localstack.cloud/references/coverage/coverage_efs/) | ❌ | ❌ | ✅ | ✅ | ✅ | -| Emulator Enhancements | | | | | | -| Personal Developer Sandbox | 1 | Per License | Per License | Per License | 1 | 1 | -| Testing in CI | ✅ | ✅ | ✅ | ✅ | ✅ | -Preview: Debug and Inspect through Event Studio | ❌|Preview|Preview|Preview|❌| -[Extensions](https://docs.localstack.cloud/aws/tooling/extensions/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| Stack Insights | ❌ | ✅ | ✅ | ✅ | ✅ | -| Local state persistence | ❌ | ✅ | ✅ | ✅ | ✅| -| Cloud-based state persistence via Cloud pods | ❌ | ✅ 300 MB, lifetime per workspace | ✅ 3 GB, lifetime per workspace | ✅ 5 GB per user, lifetime | ✅ 500 MB cloud pod storage (lifetime) | -| [Cloud Sandbox](https://docs.localstack.cloud/user-guide/cloud-sandbox/) previews & ephemeral instances | ❌ | ✅ 100 minutes monthly per workspace | ✅ 500 minutes monthly per workspace | ✅ 3000 minutes monthly per workspace | ❌ | -| AWS Replicator | ❌ | ❌ | ✅ | ✅ | ✅ -| IAM Policy Enforcement | ❌ | ✅ | ✅ | ✅ | ✅ -| IAM Policy Streams | ❌ | ❌ | ✅ | ✅ | ✅ -| Air-gapped Delivery | ❌ | ❌ | ❌ | Optional | ❌| -| Custom SSO & SCIM | ❌ | ❌ | ❌ | ✅ | ❌ | -| [Resiliency Testing](https://docs.localstack.cloud/user-guide/chaos-engineering/) | ❌ | ❌ | ❌| ✅ | ✅ | ✅ | -| [Kubernetes Delivery Operator](https://docs.localstack.cloud/user-guide/localstack-enterprise/k8s-operator/) & [Executor](https://docs.localstack.cloud/user-guide/localstack-enterprise/kubernetes-executor/)) | ❌ | ❌ | ❌ | ✅ | ❌ -| | | | | | -[Telemetry Sharing](https://docs.localstack.cloud/aws/capabilities/config/usage-tracking/) | enforced | default on | default on | optional | default on | -| [Support](https://docs.localstack.cloud/getting-started/help-and-support/) | Basic | Standard | Priority | Enterprise | Basic | - -## Legacy Plans - -As of **May 8, 2025**, the following plans are no longer available for new purchases. -If you’re an existing customer on one of these tiers, your subscription remains active and unchanged. -You’ll continue receiving all regular version updates and will not experience any downgrade or loss of access. -If you have questions or concerns, please contact Support. - -### Subscription Continuity - -You may continue purchasing new licenses under your current legacy plan for the duration of your active subscription. -However, if your subscription lapses, we may not be able to restore access to these legacy plans. - -### Legacy Plan Usage Allocations - -**Starter:** - -- 100 CI credits for the first 3 licenses -- +20 CI credits per additional license -- 240 CI credits maximum - -**Teams:** - -- 1000 CI credits for the first 3 licenses -- +200 CI credits per additional license -- 2400 CI credits maximum -- Includes workspace-wide Ephemeral Instance minutes and Cloud Pod storage - -For any subscription or access-related questions, please reach out to Support. - -| AWS Services | Legacy Plan: Starter | Legacy Plan: Teams | -| --- | --- | --- | -| Analytics | | | -| [Amazon ElasticSearch](https://docs.localstack.cloud/user-guide/aws/es/) | ✅ | ✅ | -| [Amazon Kinesis Streams](https://docs.localstack.cloud/references/coverage/coverage_kinesis/) | ✅ | ✅ | -| [Amazon Kinesis Data Firehose](https://docs.localstack.cloud/references/coverage/coverage_firehose/) | ✅ | ✅ | -| [Amazon OpenSearch](https://docs.localstack.cloud/references/coverage/coverage_opensearch/) | ✅ | ✅ | -| [Amazon Redshift](https://docs.localstack.cloud/references/coverage/coverage_redshift/) | ✅ | ✅ | -| [Amazon Athena](https://docs.localstack.cloud/references/coverage/coverage_athena/) | ✅ | ✅ | -| [Amazon EMR](https://docs.localstack.cloud/references/coverage/coverage_emr/) | ✅ | ✅ | -| [Amazon EMR Serverless](https://docs.localstack.cloud/references/coverage/coverage_emr-serverless/) | ✅ | ✅ | -| [AWS Glue](https://docs.localstack.cloud/references/coverage/coverage_glue/) | ✅ | ✅ | -| [Amazon Redshift Data API](https://docs.localstack.cloud/references/coverage/coverage_redshift-data/) | ✅ | ✅ | -| [AWS Lake Formation](https://docs.localstack.cloud/references/coverage/coverage_lakeformation/) | ✅ | ✅ | -| [Amazon Managed Streaming for Apache Kafka](https://docs.localstack.cloud/user-guide/aws/msk/) | ✅ | ✅ | -| [Amazon Managed Service for Apache Flink](https://docs.localstack.cloud/user-guide/aws/kinesisanalyticsv2/) | ✅ | ✅ | -| Application Integration | | | -| [Amazon Simple Workflow Service (SWF)](https://docs.localstack.cloud/user-guide/aws/swf/) | ✅ | ✅ | -| [Amazon Simple Notification Service (SNS)](https://docs.localstack.cloud/user-guide/aws/sns/) | ✅ | ✅ | -| [Amazon Simple Queue Service (SQS)](https://docs.localstack.cloud/user-guide/aws/sqs/) | ✅ | ✅ | -| [AWS Step Functions](https://docs.localstack.cloud/user-guide/aws/stepfunctions/) | ✅ | ✅ | -| [Amazon EventBridge](https://docs.localstack.cloud/user-guide/aws/events/) | ✅ | ✅ | -| [Amazon EventBridge Scheduler](https://docs.localstack.cloud/user-guide/aws/scheduler/) | ✅ | ✅ | -| [Amazon MQ](https://docs.localstack.cloud/user-guide/aws/mq/) | ✅ | ✅ | -| [Amazon EventBridge Pipes](https://docs.localstack.cloud/user-guide/aws/pipes/) | ✅ | ✅ | -| [Amazon Managed Workflows for Apache Airflow](https://docs.localstack.cloud/user-guide/aws/mwaa/) | ✅ | ✅ | -| BlockChain | | | -| [Amazon Managed Blockchain](https://docs.localstack.cloud/user-guide/aws/managedblockchain/) | ✅ | ✅ | -| Business Applications | | | -| [Amazon Simple Email Service (SES)](https://docs.localstack.cloud/user-guide/aws/ses/) | ✅ | ✅ | -| [Amazon Simple Email Service API V2 (SES)](https://docs.localstack.cloud/user-guide/aws/ses/) | ✅ | ✅ | -| [Amazon Pinpoint](https://docs.localstack.cloud/user-guide/aws/pinpoint/) | ✅ | ✅ | -| Cloud Financial Management | | | -| [AWS Cost Explorer](https://docs.localstack.cloud/user-guide/aws/ce/) | ✅ | ✅ | -| Compute | | | -| [Amazon Elastic Compute Cloud (EC2)](https://docs.localstack.cloud/user-guide/aws/ec2/) | ✅ | ✅ | -| [AWS Lambda](https://docs.localstack.cloud/user-guide/aws/lambda/) | ✅ | ✅ | -| [AWS Batch](https://docs.localstack.cloud/user-guide/aws/batch/) | ✅ | ✅ | -| [AWS Elastic Beanstalk](https://docs.localstack.cloud/user-guide/aws/elasticbeanstalk/) | ✅ | ✅ | -| [AWS Serverless Application Repository](https://docs.localstack.cloud/user-guide/aws/serverlessrepo/) | ✅ | ✅ | -| Containers | | | -| [Amazon Elastic Container Registry (ECR)](https://docs.localstack.cloud/user-guide/aws/ecr/) | ✅ | ✅ | -| [Amazon Elastic Container Service (ECS)](https://docs.localstack.cloud/user-guide/aws/ecr/) | ✅ | ✅ | -| [Amazon Elastic Kubernetes Service (EKS)](https://docs.localstack.cloud/user-guide/aws/eks/) | ✅ | ✅ | -| Customer Enablement | | | -| [AWS Support API](https://docs.localstack.cloud/user-guide/aws/support/) | ✅ | ✅ | -| DataBases | | | -| [Amazon DynamoDB](https://docs.localstack.cloud/user-guide/aws/dynamodb/) | ✅ | ✅ | -| [Amazon DynamoDB Streams](https://docs.localstack.cloud/user-guide/aws/dynamodbstreams/) | ✅ | ✅ | -| [Amazon ElastiCache](https://docs.localstack.cloud/user-guide/aws/elasticache/) | ✅ | ✅ | -| [Amazon Relational Database Service (RDS)](https://docs.localstack.cloud/user-guide/aws/rds/) | ✅ | ✅ | -| [Amazon RDS Data API](https://docs.localstack.cloud/references/coverage/coverage_rds-data/) | ✅ | ✅ | -| [Amazon DocumentDB](https://docs.localstack.cloud/user-guide/aws/docdb/) | ✅ | ✅ | -| [Amazon MemoryDB](https://docs.localstack.cloud/user-guide/aws/memorydb/) | ✅ | ✅ | -| [Amazon Neptune](https://docs.localstack.cloud/user-guide/aws/neptune/) | ✅ | ✅ | -| [Amazon Timestream](https://docs.localstack.cloud/user-guide/aws/timestream/) | ✅ | ✅ | -| Developer Tools | | | -| [AWS CodeCommit](https://docs.localstack.cloud/references/coverage/coverage_codecommit/) | ✅ | ✅ | -| AWS CodeBuild | ✅ | ✅ | -| AWS CodeConnections | ✅ | ✅ | -| [AWS Fault Injection Service](https://docs.localstack.cloud/user-guide/aws/fis/) | ❌ | ❌ | -| AWS CodeDeploy | ✅ | ✅ | -| AWS CodePipeline | ✅ | ✅ | -| [AWS X-Ray](https://docs.localstack.cloud/user-guide/aws/xray/) | ✅ | ✅ | -| Frontend Web & Mobile Services | | | -| [AWS Amplify](https://docs.localstack.cloud/user-guide/aws/amplify/) | ✅ | ✅ | -| [AWS AppSync](https://docs.localstack.cloud/user-guide/aws/appsync/) | ✅ | ✅ | -| IoT | | | -| [AWS IoT](https://docs.localstack.cloud/user-guide/aws/iot/) | ✅ | ✅ | -| [AWS IoT Wireless](https://docs.localstack.cloud/user-guide/aws/iotwireless/) | ✅ | ✅ | -| [AWS IoT Data](https://docs.localstack.cloud/user-guide/aws/iotdata/) | ✅ | ✅ | -| Management & Governance | | | -| [AWS CloudFormation](https://docs.localstack.cloud/user-guide/aws/cloudformation/) | ✅ | ✅ | -| [Amazon CloudWatch Metrics](https://docs.localstack.cloud/user-guide/aws/cloudwatch/) | ✅ | ✅ | -| [Amazon CloudWatch Logs](https://docs.localstack.cloud/user-guide/aws/logs/) | ✅ | ✅ | -| [AWS Resource Groups](https://docs.localstack.cloud/user-guide/aws/resource_groups/) | ✅ | ✅ | -| [AWS Systems Manager Parameter Store](https://docs.localstack.cloud/references/coverage/coverage_ssm/) | ✅ | ✅ | -| [AWS Cloud Control](https://docs.localstack.cloud/references/coverage/coverage_cloudcontrol/) | ✅ | ✅ | -| [AWS Application Auto Scaling](https://docs.localstack.cloud/references/coverage/coverage_application-autoscaling/) | ✅ | ✅ | -| [Amazon EC2 Auto Scaling](https://docs.localstack.cloud/references/coverage/coverage_autoscaling/) | ✅ | ✅ | -| [AWS Config](https://docs.localstack.cloud/references/coverage/coverage_config/) | ✅ | ✅ | -| [AWS AppConfig](https://docs.localstack.cloud/references/coverage/coverage_appconfig/) | ✅ | ✅ | -| [AWS CloudTrail](https://docs.localstack.cloud/references/coverage/coverage_cloudtrail/) | ✅ | ✅ | -| [AWS Account Management](https://docs.localstack.cloud/references/coverage/coverage_account/) | ✅ | ✅ | -| [AWS Organizations](https://docs.localstack.cloud/references/coverage/coverage_organizations/) | ✅ | ✅ | -| Media | | | -| [AWS Elemental MediaConvert](https://docs.localstack.cloud/references/coverage/coverage_mediaconvert/) | ✅ | ✅ | -| Migration & Transfer | | | -| [AWS Transfer Family](https://docs.localstack.cloud/references/coverage/coverage_transfer/) | ✅ | ✅ | -| [AWS Database Migration Service](https://docs.localstack.cloud/references/coverage/coverage_dms/) | ✅ | ✅ | -| Machine Learning | | | -| [Amazon Transcribe](https://docs.localstack.cloud/references/coverage/coverage_transcribe/) | ✅ | ✅ | -| [Amazon Textract](https://docs.localstack.cloud/references/coverage/coverage_textract/) | ✅ | ✅ | -| [Amazon SageMaker AI](https://docs.localstack.cloud/references/coverage/coverage_sagemaker/) | ✅ | ✅ | -| [Amazon SageMaker Runtime](https://docs.localstack.cloud/references/coverage/coverage_sagemaker-runtime/) | ✅ | ✅ | -| [Amazon Bedrock](https://docs.localstack.cloud/references/coverage/coverage_bedrock/) | ❌ | ❌ | -| [Amazon Bedrock Runtime](https://docs.localstack.cloud/references/coverage/coverage_bedrock-runtime/) | ❌ | ❌ | -| Networking & Content Delivery | | | -| [Amazon Route 53](https://docs.localstack.cloud/references/coverage/coverage_route53/) | ✅ | ✅ | -| [Amazon Route 53 Resolver](https://docs.localstack.cloud/user-guide/aws/route53resolver/) | ✅ | ✅ | -| [Amazon API Gateway REST API](https://docs.localstack.cloud/references/coverage/coverage_apigateway/) | ✅ | ✅ | -| [Amazon API Gateway HTTP and WebSocket API](https://docs.localstack.cloud/references/coverage/coverage_apigatewayv2/) | ✅ | ✅ | -| [Amazon API Gateway Management API](https://docs.localstack.cloud/references/coverage/coverage_apigatewaymanagementapi/) | ✅ | ✅ | -| [Elastic Load Balancing](https://docs.localstack.cloud/references/coverage/coverage_elb/) | ✅ | ✅ | -| [Elastic Load Balancing v2 (Application, Network)](https://docs.localstack.cloud/references/coverage/coverage_elbv2/) | ✅ | ✅ | -| [Amazon CloudFront](https://docs.localstack.cloud/references/coverage/coverage_cloudfront/) | ✅ | ✅ | -| [AWS Cloud Map](https://docs.localstack.cloud/references/coverage/coverage_servicediscovery/) | ✅ | ✅ | -| Security, Identity & Compliance | | | -| [AWS Key Management Service (KMS)](https://docs.localstack.cloud/references/coverage/coverage_kms/) | ✅ | ✅ | -| [AWS Secrets Manager](https://docs.localstack.cloud/references/coverage/coverage_secretsmanager/) | ✅ | ✅ | -| [AWS Security Token Service](https://docs.localstack.cloud/references/coverage/coverage_sts/) | ✅ | ✅ | -| [AWS Certificate Manager](https://docs.localstack.cloud/references/coverage/coverage_acm/) | ✅ | ✅ | -| [Amazon Cognito Identity Pools](https://docs.localstack.cloud/references/coverage/coverage_cognito-identity/) | ✅ | ✅ | -| [Amazon Cognito User Pools](https://docs.localstack.cloud/references/coverage/coverage_cognito-idp/) | ✅ | ✅ | -| [AWS Private Certificate Authority](https://docs.localstack.cloud/references/coverage/coverage_acm-pca/) | ✅ | ✅ | -| [AWS Web Application Firewall (WAF)](https://docs.localstack.cloud/references/coverage/coverage_wafv2/) | ✅ | ✅ | -| [AWS Identity and Access Management (IAM)](https://docs.localstack.cloud/references/coverage/coverage_iam/) | ✅ | ✅ | -| [AWS IAM Identity Store API](https://docs.localstack.cloud/references/coverage/coverage_identitystore/) | ✅ | ✅ | -| [AWS IAM Identity Center](https://docs.localstack.cloud/references/coverage/coverage_sso-admin/) | ✅ | ✅ | -| [AWS Resource Access Manager (RAM)](https://docs.localstack.cloud/references/coverage/coverage_ram/) | ✅ | ✅ | -| [AWS Shield](https://docs.localstack.cloud/references/coverage/coverage_shield/) | ✅ | ✅ | -| Storage | | | -| [Amazon S3](https://docs.localstack.cloud/references/coverage/coverage_s3/) | ✅ | ✅ | -| [Amazon S3 Control](https://docs.localstack.cloud/references/coverage/coverage_s3control/) | ✅ | ✅ | -| [Amazon S3 Glacier](https://docs.localstack.cloud/references/coverage/coverage_glacier/) | ✅ | ✅ | -| [AWS Backup](https://docs.localstack.cloud/user-guide/aws/backup/) | ✅ | ✅ | -| [Amazon EFS](https://docs.localstack.cloud/references/coverage/coverage_efs/) | ✅ | ✅ | -| Emulator Enhancements | | | -| Testing in CI | ✅ | ✅ | -| Stack Insights | ✅ | ✅ | -| Local state persistence | ✅ | ✅ | -| Cloud-based state persistence via Cloud pods | ❌ | ✅ 1 GB, lifetime per license | -| [Cloud Sandbox](https://docs.localstack.cloud/user-guide/cloud-sandbox/) previews & ephemeral instances | ❌ | ✅ 1000 minutes monthly per workspace | -| AWS Replicator | ❌ | ✅ | -| IAM Policy Enforcement | ❌ | ❌ | -| IAM Policy Streams | ❌ | ❌ | -| Fully offline / air-gapped image delivery | ❌ | ❌ | -| Custom SSO and SCIM | ❌ | ❌ | -| Resiliency Testing through [Chaos Engineering](https://docs.localstack.cloud/user-guide/chaos-engineering/) | ❌ | ❌ | -| Kubernetes Pack ([Operator](https://docs.localstack.cloud/user-guide/localstack-enterprise/k8s-operator/) & [Executor](https://docs.localstack.cloud/user-guide/localstack-enterprise/kubernetes-executor/)) | ❌ | ❌ | -| | | | -| [Support](https://docs.localstack.cloud/getting-started/help-and-support/) | Standard | Priority | - diff --git a/src/content/docs/aws/licensing.mdx b/src/content/docs/aws/licensing.mdx new file mode 100644 index 00000000..57266aeb --- /dev/null +++ b/src/content/docs/aws/licensing.mdx @@ -0,0 +1,90 @@ +--- +title: "Licensing & Tiers" +description: Service availability and licensing details across LocalStack for AWS tiers. +--- + +import LicensingCoverage from "../../../components/licensing-coverage/LicensingCoverage"; +import LegacyLicensingCoverage from "../../../components/licensing-coverage/LegacyLicensingCoverage"; + +## Introduction + +This document outlines the features, emulated AWS services, and enhancements included in each LocalStack for AWS tier. +It also clarifies how licensing works across workspaces and users. + +As of **March 23rd, 2026**, LocalStack for AWS offers the following subscriptions that provide licenses for commercial use:: + +- Base +- Ultimate +- Enterprise + +Customers looking to purchase LocalStack for use primarily in automated environments or through shared infrastructure, such as an internal developer platform are encouraged to reach out to our sales team. For more information, please refer to our fair use policy. + +We provide the following subscription for non-commercial use: +- Hobby + +We offer special subscriptions for select segments: +- Student, requires a verified GitHub Education student account +- OSS project sponsorship, requires approval from LocalStack. Applications can be submitted here. + +If you purchased a LocalStack license **before May 8, 2025**, [click here to learn about your available features and legacy entitlements](#legacy-plan-usage-allocations). + +### Licensing & Access Rules + +Each **workspace** can only be assigned a single pricing tier. +You cannot mix and match (e.g., Base and Ultimate) within the same workspace. + +Licenses must be assigned to individual users. +This generates an authentication token that enables access to the emulator and any enhancements included in the tier. + +Not sure which tier fits your use case? +Explore our [pricing page](https://www.localstack.cloud/pricing). + +For unique licensing needs across teams or environments, please contact Sales. + +### Usage Allocation Per Workspace + +All paid tiers include a fixed allocation of: + +- Cloud Sandbox (Ephemeral Instance) minutes (monthly pool) +- State Management (Cloud Pod) storage (per contract, shared across all users) + + +### Service Coverage Clarification + +The table below shows which AWS services are available in each pricing tier. +It does not indicate the level of API coverage or feature availability. + +To learn more about how a service behaves in LocalStack, refer to that individual service page or contact Support. + + + +## Legacy Plans + +As of **May 8, 2025**, the following plans are no longer available for new purchases. +If you're an existing customer on one of these tiers, your subscription remains active and unchanged. +You'll continue receiving all regular version updates and will not experience any downgrade or loss of access. +If you have questions or concerns, please contact Support. + +### Subscription Continuity + +You may continue purchasing new licenses under your current legacy plan for the duration of your active subscription. +However, if your subscription lapses, we may not be able to restore access to these legacy plans. + +### Legacy Plan Usage Allocations + +**Starter:** + +- 100 CI credits for the first 3 licenses +- +20 CI credits per additional license +- 240 CI credits maximum + +**Teams:** + +- 1000 CI credits for the first 3 licenses +- +200 CI credits per additional license +- 2400 CI credits maximum +- Includes workspace-wide Ephemeral Instance minutes and Cloud Pod storage + +For any subscription or access-related questions, please reach out to Support. + + diff --git a/src/content/docs/aws/services/cloudcontrol.mdx b/src/content/docs/aws/services/cloudcontrol.mdx index d0061927..7ed21379 100644 --- a/src/content/docs/aws/services/cloudcontrol.mdx +++ b/src/content/docs/aws/services/cloudcontrol.mdx @@ -1,7 +1,7 @@ --- title: "Cloud Control" description: Get started with Cloud Control on LocalStack -tags: ["Base"] +tags: ["Hobby"] --- import FeatureCoverage from "../../../../components/feature-coverage/FeatureCoverage"; diff --git a/src/content/docs/aws/services/dynamodbstreams.mdx b/src/content/docs/aws/services/dynamodbstreams.mdx index a62d2516..c350e997 100644 --- a/src/content/docs/aws/services/dynamodbstreams.mdx +++ b/src/content/docs/aws/services/dynamodbstreams.mdx @@ -2,6 +2,7 @@ title: DynamoDB Streams linkTitle: DynamoDB Streams description: Get started with DynamoDB Streams on LocalStack +tags: ["Hobby"] --- import FeatureCoverage from "../../../../components/feature-coverage/FeatureCoverage"; diff --git a/src/content/docs/aws/services/sso-admin.mdx b/src/content/docs/aws/services/sso-admin.mdx index bae64a98..4704a90c 100644 --- a/src/content/docs/aws/services/sso-admin.mdx +++ b/src/content/docs/aws/services/sso-admin.mdx @@ -2,7 +2,7 @@ title: "SSO Admin" description: Get started with SSO Admin on LocalStack persistence: supported -tags: ["Base"] +tags: ["Ultimate"] --- import FeatureCoverage from "../../../../components/feature-coverage/FeatureCoverage"; diff --git a/src/data/licensing/current-plans.json b/src/data/licensing/current-plans.json new file mode 100644 index 00000000..e863938d --- /dev/null +++ b/src/data/licensing/current-plans.json @@ -0,0 +1,826 @@ +{ + "metadata": { + "lastUpdated": "2026-03-23", + "description": "Service availability and emulator enhancements across current LocalStack for AWS pricing tiers (effective March 23, 2026).", + "planHierarchy": ["Hobby", "Base", "Ultimate", "Enterprise"], + "studentPlanNote": "The Student plan mirrors Ultimate tier for service availability. Exceptions are noted in the enhancements section.", + "minimumPlanNote": "For services, 'minimumPlan' means the service is available in that plan and all higher plans. e.g. 'Base' means available in Base, Ultimate, Enterprise, and Student.", + "docsUrlDefault": "If 'docsUrl' is omitted, the service links to /aws/services/{serviceId}/." + }, + "categories": [ + { + "name": "Analytics", + "services": [ + { + "name": "Amazon ElasticSearch", + "serviceId": "es", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Kinesis Streams", + "serviceId": "kinesis", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Kinesis Data Firehose", + "serviceId": "firehose", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon OpenSearch", + "serviceId": "opensearch", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Redshift", + "serviceId": "redshift", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Athena", + "serviceId": "athena", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon EMR", + "serviceId": "emr", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon EMR Serverless", + "serviceId": "emr", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Glue", + "serviceId": "glue", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon Redshift Data API", + "serviceId": "redshift", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Lake Formation", + "serviceId": "lakeformation", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon Managed Streaming for Apache Kafka", + "serviceId": "kafka", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon Managed Service for Apache Flink", + "serviceId": "kinesisanalyticsv2", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Application Integration", + "services": [ + { + "name": "Amazon Simple Workflow Service (SWF)", + "serviceId": "swf", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Simple Notification Service (SNS)", + "serviceId": "sns", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Simple Queue Service (SQS)", + "serviceId": "sqs", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Step Functions", + "serviceId": "stepfunctions", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon EventBridge", + "serviceId": "events", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon EventBridge Scheduler", + "serviceId": "scheduler", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon MQ", + "serviceId": "mq", + "minimumPlan": "Base" + }, + { + "name": "Amazon EventBridge Pipes", + "serviceId": "pipes", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon Managed Workflows for Apache Airflow", + "serviceId": "mwaa", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Blockchain", + "services": [ + { + "name": "Amazon Managed Blockchain", + "serviceId": "managedblockchain", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Business Applications", + "services": [ + { + "name": "Amazon Simple Email Service (SES)", + "serviceId": "ses", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Simple Email Service API V2 (SES)", + "serviceId": "ses", + "minimumPlan": "Base" + }, + { + "name": "Amazon Pinpoint", + "serviceId": "pinpoint", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Cloud Financial Management", + "services": [ + { + "name": "AWS Cost Explorer", + "serviceId": "ce", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Compute", + "services": [ + { + "name": "Amazon Elastic Compute Cloud (EC2)", + "serviceId": "ec2", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Lambda", + "serviceId": "lambda", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Batch", + "serviceId": "batch", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Elastic Beanstalk", + "serviceId": "elasticbeanstalk", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Serverless Application Repository", + "serviceId": "serverlessrepo", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Containers", + "services": [ + { + "name": "Amazon Elastic Container Registry (ECR)", + "serviceId": "ecr", + "minimumPlan": "Base" + }, + { + "name": "Amazon Elastic Container Service (ECS)", + "serviceId": "ecs", + "minimumPlan": "Base" + }, + { + "name": "Amazon Elastic Kubernetes Service (EKS)", + "serviceId": "eks", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Customer Enablement", + "services": [ + { + "name": "AWS Support API", + "serviceId": "support", + "minimumPlan": "Hobby" + } + ] + }, + { + "name": "Databases", + "services": [ + { + "name": "Amazon DynamoDB", + "serviceId": "dynamodb", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon DynamoDB Streams", + "serviceId": "dynamodbstreams", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon ElastiCache", + "serviceId": "elasticache", + "minimumPlan": "Base" + }, + { + "name": "Amazon Relational Database Service (RDS)", + "serviceId": "rds", + "minimumPlan": "Base" + }, + { + "name": "Amazon RDS Data API", + "serviceId": "rds", + "minimumPlan": "Base" + }, + { + "name": "Amazon DocumentDB", + "serviceId": "docdb", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon MemoryDB", + "serviceId": "memorydb", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon Neptune", + "serviceId": "neptune", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon Timestream", + "serviceId": "timestream-query", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Developer Tools", + "services": [ + { + "name": "AWS CodeCommit", + "serviceId": "codecommit", + "minimumPlan": "Base" + }, + { + "name": "AWS CodeArtifact", + "serviceId": "codeartifact", + "minimumPlan": "Base" + }, + { + "name": "AWS CodeBuild", + "serviceId": "codebuild", + "minimumPlan": "Base" + }, + { + "name": "AWS CodeConnections", + "serviceId": "codeconnections", + "minimumPlan": "Base" + }, + { + "name": "AWS Fault Injection Service", + "serviceId": "fis", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS CodeDeploy", + "serviceId": "codedeploy", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS CodePipeline", + "serviceId": "codepipeline", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS X-Ray", + "serviceId": "xray", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Frontend Web & Mobile Services", + "services": [ + { + "name": "AWS Amplify", + "serviceId": "amplify", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS AppSync", + "serviceId": "appsync", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "IoT", + "services": [ + { + "name": "AWS IoT", + "serviceId": "iot", + "minimumPlan": "Base" + }, + { + "name": "AWS IoT Wireless", + "serviceId": "iotwireless", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS IoT Data", + "serviceId": "iot-data", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Management & Governance", + "services": [ + { + "name": "AWS CloudFormation", + "serviceId": "cloudformation", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon CloudWatch Metrics", + "serviceId": "cloudwatch", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon CloudWatch Logs", + "serviceId": "logs", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Resource Groups", + "serviceId": "resource-groups", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Systems Manager Parameter Store", + "serviceId": "ssm", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Cloud Control", + "serviceId": "cloudcontrol", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Application Auto Scaling", + "serviceId": "application-autoscaling", + "minimumPlan": "Base" + }, + { + "name": "Amazon EC2 Auto Scaling", + "serviceId": "autoscaling", + "minimumPlan": "Base" + }, + { + "name": "AWS Config", + "serviceId": "config", + "minimumPlan": "Hobby" + }, + { + "name": "AWS AppConfig", + "serviceId": "appconfig", + "minimumPlan": "Base" + }, + { + "name": "AWS CloudTrail", + "serviceId": "cloudtrail", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Account Management", + "serviceId": "account", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Organizations", + "serviceId": "organizations", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Media", + "services": [ + { + "name": "AWS Elemental MediaConvert", + "serviceId": "mediaconvert", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Migration & Transfer", + "services": [ + { + "name": "AWS Transfer Family", + "serviceId": "transfer", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Database Migration Service", + "serviceId": "dms", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Machine Learning", + "services": [ + { + "name": "Amazon Transcribe", + "serviceId": "transcribe", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Textract", + "serviceId": "textract", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon SageMaker AI", + "serviceId": "sagemaker", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon SageMaker Runtime", + "serviceId": "sagemaker", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon Bedrock", + "serviceId": "bedrock", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon Bedrock Runtime", + "serviceId": "bedrock", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Networking & Content Delivery", + "services": [ + { + "name": "Amazon Route 53", + "serviceId": "route53", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Route 53 Resolver", + "serviceId": "route53resolver", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon API Gateway REST API", + "serviceId": "apigateway", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon API Gateway HTTP and WebSocket API", + "serviceId": "apigateway", + "minimumPlan": "Base" + }, + { + "name": "Amazon API Gateway Management API", + "serviceId": "apigateway", + "minimumPlan": "Base" + }, + { + "name": "Elastic Load Balancing", + "serviceId": "elb", + "minimumPlan": "Base" + }, + { + "name": "Elastic Load Balancing v2 (Application, Network)", + "serviceId": "elb", + "minimumPlan": "Base" + }, + { + "name": "Amazon CloudFront", + "serviceId": "cloudfront", + "minimumPlan": "Base" + }, + { + "name": "AWS Cloud Map", + "serviceId": "servicediscovery", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Security, Identity & Compliance", + "services": [ + { + "name": "AWS Key Management Service (KMS)", + "serviceId": "kms", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Secrets Manager", + "serviceId": "secretsmanager", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Security Token Service", + "serviceId": "sts", + "minimumPlan": "Hobby" + }, + { + "name": "AWS Certificate Manager", + "serviceId": "acm", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon Cognito Identity Pools", + "serviceId": "cognito-idp", + "minimumPlan": "Base" + }, + { + "name": "Amazon Cognito User Pools", + "serviceId": "cognito-idp", + "minimumPlan": "Base" + }, + { + "name": "Amazon Verified Permissions", + "serviceId": "verifiedpermissions", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Private Certificate Authority", + "serviceId": "acm-pca", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Web Application Firewall (WAF)", + "serviceId": "waf", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Identity and Access Management (IAM)", + "serviceId": "iam", + "minimumPlan": "Hobby" + }, + { + "name": "AWS IAM Identity Store API", + "serviceId": "identitystore", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS IAM Identity Center", + "serviceId": "sso-admin", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Resource Access Manager (RAM)", + "serviceId": "ram", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Shield", + "serviceId": "shield", + "minimumPlan": "Ultimate" + } + ] + }, + { + "name": "Storage", + "services": [ + { + "name": "Amazon S3", + "serviceId": "s3", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon S3 Control", + "serviceId": "s3", + "minimumPlan": "Hobby" + }, + { + "name": "Amazon S3 Glacier", + "serviceId": "glacier", + "minimumPlan": "Ultimate" + }, + { + "name": "AWS Backup", + "serviceId": "backup", + "minimumPlan": "Ultimate" + }, + { + "name": "Amazon EFS", + "serviceId": "efs", + "minimumPlan": "Ultimate" + } + ] + } + ], + "enhancements": [ + { + "name": "Personal Developer Sandbox", + "plans": { + "Hobby": "1", + "Base": "Per License", + "Ultimate": "Per License", + "Enterprise": "Per License", + "Student": "1" + } + }, + { + "name": "Testing in CI", + "plans": { + "Hobby": true, + "Base": true, + "Ultimate": true, + "Enterprise": true, + "Student": true + } + }, + { + "name": "Preview: Debug and Inspect through Event Studio", + "docsUrl": "/aws/tooling/event-studio/", + "plans": { + "Hobby": false, + "Base": "Preview", + "Ultimate": "Preview", + "Enterprise": "Preview", + "Student": false + } + }, + { + "name": "Extensions", + "docsUrl": "/aws/tooling/extensions/", + "plans": { + "Hobby": true, + "Base": true, + "Ultimate": true, + "Enterprise": true, + "Student": true + } + }, + { + "name": "Stack Insights", + "plans": { + "Hobby": false, + "Base": true, + "Ultimate": true, + "Enterprise": true, + "Student": true + } + }, + { + "name": "Local state persistence", + "plans": { + "Hobby": false, + "Base": true, + "Ultimate": true, + "Enterprise": true, + "Student": true + } + }, + { + "name": "Cloud-based state persistence via Cloud Pods", + "plans": { + "Hobby": false, + "Base": "300 MB, lifetime per workspace", + "Ultimate": "3 GB, lifetime per workspace", + "Enterprise": "5 GB per user, lifetime", + "Student": "500 MB cloud pod storage (lifetime)" + } + }, + { + "name": "Cloud Sandbox previews & ephemeral instances", + "docsUrl": "/user-guide/cloud-sandbox/", + "plans": { + "Hobby": false, + "Base": "100 minutes monthly per workspace", + "Ultimate": "500 minutes monthly per workspace", + "Enterprise": "3000 minutes monthly per workspace", + "Student": false + } + }, + { + "name": "AWS Replicator", + "plans": { + "Hobby": false, + "Base": false, + "Ultimate": true, + "Enterprise": true, + "Student": true + } + }, + { + "name": "IAM Policy Enforcement", + "plans": { + "Hobby": false, + "Base": true, + "Ultimate": true, + "Enterprise": true, + "Student": true + } + }, + { + "name": "IAM Policy Streams", + "plans": { + "Hobby": false, + "Base": false, + "Ultimate": true, + "Enterprise": true, + "Student": true + } + }, + { + "name": "Air-gapped Delivery", + "plans": { + "Hobby": false, + "Base": false, + "Ultimate": false, + "Enterprise": "Optional", + "Student": false + } + }, + { + "name": "Custom SSO & SCIM", + "plans": { + "Hobby": false, + "Base": false, + "Ultimate": false, + "Enterprise": true, + "Student": false + } + }, + { + "name": "Resiliency Testing", + "docsUrl": "/user-guide/chaos-engineering/", + "plans": { + "Hobby": false, + "Base": false, + "Ultimate": false, + "Enterprise": true, + "Student": true + } + }, + { + "name": "Kubernetes Delivery Operator & Executor", + "docsUrl": "/user-guide/localstack-enterprise/k8s-operator/", + "plans": { + "Hobby": false, + "Base": false, + "Ultimate": false, + "Enterprise": true, + "Student": false + } + }, + { + "name": "Telemetry Sharing", + "docsUrl": "/aws/capabilities/config/usage-tracking/", + "plans": { + "Hobby": "enforced", + "Base": "default on", + "Ultimate": "default on", + "Enterprise": "optional", + "Student": "default on" + } + }, + { + "name": "Support", + "docsUrl": "/getting-started/help-and-support/", + "plans": { + "Hobby": "Basic", + "Base": "Standard", + "Ultimate": "Priority", + "Enterprise": "Enterprise", + "Student": "Basic" + } + } + ] +} diff --git a/src/data/licensing/legacy-plans.json b/src/data/licensing/legacy-plans.json new file mode 100644 index 00000000..9d9c6c1d --- /dev/null +++ b/src/data/licensing/legacy-plans.json @@ -0,0 +1,715 @@ +{ + "metadata": { + "lastUpdated": "2026-03-23", + "description": "Service availability and emulator enhancements for legacy LocalStack for AWS plans (Starter, Teams). These plans are no longer available for new purchases as of May 8, 2025.", + "plans": ["Starter", "Teams"], + "note": "Existing customers retain their current plan. New licenses may be purchased under legacy plans during an active subscription." + }, + "usageAllocations": { + "Starter": { + "ciCreditsBase": 100, + "ciCreditsBaseNote": "for the first 3 licenses", + "ciCreditsPerAdditional": 20, + "ciCreditsMaximum": 240 + }, + "Teams": { + "ciCreditsBase": 1000, + "ciCreditsBaseNote": "for the first 3 licenses", + "ciCreditsPerAdditional": 200, + "ciCreditsMaximum": 2400, + "includesEphemeralMinutes": true, + "includesCloudPodStorage": true + } + }, + "categories": [ + { + "name": "Analytics", + "services": [ + { + "name": "Amazon ElasticSearch", + "serviceId": "es", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Kinesis Streams", + "serviceId": "kinesis", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Kinesis Data Firehose", + "serviceId": "firehose", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon OpenSearch", + "serviceId": "opensearch", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Redshift", + "serviceId": "redshift", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Athena", + "serviceId": "athena", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon EMR", + "serviceId": "emr", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon EMR Serverless", + "serviceId": "emr", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Glue", + "serviceId": "glue", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Redshift Data API", + "serviceId": "redshift", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Lake Formation", + "serviceId": "lakeformation", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Managed Streaming for Apache Kafka", + "serviceId": "kafka", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Managed Service for Apache Flink", + "serviceId": "kinesisanalyticsv2", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Application Integration", + "services": [ + { + "name": "Amazon Simple Workflow Service (SWF)", + "serviceId": "swf", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Simple Notification Service (SNS)", + "serviceId": "sns", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Simple Queue Service (SQS)", + "serviceId": "sqs", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Step Functions", + "serviceId": "stepfunctions", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon EventBridge", + "serviceId": "events", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon EventBridge Scheduler", + "serviceId": "scheduler", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon MQ", + "serviceId": "mq", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon EventBridge Pipes", + "serviceId": "pipes", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Managed Workflows for Apache Airflow", + "serviceId": "mwaa", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Blockchain", + "services": [ + { + "name": "Amazon Managed Blockchain", + "serviceId": "managedblockchain", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Business Applications", + "services": [ + { + "name": "Amazon Simple Email Service (SES)", + "serviceId": "ses", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Simple Email Service API V2 (SES)", + "serviceId": "ses", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Pinpoint", + "serviceId": "pinpoint", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Cloud Financial Management", + "services": [ + { + "name": "AWS Cost Explorer", + "serviceId": "ce", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Compute", + "services": [ + { + "name": "Amazon Elastic Compute Cloud (EC2)", + "serviceId": "ec2", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Lambda", + "serviceId": "lambda", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Batch", + "serviceId": "batch", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Elastic Beanstalk", + "serviceId": "elasticbeanstalk", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Serverless Application Repository", + "serviceId": "serverlessrepo", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Containers", + "services": [ + { + "name": "Amazon Elastic Container Registry (ECR)", + "serviceId": "ecr", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Elastic Container Service (ECS)", + "serviceId": "ecs", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Elastic Kubernetes Service (EKS)", + "serviceId": "eks", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Customer Enablement", + "services": [ + { + "name": "AWS Support API", + "serviceId": "support", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Databases", + "services": [ + { + "name": "Amazon DynamoDB", + "serviceId": "dynamodb", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon DynamoDB Streams", + "serviceId": "dynamodbstreams", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon ElastiCache", + "serviceId": "elasticache", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Relational Database Service (RDS)", + "serviceId": "rds", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon RDS Data API", + "serviceId": "rds", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon DocumentDB", + "serviceId": "docdb", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon MemoryDB", + "serviceId": "memorydb", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Neptune", + "serviceId": "neptune", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Timestream", + "serviceId": "timestream-query", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Developer Tools", + "services": [ + { + "name": "AWS CodeCommit", + "serviceId": "codecommit", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS CodeBuild", + "serviceId": "codebuild", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS CodeConnections", + "serviceId": "codeconnections", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Fault Injection Service", + "serviceId": "fis", + "plans": { "Starter": false, "Teams": false } + }, + { + "name": "AWS CodeDeploy", + "serviceId": "codedeploy", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS CodePipeline", + "serviceId": "codepipeline", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS X-Ray", + "serviceId": "xray", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Frontend Web & Mobile Services", + "services": [ + { + "name": "AWS Amplify", + "serviceId": "amplify", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS AppSync", + "serviceId": "appsync", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "IoT", + "services": [ + { + "name": "AWS IoT", + "serviceId": "iot", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS IoT Wireless", + "serviceId": "iotwireless", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS IoT Data", + "serviceId": "iot-data", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Management & Governance", + "services": [ + { + "name": "AWS CloudFormation", + "serviceId": "cloudformation", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon CloudWatch Metrics", + "serviceId": "cloudwatch", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon CloudWatch Logs", + "serviceId": "logs", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Resource Groups", + "serviceId": "resource-groups", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Systems Manager Parameter Store", + "serviceId": "ssm", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Cloud Control", + "serviceId": "cloudcontrol", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Application Auto Scaling", + "serviceId": "application-autoscaling", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon EC2 Auto Scaling", + "serviceId": "autoscaling", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Config", + "serviceId": "config", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS AppConfig", + "serviceId": "appconfig", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS CloudTrail", + "serviceId": "cloudtrail", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Account Management", + "serviceId": "account", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Organizations", + "serviceId": "organizations", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Media", + "services": [ + { + "name": "AWS Elemental MediaConvert", + "serviceId": "mediaconvert", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Migration & Transfer", + "services": [ + { + "name": "AWS Transfer Family", + "serviceId": "transfer", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Database Migration Service", + "serviceId": "dms", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Machine Learning", + "services": [ + { + "name": "Amazon Transcribe", + "serviceId": "transcribe", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Textract", + "serviceId": "textract", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon SageMaker AI", + "serviceId": "sagemaker", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon SageMaker Runtime", + "serviceId": "sagemaker", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Bedrock", + "serviceId": "bedrock", + "plans": { "Starter": false, "Teams": false } + }, + { + "name": "Amazon Bedrock Runtime", + "serviceId": "bedrock", + "plans": { "Starter": false, "Teams": false } + } + ] + }, + { + "name": "Networking & Content Delivery", + "services": [ + { + "name": "Amazon Route 53", + "serviceId": "route53", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Route 53 Resolver", + "serviceId": "route53resolver", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon API Gateway REST API", + "serviceId": "apigateway", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon API Gateway HTTP and WebSocket API", + "serviceId": "apigateway", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon API Gateway Management API", + "serviceId": "apigateway", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Elastic Load Balancing", + "serviceId": "elb", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Elastic Load Balancing v2 (Application, Network)", + "serviceId": "elb", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon CloudFront", + "serviceId": "cloudfront", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Cloud Map", + "serviceId": "servicediscovery", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Security, Identity & Compliance", + "services": [ + { + "name": "AWS Key Management Service (KMS)", + "serviceId": "kms", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Secrets Manager", + "serviceId": "secretsmanager", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Security Token Service", + "serviceId": "sts", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Certificate Manager", + "serviceId": "acm", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Cognito Identity Pools", + "serviceId": "cognito-idp", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon Cognito User Pools", + "serviceId": "cognito-idp", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Private Certificate Authority", + "serviceId": "acm-pca", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Web Application Firewall (WAF)", + "serviceId": "waf", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Identity and Access Management (IAM)", + "serviceId": "iam", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS IAM Identity Store API", + "serviceId": "identitystore", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS IAM Identity Center", + "serviceId": "sso-admin", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Resource Access Manager (RAM)", + "serviceId": "ram", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Shield", + "serviceId": "shield", + "plans": { "Starter": true, "Teams": true } + } + ] + }, + { + "name": "Storage", + "services": [ + { + "name": "Amazon S3", + "serviceId": "s3", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon S3 Control", + "serviceId": "s3", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon S3 Glacier", + "serviceId": "glacier", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "AWS Backup", + "serviceId": "backup", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Amazon EFS", + "serviceId": "efs", + "plans": { "Starter": true, "Teams": true } + } + ] + } + ], + "enhancements": [ + { + "name": "Testing in CI", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Stack Insights", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Local state persistence", + "plans": { "Starter": true, "Teams": true } + }, + { + "name": "Cloud-based state persistence via Cloud Pods", + "plans": { + "Starter": false, + "Teams": "1 GB, lifetime per license" + } + }, + { + "name": "Cloud Sandbox previews & ephemeral instances", + "docsUrl": "/user-guide/cloud-sandbox/", + "plans": { + "Starter": false, + "Teams": "1000 minutes monthly per workspace" + } + }, + { + "name": "AWS Replicator", + "plans": { "Starter": false, "Teams": true } + }, + { + "name": "IAM Policy Enforcement", + "plans": { "Starter": false, "Teams": false } + }, + { + "name": "IAM Policy Streams", + "plans": { "Starter": false, "Teams": false } + }, + { + "name": "Fully offline / air-gapped image delivery", + "plans": { "Starter": false, "Teams": false } + }, + { + "name": "Custom SSO and SCIM", + "plans": { "Starter": false, "Teams": false } + }, + { + "name": "Resiliency Testing", + "docsUrl": "/user-guide/chaos-engineering/", + "plans": { "Starter": false, "Teams": false } + }, + { + "name": "Kubernetes Pack (Operator & Executor)", + "docsUrl": "/user-guide/localstack-enterprise/k8s-operator/", + "plans": { "Starter": false, "Teams": false } + }, + { + "name": "Support", + "docsUrl": "/getting-started/help-and-support/", + "plans": { "Starter": "Standard", "Teams": "Priority" } + } + ] +}