17 KiB
Project Definition - typedialog
Version: 0.1.0 Date: 2025-12-17 Status: Production-ready, pre-publicación
Resumen Ejecutivo
Nombre Actual: typedialog v0.1.0 Categoría: Interactive Configuration Management System Estado: Production-ready, pre-publicación Arquitectura: Multi-backend Rust workspace (4 crates)
Propósito Central: Facilitar la gestión de configuración para aplicaciones, proyectos y scripts mediante inputs interactivos (prompts individuales o forms completos), con integración bidireccional a Nickel para settings tipados y validados.
Diferenciador Único: Único sistema en el mercado que integra Nickel schemas → Interactive collection → Multi-format output (YAML/JSON/TOML) con preservación de type contracts.
1. Identidad del Proyecto
1.1 Estado Actual
- Nombre: typedialog
- Origen: Extraído de
nu_plugin_inquire(plugin de Nushell) - Etimología: "form" + "inquire" (referencia al crate
inquire) - Versión: 0.1.0
- Madurez: Production-ready, 80+ tests passing, documentación completa
- Publicación: No publicado en crates.io aún
1.2 Evolución Histórica
nu_plugin_inquire (Nushell plugin)
↓
typedialog (standalone library extraction)
↓
+ CLI backend (inquire-based)
↓
+ Nickel integration (bidirectional)
↓
+ TUI backend (ratatui)
↓
+ Web backend (axum + HTMX)
↓
Current: Multi-backend configuration management system
Puntos de Inflexión:
- Separación de Nushell → biblioteca standalone
- Adición Nickel integration → type-safe configuration focus
- Múltiples backends → multi-context positioning
1.3 Descripción Técnica Precisa
Definición Formal: Sistema de gestión de configuración interactiva que facilita la recolección, validación y transformación de settings mediante diálogo con el usuario, actuando como puente entre Nickel schemas tipados y formatos de configuración estándar (YAML/JSON/TOML), soportando múltiples interfaces (CLI/TUI/Web) para adaptarse a diferentes contextos de uso.
Componentes Core:
- Form/Prompt engine con 8 tipos de inputs
- Nickel parser y code generator (bidirectional)
- Backend abstraction layer (trait-based)
- Template engine (Tera para metaprogramming)
- i18n system (Fluent con en-US, es-ES)
- Multi-format serialization (JSON/YAML/TOML/Nickel)
2. Propósito y Problema que Resuelve
2.1 Problema Space Completo
Problema Principal: La configuración de aplicaciones, proyectos y scripts requiere:
- Recolección interactiva de datos del usuario
- Validación tipada de inputs
- Transformación entre formatos (schemas → forms → configs)
- Adaptación a diferentes contextos (CLI scripts, TUI setup, Web interfaces)
- Organización con componentes, templates, documentación
Problemas Secundarios:
- Herramientas existentes limitadas a un solo backend (CLI-only o Web-only)
- No hay integración con lenguajes de configuración tipados (Nickel, KCL)
- Forms completos ineficientes para capturar un solo valor
- Prompts individuales no escalables para setup complejos
- Falta de preservación de type contracts entre transformaciones
- Configuración manual propensa a errores de tipo
2.2 Solución Propuesta
Enfoque Único:
Nickel Schema (typed, validated, documented)
↓ [nickel-to-form]
TOML Form Definition (declarative, reusable)
↓ [interactive collection]
User Dialog (CLI/TUI/Web según contexto)
↓ [validation + transformation]
Validated Output (JSON/YAML/TOML/Nickel)
↓ [consumption]
Application/Script/System
Flexibilidad Clave:
- Single Prompt:
nickelconf prompt --type password "API Key"→ captura un valor - Complete Form:
nickelconf form setup.toml --backend tui→ multi-field wizard - Nickel Workflow: Schema → Form → Config con type preservation
2.3 Casos de Uso Concretos
1. Application Settings
- User: Developer configurando nueva app
- Escenario: Primera instalación de app Rust, necesita DB credentials, API keys, feature flags
- Solución: Nickel schema define settings → TUI form para setup inicial → config.yaml generado
- Valor: Type-safety, validación, documentación incluida en schema
2. Script Inputs
- User: DevOps engineer escribiendo Nushell script de deploy
- Escenario: Script necesita environment, region, instance type
- Solución: CLI prompts individuales integrados en script → validated JSON output
- Valor: Inputs validados on-the-fly, integración natural con script flow
3. Project Configuration
- User: Tech lead inicializando nuevo proyecto
- Escenario: Proyecto necesita 20+ settings (CI/CD, testing, deployment, monitoring)
- Solución: Nickel schema organizado con components → TUI complete form → project.toml
- Valor: Configuración completa guiada, validación, defaults inteligentes
4. Web-Based Setup
- User: SaaS admin configurando tenant
- Escenario: Configuración de tenant via web interface
- Solución: Same TOML form → Web backend → Settings guardados en DB
- Valor: Mismo form definition, diferente contexto de uso
5. Infrastructure as Code
- User: SRE provisionando recursos cloud
- Escenario: Crear configuración Terraform/Nickel para nueva infra
- Solución: Interactive prompts → Nickel output con contracts → Terraform consumption
- Valor: Type-safe IaC generation, validation antes de apply
3. Arquitectura y Tecnología
3.1 Tech Stack Completo
Core Language: Rust 2021, MSRV 1.70+
Crate Structure (Workspace):
typedialog/
├── crates/
│ ├── typedialog-core/ # Core library + backend trait
│ │ ├── form engine (8 input types)
│ │ ├── FormBackend trait
│ │ ├── Nickel integration modules
│ │ ├── Template engine (Tera)
│ │ ├── i18n system (Fluent)
│ │ └── Serialization (serde ecosystem)
│ ├── typedialog/ # CLI binary
│ │ └── InquireBackend impl
│ ├── typedialog-tui/ # TUI binary
│ │ └── RatatuiBackend impl
│ └── typedialog-web/ # Web server binary
│ └── AxumBackend impl
Dependencies Clave:
inquire- Terminal prompts (CLI backend)ratatui+crossterm- Terminal UI (TUI backend)axum+tower- Web server (Web backend)serdeecosystem - Serialization (JSON/YAML/TOML)tera- Template engine (Jinja2-like)fluent+fluent-bundle- i18n/localizationclap- CLI argument parsingchrono- Date/time handling
Backend Pattern (Trait-based abstraction):
pub trait FormBackend {
fn execute_field(&mut self, field: &FormField) -> Result<Value>;
fn execute_form_complete(&mut self, form: &Form) -> Result<HashMap<String, Value>>;
}
// Implementations:
impl FormBackend for InquireBackend { ... } // CLI
impl FormBackend for RatatuiBackend { ... } // TUI
impl FormBackend for AxumBackend { ... } // Web
3.2 Características Técnicas Distintivas
1. Nickel Integration (Bidirectional)
- nickel-to-form: Parse Nickel schemas → Extract metadata → Generate TOML forms
- form-to-nickel: Convert form results → Generate Nickel code with contracts
- Contract Preservation:
std.string.NonEmpty,std.number.betweenmantenidos - Component Support: Nickel imports, merging, templates soportados
2. Multi-Backend Architecture
- Same Form Definition: Un TOML form funciona en CLI, TUI, Web
- Identical Output: Todos los backends producen mismo JSON/YAML/TOML
- Display Modes: FieldByField (step-by-step) o Complete (all at once)
- Backend Selection:
--backend cli|tui|weben runtime
3. Form Engine Features
- 8 Input Types: text, confirm, select, multiselect, password, custom, editor, date
- Conditional Logic: Fields con
depends_onpara flujo dinámico - Validation: Regex, length, range, custom validators
- Defaults: Static, dynamic (desde otras respuestas), computed
- Grouping: Semantic grouping para mejor UX
4. i18n System
- Fluent-based:
.ftlfiles para traducciones - Languages: en-US (default), es-ES
- Scopes: Form UI, field labels, validation messages, help text
- Fallback: Graceful degradation a inglés
5. Template System
- Tera Engine: Jinja2-like syntax para metaprogramming
- Nickel Templates:
.ncl.j2files para código generation - Variable Substitution: Form results inyectados en templates
- Conditionals/Loops: Lógica de template para código complejo
3.3 Formatos Soportados
Input Formats:
- TOML (form definitions)
- Nickel (schemas para form generation)
Output Formats:
- JSON (app configs, API consumption)
- YAML (configs, Kubernetes, Ansible)
- TOML (Rust configs, general settings)
- Nickel (type-safe configs con contracts)
- Plain text (simple key=value)
4. Análisis de Mercado y Posicionamiento
4.1 Target Audience Detallado
Audiencia Primaria:
-
Application Developers (40%)
- Stack: Rust, Go, Python apps
- Need: Settings management con type-safety
- Pain: Manual config files propensa a errores
- Value: Nickel schemas + interactive collection + validated output
-
Script Creators (30%)
- Stack: Nushell, Bash, Python scripts
- Need: Interactive inputs para scripts
- Pain: Validación manual, error handling repetitivo
- Value: Validated prompts con minimal code
-
DevOps/SRE Engineers (20%)
- Stack: Terraform, Kubernetes, Ansible
- Need: Interactive IaC generation
- Pain: Complex configs, no validation hasta runtime
- Value: Type-safe config generation, Nickel contracts
-
Project/Team Leads (10%)
- Stack: Project setup, team onboarding
- Need: Consistent project configuration
- Pain: Manual setup guides, config drift
- Value: Reproducible project setup con forms
Audiencia Secundaria:
- CLI tool developers agregando interactive features
- SaaS developers para user onboarding/config
- System administrators para server setup wizards
4.2 Competitive Landscape
Categorías de Competidores:
-
Terminal Prompt Libraries:
inquire,dialoguer,questionary- Gap: Solo prompts, no forms. No type-safety. No multi-backend.
-
Form Libraries: HTML forms,
react-hook-form- Gap: Web-only. No CLI/TUI. No Nickel integration.
-
Configuration Management: Ansible, Terraform
- Gap: IaC-specific. No general-purpose forms. No type preservation.
-
Schema Languages: JSON Schema, Nickel, KCL
- Gap: Schema definition only, no interactive collection.
Competitive Matrix:
| Feature | typedialog | inquire | HTML forms | Ansible | Nickel |
|---|---|---|---|---|---|
| Interactive prompts | ✅ | ✅ | ❌ | ⚠️ | ❌ |
| Complete forms | ✅ | ❌ | ✅ | ⚠️ | ❌ |
| Multi-backend | ✅ (3) | ❌ | ❌ | ❌ | ❌ |
| Type-safe schemas | ✅ | ❌ | ❌ | ⚠️ | ✅ |
| Bidirectional schema | ✅ | ❌ | ❌ | ❌ | ❌ |
| Multi-format output | ✅ (4) | ❌ | ⚠️ | ⚠️ | ✅ (1) |
| i18n support | ✅ | ❌ | ⚠️ | ✅ | ❌ |
| Template system | ✅ | ❌ | ❌ | ✅ | ✅ |
| Declarative forms | ✅ | ❌ | ✅ | ⚠️ | N/A |
4.3 Value Propositions Completo
Para Developers:
- ✅ Type-safe configuration desde día 1 (Nickel schemas)
- ✅ Menos código de validación manual (schemas auto-validan)
- ✅ Documentación incluida en schemas (contratos son docs)
- ✅ Multi-format output (una fuente, múltiples consumidores)
Para DevOps/SRE:
- ✅ Interactive IaC generation (menos errores de config)
- ✅ Validación antes de apply (Nickel contracts)
- ✅ Reproducible setup (TOML forms versionables)
- ✅ Script integration (CLI prompts en pipelines)
Para Organizations:
- ✅ Consistent configuration (same forms across projects)
- ✅ Reduced onboarding time (guided setup wizards)
- ✅ Auditability (form definitions + results traceable)
- ✅ i18n support (international teams)
Unique Selling Points:
- Nickel Integration - Único en mercado
- Multi-Backend Flexibility - Mismo form, diferentes contextos
- Forms + Prompts - No forzado a elegir uno u otro
- Type-Safe Pipeline - Contracts preserved end-to-end
- Production-Ready - i18n, templates, validación, docs
5. Capacidades y Características
5.1 Functional Capabilities
Input Collection:
- ✅ 8 tipos de prompts (text, password, select, multiselect, confirm, custom, editor, date)
- ✅ Forms declarativos en TOML
- ✅ Conditional logic (depends_on)
- ✅ Dynamic defaults (computed fields)
- ✅ Validation (regex, range, length, custom)
- ✅ Help text y documentación inline
Backend Support:
- ✅ CLI - inquire-based terminal prompts (stdin fallback)
- ✅ TUI - ratatui full-screen interface (3-panel layout, Tab navigation)
- ✅ Web - axum + HTMX browser forms (RESTful API)
- ✅ Display modes: FieldByField, Complete
Nickel Workflow:
- ✅ nickel-to-form: Schema → TOML form generation
- ✅ form execution: Interactive collection
- ✅ form-to-nickel: Results → Nickel code generation
- ✅ Contract preservation: Type constraints maintained
- ✅ Component support: Imports, merging, templates
Output Formats:
- ✅ JSON (structured data, API consumption)
- ✅ YAML (configs, k8s, ansible)
- ✅ TOML (rust configs, settings)
- ✅ Nickel (type-safe configs)
- ✅ Text (simple key=value)
i18n & Templates:
- ✅ Fluent-based localization (en-US, es-ES)
- ✅ Tera template engine
- ✅ Nickel template metaprogramming (.ncl.j2)
- ✅ Variable substitution
- ✅ Conditional rendering
5.2 Non-Functional Capabilities
Performance:
- Fast compilation (Rust, release build <30s)
- Low memory footprint (CLI <5MB, TUI <10MB)
- Minimal startup time (<100ms)
Reliability:
- 80+ passing tests (unit + integration)
- Type-safe Rust (no runtime crashes)
- Graceful error handling
- Fallback behaviors (stdin, default values)
Usability:
- Intuitive TOML form syntax
- Clear error messages
- Help text contextual
- i18n for international users
Maintainability:
- Modular workspace structure
- Clean trait-based architecture
- Comprehensive documentation
- Example forms included
Portability:
- Cross-platform (Linux, macOS, Windows)
- Single binary distribution
- No runtime dependencies
- Docker support
7. Métricas y Success Criteria
7.1 Technical Metrics
Code Quality:
- Test coverage > 80%
- Zero clippy warnings (enforce)
- Clean compilation all features
- Documentation coverage > 90%
Performance:
- Binary size < 15MB (release)
- Startup time < 100ms
- Memory usage < 20MB (TUI)
- Form rendering < 50ms
7.2 Adoption Metrics
Community:
- GitHub stars > 100 (first 6 months post-publish)
- crates.io downloads > 1000/month
- Active issues/PRs
- Contributor growth
Usage:
- Example forms created by users
- Integration stories shared
- Blog posts/tutorials written
- Conference talks
7.3 Quality Metrics
Reliability:
- Bug reports < 5/month
- Critical bugs = 0
- Response time < 48h
- Fix time < 7 days (non-critical)
User Satisfaction:
- Positive feedback ratio > 80%
- Feature request alignment
- Documentation clarity
- Ease of use reports
8. Roadmap y Future Considerations
8.1 Immediate Focus (v0.1.x)
Naming Decision:
- Decide: nickelconf vs nickeltalk vs keep typedialog
- Execute: Rename if chosen
- Update: All documentation and messaging
Stabilization:
- Bug fixes from early users
- Documentation improvements
- Example forms expansion
- Performance optimizations
8.2 Near-term Enhancements (v0.2.x)
Nickel Enhancements:
- Deeper schema introspection
- More contract types supported
- Component template library
- Schema validation improvements
Backend Improvements:
- TUI navigation enhancements
- Web backend styling/theming
- CLI colored output options
- Performance optimizations
New Features:
- Form composition (reusable sections)
- Field dependencies (advanced logic)
- Custom validators library
- Plugin system for custom fields
8.3 Long-term Vision
Ecosystem:
- Form marketplace (shared forms)
- IDE integrations (VSCode extension)
- CI/CD integrations
- Cloud service (hosted forms)
Technology:
- KCL integration (like Nickel)
- CUE language support
- GraphQL schema support
- Database schema integration
Beyond Configuration:
- Survey/questionnaire system
- User onboarding workflows
- Admin panel generation
- API client generation
Conclusión
typedialog es un proyecto maduro y bien posicionado que resuelve un problema real en la gestión de configuración. Su diferenciador único - la integración bidireccional con Nickel combinada con múltiples backends - lo posiciona de manera única en el mercado.
El próximo paso crítico es una decisión de naming estratégica que refuerce esta posición única y comunique claramente el valor propuesto al mercado target.