상태
console.log정상 운영console.clear드물게 사용Yoga정상 운영Turbolog encoder정상 운영DevTools Throttler준수textjs.org정상 운영실시간 벤치마크
@textjs/core 파이프라인은 이 탭의 100×32 대시보드에서 실행되며 메모리 내 콘솔에 프레임을 기록해요.
- 전체 프레임
- —
- 레이아웃 + 페인트 + 인코딩
- 타이핑
- —
- 1줄 편집
- 유휴 프레임
- —
- 변경 없음
- %c 스팬
- —
- 3,200개 셀
페이지가 유휴 상태가 되면 자동으로 시작해요.
성능 기록
각 마일스톤에서 같은 기기(Apple M5 Pro · Bun 1.4.4)로 packages/core/test/perf.test.ts를 실행해요. 1,000프레임의 평균이에요.
| 릴리스 | 전체 프레임 | 타이핑 | 유휴 | %c 스팬 |
|---|---|---|---|---|
0.1.02025년 3월 · @textjs/core · 7c91cea | 0.194ms | 0.065ms | 0.043ms | 205 |
0.2.02025년 7월 · textjs.org · 92437cc | 0.192ms | 0.067ms | 0.042ms | 205 |
0.3.02025년 11월 · 10× input · 8c2d1b1 | 0.205ms | 0.065ms | 0.043ms | 146 |
0.3.02025년 11월 · Mobile pass · e2e6e46 | 0.212ms | 0.067ms | 0.045ms | 146 |
0.4.02026년 5월 · Zero-flash frames · f007ade | 0.184ms | 0.046ms | 0.028ms | 146 |
1.0.02026년 10월 · Text.js 1.0 · 57968b6 | 0.163ms | 0.011ms | 0.000ms | 149 |
DevTools 프런트엔드
Chrome for Testing에서 bench/devtools 실행: 실행당 5초 동안 빈 페인트, 전달된 프레임과 표시 지연을 측정해요. 측정 방법.
| 드라이버 | FPS | 빈 페인트 | 페인트 / 출력 | 지연 p50 |
|---|---|---|---|---|
| 덧붙이기 (배포 중) | 15 | 1.0% | 74 / 75 | 10.4ms |
| 프레임마다 지우기 | 15 | 70.6% | 70 / 75 | 60.4ms |
| 덧붙이기, 간격 제한 없음 | 60 | 0.8% | 67 / 295 | 31.2ms |
| 프레임마다 지우기 | 60 | 81.1% | 45 / 300 | 9.8ms |
지난 장애
최신순이에요. 시간은 UTC 기준이에요.
2026년 10월
iOS Safari에서 헤더 아래에 걸리는 페이지10월 27일 – 2026년 10월 28일 · 해결
- 해결
이 장애는 해결됐어요.
- 모니터링 중
수정 사항을 배포했어요. 스크롤 앵커링을 껐어요(
overflow-anchor: none). 모니터링하고 있어요. - 원인 확인
아래로 스크롤했다가 다시 올라오면 메인 제목이 여전히 고정 헤더 아래에 걸릴 수 있어요. Safari의 스크롤 앵커링이 스크롤 위치를 조정하고 있어요.
- 모니터링 중
수정 사항을 배포했어요. 이제 해당 요소는 가로로만 스크롤되며,
scrollbar-gutter: stable은 마우스 기기에만 적용돼요. - 원인 확인
파일 탭, 코드 블록, 본문 표는 활성 탭 밑줄 때문에 세로로 1px 넘쳐서 양쪽 축으로 스크롤되며, iOS는 페이지에 전달할 세로 스와이프를 이 요소들에 전달해요.
scrollbar-gutter: stable도 iOS에서 첫 스크롤이 튀게 해요. - 조사 중
iOS Safari에서 textjs.org 페이지를 맨 위로 다시 스크롤할 수 없다는 제보를 조사하고 있어요.
이 장애로 영향을 받은 컴포넌트: textjs.org.
사후 분석
textjs.org 페이지는 로딩 중에 위치가 바뀌지 않아 스크롤 앵커링이 보정할 부분이 없었어요. iOS Safari에서는 메인 영역을 고정 헤더 아래에 붙잡아 맨 위로 돌아가는 스크롤을 막았어요. 이제 textjs.org에서
?debug=scroll을 사용하면 스크롤, 터치, 크기 변경 이벤트를 실시간으로 확인하고, 코드로 실행한 각 포커스 또는 스크롤 호출의 호출자를 볼 수 있어요.수정 사항:
297c5d7,55da525,8424fcd· 변경 기록: 1.0.0- 해결
CI에서 린트 규칙 테스트 실패2026년 10월 23일 · 해결
- 해결
이제 테스터는 테스트가
RuleTester.itOnly를 호출할 때it.only를 지연해서 읽어요. CI가 통과하고 있어요. - 원인 확인
CI환경 변수가 설정된 상태에서it.only를 읽으면 Bun이 오류를 던져요. 규칙 테스터가 가져오기 시점에RuleTester.itOnly = it.only를 할당해서 로딩에 실패해요. - 조사 중
CI에서
eslint-plugin-textjs테스트 모음이 규칙 테스트를 실행하기도 전에 실패해요. 로컬 실행은 통과해요.
사후 분석
@typescript-eslint/rule-tester는 테스트 함수를RuleTester의 정적 속성으로 받아요. 수정 사항은it.only를 함수로 감싸요. 영향을 받은 패키지나 페이지는 없어요.수정:
eca3f78- 해결
/playground와 /opencode의 레이아웃 이동10월 21일 – 2026년 10월 22일 · 해결
- 해결
모든 라우트의 누적 레이아웃 이동이 0이에요.
- 모니터링 중
수정 사항을 배포했어요. 두 페이지가 하나의 패드 레이아웃을 공유하고, “콘솔 맞춤”을 움직이지 않고 크기를 덧붙여요. 모니터링하고 있어요.
- 원인 확인
콘솔 크기 컨트롤이 하이드레이션 후 측정한 크기를 레이블에 덧붙여서(
Fit console · 120×36), “콘솔 맞춤” 텍스트 노드가 움직여요. 패드의 위아래 행 높이도 두 페이지에서 달라서 페이지 이동 시 패드가 다시 중앙에 맞춰져요. - 조사 중
레이아웃 이동 검사에서 /playground와 /opencode의 누적 레이아웃 이동이 0.0001로 나왔어요. 검사 대상인 다른 모든 라우트는 0으로 나왔어요. 두 페이지 사이를 이동할 때 포커스 패드도 움직여요.
이 장애로 영향을 받은 컴포넌트: textjs.org.
사후 분석
이제 패드의 위아래 슬롯 높이가 고정되고 모든 데모가 같은 행을 확보해서, 페이지나 데모를 바꿔도 아무것도 움직이지 않아요. OpenCode 연결 패널은 모든 상태에서 상태 표시줄 하나를 보여 주며, 하이드레이션 전까지 스켈레톤을 표시해요.
apps/web/scripts/e2e-layout.mjs는 라우트, 데모, 뷰포트 크기, 연결 상태가 달라도 상자 영역이 같은지 검증해요.수정:
8f22b9b· 변경 기록: 1.0.0- 해결
npm에서 패키지 이름 textjs 사용 불가10월 14일 – 2026년 10월 15일 · 해결
- 해결
이 장애는 해결됐어요.
- 모니터링 중
프레임워크와 CLI 패키지는 이제
@textjs/core,@textjs/react와 같은 스코프의@textjs/next예요. 가져오기 경로가textjs에서@textjs/next로 바뀌어요. - 원인 확인
textjs라는 이름은 2016년 3월 25일부터 다른 npm 패키지가 사용하고 있어요. - 조사 중
프레임워크 패키지
textjs를 npm에 게시하면403 Forbidden으로 실패해요.
사후 분석
Text.js 1.0부터 앱은
textjs대신@textjs/next에서 가져오며, OpenCode 브리지는 어느 디렉터리에서나 실행되는bunx @textjs/app proxy예요.- 해결
2026년 9월
줄 경계의 빈 페인트 레이어9월 15일 – 2026년 9월 16일 · 해결
- 해결
이 장애는 해결됐어요.
- 모니터링 중
수정 사항을 배포했어요. 이제 구간이 이어지지 않는 줄 경계에서는 먼저
%c를 빈 스타일로 재설정해 DevTools가 일반 줄바꿈을 출력해요. 프레임마다 커튼은 하나예요. - 원인 확인
스타일 구간이 줄 경계에서 끝나면
\n이 해당 구간의%c스팬 안에 기록돼요. DevTools는 줄바꿈에서 스팬을 나누고, 비어 있는 나머지 부분은contain: paint가 적용된display: inline-block스팬이 되어 별도의 페인트 레이어를 가져요. - 조사 중
DevTools 프레임의 대부분 줄 경계에 빈
<span>요소가 생기고, 일부 프레임에서 커튼 스팬이 중복되는 현상을 조사하고 있어요.
이 장애로 영향을 받은 컴포넌트: Turbolog encoder.
사후 분석
스타일이 같은 스팬은 여전히 줄 경계를 넘어 병합돼요. 커튼도 별도 줄로 옮겼어요. DevTools는 소스 링크(
VM12:1)를 메시지 첫 줄 오른쪽에 띄우는데, 인라인 커튼은 링크를 0번 줄 옆에 남겨 줄 너비를 줄였어요.- 해결
2026년 8월
console.clear 이후 표시 지연 증가8월 27일 – 2026년 8월 31일 · 해결
- 해결
bench/devtools의 표시 지연 중앙값은 10.4ms예요. 수정 사항은 Text.js 1.0에 포함돼요. - 모니터링 중
수정 사항을 배포했어요. 콘솔을 지우는 프레임 뒤에는 렌더러가 한 번 110ms를 기다려요. 이후 프레임은 DevTools의 이전 새로고침으로부터 50ms가 넘게 지난 뒤 도착해 즉시 처리 경로를 사용해요.
- 원인 확인
콘솔을 지우면 DevTools가 “콘솔을 지웠습니다” 줄을 삽입해요. 이 줄이 스로틀러의 즉시 실행 슬롯을 차지해 다음 프레임을 50ms 타이머로 밀어내요. 프레임 간격이 66ms라서 이후 모든 프레임도 이 타이머에 머물러요.
- 조사 중
bench/devtools에서 콘솔을 지운 뒤 표시 지연의 중앙값은 63ms예요. 이후 모든 프레임에서도 같은 수준의 지연이 유지돼요.
이 장애로 영향을 받은 컴포넌트: DevTools Throttler, console.clear.
- 해결
DevTools 콘솔에서 스피너로 인한 줄 정렬 오류8월 11일 – 2026년 8월 12일 · 해결
- 해결
이 장애는 해결됐어요. 수정 사항은 Text.js 1.0에 포함돼요.
- 모니터링 중
수정 사항을 배포했어요. 이제 기본
dots스피너는 Menlo에서 각각 1개 셀을 차지하는 사분면 블록(▘ ▝ ▗ ▖)을 그려요. 터미널에서는variant="braille"로 점자 프레임을 사용할 수 있어요. - 원인 확인
기본 스피너는 점자 패턴(U+2800~U+28FF)을 그려요. Text.js는 각 패턴을 1개 셀로 측정하지만, macOS의 DevTools 콘솔 글꼴인 Menlo에는 점자 글리프가 없어요. 대체 글리프가 셀보다 넓어 줄의 나머지 부분을 오른쪽으로 밀어요.
- 조사 중
macOS에서는
<Spinner>가 포함된 줄이 DevTools에서 어긋나요. 스피너 오른쪽의 셀이 그리드를 벗어나요.
이 장애로 영향을 받은 컴포넌트: console.log.
- 해결
2026년 5월
DevTools 콘솔의 빈 화면 페인트 증가5월 5일 – 2026년 5월 19일 · 해결
- 해결
수정 사항은 Text.js 0.4.0으로 출시됐어요. 빈 화면 페인트는 1.0%이며, 모두 첫 프레임에서 발생해요.
- 모니터링 중
이제 textjs.org는 프레임을 지우는 대신 덧붙여요. 너비가 0인 커튼 스팬이 이전 프레임을 가리고, 프레임 간격은 최소 66ms로 유지해요.
- 원인 확인
DevTools는
console.clear()를 동기적으로 적용하지만 새 메시지는 50ms 스로틀로 그려요. 각 프레임은 이전 프레임을 즉시 지우고 최대 50ms 뒤에 그려져요.bench/devtools에서 100×32 대시보드는 15fps일 때 DevTools 페인트의 70.6%, 60fps일 때 81.1%에서 빈 화면이었어요. - 조사 중
부하가 걸릴 때 DevTools 콘솔이 프레임 사이에 빈 화면으로 깜박인다는 보고를 조사하고 있어요.
이 장애로 영향을 받은 컴포넌트: console.clear, DevTools Throttler.
사후 분석
Turbolog는 0.1.0부터 변경된 프레임마다
console.clear()와console.log()를 한 번씩 보냈어요. Chrome for Testing에서 실제 DevTools 프런트엔드를 구동하는bench/devtools는 이 장애를 측정하려고 만들었으며, 위 DevTools 프런트엔드 표의 수치를 산출했어요.수정:
f007ade· Turbolog: 깜빡임 제거 · 변경 기록: 0.4.0- 해결
2026년 4월
콘솔 프레임의 파일 경로에 링크 스타일 적용4월 14일 – 2026년 4월 15일 · 해결
- 해결
이 장애는 해결됐어요.
- 모니터링 중
수정 사항을 배포했어요. 셀이 링크를 허용하지 않으면 인코더가
path:line,//host:port,data:텍스트에 워드 조이너(U+2060)를 삽입해요. - 원인 확인
DevTools는 콘솔 메시지의 URL,
path:line,//host:port텍스트를 링크로 바꾸고 테마 색상을 강제로 적용해요. 인코더는 이미://와www.를 분리하고 있었지만,path:line과 스킴 뒤의//host:port는 여전히 일치해요. - 조사 중
src/app.tsx:12나http://localhost:3000같은 텍스트가%c스타일 대신 DevTools의 링크 색상으로 렌더링돼요.
이 장애로 영향을 받은 컴포넌트: Turbolog encoder.
사후 분석
://와www.에는 0.1.0부터 워드 조이너가 포함돼 있어요. 클릭할 수 있어야 하는 셀은 allow-link 속성을 설정하며, 변경 없이 기록돼요.- 해결
2025년 11월
콘솔 앱의 키 입력 지연11월 4일 – 2025년 11월 18일 · 해결
- 해결
수정 사항은 Text.js 0.3.0으로 출시됐어요.
- 모니터링 중
수정 사항을 배포했어요. 이제 키 입력이나 붙여넣기 같은 개별 입력은 같은 작업 안에서 동기적으로 렌더링돼요. 다른 업데이트는 여전히
requestAnimationFrame에서 커밋해요. - 원인 확인
키 입력을 포함한 모든 업데이트는 다음
requestAnimationFrame을 기다린 뒤 React가 커밋하고 프레임을 로그에 기록해요. - 조사 중
콘솔 앱에서 타이핑하면 키 입력보다 반영이 늦으며, textjs.org의 OpenCode에서 가장 뚜렷해요.
이 장애로 영향을 받은 컴포넌트: textjs.org.
사후 분석
키 입력은 더 이상 다음 애니메이션 프레임을 기다리지 않아요. 타이머나 스트리밍 데이터처럼 입력에서 비롯되지 않은 커밋은 여전히 애니메이션 프레임별로 일괄 처리해요.
수정:
8c2d1b1· 변경 기록: 0.3.0- 해결