Qué es NSRAD
nsrad es el framework de desarrollo rápido de aplicaciones web de Nacarsoft, escrito en Go y orientado a entornos con base de datos (ADABAS, Oracle, PostgreSQL, SQLite, DB2). Las aplicaciones se definen con ficheros YAML —formularios, listados, menús dinámicos y servicios REST-API— más tareas programadas (crontab), sin escribir código repetitivo. El control de acceso es por roles (RBAC: usuarios, grupos, roles y permisos).
Los nombres de aplicaciones, ficheros y datos de los ejemplos son ficticios.
Casos de uso
1. Aplicación de gestión sobre ADABAS con formularios y listados
Crear una app de mantenimiento (p. ej. gestion-polizas ficticia) sobre el fichero ADABAS configurado.
./build/nsrad init /tmp/miproyecto
./build/nsrad start /tmp/miproyecto
# → listening on http://127.0.0.1:9090
Flujo web (http://localhost:9090, admin / admin123): crear la aplicación bajo apps/, definir sus pantallas (formularios, listados) en YAML, apuntar a la base configurada o a una entidad Natural, y navegar por los menús dinámicos en el navegador.
2. Exponer datos de negocio como REST-API JSON
Exponer una entidad (p. ej. clientes ficticia) como endpoint con autenticación y control de roles.
curl -s -X POST http://localhost:9090/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin123"}'
Flujo web: definir la entidad en el YAML de la aplicación; consumir GET /api/<app>/<entidad> con el token JWT obtenido en el login; cada rol autoriza acciones concretas sobre aplicaciones y datos.
3. Automatizar un informe nocturno con tareas programadas
Generar cada noche un informe o sincronización (p. ej. resumen de pólizas ficticio) vía crontab de la aplicación.
./build/nsrad status /tmp/miproyecto
# → nsrad is running (PID 12345) — listening on http://127.0.0.1:9090
Flujo web: declarar la tarea (informe, sincronización) en el YAML de la aplicación; verificar en logs/ del entorno que la ejecución programada se completó.
4. Prototipo multidioma con varios entornos
Levantar entornos de desarrollo y producción con el mismo binario y servir la UI en español e inglés.
./build/nsrad init /tmp/dev && ./build/nsrad start /tmp/dev
./build/nsrad init /tmp/prod && ./build/nsrad start /tmp/prod
./build/nsrad status /tmp/prod
Flujo web: ajustar i18n.supported_languages y ui.default_theme en cada config.yaml; comprobar idioma y tema en el navegador; parar con ./build/nsrad stop /tmp/dev.
Interfaz


Referencia
Comandos CLI (verificados con --help, v1.0.0 build 679)
| Comando / flag | Descripción |
|---|---|
init [dir] | Inicializa un entorno nuevo (config.yaml + db/ + logs/, además de themes/, apps/, certs/, i18n/) |
start [dir] | Arranca el servidor en segundo plano |
stop [dir] | Detiene el servidor en segundo plano |
status [dir] | Estado: running/not running, PID, uptime, memoria, URL y config usada |
license | Muestra el estado de la licencia y sale |
--config <dir> | Alias de [dir] (directorio del entorno, no fichero) |
--version, -v | Muestra versión y build |
--help, -h | Muestra la ayuda |
Nota: el manual de referencia lista flags
--direnv,--port,--host,--start/--stop/--restart; el binario real usa subcomandosinit/start/stop/statuscon[dir]posicional. Guíese por esta tabla.
Principales opciones de config.yaml (ver config.example.yaml)
| Opción | Descripción |
|---|---|
server.port | Puerto HTTP (por defecto 9090) |
server.read_timeout / write_timeout / shutdown_timeout | Tiempos de espera del servidor |
server.logo_path, app_name, copyright | Personalización de la cabecera |
security_db.path | SQLite de seguridad (db/security.db): usuarios, grupos, roles |
auth.jwt_secret | Secreto JWT — cámbielo en producción (o variable AUTH__JWT_SECRET) |
auth.jwt_expiry / refresh_expiry | Caducidad del token (15m) y del refresh (24h) |
auth.ldap_enabled, ldap_host, ldap_port, ldap_base_dn | Autenticación LDAP opcional |
smtp.* | Correo para reseteo de contraseña y notificaciones (host, port, username, password, from, security) |
logging.log_dir, level, keep_days | Directorio y retención de logs |
mdi.max_open_tabs, tab_state_cookie | Pestañas simultáneas del escritorio MDI |
maps.source, yaml_path, keyboard.* | Origen de mapas y atajos (F3 cerrar, F5 refrescar, F6 nuevo, F8 siguiente) |
i18n.default_language, supported_languages | Idiomas (en, es, fr, de, it, pt) y cookie de idioma |
menu.max_depth | Profundidad máxima de menús |
ui.default_theme, theme_cookie | Tema por defecto y cookie de tema |
pagination.default_page_size, max_page_size | Paginación (20 / 100) |
ai.enabled, provider, model, api_key, base_url | Asistente IA integrado |
license.trial_days | Días del periodo trial (30) |
Estructura del entorno (mydata/): config.yaml (puerto, temas, base de datos), apps/ (aplicaciones de la plataforma), repositories/ (objetos Natural/ADABAS).
Áreas de la interfaz web
| Área | Qué hace |
|---|---|
| Login | Autenticación (admin/admin123 iniciales); emite JWT usado por la API (POST /api/auth/login) |
| Escritorio MDI | Pestañas simultáneas de trabajo (límite mdi.max_open_tabs), con estado persistido en cookie |
| Menús dinámicos | Navegación por aplicaciones y pantallas definidas en apps/ (profundidad menu.max_depth) |
| Formularios y listados | Alta, edición y consulta de registros de la base configurada o de entidades Natural |
| REST-API | Entidades expuestas como GET /api/<app>/<entidad> en JSON, con autenticación y roles |
| Tareas programadas | Informes y sincronizaciones definidos en el YAML (crontab de la aplicación) |
| Administración RBAC | Gestión de usuarios, grupos, roles y permisos sobre aplicaciones y datos |
| Temas e idiomas | Selector de tema (ui) e idioma (i18n: en, es, fr, de, it, pt) |
Ejemplos comentados
# 1. Entorno nuevo y arranque (usa ./mydata si existe y no se pasa [dir])
./build/nsrad init /tmp/miproyecto
./build/nsrad start /tmp/miproyecto
./build/nsrad status /tmp/miproyecto
# 2. Comprobación de salud y login API
curl -s http://localhost:9090/api/health
curl -s -X POST http://localhost:9090/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin123"}'
# 3. Estado de licencia y versión
./build/nsrad license
./build/nsrad --version
# 4. Dos entornos con el mismo binario
./build/nsrad init /tmp/prod && ./build/nsrad start /tmp/prod
./build/nsrad status /tmp/prod
./build/nsrad stop /tmp/miproyecto
Preguntas frecuentes
¿En qué puerto escucha y cómo lo cambio? Por defecto en 9090 (server.port en [dir]/config.yaml); tras editarlo, reinicie con stop + start.
¿Dónde va la licencia y qué pasa sin ella? En /opt/ns/licenses/nsrad.key; sin licencia funciona en trial de 30 días (license muestra el estado).
¿Cuáles son las credenciales iniciales? admin / admin123 en http://localhost:9090; el usuario admin se crea por migración y no se puede eliminar.
¿No conecta a ADABAS o la aplicación no aparece? Verifique la sección de base de datos del config.yaml (DBID/FNR reales, valores del manual ficticios) y que la estructura apps/ del entorno sea correcta; si el puerto está ocupado, cambie server.port.