{"slug": "ink", "name": "Ink", "category": "terminal", "category_name": "Terminal and shell", "description": "", "recommenders": 3, "commenters": 18, "warners": 3, "score": 2.804, "rising": -0.98, "first": "2025-12-02", "latest": "2026-06-17", "why": "Ink (and modern alternatives) probably are the best TUI toolkit.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 9, "compare": 3, "warn": 5}, "spark": [0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "Ink (and modern alternatives) probably are the best TUI toolkit.", "kind": "", "icon": false, "domain": null, "github_repo": "github.com/vadimdemedes/ink", "official_url": "https://github.com/vadimdemedes/ink", "pricing": "", "aliases": ["Ink", "ink"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 769785025, "item_id": 48111564, "url": "https://news.ycombinator.com/item?id=48111564", "by": "wolvoleo", "date": "2026-05-12", "version": null, "stance": "recommend", "quote": "\"Ink\" for drawing", "excerpt": "\"Ink\" for drawing (big miss in the standard feature set IMO, the only one thing I missed coming from OneNote which is horrible in every other way compared to Obsidian). \"Self-Hosted Livesync\" for syncing on your own server (I don't want my stuff on other people's computers even when encrypted) \"Copilot\" for AI integration (I use two local ollama servers as you might have guessed from the above :) ) \"Whisper\" for text", "context": "", "use_case": "Drawing in notes", "switched_from": "", "story": "The Future of Obsidian Plugins"}, {"id": 745197505, "item_id": 46574844, "url": "https://news.ycombinator.com/item?id=46574844", "by": "tranqy", "date": "2026-01-11", "version": null, "stance": "recommend", "quote": "It's faster and aligns better.", "excerpt": "We built https://github.com/trabian/fluxwing-skills to handle some of this use case. For the most part it's now on the shelf but we use the react-ink toolkit for similar things. It's faster and aligns better.", "context": "", "use_case": "terminal UI", "switched_from": "fluxwing-skills", "story": "ASCII-Driven Development"}, {"id": 737999984, "item_id": 46124999, "url": "https://news.ycombinator.com/item?id=46124999", "by": "dboon", "date": "2025-12-02", "version": null, "stance": "recommend", "quote": "Ink (and modern alternatives) probably are the best TUI toolkit.", "excerpt": "Ink (and modern alternatives) probably are the best TUI toolkit. If you want to write a UI that's genuinely good, you need e.g. HTML, or some way to express divs and flex box. There isn't really another way to build professional grade UIs; I love immediate mode UI for games, but the breadth of features handled by the browser UI ecosystem is astonishing. It is a genuinely hard problem. And if you're expressing hierarc", "context": "", "use_case": "terminal UI", "switched_from": "", "story": "Anthropic acquires Bun"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 769515024, "item_id": 48094689, "url": "https://news.ycombinator.com/item?id=48094689", "by": "EMM_386", "date": "2026-05-11", "version": null, "stance": "warn", "quote": "it caused many issues such as flickering, thrashing, and latency", "excerpt": "There are terminal libraries that do this: https://github.com/vadimdemedes/ink Which is what Claude Code CLI uses (or was using?) and it caused many issues such as flickering, thrashing, and latency.", "context": "", "use_case": "", "switched_from": "", "story": "Ratty \u2013 A terminal emulator with inline 3D graphics"}, {"id": 755637776, "item_id": 47227361, "url": "https://news.ycombinator.com/item?id=47227361", "by": "jitl", "date": "2026-03-02", "version": null, "stance": "warn", "quote": "Ink itself leaves something to be desired", "excerpt": "A good toolkit for Ink is much needed, although Ink itself leaves something to be desired, especially compared to https://github.com/anomalyco/opentui (bun only, used by opencode) I tried to build a Viewport component in Ink, but after scrolling to the bottom of a list of 150 rows, Ink started to render things strangely - the top line overflowed the box bounds, and a few blank lines appeared inside the viewport. I co", "context": "", "use_case": "Terminal UI rendering", "switched_from": "", "story": "Show HN: Giggles \u2013 A batteries-included React framework for TUIs"}, {"id": 749654320, "item_id": 46853395, "url": "https://news.ycombinator.com/item?id=46853395", "by": "omnicognate", "date": "2026-02-01", "version": null, "stance": "warn", "quote": "Great, so probably a pretty straightforward fix, albeit in a dependency.", "excerpt": "Great, so probably a pretty straightforward fix, albeit in a dependency. Ink does indeed write ansiEscapes.clearTerminal [1], which does indeed \"Clear the whole terminal, including scrollback buffer. (Not just the visible part of it)\" [2]. (Edit: even the eraseLines here [4] will cause flicker.) Using alternate screen might help, and is probably desirable anyway, but really the right approach is not to clear the scre", "context": "", "use_case": "", "switched_from": "", "story": "What I learned building an opinionated and minimal coding agent"}, {"id": 749606576, "item_id": 46850411, "url": "https://news.ycombinator.com/item?id=46850411", "by": "omnicognate", "date": "2026-02-01", "version": null, "stance": "warn", "quote": "I do see an issue about flickering on Ink", "excerpt": "I figured they were doing something like Ink, but interesting to know that they're actually using Ink. Do you have any evidence that's the case? It doesn't answer the question, though. Ink throttles to at most 30fps (not 60 as the 16ms quote would suggest, though the at most is far more important). That's done to prevent it churning out vast amounts of ASCII, preventing issues like [1], not as some sort of display sy", "context": "", "use_case": "React-style terminal UI", "switched_from": "", "story": "What I learned building an opinionated and minimal coding agent"}]}], "who": [], "tags": [], "use_cases": ["terminal ui rendering", "terminal ui", "interactive fiction writing", "interactive fiction game", "drawing in notes", "react-style terminal ui"], "compared": [{"slug": "claude-code", "name": "Claude Code", "co": 10, "switched_from": 0, "switched_to": 0}, {"slug": "opentui", "name": "OpenTUI", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [{"id": 751377760, "item_id": 46961110, "url": "https://news.ycombinator.com/item?id=46961110", "by": "wffurr", "date": "2026-02-10", "version": null, "stance": "neutral", "quote": "in our drawing library[1]", "excerpt": "The \"circle arcs\" system for maintaining parallel road edges is very similar to how the stroke extrusion algorithm in our drawing library[1] works to maintain stroke width, with one difference being that we vary the circle radius for some brush dynamics based on pressure or speed. [1]: https://github.com/google/ink", "context": "", "use_case": "Drawing / stroke library", "switched_from": "", "story": "Art of Roads in Games"}], "threads": [{"url": "https://news.ycombinator.com/item?id=46902223", "title": "Claude Opus 4.6", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=48576395", "title": "Loreline \u2013 Tools for writing interactive fiction", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=46844822", "title": "What I learned building an opinionated and minimal coding agent", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=46699072", "title": "Claude Chill: Fix Claude Code's Flickering in Terminal", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=46124267", "title": "Anthropic acquires Bun", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=48355216", "title": "Show HN: An interactive fiction game about PR reviews, AI agents, team dynamics", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"recommend": 1, "warn": 1}, "2026-01": {"recommend": 1, "warn": 1, "neutral": 1}, "2026-02": {"warn": 1, "neutral": 4}, "2026-03": {"warn": 1, "neutral": 2, "compare": 1}, "2026-04": {}, "2026-05": {"neutral": 1, "warn": 1, "recommend": 1}, "2026-06": {"neutral": 1, "compare": 2}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 777260113, "item_id": 48578757, "url": "https://news.ycombinator.com/item?id=48578757", "by": "sltkr", "date": "2026-06-17", "version": null, "stance": "compare", "quote": "", "excerpt": "There is a comparison here: https://loreline.app/en/docs/comparison/", "context": "", "use_case": "", "switched_from": "", "story": "Loreline \u2013 Tools for writing interactive fiction"}, {"id": 777259024, "item_id": 48578689, "url": "https://news.ycombinator.com/item?id=48578689", "by": "er4hn", "date": "2026-06-17", "version": null, "stance": "compare", "quote": "I wonder how it compares to https://github.com/inkle/ink of Sorcery! and 80 days fame?", "excerpt": "I wonder how it compares to https://github.com/inkle/ink of Sorcery! and 80 days fame?", "context": "", "use_case": "interactive fiction writing", "switched_from": "", "story": "Loreline \u2013 Tools for writing interactive fiction"}, {"id": 773683584, "item_id": 48355224, "url": "https://news.ycombinator.com/item?id=48355224", "by": "mvellandi", "date": "2026-06-01", "version": null, "stance": "neutral", "quote": "I built the game using a JS port of Ink https://www.inklestudios.com/ink/", "excerpt": "Hi HN, My friend Alex Repty and I made this story game about pull requests and collaborative software dev. It's meant to be a little absurd while playing on current trends. The theme was inspired by the TV show Scrubs, and the movies Office Space and Dogma. You play a frontend developer trying to get a reasonable PR merged from your colleague who owns the codebase. There are seven possible endings, and a playthrough ", "context": "", "use_case": "interactive fiction game", "switched_from": "", "story": "Show HN: An interactive fiction game about PR reviews, AI agents, team dynamics"}, {"id": 769785025, "item_id": 48111564, "url": "https://news.ycombinator.com/item?id=48111564", "by": "wolvoleo", "date": "2026-05-12", "version": null, "stance": "recommend", "quote": "\"Ink\" for drawing", "excerpt": "\"Ink\" for drawing (big miss in the standard feature set IMO, the only one thing I missed coming from OneNote which is horrible in every other way compared to Obsidian). \"Self-Hosted Livesync\" for syncing on your own server (I don't want my stuff on other people's computers even when encrypted) \"Copilot\" for AI integration (I use two local ollama servers as you might have guessed from the above :) ) \"Whisper\" for text", "context": "", "use_case": "Drawing in notes", "switched_from": "", "story": "The Future of Obsidian Plugins"}, {"id": 769515024, "item_id": 48094689, "url": "https://news.ycombinator.com/item?id=48094689", "by": "EMM_386", "date": "2026-05-11", "version": null, "stance": "warn", "quote": "it caused many issues such as flickering, thrashing, and latency", "excerpt": "There are terminal libraries that do this: https://github.com/vadimdemedes/ink Which is what Claude Code CLI uses (or was using?) and it caused many issues such as flickering, thrashing, and latency.", "context": "", "use_case": "", "switched_from": "", "story": "Ratty \u2013 A terminal emulator with inline 3D graphics"}, {"id": 768051393, "item_id": 48003212, "url": "https://news.ycombinator.com/item?id=48003212", "by": "gopalv", "date": "2026-05-03", "version": null, "stance": "neutral", "quote": "Ended up reading the Ink Terminal implementation of React", "excerpt": "> The reality is different. Most modern Text User Interfaces (TUIs) are often more hostile to accessibility than poorly coded graphical interfaces. The Claude Code rendering UI is the first place where I realized the TUI is more like a DOS or Borland UI system rather than a command line interface. I was poking about CLAUDE_CODE_NO_FLICKER=1 setting when I realized what exactly this TUI is, it is layers of stuff showi", "context": "", "use_case": "", "switched_from": "", "story": "The text mode lie: why modern TUIs are a nightmare for accessibility"}, {"id": 759493409, "item_id": 47468338, "url": "https://news.ycombinator.com/item?id=47468338", "by": "sureglymop", "date": "2026-03-21", "version": null, "stance": "neutral", "quote": "here is a tui renderer", "excerpt": "Agreed and it's an important distinction to bring up. There are some pretty cool projects that use react like that, e.g., vicinae [0]. And one can implement a different renderer for react, here is a tui renderer [1]. 0: https://www.vicinae.com/ 1: https://github.com/vadimdemedes/ink", "context": "", "use_case": "", "switched_from": "", "story": "Windows 11's Start menu was built using React \u2013 now switching to native WinUI"}, {"id": 759119601, "item_id": 47444975, "url": "https://news.ycombinator.com/item?id=47444975", "by": "FabianCarbonara", "date": "2026-03-19", "version": null, "stance": "compare", "quote": "could also see it in the terminal via Ink", "excerpt": "Exactly this! Right now this uses React for Web but could also see it in the terminal via Ink. And I love the \"freeze\" idea \u2014 maybe then you could even share the mini app.", "context": "", "use_case": "Terminal UI rendering", "switched_from": "", "story": "I turned Markdown into a protocol for generative UI"}, {"id": 756325968, "item_id": 47270373, "url": "https://news.ycombinator.com/item?id=47270373", "by": "thoughtfulchris", "date": "2026-03-05", "version": null, "stance": "neutral", "quote": "And then there's Ink (https://github.com/vadimdemedes/ink) which is what Claude Code uses.", "excerpt": "Theory: terminal apps are closing the agent self-improvement loop because agents can use TUIs more easily than web/desktop/mobile. Anomaly, which builds OpenCode + OpenTUI), is also doing some really interesting stuff in this space with their custom renderer. And then there's Ink (https://github.com/vadimdemedes/ink) which is what Claude Code uses. I also built Ink Web (https://github.com/cjroth/ink-web) to make Ink ", "context": "", "use_case": "", "switched_from": "", "story": "The next generations of Bubble Tea, Lip Gloss, and Bubbles are available now"}, {"id": 755637776, "item_id": 47227361, "url": "https://news.ycombinator.com/item?id=47227361", "by": "jitl", "date": "2026-03-02", "version": null, "stance": "warn", "quote": "Ink itself leaves something to be desired", "excerpt": "A good toolkit for Ink is much needed, although Ink itself leaves something to be desired, especially compared to https://github.com/anomalyco/opentui (bun only, used by opencode) I tried to build a Viewport component in Ink, but after scrolling to the bottom of a list of 150 rows, Ink started to render things strangely - the top line overflowed the box bounds, and a few blank lines appeared inside the viewport. I co", "context": "", "use_case": "Terminal UI rendering", "switched_from": "", "story": "Show HN: Giggles \u2013 A batteries-included React framework for TUIs"}, {"id": 750721778, "item_id": 46920111, "url": "https://news.ycombinator.com/item?id=46920111", "by": "kadajett", "date": "2026-02-06", "version": null, "stance": "neutral", "quote": "rebuilding tools I'd previously written in Ink and open-tui", "excerpt": "blECSd is a terminal UI library for Node.js where every UI element is an entity. Position, rendering, focus, animation are all plain data in typed arrays. Systems are pure functions that process that data each frame. The same architecture that renders a dashboard with form controls can also run physics-based animations, particle effects, or a Doom source port in your terminal. The project started as a functional rewr", "context": "", "use_case": "", "switched_from": "", "story": "BlECSd \u2013 Terminal UI Library Built on an Entity Component System"}, {"id": 750453937, "item_id": 46903371, "url": "https://news.ycombinator.com/item?id=46903371", "by": "CamperBob2", "date": "2026-02-05", "version": null, "stance": "neutral", "quote": "All of the major providers' CLI harnesses use Ink", "excerpt": "Also explains why Claude Code is a React app outputting to a Terminal. (Seriously.) Who cares, and why? All of the major providers' CLI harnesses use Ink: https://github.com/vadimdemedes/ink", "context": "", "use_case": "terminal UI rendering", "switched_from": "", "story": "Claude Opus 4.6"}, {"id": 750443360, "item_id": 46902710, "url": "https://news.ycombinator.com/item?id=46902710", "by": "embedding-shape", "date": "2026-02-05", "version": null, "stance": "neutral", "quote": "I came across it initially with https://github.com/vadimdemedes/ink back in 2022", "excerpt": "Not a built-in React feature. The idea been around for quite some time, I came across it initially with https://github.com/vadimdemedes/ink back in 2022 sometime.", "context": "", "use_case": "", "switched_from": "", "story": "Claude Opus 4.6"}, {"id": 750443248, "item_id": 46902703, "url": "https://news.ycombinator.com/item?id=46902703", "by": "pkkim", "date": "2026-02-05", "version": null, "stance": "neutral", "quote": "I've used it myself. It has some rough edges in terms of rendering performance but it's nice overall.", "excerpt": "They used Ink: https://github.com/vadimdemedes/ink I've used it myself. It has some rough edges in terms of rendering performance but it's nice overall.", "context": "", "use_case": "", "switched_from": "", "story": "Claude Opus 4.6"}, {"id": 749654320, "item_id": 46853395, "url": "https://news.ycombinator.com/item?id=46853395", "by": "omnicognate", "date": "2026-02-01", "version": null, "stance": "warn", "quote": "Great, so probably a pretty straightforward fix, albeit in a dependency.", "excerpt": "Great, so probably a pretty straightforward fix, albeit in a dependency. Ink does indeed write ansiEscapes.clearTerminal [1], which does indeed \"Clear the whole terminal, including scrollback buffer. (Not just the visible part of it)\" [2]. (Edit: even the eraseLines here [4] will cause flicker.) Using alternate screen might help, and is probably desirable anyway, but really the right approach is not to clear the scre", "context": "", "use_case": "", "switched_from": "", "story": "What I learned building an opinionated and minimal coding agent"}, {"id": 749606576, "item_id": 46850411, "url": "https://news.ycombinator.com/item?id=46850411", "by": "omnicognate", "date": "2026-02-01", "version": null, "stance": "warn", "quote": "I do see an issue about flickering on Ink", "excerpt": "I figured they were doing something like Ink, but interesting to know that they're actually using Ink. Do you have any evidence that's the case? It doesn't answer the question, though. Ink throttles to at most 30fps (not 60 as the 16ms quote would suggest, though the at most is far more important). That's done to prevent it churning out vast amounts of ASCII, preventing issues like [1], not as some sort of display sy", "context": "", "use_case": "React-style terminal UI", "switched_from": "", "story": "What I learned building an opinionated and minimal coding agent"}, {"id": 747809249, "item_id": 46738078, "url": "https://news.ycombinator.com/item?id=46738078", "by": "EMM_386", "date": "2026-01-23", "version": null, "stance": "warn", "quote": "The flickering issue due to the Ink library has been a headache for a long time", "excerpt": "The flickering issue due to the Ink library has been a headache for a long time, but they are slowly making progress on this. https://github.com/anthropics/claude-code/issues/769", "context": "", "use_case": "", "switched_from": "", "story": "Claude.ai silently failing since Jan 14, no official acknowledgment"}, {"id": 747205889, "item_id": 46700368, "url": "https://news.ycombinator.com/item?id=46700368", "by": "jschlatter", "date": "2026-01-20", "version": null, "stance": "neutral", "quote": "We originally built Claude Code on Ink, a React renderer for the terminal.", "excerpt": "They started with Ink but have since switched to their own renderer: > We originally built Claude Code on Ink, a React renderer for the terminal. [...] Over the past few months, we've rewritten our rendering system from scratch (while still using React). https://github.com/anthropics/claude-code/issues/769#issuecomment-3667315590", "context": "", "use_case": "terminal UI rendering", "switched_from": "", "story": "Claude Chill: Fix Claude Code's Flickering in Terminal"}, {"id": 747202864, "item_id": 46700179, "url": "https://news.ycombinator.com/item?id=46700179", "by": "EMM_386", "date": "2026-01-20", "version": null, "stance": "warn", "quote": "they are using the Ink library which clears and redraws for each update", "excerpt": "The problem is they are using the Ink library which clears and redraws for each update. https://github.com/anthropics/claude-code/issues/769 I locally patched the closed-source CLI npm package but it's not perfect. They would have to switch how their TUI is rendered on their side. Apparently OpenAI Codex is rust+ratatui which does not have this issue.", "context": "", "use_case": "", "switched_from": "", "story": "Claude Chill: Fix Claude Code's Flickering in Terminal"}, {"id": 745197505, "item_id": 46574844, "url": "https://news.ycombinator.com/item?id=46574844", "by": "tranqy", "date": "2026-01-11", "version": null, "stance": "recommend", "quote": "It's faster and aligns better.", "excerpt": "We built https://github.com/trabian/fluxwing-skills to handle some of this use case. For the most part it's now on the shelf but we use the react-ink toolkit for similar things. It's faster and aligns better.", "context": "", "use_case": "terminal UI", "switched_from": "fluxwing-skills", "story": "ASCII-Driven Development"}, {"id": 738026032, "item_id": 46126627, "url": "https://news.ycombinator.com/item?id=46126627", "by": "EMM_386", "date": "2025-12-02", "version": null, "stance": "warn", "quote": "Ink seems to be the root cause of a major issue with the Claude Code CLI where it flickers horribly", "excerpt": "Ink seems to be the root cause of a major issue with the Claude Code CLI where it flickers horribly when it needs to repeatedly clear the screen and redraw. I don't know why it's even necessary for this. https://github.com/atxtechbro/test-ink-flickering Issue on Claude Code GitHub: https://github.com/anthropics/claude-code/issues/769", "context": "", "use_case": "Terminal UI rendering", "switched_from": "", "story": "Anthropic acquires Bun"}, {"id": 737999984, "item_id": 46124999, "url": "https://news.ycombinator.com/item?id=46124999", "by": "dboon", "date": "2025-12-02", "version": null, "stance": "recommend", "quote": "Ink (and modern alternatives) probably are the best TUI toolkit.", "excerpt": "Ink (and modern alternatives) probably are the best TUI toolkit. If you want to write a UI that's genuinely good, you need e.g. HTML, or some way to express divs and flex box. There isn't really another way to build professional grade UIs; I love immediate mode UI for games, but the breadth of features handled by the browser UI ecosystem is astonishing. It is a genuinely hard problem. And if you're expressing hierarc", "context": "", "use_case": "terminal UI", "switched_from": "", "story": "Anthropic acquires Bun"}]}