Craft Framework · Código abierto MIT

Craft Engine v3.21.0

El framework Python para aplicaciones web expresivas

Construye aplicaciones elegantes y listas para producción en Python, con convenciones MVC familiares. Craft ORM con UUID de doble clave, plantillas Forge, WAF Active Defense y CRUD builder visual — todo incluido.

1,500+ Pruebas pasando
3 Bases de datos
MIT Licencia
Py 3.14+ Runtime ASGI
routes/web.py & app/Models/Post.py
from craft.facades import Route, Auth, DB
from craft.orm.model import Model

class Post(Model):
    __table__ = "posts"
    fillable = ["title", "body", "user_id"]

    def author(self):
        return self.belongs_to(User)

# Expressive REST & Admin Routing
Route.resource("posts", PostController, write_middleware="auth")
Route.get("/admin", [AdminController, "index"])
    .middleware("auth", "role:admin", "firewall")

Funcionando en segundos

De cero a una aplicación en marcha, con migraciones, datos de ejemplo e interfaz de administración — en cuatro pasos simples.

1

Clonar y configurar

$ git clone https://github.com/msrjson/craftengine.git
$ cd craftengine/data && cp .env.example .env
$ python dev.py key:generate
2

Migrar y poblar

$ python dev.py migrate --seed
3

Servir en local

$ python dev.py serve

Ejecutar con Docker

$ docker compose up -d --build

Aplicación lista en localhost:9000

Todo lo que necesitas, nada de lo que no

Un framework completo que respeta tu tiempo. Convenciones MVC familiares, pensadas para desarrolladores Python que exigen velocidad, claridad y seguridad.

Active Record y UUID de doble clave

ORM de alto rendimiento con eager loading, relaciones, soft deletes, query builder y resolución automática de UUID público — en SQLite, PostgreSQL y MySQL.

Rendimiento ASGI asíncrono

Un núcleo ASGI de alto rendimiento: los controllers síncronos se ejecutan en paralelo en un pool de hilos, cada uno con una conexión del pool, con soporte para controllers asíncronos.

Active Defense y firewall WAF

Web Application Firewall integrado (protección contra SQLi, XSS y SSRF), honeypot para atrapar atacantes, bloqueo contra fuerza bruta y registro de auditoría.

CRUD builder visual y de terminal

Genera cortes verticales completos con un comando o con el builder visual: migraciones DDL, Models, FormRequests, Resources e interfaz de administración.

Motor de plantillas Forge

Plantillas expresivas con escape automático y directivas como @csrf, @auth, @guest, @can, @honeypot y layouts de componentes.

Consola y CLI para desarrolladores

Herramientas de línea de comandos completas: generadores, consola interactiva tinker, migrador de base de datos, workers de cola, planificador de tareas y gestión del firewall.

La seguridad es parte del motor

Los valores peligrosos por defecto ya están cerrados antes de tu primera ruta — no quedan como una lista de tareas para después.

Hash de contraseñas Argon2id

Hash de uso intensivo de memoria para contraseñas nuevas; los hashes antiguos bcrypt y PBKDF2 siguen siendo verificables y se actualizan en el siguiente inicio de sesión.

Bóveda de credenciales AES-256-GCM

Las claves de API de terceros y los secretos OAuth se cifran en reposo con una clave derivada de la clave de la aplicación — nunca en texto plano.

Tokens firmados con contexto

Los tokens de restablecimiento de contraseña y de verificación quedan ligados a su propósito y contexto, con caducidad opcional, para que un token filtrado no se reutilice en otro lugar.

CSRF, honeypot y anti-spam

Todo formulario que cambia estado lleva @csrf; los formularios públicos suman honeypot y anti-spam con comparación en tiempo constante, y cada activación se registra como evento de seguridad.

Autorización, no solo autenticación

Gates, policies y middleware role:; el build falla si alguna ruta de administración se declara sin una protección de autorización.

Persistencia absoluta de datos

Migraciones solo hacia adelante y soft deletes. Los comandos destructivos como migrate:fresh y db:wipe están prohibidos en todos los entornos.

Un esqueleto que copias, no una librería contra la que luchas

El repositorio es el esqueleto base de una aplicación nueva. Clónalo, renómbralo, y la misma base de código te lleva de un blog a la escala multi-tenant.

craftengine/
  • data/la aplicación, montada como /app
  • data/engine/el núcleo, importado como craft.*
  • data/app/controllers, models, policies, plugins
  • data/routes/rutas web y de API
  • data/resources/views/plantillas Forge
  • data/database/migraciones solo hacia adelante y seeders
  • data/documentation/más de 35 guías y llms.txt
  • data/tests/más de 1.500 casos pytest
  • data/dev.pyla CLI de desarrollo
  • .claude/rules/gobernanza y gates de calidad
  • .agents/skills para agentes de IA

Módulos, plugins y contenedor

Núcleo, módulos de negocio y plugins de capacidad removibles, conectados por un contenedor de inyección de dependencias y facades estáticas — todo servicio se puede simular en pytest.

i18n en base de datos

Las traducciones viven en la base de datos, no en archivos sueltos. Todo proyecto nace trilingüe — inglés como fuente, portugués de Brasil por defecto, español como alternativa — con plurales ICU.

Releases gobernadas

Versión, contador de release y changelog avanzan juntos; pruebas, lint y el gate de idioma deben pasar antes de publicar una release. Código en inglés, cero textos de usuario fijos en el código.

Hecho para personas y para agentes de código

Convenciones que un modelo ya entiende, documentación escrita para máquinas y para personas, y herramientas de agente de primera clase dentro del framework.

Model Context Protocol

Declara clases AgentTool protegidas por RBAC y exponlas por MCP, para que asistentes e IDEs descubran e invoquen las herramientas de tu aplicación de forma segura.

SDK de IA independiente del proveedor

Una facade AI para generación de texto y un orquestador de agentes, con drivers intercambiables en lugar de depender de un proveedor.

Documentación legible por máquinas

llms.txt, llms-full.txt, CRAFT_ENGINE.md y las skills de agente le dan a un agente de código el ciclo de construcción, los límites y lo que aún no existe.

Peticiones en paralelo en un solo worker

Medido en la aplicación de ejemplo con el load tester incluido, tras mover la cadena de controllers a un pool de hilos con conexiones en pool.

~115 req/s con 10 clientes concurrentes, antes ~27 req/s
0.57 s latencia p95, antes 1,9 s
JSON trabajos en cola, nunca pickle — seguros entre procesos