Skip to content
comparisons

Библиотека TUI, которая убивает Ink

Новая библиотека под названием OpenTUI позволяет разработчикам создавать терминальные приложения с помощью React, но с производительностью нативного кода. Вот почему ее ядро на базе Zig и интеграция с Bun FFI делают ее революционным решением для инструментов CLI.

Vera Cole
Hero image for: Библиотека TUI, которая убивает Ink

Кратко / Главное

Новая библиотека под названием OpenTUI позволяет разработчикам создавать терминальные приложения с помощью React, но с производительностью нативного кода. Вот почему ее ядро на базе Zig и интеграция с Bun FFI делают ее революционным решением для инструментов CLI.

Почему ваши терминальные приложения работают так медленно

Терминальные приложения часто страдают от заметной медлительности, что является распространенной проблемой, связанной с Ink, давним лидером в разработке TUI на основе React. Несмотря на широкое распространение, Ink имеет значительные архитектурные ограничения: жестко заданное ограничение в 30 FPS и объем памяти, превышающий 50 МБ даже для базовых приложений. Эти ограничения существенно препятствуют отзывчивой производительности.

Такие узкие места в производительности особенно критичны для современных инструментов CLI, особенно для потоковых приложений, таких как агенты кодирования на базе ИИ. Популярный агент кодирования с открытым исходным кодом от Anomaly, OpenCode, которым регулярно пользуются миллионы, является ярким примером этой проблемы. Эти агенты требуют плавных обновлений в реальном времени для обеспечения интуитивно понятного пользовательского опыта, что является требованием, которое ограничение в 30 FPS просто не может удовлетворить, делая все взаимодействие неотзывчивым.

Движимая потребностью в радикально улучшенном пользовательском интерфейсе для OpenCode, Anomaly стремилась преодолеть присущие Ink ограничения. Изначально они использовали Golang's Bubble Tea, но стремились к переписыванию на TypeScript, которое бы избегало Ink. Этот поиск привел их к спонсированию kmdrfx, который уже разрабатывал высокопроизводительную терминальную библиотеку на базе Zig. Это стратегическое партнерство привело к созданию OpenTUI, разработанной специально для обеспечения отзывчивости и эффективности, требуемых современными терминальными приложениями.

Триумвират производительности: Zig, Bun и FFI

Архитектура OpenTUI радикально переопределяет производительность пользовательского интерфейса терминала благодаря мощному гибридному подходу. В ее основе лежит ядро Zig, невероятно быстрый нативный компонент, который берет на себя всю тяжелую отрисовку и критически важное сравнение кадров. Это ядро использует выполнение нативного кода, гарантируя, что самые требовательные графические операции выполняются с беспрецедентной скоростью и эффективностью, что является резким контрастом с ограничениями, связанными с JavaScript, у предшественников.

Foreign Function Interface (FFI) Bun выступает в качестве решающего «волшебного клея» в этой системе. Он обеспечивает связь практически без накладных расходов, позволяя коду TypeScript напрямую взаимодействовать с нативным ядром Zig. Этот бесшовный мост устраняет типичные потери производительности, связанные с межъязыковым взаимодействием, раскрывая весь потенциал нативного движка рендеринга без ущерба для опыта разработчика.

Эта инновационная комбинация достигает того, чего не могут чистые JavaScript-решения, такие как Ink: время кадра менее миллисекунды. Перенося интенсивную рабочую нагрузку по рендерингу на скомпилированный, нативный язык и обеспечивая вызовы с ультранизкой задержкой через Bun FFI, OpenTUI обходит жестко заданные ограничения в 30 FPS и высокие объемы памяти, из-за которых старые инструменты TUI казались медленными. Разработчики теперь могут создавать высокодинамичные и отзывчивые терминальные приложения, даже отображая сложные визуальные эффекты, такие как графика Three.js.js, с производительностью, ранее невообразимой в экосистеме TypeScript.

Создавайте CLI, как вы создаете веб-сайты

Веб-разработчики найдут опыт разработки с OpenTUI удивительно знакомым. Он позволяет создавать терминальные пользовательские интерфейсы, используя такие парадигмы, как JSX, компоненты React и стандартные хуки управления состоянием, такие как `useState`. Создание проектов упрощено с помощью `bun create tui`, который направляет пользователей через выбор шаблона. Пользовательский реконсилер React от OpenTUI переводит JSX непосредственно в терминальные блоки и текст, полностью обходя HTML.

Макеты получают беспрецедентную гибкость благодаря Yoga, движку Flexbox, который привносит адаптивные, похожие на CSS возможности дизайна в командную строку. Разработчики используют компоненты `Box` и свойства Yoga для создания динамических интерфейсов, которые изящно адаптируются к изменению размера терминала, что является резким контрастом по сравнению со старыми, жесткими подходами TUI.

Помимо привычных веб-шаблонов, OpenTUI интегрирует мощный набор функций, которые стирают границы между вебом и терминалом. Он предлагает встроенные компоненты, включая: - `Input` - `Select` - `Box` - `Text` - `ScrollBox` - `Code` - `Diff`

Расширенные взаимодействия включают поддержку мыши и навигацию с клавиатуры через хук `useKeyboard`. Используя Bun — A fast all-in-one JavaScript runtime для его мощных FFI и возможностей среды выполнения, приложения OpenTUI также могут использовать экосистему Bun для SQLite, Postgres или `fetch` внешних данных, как и веб-сайт. Самое поразительное, что OpenTUI даже позволяет рендерить WebGPU 3D-графику внутри терминала с помощью Three.js, раздвигая границы того, что может достичь интерфейс командной строки.

Битва фреймворков TUI: Ink против OpenTUI

Ink страдает от жестко заданного ограничения в 30 FPS и потребляет более 50 МБ для простых приложений. OpenTUI, несмотря на включение всей среды выполнения Bun, использует менее 50 МБ памяти во время выполнения и полностью устраняет ограничение FPS. Размер его скомпилированного пакета составляет примерно 71 МБ, что является небольшой платой за его радикальные улучшения производительности.

Enjoying this? Get one like it in your inbox each morning.

one email a day · unsubscribe in two clicks · no third-party tracking

Архитектура OpenTUI фундаментально меняет подходы к выбору фреймворков. Ядро Zig снимает всю тяжелую нагрузку по рендерингу и сравнению кадров, делая выбор фреймворка в значительной степени вопросом предпочтений разработчика. Независимо от выбора React, SolidJS или императивного основного API, базовая производительность рендеринга остается почти идентичной, что позволяет разработчикам сосредоточиться на удобстве разработки.

В то время как нативные библиотеки, такие как Ratatui и Bubble Tea, остаются абсолютно самыми легкими для TUI, OpenTUI зарекомендовал себя как явный преемник Ink. Он обеспечивает беспрецедентный баланс элитной производительности и современного, привычного для веб-разработчиков опыта, что делает его окончательным выбором для требовательных проектов TUI.

Часто задаваемые вопросы

Что такое OpenTUI?

OpenTUI — это библиотека с открытым исходным кодом для создания высокопроизводительных пользовательских интерфейсов терминала (TUI). Она использует ядро рендеринга, написанное на Zig, и предоставляет привязки для фреймворков JavaScript/TypeScript, таких как React и SolidJS, все это ускоряется средой выполнения Bun.

Чем OpenTUI отличается от Ink?

Основное преимущество OpenTUI перед Ink — это производительность. Он избегает жестко заданного ограничения Ink в 30 FPS и высокого потребления памяти, перенося рендеринг на нативное ядро Zig. Это приводит к более быстрым и отзывчивым терминальным приложениям, особенно для тех, которые работают с потоковыми данными.

Какие технологии использует OpenTUI?

Архитектура OpenTUI сочетает высокопроизводительное ядро рендеринга Zig, среду выполнения Bun с ее быстрым интерфейсом внешних функций (FFI) для связи с низкой задержкой, а также привязки TypeScript для фреймворков, таких как React и SolidJS. Он также использует Yoga для Flexbox-макетов.

Готов ли OpenTUI к продакшену?

Хотя OpenTUI лежит в основе крупных приложений, таких как агент OpenCode AI, он все еще находится в активной разработке. Для общего использования он может быть не полностью стабилизирован. Он лучше всего подходит для критически важных по производительности проектов, где его преимущества в скорости перевешивают риски использования новой библиотеки.

Found this useful? Share it.

AI Reputation Report

What AI knows about you.

ChatGPT, Perplexity, Gemini, Claude & Grok are already answering questions in your category. Type your site, see who they name — you, or your competitor. Free preview.

Check my sitefree preview

One short daily email of tools worth shipping. No drip funnel.

one email a day · unsubscribe in two clicks · no third-party tracking

🚀Узнать больше

Будьте в курсе трендов ИИ

Откройте лучшие инструменты ИИ, агенты и MCP-серверы от Stork.AI.

P.S. Сделали что-то полезное? Опубликуйте на Stork