Framework konsolowy
Twórz aplikacje full-stack w React renderowane wewnątrz console.log.
Ta strona działa w twojej konsoli. Otwórz ją skrótem ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C (najpierw włącz funkcje dla deweloperów), kliknij podgląd poniżej i naciśnij ↑ ↓.
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 obsługuje renderowanie współbieżne, Suspense i granice błędów.
App Router
Foldery w app/ stają się trasami i layoutami, a Wstecz, Dalej i linki bezpośrednie działają.
Responsywna siatka
Siatka dopasowuje się do zadokowanego panelu DevTools przy dowolnym powiększeniu strony.
Obsługa klawiatury
Klawisze, wklejanie i kompozycja IME trafiają do aplikacji przez jedno ukryte pole <textarea>.
Tabele, wykresy, formularze i skróty klawiszowe
<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
Każda zmieniona klatka to jedno wywołanie console.log
Zatwierdzenie bez zmian w komórkach nigdy nie trafia do konsoli.
- React 19
01Zatwierdzanie
React zatwierdza zmiany przez własny reconciler.
- Yoga
02Layout
Yoga rozmieszcza bloki na pełnych komórkach.
- CellBuffer
03Rysowanie
Przerysowywane są tylko zmienione wiersze.
- Hash wiersza
04Filtr zmian
Niezmienione klatki zatrzymują się tutaj.
- RLE
05Kodowanie
3200 komórek zmienia się w 149 spanów
%c. - console.log
06Wysyłanie
Klatki są dopisywane w odstępach co najmniej 66 ms.
Dopisywane klatki
Czyszczenie konsoli przed każdą klatką pozostawia ją pustą, aż DevTools narysuje kolejną. Turbolog zamiast tego dopisuje każdą klatkę.
Przeczytaj wpisclear() + log()70.6% pustychlog(), appended1.0% pustych%c dla 3200 komórekRenderowanie tras na serwerze
Wyeksportuj runtime = "server", aby renderować trasę i jej komponenty asynchroniczne na serwerze. Przeglądarka ładuje odtwarzacz klatek o rozmiarze 21 kB (gzip) zamiast twojej aplikacji.
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}- Częściowe prerenderowaniePierwsza klatka każdej statycznej trasy trafia do jej HTML. Konsola wyświetla ją przed załadowaniem JavaScript.
- Middleware
middleware.tsdziała przed dopasowanymi żądaniami, zNextRequest,NextResponseiconfig.matcher. - Buforowanie
revalidate,unstable_cacheirevalidateTagbuforują handlery tras i dane ze strategią stale-while-revalidate. - Adaptery wdrożeniowe
text build --adapterobsługuje celestatic,bun,vercellubcloudflare. Trasy renderowane po stronie serwera wymagająbunlubtext start.
Działa też w terminalach i agentach
DevToolstext dev
Turbolog zapisuje każdą klatkę jako spany %c w jednym wywołaniu console.log.
Terminaltext run
text run renderuje tę samą aplikację App Router w ANSI truecolor i uruchamia handlery tras w tym samym procesie.
Agenci programistycznitext mcp
Przez MCP agenci przechodzą między trasami, naciskają klawisze i odczytują każdą klatkę jako zwykły tekst.
Programuj z OpenCode w DevTools
OpenCode Lite to interfejs TUI OpenCode przebudowany przy użyciu Text.js, by działał w konsoli przeglądarki.
Piaskownica
Agent skryptowy odpowiada na dowolny prompt bez instalowania czegokolwiek.
Jedno polecenie
Uruchom bunx @textjs/opencode@latest proxy i wpisz wyświetlony kod. Strona łączy się z OpenCode na twoim komputerze.
Twoje modele i sesje
Wybierz dowolny model skonfigurowany na serwerze za pomocą /models. Sesje, agenty i modele pochodzą z twojego serwera OpenCode.
Narzędzia edytora, lintowania i testów
Rozszerzenie DevTools
Dodaje panel z drzewem komponentów, inspektorem klatek i osią czasu poszczególnych klatek.
Panel Text.jsVS Code
Wyświetla podgląd klatki obok kodu i generuje pliki App Router.
⌘K VESLint
Wykrywa tagi DOM w komponentach konsoli, bloki wewnątrz tekstu i glify, których brakuje w Menlo.
eslint-plugin-textjsTestowanie
Renderuj poza ekranem, naciskaj klawisze i sprawdzaj asercje na lastFrame() w dowolnym narzędziu do testów.
Kody błędów
Błędy i ostrzeżenia z kodem TX prowadzą do strony z opisem rozwiązania.
REPL konsoli
Wstrzymuj, zmieniaj rozmiar, włączaj widok szkieletowy i kopiuj działającą aplikację z wiersza poleceń konsoli.
window.textOd prawej do lewej
Implementuje algorytm dwukierunkowy Unicode i przechodzi wszystkie 770 241 przypadków z BidiTest.txt.
Fonty FIGlet
Parsuje pliki .flf i odtwarza 273 wyniki zapisane z pliku binarnego figlet.
Zbuduj panel wdrożeń w konsoli
Bezpłatny kurs ma 10 rozdziałów i zajmuje około 65 minut.