Architecture
Frappe is a layered web application stack. Understanding the parts helps when troubleshooting or sizing infrastructure.
The pieces
| Layer | Technology |
|---|---|
| Database | MariaDB (default) or PostgreSQL |
| Application server | Python with Gunicorn + Werkzeug |
| Background workers | RQ (Redis Queue) |
| Cache & sessions | Redis |
| Realtime updates | Socket.IO (Node.js) |
| Frontend | Server-rendered Jinja, plus jQuery/Vanilla JS on the desk |
| File storage | Local filesystem or S3-compatible object storage |
How a request flows
- Browser hits the web Gunicorn process via Nginx.
- Frappe resolves the request: DocType form, report, API call, or a custom page.
- Permissions are checked against the DocType, the user's roles, and any record-level rules.
- Data is read from MariaDB; the response is rendered (HTML, JSON or PDF) and returned.
- Long-running work (PDF generation, emails, integrations) is queued to worker processes via RQ; the user gets an immediate response.
Multi-tenancy
A single bench can host many sites, each with its own database, files, users and installed apps. That's how Frappe Cloud and Prilk-managed deployments serve many customers off one stack.
Last updated 3 days ago
Was this helpful?