Skip to content

Новый инструмент Vercel кладет конец терминальному аду

В течение многих лет веб-терминалы казались неполноценными, вынуждая разработчиков бороться с неудобным выделением текста и функциями поиска. wterm от Vercel исправляет это, отказываясь от canvas в пользу чистого HTML, и результаты меняют правила игры.

Stork.AI
Hero image for: Новый инструмент Vercel кладет конец терминальному аду
💡

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

В течение многих лет веб-терминалы казались неполноценными, вынуждая разработчиков бороться с неудобным выделением текста и функциями поиска. wterm от Vercel исправляет это, отказываясь от canvas в пользу чистого HTML, и результаты меняют правила игры.

Холстовая тюрьма веб-терминалов

В течение многих лет xterm.js безраздельно господствовал как неоспоримый стандарт для веб-терминалов. Облачные IDE, такие как GitHub Codespaces, инструменты управления инфраструктурой, такие как Portainer, и даже десктопные среды, такие как VS Code, повсеместно интегрируют эту библиотеку, делая ее де-факто решением для встраивания интерфейсов командной строки в браузеры. Ее повсеместное присутствие закрепило ее статус, несмотря на присущие ограничения.

Однако фундаментальный выбор дизайна xterm.js — рендеринг вывода терминала в элемент HTML canvas — представляет собой значительное техническое препятствие. Этот canvas действует как визуальный «черный ящик» для браузера, эффективно скрывая базовое текстовое содержимое. Следовательно, браузер не может нативно интерпретировать отображаемые символы или взаимодействовать с ними.

Поэтому разработчики, использующие xterm.js, должны вручную повторно реализовывать базовые функции браузера. Основные функции, такие как выделение текста, операции «поиска» и привычные механизмы копирования-вставки, требуют индивидуального, часто сложного, пользовательского кода. Это повторяющееся перепроектирование основных взаимодействий приводит к несоответствиям и потенциальным ошибкам в различных реализациях.

Это архитектурное ограничение напрямую влияет на пользовательский опыт и доступность. Пользователи часто сталкиваются с неуклюжим, ненативным взаимодействием с текстом, где выделение или копирование текста кажется громоздким и ненадежным. Что особенно важно, программы чтения с экрана с трудом интерпретируют содержимое, отображаемое на canvas, что серьезно ограничивает доступность для пользователей с нарушениями зрения и не обеспечивает плавного, нативного ощущения.

Радикальный подход wterm: DOM-First

wterm от Vercel представляет радикально иную парадигму для веб-терминалов, фундаментально отходя от canvas-центричной модели, которая долгое время доминировала в этой области. В отличие от xterm.js, который рендерит пиксели на изолированный canvas, wterm напрямую рендерит вывод терминала как стандартные элементы HTML в рамках Document Object Model. Этот архитектурный сдвиг означает, что терминал является не отдельной, инкапсулированной поверхностью для рисования, а внутренним, полностью доступным компонентом самой веб-страницы, бесшовно интегрированным с нативными возможностями браузера.

Этот смелый DOM-first подход немедленно открывает критически важные функции пользовательского опыта, которые ранее были проблемой для эмуляторов на основе canvas, часто требуя сложных и несовершенных повторных реализаций. Разработчики получают: - Нативное выделение текста - Встроенную функцию поиска Ctrl+F в браузере - Бесшовные операции копирования-вставки - Полную поддержку программ чтения с экрана

Эти основные взаимодействия теперь работают по умолчанию, не требуя дополнительного кода. Это устраняет необходимость для разработчиков кропотливо воссоздавать функциональность на уровне браузера, что часто приводило к непоследовательному или субоптимальному пользовательскому опыту в традиционных веб-терминалах.

В основе отзывчивого фронтенда wterm лежит сверхэффективный бэкенд, написанный на Zig. Эта компактная кодовая база компилируется в бинарный файл WebAssembly размером всего 12 КБ, обеспечивая минимальные накладные расходы и быструю загрузку. Движок интеллектуально анализирует входящие управляющие последовательности терминала, гарантируя, что он перерисовывает только те строки, которые изменились в течение каждого кадра. Этот высокооптимизированный конвейер рендеринга позволяет wterm поддерживать плавную производительность даже с требовательными, часто обновляющимися инструментами командной строки, такими как `htop`, что делает его действительно жизнеспособным решением для сложных приложений непосредственно в браузере.

Ускорьте это: опция движка Ghostty

В то время как стандартное ядро Zig в `wterm` обеспечивает впечатляющую эффективность для базовых операций терминала, достижение пиксель-в-пиксель рендеринга и безупречной совместимости со сложными приложениями требует более надежной инженерии. Именно здесь на сцену выходит опциональный бэкенд `wterm-ghostty`, предлагающий значительное улучшение для требовательных сценариев.

Пакет `wterm-ghostty` заменяет легковесное ядро Zig на libghostty, тот же мощный движок рендеринга, который используется в нативном терминале Ghostty. Эта интеграция обеспечивает уровень точности, ранее невиданный в веб-терминалах, позволяя: - Пиксель-в-пиксель рендеринг текста - Превосходную точность цветопередачи и поддержку 24-битного true color - Бесшовное выполнение сложных приложений, таких как Vim, Neovim и даже `htop`

Эта расширенная функциональность сопряжена с существенным компромиссом в размере бинарного файла. Минималистичное ядро Zig, написанное на Zig, компилируется в бинарный файл WebAssembly размером всего 12 КБ, что делает `wterm` невероятно легким. В отличие от этого, бэкенд `wterm-ghostty`, использующий `libghostty`, увеличивает бинарный файл WASM примерно до 400 КБ. Это ставит разработчиков перед четким выбором: отдать предпочтение минималистичной эффективности для более простых случаев использования или выбрать максимальную точность и совместимость при запуске полноценной среды разработки в браузере. Дополнительные технические подробности можно найти на странице проекта на GitHub: vercel-labs/wterm: A terminal emulator for the web - GitHub.

Вердикт: Убийца ли это xterm.js?

Противопоставление wterm почтенному `xterm.js` выявляет четкий разрыв поколений. Более десяти лет `xterm.js` был бесспорным стандартом, обеспечивая работу всего, от VS Code до GitHub Codespaces, благодаря своей проверенной стабильности и обширной экосистеме плагинов. Его зрелость делает его прагматичным выбором с низким риском для большинства разработчиков.

Однако `wterm` предлагает принципиально превосходный пользовательский опыт, используя свой DOM-first рендеринг для нативного выделения текста, поиска в браузере и критически важной поддержки программ чтения с экрана — функций, которые `xterm.js` долгое время пытался эмулировать. Этот архитектурный сдвиг означает, что вывод терминала — это просто HTML, предоставляя функции браузера бесплатно.

В то время как другие проекты, такие как Coder's Ghostty Web, также используют мощный движок `libghostty`, они часто сохраняют подход `xterm.js` с использованием canvas. `wterm` отличается тем, что по-настоящему встраивает терминал как нативный HTML, делая его просто еще одним веб-элементом, а не отдельным слоем canvas.

Все еще находящиеся на ранней стадии развития, `wterm` и его опциональный бэкенд `wterm-ghostty` не лишены шероховатостей. Ядро Zig размером 12 КБ, хотя и удивительно эффективно, может потребовать опцию `libghostty` размером 400 КБ для полной совместимости с терминалом, особенно со сложными приложениями, такими как Neovim или OpenCode.

Тем не менее, для новых веб-проектов, которые с самого начала отдают приоритет по-настоящему нативному ощущению и доступности, `wterm` представляет собой убедительную, современную альтернативу. `xterm.js` остается более безопасным, устоявшимся выбором для интеграции с устаревшими системами, но `wterm` решительно решает десятилетнюю проблему с помощью элегантного, перспективного решения.

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

Что такое wterm от Vercel?

wterm — это современный веб-терминальный эмулятор от Vercel, который выводит данные непосредственно в DOM в виде HTML, вместо использования элемента canvas, как это делают традиционные решения.

Чем wterm отличается от xterm.js?

Основное отличие — это технология рендеринга. wterm использует DOM (HTML), что обеспечивает нативное выделение текста, поиск в браузере и доступность бесплатно. xterm.js рендерит в canvas, требуя повторной реализации этих функций на JavaScript.

Какова роль Ghostty в wterm?

wterm предлагает опциональный высокоточный бэкенд на базе libghostty, того же движка, что и нативный терминал Ghostty. Это обеспечивает превосходную точность рендеринга и совместимость, особенно для сложных пользовательских интерфейсов терминала, ценой большего размера файла.

На чем построен wterm?

Ядро wterm написано на языке программирования Zig и скомпилировано в крошечный (~12 КБ) бинарный файл WebAssembly (WASM), что делает его чрезвычайно легким и производительным.

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

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

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

Вердикт: Убийца ли это xterm.js?
Противопоставление wterm почтенному `xterm.js` выявляет четкий разрыв поколений. Более десяти лет `xterm.js` был бесспорным стандартом, обеспечивая работу всего, от VS Code до GitHub Codespaces, благодаря своей проверенной стабильности и обширной экосистеме плагинов. Его зрелость делает его прагматичным выбором с низким риском для большинства разработчиков.
Что такое wterm от Vercel?
wterm — это современный веб-терминальный эмулятор от Vercel, который выводит данные непосредственно в DOM в виде HTML, вместо использования элемента canvas, как это делают традиционные решения.
Чем wterm отличается от xterm.js?
Основное отличие — это технология рендеринга. wterm использует DOM , что обеспечивает нативное выделение текста, поиск в браузере и доступность бесплатно. xterm.js рендерит в canvas, требуя повторной реализации этих функций на JavaScript.
Какова роль Ghostty в wterm?
wterm предлагает опциональный высокоточный бэкенд на базе libghostty, того же движка, что и нативный терминал Ghostty. Это обеспечивает превосходную точность рендеринга и совместимость, особенно для сложных пользовательских интерфейсов терминала, ценой большего размера файла.
На чем построен wterm?
Ядро wterm написано на языке программирования Zig и скомпилировано в крошечный бинарный файл WebAssembly , что делает его чрезвычайно легким и производительным.
🚀Узнать больше

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

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

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

Все статьи