터미널에서 실행

text run과 renderToTerminal로 터미널에서 App Router 앱이나 단일 컴포넌트를 렌더링하세요.

text run은 터미널에서 App Router 앱을 렌더링해요. 레이아웃, 컴포넌트, 키맵과 라우트 핸들러는 브라우저와 공유해요. 출력에는 %c 스팬 대신 트루컬러 ANSI를 사용해요.

text run              # render ./app at /text run --path /logs # start on another route

종료하려면 Ctrl+C를 누르세요. text run에는 Bun이 필요해요.

text run

text run은 app/의 모든 파일을 가져오고, 메모리 내 히스토리로 App Router를 마운트한 뒤 전체 화면에 그려요. <Link>, useRouter(), notFound(), redirect()는 변경 없이 작동해요.

동일 출처의 fetch("/api/...") 호출은 text dev가 요청을 처리할 때와 똑같이 프로세스 내에서 route.ts 핸들러를 실행해요. 다른 URL은 네트워크로 요청해요.

renderToTerminal

단일 컴포넌트나 직접 만든 CLI에서는 다음과 같이 사용하세요:

cli.tsxtsx
import { renderToTerminal } from "@textjs/app/terminal";import { App } from "./app";const app = await renderToTerminal(<App />);await app.waitUntilExit();

useApp().exit()는 마운트를 해제하고 터미널을 복원해요.

옵션설명
stdin / stdout기본값 process.stdin / process.stdout
cols / rows고정 크기 (기본값: 터미널 크기에 맞춤)
altScreen종료 시 스크롤백 복원 (기본값 true)
mouse휠 스크롤 (기본값 true)
exitOnCtrlC기본값 true
fps프레임 상한 (기본값 60)
patchConsole종료할 때까지 console.* 출력 보류 (기본값 true)
theme / transparentcreateConsoleRoot와 동일

출력

각 프레임은 줄 단위로 차이를 비교해요. 변경된 줄만 출력하며, 동기화 출력 마커로 감싸서 이를 지원하는 터미널에는 덜 그려진 프레임이 표시되지 않아요. 유휴 상태의 앱은 아무것도 출력하지 않아요.

입력

원시 모드의 stdin은 브라우저가 생성하는 것과 같은 이벤트로 파싱돼요: 보조 키가 조합된 방향키와 기능 키, Alt 조합, 브래킷 붙여넣기, SGR 마우스 휠, kitty 키보드 프로토콜이에요. 다른 곳에서도 사용할 수 있도록 TerminalInputParser와 parseTerminalInput을 내보내요.

차이점

기능DevTools터미널
프레임 속도약 15fps최대 fps
그리드 크기도킹된 콘솔터미널 창
<Image src>캔버스로 로드pixels 사용
console.log앱의 프레임종료할 때까지 보류
GitHub에서 이 페이지 편집