2026-04-01
날짜는 UTC 기준으로 나눴습니다(9월 22일부터는 한국 시간 기준). 커밋은 커미터 시각(committer date), PR은 생성·병합 시각으로 분류했습니다. 목록은 2026-10-06 KST에 GitHub에서 다시 조회해 보강했습니다. 공개 저장소의 기본 브랜치 활동만 포함합니다.
요약 (AI 작성)
zntc(당시 이름 ZTS)는 Flow 파서를 React Native 실제 파일 50개를 모두 통과하는 수준까지 끌어올렸습니다. Flow와 JSX를 별도 옵션으로 나누고 --jsx-in-js와 --platform=react-native 프리셋을 두었으며(#594), component/hook 문법·indexed access type(#595), 함수 타입 파라미터와 extends 바운드(#596), 중첩 괄호 함수 타입·conditional type·type guard·infer·keyof·JSX 안 주석(#597)을 차례로 지원했습니다. JSX 변환은 React.createElement 고정에서 classic/automatic/automatic-dev 3모드로 확장됐고(#591), 이중 순회와 memmove를 없애는 emit 최적화가 뒤따랐습니다.
번들러에서는 JSON 모듈을 파싱 시점에 export default ESM AST로 바꿔 JSON 전용 경로를 없앴고(#589), Flow 타입 전용 노드가 지워진 자리의 빈 인덱스로 죽던 문제(#592), declare module 안의 export와 JSX 속성 뒤 정규식 오인식(#593)도 고쳤습니다. 코드 생성 쪽은 CJS re-export에서 default 예약어를 식별자로 내보내던 버그(#602), 구조 분해의 하이픈 포함 문자열 키를 점 표기로 내던 버그(#601), ES5 다운레벨링 시 템플릿 리터럴 줄바꿈과 U+2028/U+2029 이스케이프 누락(#600)을 수정했습니다. --watch-json 초기 빌드가 NDJSON 프로토콜을 깨던 문제(#598)를 고치고, 테스트 패키지를 packages/에서 tests/로 옮겼으며(#599), 로드맵에 상용 번들러 대비 미지원 기능 목록을 보탰습니다(#590).
suji는 이날 CEF 146 통합을 시작했습니다. CEF POC와 플랫폼 추상화, V8Handler·프로세스 메시지 기반 IPC 계층을 넣고 JS API를 기존 webview 브리지(invoke·emit·chain·fanout·core)와 맞췄으며, Promise 관리를 JS 쪽으로 옮기고 JSON 주입을 퍼센트 인코딩으로 막았습니다. dlopen 기반 플러그인 시스템과 State 플러그인, 바이너리 데이터용 로컬 HTTP 에셋 서버, Electron 스타일 macOS 메뉴 막대와 단축키, 앱 안 DevTools 토글, Puppeteer CDP로 붙는 E2E 테스트 24개, suji build --cef의 macOS .app 번들링도 추가했습니다. DevTools는 ALLOY 모드 충돌 때문에 CDP 외부 브라우저 방식을 거쳤다가 전용 클라이언트로 앱 안에서 여는 방식으로 돌아왔습니다.
bungae는 Rolldown 기반(oxc)과 Bun.Transpiler 기반 번들러 구현을 지우고 Babel 그래프 번들러만 남겼으며(#40), rolldown 서브모듈과 CI의 Rust·pnpm 빌드 단계를 걷어 낸 뒤 포맷 검사와 벤치마크 실행 경로를 바로잡았습니다.
공개 커밋 61개, 해당일 생성 또는 병합된 PR 15개를 정리했습니다. PR 생성 15개·병합 15개는 같은 PR이 양쪽에 포함될 수 있습니다.
커밋
ohah/bungae
- fix(ci): run benchmark from packages/bungae for correct module resolution
- fix(ci): fix formatting issues and workspace dependency resolution
- fix(ci): fix format check and benchmark runner
- chore: remove rolldown build steps from lint CI workflow
- chore: remove rolldown submodule and CI dependencies
- chore: remove oxc-bundler and bun-bundler implementations
ohah/suji
- Simplify: remove --disable-web-security, APFS clone, hardlink helpers, fix leak
- Add macOS .app bundling (suji build --cef)
- Simplify E2E tests: invoke helper, parameterized tests, timeout fixes
- Add E2E tests: 24 tests via Puppeteer CDP (all pass in 204ms)
- Update PLAN: Step 5 done, merge Step 4 into Step 7 (bundling)
- Add 22 more CEF IPC tests (total 54)
- Restore in-app DevTools with dedicated client, toggle from DevTools window
- DevTools via CDP browser (CEF 144+ macOS in-app DevTools crash)
- Fix DevTools: open via CDP in system browser (ALLOY mode limitation)
- Fix DevTools crash: pass null window_info (Alloy style not supported for DevTools)
- Match Electron menu bar: full View/Edit/Help menus, DevTools toggle fix
- Fix DevTools close killing main app: distinguish main vs DevTools browser
- Full Electron-style macOS menu bar: App, File, Edit, View, Window
- Add Electron-compatible keyboard shortcuts via CefKeyboardHandler
- Add macOS keyboard shortcuts (Cmd+C/V/X/A/Z) via NSMenu Edit menu
- Add CEF IPC tests: jsonToHexEscape (8), chain parsing (2), roundtrip
- Simplify: fix injection, remove dead code, cleanup debug logs
- Fix plugin path: fallback to suji binary-relative plugins/ directory
- Fix CEF IPC: JS-managed Promises, EventBus→renderer push, fanout/core, rpath
- Align CEF JS API with webview ipc.zig: invoke(channel, data, options), emit, chain, fanout, core
- Fix macOS keychain popup: add --use-mock-keychain + ad-hoc codesign
- Add CEF IPC layer (Step 2-3): V8Handler + CefProcessMessage + BackendRegistry bridge
- Update PLAN.md: CEF single strategy, plugin system design, feature gap analysis
- Add CEF POC + platform abstraction (src/platform/cef.zig)
- Add local HTTP asset server for binary data
- Add plugin system + State plugin with SDK wrappers
ohah/zntc
- fix(codegen): CJS re-export에서 default 예약어를 식별자로 출력하던 버그 수정
- fix(codegen): destructuring 문자열 키를 bracket notation으로 출력
- fix(codegen): U+2028/U+2029 이스케이프 추가 (/simplify 리뷰)
- fix(codegen): 템플릿 리터럴 → 문자열 연결 변환 시 줄바꿈 이스케이프 누락
- fix: lint/fmt 대상에서 tests/test262 서브모듈 제외
- refactor: 테스트 패키지를 packages/ → tests/로 이동
- refactor: /simplify 리뷰 반영
- style: oxfmt 포맷 적용
- fix(watch): --watch-json 초기 빌드 stdout NDJSON 프로토콜 준수
- refactor(flow): /simplify — defer 버그 수정 + skipBalanced 통합 + JSX 주석 newline
- feat(flow): RN fixtures 50/50 전체 통과
- feat(flow): 중첩 괄호 함수 타입 + conditional type + type guard
- feat(flow): 함수 타입 파라미터 + extends 바운드 + shorthand 함수 타입
- refactor(flow): /simplify 헬퍼 추출 + RN 실파일 50개 회귀 테스트
- refactor(flow): /simplify + Flow+JSX RN integration 테스트 16개 추가
- feat(flow): component/hook syntax + indexed access type + JSX spread 수정
- refactor(parser): /simplify — 테스트 헬퍼 통합 + jsx_in_js 가드 통일
- feat(parser): Flow와 JSX 분리 + --jsx-in-js 옵션 + --platform=react-native 프리셋
- fix(test): globalThisAmbientModules를 expectPass로 변경
- test(parser): ambient module export + JSX attr regex 회귀 테스트 8개 추가
- refactor(parser): /simplify — 중복 제거 + 에러 보고 일관성
- fix(parser): ambient module export 허용 + JSX 속성 {expr} 뒤 regex 오스캔 수정
- fix(bundler): prevent crash on .none NodeIndex in transformer/codegen
- test(codegen): JSX 런타임 테스트 케이스 확장 (26개 추가)
- perf(codegen): JSX emit 최적화 — 이중 순회/memmove/trim 제거
- feat(codegen): JSX 런타임 3모드 지원 (classic/automatic/automatic-dev)
- docs(roadmap): 상용 번들러 대비 미지원 기능 목록 확장
- fix(ci): playwright install을 packages/e2e 컨텍스트에서 실행
- refactor(bundler): JSON → ESM AST 변환으로 JSON 특수 경로 제거
PR (해당일 생성/머지)
상태는 조회 시점 기준입니다. merged는 아래 대상 브랜치에 병합됐다는 뜻이며, 기능 브랜치 병합과 main 반영을 구분합니다. 같은 PR이 생성일과 병합일 양쪽 기록에 나타날 수 있습니다.