Inkdown
Start writing

Claude-Code

62 filesยท4 subfolders

Shared Workspace

Claude-Code
codex

06-ui-components

Shared from "Claude-Code" on Inkdown

UI Components Architecture

Overview

Claude Code's UI is built with Ink - a React renderer for terminals. It provides a component-based architecture similar to web React, but outputting to the terminal instead of the DOM.

Plain text
0000_start_here_index_and_recommended_reading_order.md
0100_project_overview_tech_stack_runtime_modes_and_folder_map.md
0200_startup_flow_entry_points_and_cold_start_sequence.md
0300_codebase_modules_layers_state_models_and_schemas.md
0400_system_architecture_and_design_rationale.md
0500_interactive_repl_request_flow_end_to_end.md
0600_headless_sdk_and_print_mode_request_flow_end_to_end.md
0700_mcp_integration_connection_and_tool_call_flow.md
0800_external_services_sdks_storage_and_local_dependencies.md
0900_environment_variables_settings_feature_flags_and_failure_modes.md
1000_non_obvious_patterns_gotchas_and_debugging_traps.md
1100_full_codebase_file_inventory_grouped_by_directory.md
kimi
00-overview.md
01-entrypoints.md
02-state-management.md
03-query-system.md
04-tools-system.md
05-tasks-system.md
06-ui-components.md
07-bridge-remote.md
08-services.md
09-skills-plugins.md
10-commands.md
11-testing-architecture.md
12-permission-system.md
13-build-system.md
14-ink-internals.md
15-git-internals.md
16-context-compaction.md
17-vim-mode.md
18-mailbox-notifications.md
19-session-persistence.md
20-hooks-system.md
21-error-recovery.md
README.md
qwen
00-overview.md
01-entry-points.md
02-query-engine.md
03-tools-and-tasks.md
04-commands-and-skills.md
05-state-management.md
06-ink-rendering.md
07-bridge-remote.md
08-mcp-services.md
09-services-overview.md
10-multi-agent.md
11-system-prompt-constants.md
12-tool-interface.md
13-memory-system.md
14-buddy-companion.md
15-keybindings.md
16-stop-hooks.md
17-vim-mode.md
18-upstreamproxy.md
19-cost-tracking-history.md
20-contexts-styles-onboarding.md
21-hooks.md
22-screens.md
tweets-explain
claude-code-memory-analysis.md
compact
memory-system
agentic-architecture

Core UI Files

Directory/FilePurpose
ink/Ink framework internals
components/App.tsxRoot application component
components/REPL.tsxMain REPL interface
components/PromptInput.tsxUser input area
components/Messages/Message display components
context/React contexts (notifications, modals)
hooks/React hooks for UI logic

Ink Framework (Custom)

Claude Code uses a customized Ink in src/ink/:

Plain text
Key Ink Components
Box (Flexbox Layout)
TypeScript
Text (Styled Text)
TypeScript
ScrollBox (Scrollable)
TypeScript

Main Application Components

App.tsx

Root component that sets up providers:

TypeScript
REPL.tsx

The main REPL (Read-Eval-Print Loop) interface:

TypeScript

Message Rendering

Message Types
TypeScript
Assistant Message (Streaming)
TypeScript
Tool Use Display
TypeScript

Prompt Input

BaseTextInput.tsx

The core text input component:

TypeScript
PromptInput.tsx (Full)

Complete input with suggestions, history, etc.:

TypeScript

Fullscreen Layouts

FullscreenLayout.tsx

Manages fullscreen dialogs and overlays:

TypeScript

Keybindings System

useGlobalKeybindings.tsx
TypeScript
Vim Mode
TypeScript

Notification System

notifications.tsx
TypeScript

Dialog System

Dialog Components

Common dialog pattern:

TypeScript
Permission Dialog
TypeScript

Styling System

Theme Integration
TypeScript
Color Utilities
TypeScript

Performance Patterns

1. Selective Subscriptions
TypeScript
2. Memoization
TypeScript
3. Virtual Scrolling
TypeScript

Common UI Patterns

Spinner/Loading
TypeScript
Progress Bar
TypeScript
Collapsible Section
TypeScript

Key Concepts

1. Flexbox for Terminal

Ink uses Yoga (Facebook's flexbox engine) for layout. Think CSS but for character cells.

2. Component = Function

Just like React web - components are functions returning JSX.

3. Hooks Work the Same

useState, useEffect, useContext - all work like web React.

4. Input Handling

useInput hook provides keyboard events. Not DOM events - raw stdin.

5. No Browser APIs

No document, window, localStorage. Use Node.js APIs instead.

6. ANSI Escape Codes

Colors, cursor movement, clearing - all manual ANSI sequences.


Related Documentation

  • State Management - How UI connects to state
  • Tools System - Tool UI rendering
  • Tasks System - Task panel UI