WSGI server that sandboxes each route in its own uid, with per-route SQL allowlists enforced by a PostgreSQL proxy
  • Rust 84.6%
  • Python 14.6%
  • Shell 0.5%
  • Dockerfile 0.2%
Find a file
2026-10-27 08:53:53 +01:00
.github E2b: adoption papercuts the docs found (REMOTE_ADDR, cwd on sys.path, private-home interpreter, live server, connection setup) (#48) 2026-10-27 01:47:09 +01:00
.opencode/agents E2: documentation site (Zensical) (#47) 2026-10-26 23:41:30 +01:00
crates E2b: adoption papercuts the docs found (REMOTE_ADDR, cwd on sys.path, private-home interpreter, live server, connection setup) (#48) 2026-10-27 01:47:09 +01:00
docs E2d: three pages back under budget; App Platform refuses a forged CF-Connecting-IP (#57) 2026-10-27 02:19:58 +01:00
e2e e2e: the live run's forged-header check, deterministic (#56) 2026-10-27 02:02:20 +01:00
overrides E2: documentation site (Zensical) (#47) 2026-10-26 23:41:30 +01:00
python E2b: adoption papercuts the docs found (REMOTE_ADDR, cwd on sys.path, private-home interpreter, live server, connection setup) (#48) 2026-10-27 01:47:09 +01:00
scripts E4: PyPI trusted publishing, package metadata, changelog (#44) 2026-10-26 22:41:23 +01:00
.dockerignore D2: granian-style packaging (pyo3 extension, Python CLI, Python-free dbproxy) (#28) 2026-10-25 19:19:14 +01:00
.gitignore E2: documentation site (Zensical) (#47) 2026-10-26 23:41:30 +01:00
ARCHITECTURE.md E2d: three pages back under budget; App Platform refuses a forged CF-Connecting-IP (#57) 2026-10-27 02:19:58 +01:00
blastit_build.py E4: PyPI trusted publishing, package metadata, changelog (#44) 2026-10-26 22:41:23 +01:00
Cargo.lock D7: table and column grants (pg_query analysis) (#34) 2026-10-25 22:56:04 +01:00
Cargo.toml Architecture, spikes, roadmap, workspace skeleton and CI 2026-10-25 14:40:50 +01:00
CHANGELOG.md Release 0.1.0: the changelog, dated (#58) 2026-10-27 08:53:53 +01:00
docs-site-plan.md Docs: no ASGI section, blastit is WSGI (#54) 2026-10-27 00:41:37 +01:00
LICENSE Architecture, spikes, roadmap, workspace skeleton and CI 2026-10-25 14:40:50 +01:00
pyproject.toml E4: PyPI trusted publishing, package metadata, changelog (#44) 2026-10-26 22:41:23 +01:00
README.md E2c: docs review round 1, the rest; a shorter README (#49) 2026-10-27 00:18:58 +01:00
RELEASING.md E4: PyPI trusted publishing, package metadata, changelog (#44) 2026-10-26 22:41:23 +01:00
ROADMAP.md E2: documentation site (Zensical) (#47) 2026-10-26 23:41:30 +01:00
zensical.toml Docs: a page for fair queuing (#55) 2026-10-27 00:55:22 +01:00

blastit — Small bird. Small blast radius.

Documentation · Architecture · Apache 2.0

A WSGI server that keeps the blast radius of a security bug small. Each route runs in its own process under its own Unix user, talks to a local proxy instead of the real database, and may run only the SQL its manifest grants it — so one exploitable bug in the least important page is worth that page, not the app. Linux only, CPython 3.13+, PostgreSQL.

Get started

uv add adds to a project, so uv init one first; with pip, skip both. In a container, run blastit as root directly rather than through sudo.

$ uv init && uv add blastit       # or: pip install blastit
def application(environ, start_response):
    start_response("200 OK", [("Content-Type", "text/plain")])
    return [b"hello from blastit\n"]
version = 1
[[route]]
name = "hello"
path = ['.*']
$ sudo env BLASTIT_APP=hello:application BLASTIT_MANIFEST=$PWD/blastit.toml \
           PORT=8080 .venv/bin/blastit

Read the documentation → framework guide · infra guide · reference

License

Apache 2.0 — see LICENSE.