Skillshub terminal-ui

DevEx Developer Experience TUI Best Practices

install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/pproenca/dot-skills/terminal-ui" ~/.claude/skills/comeonoliver-skillshub-terminal-ui && rm -rf "$T"
manifest: skills/pproenca/dot-skills/terminal-ui/SKILL.md
source content

DevEx Developer Experience TUI Best Practices

Comprehensive developer experience guide for building TypeScript terminal user interfaces using Ink (React for CLIs) and Clack prompts. Contains 42 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.

When to Apply

Reference these guidelines when:

  • Building CLI tools with interactive prompts using @clack/prompts
  • Creating React-based terminal UIs with Ink
  • Handling keyboard input and user interactions
  • Optimizing terminal rendering and preventing flicker
  • Designing developer-friendly CLI experiences

Rule Categories by Priority

PriorityCategoryImpactPrefix
1Rendering & OutputCRITICAL
render-
2Input & KeyboardCRITICAL
input-
3Component PatternsHIGH
tuicomp-
4State & LifecycleHIGH
tuistate-
5Prompt DesignMEDIUM-HIGH
prompt-
6UX & FeedbackMEDIUM
ux-
7Configuration & CLIMEDIUM
tuicfg-
8Robustness & CompatibilityLOW-MEDIUM
robust-

Quick Reference

1. Rendering & Output (CRITICAL)

  • render-single-write
    - Batch Terminal Output in Single Write
  • render-overwrite-dont-clear
    - Overwrite Content Instead of Clear and Redraw
  • render-synchronized-output
    - Use Synchronized Output Protocol for Animations
  • render-60fps-baseline
    - Target 60fps for Smooth Animation
  • render-partial-updates
    - Update Only Changed Regions
  • render-escape-sequence-batching
    - Defer ANSI Escape Code Generation to Final Output

2. Input & Keyboard (CRITICAL)

  • input-useinput-hook
    - Use useInput Hook for Keyboard Handling
  • input-immediate-feedback
    - Provide Immediate Visual Feedback for Input
  • input-modifier-keys
    - Handle Modifier Keys Correctly
  • input-isactive-focus
    - Use isActive Option for Focus Management
  • input-escape-routes
    - Always Provide Escape Routes

3. Component Patterns (HIGH)

  • tuicomp-box-flexbox
    - Use Box Component with Flexbox for Layouts
  • tuicomp-text-styling
    - Use Text Component for All Visible Content
  • tuicomp-measure-element
    - Use measureElement for Dynamic Sizing
  • tuicomp-static-for-logs
    - Use Static Component for Log Output
  • tuicomp-percentage-widths
    - Use Percentage Widths for Responsive Layouts
  • tuicomp-border-styles
    - Use Border Styles for Visual Structure

4. State & Lifecycle (HIGH)

  • tuistate-useapp-exit
    - Use useApp Hook for Application Lifecycle
  • tuistate-cleanup-effects
    - Always Clean Up Effects on Unmount
  • tuistate-functional-updates
    - Use Functional State Updates to Avoid Stale Closures
  • tuistate-usecallback-stable
    - Stabilize Callbacks with useCallback
  • tuistate-usememo-expensive
    - Memoize Expensive Computations with useMemo

5. Prompt Design (MEDIUM-HIGH)

  • prompt-group-flow
    - Use Clack group() for Multi-Step Prompts
  • prompt-validation
    - Validate Input Early with Descriptive Messages
  • prompt-cancellation
    - Handle Cancellation Gracefully with isCancel
  • prompt-spinner-tasks
    - Use Spinner and Tasks for Long Operations
  • prompt-custom-render
    - Build Custom Prompts with @clack/core

6. UX & Feedback (MEDIUM)

  • ux-progress-indicators
    - Show Progress for Operations Over 1 Second
  • ux-color-semantics
    - Use Colors Semantically and Consistently
  • ux-error-messages
    - Write Actionable Error Messages
  • ux-next-steps
    - Show Next Steps After Completion
  • ux-intro-outro
    - Use Intro and Outro for Session Framing

7. Configuration & CLI (MEDIUM)

  • tuicfg-sensible-defaults
    - Provide Sensible Defaults for All Options
  • tuicfg-env-vars
    - Support Standard Environment Variables
  • tuicfg-flags-over-args
    - Prefer Flags Over Positional Arguments
  • tuicfg-help-system
    - Implement Comprehensive Help System
  • tuicfg-json-output
    - Support Machine-Readable Output Format

8. Robustness & Compatibility (LOW-MEDIUM)

  • robust-tty-detection
    - Detect TTY and Adjust Behavior Accordingly
  • robust-signal-handling
    - Handle Process Signals Gracefully
  • robust-exit-codes
    - Use Meaningful Exit Codes
  • robust-terminal-restore
    - Always Restore Terminal State on Exit
  • robust-graceful-degradation
    - Degrade Gracefully for Limited Terminals

How to Use

Read individual reference files for detailed explanations and code examples:

Full Compiled Document

For the complete guide with all rules expanded:

AGENTS.md