Phemeral Logo
  • WSGI
  • gunicorn
  • Autodetected

Deploy Flask serverlessly.

Scales to zero. Scales up (cold start) in less than 50ms. No config files needed, no infra to manage.

Why Flask fits Phemeral

No adapters, no wrappers, no config.

  • No need for config files

    Phemeral figures out how your Flask app is structured, what dependencies you're using, what version of Python you're using, and builds your app without the need for config files.

  • Runs serverlessly without compromises

    Even though your app is running on serverless infra, it runs with gunicorn just like normal. So, no more adapters to get your app running for serverless.

  • Free concurrency even if you didn't write async

    Since each request is handled in an ephemeral serverless environment, concurrent requests won't block each other. Even if your app isn't using asyncio.

  • Lightning fast cold starts.

    When scaling up, your app goes from dead to alive in less than 50 ms. Pretty darn fast.

Deployment model

Github integration gives you CI/CD. New deployments are triggered on pushes to your repo.

  1. 01

    Push

    A push triggers a deployment.

  2. 02

    Detect

    Python version, framework, package manager, project root and entry point are detected from source.

  3. 03

    Build

    Dependencies are installed, the project is built.

  4. 04

    Live

    The deployment is assigned a URL and any custom domains you've set up will route to the latest deployment.

Platform features you need for a Flask app

  • Environments

    Production, Staging, and Development are created with every project. Make as many other environments as you need too.

  • Environment variables

    Manage your environment variables for your app. Set env vars for each of your environments.

  • Custom domains

    Use your custom domains for your hosted apps.

  • Build and runtime logs

    Observability you need. Monitor build logs as your deployment is built, and runtime logs as it runs. Catch bugs before they're bugs.

  • Custom start command

    Set a custom start command if you're doing something fancy.

  • CRON jobs

    Set up CRON jobs to make requests to your deployment on whatever schedule you want.

Everything around the app

Databases, static files, background work and scaling.

Databases

Provision managed serverless Postgres clusters inside the project.

Our managed serverless Postgres scales up and down to match your traffic

Static files

Flask serves a static folder next to your app package without any extra wiring.

app/static/style.css → /static/style.css

Background work

Scheduled webhooks cover recurring jobs: cache warming, maintenance endpoints, and application-level tasks triggered on a schedule.

0 0 3 * * * → every day at 03:00 UTC

Scaling and connections

Deployments scale to zero when idle and up on demand.

A minimal Flask project

That's all you need. No config files to be found.

Repository

my-project/
├── .python-version
├── pyproject.toml
├── uv.lock
└── app/
    └── main.py

app/main.py

from flask import Flask

app = Flask(__name__)

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

Phemeral detects app as the app object.

Read the full tutorial

All docs

Flask on Phemeral, answered

Your app is started with gunicorn on port 8000, over WSGI. For the example project on this page that means gunicorn app.main:app --bind 0.0.0.0:8000 --timeout 0. It runs the same way it does on your machine, on serverless infrastructure that scales to zero.

Host your Flask app on Phemeral.

Connect a repository, make a push. Free to start.

Other frameworks