# vadimdemedes/ink

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/vadimdemedes-ink).**

35,056 stars · 851 forks · TypeScript · mit

## Links

- GitHub: https://github.com/vadimdemedes/ink
- Homepage: https://term.ink
- awesome-repositories: https://awesome-repositories.com/repository/vadimdemedes-ink.md

## Topics

`cli` `command-line` `flexbox` `interactive` `javascript` `react`

## Description

Ink is a declarative framework for building interactive command-line applications using a component-based architecture. It functions as a console renderer that maps component trees to terminal output buffers, allowing developers to manage stateful interfaces through standard component reconciliation. By translating high-level layout and style properties into terminal control codes, it enables the creation of responsive, dynamic interfaces within the console.

The framework distinguishes itself by integrating a cross-platform layout engine that applies a flexible box model to the character-based grid, facilitating complex visual structures. It provides a low-level abstraction layer for raw input stream interception, which allows for granular handling of keystrokes and control sequences. This combination of a virtual terminal buffer and direct stream management ensures consistent behavior and visual presentation across different operating systems and terminal environments.

Beyond its core rendering capabilities, the project supports a wide range of interface features including text styling, input handling, and lifecycle management. It includes mechanisms for capturing pasted content and notifying assistive technologies of screen updates to support accessibility. The framework manages the entire application lifecycle, ensuring that render output is fully flushed to the terminal during process exits.

## Tags

### Development Tools & Productivity

- [Terminal UI Frameworks](https://awesome-repositories.com/f/development-tools-productivity/terminal-ui-frameworks.md) — Provides a declarative library for building interactive command-line interfaces using component-based architecture and standard layout primitives.
- [Terminal User Interfaces](https://awesome-repositories.com/f/development-tools-productivity/terminal-user-interfaces.md) — Provides a framework for building complex, interactive command-line applications with responsive layouts and visual styling.
- [React Console Renderers](https://awesome-repositories.com/f/development-tools-productivity/react-console-renderers.md) — Maps React component trees to terminal output buffers for dynamic and stateful command-line applications.
- [Console Rendering Engines](https://awesome-repositories.com/f/development-tools-productivity/console-rendering-engines.md) — Manages stateful command-line output by mapping component trees to terminal buffers for dynamic user interfaces.
- [Cross-Platform Console Tooling](https://awesome-repositories.com/f/development-tools-productivity/cross-platform-console-tooling.md) — Develops command-line utilities that maintain consistent behavior and visual presentation across different operating systems.
- [Terminal Layout Engines](https://awesome-repositories.com/f/development-tools-productivity/terminal-layout-engines.md) — Translates flexible box model properties into coordinate-based rendering for complex console interfaces.
- [Terminal Input Handlers](https://awesome-repositories.com/f/development-tools-productivity/terminal-input-handlers.md) — Captures and processes complex user interactions like keyboard events and clipboard data within text-based interfaces.

### Web Development

- [Declarative Terminal Frameworks](https://awesome-repositories.com/f/web-development/declarative-terminal-frameworks.md) — Uses a declarative component tree to calculate UI changes and apply minimal updates to the terminal output buffer.
- [Terminal Rendering Engines](https://awesome-repositories.com/f/web-development/terminal-rendering-engines.md) — Translates high-level style and layout properties into standard terminal control codes for cross-platform text formatting.
- [Interactive Terminal Runtimes](https://awesome-repositories.com/f/web-development/interactive-terminal-runtimes.md) — Builds responsive command-line applications by managing component trees and input streams. ([source](https://cdn.jsdelivr.net/gh/vadimdemedes/ink@master/README.md))
- [Terminal Layout Engines](https://awesome-repositories.com/f/web-development/terminal-layout-engines.md) — Calculates element dimensions and positions using a cross-platform layout engine to enable responsive design within a character-based grid.
- [Terminal UI Components](https://awesome-repositories.com/f/web-development/terminal-ui-components.md) — Creates complex visual structures using a flexible box model that manages dimensions, spacing, alignment, and borders. ([source](https://cdn.jsdelivr.net/gh/vadimdemedes/ink@master/README.md))
- [Terminal UI Layouts](https://awesome-repositories.com/f/web-development/terminal-ui-layouts.md) — Positions interface elements using flexible containers that manage spacing, alignment, and borders. ([source](https://www.npmjs.com/package/ink))
- [Console Application Styling](https://awesome-repositories.com/f/web-development/console-application-styling.md) — Enhances the readability and visual impact of command-line output by applying colors, font weights, and decorative formatting.
- [Terminal Text Stylers](https://awesome-repositories.com/f/web-development/terminal-text-stylers.md) — Improves readability by applying colors, font weights, and decorative effects to console output. ([source](https://www.npmjs.com/package/ink))

### System Administration & Monitoring

- [Terminal Input Interceptors](https://awesome-repositories.com/f/system-administration-monitoring/terminal-input-interceptors.md) — Configures the terminal input stream to capture raw keystrokes and control sequences directly for granular user interaction handling.
- [Terminal Buffering Systems](https://awesome-repositories.com/f/system-administration-monitoring/terminal-buffering-systems.md) — Maintains an in-memory representation of the terminal screen to track state changes before flushing them to the actual console.
- [Terminal Event Handlers](https://awesome-repositories.com/f/system-administration-monitoring/terminal-event-handlers.md) — Registers callbacks to receive character data and key-press metadata to enable navigation and control. ([source](https://cdn.jsdelivr.net/gh/vadimdemedes/ink@master/README.md))
- [Terminal Stream Controllers](https://awesome-repositories.com/f/system-administration-monitoring/terminal-stream-controllers.md) — Intercepts user data by controlling standard input streams and raw mode settings. ([source](https://www.npmjs.com/package/ink))
- [Terminal Stream Managers](https://awesome-repositories.com/f/system-administration-monitoring/terminal-stream-managers.md) — Manages raw mode settings and handles low-level data streams by interacting directly with standard input and output channels. ([source](https://cdn.jsdelivr.net/gh/vadimdemedes/ink@master/README.md))
- [Terminal Input Trackers](https://awesome-repositories.com/f/system-administration-monitoring/terminal-input-trackers.md) — Tracks key states and input sequences to ensure accurate user interaction across various command-line applications. ([source](https://www.npmjs.com/package/ink))

### Operating Systems & Systems Programming

- [Terminal Abstraction Layers](https://awesome-repositories.com/f/operating-systems-systems-programming/terminal-abstraction-layers.md) — Manages raw input streams and ANSI escape sequences to provide consistent terminal behavior across different operating systems.

### User Interface & Experience

- [Terminal Accessibility Tools](https://awesome-repositories.com/f/user-interface-experience/terminal-accessibility-tools.md) — Notifies assistive technologies about screen changes by applying standard roles and labels to terminal output. ([source](https://cdn.jsdelivr.net/gh/vadimdemedes/ink@master/README.md))
