3-1. 일주일 만에 프레임워크 모양 갖추기 (3/30 ~ 4/6)
첫날 (3/30, 30커밋)
Initial commit: Suji multi-backend desktop framework로 시작해 하루 만에 프레임워크의 골격이 섰다.
- PoC 폴더 정리, 모듈 임포트 구조 확립
- config 파서 — TOML + JSON 이중 지원으로 시작했다가 같은 날 JSON 전용으로 되돌렸다(의존성 하나를 줄이는 쪽을 택했다)
- CLI
dev/build/run과 config 기반 워크플로, 단일 백엔드 예제 suji init프로젝트 스캐폴딩- Rust SDK(
#[suji::command]매크로)와 Go SDK(구조체 바인딩) - 이벤트 시스템(pub/sub) — Zig 코어 + JS 브릿지
- Zig 내장 백엔드(comptime builder 패턴)
- 테스트 24 → 33개
CEF를 붙인 날 (4/2, 49커밋)
4월 1일에 플러그인 시스템과 첫 공식 플러그인(state), 바이너리 데이터용 로컬 HTTP asset 서버, 그리고 CEF PoC와 플랫폼 추상화(src/platform/cef.zig)가 들어갔다. 다음 날 CEF가 실제 IPC까지 연결됐다.
- CEF IPC 레이어 — V8Handler + CefProcessMessage + BackendRegistry 브리지
- macOS 키체인 팝업 회피 —
--use-mock-keychain+ ad-hoc codesign - Electron 호환 키보드 단축키 — NSMenu Edit 메뉴 + CefKeyboardHandler
suji://커스텀 프로토콜 도입,webview.h의존 제거- macOS
.app번들링 (suji build --cef) - 백엔드 핫 리로드 — 파일 워처 + dylib reload + RwLock 안전성
- Windows 빌드 지원과 CI 러너
- E2E 24개(Puppeteer CDP, 204ms)와 IPC 테스트 54개
같은 날 libnode 임베드로 Node.js 백엔드가 붙었다. libnode 빌드 워크플로를 따로 만들고 CI에서 내려받게 했으며, Windows는 vcbuild.bat dll로 빌드했다.
SDK를 갖추다 (4/3~4/6)
- Node.js 백엔드에 크로스 호출/이벤트 API, async invoke, GPU 비활성화
suji.jsonJSON Schema@suji/nodeSDK와 예제 전환, 이벤트 수신(on/off/once)BrowserWindowAPI 설계와 멀티 윈도우 PoC (4/6)
여기서 첫 구간이 끝난다. 4월 7일부터 23일까지는 커밋이 없다 — 이 시기에는 zntc 쪽 작업이 이어졌다.
이 시기의 결정
- config는 JSON 하나로. 시작 첫날에 TOML을 넣었다 뺐다. 파서 의존성과 문서화 비용이 두 배가 되는 것이 이유였다.
- 브라우저는 CEF 하나로. 초기
webview.h경로를 걷어내고 CEF 단일 전략으로 정리했다(PLAN.md갱신, 4/1). - 백엔드는 dylib + dlopen. 언어 중립성을 얻는 대신 핫 리로드와 RwLock 안전성 같은 문제를 직접 떠안았다.