A bundlephobia-style size explorer for PyPI
packages. Type a package — requests, or headroom-ai[all] with extras — and
see its install size: the wheel plus every dependency, deduplicated, sorted
largest-first. Click any dependency to drill into it; the URL is shareable.
It resolves entirely against the public PyPI JSON API — no installing, no sandbox.
make run # or: uv run main.py
# open http://127.0.0.1:8731That's it — uv reads the dependencies from the
inline script header in main.py and runs the server. Run make help for the
other targets (verify, ping, deploy, logs, clean).
The total is the download size of one wheel per package (prefers the
py3-none-any wheel), summed across the package and the full deduplicated
dependency set. It is a close analog to bundlephobia's number, not an exact
on-disk install size — see docs/accuracy.md.
GET /api/size?pkg=<requirement>
<requirement> is any PEP 508 requirement: flask, httpx, boto3,
headroom-ai[all], django>=5. Response:
- How it works — the resolver and the two cache layers.
- Accuracy — how results are verified against
uv, and the known gaps. - Deployment — Ansible playbook to run it behind nginx as a systemd service.
verify.py resolves random popular packages and diffs the dependency set
against a real resolver (uv pip compile):
uv run verify.py 5 # 5 random popular packages
uv run verify.py flask boto3 # specific ones| Path | What |
|---|---|
main.py |
FastAPI app: resolver, caching, API, serves the page |
index.html |
Single-page frontend |
verify.py |
Correctness check against uv |
ansible/ |
Deployment playbook (nginx + systemd) |
Makefile |
Common tasks (make help) |
docs/ |
Documentation |
A proof of concept. It resolves the latest version satisfying each specifier rather than producing a fully locked resolution, and reports wheel download size. Good enough to compare packages at a glance; not a substitute for actually installing.
{ "name": "Flask", "version": "3.x", "self_size": 612345, // bytes, the package's own wheel "total_size": 618000, // bytes, deduplicated total "dep_count": 6, // unique dependencies "packages": [ // each unique dependency, largest first { "name": "Werkzeug", "version": "3.x", "size": 234567 }, ... ] }