Modernizes the CRE CLI's user interface by integrating the Charm ecosystem#243
Modernizes the CRE CLI's user interface by integrating the Charm ecosystem#243
Conversation
- Create internal/ui/ package with centralized Lipgloss styles (styles.go) - Add output helpers for consistent styling: Title, Box, Success, Dim, etc. - Implement Bubble Tea spinner with reference counting for async operations - Add GlobalSpinner singleton for seamless spinner across CLI lifecycle - Update PersistentPreRunE to show spinner during initialization - Migrate cre init and cre whoami to use shared UI package
- Add spinner during file generation (copying, generating templates, contracts) - Show spinner during Go dependencies installation - Display dependencies in styled box after spinner completes - Fix Next steps box spacing and formatting - Refactor initializeGoModule to return deps instead of printing
- Add styled template functions (styleTitle, styleSection, styleCommand, styleDim, styleSuccess, styleCode) - Update help template to use Lipgloss styling - Style section headers, command names, tips, and URLs - Improve visual hierarchy and readability
- Add complete Blocks palette constants (Gray, Blue, Green, Red, Orange, Yellow, Teal, Purple) - Use high-contrast colors for dark terminal readability - Style titles/commands with Blue 400-500 for visibility - Style secondary info with Gray 500 (dimmed) - Create custom Huh theme with Blocks colors for forms - Update spinner to use Blue 500
- Add styled title and welcome message using Chainlink theme
- Add Bubble Tea spinner with progress states throughout auth flow:
- Preparing authentication
- Opening browser
- Waiting for authentication
- Exchanging authorization code
- Saving credentials
- Show styled URL fallback when browser cannot open automatically
- Display success message with next steps in branded box
- Update spinner message during org membership retry flow
- Update tests to include spinner in handler instantiations
- Add SilenceErrors: true to root command to disable Cobra's default error output - Display all user-facing errors with styled ui.Error() in Execute() - Errors now show with red color and ✗ prefix consistent with Chainlink theme - Internal debug logging via zerolog remains unchanged
- Add SilenceErrors: true to disable Cobra's default error output - Display errors with styled ui.Error() (red with ✗ prefix) - Set SilenceUsage in PersistentPreRunE to hide usage for runtime errors - Keep usage/suggestions visible for command typos and flag errors
consistent styling across the CLI
- Replaced prompt.YesNoPrompt with huh.NewConfirm forms
- Removed stdin io.Reader parameter
2. Updated cmd/creinit/creinit.go:
- Updated call sites to match new function signatures
3. Updated cmd/secrets/common/handler.go:
- Replaced ~25 fmt.Print* calls with ui.* functions
4. Updated cmd/workflow/simulate/telemetry_writer.go:
- Replaced fmt.Printf with ui.Printf
- Removed unused fmt import
5. Deleted internal/prompt/ directory:
- Removed entire old promptui-based package
6. Cleaned cmd/common/utils.go:
- Removed unused MustGetUserInputWithPrompt function
- Removed unused bufio and errors imports
7. Dependencies cleaned (go mod tidy):
- Removed github.com/manifoldco/promptui
- Removed github.com/chzyer/readline
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21643596027 Note: These are preview builds and are not signed. |
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21673419475 Note: These are preview builds and are not signed. |
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21676241523 Note: These are preview builds and are not signed. |
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21676790323 Note: These are preview builds and are not signed. |
- Contracts generated in <contracts directory>
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21677123424 Note: These are preview builds and are not signed. |
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21677567395 Note: These are preview builds and are not signed. |
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21681149975 Note: These are preview builds and are not signed. |
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21685548327 Note: These are preview builds and are not signed. |
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21685548341 Note: These are preview builds and are not signed. |
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21689791006 Note: These are preview builds and are not signed. |
…flict and visual display issue in verbose mode
|
🚀 Preview Build Artifacts You can download the preview builds for this PR from the following URL: https://github.com/smartcontractkit/cre-cli/actions/runs/21716173381 Note: These are preview builds and are not signed. |
Summary
This PR modernizes the CRE CLI's user interface by integrating the Charm ecosystem (Lipgloss, Huh, Bubble Tea). This is a view-layer only refactoring - no business logic or Cobra command structure was modified.
Why This Refactoring?
To build a world-class developer experience, we needed a better foundation. Our previous approach had limitations:
fmt.Printcalls can't handle async operations gracefullypromptuilibrary offered limited customization and no modern UX patternsThe Charm ecosystem solves these by owning the terminal - it manages the view layer as a proper UI framework, enabling:
Key Changes
1. New UI Package (
internal/ui/)Centralized styling and output functions:
2. Chainlink-Branded Theme
All interactive elements use the Chainlink color palette:
#375BD2): Primary actions, spinners, focused elements3. Spinner for Async Operations
Reference-counted spinner that handles concurrent operations:
4. Modern Form Inputs with Huh
Replaced
promptuiwithhuhforms featuring:5. Enhanced Error Handling
New helpers for actionable error messages:
6. Graceful Cancellation
Long-running operations (like
cre login) now support Escape/Ctrl+C with proper cleanup and user feedback.What's NOT Changed
Libraries
Removed Dependencies
promptui- Replaced entirely byhuhTesting