{"_id":"ghostty-opentui","_rev":"27-e7a08b9b34682392879a3009d7c7d5c0","name":"ghostty-opentui","dist-tags":{"latest":"1.5.0"},"versions":{"1.3.0":{"name":"ghostty-opentui","version":"1.3.0","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"ISC","_id":"ghostty-opentui@1.3.0","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"b5a94e1f9b8d840da42ba30658189b9db1c4a588","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.0.tgz","fileCount":13,"integrity":"sha512-S+uT7s3deDrefrAJrksRdKlkxJFPvV/ZhWVA5NJfvCb/UGlpR7M6Mp3AA9bsyULDWPs15P30L0kBsgPM1orGGA==","signatures":[{"sig":"MEUCIQD9LbvwnfDyU9AfSmvlacCWe97fxS4LsHuZY+4tqSWmkwIgWpWPelG8UhwXs9kIje1yA1PqnCswR8k2CxOQuYTWRXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3867245},"main":"./dist/ffi.js","types":"./dist/ffi.d.ts","exports":{".":{"types":"./dist/ffi.d.ts","require":"./dist/ffi.js"},"./terminal-buffer":{"types":"./dist/terminal-buffer.d.ts","require":"./dist/terminal-buffer.js"}},"gitHead":"d9aaaad89473cefd4954a69813a3d051e7168a6e","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","build":"tsc -p tsconfig.build.json","prepublishOnly":"bun run build"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.11.1","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.3","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","@opentui/core":"^0.1.50","@opentui/react":"0.1.50"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.0_1764670264246_0.10532676243660077","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"ghostty-opentui","version":"1.3.1","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.1","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"b560eea3acefa75861747a65c38af545c75ceac7","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.1.tgz","fileCount":13,"integrity":"sha512-YazXqNN4fnL0GHn+YOYEVs0jiPdPNrMVG7ZRNvw7x1kV25vKSWxlk9Befv8g2Pr/SwZhDTYIAil5OiyNNErR+w==","signatures":[{"sig":"MEQCIHGTFvp5D2fe5nwdzfccgkyjB0FGc1hdDumZVlqmMFuWAiAB/kI9xhY+mQ3LFtye08nqlCKFd8okQ+JX9S3mWyAl5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3942718},"main":"./dist/ffi.js","types":"./dist/ffi.d.ts","exports":{".":{"types":"./dist/ffi.d.ts","require":"./dist/ffi.js"},"./terminal-buffer":{"types":"./dist/terminal-buffer.d.ts","require":"./dist/terminal-buffer.js"}},"gitHead":"ba4d5d04ae72fc54f74ee0bb0188ff59e16a1834","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","build":"tsc -p tsconfig.build.json","prepublishOnly":"bun run build"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.11.1","dependencies":{"bun-pty":"^0.4.2","strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^1.3.3","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","@opentui/core":"^0.1.50","@opentui/react":"0.1.50"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.1_1764679746275_0.15572851675606492","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"ghostty-opentui","version":"1.3.2","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.2","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"ace01b61c11dc74ca4480dd3c6fd39d4669a16c1","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.2.tgz","fileCount":13,"integrity":"sha512-RMDLITidc9yOcl0CRnwBMMcF/xnoYnj0F0QHMDVnLaRzGfn8XiaRALqsKDs5taGAvtQQ5Dl/WgD2UlQ9FjJ9cA==","signatures":[{"sig":"MEUCIDI26OHJtcBFb0sj/biCifsAlHCC+PaQc+EpSsA8Ed+OAiEAw6hu5/n131JmxnbQ9lrkIJtPqEMXG0jIRpCnGk2sDhE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3942695},"main":"./dist/ffi.js","types":"./dist/ffi.d.ts","exports":{".":{"types":"./dist/ffi.d.ts","require":"./dist/ffi.js"},"./terminal-buffer":{"types":"./dist/terminal-buffer.d.ts","require":"./dist/terminal-buffer.js"}},"gitHead":"82cca6484e410e83a6bba5b7315e271ef32d4c13","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","build":"tsc","prepublishOnly":"bun run build"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.11.1","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"bun-pty":"^0.4.2","bun-types":"^1.3.3","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","@opentui/core":"^0.1.50","@opentui/react":"0.1.50"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.2_1764853858687_0.6096313224684808","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"ghostty-opentui","version":"1.3.3","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.3","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"92c6516ebd1c0efdaa5a65d08376490a61d12ad9","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.3.tgz","fileCount":13,"integrity":"sha512-j8LfHbUhCGxiw2YEFhPQ1IZzXisPgIwsm6/fzmXBkoSo3g9dszMoCXYfOdIJqxEVkcZ/7KVkaUTBkcga2qBkOw==","signatures":[{"sig":"MEUCIAUQCUC0mQvcFZQGjter1/9k6070xw2LZ1/qngJQtgq7AiEAwgNODe+KLIhPJ4S4woDQsVxXKIJedKInDLOPn17ubOM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3942775},"main":"./dist/ffi.js","types":"./dist/ffi.d.ts","exports":{".":{"types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./terminal-buffer":{"types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"a445e44d945ab643425df3d98cc9f4dccae290df","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","build":"tsc","prepublishOnly":"bun run build"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.11.1","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"bun-pty":"^0.4.2","bun-types":"^1.3.3","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","@opentui/core":"^0.1.50","@opentui/react":"0.1.50"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.3_1764854538727_0.9369430905675393","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"ghostty-opentui","version":"1.3.4","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.4","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"8e048366a2fd1f235202a8fa5d0c76e4869932e5","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.4.tgz","fileCount":13,"integrity":"sha512-ZMkwBZGScdWvBflgnPpBLGYKp4H3+XIIyECYHlFxAsbq0bKUezql25hnkWBZeplp8HSOLVWfjJ3oAa4fKxRpuw==","signatures":[{"sig":"MEYCIQDUaadxpC0zPXu19Yr8Ij/T/JwHpK833b9IkjBYwLrBkwIhAOgbng5+WqDdNOyiQ3qC+H1iAOh2QxHPtAloPz6ul43M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3942992},"exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"49aa0e86c8a2a9cd0d09b9310ae62c6807972f9d","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","build":"tsc","prepublishOnly":"bun run build"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.11.1","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"bun-pty":"^0.4.2","bun-types":"^1.3.3","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","@opentui/core":"^0.1.50","@opentui/react":"0.1.50"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.4_1764952571726_0.04603916980609002","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"ghostty-opentui","version":"1.3.5","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.5","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"ec1e3939504316109b5f5c6418da65aac1ea43a7","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.5.tgz","fileCount":22,"integrity":"sha512-v+Dk65vS+Q1XcBflP5wJiPB4dFJnwzDjPPtxjQaFqznNno4EHl9aVW1TN29bKV098PtdXmEPr0Dcdw4Usvwucw==","signatures":[{"sig":"MEQCIHFlqVyFDtdNlyp8OVug8mNtq2rUGIIhs/yyZKi7MrTrAiAHgDedVAY0jGOiVUcVRnGaEutQ+rZAcwvmFFuXg3CAMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4050868},"exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"22639520f69cec548ccf76b2ccc65b54ed35aeb6","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","build":"tsc","prepublishOnly":"bun run build"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.11.1","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"bun-pty":"^0.4.2","bun-types":"^1.3.3","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","@opentui/core":"^0.1.50","@opentui/react":"0.1.50"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.5_1764953501429_0.5759315464456662","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"ghostty-opentui","version":"1.3.6","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.6","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"ea3f13e909eff7a7ff57166c248d1c91171f8396","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.6.tgz","fileCount":26,"integrity":"sha512-DETUuSiIcTwTIqICmDEezYxt0gXk/4bGC+28Hd4fqFdejB8GTCJvRzGGcwfPoYgIKxsqcVTm1Hku3m6K+NiPAA==","signatures":[{"sig":"MEUCIFeXhM8h7lHFz7gqrt4CmWxPMWg5j/iuoiKxbhg6oI5oAiEA7C61anYnfwHGVbibSRzP9oYSZoqdd0tT+T16UqtRuPA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4051185},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"dfc31e10f3f05bf21ccec5fe6c109c3816ff5ac6","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","prepublishOnly":"bun run build"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.11.1","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"bun-pty":"^0.4.2","bun-types":"^1.3.3","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.7","@opentui/core":"^0.1.50","@opentui/react":"0.1.50"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.6_1764955336094_0.9175089532675222","host":"s3://npm-registry-packages-npm-production"}},"1.3.7":{"name":"ghostty-opentui","version":"1.3.7","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":"remorses","license":"MIT","_id":"ghostty-opentui@1.3.7","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"dist":{"shasum":"69b6d2bd1d2c8603b3a17eed1ad74411253e21b7","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.7.tgz","fileCount":22,"integrity":"sha512-tXlVrFKMiS+VNm48OwQtCefP7i85o04wv2S/NPR5bIzv4yAl2//q7CBa8JEv9bL+5jpZsfMm6z8VJGrTq6Xjvg==","signatures":[{"sig":"MEUCIQD1iFmYWlKz9KsglxLdn1xiJ9ph5Y3/z1RB+gbkNJ7ECQIgbWFpoz4MqIfu7lANpnSt8HmK6H4Zm2Z+tI6b+Nnbce4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165358},"type":"module","shasum":"69b6d2bd1d2c8603b3a17eed1ad74411253e21b7","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"bun run build:zig && bun run build"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"_integrity":"sha512-tXlVrFKMiS+VNm48OwQtCefP7i85o04wv2S/NPR5bIzv4yAl2//q7CBa8JEv9bL+5jpZsfMm6z8VJGrTq6Xjvg==","repository":{"url":"https://github.com/remorses/ghostty-opentui","type":"git"},"_npmVersion":"10.8.3","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.3.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"bun-pty":"^0.4.2","bun-types":"^1.3.4","typescript":"^5.9.3","@types/node":"^24.10.3","@types/react":"^19.2.7","@opentui/core":"^0.1.60","@opentui/react":"0.1.50"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.7_1765559385468_0.4880307293689119","host":"s3://npm-registry-packages-npm-production"}},"1.3.8":{"name":"ghostty-opentui","version":"1.3.8","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.8","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"c28274877c4a9c51d38852e1bca756d03d6fdf00","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.8.tgz","fileCount":30,"integrity":"sha512-EvL24Ct7Ut40IavwNM9SL9sL7w9o7p5tJOWPl4FEO0NGcYzfZPKILzhjksID5XCNGz+ebKEuwyX5SEPYo2VtzA==","signatures":[{"sig":"MEUCIQDnz9LUvzpBvRirsx32m9rLfLKV86ikz+RLpifsOr05TAIgFgEH3R0lazU2EcY8i8wbaXbooEQol+8dvd7YEbYVLDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3949341},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"2a566573c219e9325484b3ce75a58bae26ee9e62","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"^0.4.2","bun-types":"^1.3.5","typescript":"^5.9.3","@types/node":"^25.0.3","@types/react":"^19.2.7","@opentui/core":"^0.1.61","@opentui/react":"0.1.62"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.8_1766394408594_0.26569402221108374","host":"s3://npm-registry-packages-npm-production"}},"1.3.9":{"name":"ghostty-opentui","version":"1.3.9","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.9","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"4646507865b11b88ab2ce4152df0014804da7e40","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.9.tgz","fileCount":30,"integrity":"sha512-OCxM3KKvTlv1O4BertDkqC8DGQMa5yXN+XIqbcu4e5m+YjzM6P1eUvKp+LswNOt/7aRHxakEKpwT1WtXk2eNNg==","signatures":[{"sig":"MEYCIQCLvTvjS0Cdi9mZftqtHyudwg2gVOgk2KRtgw5bHQwp3AIhAI9yF/o1tc3nklbI2TZgt6UExq89n+ME3fjrFKEUJKOX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4233127},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"650c74090dac52e54cfed0f29a1489e5609793aa","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"^0.4.2","bun-types":"^1.3.5","typescript":"^5.9.3","@types/node":"^25.0.3","@types/react":"^19.2.7","@opentui/core":"^0.1.61","@opentui/react":"0.1.62"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.9_1766431509922_0.48856817678611364","host":"s3://npm-registry-packages-npm-production"}},"1.3.10":{"name":"ghostty-opentui","version":"1.3.10","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.10","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"9ee046fbd3750ddd720409c9ba990245f0faf618","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.10.tgz","fileCount":31,"integrity":"sha512-J2q4m/wbXU2SylN4dnjUguaZA4dN3I54YDSE4i85sLQCrcYx6KtRmV3hKTon00sH+iFCLFtLI0mJuIUapSwhtw==","signatures":[{"sig":"MEUCIAT3P8ohYWp+CPtgYiRKrsXiE8DjFhkFK/3y5n1Bj1wOAiEAqYkGtXSQ2B/aC4DCVc2mF5dn32LSxX4LcR0MMZza5gU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5214242},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"faca1956f6cc0b36402fe082046daa7783c74acc","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"^0.4.2","bun-types":"^1.3.5","typescript":"^5.9.3","@types/node":"^25.0.3","@types/react":"^19.2.7","@opentui/core":"^0.1.61","@opentui/react":"0.1.62"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.10_1766432713810_0.35337567797638836","host":"s3://npm-registry-packages-npm-production"}},"1.3.11":{"name":"ghostty-opentui","version":"1.3.11","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.11","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"78d5bc7c5d9739ce0800627a131e9c96340c43c1","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.11.tgz","fileCount":30,"integrity":"sha512-taKOhQD65dip/GBi2eDicyS6Z+m7T6CAWyUcFUVP3nX+JKTCiOwfncGqhnqtSa8VE3mG6VHaPzIimDVN7pdD6w==","signatures":[{"sig":"MEUCIADoN3jOLErX3JzFvzZyaVXzWUYCuQNdp+rszjhv71gsAiEAuPjcV3S3qSB2RgubL5nYexCxuMcLI+e/guRYHs1cpQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5211624},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"9eb281e44d15df5c82a15d6c0301e89faf1a15d4","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"^0.4.2","bun-types":"^1.3.5","typescript":"^5.9.3","@types/node":"^25.0.3","@types/react":"^19.2.7","@opentui/core":"^0.1.61","@opentui/react":"0.1.62"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.11_1766681182347_0.34323169958477595","host":"s3://npm-registry-packages-npm-production"}},"1.3.12":{"name":"ghostty-opentui","version":"1.3.12","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.12","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"b3bb9a5ec93b62970b1dd274a35587ad023d690d","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.12.tgz","fileCount":30,"integrity":"sha512-ei++1SUPuIlr50OTWirBQCoO12DkjR8Ao4XdIZ2wNA1DuDTkZ+jA0BQygvpRhmW/zb46cHC49UHX2BdAQMB8dg==","signatures":[{"sig":"MEUCIESH1e/RYauQ8J7+d+jkXDnf8Zcp8Gfhq56ItWplG2+nAiEAiYLV3A5+0mX5SoZsKvbu1Zl8So6vmEAqLpwDXuUd6bs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5204532},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"e36a68849f8fea976a3e127f797cd5045b4887bd","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.12.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.7","bun-types":"^1.3.5","typescript":"^5.9.3","@types/node":"^25.0.6","@types/react":"^19.2.8","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.12_1768391045025_0.7922775396688195","host":"s3://npm-registry-packages-npm-production"}},"1.3.13":{"name":"ghostty-opentui","version":"1.3.13","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.3.13","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"f0ca434bd2e5a2f065a3b67ab62620b9c373f2fb","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.3.13.tgz","fileCount":30,"integrity":"sha512-4ct/FNfpiL+1wges5+NqN97I3ndvhxokAU7UtPXyTmNKHrDG43gnNkUBTxiiW11qAmz2XLYF+51YjXuecZ552Q==","signatures":[{"sig":"MEQCIBpC5u+I9zQkKFcpKOanI+LUX2/CD50SWTTTuYYK3MP2AiA+ywwcC3Hw3FjhWTQQbrcTtVnSOIR0vPKizY4apsK0+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5213978},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"280ea6c48a64dbc7bfd5234caa41bc26cae0cd95","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.13.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.7","bun-types":"^1.3.5","typescript":"^5.9.3","@types/node":"^25.0.6","@types/react":"^19.2.8","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.3.13_1770387487731_0.7758197499457358","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"ghostty-opentui","version":"1.4.0","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.0","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"41640052d7e70b914362ae9aca2560f19d5782bc","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.0.tgz","fileCount":36,"integrity":"sha512-eswNBh8owlUIfJcTSHQPm7AOJUdzMUVi3UyVrFeMo94mKbHaHjwEPDJ4Mn404B6OCaep5LZ2wWlEXo8x+/Zu4w==","signatures":[{"sig":"MEUCIQCbwRSAkufPzB0H20TItwo+xzTFFMZNF6kUmMjas5A+oAIgIiUTcXCJauqdJmzYwmL3Av+H03jIOwj33ggRoj/ujHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7729894},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"714f24d648bec5320fabe808c5964de3ae86f3b6","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.13.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.0_1771421486357_0.3558456356715265","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"ghostty-opentui","version":"1.4.1","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.1","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"8f375a4ef8507587186bba2a5b22f38a5f1e1c1d","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.1.tgz","fileCount":36,"integrity":"sha512-7w79EetZ1Ma+jpi6QbyiUQspUkQNmN9bUdBcq9922GerdTXU+b4JKTMaK62r24L3HI2DPU9guT06EvOuSIDZjQ==","signatures":[{"sig":"MEUCIQCspNyCw3k1WLvGjQxsT/w+zPg/ErUYs+KzFx6poWHkDgIgDngSDNWc5yFVA8toMnv1k2Te1dJk8t4Xi2JlnRYz7gc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7732932},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"7134814f687b25d7ce6607a8cf09549bc2a722ca","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.13.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.1_1771596421318_0.15972199491330263","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"ghostty-opentui","version":"1.4.2","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.2","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"b251498961c8cd575fc2fc46b5af38b577c610dc","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.2.tgz","fileCount":36,"integrity":"sha512-jZlZV+mUPNXFMP/Yum4Yab4w0LIaHVK61ax2TiZFKD5kkK/BMsez9zSZ/Y53bpk3eq96pScaFBFnFwaLoXgdPw==","signatures":[{"sig":"MEQCICWZOHnboOL5BxoGRN3I8WqGQRYoYmLXkH2luTIHc8n1AiB5xp/T3P0o8cXIWAVPGxE/EzzROGSOWXe/bnAxPMG8cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7733726},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"5448aa1acdb28c0d6295ec5422141c2d575d0b6d","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.13.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.2_1771603255696_0.668153337294277","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"ghostty-opentui","version":"1.4.3","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.3","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"8a9255ec1ad9a8e624295b788876840f07853478","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.3.tgz","fileCount":37,"integrity":"sha512-8UE8oJkmeXjaq0FP+2PLhepW/t0xcnhUveGdjJs5e8VDJhVBRjoDqHEgXHmb2mC24LiaX7M+xVkuX7U/lEMwJw==","signatures":[{"sig":"MEUCIQCIQebtwEwKql30ZKW5D5osoZXg7KnaEXiGfG9+7cXcLQIgPZW6sM1Lg0OuuAxusH6MaN24PcrCirRwiOnTuLNyB9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8392101},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"3398d265f99d0e02090ef184b0671139379172b8","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.13.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.3_1771611524314_0.23112978744357582","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"ghostty-opentui","version":"1.4.4","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.4","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"27cf23c5c8df10e5af736c57ed2c0bc83a5c2e1e","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.4.tgz","fileCount":38,"integrity":"sha512-V6ti7WQCmaaG10VxWN0B1cwCDvfh1m1Yda5SoFtgg2Bh6zDkjXExky6jWogRYsI6g2QBDAYvzBk7giOgfhwXVQ==","signatures":[{"sig":"MEQCICSzCKLek7J1TWiokfVdT0sHIX6qIAtt147tWPDJsfeyAiBnQ1llPeoVHSukhGf6WzoAHGc7FbBxSYmyZ2yeHe40jA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10905488},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"cdfd1b419317a5e40c0037ff778846275f5d4e40","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.13.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.4_1771880139080_0.35681799178255336","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"ghostty-opentui","version":"1.4.5","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.5","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"2946eabc3af61dd6b4bee7abac724682a9f4c388","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.5.tgz","fileCount":38,"integrity":"sha512-WvASmvdY7fpgYLwXAV3cmv4VEMyAtF8EQ9kprzQlCiF354+b0TeOc5IGvewfhTaL+p8Ez9knnKK+cYS86Tq1ZQ==","signatures":[{"sig":"MEYCIQDClIHHkV0kNWvrblYs3zie0VR5R74gcGZgX19E1NShaAIhAPjL1Zquz7XlS9Ywi05I5P1rkspnjY4d3+9GUg6T7iyo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10905527},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"c75f0d57344425ba7b48faf2ad0bf46004ca15ff","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.13.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.5_1771886085977_0.4472774040460523","host":"s3://npm-registry-packages-npm-production"}},"1.4.6":{"name":"ghostty-opentui","version":"1.4.6","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.6","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"51dc4bb3931c40cea68f154fc7ca94882878b8d5","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.6.tgz","fileCount":38,"integrity":"sha512-qNxhhqIaX9Agh9nVRIiAYyEDIElEIV77wu4dzBM/dd5bdAsUQrzc555t9KCbkP3KhIH9hndj9d/919i+Cfo+fA==","signatures":[{"sig":"MEYCIQDG9xKKbd4yW2qxTdEgE44OZTpAlXWQ71nA1Hpj++TxVAIhAPv1PIgv8XwAXTmFEm3i9nVwHeKUBJ+gbhjXY1nlN5+J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10911314},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"750870e7e5f78cbe0f3725952d811664949b8f86","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.9.0","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.14.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.6_1772814322973_0.42568523458557284","host":"s3://npm-registry-packages-npm-production"}},"1.4.7":{"name":"ghostty-opentui","version":"1.4.7","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.7","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"2b8f4901f6da5804cc93a0c9cdbcc74723f580ff","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.7.tgz","fileCount":38,"integrity":"sha512-nn77E7UtJJ4lCnSjiZUKsAp4z0VKH/rTwiqFgfim0L3teepzfQIxTwqFzTf7bui86B2RIv5WUOw36QRyHQESQQ==","signatures":[{"sig":"MEYCIQDaalZ+3Yr6zUyQoRYUzzNub++uToua93t2LnUv6EkeNwIhAIK6E3I4VHvnWmhya/i9Szr5xTWkG+Bnu0kqqTh4CZCn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10913424},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"fe81d0173fe9eef6afaa99a0c881462071ccab09","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"xmorse","email":"beats.by.morse@gmail.com"},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.9.0","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.14.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"^0.1.72","@opentui/react":"0.1.72"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.7_1772896905776_0.7060183903731416","host":"s3://npm-registry-packages-npm-production"}},"1.4.9":{"name":"ghostty-opentui","version":"1.4.9","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.9","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"1d799f2525c5d6e6cc3f6a93baa0e5564aff7760","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.9.tgz","fileCount":38,"integrity":"sha512-AzCOjb/C9dWyQiq8oWOJkmuYvYegZhWYbKxAFiynH1kPi+yb/yBTlbU0sBiBgzPh33gSpWm1iTyn7wlKCxOdAQ==","signatures":[{"sig":"MEUCIQCXNyO3QjaJxyJDLu8y1BYVhkVx8va9i/okzIdskJR6pQIgRK5VdkoVsHszrrJgNadbXd8GeNHDqXJpXopfwgBbVU8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ghostty-opentui@1.4.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10930215},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"1998578c0307ec68cedaceba2edc8bcc7abcaae3","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3115a449-58c2-43e2-9588-44e05e1335be"}},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.9.0","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.14.0","dependencies":{"strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"0.1.88","@opentui/react":"0.1.88"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.9_1774515788200_0.14966752955841667","host":"s3://npm-registry-packages-npm-production"}},"1.4.10":{"name":"ghostty-opentui","version":"1.4.10","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.10","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"f87982f4ff18c4a378974b022b6662cbc71b3d0e","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.10.tgz","fileCount":39,"integrity":"sha512-D/UXDTWpJpDgSefMD9eTbhGnZ4uSTKel7IqunLz42HsiR9Xn4iTQykEXZI34cIOUaHTmPQJ7CeUPdpXQ7VLg8w==","signatures":[{"sig":"MEUCIQCwhGAOf8cTnCvInRvx45kyLN+m0rex2Z8e3raSx47iCQIgdyMPU54JbDKv/9w5SYNNcC2Ww7cxVLmXYqM7IM20mGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ghostty-opentui@1.4.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10933830},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"4d5ba052d3cf4a6d62047cfb6e14f7ddad9611f4","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3115a449-58c2-43e2-9588-44e05e1335be"}},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.9.0","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.14.0","dependencies":{"wcwidth":"^1.0.1","strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"0.1.88","@opentui/react":"0.1.88"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.10_1774530255759_0.1274106303177669","host":"s3://npm-registry-packages-npm-production"}},"1.4.11":{"name":"ghostty-opentui","version":"1.4.11","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.11","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"d5e2df8b03a802681631e4864ed391f2edca6c9b","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.11.tgz","fileCount":39,"integrity":"sha512-0REzDCaOaBQkRzSKHU6cVswBMXVJ5dEd5vLWrkUozIbhwpm5v/mVzVOVVKmzFWMm4R9y/dmsyTsvYiWs1Lu+AA==","signatures":[{"sig":"MEUCIEqyTpegqJOYUw142gooZWgzcN4VGf79KRCEsK6G5OiSAiEA+DXmHhWeBPjaxvle9tGNo+7pA5H9WBdb+iDLAloi+iQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ghostty-opentui@1.4.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10936874},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"9d0080dd4007c206bd901688d8e3a45940e6ec7d","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3115a449-58c2-43e2-9588-44e05e1335be"}},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.11.0","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.14.1","dependencies":{"wcwidth":"^1.0.1","strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"0.1.88","@opentui/react":"0.1.88"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.11_1777132782570_0.04702701154338618","host":"s3://npm-registry-packages-npm-production"}},"1.4.12":{"name":"ghostty-opentui","version":"1.4.12","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","_id":"ghostty-opentui@1.4.12","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"homepage":"https://github.com/remorses/ghostty-opentui#readme","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"dist":{"shasum":"9be27cdd739c77e99acde249c4a5971ee6db0204","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.4.12.tgz","fileCount":39,"integrity":"sha512-IO2dCgoYoSJbDDy0ISEP1iKBi2vYrWDvaU69Tow4TK5Fezf+VNlqXlpjt0mtOJUKOESqR2UDFT541getrLKr3Q==","signatures":[{"sig":"MEUCIFODVW/CrV5N4VrrGxtspfs3yUjyjrY8OzqX5CfvUeHfAiEA9KJFqDjcSxBYaN6HNwNwbkKgjeOh+2Gn8N9kVadT5oQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ghostty-opentui@1.4.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10937288},"type":"module","exports":{".":{"bun":"./src/ffi.ts","types":"./dist/ffi.d.ts","default":"./dist/ffi.js","require":"./dist/ffi.js"},"./image":{"bun":"./src/image.ts","types":"./dist/image.d.ts","default":"./dist/image.js","require":"./dist/image.js"},"./opentui":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"},"./terminal-buffer":{"bun":"./src/terminal-buffer.ts","types":"./dist/terminal-buffer.d.ts","default":"./dist/terminal-buffer.js","require":"./dist/terminal-buffer.js"}},"gitHead":"9980b739b7de428301815f96193f52845021f255","scripts":{"dev":"bun --watch run tui/example.tsx","test":"bun test","bench":"vitest bench --run","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Push to main and let CI handle it.' && exit 1)"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3115a449-58c2-43e2-9588-44e05e1335be"}},"repository":{"url":"git+https://github.com/remorses/ghostty-opentui.git","type":"git"},"_npmVersion":"11.11.0","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","directories":{},"_nodeVersion":"24.14.1","dependencies":{"wcwidth":"^1.0.1","strip-ansi":"^7.1.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.3","vitest":"^4.0.16","bun-pty":"0.4.8","bun-types":"^1.3.9","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@opentui/core":"0.1.88","@opentui/react":"0.1.88"},"peerDependencies":{"@opentui/core":"*"},"optionalDependencies":{"@takumi-rs/core":"^0.65.0","@takumi-rs/helpers":"^0.65.0"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ghostty-opentui_1.4.12_1777566052752_0.7533678326665287","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"ghostty-opentui","version":"1.5.0","type":"module","description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","scripts":{"dev":"bun --watch run tui/example.tsx","build":"tsc && cp src/native-lib.cjs src/native-lib.d.cts dist/","build:zig":"zig build","prepublishOnly":"[ -n \"$CI\" ] || (echo 'Error: Do not publish locally. Bump the version and let CI publish it.' && exit 1)","test":"bun test","bench":"vitest bench --run"},"exports":{".":{"types":"./dist/ffi.d.ts","bun":"./src/ffi.ts","require":"./dist/ffi.js","default":"./dist/ffi.js"},"./terminal-buffer":{"types":"./dist/terminal-buffer.d.ts","bun":"./src/terminal-buffer.ts","require":"./dist/terminal-buffer.js","default":"./dist/terminal-buffer.js"},"./opentui":{"types":"./dist/terminal-buffer.d.ts","bun":"./src/terminal-buffer.ts","require":"./dist/terminal-buffer.js","default":"./dist/terminal-buffer.js"},"./image":{"types":"./dist/image.d.ts","bun":"./src/image.ts","require":"./dist/image.js","default":"./dist/image.js"}},"keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"author":{"name":"remorses"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/remorses/ghostty-opentui.git"},"peerDependencies":{"@opentui/core":"*"},"peerDependenciesMeta":{"@opentui/core":{"optional":true}},"devDependencies":{"@opentui/core":"0.1.88","@opentui/react":"0.1.88","@types/node":"^25.2.3","@types/react":"^19.2.14","bun-pty":"0.4.8","bun-types":"^1.3.9","react":"^19.2.3","typescript":"^5.9.3","vitest":"^4.0.16"},"dependencies":{"@resvg/resvg-wasm":"^2.6.2","strip-ansi":"^7.1.2","wcwidth":"^1.0.1"},"gitHead":"352e83ea02625236bdb690ac1320a08c0e613e7e","_id":"ghostty-opentui@1.5.0","bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"homepage":"https://github.com/remorses/ghostty-opentui#readme","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-1Kux7BjVtCevjz6Y/tsNPahXmEzJwAc3MqbmsX8chO6CybDG8YOna3gVbQuOgBRte4/CxOtGYJ9rgAKpqGKFPA==","shasum":"0931c1b32e8745d45ba1f5295e443d45b9bdfc5a","tarball":"https://registry.npmjs.org/ghostty-opentui/-/ghostty-opentui-1.5.0.tgz","fileCount":42,"unpackedSize":28236944,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ghostty-opentui@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAkeB0zqG3E9XN7LJ3QtlMhul14xn7WGfdaD6ytue2g8AiBWhRVMjJoaU2GlgkO9afRsHJlgg1BpkKEFewH6HfnoYg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3115a449-58c2-43e2-9588-44e05e1335be"}},"directories":{},"maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ghostty-opentui_1.5.0_1778660118904_0.5427731040721886"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-02T10:11:04.125Z","modified":"2026-05-13T08:15:19.783Z","1.3.0":"2025-12-02T10:11:04.467Z","1.3.1":"2025-12-02T12:49:06.529Z","1.3.2":"2025-12-04T13:10:58.902Z","1.3.3":"2025-12-04T13:22:18.971Z","1.3.4":"2025-12-05T16:36:11.924Z","1.3.5":"2025-12-05T16:51:41.635Z","1.3.6":"2025-12-05T17:22:16.309Z","1.3.7":"2025-12-12T17:09:45.607Z","1.3.8":"2025-12-22T09:06:48.806Z","1.3.9":"2025-12-22T19:25:10.150Z","1.3.10":"2025-12-22T19:45:14.043Z","1.3.11":"2025-12-25T16:46:22.619Z","1.3.12":"2026-01-14T11:44:05.279Z","1.3.13":"2026-02-06T14:18:08.009Z","1.4.0":"2026-02-18T13:31:26.745Z","1.4.1":"2026-02-20T14:07:01.590Z","1.4.2":"2026-02-20T16:00:56.087Z","1.4.3":"2026-02-20T18:18:44.580Z","1.4.4":"2026-02-23T20:55:39.481Z","1.4.5":"2026-02-23T22:34:46.484Z","1.4.6":"2026-03-06T16:25:23.287Z","1.4.7":"2026-03-07T15:21:46.118Z","1.4.9":"2026-03-26T09:03:08.597Z","1.4.10":"2026-03-26T13:04:16.125Z","1.4.11":"2026-04-25T15:59:42.890Z","1.4.12":"2026-04-30T16:20:53.015Z","1.5.0":"2026-05-13T08:15:19.518Z"},"bugs":{"url":"https://github.com/remorses/ghostty-opentui/issues"},"author":{"name":"remorses"},"license":"MIT","homepage":"https://github.com/remorses/ghostty-opentui#readme","keywords":["terminal","pty","vt100","ansi","ghostty","opentui","napi"],"repository":{"type":"git","url":"git+https://github.com/remorses/ghostty-opentui.git"},"description":"Fast ANSI/VT terminal parser powered by Ghostty's Zig terminal emulation library","maintainers":[{"name":"xmorse","email":"beats.by.morse@gmail.com"}],"readme":"# ghostty-opentui\n\nFast ANSI/VT terminal parser powered by [Ghostty's](https://github.com/ghostty-org/ghostty) Zig terminal emulation library. Converts raw PTY logs to JSON, strips ANSI for plain text, or renders them in a TUI viewer.\n\n## Features\n\n- **Fast** - Written in Zig, processes terminal escape sequences at native speed\n- **Full VT emulation** - ANSI colors (16/256/RGB), styles, cursor movements, scrolling\n- **TUI Viewer** - Interactive terminal viewer built with [opentui](https://github.com/sst/opentui)\n- **JSON output** - Compact format with merged spans for rendering\n- **Plain text output** - Strip ANSI codes for LLM/text processing\n- **Screenshot rendering** - Export terminal output to SVG or PNG images via [resvg-wasm](https://github.com/thx/resvg-js)\n- **N-API** - Native Node.js addon using [napigen](https://github.com/cztomsik/napigen) for seamless integration\n\n## Installation\n\n```bash\nbun add ghostty-opentui\n```\n\nFor TUI rendering, you'll also need:\n```bash\nbun add @opentui/core @opentui/react  # For React\n# or\nbun add @opentui/core @opentui/solid  # For Solid.js\n```\n\n## Usage\n\n### Basic FFI Usage\n\n```typescript\nimport { ptyToJson, ptyToText, type TerminalData } from \"ghostty-opentui\"\n\n// Parse ANSI string or buffer to JSON with styling info\nconst data: TerminalData = ptyToJson(\"\\x1b[32mHello\\x1b[0m World\", {\n  cols: 120,\n  rows: 40,\n})\n\nconsole.log(data.lines) // Array of lines with styled spans\nconsole.log(data.cursor) // [col, row] cursor position\n```\n\n### Strip ANSI for Plain Text\n\nUse `ptyToText` to strip all ANSI escape codes and get plain text output. This is useful for sending terminal output to LLMs or other text processors that don't handle ANSI codes.\n\n```typescript\nimport { ptyToText } from \"ghostty-opentui\"\n\n// Strip ANSI codes - returns plain text\nconst plain = ptyToText(\"\\x1b[31mError:\\x1b[0m Something went wrong\")\n// Returns: \"Error: Something went wrong\"\n\n// Works with complex escape sequences too\nconst complex = ptyToText(\"\\x1b[1;38;2;255;100;50mBold RGB\\x1b[0m text\")\n// Returns: \"Bold RGB text\"\n\n// Optional cols for line wrapping (default: 500)\nconst text = ptyToText(ansiBuffer, { cols: 120 })\n```\n\n**Why use `ptyToText` instead of regex?**\n\nUnlike simple regex-based ANSI strippers, `ptyToText` uses a full terminal emulator to process escape sequences. This correctly handles:\n\n- Cursor movements and positioning\n- Line wrapping at terminal width\n- Scrolling regions\n- All SGR (Select Graphic Rendition) sequences\n- OSC (Operating System Command) sequences\n\n### With OpenTUI React\n\n```tsx\nimport { createCliRenderer } from \"@opentui/core\"\nimport { createRoot, useKeyboard, extend } from \"@opentui/react\"\nimport { GhosttyTerminalRenderable } from \"ghostty-opentui/terminal-buffer\"\n\n// Register the ghostty-terminal component\nextend({ \"ghostty-terminal\": GhosttyTerminalRenderable })\n\nconst ANSI = `\\x1b[1;32muser@host\\x1b[0m:\\x1b[1;34m~/app\\x1b[0m$ ls\n\\x1b[1;34msrc\\x1b[0m  package.json  \\x1b[1;32mbuild.sh\\x1b[0m\n\\x1b[31mRed\\x1b[0m \\x1b[32mGreen\\x1b[0m \\x1b[33mYellow\\x1b[0m \\x1b[34mBlue\\x1b[0m\n`\n\nfunction App() {\n  useKeyboard((key) => {\n    if (key.name === \"q\") process.exit(0)\n  })\n\n  return (\n    <scrollbox focused style={{ flexGrow: 1 }}>\n      <ghostty-terminal ansi={ANSI} cols={80} rows={24} />\n    </scrollbox>\n  )\n}\n\nconst renderer = await createCliRenderer({ exitOnCtrlC: true })\ncreateRoot(renderer).render(<App />)\n```\n\n### With OpenTUI Solid.js\n\n```tsx\nimport { createCliRenderer } from \"@opentui/core\"\nimport { createRoot, useKeyboard, extend } from \"@opentui/solid\"\nimport { GhosttyTerminalRenderable } from \"ghostty-opentui/terminal-buffer\"\n\n// Register the ghostty-terminal component\nextend({ \"ghostty-terminal\": GhosttyTerminalRenderable })\n\nconst ANSI = `\\x1b[1;32muser@host\\x1b[0m:\\x1b[1;34m~/app\\x1b[0m$ ls\n\\x1b[1;34msrc\\x1b[0m  package.json  \\x1b[1;32mbuild.sh\\x1b[0m\n\\x1b[31mRed\\x1b[0m \\x1b[32mGreen\\x1b[0m \\x1b[33mYellow\\x1b[0m \\x1b[34mBlue\\x1b[0m\n`\n\nfunction App() {\n  useKeyboard((key) => {\n    if (key.name === \"q\") process.exit(0)\n  })\n\n  return (\n    <scrollbox focused style={{ \"flex-grow\": 1 }}>\n      <ghostty-terminal ansi={ANSI} cols={80} rows={24} />\n    </scrollbox>\n  )\n}\n\nconst renderer = await createCliRenderer({ exitOnCtrlC: true })\ncreateRoot(renderer).render(<App />)\n```\n\n### Ghostty Terminal Component\n\nThe `<ghostty-terminal>` component accepts raw ANSI input and renders it with full styling support. \n\n**Important**: You must call `extend()` to register the component before using it in JSX:\n\n```tsx\nimport { extend } from \"@opentui/react\" // or \"@opentui/solid\"\nimport { GhosttyTerminalRenderable } from \"ghostty-opentui/terminal-buffer\"\n\n// Register the component\nextend({ \"ghostty-terminal\": GhosttyTerminalRenderable })\n\n// Now you can use it with raw ANSI input\n<ghostty-terminal ansi={ansiString} cols={80} rows={24} />\n\n// cols and rows are optional (defaults: cols=120, rows=40)\n<ghostty-terminal ansi={ansiString} />\n```\n\n#### Scrolling to Specific Lines\n\nYou can scroll to a specific line number in the ANSI output using refs:\n\n```tsx\nimport { useRef } from \"react\"\nimport type { ScrollBoxRenderable } from \"@opentui/core\"\nimport type { GhosttyTerminalRenderable } from \"ghostty-opentui/terminal-buffer\"\n\nfunction App() {\n  const scrollBoxRef = useRef<ScrollBoxRenderable>(null)\n  const terminalRef = useRef<GhosttyTerminalRenderable>(null)\n\n  const scrollToLine = (lineNumber: number) => {\n    if (scrollBoxRef.current && terminalRef.current) {\n      const scrollPos = terminalRef.current.getScrollPositionForLine(lineNumber)\n      scrollBoxRef.current.scrollTo(scrollPos)\n    }\n  }\n\n  return (\n    <scrollbox ref={scrollBoxRef}>\n      <ghostty-terminal ref={terminalRef} ansi={ansiString} />\n    </scrollbox>\n  )\n}\n```\n\nThe `getScrollPositionForLine(lineNumber)` method:\n- Takes a 0-based line number from the ANSI output\n- Returns the actual scrollTop position accounting for text wrapping and layout\n- Clamps out-of-bounds values automatically\n\n#### Limiting Output for Performance\n\nFor large log files, use the `limit` parameter to only render the first N lines. **Limiting happens at the Zig level** before JSON serialization, making it extremely efficient:\n\n```tsx\n// Only render first 100 lines of a huge log file\n<ghostty-terminal \n  ansi={hugeLogFile} \n  cols={120} \n  rows={10}\n  limit={100}  // Limits at Zig level (before JSON parsing!)\n/>\n\n// Quick preview: just show first 10 lines\n<ghostty-terminal \n  ansi={longOutput} \n  limit={10}\n/>\n```\n\nBenefits of using `limit`:\n- **Maximum performance** - Limits at native Zig level before JSON serialization\n- **Lower memory** - Doesn't process or allocate memory for skipped lines\n- **Instant preview** - Show first N lines of massive logs without waiting\n\n#### Text Highlighting\n\nYou can highlight specific regions of text with custom background colors. This is useful for search results, error highlighting, or drawing attention to specific lines.\n\n```tsx\nimport { GhosttyTerminalRenderable, type HighlightRegion } from \"ghostty-opentui/terminal-buffer\"\n\nconst highlights: HighlightRegion[] = [\n  { line: 0, start: 0, end: 5, backgroundColor: \"#ffff00\" },           // Yellow highlight\n  { line: 2, start: 10, end: 20, backgroundColor: \"#ff0000\" },         // Red highlight\n  { line: 5, start: 0, end: 8, backgroundColor: \"#00ff00\", replaceWithX: true }, // Mask with 'x'\n]\n\n<ghostty-terminal \n  ansi={ansiString} \n  cols={80} \n  rows={24}\n  highlights={highlights}\n/>\n```\n\n**HighlightRegion properties:**\n- `line` - Line number (0-based)\n- `start` - Start column (0-based, inclusive)  \n- `end` - End column (0-based, exclusive)\n- `backgroundColor` - Hex color string like `\"#ff0000\"`\n- `replaceWithX` - Optional. If `true`, replaces highlighted text with 'x' characters (useful for testing/masking)\n\n**How highlighting works:**\n\nHighlights are applied during the ANSI-to-StyledText conversion. When you set/update highlights on a `GhosttyTerminalRenderable`, the component re-processes the entire ANSI content to apply the new highlights. This approach:\n\n- Preserves all original text styling (colors, bold, etc.) while adding the highlight background\n- Handles highlights that span multiple styled spans correctly\n- Works efficiently for most use cases\n\nFor very large files with frequently changing highlights, consider using `limit` to reduce the rendered content.\n\n**Programmatic usage without the component:**\n\n```typescript\nimport { ptyToJson } from \"ghostty-opentui\"\nimport { terminalDataToStyledText, type HighlightRegion } from \"ghostty-opentui/terminal-buffer\"\n\nconst data = ptyToJson(ansiString, { cols: 80, rows: 24 })\nconst highlights: HighlightRegion[] = [\n  { line: 0, start: 0, end: 5, backgroundColor: \"#ff0000\" }\n]\nconst styledText = terminalDataToStyledText(data, highlights)\n// styledText.chunks contains TextChunk[] with highlights applied\n```\n\n### Screenshot / Image Rendering\n\nRender terminal output to SVG or PNG images using [resvg-wasm](https://github.com/thx/resvg-js). Uses bundled JetBrains Mono Nerd font with fixed-width grid alignment and Noto fallback fonts for broader Unicode coverage.\n\n```typescript\nimport { ptyToJson } from \"ghostty-opentui\"\nimport { renderTerminalToImage, renderTerminalToSvg } from \"ghostty-opentui/image\"\n\nconst data = ptyToJson(\"\\x1b[32mHello\\x1b[0m World\", { cols: 80 })\nconst svg = renderTerminalToSvg(data)\nconst png = await renderTerminalToImage(data)\nawait Bun.write(\"screenshot.svg\", svg)\nawait Bun.write(\"screenshot.png\", png)\n```\n\nCustom theme and font size:\n\n```typescript\nconst image = await renderTerminalToImage(data, {\n  fontSize: 16,\n  lineHeight: 1.4,\n  paddingX: 32,\n  paddingY: 24,\n  theme: { background: \"#282c34\", text: \"#abb2bf\" },\n})\n```\n\nFor large outputs, paginate into multiple images:\n\n```typescript\nimport { renderTerminalToPaginatedImages } from \"ghostty-opentui/image\"\n\nconst result = await renderTerminalToPaginatedImages(data, {\n  maxLinesPerImage: 70,\n})\n// result.images   - Buffer[]\n// result.paths    - temp file paths\n// result.imageCount\n```\n\nRender an OpenTUI captured frame directly when the UI already exists as OpenTUI buffer data:\n\n```tsx\nimport { createTestRenderer } from \"@opentui/core/testing\"\nimport { createRoot } from \"@opentui/react\"\nimport { renderOpenTuiToSvg } from \"ghostty-opentui/image\"\n\nconst { renderer, renderOnce } = await createTestRenderer({ width: 80, height: 24 })\ncreateRoot(renderer).render(<App />)\nawait renderOnce()\n\nconst svg = renderOpenTuiToSvg({\n  cols: renderer.currentRenderBuffer.width,\n  rows: renderer.currentRenderBuffer.height,\n  cursor: [0, 0],\n  lines: renderer.currentRenderBuffer.getSpanLines(),\n})\n```\n\nThis path skips ANSI parsing and Ghostty entirely. It is for exporting OpenTUI apps that already rendered into `CapturedFrame`-style spans.\n\n#### Image rendering notes\n\nThe SVG output is deterministic and easy to inspect. PNG output uses the same SVG frame and loads bundled fonts into resvg-wasm, so screenshots do not depend on system fonts.\n\nBundled font fallback order:\n\n1. JetBrains Mono Nerd Font\n2. Symbols Nerd Font Mono\n3. Noto Sans\n4. Noto Sans Symbols\n5. Noto Sans Symbols 2\n6. Noto Sans CJK SC\n\nAdd more fallback fonts at runtime with `GHOSTTY_OPENTUI_EXTRA_FONT_PATHS`. Use the platform path delimiter, `:` on macOS/Linux and `;` on Windows.\n\nEmoji color fonts are not bundled because the current `@resvg/resvg-wasm` release does not render Noto emoji color fonts correctly.\n\n### API\n\n#### Main Export\n\n```typescript\nimport { ptyToJson, ptyToText, type TerminalData } from \"ghostty-opentui\"\n\n// Parse ANSI data to JSON with full styling info\nconst data = ptyToJson(input, options)\n\n// Strip ANSI codes and return plain text (for LLMs, logging, etc.)\nconst plainText = ptyToText(input, options)\n```\n\n#### Ghostty Terminal Component\n\n```typescript\nimport { GhosttyTerminalRenderable } from \"ghostty-opentui/terminal-buffer\"\nimport { extend } from \"@opentui/react\" // or \"@opentui/solid\"\n\n// Register component\nextend({ \"ghostty-terminal\": GhosttyTerminalRenderable })\n\n// Use in JSX (component calls ptyToJson internally)\n<ghostty-terminal ansi={ansiString} cols={80} rows={24} />\n```\n\n### TypeScript Types\n\n```typescript\nimport type { \n  TerminalData, \n  TerminalLine, \n  TerminalSpan, \n  PtyToJsonOptions,\n  PtyToTextOptions\n} from \"ghostty-opentui\"\n\nimport type { \n  GhosttyTerminalRenderable,\n  GhosttyTerminalOptions,\n  HighlightRegion\n} from \"ghostty-opentui/terminal-buffer\"\n\ninterface TerminalData {\n  cols: number\n  rows: number\n  cursor: [number, number]\n  offset: number\n  totalLines: number\n  lines: TerminalLine[]\n}\n\ninterface TerminalSpan {\n  text: string\n  fg: string | null   // hex color e.g. \"#ff5555\"\n  bg: string | null\n  flags: number       // StyleFlags bitmask\n  width: number\n}\n\ninterface PtyToTextOptions {\n  cols?: number               // Terminal width for wrapping (default: 500)\n  rows?: number               // Terminal height (default: 256)\n}\n\ninterface GhosttyTerminalOptions {\n  ansi: string | Buffer       // Raw ANSI input\n  cols?: number               // Terminal width (default: 120)\n  rows?: number               // Terminal height (default: 40)\n  limit?: number              // Max lines to render (from start)\n  highlights?: HighlightRegion[]  // Regions to highlight\n}\n\ninterface HighlightRegion {\n  line: number           // Line number (0-based)\n  start: number          // Start column (0-based, inclusive)\n  end: number            // End column (0-based, exclusive)\n  backgroundColor: string // Hex color like \"#ff0000\"\n  replaceWithX?: boolean // Replace text with 'x' (for testing)\n}\n\n// StyleFlags: bold=1, italic=2, underline=4, strikethrough=8, inverse=16, faint=32\n```\n\n#### Image Export\n\n```typescript\nimport type {\n  RenderImageOptions,\n  RenderPaginatedOptions,\n  PaginatedRenderResult,\n  ImageTheme,\n} from \"ghostty-opentui/image\"\n\nimport {\n  renderTerminalToImage,           // single image\n  renderTerminalToPaginatedImages, // split large output\n  renderTerminalToSvg,             // deterministic SVG string\n} from \"ghostty-opentui/image\"\n```\n\n## Quick Start (Development)\n\n```bash\n# Setup (installs Zig 0.15.2, clones Ghostty, builds)\n./setup.sh\n\n# Run TUI viewer with sample\nbun run dev\n\n# Or convert a file to JSON\n./zig-out/bin/pty-to-json session.log > output.json\n```\n\n## TUI Viewer\n\n```bash\nbun run dev                      # sample ANSI demo\nbun run dev testdata/session.log # view a file\n```\n\nControls: `up/down` scroll, `Page Up/Down` page, `Home/End` jump, `q/Esc` quit\n\n```\n+-----------------------------------------+\n| rootOptions (outer container)            |\n|  +-----------------------------------+ ^ |\n|  | viewport (visible area)           | X | <- scrollbar\n|  |  +-----------------------------+  | X |\n|  |  | content (padded)            |  | X |\n|  |  |  +---------------------+    |  | v |\n|  |  |  | terminal lines      |    |  |   |\n|  |  |  +---------------------+    |  |   |\n|  |  +-----------------------------+  |   |\n|  +-----------------------------------+   |\n|  +-----------------------------------+   |\n|  | 120x40 | Cursor | Lines           |   | <- info bar\n|  +-----------------------------------+   |\n+-----------------------------------------+\n```\n\n## How It Works\n\n```\n+----------------+     +----------------+     +----------------+\n|  Raw PTY       | --> |  Zig VT        | --> |  JSON/TUI      |\n|  (ANSI bytes)  |     |  Emulator      |     |  Output        |\n+----------------+     +----------------+     +----------------+\n```\n\n1. **Input** - Raw PTY bytes with ANSI escape sequences\n2. **Zig Processing** - Ghostty's VT parser emulates a full terminal\n3. **Output** - JSON with styled spans, or rendered in TUI\n\nThe Zig library is exposed via N-API for Node.js/Bun:\n\n```typescript\nimport { ptyToJson } from \"ghostty-opentui\"\n\nconst data = ptyToJson(ansiBuffer, { cols: 120, rows: 40 })\n// Returns: { cols, rows, cursor, lines: [{ spans: [...] }] }\n```\n\n## JSON Format\n\n```json\n{\n  \"cols\": 120,\n  \"rows\": 40,\n  \"cursor\": [0, 5],\n  \"totalLines\": 42,\n  \"lines\": [\n    [[\"Hello \", \"#5555ff\", null, 1, 6], [\"World\", \"#55ff55\", null, 0, 5]]\n  ]\n}\n```\n\nEach span: `[text, fg, bg, flags, width]`\n\nFlags: `bold=1, italic=2, underline=4, strikethrough=8, inverse=16, faint=32`\n\n## Platform Support\n\n| Platform | Status |\n|----------|--------|\n| Linux x64 | Full support |\n| Linux ARM64 | Full support |\n| macOS ARM64 (Apple Silicon) | Full support |\n| macOS x64 (Intel) | Full support |\n| Windows | Fallback mode (plain text only) |\n\n### Windows Fallback\n\nWindows cannot use the native Zig library due to a **Zig build system bug** with path handling when compiling Ghostty. Instead, Windows uses a fallback that:\n\n- Strips ANSI escape codes using `strip-ansi`\n- Returns plain text without colors or styles\n- Supports all the same API (cols, rows, limit, offset)\n\nThis means Windows users get functional output, just without syntax highlighting. For full color support on Windows, use **WSL** (Windows Subsystem for Linux).\n\n> **Note:** Persistent terminal mode (`persistent: true`) is not available on Windows. If you request persistent mode, the component silently falls back to stateless mode. Methods like `feed()`, `reset()`, `getCursor()`, and `getText()` will throw errors. Use `hasPersistentTerminalSupport()` to check availability at runtime.\n\n## Benchmarks\n\nPerformance measured on Apple Silicon (M-series). Run benchmarks with `bun run bench`.\n\n### ptyToJson - Terminal Parsing\n\n| Input Size | ops/s | Latency |\n|------------|------:|--------:|\n| small (12 chars) | 4,942 | 0.20ms |\n| medium (30 lines) | 1,299 | 0.77ms |\n| 1K lines | 34 | 29ms |\n| 5K lines | 5.5 | 182ms |\n| 10K lines | 1.8 | 547ms |\n| 20K lines | 0.5 | 1,808ms |\n\n### Early Exit with `limit` Parameter\n\nWhen `limit` is set, parsing stops early once enough lines are collected. This provides massive speedups for large inputs:\n\n| Input Size | No Limit | With limit=100 | Speedup |\n|------------|----------|----------------|--------:|\n| 10K lines | 557ms | 3.2ms | **174x** |\n| 20K lines | 1,869ms | 6.4ms | **292x** |\n\nThis works correctly even with complex terminal output (cursor movement, clear screen, etc.) because we check the actual terminal buffer state, not just input lines.\n\n### Persistent vs Stateless Mode\n\nFor streaming scenarios (feeding data in 100 chunks):\n\n| Mode | ops/s | Latency | Speedup |\n|------|------:|--------:|--------:|\n| Stateless (100 separate ptyToJson calls) | 5.8 | 171ms | 1x |\n| Persistent (100 feed() calls) | 34 | 30ms | **5.8x** |\n\nUse `persistent: true` for streaming/interactive terminals for significant performance gains.\n\n### Image Rendering (renderTerminalToImage)\n\nImage rendering builds an SVG terminal frame first, then rasterizes it to PNG with resvg-wasm. Bundled font buffers are cached after the first render.\n\n### Key Insights\n\n- **Use `limit` for large files** - 292x faster for 20K lines with `limit=100`\n- **Persistent mode is ~6x faster** for streaming use cases\n- **Linear scaling without limit** - 10K lines takes ~10x longer than 1K lines\n- **Image rendering scales with terminal size** - SVG generation is cheap; PNG rasterization scales with output dimensions\n\n## Requirements\n\n- **Zig 0.15.2** - Required by Ghostty\n- **Bun** - For TUI viewer and N-API\n- **Ghostty** - Cloned adjacent to this repo (setup.sh handles this)\n- **Linux or macOS** - Windows not supported (see above)\n\n## Development\n\n```bash\nzig build                        # debug build\nzig build -Doptimize=ReleaseFast # release build\nzig build test                   # run Zig tests\nbun test                         # run TUI tests\n```\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}