← Back to archive

Repo of the Day

frappe/frappe

Published: Sep 22, 2021

Open repository ↗

Low code application framework. Python and javascript.

Summary

Frappe is a full-stack web application framework written in Python with a tightly integrated JavaScript client library and a MariaDB or PostgreSQL database layer. It is designed so that engineers define data models and metadata once, and the framework generates the admin UI, REST API, and forms on top of them. Originally built to power ERPNext, the project targets teams building business applications with many object types rather than simple websites.

What it is useful for

Frappe fits situations where you need to model a domain with many entities (the README notes ERPNext has more than 700 object types) and want CRUD, permissions, and an admin UI out of the box instead of writing them yourself. Documented features include a built-in admin dashboard, role-based permissions, an automatically generated REST API for every model, customizable forms and views through server-side Python scripting and client-side JavaScript, a report builder, webhooks, and email handling. The repository topics also list multi-tenant support, socket.io for real-time updates, and support for both MariaDB and PostgreSQL. Because of this scope, the README explicitly warns that the framework is not aimed at people just starting to learn web programming.

How engineers can use it

For local exploration, the README points at the bench tool. After installing bench using the Easy Install script or following the official installation documentation, you start the server with bench start, then create a new site with bench new-site frappe.localhost, and open http://frappe.localhost:8000/app in a browser with the default Administrator / admin login. For a production-like local stack, the README documents a Docker path: clone the separate frappe_docker repository, run docker compose -f pwd.yml up -d from inside it, and reach the site on port 8080 with the same default credentials. Once a site is running, you define DocTypes (the metadata describing your data), and the framework generates the form view, list view, REST endpoints, and permission rules; custom behavior is added through Python hooks and client-side JavaScript. A practical limitation called out in the source: there is no single-command install, so a working bench setup plus a running MariaDB or PostgreSQL instance is assumed, and you should be ready to consult the official documentation and community forum when you hit gaps.