Kludex/starlette
Kludex/starlette has 12,714 GitHub stars and 1,442 forks. GitHot measured +3 stars in 24 hours. Last checked 2026-11-08 23:28 UTC. Last push 2026-11-01.
The little ASGI framework that shines. 🌟
Measured star growth
- in 24h
- +3
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Original
✨ The little ASGI framework that shines. ✨
Documentation: https://starlette.dev
Source Code: https://github.com/Kludex/starlette
Starlette
Starlette is a lightweight ASGI framework/toolkit, which is ideal for building async web services in Python.
It is production-ready, and gives you the following:
- A lightweight, low-complexity HTTP web framework.
- WebSocket support.
- In-process background tasks.
- Startup and shutdown events.
- Test client built on
httpx2. - CORS, GZip, Static Files, Streaming responses.
- Session and Cookie support.
- 100% test coverage.
- 100% type annotated codebase.
- Few hard dependencies.
- Compatible with
asyncioandtriobackends. - Great overall performance against independent benchmarks.
Installation
$ pip install starlette
You'll also want to install an ASGI server, such as uvicorn or any of the other ASGI server implementations.
$ pip install uvicorn
Example
from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route
async def homepage(request):
return JSONResponse({'hello': 'world'})
routes = [
Route("/", endpoint=homepage)
]
app = Starlette(debug=True, routes=routes)
Then run the application using Uvicorn:
$ uvicorn main:app
Dependencies
Starlette only requires anyio, and the following are optional:
httpx2- Required if you want to use theTestClient.jinja2- Required if you want to useJinja2Templates.opentelemetry-api- Required forOpenTelemetryMiddleware.python-multipart- Required if you want to support form parsing, withrequest.form().itsdangerous- Required forSessionMiddlewaresupport.pyyaml- Required forSchemaGeneratorsupport.
You can install all of these with pip install starlette[full].
Framework or Toolkit
Starlette is designed to be used either as a complete framework, or as an ASGI toolkit. You can use any of its components independently.
from starlette.responses import PlainTextResponse
async def app(scope, receive, send):
assert scope['type'] == 'http'
response = PlainTextResponse('Hello, world!')
await response(scope, receive, send)
Run the app application in example.py:
$ uvicorn example:app
INFO: Started server process [11509]
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
Run uvicorn with --reload to enable auto-reloading on code changes.
Modularity
The modularity that Starlette is designed on promotes building reusable components that can be shared between any ASGI framework. This should enable an ecosystem of shared middleware and mountable applications.
The clean API separation also means it's easier to understand each component in isolation.
Starlette is BSD licensed code.
Designed & crafted with care.
— ⭐️ —
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,143 starspublic-apis/public-apis
A collective list of free APIs
497,360 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
444,407 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,216 stars