@nastechai/ink
v0.0.4
Published
> Extended [Ink](https://github.com/vadimdemedes/ink) runtime used inside [NasTech Agent](https://github.com/nastech-ai/NasTech-Agent) — mouse support, scroll boxes, BIDI text, selection, advanced key parsing, and a full terminal I/O layer built on top of
Readme
@nastechai/ink
Extended Ink runtime used inside NasTech Agent — mouse support, scroll boxes, BIDI text, selection, advanced key parsing, and a full terminal I/O layer built on top of React-in-the-terminal.
Install
npm install @nastechai/inkPeer dependencies:
npm install react@^19 ink-text-input@^6What's inside
| Export | Description |
|--------|-------------|
| render, renderSync, createRoot | Ink entry points |
| Box, Text, Newline, Spacer | Layout primitives |
| ScrollBox | Scrollable content region with keyboard / mouse control |
| AlternateScreen | Full-screen alternate buffer management |
| RawAnsi, Ansi | Render pre-formatted ANSI strings |
| Link | OSC 8 hyperlink |
| NoSelect | Opt-out of terminal text selection |
| useInput | Key and mouse input hook |
| useSelection | Terminal text-selection state |
| useTerminalViewport | Reactive terminal size |
| useTerminalFocus | Focus-in / focus-out events |
| useTerminalTitle | Set terminal tab title |
| useCursorAdvance, useDeclaredCursor | Cursor placement helpers |
| useExternalProcess, withInkSuspended | Suspend Ink while a subprocess owns the TTY |
| useTabStatus | Tab-visible / hidden tracking |
| useApp | Access exit() |
| useStdin, useStdout, useStderr | Raw stream access |
| measureElement | Measure a rendered Ink node |
| stringWidth | Unicode-aware terminal string width |
| wrapAnsi | Word-wrap with ANSI preservation |
| evictInkCaches | Reclaim render-cache memory under pressure |
| isXtermJs | Detect xterm.js host environment |
| forceRedraw | Trigger a full re-render |
Usage
import { render, Box, Text, useInput } from '@nastechai/ink'
function Counter() {
const [count, setCount] = React.useState(0)
useInput((_, key) => { if (key.upArrow) setCount(n => n + 1) })
return (
<Box>
<Text>Count: {count}</Text>
</Box>
)
}
render(<Counter />)Requirements
- Node.js ≥ 18
- React ≥ 19
License
MIT — NasTech
