Skip to content

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

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

Stork.AI
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 МБ, что является небольшой платой за его радикальные улучшения производительности.

Архитектура 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, он все еще находится в активной разработке. Для общего использования он может быть не полностью стабилизирован. Он лучше всего подходит для критически важных по производительности проектов, где его преимущества в скорости перевешивают риски использования новой библиотеки.

One weekly email of tools worth shipping. No drip funnel.

one email per week · unsubscribe in two clicks · no third-party tracking

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

Что такое OpenTUI?
OpenTUI — это библиотека с открытым исходным кодом для создания высокопроизводительных пользовательских интерфейсов терминала . Она использует ядро рендеринга, написанное на Zig, и предоставляет привязки для фреймворков JavaScript/TypeScript, таких как React и SolidJS, все это ускоряется средой выполнения Bun.
Чем OpenTUI отличается от Ink?
Основное преимущество OpenTUI перед Ink — это производительность. Он избегает жестко заданного ограничения Ink в 30 FPS и высокого потребления памяти, перенося рендеринг на нативное ядро Zig. Это приводит к более быстрым и отзывчивым терминальным приложениям, особенно для тех, которые работают с потоковыми данными.
Какие технологии использует OpenTUI?
Архитектура OpenTUI сочетает высокопроизводительное ядро рендеринга Zig, среду выполнения Bun с ее быстрым интерфейсом внешних функций для связи с низкой задержкой, а также привязки TypeScript для фреймворков, таких как React и SolidJS. Он также использует Yoga для Flexbox-макетов.
Готов ли OpenTUI к продакшену?
Хотя OpenTUI лежит в основе крупных приложений, таких как агент OpenCode AI, он все еще находится в активной разработке. Для общего использования он может быть не полностью стабилизирован. Он лучше всего подходит для критически важных по производительности проектов, где его преимущества в скорости перевешивают риски использования новой библиотеки.
🚀Узнать больше

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

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

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

Все статьи