Traditionally, developers needed separate platforms for:
Frontend → Vercel (easy)
Backend → AWS / GCP / Azure (complex)
Vercel now lets you run both in one place.
Key Insight: Less infrastructure management = faster shipping
Run Python web frameworks directly on Vercel without managing servers.
| Framework | Use Case |
|---|---|
| FastAPI | High-performance APIs |
| Flask | Lightweight apps |
| Django | Full-featured web apps |
Vercel Blob → File storage
Vercel Queues → Background jobs
Vercel Workflows → Multi-step processes
Vercel Sandbox → Run untrusted code safely
AI SDK → Stream AI model responses
Delphi (10 engineers, no dedicated DevOps) ships 100+ times/day after moving from AWS ECS to Vercel
Deploy applications packaged as Docker containers — any language, any OS library.
Problem: Some apps need special system tools (e.g., ffmpeg for video)
Solution: Package everything into one container image
Your Code + Dependencies + OS Libraries
↓
Dockerfile
↓
Vercel builds image
↓
Stored in Vercel Container Registry
↓
Deployed as Vercel Function
FROM python:3.12-slim
# Install system library (ffmpeg)
RUN apt-get update \
&& apt-get install -y --no-install-recommends ffmpeg \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY processor.py .
CMD ["python", "processor.py"]
Traditional: Pay even when idle ❌
Vercel: Active CPU pricing — only pay when working ✅
Containers that run continuously as background workers — they don't stop between jobs.
Regular Function: Request → Run → Stop
Daemon: Start → Run → Pull work → Run → Pull work → (never stops)
vercel.toml):# Frontend service
[services.frontend]
framework = "nextjs"
root = "."
# Route all traffic to frontend
[[routes]]
src = "/(.*)"
destination.service = "frontend"
# Daemon background worker
[daemons.videos]
root = "."
entrypoint = "Dockerfile"
instances.iad1 = 1 # Keep 1 instance running in Washington D.C.
User uploads video
↓
Frontend (Next.js) → sends job to Vercel Queues
↓
Daemon (always running) pulls job from Queue
↓
Processes video with ffmpeg (thumbnail + playback copy)
↓
Stores result in Vercel Blob
| Scenario | Use This |
|---|---|
| Python API (FastAPI/Flask/Django) | Python on Vercel |
| App needs special OS libraries | Containers |
| Continuous background processing | Daemons |
| Process queue messages non-stop | Daemons + Containers |
Q1: What does Vercel handle automatically for Python backends?
Detection, builds, scaling, and deployments
Q2: Why use containers instead of plain Python functions?
When you need system-level libraries (like ffmpeg) not available in standard runtimes
Q3: What makes Daemons different from regular serverless functions?
Daemons run continuously and pull work; functions start and stop per request
Q4: What pricing advantage do containers on Vercel have?
Active CPU pricing — no charge for idle time
Vercel Backends
├── Python (GA)
│ ├── FastAPI, Flask, Django
│ └── PyPI + Vercel SDKs
├── Containers
│ ├── Any language
│ ├── Custom OS libraries
│ └── Dockerfile deployment
└── Daemons
├── Always-running workers
├── Pull-based workloads
└── Configured in vercel.toml