Framework konsol

Bangun aplikasi React full-stack yang di-render di dalam console.log.

Mulai

Halaman ini berjalan di konsol Anda. Buka dengan ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C (aktifkan fitur pengembang dahulu), klik pratinjau di bawah, dan tekan ↑ ↓.

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 mendukung concurrent rendering, Suspense, dan error boundary.

App Router

Folder di app/ menjadi route dan layout, dan Kembali, Maju serta deep link berfungsi.

Grid responsif

Grid menyesuaikan panel DevTools yang ditambatkan pada tingkat zoom halaman apa pun.

Input keyboard

Tombol, tempelan, dan komposisi IME diteruskan ke aplikasi melalui satu <textarea> tersembunyi.

Tabel, grafik, formulir, dan pintasan

Langsung
preview://table:1
↑ ↓ pindah · s urutkan · Space pilih
Dokumentasi
Layout
  • <Box>
  • <Stack>
  • <Grid>
  • <SplitPane>
  • <ScrollBox>
  • <Center>
Data
  • <List>
  • <Table>
  • <Tree>
  • <Markdown>
  • <Code>
  • <Diff>
Grafik
  • <LineChart>
  • <BarChart>
  • <Sparkline>
  • <ProgressBar>
  • <Gradient>
  • <Image>
Kontrol
  • <Input>
  • <Select>
  • <Checkbox>
  • <Switch>
  • <Slider>
  • <Dialog>
Keyboard
  • useKeymap
  • <KeyHelp>
  • <KeyHints>
  • <CommandPalette>
  • <StatusBar>
  • useFocus

Setiap frame yang berubah adalah satu panggilan console.log

Commit yang tidak mengubah sel tidak pernah mencapai konsol.

  1. React 19

    01Commit

    React menjalankan commit lewat reconciler khusus.

  2. Yoga

    02Layout

    Yoga menata kotak pada sel utuh.

  3. CellBuffer

    03Gambar

    Hanya baris yang berubah digambar ulang.

  4. Hash baris

    04Gerbang perubahan

    Frame yang tidak berubah berhenti di sini.

  5. RLE

    05Enkode

    3.200 sel menjadi 149 span %c.

  6. console.log

    06Kirim

    Frame ditambahkan di akhir dengan jeda minimal 66 ms.

Frame berubah Frame tidak berubah, 0 panggilan

Frame yang ditambahkan di akhir

Mengosongkan konsol sebelum setiap frame membuatnya kosong sampai DevTools menggambar frame berikutnya. Turbolog menambahkan setiap frame di akhir.

Baca artikel
clear() + log()70.6% kosong
log(), appended1.0% kosong
0.163msGambar ulang penuh (layout, gambar, enkode)
0.011msEdit satu baris, seperti penekanan tombol
0 panggilanFrame diam
149 spanArgumen %c untuk 3.200 sel
Dasbor 100×32, rata-rata 1.000 frame · Apple M5 Pro · Bun 1.4.4Dokumentasi mesin Turbolog

Render route di server

Ekspor runtime = "server" untuk me-render route dan komponen asinkronnya di server. Browser memuat pemutar frame berukuran 21 kB (gzip), bukan aplikasi Anda.

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}

Tulis kode dengan OpenCode di DevTools

OpenCode Lite adalah TUI OpenCode yang dibangun ulang dengan Text.js untuk berjalan di konsol browser Anda.

Sandbox

Agen berskrip menjawab prompt apa pun, tanpa perlu instalasi.

Satu perintah

Jalankan bunx @textjs/opencode@latest proxy dan masukkan kode yang ditampilkan. Halaman terhubung ke OpenCode di mesin Anda.

Model dan sesi Anda

Pilih model apa pun yang dikonfigurasi di server Anda dengan /models. Sesi, agen, dan model berasal dari server OpenCode Anda.