{"id":13406597,"url":"https://github.com/getlift/lift","last_synced_at":"2026-01-22T11:02:23.367Z","repository":{"id":37556142,"uuid":"291126547","full_name":"getlift/lift","owner":"getlift","description":"Expanding Serverless Framework beyond functions using the AWS CDK","archived":false,"fork":false,"pushed_at":"2026-01-18T21:57:24.000Z","size":6322,"stargazers_count":942,"open_issues_count":108,"forks_count":123,"subscribers_count":17,"default_branch":"master","last_synced_at":"2026-01-19T05:24:48.041Z","etag":null,"topics":["aws","aws-cdk","serverless","serverless-framework","serverless-plugin"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/getlift.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-08-28T19:10:45.000Z","updated_at":"2026-01-18T21:56:41.000Z","dependencies_parsed_at":"2022-07-12T16:23:20.547Z","dependency_job_id":"33a35763-ac59-47ce-9a9a-c7ca81a138f0","html_url":"https://github.com/getlift/lift","commit_stats":{"total_commits":601,"total_committers":28,"mean_commits":"21.464285714285715","dds":0.459234608985025,"last_synced_commit":"08675915092474a585b58228028368ae73e5bbb1"},"previous_names":["mnapoli/lift"],"tags_count":97,"template":false,"template_full_name":null,"purl":"pkg:github/getlift/lift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getlift%2Flift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getlift%2Flift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getlift%2Flift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getlift%2Flift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/getlift","download_url":"https://codeload.github.com/getlift/lift/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getlift%2Flift/sbom","scorecard":{"id":424430,"data":{"date":"2025-08-11","repo":{"name":"github.com/getlift/lift","commit":"662b0787a4cc8088639150a8a38b09da4911c1f5"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":7,"reason":"Found 7/10 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":1,"reason":"0 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/getlift/lift/release.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:33","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:34","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:35","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:54","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:69","Warn: npmCommand not pinned by hash: .github/workflows/release.yml:25","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:9"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T01:56:53.637Z","repository_id":37556142,"created_at":"2025-08-19T01:56:53.638Z","updated_at":"2025-08-19T01:56:53.638Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28661882,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-cdk","serverless","serverless-framework","serverless-plugin"],"created_at":"2024-07-30T19:02:34.429Z","updated_at":"2026-01-22T11:02:23.348Z","avatar_url":"https://github.com/getlift.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","aws"],"sub_categories":[],"readme":"![](docs/img/animation.gif)\n\nLift is a plugin that leverages the AWS CDK to expand the [Serverless Framework](https://github.com/oss-serverless/serverless) beyond functions.\n\nDeploy production-ready websites, queues, storage buckets and more with a few lines in serverless.yml.\n\n- ⚡️ **For developers** - No AWS knowledge required\n- ⚡️ **Production-ready** - Built by AWS experts, optimized for production\n- ⚡️ **Not invasive** - Integrates with existing projects\n- ⚡️ **No lock-in** - Eject to CloudFormation at any time\n\n[Why Lift?](docs/comparison.md)\n\n## Installation\n\nLift is a [Serverless Framework plugin](https://www.serverless.com/plugins/), install it in your project:\n\n```bash\nserverless plugin install -n serverless-lift\n```\n\n\u003e If you prefer, you can install Lift via NPM: `npm install --save-dev serverless-lift`. Then, register the `serverless-lift` plugin in `serverless.yml` (see the example below).\n\n## Quick start\n\nOnce installed, start using Lift constructs in `serverless.yml`:\n\n```yaml\nservice: my-app\n\nprovider:\n    name: aws\n\nplugins:\n    - serverless-lift\n\nfunctions:\n    # ...\n\nconstructs:\n\n    # Include Lift constructs here\n\n    landing-page:\n        type: static-website\n        path: 'landing/dist'\n\n    avatars:\n        type: storage\n```\n\n## Constructs\n\nThe [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/home.html) is extremely powerful, but it is very complex and cannot be used in `serverless.yml`. Lift changes that: use the best of the CDK in Serverless, without having to learn about it!\n\nLift provides components, aka \"**constructs**\", specifically selected for serverless applications. They are all built using the CDK and its best practices, with unique features to provide an awesome developer experience.\n\n### [Single page app](docs/single-page-app.md)\n\nDeploy single-page applications, for example React, VueJS or Angular apps.\n\n```yaml\nconstructs:\n    landing:\n        type: single-page-app\n        path: dist\n```\n\n[Read more...](docs/single-page-app.md)\n\n### [Static website](docs/static-website.md)\n\nDeploy static websites.\n\n```yaml\nconstructs:\n    landing:\n        type: static-website\n        path: dist\n```\n\n[Read more...](docs/static-website.md)\n\n### [Storage](docs/storage.md)\n\nDeploy preconfigured S3 buckets to store files.\n\n```yaml\nconstructs:\n    avatars:\n        type: storage\n```\n\n[Read more...](docs/storage.md)\n\n### [Queue](docs/queue.md)\n\nDeploy SQS queues and workers for asynchronous processing.\n\n```yaml\nconstructs:\n    my-queue:\n        type: queue\n        worker:\n            handler: src/report-generator.handler\n```\n\n[Read more...](docs/queue.md)\n\n### [Webhook](docs/webhook.md)\n\nDeploy webhooks to receive notifications from 3rd party applications.\n\n```yaml\nconstructs:\n    stripe-webhook:\n        type: webhook\n        path: /my-webhook-endpoint\n        authorizer:\n            handler: myAuthorizer.main\n```\n\n[Read more...](docs/webhook.md)\n\n### [Database - DynamoDB Single Table](docs/database-dynamodb-single-table.md)\n\nDeploy databases leveraging DynamoDB Single Table Design principles.\n\n```yaml\nconstructs:\n    database:\n        type: database/dynamodb-single-table\n```\n\n### [Server-side website](docs/server-side-website.md)\n\nDeploy server-side rendered websites, for example Laravel or Symfony apps.\n\n```yaml\nconstructs:\n    website:\n        type: server-side-website\n        assets:\n            '/css/*': public/css\n            '/js/*': public/js\n```\n\n[Read more...](docs/server-side-website.md)\n\nMore constructs are coming soon! Got suggestions? [Open and upvote drafts](https://github.com/getlift/lift/discussions/categories/constructs).\n\n## Lift-specific configuration\n\nLift default behaviors can be override and configured as per your likings using the `lift` property at the root of your `serverless.yml` file. This property is optional as well as all the [configurable options within](docs/configuration.md). Configurations specified at this level affect all constructs defined within the same service file.\n\n## Ejecting\n\nYou can eject from Lift at any time: Lift is based on CloudFormation. That allows anyone to kickstart a project with Lift, and fallback to CloudFormation if you ever grow out of it.\n\nTo eject:\n\n- export the CloudFormation template via `serverless lift eject`\n- copy the parts you want to turn into CloudFormation and paste them in the [`resources` section of serverless.yml](https://www.serverless.com/framework/docs/providers/aws/guide/resources/)\n- don't forget to remove from `serverless.yml` the Lift constructs you have turned into CloudFormation\n\n## Extend Lift constructs\n\nLift packages production-ready features in the form of highly opinionated construts with minimal configuration options in order to avoid confusion for serverless early adopters. In order to empower more advanced developers, every construct ships with an `extensions` property allowing overrides on the underlying Cloudformation Resources.\n\nIn the exemple below, the S3 Bucket CloudFormation Resource generated by the `avatars` storage construct will be extened with the new `AccessControl: PublicRead` CloudFormation property.\n\n```yaml\nconstructs:\n    avatars:\n        type: storage\n        extensions:\n            bucket:\n                Properties:\n                    AccessControl: PublicRead\n```\n\nEach construct documentation lists available underlying CloudFormation resources that can be extended using the `extensions` key.\n\n## TypeScript definitions\n\nTypeScript users can use `serverless.ts` instead of `serverless.yml`. Lift provides [type definitions to help](docs/serverless-types.md).\n\n---\n\nLift is built and maintained with love ❤️ by\n\n\u003ca href=\"https://www.theodo.fr/\" title=\"Theodo\"\u003e\u003cimg src=\"docs/img/theodo.png\" width=\"130\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.serverless.com/\" title=\"Serverless\"\u003e\u003cimg src=\"docs/img/serverless-logo.png\" width=\"220\"\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgetlift%2Flift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgetlift%2Flift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgetlift%2Flift/lists"}