Фреймворк для консоли
Создавайте full-stack-приложения на React с рендерингом внутри console.log.
Эта страница работает в вашей консоли. Откройте её сочетанием ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C (сначала включите функции разработчика), щёлкните по предпросмотру ниже и нажмите ↑ ↓.
1import { useState } from "react";2import { AsciiFont, Box, Text, useInput } from "@textjs/app";34export default function Page() {5 const [count, setCount] = useState(0);6 useInput((e) => {7 if (e.key === "up") setCount((c) => c + 1);8 if (e.key === "down") setCount((c) => c - 1);9 });1011 return (12 <Box className="flex-col gap-1 p-2">13 <AsciiFont text="▼ TEXT.JS" />14 <Text color="muted">React 19 in console.log</Text>15 <Text bold color="accent">count = {count}</Text>16 </Box>17 );18}React 19
Text.js поддерживает конкурентный рендеринг, Suspense и границы ошибок.
App Router
Папки в app/ становятся маршрутами и макетами, а «Назад», «Вперёд» и прямые ссылки работают.
Адаптивная сетка
Сетка подстраивается под закреплённую панель DevTools при любом масштабе страницы.
Ввод с клавиатуры
Нажатия клавиш, вставка и композиция IME поступают в приложение через один скрытый <textarea>.
Таблицы, графики, формы и сочетания клавиш
<Box><Stack><Grid><SplitPane><ScrollBox><Center>
<List><Table><Tree><Markdown><Code><Diff>
<LineChart><BarChart><Sparkline><ProgressBar><Gradient><Image>
<Input><Select><Checkbox><Switch><Slider><Dialog>
useKeymap<KeyHelp><KeyHints><CommandPalette><StatusBar>useFocus
Каждый изменённый кадр — один вызов console.log
Коммит, не изменивший ни одной ячейки, не доходит до консоли.
- React 19
01Коммит
React выполняет коммиты через собственный reconciler.
- Yoga
02Макет
Yoga размещает блоки по целым ячейкам.
- CellBuffer
03Отрисовка
Перерисовываются только повреждённые строки.
- Хеш строки
04Проверка изменений
Неизменённые кадры останавливаются здесь.
- RLE
05Кодирование
3 200 ячеек превращаются в 149 span с
%c. - console.log
06Вывод
Кадры дописываются с интервалом не менее 66 мс.
Дописанные кадры
Очистка консоли перед каждым кадром оставляет её пустой, пока DevTools не отрисует следующий. Turbolog вместо этого дописывает каждый кадр.
Читать статьюclear() + log()70.6 % пустыхlog(), appended1.0 % пустых%c для 3200 ячеекРендеринг маршрутов на сервере
Экспортируйте runtime = "server", чтобы рендерить маршрут и его асинхронные компоненты на сервере. Браузер загружает проигрыватель кадров размером 21 КБ (gzip) вместо вашего приложения.
1import { Suspense } from "react";2import { Box, Text } from "@textjs/app";3import { db } from "@/lib/db";45export const runtime = "server";67async function Deploys() {8 const rows = await db.deploys.latest(5);9 return rows.map((d) => (10 <Text key={d.id}>{`${d.state} ${d.branch}`}</Text>11 ));12}1314export default function Page() {15 return (16 <Box className="flex-col p-1">17 <Text bold>Deployments</Text>18 <Suspense fallback={<Text color="muted">Loading…</Text>}>19 <Deploys />20 </Suspense>21 </Box>22 );23}- Частичный пререндерингПервый кадр каждого статического маршрута поставляется в его HTML. Консоль отрисовывается до загрузки JavaScript.
- Middleware
middleware.tsвыполняется перед подходящими запросами сNextRequest,NextResponseиconfig.matcher. - Кэширование
revalidate,unstable_cacheиrevalidateTagкешируют обработчики маршрутов и данные по схеме stale-while-revalidate. - Адаптеры развёртывания
text build --adapterсобирает дляstatic,bun,vercelилиcloudflare. Маршрутам, отрендеренным на сервере, нуженbunилиtext start.
Работает и в терминалах и агентах
DevToolstext dev
Turbolog записывает каждый кадр как span с %c одним вызовом console.log.
Терминалtext run
text run рендерит то же приложение App Router в truecolor ANSI и запускает обработчики маршрутов в том же процессе.
Агенты для разработкиtext mcp
Через MCP агенты переходят по маршрутам, нажимают клавиши и читают каждый кадр как обычный текст.
Писать код с OpenCode в DevTools
OpenCode Lite — это TUI OpenCode, воссозданный на Text.js для работы в консоли браузера.
Песочница
Агент по сценарию отвечает на любой промпт, без установки.
Одна команда
Запустите bunx @textjs/opencode@latest proxy и введите выведенный код. Страница подключится к OpenCode на вашем компьютере.
Ваши модели и сессии
Выберите любую настроенную на вашем сервере модель через /models. Сессии, агенты и модели поступают с вашего сервера OpenCode.
Инструменты редактора, линтинга и тестирования
Расширение DevTools
Добавляет панель с деревом компонентов, инспектором кадров и покадровой шкалой времени.
Панель Text.jsVS Code
Показывает предпросмотр кадра рядом с кодом и создаёт заготовки файлов App Router.
⌘K VESLint
Выявляет DOM-теги в консольных компонентах, блоки внутри текста и глифы, которых нет в Menlo.
eslint-plugin-textjsТестирование
Рендерьте вне экрана, нажимайте клавиши и проверяйте lastFrame() в любой среде запуска тестов.
Коды ошибок
Ошибки и предупреждения с кодом TX ссылаются на страницу с объяснением исправления.
REPL в консоли
Приостанавливайте, меняйте размер, включайте каркасный режим и копируйте работающее приложение из командной строки консоли.
window.textСправа налево
Реализует двунаправленный алгоритм Unicode и проходит все 770 241 тест из BidiTest.txt.
Шрифты FIGlet
Разбирает файлы .flf и воспроизводит 273 результата, записанных из бинарного файла figlet.
Создать панель развёртывания в консоли
Бесплатный курс содержит 10 глав и занимает около 65 минут.