Framework konsolowy

Twórz aplikacje full-stack w React renderowane wewnątrz console.log.

Zacznij

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}
viewport:3

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

Na żywo
preview://table:1
↑ ↓ ruch · s sortowanie · Space wybór
Dokumentacja
Layout
  • <Box>
  • <Stack>
  • <Grid>
  • <SplitPane>
  • <ScrollBox>
  • <Center>
Dane
  • <List>
  • <Table>
  • <Tree>
  • <Markdown>
  • <Code>
  • <Diff>
Wykresy
  • <LineChart>
  • <BarChart>
  • <Sparkline>
  • <ProgressBar>
  • <Gradient>
  • <Image>
Kontrolki
  • <Input>
  • <Select>
  • <Checkbox>
  • <Switch>
  • <Slider>
  • <Dialog>
Klawiatura
  • 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.

  1. React 19

    01Zatwierdzanie

    React zatwierdza zmiany przez własny reconciler.

  2. Yoga

    02Layout

    Yoga rozmieszcza bloki na pełnych komórkach.

  3. CellBuffer

    03Rysowanie

    Przerysowywane są tylko zmienione wiersze.

  4. Hash wiersza

    04Filtr zmian

    Niezmienione klatki zatrzymują się tutaj.

  5. RLE

    05Kodowanie

    3200 komórek zmienia się w 149 spanów %c.

  6. console.log

    06Wysyłanie

    Klatki są dopisywane w odstępach co najmniej 66 ms.

Zmieniona klatka Niezmieniona klatka, 0 wywołań

Dopisywane klatki

Czyszczenie konsoli przed każdą klatką pozostawia ją pustą, aż DevTools narysuje kolejną. Turbolog zamiast tego dopisuje każdą klatkę.

Przeczytaj wpis
clear() + log()70.6% pustych
log(), appended1.0% pustych
0.163msPełne przerysowanie (layout, rysowanie, kodowanie)
0.011msEdycja jednego wiersza, np. naciśnięcie klawisza
0 wywołańKlatka bezczynności
149 spanówArgumenty %c dla 3200 komórek
Panel 100×32, średnia z 1000 klatek · Apple M5 Pro · Bun 1.4.4Dokumentacja silnika Turbolog

Renderowanie 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}

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.