Il framework per la console
Crea app React full-stack renderizzate dentro console.log.
Questa pagina è in esecuzione nella tua console. Aprila con ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C (prima attiva le funzionalità per sviluppatori), fai clic sull’anteprima qui sotto e premi ↑ ↓.
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 supporta il rendering concorrente, Suspense e gli error boundary.
App Router
Le cartelle in app/ diventano route e layout, e Indietro, Avanti e i deep link funzionano.
Griglia responsive
La griglia si adatta al pannello DevTools ancorato a qualsiasi zoom della pagina.
Input da tastiera
Tasti, testo incollato e composizione IME raggiungono l’app tramite un unico <textarea> nascosto.
Tabelle, grafici, moduli e scorciatoie
Ogni frame modificato è una chiamata a console.log
Un commit che non modifica celle non raggiunge mai la console.
- React 19
01Commit
React esegue i commit tramite un reconciler personalizzato.
- Yoga
02Layout
Yoga dispone i riquadri su celle intere.
- CellBuffer
03Disegno
Solo le righe modificate vengono ridisegnate.
- Hash di riga
04Filtro modifiche
I frame invariati si fermano qui.
- RLE
05Codifica
3200 celle diventano 149 span
%c. - console.log
06Emissione
I frame vengono accodati a distanza di almeno 66 ms.
Frame accodati
Svuotare la console prima di ogni frame la lascia vuota finché DevTools non disegna il successivo. Turbolog accoda invece ogni frame.
Leggi il postclear() + log()70.6% vuotolog(), appended1.0% vuoto%c per 3200 celleRenderizzare le route sul server
Esporta runtime = "server" per renderizzare una route e i suoi componenti asincroni sul server. Il browser carica un riproduttore di frame da 21 kB (gzip) al posto della tua app.
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}- Pre-rendering parzialeIl primo frame di ogni route statica è incluso nel suo HTML. La console lo mostra prima del caricamento di JavaScript.
- Middleware
middleware.tsviene eseguito prima delle richieste corrispondenti, conNextRequest,NextResponseeconfig.matcher. - Cache
revalidate,unstable_cacheerevalidateTagmemorizzano in cache route handler e dati, con stale-while-revalidate. - Adattatori di deploy
text build --adaptersupportastatic,bun,vercelocloudflare. Le route renderizzate lato server richiedonobunotext start.
Esecuzione anche in terminali e agenti
DevToolstext dev
Turbolog scrive ogni frame come span %c in un solo console.log.
Terminaletext run
text run rende la stessa app App Router in ANSI truecolor ed esegue i route handler nello stesso processo.
Agenti di programmazionetext mcp
Tramite MCP, gli agenti navigano tra le route, premono tasti e leggono ogni frame come testo semplice.
Programmare con OpenCode in DevTools
OpenCode Lite è la TUI di OpenCode ricostruita con Text.js per funzionare nella console del browser.
Sandbox
Un agente con script risponde a qualsiasi prompt, senza nulla da installare.
Un comando
Esegui bunx @textjs/opencode@latest proxy e inserisci il codice che stampa. La pagina si connette a OpenCode sul tuo computer.
I tuoi modelli e le tue sessioni
Scegli con /models un modello configurato sul tuo server. Sessioni, agenti e modelli provengono dal tuo server OpenCode.
Strumenti per editor, lint e test
Estensione DevTools
Aggiunge un pannello con l’albero dei componenti, un ispettore dei frame e una timeline per frame.
Pannello Text.jsVS Code
Mostra l’anteprima del frame accanto al codice e genera i file di base di App Router.
⌘K VESLint
Rileva tag DOM nei componenti della console, riquadri nel testo e glifi assenti in Menlo.
eslint-plugin-textjsTest
Renderizza fuori schermo, premi tasti e verifica lastFrame() in qualsiasi test runner.
Codici di errore
Gli errori e gli avvisi con un codice TX rimandano a una pagina che spiega la correzione.
REPL della console
Metti in pausa, ridimensiona, mostra il wireframe e copia l’app in esecuzione dal prompt della console.
window.textDa destra a sinistra
Implementa l’algoritmo bidirezionale Unicode e supera tutti i 770.241 casi di BidiTest.txt.
Font FIGlet
Analizza file .flf e riproduce 273 output registrati dal binario figlet.
Creare una dashboard di deploy nella console
Il corso gratuito ha 10 capitoli e dura circa 65 minuti.