הפריימוורק למסוף
בניית אפליקציות 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/ הופכות לנתיבים ול-layout, וניווט אחורה, קדימה וקישורים עמוקים פועלים.
רשת רספונסיבית
הרשת מתאימה לחלונית DevTools המעוגנת בכל רמת זום של הדף.
קלט מקלדת
מקשים, הדבקה והרכבת טקסט ב-IME מגיעים ליישום דרך <textarea> מוסתר אחד.
טבלאות, תרשימים, טפסים וקיצורי מקשים
כל פריים שהשתנה הוא קריאת console.log אחת
החלת שינויים שאינה משנה תאים לא מגיעה למסוף.
- React 19
01החלת שינויים
React מחיל שינויים דרך reconciler מותאם.
- Yoga
02layout
Yoga מסדר תיבות על תאים שלמים.
- CellBuffer
03צביעה
רק שורות שהשתנו נצבעות מחדש.
- גיבוב שורה
04סינון שינויים
פריימים ללא שינוי נעצרים כאן.
- RLE
05קידוד
3,200 תאים הופכים ל-149 spans של
%c. - console.log
06פליטה
פריימים נוספים לסוף בהפרש של 66 ms לפחות.
פריימים שנוספו לסוף
ניקוי המסוף לפני כל פריים משאיר אותו ריק עד ש-DevTools מצייר את הפריים הבא. Turbolog מוסיף כל פריים לסוף במקום זאת.
קריאת הפוסטclear() + log()70.6% ריקlog(), appended1.0% ריק%c עבור 3,200 תאיםרינדור נתיבים בשרת
יש לייצא runtime = "server" כדי לרנדר נתיב ואת הרכיבים האסינכרוניים שלו בשרת. הדפדפן טוען נגן פריימים בגודל 21 kB (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 כותב כל פריים כ-spans של %c בקריאת console.log אחת.
טרמינלtext run
text run מרנדר את אותה אפליקציית App Router ב-ANSI בצבע מלא ומריץ מטפלי נתיב באותו תהליך.
סוכני קודtext mcp
דרך MCP, סוכנים מנווטים בנתיבים, לוחצים על מקשים וקוראים כל פריים כטקסט רגיל.
כתיבת קוד עם OpenCode ב-DevTools
OpenCode Lite הוא ממשק ה-TUI של OpenCode, שנבנה מחדש עם Text.js כדי לרוץ במסוף הדפדפן.
ארגז חול
סוכן מתוסרט עונה לכל הנחיה, ללא צורך בהתקנה.
פקודה אחת
יש להריץ bunx @textjs/opencode@latest proxy ולהזין את הקוד שהפקודה מדפיסה. העמוד מתחבר ל-OpenCode במחשב המקומי.
המודלים והסשנים שלך
לבחור כל מודל שהוגדר בשרת באמצעות /models. הסשנים, הסוכנים והמודלים מגיעים משרת OpenCode שלך.
כלי עריכה, lint ובדיקות
תוסף 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.