Install Sillo with uv and get an async Python application running, with routing, validation and the middleware stack in place from the first command.
Installation
Section titled “Installation”One command puts the framework in place: routing, validation, dependency injection, the response builder, and the middleware stack. The heavier pieces (the ORM, JWT, caching, Redis) are optional extras you add when the product needs them, so the dependency tree stays proportional to what you build.
Requirements
Section titled “Requirements”- Python 3.10 or newer
- Basic familiarity with
async/await
python --versionNothing else. These guides are written against
uv, but every command below has a Poetry and a
venv plus pip equivalent, so none of it depends on having uv. To install it:
# macOS / Linuxcurl -LsSf https://astral.sh/uv/install.sh | sh
# Windowspowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Create a project
Section titled “Create a project”uv init my-sillo-appcd my-sillo-appuv add sillo-frameworkYou get a pyproject.toml, a .venv, and an exact uv.lock.
poetry new my-sillo-app --srccd my-sillo-apppoetry add sillo-frameworkYou get a pyproject.toml and a poetry.lock. The environment is created
on the first poetry add.
mkdir my-sillo-app && cd my-sillo-apppython -m venv .venvsource .venv/bin/activate # Windows: .venv\Scripts\activatepip install sillo-frameworkvenv and pip ship with Python, so this needs nothing installed first.
Nothing records what you installed, so pin it yourself with
pip freeze > requirements.txt.
Confirm it worked:
uv run sillo --version # uvpoetry run sillo --version # Poetrysillo --version # venv + pip, with the environment activatedAdd a development server
Section titled “Add a development server”Sillo is ASGI-based, so it needs a server. uvicorn is the usual choice:
uv add uvicornpoetry add uvicornpip install uvicornCreate your first app
Section titled “Create your first app”Create main.py:
from sillo import SilloApp, HttpContext
app = SilloApp()
@app.get("/")async def home(ctx: HttpContext): return {"message": "Hello from Sillo"}Run it:
uvicorn main:app --reloadOpen:
http://127.0.0.1:8000You should see:
{"message": "Hello from Sillo"}Install optional feature groups
Section titled “Install optional feature groups”Sillo ships optional extras for integrations that need additional dependencies. Add them only when your project needs them.
uv add "sillo-framework[mail]"uv add "sillo-framework[jwt]"uv add "sillo-framework[cache]"uv add "sillo-framework[record]"uv add sillo-graphqluv add "sillo-framework[all]" # everythingpoetry add "sillo-framework[mail]"poetry add "sillo-framework[jwt]"poetry add "sillo-framework[cache]"poetry add "sillo-framework[record]"poetry add sillo-graphqlpoetry add "sillo-framework[all]" # everythingpip install "sillo-framework[mail]"pip install "sillo-framework[jwt]"pip install "sillo-framework[cache]"pip install "sillo-framework[record]"pip install sillo-graphqlpip install "sillo-framework[all]" # everythingExisting projects
Section titled “Existing projects”Install it into whatever the project already uses:
uv add sillo-framework # uvpoetry add sillo-framework # Poetrypip install sillo-framework # venv + pipSillo does not care which. It is an ordinary package with a standard
pyproject.toml, so it installs the same way anything else does. In a
directory that has no pyproject.toml yet, run uv init or poetry init
first.
Upgrading from 0.0.1a15 or earlier
Section titled “Upgrading from 0.0.1a15 or earlier”The application class was renamed from silloApp to SilloApp. Classes in Python are CapWords, and the old spelling made app = silloApp() read like a function call at every entry point.
The migration is one find-and-replace:
from sillo import SilloApp
app = SilloApp(title="Projects API")Nothing else in the constructor changed: every argument, and every method on
the returned application, is the same. The only other visible difference is
that str(app) now reads <SilloApp: title>, which matters if you assert on
dev-server output or log lines.
Why uv is recommended
Section titled “Why uv is recommended”Recommended, not required, and recommended strongly. It resolves and installs an order of magnitude faster than pip, produces a lockfile without a separate tool, installs the Python interpreter itself when you need a version you do not have, and runs commands inside the environment without an activate step to forget.
Poetry gives you the lockfile and the dependency groups but not the speed or
the interpreter management. venv and pip give you neither, in exchange for
needing nothing installed.
If your team already has a workflow, keep it. Nothing in Sillo reads a lockfile or shells out to a package manager, so the choice is yours alone.
Next step
Section titled “Next step”Continue with the Introduction if you want the framework overview, or go directly to Routing to start building endpoints.