Antes de empezar: requisitos
Conocimientos previos recomendados: Python intermedio, conceptos básicos de bases de datos relacionales, experiencia con CLI de Linux/macOS. Si vienes de Django, la curva es suave porque comparten muchas ideas; si vienes solo de frontend, será más empinada al principio, aunque se aprende rápido con el tutorial.
Sistema operativo: Linux Ubuntu 22.04 (recomendado) o macOS. En Windows usa WSL 2 con Ubuntu, no Windows nativo.
Hardware mínimo para desarrollo: 8 GB RAM, 20 GB libres en disco, CPU moderno. Para producción 2-4 GB RAM bastan en arranque.
Tutorial paso a paso
De cero a app deployada en producción, sin saltarte ningún paso intermedio: instalación del bench, creación de la app, definición de doctypes, lógica de negocio en Python, interfaz de usuario y despliegue final en un servidor real de producción, con backups incluidos.
Instala Bench y prepara tu entorno
Bench es el CLI de Frappe. Instala dependencias (Python 3.10+, Node 18+, MariaDB, Redis, wkhtmltopdf), instala bench con pip y crea un nuevo bench: `bench init frappe-bench --frappe-branch version-15`. Esto prepara una carpeta con todo el setup técnico necesario.
Crea un sitio local y arranca
Dentro del bench, crea un sitio: `bench new-site mi-app.localhost`. Luego arranca con `bench start`. Tu Frappe corre en http://mi-app.localhost:8000. Login con Administrator y la contraseña que pusiste al crear el sitio.
Genera tu app vacía
Crea una app dentro del bench: `bench new-app mi_app`. Luego instálala en tu sitio: `bench --site mi-app.localhost install-app mi_app`. Ahora tu app vive en `frappe-bench/apps/mi_app/` y está enlazada al sitio.
Define tu primer DocType desde la UI
Ve a la UI de Frappe Desk → Customize → DocType → Add. Define el nombre (por ejemplo `Cliente Premium`), añade campos (nombre, NIF, email, teléfono, plan), define permisos por rol y guarda. Frappe genera automáticamente la tabla en MariaDB, el formulario, la lista y la API REST.
Añade lógica con hooks Python
En `apps/mi_app/mi_app/cliente_premium/cliente_premium.py` puedes añadir métodos como `validate()` (se ejecuta antes de guardar), `before_save()`, `on_update()`, `before_cancel()`. También puedes añadir métodos custom que llames vía API o desde JavaScript del cliente.
Personaliza el frontend con JavaScript
En `apps/mi_app/mi_app/cliente_premium/cliente_premium.js` añade comportamiento del lado cliente: validaciones interactivas, esconder/mostrar campos según condiciones, llamar al servidor con `frappe.call`. Es como jQuery + helpers de Frappe.
Instala tu app en producción
Para deployar a producción: configura un servidor (Ubuntu 22.04 recomendado, 4 GB RAM mínimo), instala bench production setup (`bench --setup-production`), genera tu sitio production y configura SSL (Let's Encrypt). Tiempo medio: 1-2 horas para alguien con experiencia Linux.
Versiona y mantiene tu app
Tu app es un repositorio Git. Versiona en GitHub/GitLab. Para actualizar producción: `bench update --pull --patch`. Para añadir nuevas features sin riesgo: usa branches en tu app y bench staging para probar antes de mergear a producción.
Errores típicos al empezar con Frappe
Son los mismos cinco tropiezos que vemos repetirse en casi todos los proyectos que empiezan con Frappe, tanto en desarrolladores que vienen de Django como en los que llegan desde el frontend puro. Ninguno es grave si lo detectas a tiempo, pero todos cuestan horas si los descubres tarde.
1. Instalar en Windows nativo. Genera problemas con paths y dependencias. Usa siempre Linux o WSL.
2. No leer la documentación oficial. La doc de Frappe es buena; los tutoriales sueltos en blogs pueden estar desactualizados.
3. Customizar el core. Modificar archivos de Frappe o ERPNext directamente rompe tu sistema al actualizar. Construye SIEMPRE en tu propia app, usando hooks y override en lugar de tocar el core.
4. Olvidarse de las migraciones. `bench migrate` después de actualizar es obligatorio; saltárselo deja tu base de datos desincronizada con el código.
5. Confundir Bench con Frappe. Bench es el CLI de gestión; Frappe es el framework. Comandos `bench` operan a nivel sitio/servidor; código Python `frappe.X` opera dentro del framework.
— FAQ
Preguntas frecuentes sobre desarrollar con Frappe
Las dudas reales del developer que empieza con Frappe: qué diferencia real hay con Django, cuánto tiempo tarda en dominarse el framework y si de verdad hace falta tocar el core alguna vez o basta con hooks y overrides bien diseñados.
Ver todas las preguntas¿Cuánto tiempo tarda en desarrollar mi primera app Frappe?+−
¿Necesito instalar ERPNext para desarrollar con Frappe?+−
¿Puedo desarrollar Frappe en Windows?+−
¿Dónde despliego mi app Frappe en producción?+−
¿Cómo hago tests en Frappe?+−
¿Puedo usar TypeScript en lugar de JavaScript?+−
¿Dónde encuentro ayuda si me atasco?+−
Sigue investigando
Si quieres profundizar antes de escribir la primera línea de código: qué es Frappe Framework, en qué se diferencia de Django, cómo contratar desarrollo si prefieres no hacerlo tú mismo y qué apps del ecosistema ya existen y evitan reinventar la rueda.
¿Construyendo algo serio en Frappe?
Si necesitas equipo experto para tu app Frappe, ya sea una extensión de ERPNext o una aplicación standalone completa, tenemos años de experiencia implantando y desarrollando sobre el framework, con código abierto en producción real y soporte técnico detrás siempre.
