opentui
AGENTS.md14k starsChanged 13 days agoMITView on GitHub
- Reuse existing seams; do not duplicate policy, ownership, or state across TypeScript, Zig, and framework layers. - For bug fixes, first add a focused regression test of observable behavior or invariants. If automation is impossible, record the evidence and remaining manual verification; do not substitute contract sketches or guesses. - Make native ownership explicit; clean up handles, callbacks, buffers, and listeners on every exit path. Bound input-driven work and test lifecycle failures. - Do not interchange byte lengths, code…
1 other project uses a version of this.
Trending
Quiet since August.about the whole repository
Most recently taken up by
- anomalyco/opentuiword for word, first seen Oct 8, 2026
Who's talking about sst/opentui
- @bearstech.com“OpenTUI : bibliothèque Open Source en TypeScript pour créer des interfaces pour terminaux 👉 …”Bluesky · Nov 6, 2025 · 7 likes
- anomalyco/opentui“InputRenderable: cannot disable cursor blink”GitHub · Nov 3, 2025 · 6 reactions
- @github-trending-js.bsky.social“🚀 Skyrocketing! 🚀 (200+ new stars) 📦 sst / opentui ⭐ 4,541 (+204) 🗒 TypeScript OpenTUI is a library for …”Bluesky · Nov 6, 2025 · 4 likes
- @github-trending-js.bsky.social“📦 sst / opentui ⭐ 3,248 (+46) 🗒 TypeScript OpenTUI is a library for building terminal user interfaces (TUIs)”Bluesky · Nov 2, 2025 · 4 likes
- anomalyco/opentui“feat: add support for transparent terminal background rendering”GitHub · Oct 22, 2025 · 4 reactions
The biggest 5 of 53 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 53
Talked about on GitHub, Bluesky and Hacker News (53 times).
On GitHub · 39
- Nov 3, 2025InputRenderable: cannot disable cursor blink — anomalyco/opentui6 reactions · 2 comments
- Oct 22, 2025feat: add support for transparent terminal background rendering — anomalyco/opentui4 reactions · 4 comments
- Dec 28, 2025line_number gutter stops displaying line numbers beyond line 99 — anomalyco/opentui2 reactions · 5 comments
- Nov 27, 2025Feature request: Remove top-level await to enable bytecode compilation — anomalyco/opentui2 reactions · 1 comment
- Nov 21, 2025Kitty Graphics Protocol query leaks Gi=31337 response into tmux pane title — anomalyco/opentui2 reactions · 5 comments
34 more on GitHub
- Nov 14, 2025fix: Add missing SIGWINCH for windows — oven-sh/bun2 reactions · 4 comments
- Nov 6, 2025chore(react): replace render method with createRoot — msmps/create-tui2 reactions · 1 comment
- Nov 3, 2025fix: content disappears on session change — anomalyco/opencode2 reactions · 3 comments
- Jan 3, 2026fix(deps): update dependency @opentui/core to v0.1.67 — samui-build/samui-wallet1 reaction · 4 comments
- Jan 2, 2026fix(deps): update dependency @opentui/core to v0.1.66 — samui-build/samui-wallet1 reaction · 4 comments
- Dec 26, 2025fix(deps): update dependency @opentui/react to v0.1.67 — samui-build/samui-wallet1 reaction · 6 comments
- Dec 26, 2025fix(deps): update dependency @opentui/core to v0.1.63 — samui-build/samui-wallet1 reaction · 4 comments
- Dec 23, 2025fix(deps): update dependency @opentui/core to v0.1.62 — samui-build/samui-wallet1 reaction · 4 comments
- Dec 22, 2025fix: support non-Latin keyboard layouts (e.g., Korean IME) for keybindings — anomalyco/opencode1 reaction · 5 comments
- Dec 20, 2025fix(deps): update dependency @opentui/core to v0.1.61 — samui-build/samui-wallet1 reaction · 4 comments
- Dec 15, 2025fix(deps): update dependency @opentui/core to v0.1.60 — samui-build/samui-wallet1 reaction · 4 comments
- Nov 1, 2025TUI Test coverage to avoid regressions — anomalyco/opencode1 reaction · 4 comments
- Oct 12, 2025fix: standardize TextNode remove method to use ID-based lookup to resolve "Child not found in children" error — anomalyco/opentui1 reaction · 1 comment
- Oct 6, 2025Fix(core): insertBefore not rendering conditional children with siblings after them — anomalyco/opentui1 reaction
- Aug 31, 2025React renderer should unset a node style attribute when it is `undefined` — anomalyco/opentui1 reaction · 1 comment
- Aug 18, 2026opencode harness: markdown renders as raw text outside $HOME (opentui tree-sitter grammars not granted) — TNG/oh-my-agentic-coder0 reactions
- Aug 7, 2026CONTRIBUTING.md points to a TUI path that no longer exists — anomalyco/opencode0 reactions · 2 comments
- May 13, 2026fix: preserve markdown hyperlink targets — anomalyco/opentui0 reactions · 1 comment
- Dec 27, 2025Debug console doesn't open — anomalyco/opentui0 reactions · 3 comments
- Dec 22, 2025chore(deps): bump @opentui/solid from 0.1.50 to 0.1.62 — quietworks/tread0 reactions
- Dec 22, 2025chore(deps): bump @opentui/core from 0.1.50 to 0.1.62 — quietworks/tread0 reactions
- Dec 11, 2025Add TUI — Baz00k/jot-cli0 reactions
- Nov 8, 2025[News] 投稿 — Yuyz0112/koala-oss-app0 reactions · 5 comments
- Nov 7, 2025Check trending repo: sst/opentui — uibm/trending-watcher0 reactions · 1 comment
- Nov 4, 2025Posted: sst / opentui — nanameru/x-post-automation0 reactions
- Nov 2, 2025CJK characters break some features like `@` mentions — anomalyco/opencode0 reactions · 9 comments
- Oct 31, 2025Importing OpenTUI stops Effect from properly running teardown hooks — anomalyco/opentui0 reactions · 6 comments
- Oct 14, 2025OpenTui — asynkron/OpenAgent0 reactions
- Oct 9, 2025[BUG] failing to install OpenTUI system-wide (Go) — anomalyco/opentui0 reactions · 5 comments
- Sep 27, 2025Move to OpenTui — vdawg-git/moo0 reactions
- Sep 18, 2025ai cli tools with common tasks and stuff — effect-native/effect-native0 reactions
- Sep 14, 2025Blocking issues — remorses/termcast0 reactions
- Sep 10, 2025Unable to install Go package on Mac ARM64 — anomalyco/opentui0 reactions · 8 comments
- Aug 14, 2025Introduce OpenTUI target — c100k/libmodulor0 reactions · 1 comment
On Bluesky · 13
- Nov 6, 2025OpenTUI : bibliothèque Open Source en TypeScript pour créer des interfaces pour terminaux 👉 github.com/sst/opentui — @bearstech.com7 likes and reposts · 2 replies
- Nov 6, 2025🚀 Skyrocketing! 🚀 (200+ new stars) 📦 sst / opentui ⭐ 4,541 (+204) 🗒 TypeScript OpenTUI is a library for building terminal user… — @github-trending-js.bsky.social4 likes and reposts
- Nov 2, 2025📦 sst / opentui ⭐ 3,248 (+46) 🗒 TypeScript OpenTUI is a library for building terminal user interfaces (TUIs) — @github-trending-js.bsky.social4 likes and reposts
- Nov 20, 2025github.com/sst/opentui — @mary.my.id3 likes and reposts
- Dec 23, 2025TUI figma built with OpenTUI is so cool, and equally cool is the distribution mechanism. so slick that you can just try it by running `bunx… — @davidcrespo.bsky.social2 likes and reposts · 1 reply
8 more on Bluesky
- Nov 6, 2025今日のGitHubトレンド sst/opentui OpenTUIは、ターミナルユーザーインターフェース(TUI)を構築するためのTypeScriptライブラリである。… — @dailygithubtrends.bsky.social2 likes and reposts
- Jul 29, 2025YES. been waiting for a TypeScript analogue of the charmbracelet libraries like Bubble Tea github.com/charmbracele... — @davidcrespo.bsky.social2 likes and reposts · 1 reply
- Dec 29, 2025🔥 Hot Repo! 🔥 (100+ new stars) 📦 sst / opentui ⭐ 6,642 (+176) 🗒 TypeScript OpenTUI is a library for building terminal user interfaces… — @github-trending-js.bsky.social1 likes and repost
- Dec 3, 2025Opening OpenCode #10 The TUI is implemented using OpenTUI and @solid_js github.com/sst/opentui — @jagasantagostino.com1 likes and repost
- Nov 4, 2025OpenTUIはTypeScriptで書かれたターミナルUIを構築するためのライブラリらしい。ReactやSolidJSなどのフレームワークで動くTUIを開発するのに役立ちそう。 yug1224 starred sst/opentui… — @yug1224.com1 likes and repost
- Nov 4, 2025今日のGitHubトレンド sst/opentui OpenTUIは、TypeScriptを用いて端末ユーザーインターフェース(TUI)を構築するためのライブラリである。… — @dailygithubtrends.bsky.social1 likes and repost
- Nov 3, 2025📦 sst / opentui ⭐ 3,307 (+57) 🗒 TypeScript OpenTUI is a library for building terminal user interfaces (TUIs) — @github-trending.bsky.social1 likes and repost
- Aug 12, 2025https://github.com/sst/opentui — @tom-doerr.bsky.social1 likes and repost
On Hacker News · 1
- Jul 29, 2025OpenTUI2 points
Other versions1 project uses a version of this.
Word for word · 1
- anomalyco/opentui★ 14k100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
The file
We split this AGENTS.md into the rules it gives an agent
11 rules. About 0 are common, 4 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
Do not interchange byte lengths, code points, graphemes, and terminal display-cell widths.
- Distinctive: line 14
Use concrete scopes such as frame parity, callback ordering, resource cleanup, or loopback SSH output tests.
- Very specific: line 19
Use Bun for dependency management and development commands: bun install, bun run <script>, bun test, and bun <file>.
- Distinctive: line 20
Run package scripts from the package directory unless the script is defined at the repository root.
- Distinctive: line 27
Run the narrowest relevant test first, then the affected package suite.
- Very specific: line 30
Run bun run build from the repository root after native or cross-package build/output changes, or when tests report a missing/stale native …
- Very specific: line 35
Use root bun run fmt:check and bun run lint for final static checks when relevant.
- Very specific: line 37
Prefer tests and TestRenderer for automated debugging.
- Very specific: line 47
Default to buffer for transient, non-null TypedArray parameters and pass the view directly.
- Very specific: line 51
Use ptr only when a parameter can be null, accepts a numeric native address, or is a callback.
- Very specific: line 56
Use ptr(view) only when native code stores the address beyond the call.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
OpenTUI Agent Guide
Engineering
- Reuse existing seams; do not duplicate policy, ownership, or state across TypeScript, Zig, and framework layers.
- For bug fixes, first add a focused regression test of observable behavior or invariants. If automation is impossible, record the evidence and remaining manual verification; do not substitute contract sketches or guesses.
- Make native ownership explicit; clean up handles, callbacks, buffers, and listeners on every exit path. Bound input-driven work and test lifecycle failures.
- Do not interchange byte lengths, code points, graphemes, and terminal display-cell widths.
oxfmtis the formatting source of truth (semi: false,printWidth: 120); avoid unrelated formatting churn.- In delegated tasks, name the local rendering behavior, owned files, and required checks. Describe ordinary renderer work as correctness and compatibility testing; reserve security terminology for actual security work. Use concrete scopes such as frame parity, callback ordering, resource cleanup, or loopback SSH output tests. Request an independent correctness review and a separate reproduction check of actionable findings.
Tooling And Runtimes
- Use Bun for dependency management and development commands:
bun install,bun run <script>,bun test, andbun <file>. - Run package scripts from the package directory unless the script is defined at the repository root.
- Shared runtime code must preserve the supported Bun and Node paths. Keep runtime-specific behavior behind existing
platform/runtime/build seams; do not introduce Bun-only APIs into shared modules. Node checks use the minimum
version enforced by
scripts/node26.mjs.
Verification
- Run the narrowest relevant test first, then the affected package suite.
- Ordinary TypeScript source changes do not require the root build. Use the affected package's
test,typecheck,build, or validation scripts as applicable. - Run
bun run buildfrom the repository root after native or cross-package build/output changes, or when tests report a missing/stale native artifact. It does not build web or examples; use their package scripts. - For native changes, run
bun run test:nativefrompackages/core. Filter withbun run test:native -Dtest-filter="test name"while iterating. - For runtime, FFI, build, or export changes, run the relevant Node and packed-distribution scripts from that package
(such as
test:js:nodeortest:dist) when present. - Use root
bun run fmt:checkandbun run lintfor final static checks when relevant.
Prefer tests and TestRenderer for automated debugging. For interactive behavior, load the terminal-control skill and
use its terminal tool to run, drive, and inspect the app; repository examples bind backtick to
renderer.console.toggle() for captured console.log output. Ask for a user-run reproduction only when the required
terminal or platform is unavailable locally.
Portable FFI
- Portable symbol signatures must stay within the
node:ffi/bun:ffiintersection. Use explicit widths such asu32/u64, not backend-only ABI names such asusize,napi_env, ornapi_value; representi64/u64asbigint, native booleans as0/1, and shared pointers asnumber | bigint. - Default to
bufferfor transient, non-nullTypedArrayparameters and pass the view directly. Do not callptr(). - For a raw
ArrayBuffer, create oneUint8Arrayview over it, keep that view, and declarebuffer. Abuffercall costs less than aptrcall.bufferrejects an argument that is not a view with aTypeError.ptrsends a bad argument to native code as an address. - Use
ptronly when a parameter can be null, accepts a numeric native address, or is a callback. Pass transient owner objects directly toptrparameters. Do not pre-resolve them. - Bun 1.3 does not accept
DataViewdirectly forbufferorptrparameters. Pass an equivalent typed array such asnew Uint8Array(view.buffer, view.byteOffset, view.byteLength). - On Bun 1.4+, use
bufferwhen you pass aDataViewdirectly to FFI. - Use
ptr(view)only when native code stores the address beyond the call. Before resolving it, accessview.bufferto move any inline typed-array storage into a stableArrayBuffer, then keep the view alive for the complete native lifetime. The order is required:const owner = view.buffer; const address = ptr(view). Callingptr(view)first and accessingview.bufferlater can move the storage and invalidateaddress. - Model C-string inputs as pointer parameters and pass owned, NUL-terminated byte buffers directly; string returns are
not portable. Create callbacks through the loaded library/platform facade, not
new JSCallback(...), and assume only same-thread callbacks.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

