Build serious Python backends with one coherent application model.
Sillo is an async Python web framework for building APIs, web applications, real-time systems, and business backends. It focuses on practical enterprise application work: routing, request validation, dependency injection, middleware, sessions, authentication helpers, records, background work, WebSockets, OpenAPI, testing, and operational structure.
Sillo is the open framework layer of a larger platform vision: a cohesive developer ecosystem for creating, operating, and scaling serious software without stitching together unrelated tools for every project.
Sillo is preparing for its first alpha release: 0.0.1a1.
Use it for exploration, prototypes, early applications, and feedback. APIs may still change before a stable release.
- Python 3.10+
uvfor project and dependency management
uv add silloFor optional feature groups:
uv add "sillo[cli]"
uv add "sillo[templating]"
uv add "sillo[jwt]"
uv add "sillo[cache]"
uv add "sillo[record]"
uv add "sillo[graphql]"For a full development setup:
uv add "sillo[all]"from sillo import silloApp
app = silloApp(title="My API")
@app.get("/")
async def home(request, response):
return response.json({"message": "Hello from Sillo"})Run it with an ASGI server:
uv add uvicorn
uv run uvicorn main:app --reloadSillo validates request bodies with Pydantic through request_model.
from pydantic import BaseModel
from sillo import silloApp
app = silloApp()
class CreateUser(BaseModel):
name: str
email: str
@app.post("/users", request_model=CreateUser)
async def create_user(request, response, user: CreateUser):
return response.json(user.model_dump(), status_code=201)The validated model is also available as request.validated_data.
Use Depend to inject request-scoped dependencies into handlers.
from sillo import Depend, silloApp
app = silloApp()
async def get_current_user():
return {"id": "user_1", "name": "Ada"}
@app.get("/me")
async def me(request, response, user=Depend(get_current_user)):
return response.json(user)When a dependency needs the current request:
from sillo import Depend
def auth_header(request=Depend(get_request=True)):
return request.headers.get("Authorization")from sillo import Router, silloApp
app = silloApp()
api = Router(prefix="/api")
@api.get("/users/{user_id:int}")
async def get_user(request, response, user_id: int):
return response.json({"id": user_id})
app.mount_router(api)- Async ASGI application core
- HTTP routing, route groups, and mounted routers
- Request and response helpers
- Pydantic request validation
- Dependency injection with nested dependencies
- Query, header, and cookie parameter helpers
- Middleware pipeline
- CORS and CSRF support
- Sessions and authentication utilities
- API keys, JWT helpers, users, permissions, and guards
- OpenAPI generation and interactive docs
- File uploads, streaming responses, static files, and frontend fallback serving
- WebSockets, consumers, channels, groups, events, and history helpers
- Cache abstraction with memory and Redis support
- Event system and background work primitives
- Record layer for database-backed models, transactions, scopes, casting, and pagination
- Mail service utilities
- Test client utilities
- CLI for running and inspecting applications
Sillo Core is intended to become the technical foundation for a broader enterprise developer platform:
- Miko: visual admin studio for records, workflows, and internal operations
- Zoro: managed deployment for Sillo applications
- Koda: server management and deployment automation for customer-controlled infrastructure
- Nira: authentication, organisations, access control, and identity services
- Piko: logs, queues, jobs, releases, health, and application monitoring
- Template and integration marketplaces: reusable application foundations and verified integrations
The open-source framework should remain useful on its own. Commercial products should remove operational work, not lock normal application development behind a paywall.
The documentation source lives in docs/docs.
Build it locally with:
cd docs/docs
bun run buildRun the core test suite with:
python3 -m pytest -qSome optional integrations require their extras to be installed before their tests can run.
Sillo prioritizes:
- clear APIs and useful error messages
- strong defaults with replaceable internals
- production-oriented documentation
- compatibility, migration guidance, and honest release notes
- security and reliability before broad platform expansion
BSD-3-Clause