Hay una idea que se perdió con la moda de las interfaces web: no todo necesita un navegador.
Para muchas herramientas —sobre todo las que viven en servidores— lo que uno quiere es:
Un binario pequeño.
Cero dependencias raras.
Correr por SSH sin abrir puertos.
Una interfaz usable, con menús, ventanas y ratón.
Eso es exactamente el hueco que viene a llenar Casciian.
Repositorio: https://github.com/crramirez/casciian
El problema real: “solo necesito una UI… pero en el servidor”
En el día a día aparecen herramientas que sí necesitan interfaz, pero donde una web app sería sobredimensionar el problema:
Instaladores y asistentes (wizard) para configurar servicios.
Herramientas internas para operar una plataforma.
Consolas de administración para entornos aislados.
Utilidades que quieres distribuir como “un comando más” de Linux.
La web te obliga a meter infraestructura, TLS, autenticación, despliegues, dependencia del navegador, y el clásico “abre otro puerto”.
Con una TUI bien hecha, la propuesta de valor es directa:
Acceso inmediato por SSH.
Cero superficie extra (no abres nada adicional en red).
Experiencia consistente incluso en entornos sin GUI.
¿Qué es Casciian?
Casciian es una librería para construir interfaces tipo GUI dentro de un terminal (TUI), compatible con la mayoría de terminales modernos y con una estética muy familiar si creciste con Turbo Vision.
Está hecha en Java, con un enfoque muy específico:
Cero dependencias externas.
Diseñada para compilarse a código nativo con GraalVM.
Optimizada para que una app real (por ejemplo, un editor de texto) pueda quedar en el orden de ~18 MB como binario nativo, con libc como única dependencia externa.
Empaquetada como DEB, ese mismo ejemplo puede rondar ~6 MB.
El objetivo es simple: que puedas escribir una herramienta en Java y distribuirla como si fuera un comando de sistema, con una UI usable y moderna dentro del terminal.
Lo que puedes construir (sin inventarte la rueda)
Casciian soporta los conceptos básicos de una GUI “de verdad” dentro del terminal:
Barra de menús.
Ventanas.
Cuadros de diálogo.
Campos de texto.
Listas.
Botones.
Soporte completo de ratón.
Gestos típicos como mover ventanas, seleccionar, navegar y operar controles.
Esto no es “un simple menú de consola”. Es una UI de aplicaciones, sólo que renderizada en texto.
Por qué el enfoque “nativo con GraalVM” importa
Java es excelente para productividad, pero para utilidades tipo CLI/TUI hay dos problemas clásicos:
Distribución: pedirle al usuario “instala Java” es fricción.
Tamaño: meter módulos como
java.desktopsolo para cosas que realmente no necesitas, infla el binario.
Casciian está pensada para evitar ambos:
Compilas con GraalVM, obtienes un binario nativo.
El resultado puede ser lo suficientemente pequeño como para entrar en un paquete DEB/RPM que se siente “normal”.
En otras palabras: time-to-value alto para el usuario final, sin que tú sacrifiques el stack de Java.
De dónde viene Casciian: Jexer (2013) y una decisión consciente
El origen de Casciian está en Jexer (https://jexer.sourceforge.io/index.html), un proyecto iniciado en 2013 por Autumn Lamonte.
Jexer es más ambicioso:
Puede incrustar imágenes junto con texto (corriendo en terminal).
También tiene una interfaz Swing cuando el programa corre localmente.
Yo quería usar Jexer para crear herramientas que corrieran en Linux, pero con dos restricciones claras:
Que no requieran Java instalado.
Que no terminen siendo demasiado grandes.
Así que hice el trabajo (con ayuda de GitHub Copilot) de separar las dependencias AWT/Swing del core, de forma que el soporte de terminal pudiera vivir sin java.desktop.
Cuando le presenté esto a Autumn, ella tomó una decisión bien pragmática:
Crear una variante llamada Casciian (por ASCII)
Partiendo sin dependencias AWT/Swing desde el inicio.
Quitando el soporte de imágenes (porque ese camino empuja de vuelta a dependencias que aquí no queremos).
Ese trabajo lo dejó en dominio público y me dejó como maintainer.
Yo, por mi parte, le añadí una licencia Apache 2.0 para los cambios que yo he ido incorporando a partir de ahí.
Del 0.4 al 1.0: foco en “que funcione impecable por SSH”
Autumn dejó Casciian en la versión 0.4. Yo he trabajado hasta llevarlo a 1.0.
El foco de estos cambios no fue “meter features por meter”, sino lo que realmente paga dividendos en el mundo real:
Corrección de bugs.
Ajustes para que las apps por SSH funcionen lo mejor posible.
Mejoras de compatibilidad y experiencia de uso en terminal.
Esto es importante porque la TUI se siente o no se siente. En un servidor no hay margen para una UX frágil.
Prueba de concepto: casdial (un clon de dialog, pero con esteroides)
Como prueba de concepto hice casdial:
Un clon del comando
dialog.Orientado a que scripts bash puedan tener una TUI.
Pero aprovechando todo el músculo de Casciian, incluyendo soporte completo de ratón.
Repositorio: https://github.com/crramirez/casdial
A día de hoy ya tiene release con soporte a:
--msgbox--yesno--menu
Y lo más interesante: el release incluye paquetes DEB y RPM que traen solo el ejecutable, como cualquier herramienta típica de Linux.
casdial --msgbox "Esto es un mensaje" 5 30
casdial --yesno "¿Desea continuar?" 3 30
casdial --menu "Seleccione una opción" 10 30 3 "UNO" "Uno" "DOS" "Dos" "TRES" Tres
Un template listo para arrancar
Además del demo, también armé un template tipo Hello World para que puedas comenzar un proyecto Java con interfaz de texto sin pelearte con el setup.
Casos de uso: dónde Casciian brilla
Si quieres una regla simple:
Si la herramienta vive en un servidor y tu usuario entra por SSH, Casciian es un “fit” natural.
Ejemplos concretos:
Consolas internas de administración.
Instaladores interactivos.
Herramientas DevOps que hoy son un script + prompts improvisados.
UI para servicios que no deberían exponerse vía web.
La ventaja competitiva aquí es operativa: menos moving parts, menos ataque superficial, menos cosas que mantener.
Cómo empezar
Casciian: https://github.com/crramirez/casciian
Casdial: https://github.com/crramirez/casdial
Roadmap (propuesta)
Este es el tipo de cosas que normalmente definen si una librería TUI termina siendo “de hobby” o “de producción”:
Más widgets del ecosistema
dialog.Refinar edge cases de terminales y multiplexores.
Documentación con ejemplos completos.
Seguir refinando el código para mejorar su eficiencia, tamaño y mantenibilidad.
Casciian no intenta competir con un framework web. No es ese el juego.
Casciian busca algo más específico y muy útil: interfaces amigables en terminal para tus herramientas Java, con distribución ligera, sin dependencias externas y con una experiencia que se siente como una GUI clásica.
Si te suena a “esto era obvio y nadie lo estaba resolviendo así”, es precisamente por eso que me metí en el proyecto.

No hay comentarios:
Publicar un comentario
- Comenta, comenta, adelante. Así nos animas a seguir el blog -