Init Inicializar App
Inicializa tu aplicación Blue Bird.
npx blue-bird
Una estructura potente basada en Express y React, diseñada para crear aplicaciones rápidamente y todo lo que necesitas pre-configurado.
npm install @seip/blue-bird
¿Cansado de configurar CORS, Cookies y Routing,etc cada vez que inicias un proyecto? Blue Bird provee una base sólida y pre-configurada para que vayas directo a la lógica, sin perder la extensibilidad pura de Express.
Express, React , Validaciones, JWT Auth y Uploads listos para usar.
Usa el método `.use()` para configurar middleware de Express tal como lo haces siempre.
Diseñado para escalar con elegancia.
Generación y validación de tokens con middleware listo para proteger tus rutas API o Web.
Motor de validación multi-idioma con reglas predefinidas y mensajes automáticos.
Subida de archivos a disco facilitada por Multer, configurada para tu carpeta pública.
React y React Router pre-configurados para SPA, o páginas tradicionales.
Vite listo para usar, optimizado para desarrollo y producción.
Express pre-configurado para modo API o modo Web tradicional.
Todo sobre la API Core de Blue Bird.
Inicializa tu aplicación Blue Bird.
npx blue-bird
Configura React para tu aplicación Blue Bird.
npm run react
Editar package.json para soporte "module" y "type": "module"
{
"type": "module",....
}
Inicia el servidor backend:
npm run dev
Inicia el servidor frontend (Vite):
npm run vite:dev
Configuración central de tu servidor Express.
import App from "@seip/blue-bird/core/app.js";
import routerUsers from "./routes/users.js";
const app = new App({
port: 3000,
routes: [routerUsers],
cors:[],\\ [{ origin: '*' }],
rateLimit:{
windowMs: 10 * 60 * 1000,
max: 300
}
});
app.use(myCustomMiddleware);
app.run();
| Opción | Tipo | Default |
|---|---|---|
| routes | Array | [] |
| middlewares | Array | [] |
| port | Number | 3000 |
| host | String | "http://localhost" |
| cors | Object | {} |
| static | Object | { path: null, options: {} } |
| rateLimit | Boolean | Object | false |
| logger | Boolean | true |
| notFound | Boolean | true |
| json | Boolean | true |
| urlencoded | Boolean | true |
| cookieParser | Boolean | true |
| helmet | Boolean | Object | true |
| xssClean | Boolean | true |
| swagger | Boolean | true |
Activa automáticamente headers HTTP seguros para proteger contra ataques comunes como clickjacking, MIME sniffing y más.
new App({
helmet: true
});
También acepta configuración personalizada.
Sanitiza automáticamente el body de las requests para prevenir inyección de scripts maliciosos (XSS).
new App({
xssClean: true
});
Maneja tus rutas de forma modular y límpia.
import Router from "@seip/blue-bird/core/router.js";
import Template from "@seip/blue-bird/core/template.js";
const routerUsers = new Router("/")
routerUsers.get("/users", (req, res) => {
const users = [
{
name: "John Doe",
email: "john.doe@example.com",
},
{
name: "Jane Doe2",
email: "jane.doe2@example.com",
},
]
res.json(users)
})
const loginSchema = {
email: { required: true, email: true },
password: { required: true, min: 6 }
};
const loginValidator = new Validator(loginSchema, 'es');
routerUsers.post('/login', loginValidator.middleware(), (req, res) => {
res.json({ message: 'Login successful' });
});
//Ejemplo de renderReact con meta Tags modificados
routerUsers.get("/about", (req, res) => {
const response = Template.renderReact(res, "About", { title: "About Example title" }, {
metaTags: {
titleMeta: "About Title",
descriptionMeta: "About description",
keywordsMeta: "About,express, react, framework",
authorMeta: "Blue Bird",
langMeta: "es"
}
});
return response;
})
routerUsers.get("*", (req, res) => {
// Renderizado SPA con React
return Template.renderReact(res, "App", { title: "Mi Proyecto" });
})
export default routerUsers;
Renderiza componentes React con soporte automatizado para SEO y multi-idioma.
El método router.seo() permite registrar múltiples
rutas con metadatos y props en una sola llamada. Soporta configuraciones de idioma único y
multi-idioma.
import Router from "@seip/blue-bird/core/router.js";
const frontendRouter = new Router();
frontendRouter.seo([
{
path: "/",
component: "Home",
// Soporte multi-idioma (se crearán rutas con prefijo como /es/)
en: { title: "Home - Blue Bird", desc: "Welcome to our framework" },
es: { title: "Inicio - Blue Bird", desc: "Bienvenido a nuestro framework" },
props: { id: 1 }
},
{
path: "/about",
component: "About",
// Soporte de meta directo para un solo idioma
meta: { titleMeta: "Sobre Nosotros", descriptionMeta: "Conoce más sobre Blue Bird" },
props: { id: 2 }
}
], {
languages: ["en", "es"],
defaultLanguage: "en"
});
// IMPORTANTE: Ruta comodín para soportar SPA
routerFrontendExample.get("*", (req, res) => {
return Template.renderReact(res, "App");
});
router.seo() deben coincidir exactamente con las rutas de tu
App.jsx (React Router). De lo contrario, React cargará la ruta por
defecto al hidratarse.
* al
final para asegurar que cualquier sub-ruta no definida específicamente sea manejada
por la SPA (App).Si necesitas más control, puedes usar
Template.renderReact directamente. Maneja automáticamente el atributo
<html lang="..."> si se proporciona langMeta.
import Template from "@seip/blue-bird/core/template.js";
router.get("/personalizado", (req, res) => {
return Template.renderReact(res, "Custom", { some: "prop" }, {
metaTags: {
titleMeta: "Página Personalizada",
descriptionMeta: "Descripción personalizada",
langMeta: "es" // Configura automáticamente
},
skeleton: true // [NUEVO] Activa pantallas de carga (loading loaders) automáticamente
});
});
import Validator from "@seip/blue-bird/core/validate.js";
const schema = {
email: { required: true, email: true },
password: { required: true, min: 6 }
};
const validate = new Validator(schema, 'es');
router.post("/register", validate.middleware(), (req, res) => {
res.json({ message: "OK" });
});
import Auth from "@seip/blue-bird/core/auth.js";
const token =Auth.generateToken(payload);
res.cookie("token", token, {
httpOnly: true,
secure: process.env.NODE_ENV === "production",
sameSite: "strict",
maxAge: 24 * 60 * 60 * 1000
});
Auth.verifyToken(token) //Forma manual
Auth.protect(); // Middleware
//Obtener valor
routerApiExample.get("/user", Auth.protect(), (req, res) => {
const currentUser = req.user;
console.log(`Petición realizada por: ${currentUser.name} (ID: ${currentUser.id})`);
....});
import Upload from "...";
Upload.disk({ folder: 'img' });
// Basado en Multer
Lila integra soporte nativo para múltiples idiomas en el frontend mediante un Context
Provider, usando la clave blue_bird_lang en el localStorage para
mantener la preferencia del usuario.
Nota: Por defecto, Blue Bird ya incluye LanguageProvider en
App.jsx para gestionar aplicaciones multiidioma de forma nativa. Si deseas
removerlo, simplemente edita App.jsx y elimina el wrapping del provider.
import { LanguageProvider } from './blue-bird/contexts/LanguageContext.jsx';
export default function App() {
return (
<LanguageProvider>
<Router>
{/* Tus rutas */}
</Router>
</LanguageProvider>
);
}
Luego, dentro de cualquier componente o página puedes utilizar el hook
useLanguage():
import { useLanguage } from '../../blue-bird/contexts/LanguageContext.jsx';
export default function Login() {
const { t, lang, setLang } = useLanguage();
return (
<div>
{/* Las traducciones están en frontend/resources/js/blue-bird/locales/[lang].json */}
<p className="error">{t('error_general')}</p>
</div>
);
}
Para acelerar el desarrollo, incluimos componentes React elegantes y listos para usar. Están
estilizados con Tailwind CSS (el cual ahora se integra nativamente vía Vite en
vite.config.js,
asegurando un rendimiento óptimo). Destacan:
Blue Bird incluye una herramienta para generar de principio a fin todo el sistema de autenticación completo, listo para producción.
npm run scaffolding-auth
routes/auth.js,
routes/authenticated.js) con flujos de login, registro, logout y
recuperación de contraseñas.
backend/databases/services/auth.service.js. Esto aisla las consultas,
permitiendo que reemplaces fácilmente el SQL nativo por ORMs como Prisma si así lo
deseas.
frontend/resources/js/pages/auth (Login, Register, Dashboard protegido
y restablecimiento de claves).
Middleware simple de cache en memoria para respuestas JSON. Permite mejorar el rendimiento evitando ejecutar el controlador repetidamente durante un período definido.
import Cache from "@seip/blue-bird/core/cache.js";
import Router from "@seip/blue-bird/core/router.js"
const routerStats = new Router("/")
routerStats("/stats",
Cache.middleware(120), // 120 segundos
controller.stats
);
//Testing
routerStats("/stats_",
Cache.middleware(120),
async (req, res) => {
await new Promise(resolve => setTimeout(resolve, 2000));
res.json({
message: 'Login successful',
note: 'Esta respuesta tardó 2 segundos en llegar.'
});
}
);
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
| seconds | Number | 60 | Tiempo en segundos que la respuesta permanece en cache. |
req.originalUrl como clave de cache.res.json() para almacenar la respuesta.Integración de documentación automática utilizando Swagger (OpenAPI 3). Permite visualizar y probar endpoints directamente desde el navegador.
Primero instala swagger con npm o cli blue-bird :
npm run swagger-install
const app = new App({
routes: [routerUsers],
cors: [],
middlewares: [],
port: 3000,
host: "http://localhost",
swagger:{
info: {
title: "Blue Bird API",
version: "1.0.0",
description: "Blue Bird Framework API Documentation"
},
url : "http://localhost:8000"
}
})
/**
* @swagger
* /users:
* get:
* summary: Get all users
* tags: [Users]
* responses:
* 200:
* description: List of users
*/
router.get("/users", controller.getUsers);
/**
* @swagger
* components:
* schemas:
* User:
* type: object
* properties:
* name:
* type: string
* email:
* type: string
*/
/docs.components.securitySchemes.@swagger deben estar correctamente indentados./docs.El módulo Debug permite monitorear el rendimiento de tu aplicación en tiempo real. Registra métricas como tiempo de respuesta, uso de memoria RAM, consumo de CPU y estadísticas por ruta. Cuando en .env es Debug=true queda activada la ruta.
Luego accede al panel visual en:
http://localhost:3000/debug
fetch/debug?fetch=true/debugGET /debug?fetch=true
Devuelve las métricas en formato JSON:
{
"requests": [
{
"method": "GET",
"url": "/users",
"status": 200,
"responseTime": 32.14,
"ramUsedMB": 45.21,
"cpuUsedMS": 1.23,
"date": "2026-02-27T12:00:00.000Z"
}
],
"routes": {
"GET /users": {
"count": 5,
"totalTime": 160.5
}
}
}
Blue Bird está diseñado para producción. Con características como caching, compresión gzip, y manejo de errores robusto, puedes estar seguro de que tu aplicación funcionará correctamente.
Para producción, se recomienda usar un servidor proxy como Nginx para manejar el SSL, la compresión gzip, y el balanceo de carga.
Primero edita .env , poniendo DEBUG=false
DEBUG=false
Luego ejecuta el comando para generar la build de react con vite:
npm run vite:build
Para ejecutar en producción se utiliza "npm run start" , por lo que con PM2 haremos:
pm2 start npm --name "blue-bird" -- run start
Esto iniciará la aplicación en producción y la mantendrá viva
.
pm2 save
Esto guardará la configuración de PM2 para que se inicie
automáticamente al reiniciar el servidor.