58P by GN⁺ | ★ favorite | 댓글 5개
  • 메인 프로세스에 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 에서 출시하는 첫 번째 주요 프로덕트
GeekNews Weekly에 포함된 글입니다. 에디터 코멘트 보기

댓글과 토론

co(lab) 전면 재작성이라고 적혀 있어 구글이랑 함께 ipynb 실행용 클라우드 안정성을 개선해주는 거라고 생각했으나 전혀 연관 없는 Blackboard팀의 개발 프로젝트

그래도 npx 로 설치하는 OOPIF가 접근 가능한 것은 중요한 경험으로 보인다

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

본문의 제작 배경에 위와 같은 언급이 있는데,
실제 앱 개발보다 배포하는데 더 많은 공수가 들어가는 경우가 있는데
이 문제를 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 외의 배포판은 현재 지원 범위 밖이라 아쉬움
    관련 논의는 이슈 코멘트에서 확인 가능함