{"id":1044,"library":"cfn-lint","title":"AWS CloudFormation Linter (cfn-lint)","description":"cfn-lint is an open-source static analysis tool developed by AWS that checks CloudFormation templates (YAML/JSON) for potential errors, adherence to AWS best practices, and valid resource configurations. It validates templates against the AWS CloudFormation resource provider schemas and additional checks, aiming to catch issues before deployment. The project is actively maintained with frequent updates, often including new CloudFormation schemas and linting rules.","status":"active","version":"1.47.1","language":"python","source_language":"en","source_url":"https://github.com/aws-cloudformation/cfn-lint","tags":["AWS","CloudFormation","IAC","Linting","Security","DevOps"],"install":[{"cmd":"pip install cfn-lint","lang":"bash","label":"Core installation"},{"cmd":"pip install \"cfn-lint[full]\"","lang":"bash","label":"All optional features (graph, junit, sarif)"},{"cmd":"pip install \"cfn-lint[graph]\"","lang":"bash","label":"With graph generation support"}],"dependencies":[{"reason":"Required for SAM template validation.","package":"aws-sam-translator"},{"reason":"Used for JSON patch operations, likely related to schema modifications.","package":"jsonpatch"},{"reason":"For graph-related functionalities if optional 'graph' is installed.","package":"networkx"},{"reason":"For parsing YAML CloudFormation templates.","package":"pyyaml"},{"reason":"For advanced regular expression matching in rules.","package":"regex"},{"reason":"Used for symbolic mathematics, potentially in complex rule evaluations.","package":"sympy"},{"reason":"Provides backports of Python 3.8+ typing features for broader compatibility.","package":"typing_extensions"},{"reason":"Optional dependency for generating resource dependency graphs.","package":"pydot","optional":true},{"reason":"Optional dependency for JUnit output format.","package":"junit-xml","optional":true},{"reason":"Optional dependency for SARIF output format.","package":"sarif-om","optional":true}],"imports":[{"note":"Primarily for developing custom linting rules to extend cfn-lint's capabilities. The main linting execution is via the `cfn-lint` command-line interface.","symbol":"CloudFormationLintRule","correct":"from cfnlint.rules import CloudFormationLintRule"}],"quickstart":{"code":"import subprocess\nimport os\n\n# Create a dummy CloudFormation template file with an intentional error\ntemplate_content = \"\"\"\nAWSTemplateFormatVersion: '2010-09-09'\nResources:\n  MyS3Bucket:\n    Type: AWS::S3::Bucket\n    Properties:\n      BucketName: my-unique-bucket-name\n      # Intentional error: 'InvalidProperty' is not a valid S3 Bucket property\n      InvalidProperty: true\n\"\"\"\n\ntemplate_file = \"./my_bad_template.yaml\"\nwith open(template_file, \"w\") as f:\n    f.write(template_content)\n\nprint(f\"Linting {template_file} with cfn-lint...\")\n\ntry:\n    # Run cfn-lint as a subprocess\n    # --format text is default, but explicit for clarity\n    # --non-zero-exit-code error ensures a non-zero exit if errors are found\n    result = subprocess.run(\n        ['cfn-lint', template_file, '--non-zero-exit-code', 'error'],\n        capture_output=True, text=True, check=False\n    )\n\n    print(\"\\n--- cfn-lint Output ---\")\n    print(result.stdout)\n    if result.stderr:\n        print(\"\\n--- cfn-lint Errors ---\")\n        print(result.stderr)\n\n    if result.returncode != 0:\n        print(f\"\\ncfn-lint found issues! Exit Code: {result.returncode}\")\n    else:\n        print(\"\\ncfn-lint found no issues.\")\n\nexcept FileNotFoundError:\n    print(\"Error: cfn-lint command not found. Please ensure it's installed and in your PATH.\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")\nfinally:\n    # Clean up the dummy template file\n    if os.path.exists(template_file):\n        os.remove(template_file)\n        print(f\"\\nCleaned up {template_file}\")\n","lang":"python","description":"This quickstart demonstrates how to programmatically invoke the `cfn-lint` CLI tool from Python to validate a CloudFormation template. It creates a simple YAML template with a known issue (`InvalidProperty` on an S3 bucket), runs `cfn-lint` against it, captures the output, and then cleans up the temporary file."},"warnings":[{"fix":"Upgrade Python to version 3.10 or newer. (e.g., `pyenv install 3.10.12 && pyenv global 3.10.12`)","message":"Python 3.9 support has been removed as of cfn-lint v1.47.0. Users on Python 3.9 or older must upgrade their Python environment to 3.10 or newer.","severity":"breaking","affected_versions":">=1.47.0"},{"fix":"Review templates against the new v1 rules and schemas. Update custom rules (if any) to align with the new `CloudFormationLintRule` base class and validation mechanisms. Refer to the official blog post for migration guidance.","message":"cfn-lint v1 introduced major breaking changes by migrating from the CloudFormation specification to CloudFormation registry resource provider schemas and rewriting over 100 rules. This improves accuracy but may cause templates that previously passed to now fail, or require adjustments to custom rules/configurations.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Regularly review `cfn-lint` release notes for schema updates and new rules. Consider pinning `cfn-lint` versions in CI/CD pipelines and explicitly updating schemas with `--update-specs` in a controlled manner if you rely on the latest definitions.","message":"cfn-lint frequently updates its internal CloudFormation schemas to reflect the latest AWS service features and property definitions. While beneficial for up-to-date validation, this can lead to templates that previously passed linting beginning to fail after a `cfn-lint` upgrade, even if the template itself hasn't changed.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Always use `pip install cfn-lint` for the Python version. If you encounter unexpected behavior or outdated rule sets, verify you are not using the npm package or an outdated Python installation.","message":"The `cfn-lint` tool is often used as a command-line interface. There was also an older, deprecated `cfn-lint` npm package (JavaScript-based). Ensure you are installing and using the Python `cfn-lint` for the comprehensive features and active development.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T23:05:25.482Z","next_check":"2026-06-29T00:00:00.000Z","problems":[{"fix":"Review the CloudFormation template and correct the property name or remove the unsupported property, ensuring it adheres to the official AWS CloudFormation documentation for the specified resource type.","cause":"This error indicates that a property specified for a CloudFormation resource is either misspelled, does not exist, or is not supported for that specific resource type according to the AWS CloudFormation resource specification.","error":"E3002 Invalid Property Resources/<Resource-Name>/Properties/<PropertyName>"},{"fix":"Add the missing required property to the resource definition in your CloudFormation template, referring to the AWS CloudFormation resource specification for the correct syntax and value.","cause":"This error signifies that a required property for a particular CloudFormation resource is not present in the template.","error":"E3003 Property <PropertyName> missing at Resources/<Resource-Name>"},{"fix":"Either upload the nested stack template to an S3 bucket and provide its S3 URL, or use the `aws cloudformation package` command to prepare the template for deployment, which will upload local artifacts to S3 and update the `TemplateURL` automatically.","cause":"This warning commonly occurs in nested CloudFormation stacks when `TemplateURL` references a local file path instead of an S3 URL, meaning the template needs to be packaged before deployment.","error":"W3002 This code may only work with package cli command as the property (/TemplateURL) is a string"},{"fix":"Examine the CloudFormation template at the indicated location for syntax errors, incorrect intrinsic function usage, or unexpected data types. Ensure your `cfn-lint` and its dependencies (like `pyrsistent` or `samtranslator`) are up to date, as this can sometimes resolve internal parsing issues.","cause":"This error indicates an unexpected internal exception within `cfn-lint` while processing a specific rule, often due to malformed intrinsic functions, incorrect data types in the template, or an incompatibility with `cfn-lint`'s parsing logic.","error":"E0002 Unknown exception while processing rule E<rule-id>: <exception-details>"},{"fix":"Verify the resource type's spelling and ensure it is a valid CloudFormation resource type. Confirm that the resource type is available in the specified AWS region, and adjust the resource type or the target region if necessary.","cause":"This error means that the specified CloudFormation resource type is either invalid, misspelled, or not supported in the AWS region where the linting is being performed.","error":"E3001 Invalid or unsupported Type <ResourceType> for resource <ResourceName> in <region>"}],"ecosystem":"pypi","meta_description":null,"install_score":95,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"1.51.0","cli_name":"cfn-lint","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","installed_version":"1.46.0","pypi_latest":"1.51.0","is_stale":true,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.53,"mem_mb":67.9,"disk_size":"222.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.29,"mem_mb":67.9,"disk_size":"216.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.64,"mem_mb":67.9,"disk_size":"220.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.45,"mem_mb":67.9,"disk_size":"214.7M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.86,"mem_mb":67.9,"disk_size":"219.1M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.21,"mem_mb":67.9,"disk_size":"213.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":16.4,"import_time_s":3.67,"mem_mb":67.9,"disk_size":"223M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.5,"mem_mb":67.9,"disk_size":"217M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":16,"import_time_s":3.77,"mem_mb":67.9,"disk_size":"221M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.64,"mem_mb":67.9,"disk_size":"215M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":15.6,"import_time_s":3.71,"mem_mb":67.9,"disk_size":"220M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.4,"mem_mb":67.9,"disk_size":"214M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.94,"mem_mb":77.3,"disk_size":"257.0M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.24,"mem_mb":77.3,"disk_size":"251.4M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.03,"mem_mb":77.3,"disk_size":"254.8M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.34,"mem_mb":77.3,"disk_size":"249.2M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.99,"mem_mb":77.3,"disk_size":"253.3M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.22,"mem_mb":77.3,"disk_size":"247.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":14.8,"import_time_s":4.58,"mem_mb":77.3,"disk_size":"258M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.43,"mem_mb":77.3,"disk_size":"252M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":14.6,"import_time_s":4.45,"mem_mb":77.3,"disk_size":"255M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.38,"mem_mb":77.3,"disk_size":"250M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":14.1,"import_time_s":4.62,"mem_mb":77.3,"disk_size":"254M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.3,"mem_mb":77.3,"disk_size":"248M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.2,"mem_mb":74.3,"disk_size":"249.9M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.79,"mem_mb":74.3,"disk_size":"244.2M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.38,"mem_mb":74.3,"disk_size":"238.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.82,"mem_mb":74.3,"disk_size":"233.2M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.26,"mem_mb":74.3,"disk_size":"237.4M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.5,"mem_mb":74.3,"disk_size":"231.8M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":14.8,"import_time_s":5.27,"mem_mb":74.3,"disk_size":"250M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.71,"mem_mb":74.3,"disk_size":"245M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":13.9,"import_time_s":5.29,"mem_mb":74.3,"disk_size":"239M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.83,"mem_mb":74.3,"disk_size":"234M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":13.6,"import_time_s":5.29,"mem_mb":74.3,"disk_size":"238M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.71,"mem_mb":74.3,"disk_size":"232M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.19,"mem_mb":73.1,"disk_size":"249.0M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.45,"mem_mb":73,"disk_size":"243.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.32,"mem_mb":73.1,"disk_size":"237.9M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.43,"mem_mb":73,"disk_size":"232.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.33,"mem_mb":73.1,"disk_size":"236.6M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.43,"mem_mb":73,"disk_size":"230.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":14.6,"import_time_s":4.26,"mem_mb":73.1,"disk_size":"250M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.79,"mem_mb":73.1,"disk_size":"244M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":13.7,"import_time_s":4.27,"mem_mb":73.1,"disk_size":"238M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.75,"mem_mb":73.1,"disk_size":"233M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":13.4,"import_time_s":4.19,"mem_mb":73.1,"disk_size":"237M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.63,"mem_mb":73.1,"disk_size":"231M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.46,"mem_mb":65.8,"disk_size":"212.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.14,"mem_mb":65.8,"disk_size":"212.8M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.58,"mem_mb":65.9,"disk_size":"210.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.33,"mem_mb":65.8,"disk_size":"210.8M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.47,"mem_mb":65.9,"disk_size":"209.6M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.08,"mem_mb":65.8,"disk_size":"209.5M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":18.9,"import_time_s":4.35,"mem_mb":65.9,"disk_size":"213M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"full","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.85,"mem_mb":65.9,"disk_size":"213M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":18.2,"import_time_s":4.34,"mem_mb":65.9,"disk_size":"211M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"graph","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.78,"mem_mb":65.9,"disk_size":"211M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":18.2,"import_time_s":4.33,"mem_mb":65.9,"disk_size":"210M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"cfn-lint","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.69,"mem_mb":65.9,"disk_size":"210M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}