Not every app needs a database on day one — a landing page, a calculator, a link shortener with a hard-coded list. So new apps now start without one, and the starter runs perfectly happily on server-rendered HTML alone.
Add it exactly when you need it
The moment you need to store something, call create_database. It provisions a Postgres database, runs your optional init_sql, and redeploys the app to inject DATABASE_URL — so your code goes from "no database" to "connected" in one step. Until then, the data tools return a clear hint pointing you to create_database, so nothing fails silently.
You don't pay for empty space
A fresh Postgres database occupies a few megabytes just for its own catalogs. We measure that baseline and discount it from both your usage and your quota — so an empty database doesn't eat into what you're paying for. Databases are also provisioned under a per-user concurrency limit, so a burst of new apps can never overwhelm the fleet.
The result: apps stay lean by default, and get a real database the instant they earn one.