Introducción
Laravel Prompts es un paquete PHP para añadir formularios interactivos atractivos y fáciles de usar a las aplicaciones de línea de comandos. Ofrece una experiencia parecida a la de un formulario web, con placeholders, validación, etc. Puedes invocarlo directamente desde tus comandos Artisan, lo que hace muy sencilla e intuitiva la interacción con el usuario.Laravel Prompts es compatible con macOS, Linux y Windows (WSL).
En entornos no compatibles se activa automáticamente un modo alternativo.
Instalación
Laravel Prompts viene incluido en Laravel, por lo que no requiere instalación adicional. Para usarlo en otros proyectos PHP, instálalo con Composer.Funciones de prompt básicas
text: entrada de texto
Context() pides al usuario que introduzca una cadena.
required haces la entrada obligatoria (puedes personalizar el mensaje).
validate puedes añadir validaciones. Devuelve una cadena de error o null si pasa.
textarea: entrada multilínea
textarea() admite entradas de varias líneas.
number: entrada numérica
number() acepta valores numéricos. Puedes cambiarlos con las flechas.
password: entrada de contraseña
password() funciona como el texto normal, pero oculta lo que se escribe.
confirm: confirmación Sí/No
confirm() pregunta con dos opciones y devuelve true o false.
select: lista de selección
Conselect() el usuario elige una opción de un listado.
scroll cambias el número de opciones visibles antes de hacer scroll (por defecto 5).
multiselect: selección múltiple
multiselect() permite elegir varias opciones a la vez.
required obligas a elegir al menos una.
suggest: entrada con autocompletado
suggest() ofrece sugerencias pero permite entrada libre.
search: búsqueda dinámica
search() actualiza la lista de opciones a medida que se escribe. La closure devuelve las candidatas.
multisearch: selección múltiple dinámica
multisearch() combina la búsqueda dinámica con selección múltiple.
pause: pausa
pause() detiene el proceso hasta que el usuario pulsa Enter.
autocomplete: autocompletado inline
autocomplete() muestra sugerencias como ghost text. A diferencia de suggest(), la sugerencia se muestra en línea y se acepta con Tab o la flecha derecha.
Validación
Todas las funciones de prompt aceptan el argumentovalidate.
null se considera válido.
También puedes usar reglas de validación de Laravel en formato array.
transform.
Formularios
Conform() agrupas varios prompts y puedes cancelarlos todos antes de completarlos.
Mensajes informativos
Existen funciones que muestran mensajes con estilos predefinidos.Callouts
callout() muestra una etiqueta y contenido dentro de un marco. Ideal para destacar información importante (resúmenes de despliegue, detalles de error, actualizaciones de estado…).
type ('warning' o 'error') cambias el estilo visual.
info añades un pie con metadatos (IDs, timestamps…).
Contenido enriquecido
En lugar de un string, puedes pasar un array para crear un callout estructurado. La claseElement incluye factories para títulos, listas con viñetas, listas numeradas, listas clave-valor y enlaces.
Element::keyValueList puedes mostrar datos con etiquetas.
Element::link genera hipervínculos clicables en terminales compatibles con OSC 8. Puedes pasar solo la URL o URL + etiqueta.
Tablas
Contable() muestras datos en formato tabla.
Spinner (indicador de carga)
spin() muestra un indicador mientras se ejecuta la closure.
Barra de progreso
progress() muestra visualmente el avance de un proceso iterativo.
Tasks
task() muestra un spinner y un área de log scrollable en vivo mientras se ejecuta la callback. Ideal para procesos largos como instalación de dependencias o despliegues, para ir viendo qué ocurre en tiempo real.
Logger para escribir líneas y mensajes de estado en tiempo real.
Escribir líneas de log
line añade una línea al área de log scrollable.
Mensajes de estado
success, warning y error muestran mensajes destacados fijos en la parte superior del área de log.
Actualizar la etiqueta
Conlabel actualizas la etiqueta durante la ejecución. Con subLabel muestras una sub-etiqueta atenuada debajo. Una cadena vacía la borra. Puedes fijar una sub-etiqueta inicial con el argumento subLabel.
Streaming de texto
Para procesos que generan texto de forma incremental (por ejemplo, respuestas de IA), usapartial para hacer streaming palabra a palabra y commitPartial para consolidar.
Límites de salida y resumen persistente
Por defecto se muestran hasta 10 líneas de log scrollable. Puedes cambiarlo conlimit. Con keepSummary: true los mensajes de estado permanecen en pantalla al terminar.
Stream
stream() muestra texto progresivamente. Es ideal para respuestas generadas por IA o datos que llegan por chunks.
append añade texto al stream con un efecto de aparición. Cuando termines, invoca close para consolidar la salida y restaurar el cursor.
Operaciones sobre la terminal
Cambiar el título de la terminal
Limpiar la terminal
Consideraciones sobre la terminal
Ancho: si etiquetas, opciones o mensajes de validación exceden las columnas disponibles, se truncan. Para una terminal de 80 columnas, mantente por debajo de 74 caracteres. Alto: en los prompts que aceptanscroll, el valor se ajusta automáticamente al alto de la terminal, dejando espacio para los mensajes de validación.
Fallback
En entornos no compatibles (Windows sin WSL, por ejemplo) se activa un fallback automático. Por defecto se usan los métodos integrados de Laravel como$this->ask() o $this->choice().
Pruebas
Laravel Prompts se integra con Pest y PHPUnit.Páginas relacionadas
Consola Artisan
Aprovecha Prompts dentro de tus comandos Artisan.