What sillohq/starter and sillohq/starter-inertia contain: the layout, the dependencies each pulls in, and how to choose between them.
Two starters are published. Both are real applications with their own CI.
sillohq/starter | Server-rendered pages and a JSON API. The default. |
sillohq/starter-inertia | The same application with a React or Vue frontend over Inertia.js. |
sillo-start create-app myapp # the defaultsillo-start create-app sillohq/starter-inertia myapp # InertiaChoosing
Section titled “Choosing”Take the default when your pages are pages: forms that post and redirect,
server-rendered HTML, an admin panel, a JSON API for whatever else needs one.
It has no build step and no node_modules.
Take Inertia when you want React or Vue components with the routing, validation and auth still on the Python side. You get a frontend without writing an API for your own frontend to consume.
You are not locked in either way. Inertia is a dependency and a mount, and can be added to a project that started without it.
What sillohq/starter ships
Section titled “What sillohq/starter ships”app/ bootstrap.py assembling the application config.py typed settings, read from .env main.py the ASGI entrypoint — `app.main:app` admin.py what the admin panel exposes templating.py template engine setup jobs/ queued job classes tasks/ scheduled tasksdatabase/ config.py connection settings models/ your models; `user.py` to begin with migrations/ `0001_initial.py`, committedroutes/ api.py the JSON API auth.py sign in, sign out, register web.py server-rendered pagestemplates/ HTMLstatic/ CSStests/ a working suite, with fixturesstorage/ SQLite lives here; gitignoredscripts/smoke.py boots the app and calls every routePlus .env.example, pyproject.toml, .github/workflows/ci.yml, a Makefile
and a README.md.
What is already wired
Section titled “What is already wired”- Session authentication against a real user model, not a stub.
- The admin panel, at
/admin/. - Migrations, with the initial one committed, so
sillo db:migrateon a fresh clone produces a working database rather than an empty one. - A queue and a scheduler, with the directories to put work in.
- Tests, including fixtures for an authenticated client.
- CI that boots the application and calls every route, on three Python versions.
That last one is why this is a repository rather than a template. See why a starter.
Dependencies
Section titled “Dependencies”sillo-framework[hashing-bcrypt,record,templating]aiosqliteemail-validatorSQLite by default, so there is nothing to run before the first request. Swap
the driver for asyncpg or asyncmy and change DATABASE_URL when you want a
server. See Database setup.
What sillohq/starter-inertia ships
Section titled “What sillohq/starter-inertia ships”The same Python application, plus:
js/ main.tsx the client entrypoint app.css styles types.ts, ui.ts shared frontend types and helpersviews/ Layout.tsx the shell every page renders into pages/ one component per pageroot.html the single HTML document Inertia substitutes intoapp/inertia.py the adapter's configurationvite.config.ts the frontend buildpackage.jsonAnd it drops Jinja: the only HTML it serves is root.html, which the Inertia
adapter reads and substitutes into directly. Every other page is a component.
Installing a template engine to render one static file would be a dependency
never called.
Dependencies
Section titled “Dependencies”sillo-framework[cache,hashing-bcrypt,record]sillo-inertiaaiosqliteemail-validatorNote the absence of templating. See Inertia for the
frontend side.
The Makefile
Section titled “The Makefile”Both starters ship one, and you can ignore it. Every target is a plain sillo,
uvicorn or pytest invocation. It exists so make on its own lists what a
project can do, not because anything depends on it.
The documentation uses the underlying commands throughout, so nothing here
requires make to be installed.
Using a different one
Section titled “Using a different one”Any public GitHub repository works:
sillo-start create-app acme/our-template myappSee Custom starters for what makes a repository work well as one.