Skip to main content

Sillo Start

Creates a Sillo application from a starter repository.

uvx sillo-start create-app myapp
cd myapp
uv sync
uv run sillo db:migrate
uv run sillo dev

That is the whole tool. It fetches a real, working application, renames it to yours, gives it its own secrets, and gets out of the way.

Why a starter repository, not a generator

A generator renders templates. Templates are checked for rendering, which is not the same as working — a project can produce valid Python, import cleanly, render every page, and still fail on its first real request. Middleware registered in the wrong order, an auth backend reading the wrong claim, a missing static mount: all of them render perfectly.

sillohq/starter is a real application with its own CI. Every push boots it and exercises every route, on three Python versions. What you get has been run, not just written.

It also means the starter can be read, forked and improved on its own, and that sillo-start never has to be released to fix a bug in what it produces.

Install

# Run it without installing
uvx sillo-start create-app myapp

# Or install it
uv tool install sillo-start
pipx install sillo-start

Python 3.11 or newer. The only dependencies are typer and rich.

Usage

sillo-start create-app myapp                       # the default starter
sillo-start create-app sillohq/starter myapp       # named explicitly
sillo-start create-app sillohq/starter@v1.2 myapp  # pinned to a tag
sillo-start create-app acme/our-template myapp     # your own starter

Any public GitHub repository works. A full URL is accepted too, so pasting what is in your address bar does what you expect.

Option
--ref <branch|tag> Which revision to take. Defaults to main
-d, --directory <path> Where to create it. Defaults to ./<name>
--install Install dependencies straight away
--no-git Do not initialise a git repository
--force Allow a directory that is not empty
-v, --verbose Show tracebacks

Dependencies are not installed by default, so creating a project takes a second rather than a minute. uv sync in the new project installs them, and the command prints the exact next steps for the manager it detected.

What it does to the project

The starter arrives as a tarball rather than a clone. That needs no git on the machine, brings no history for you to delete before your first commit, and pins to a tag as easily as to a branch.

Then three things happen:

It takes your name. The package name, the application title, the SQLite path. Rewriting is targeted rather than a blanket find-and-replace, so prose that happens to say "starter" — a README sentence, a comment — is left as written.

It gets its own secrets. .env is created from .env.example with a fresh key for SECRET_KEY, JWT_SECRET and APP_KEY. A secret committed to a starter is a placeholder by definition; no two projects should ever share a signing key. An existing .env is never touched — it may hold real credentials.

It becomes a git repository, unless you pass --no-git.

What it deliberately does not do

Migrations, creating users, running the queue worker, starting the server — none of that is here.

Those belong to the project, behind its own sillo command:

uv run sillo db:migrate
uv run sillo user:create ada@example.com --admin
uv run sillo queue:work
uv run sillo dev

The framework provides the operations as plain functions — sillo.record.commands, sillo.users.commands, sillo.work.commands — and the project decides how to expose them. Nothing in a created project depends on sillo-start, so it cannot rot when this tool changes, and you can delete this tool the moment your project exists.

Safety

An archive member whose path escapes the destination is refused rather than sanitised — that is how a malicious archive overwrites files elsewhere on your machine.

A directory that is not empty is refused unless you pass --force, and even then existing files are left in place.

A project name that is not a usable Python identifier is refused before anything is fetched, since it becomes both a package name and a directory.

Development

See docs/contributing.md.

Licence

BSD-3-Clause.

Metadata

Release files for sillo-start 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sillo-start 1.0.0
File Size Uploaded Provenance Actions
sillo_start-1.0.0.tar.gz 22.8 kB Without provenance Details for sillo_start-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sillo-start 1.0.0
File Interpreter ABI Platform Actions
sillo_start-1.0.0-py3-none-any.whl Python 3 none any Details for sillo_start-1.0.0-py3-none-any.whl

Total release size: 46.0 kB

Release files / sillo_start-1.0.0.tar.gz

Download URL sillo_start-1.0.0.tar.gz
Size 22.8 kB
Tags Source
SHA-256 checksum
How to use checksums
5a307ad7c2f84713796c99169510ac65c30b8f4491602c46f9476ade155f18cc
BLAKE2b-256 checksum
How to use checksums
01117e06d92f46c861963feeca996f1dc45507378e0e9f8fa082dcb3d31d33b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / sillo_start-1.0.0-py3-none-any.whl

Download URL sillo_start-1.0.0-py3-none-any.whl
Size 23.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6f031ea6e14714f74e94b281c133fc675fe2a567d6d4f706acf1d8e51e713bac
BLAKE2b-256 checksum
How to use checksums
37902f9d199e10dee2d400d61d6baf27df56ca110f9e223d42fee312c68d8284
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for sillo-start 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page