31P by GN⁺ 21시간전 | ★ favorite | 댓글 4개
  • 메인 프로세스에 Bun, 네이티브 바인딩에 Zig를 사용하는 TypeScript 기반 데스크톱 앱 프레임워크
  • macOS, Windows, Ubuntu를 모두 지원하며, 인스톨러·자동 업데이트·차등 패치 아티팩트를 자동 생성
  • 창 제어, 메뉴, 단축키, 클립보드, 대화상자, 세션 저장소 등 완전한 데스크톱 기능 세트를 제공하며, OOPIF 기반의 안정적 웹뷰 구현
  • 내부 구조는 Bun의 FFI와 공유 메모리 모델을 활용해 다중 프로세스 환경에서도 효율성을 유지
  • Electron과 Tauri의 한계를 경험한 개발자가 2년간 Zig, C, C++, Objective-C를 학습하며 직접 개발
  • 5분 안에 코드 작성, 10분 안에 배포까지 가능한 통합 워크플로우가 목표

Electrobun 프로젝트 개요 및 목표

  • Bun으로 메인 프로세스를 실행하고 웹뷰 TypeScript를 번들링하며, Zig로 네이티브 바인딩을 작성하는 구조
  • 메인 프로세스와 웹뷰 모두 TypeScript로 작성하되, 프로세스 간 격리(isolation) 를 유지하면서 빠르고 타입이 지정된 RPC 통신 제공
  • 자체 추출 앱 번들 크기 약 12MB(시스템 웹뷰 사용 시, 대부분 Bun 런타임 크기)
  • bsdiff 기반 차등 업데이트로 패치 크기 최소 14KB까지 축소 가능
  • 5분 안에 코드 작성 시작, 10분 안에 배포까지 완료할 수 있는 하나의 통합 워크플로우 제공이 목표
  • npx electrobun init 명령어로 템플릿 기반 프로젝트 시작 가능

제작 배경

  • Visual Basic 6 시절부터 데스크톱 앱을 만들어 왔으며, Adobe AIR 시대에 여러 스타트업 제품을 수천 명에게 배포했던 경험이 원점
  • 20년 이상 스타트업 초기 엔지니어로 유니콘 규모 제품을 구축·확장해 왔지만, 데스크톱 개발 환경은 오히려 퇴보
  • 하이브리드 웹 브라우저+코드 에디터+PTY 터미널인 co(lab) 을 만들다가 너무 많은 불편함에 부딪혀 직접 프레임워크 제작을 결심
  • 첫 버전은 Electron으로 만들었으나, 코드 서명·공증·배포·업데이트 과정이 앱 개발보다 프레임워크와 싸우는 느낌
  • 웹처럼 지속적 배포(continuous shipping) 를 원했지만, 기존 툴체인이 이를 필요 이상으로 어렵게 만듦
  • Tauri도 시도했으나 Rust가 모든 개발자에게 적합하지 않다고 판단했고, 당시 Bun은 1.0 출시 수개월 전 상태여서 직접 개발에 착수

macOS에서 크로스플랫폼으로

  • 초기에는 macOS 앱만 빌드 가능했으나, 현재는 macOS, Windows, Ubuntu 모두에서 빌드·배포를 1급으로 지원
  • 인스톨러, 자동 업데이트 아티팩트, 차등 패치(differential patches) 가 모두 자동 생성됨
  • 정적 호스트(R2, S3, GitHub Releases)만 연결하면 배포 완료
  • 차등 업데이트는 C에서 Zig로 포팅하고 SIMD와 zstd로 최적화한 zig-bsdiff가 담당
  • Bun의 FFI가 안정화되면서 기존에 작성한 Zig FFI 계층 대부분을 Bun으로 대체
  • 아키텍처가 긍정적으로 전환되어, Bun이 워커 생성 시 공유 메모리를 사용하므로 다중 프로세스에서도 효율 유지

출시된 기능

  • 현재 완전한 프레임워크로서 크로스플랫폼 윈도우 컨트롤, 메뉴, 단축키(accelerators), 글로벌 숏컷, 클립보드, 다이얼로그, 웹뷰 파티션, 세션 스토리지, 페이지 내 검색(find-in-page), 번들링·업데이트 툴링 등을 제공
  • OOPIF(Out-of-Process Iframe) 구현이 실제로 동작하는 수준에 도달
    • Electron의 <webview> 태그는 Chromium에서 deprecated되었으나 아직 대안이 마련되지 않은 상태
    • <electrobun-webview> 는 DOM 포지셔닝, 프로세스 격리, 레이어링이 정상 작동하는 진정한 "super iframe"
    • 커서 깜빡임(cursor flicker) 문제 없이, 브라우저 엔진 패치 없이 크로스플랫폼 동작

플랫폼 지원 현황

  • macOS 14+: 공식 지원
  • Windows 11+: 공식 지원
  • Ubuntu 22.04+: 공식 지원
  • 기타 Linux 배포판(gtk3, webkit2gtk-4.1): 커뮤니티 지원

향후 계획

  • co(lab)을 Electrobun 위에 전면 재작성 완료, v1 안정화를 기반으로 co(lab) 개발에 본격 집중
  • 프레임워크가 플랫폼 변동(platform churn) 에 흔들리지 않고 야심찬 장기 프로덕트를 구축할 수 있을 만큼 안정화된 것이 핵심 목표
  • Discord 커뮤니티가 성장 중이며, 베타 테스트·이슈 제출·피드백으로 기여한 사용자들이 프레임워크 형성에 기여
  • Electrobun은 Blackboard 에서 출시하는 첫 번째 주요 프로덕트

"코드 서명·공증·배포·업데이트 과정이 앱 개발보다 프레임워크와 싸우는 느낌"

본문의 제작 배경에 위와 같은 언급이 있는데,
실제 앱 개발보다 배포하는데 더 많은 공수가 들어가는 경우가 있는데
이 문제를 fix한 것으로 만으로도 높이 평가합니다.

플러터에 zig 붙이는 것도 꽤 쉽고 간단하게 되더군요.
Dart/c ffi 문서와 큰 차이 없이...

왜 주요 Linux 배포판들이 기본 WebView를 제공하지 않는지 의문임. 앱 생태계 확장에 큰 장애임

GUI 환경의 운영체제라면 이제 WebView가 기본 컴포넌트로 자리 잡아야 할 것 같아요.

Hacker News 의견들
  • 안녕하세요, Electrobun 제작자임
    이번에 v1 안정 버전을 출시했음. 아키텍처를 고정했고, 만약 버그나 Electron/Tauri에서 쓰던 API가 필요하면 GitHub 이슈에 남겨주면 우선순위로 처리할 예정임
    지난 한 달간 5만 줄의 코드를 수정하며 안정화 작업을 마쳤음
    Electrobun으로 만든 오픈소스 프로젝트 Colab(웹 브라우저 + 코드 에디터 + PTY 터미널)의 데모 영상도 있음
    Electrobun은 기본적으로 시스템 WebView를 사용하지만, bundleCEF 옵션으로 CEF를 포함할 수도 있음. 구조적으로 WebView에 독립적이라 Servo나 Ladybird가 준비되면 바로 대체 가능함
    또한 각 릴리스마다 zstd 기반의 자동 압축 패키지를 생성해 초기 다운로드 크기를 줄이고, 업데이트는 14KB 수준으로 작게 유지할 수 있음

    • 타입 정의가 문서와 일치하는지 궁금함. 예를 들어 BrowserWindow에 partition 키를 넣으면 TypeScript 오류가 발생함
    • Electrobun을 만들어줘서 고맙다는 인사
  • Electrobun이 매우 유망해 보임. 다음 프로젝트를 이걸로 만들 예정임
    Full TypeScript 스택에서 가장 생산성이 높음. Rust나 긴 컴파일 과정 없이 Electron보다 가볍고 빠른 대안을 얻게 되어 기쁨

    • 첫 번째 Tauri 앱을 막 완성했는데, Windows 빌드가 너무 오래 걸려 놀랐음. Electrobun을 꼭 써볼 생각임
  • Discord에서 많은 게임 개발자들이 Electrobun으로 데스크톱 게임을 실험 중임
    Steam 인디 게임 시장에서 Electron의 일부를 대체할 가능성이 있음
    특히 bun --watch game.ts즉시 리로드되는 TypeScript 게임 개발 경험이 매우 빠르고 매끄러움

    • 웹 개발을 많이 하는 입장에서, 도구를 떠나서도 Bun은 성능 면에서 큰 도약
    • Electron으로 만든 게임이 많지는 않음. CrossCode 정도가 기억남. 대부분은 Unity나 Godot을 사용함
    • 어떤 Discord 서버에서 그런 실험이 이루어지는지 궁금함. 참여하고 싶음
    • Node도 이제 watch 모드와 TypeScript 실행을 지원함
  • Tauri의 주요 문제는 시스템 WebView 품질이 OS마다 다르다는 점임
    Linux에는 공식 WebView가 없고, Windows 7이나 초기 10에서는 Edge WebView를 쓰지 않음. 이런 차이 때문에 20초 이상 부팅이 걸리기도 함
    100MB 절약을 위해 이런 트레이드오프를 감수해야 하는지 의문임
    대부분의 사용자는 빠른 인터넷을 쓰므로 다운로드 속도는 큰 문제가 아님
    Electrobun이 내장 Chromium 렌더러를 지원하는지 궁금했는데, 문서에서 명확하지 않았음

    • Electrobun은 기본적으로 시스템 WebView를 사용하지만, 필요 시 CEF(Chromium) 을 번들할 수 있음. 공식 문서에 명시되어 있음
    • 제품 사이트에도 “System’s native webview as renderer, CEF optional”이라고 되어 있음. 즉, 선택 가능함
    • Windows에서 Tauri 앱을 만들 때 embedded bootstrapper를 써야 했음. Electrobun은 이런 문제를 잘 해결한 것 같아 반가움
    • 왜 주요 Linux 배포판들이 기본 WebView를 제공하지 않는지 의문임. 앱 생태계 확장에 큰 장애임
    • Tauri에서도 CEF 기반 버전이 개발 중임. 관련 브랜치 참고 가능함. OS WebView 품질이 낮기 때문에 이 접근이 훨씬 나은 개선책이 될 것 같음
  • 제목에 이 글이 프로젝트 회고 블로그 포스트라는 점을 명시했으면 좋겠음
    실제 프로젝트는 공식 문서 링크로 보는 게 더 적절함

  • 프로젝트 메인 페이지는 여기
    인터페이스가 깔끔해 보이고, 나는 Zig에 익숙해서 Rust보다 접근하기 쉬울 듯함

  • 이번 주 회사에서 새 Electron 앱을 배포할 예정인데, Electrobun이 1년만 빨리 나왔어도 좋았을 것 같음
    Electron Builder가 업데이트와 서명 과정을 어느 정도 단순화해주지만 여전히 번거로움
    다음 개인 프로젝트에서는 Electrobun을 시도해볼 생각임

  • 글에서 notarizing과 stapling 문제를 언급했는데, Xcode를 쓰지 않으면 Apple이 이 과정을 매우 어렵게 만들어둠
    Windows도 CI 자동화가 쉽지 않음. Electrobun이 더 나은 솔루션을 제공한다면 매우 관심 있음

    • 대부분의 경우 기본 설정으로 지원됨. 환경 변수를 몇 개 설정하고 notarize: true로 빌드하면 됨
      Electrobun으로 서명과 공증을 여러 번 해봤는데 문제없었음. 복잡한 케이스를 위한 escape hatch도 제공함
      도움이 필요하면 Discord에서 DM 주면 됨. (Electrobun 관계자는 아니지만 Apple 공증 시스템의 고통을 잘 앎)
  • Electron 앱이 500MB 이상이라면, Electrobun의 14MB는 정말 작은 크기로 느껴짐

    • 일반적인 macOS용 Electron 앱(DMG)은 약 80MB인데, Electrobun은 약 16MB 수준임
  • Ubuntu 외의 배포판은 현재 지원 범위 밖이라 아쉬움
    관련 논의는 이슈 코멘트에서 확인 가능함