
AWS Chalice
A Flask-style Python framework for AWS Lambda: decorators turn functions into API routes and event handlers, and one chalice deploy creates the functions, API and IAM policy.
- What it is
- API frameworks (http api frameworks)
- Type
- Managed service on AWS
- Made by
- Amazon Web Services
- License
- Apache 2.0
- Facts checked
- 23 October 2026
What it is
A Chalice app is a Python file with an app = Chalice(app_name=...) object and decorated functions. @app.route("/orders/{id}") adds a REST endpoint behind Amazon API Gateway; @app.schedule, @app.on_s3_event, @app.on_sqs_message and similar decorators connect a function to a timer, a bucket, a queue or a topic, and there are WebSocket handlers, authorizers (IAM, Cognito or your own function), blueprints for splitting an app across files, and middleware. All routes share one Lambda function, api_handler; each event handler gets its own. chalice local serves the routes on your machine for quick testing.
Deployment is part of the framework. chalice deploy packages your code and the dependencies in requirements.txt, calls the AWS APIs through the Python SDK to create or update the Lambda functions, API and event sources, and records what it made per stage in .chalice/deployed/<stage>.json. By default it reads your code to generate the IAM policy the functions need; you can turn that off and supply your own. For CloudFormation-based pipelines, chalice package writes a SAM template and a deployment.zip instead, --pkg-format terraform writes a Terraform file, and the chalice.cdk construct embeds an app in an AWS CDK stack. A given app must stick to one route: switching between chalice deploy and a packaged deployment creates a second set of resources.
Chalice is an AWS open-source project under Apache 2.0. Releases have slowed to roughly one a year (1.32.0 in May 2025, 1.33.0 in May 2026, adding Python 3.14), but the repository is still active: in October 2026 it gained Python 3.15 and arm64 support that had not yet been released.
Why teams pick it
- Very little to learn for Python developers: Flask-like routes plus decorators for AWS events, and the README promises a deployed API in under 30 seconds
- One command deploys everything, including an IAM policy generated from the AWS calls in your code
- Can hand off to SAM, Terraform or the CDK when the app needs to join a larger infrastructure-as-code setup
- Maintained by AWS and still on 1.x since 2017, under a promise of backward compatibility within each major version
Watch out for
- AWS Lambda and Python only; there is no way to target another cloud or runtime
- Its own docs say the feature set is purposely small and it restricts how an app is structured and deployed
- Releases are now infrequent, one in the year to May 2026, and mostly track Python versions rather than add features
- Resources created by
chalice deploylive outside CloudFormation, so moving tochalice packagelater means a fresh set of resources
Alternatives
What all http api frameworks have in common →Compare side by side →
StarletteOpen sourceA small ASGI toolkit for Python: routing, requests and responses, middleware, WebSockets and a test client, usable as a whole framework or piece by piece, and the base FastAPI is built on.+1 FastAPIHow it fits with other technologies
What AWS Chalice uses
- AWS Chalicedeploys Python functions toAWS Lambda
- AWS Chalicecreates REST and WebSocket APIs inAmazon API Gateway
- AWS Chalicecan export the app as a template forAWS Serverless Application Model (SAM)
- AWS Chalicecan export the app as configuration forTerraform
- AWS Chaliceplugs into stacks through a construct inAWS Cloud Development Kit (CDK)
- AWS Chaliceis a serverless framework forPython
app.py: a route, a schedule and a queue consumer · python
from chalice import Chalice, Rate
app = Chalice(app_name="orders")
@app.route("/orders/{order_id}") # API Gateway -> api_handler
def get_order(order_id):
return {"id": order_id, "status": "shipped"}
@app.schedule(Rate(5, unit=Rate.MINUTES)) # its own Lambda + schedule
def sweep(event):
...
@app.on_sqs_message(queue="receipts") # triggered by SQS
def on_receipt(event):
for record in event:
print(record.body)
# $ chalice local -> http://localhost:8000
# $ chalice deploy --stage prodSee it in a real stack
No architecture uses AWS Chalice yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2016–2026
On July 11, 2016 the AWS Developer Tools team released a preview of the Python Serverless Microframework for AWS, soon known by its package name, Chalice. Its programming model copied Flask, which the team picked for its reputation for simplicity, and its goal was to minimize the time to a working API: one chalice deploy packaged the code, created the Lambda function and API Gateway resources and returned a URL. It lived in the awslabs organization and was explicitly not yet meant for production.
Chalice 1.0.0 became generally available on July 31, 2017, with a promise of backward compatibility within each major version. By then it handled dependencies with C extensions, pure Lambda functions, scheduled events, generated IAM policies, authorizers and CI pipelines. Later releases added WebSockets and Terraform packaging (1.10, 2019), built-in support for the AWS CDK (1.22, 2021) and CDK v2 (1.27, 2022).
After that the pace slowed to maintenance: new Python versions as Lambda adds them, old ones dropped, and dependency updates. The project, now under the aws organization on GitHub, is still maintained in 2026 but adds few new features.
Why it’s built this way
- A Flask-style decorator API
- Flask was already familiar to many Python developers, so routes and handlers needed little explanation and the framework stayed small.
- Deploy with the SDK, not CloudFormation
- Calling the AWS APIs directly kept the tool self-contained: no template to write or stack to manage. CloudFormation, Terraform and CDK output were added later for teams that need them.
- Generate the IAM policy from the code
- Writing least-privilege policies by hand is a common stumbling block; analysing the AWS calls the app makes produced a starting policy automatically.
Timeline
- 2016
Developer preview released on July 11
- 2017
Chalice 1.0.0 generally available on July 31
- 2019
Terraform packaging and experimental WebSockets in 1.10
- 2021
Built-in AWS CDK construct in 1.22
- 2022
CDK v2 support in 1.27
- 2026
1.33.0 in May adds Python 3.14, drops 3.9
- AWS Developer Tools Blog: Preview the Python Serverless Microframework for AWS (Jul 2016)
- AWS What’s New: Python Serverless Microframework for AWS, developer preview (Jul 2016)
- AWS Developer Tools Blog: Chalice 1.0.0 GA release (Jul 2017)
- Chalice CHANGELOG (versions 1.10, 1.22, 1.27, 1.33)
- PyPI: chalice release history
Sources12 · facts checked 23 October 2026
- aws/chalice README (decorators, event sources, IAM policy generation)
- Chalice docs: FAQ (purposely small feature set; relation to SAM and CDK)
- Chalice docs: Configuration file (autogen_policy, stages, api_handler)
- Chalice docs: Stages
- Chalice docs: AWS CloudFormation support (chalice package, SAM template)
- Chalice docs: Terraform support
- Chalice docs: Deploying with the AWS CDK
- Chalice docs: Upgrade notes (.chalice/deployed/<stage>.json)
- AWS Developer Tools Blog: Chalice 1.0.0 GA release (semantic versioning)
- Chalice CHANGELOG
- PyPI: chalice (1.33.0, May 2026; Python 3.10 and later)
- aws/chalice commits (Python 3.15 and arm64 support, Oct 2026)