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; si vienes solo de frontend, será más empinada.
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.
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
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.
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.
