olá, amigos.
sempre quis testar o react ink pra ver como ficam os componentes estilizados no terminal, aí aproveitei pra registrar o processo aqui e nunca mais esquecer (rs). o react ink é basicamente uma biblioteca para criar interfaces interativas no terminal usando React. quem já tem alguma familiaridade com React vai achar super tranquilo de mexer (quem não tem também!).
criando o projeto
pra criar o projetin usei o comando da documentação (dá pra usar com Typescript também, esse aí só cria os arquivos .js mesmo):
npx create-ink-app my-ink-cli |
estrutura de pastas
por padrão, esse comando vai criar o projetinho com duas pastas base: a pasta source/ com o código-fonte (onde a gente efetivamente vai codar) e a pasta dist/.

o código da pasta source/ ainda não está pronto para rodar diretamente no Node.js (porque pode conter sintaxe que o Node não entende). o código da pasta dist/ tem o código transpilado e convertido por ferramentas como Babel ou TypeScript. é onde vai parar o JavaScript compatível com o Node.js.
rodando o projeto
aí beleza, a gente precisa compilar então. como funciona?
- 👨💻 codar tudo em
source/ - ⚙️ rodar
npm run devounpm run build - 🛠 Babel compila tudo para
dist/ - ▶️ executar o que está na pasta dist com algo do tipo:
node dist/index.js
algumas descobertas
depois de rodar fui testando os componentes, sem muita complexidade. deixo aqui algumas coisas legais que dá pra fazer no terminal:
componente <Text>
código:
<Text color="cyan">Esse é o texto ciano</Text> |
resultado no terminal:

componente <Box> com borda
código:
<Box borderStyle="singleDouble" marginRight={2}> |
resultado no terminal:

hook useInput
é basicamente um hook pra detectar inputs do teclado.
código:
const InputDemo = () => { |
resultado no terminal (depois de clicar na tecla da esquerda e no enter algumas vezes):

hooks useState + useEffect
igual no React pra web, é possível usar hooks pra capturar eventos e forçar rerenders. nesse caso fiz um teste com um componente simples de relógio pra capturar a hora do PC.
código:
const Clock = () => { useEffect(() => { |
resultado no terminal:

conclusiones
ainda quero testar mais a lib e fazer um programinha funcional, mas o que vi é que o Ink é muuuito legal pra fazer automações e scripts de terminal de uma forma mais bacaninha. tem muita possibilidade!
deixo aqui o repositório testing-react-ink no Github 🙂