- Framework de apps desktop baseado em TypeScript que usa Bun no processo principal e Zig para bindings nativos
- Suporta macOS, Windows e Ubuntu, gerando automaticamente instaladores, atualizações automáticas e artefatos de patch diferencial
- Oferece um conjunto completo de recursos de desktop, incluindo controle de janelas, menus, atalhos, área de transferência, diálogos, armazenamento de sessão e mais, além de implementar uma webview estável baseada em OOPIF
- A estrutura interna aproveita o FFI e o modelo de memória compartilhada do Bun para manter a eficiência mesmo em ambientes multiprocessados
- Desenvolvido ao longo de 2 anos por um engenheiro que vivenciou as limitações de Electron e Tauri e estudou Zig, C, C++ e Objective-C para criá-lo diretamente
- O objetivo é um workflow unificado que permita começar a programar em 5 minutos e fazer o deploy em 10 minutos
Visão geral e objetivos do projeto Electrobun
- Estrutura que executa o processo principal com Bun, faz o bundle da TypeScript da webview e escreve bindings nativos em Zig
- Tanto o processo principal quanto a webview são escritos em TypeScript, mantendo a isolação entre processos e oferecendo comunicação RPC rápida e tipada
- Tamanho do bundle extraível do app de cerca de 12 MB (usando a webview do sistema, sendo a maior parte o runtime do Bun)
- Atualizações diferenciais baseadas em bsdiff podem reduzir o tamanho do patch para no mínimo 14 KB
- O objetivo é fornecer um único workflow integrado que permita começar a programar em 5 minutos e concluir o deploy em 10 minutos
- É possível iniciar um projeto baseado em template com o comando
npx electrobun init
Contexto de criação
- O autor cria apps desktop desde a era do Visual Basic 6, e a origem do projeto está na experiência de ter distribuído produtos de várias startups para milhares de pessoas na época do Adobe AIR
- Embora tenha passado mais de 20 anos como engenheiro inicial em startups, construindo e escalando produtos em nível de unicórnio, o ambiente de desenvolvimento desktop acabou regredindo
- Ao criar o co(lab), um híbrido de navegador web + editor de código + terminal PTY, encontrou tantas dificuldades que decidiu construir o próprio framework
- A primeira versão foi feita em Electron, mas o processo de assinatura de código, notarização, distribuição e atualização parecia mais uma luta contra o framework do que desenvolvimento de app
- Ele queria continuous shipping como na web, mas a toolchain existente tornava isso mais difícil do que o necessário
- Também tentou Tauri, mas concluiu que Rust não era adequado para todos os desenvolvedores e, como o Bun ainda estava a alguns meses do lançamento 1.0 na época, decidiu desenvolver tudo por conta própria
De macOS para multiplataforma
- Inicialmente só era possível fazer build de apps para macOS, mas agora há suporte de primeira classe para build e deploy em macOS, Windows e Ubuntu
- Instaladores, artefatos de atualização automática e patches diferenciais são todos gerados automaticamente
- Basta conectar um host estático (R2, S3, GitHub Releases) para concluir o deploy
- As atualizações diferenciais ficam por conta do zig-bsdiff, portado de C para Zig e otimizado com SIMD e zstd
- Com a estabilização do FFI do Bun, a maior parte da camada FFI em Zig escrita anteriormente foi substituída por Bun
- A arquitetura acabou evoluindo de forma positiva, já que o Bun usa memória compartilhada ao criar workers, mantendo a eficiência mesmo com múltiplos processos
Recursos já lançados
- Hoje, como framework completo, oferece controles de janela multiplataforma, menus, atalhos (accelerators), atalhos globais, área de transferência, diálogos, partições de webview, armazenamento de sessão, busca na página (find-in-page), além de tooling para bundle e atualização
- A implementação de OOPIF (Out-of-Process Iframe) já alcançou um nível em que funciona de fato
- A tag
<webview> do Electron foi descontinuada no Chromium, mas ainda não existe uma alternativa pronta
<electrobun-webview> é um verdadeiro "super iframe" em que posicionamento no DOM, isolamento de processo e layering funcionam corretamente
- Funciona em múltiplas plataformas sem problemas de cursor flicker e sem patches no motor do navegador
Status de suporte por plataforma
- macOS 14+: suporte oficial
- Windows 11+: suporte oficial
- Ubuntu 22.04+: suporte oficial
- Outras distribuições Linux (gtk3, webkit2gtk-4.1): suporte da comunidade
Próximos planos
- A reescrita completa do co(lab) sobre o Electrobun foi concluída, e com base na estabilização da v1 o foco agora passa a ser o desenvolvimento sério do co(lab)
- O objetivo central é estabilizar o framework a ponto de permitir a construção de produtos ambiciosos de longo prazo sem ficar à mercê da volatilidade das plataformas
- A comunidade no Discord está crescendo, e usuários que contribuíram com testes beta, envio de issues e feedback ajudaram a moldar o framework
- Electrobun é o primeiro grande produto lançado pela Blackboard
5 comentários
Estava escrito que era uma reescrita completa do co(lab), então pensei que fosse algo para melhorar, junto com o Google, a estabilidade da nuvem para executar
ipynb, mas na verdade é um projeto de desenvolvimento da equipe do Blackboard sem qualquer relação com isso.Ainda assim, parece ser uma experiência importante o fato de que o OOPIF, instalado via
npx, pode ser acessado"A sensação é de lutar com o framework no processo de assinatura de código, notarização, distribuição e atualização, mais do que no desenvolvimento do app"
Há uma observação como a acima sobre o contexto em que ele foi criado no texto principal,
e, de fato, há casos em que dá mais trabalho distribuir do que desenvolver o app.
Só por ter resolvido esse problema, já merece uma avaliação muito positiva.
Também descobri que é bem fácil e simples acoplar
zigao Flutter.Sem muita diferença em relação à documentação de Dart/C FFI...
> Fico me perguntando por que as principais distribuições Linux não oferecem um WebView padrão. Isso é um grande obstáculo para expandir o ecossistema de apps.
Se for um sistema operacional com ambiente GUI, acho que o WebView já deveria se tornar um componente padrão.
Comentários do Hacker News
Olá, sou o criador do Electrobun
Desta vez lancei a versão estável v1. Fixei a arquitetura e, se vocês precisarem de bugs corrigidos ou de APIs que usavam no Electron/Tauri, deixem em issues no GitHub que vou tratar isso como prioridade
No último mês, revisei 50 mil linhas de código e concluí o trabalho de estabilização
Também há um vídeo de demonstração do projeto open source Colab (navegador web + editor de código + terminal PTY) feito com Electrobun
O Electrobun usa por padrão a WebView do sistema, mas também pode incluir o CEF com a opção
bundleCEF. Estruturalmente ele é independente de WebView, então, quando Servo ou Ladybird estiverem prontos, será possível substituí-los imediatamenteAlém disso, a cada release ele gera pacotes com compactação automática baseada em zstd para reduzir o tamanho do download inicial, e as atualizações podem permanecer pequenas, na faixa de 14 KB
partitionem BrowserWindow, o TypeScript acusa erroO Electrobun parece muito promissor. Pretendo fazer meu próximo projeto com ele
Em uma stack totalmente TypeScript, a produtividade é a mais alta. Fico feliz em ter uma alternativa ao Electron mais leve e rápida, sem Rust nem longos tempos de compilação
No Discord, muitos desenvolvedores de jogos estão testando jogos desktop com Electrobun
Ele pode acabar substituindo parte do Electron no mercado de jogos indie da Steam
Especialmente com
bun --watch game.ts, a experiência de desenvolvimento de jogos em TypeScript com reload instantâneo é muito rápida e fluidaO principal problema do Tauri é que a qualidade da WebView do sistema varia conforme o OS
No Linux não há uma WebView oficial, e no Windows 7 ou nas primeiras versões do 10 não se usa a Edge WebView. Por causa dessas diferenças, às vezes a inicialização leva mais de 20 segundos
Fico em dúvida se vale a pena aceitar esse trade-off para economizar 100 MB
A maioria dos usuários tem internet rápida, então a velocidade de download não é um grande problema
Eu queria saber se o Electrobun oferece suporte a um renderizador Chromium embutido, mas isso não estava claro na documentação
Teria sido bom deixar claro no título que este texto é um post de retrospectiva do projeto
Para o projeto em si, parece mais apropriado ver o link da documentação oficial
A página principal do projeto é esta aqui
A interface parece limpa e, como estou acostumado com Zig, acho que seria mais fácil de abordar do que Rust
Nesta semana vamos lançar um novo app em Electron na empresa, e sinto que teria sido ótimo se o Electrobun tivesse surgido um ano antes
O Electron Builder simplifica até certo ponto o processo de atualização e assinatura, mas ainda assim continua sendo incômodo
No meu próximo projeto pessoal, pretendo tentar o Electrobun
O texto menciona o problema de notarização e stapling, e, se você não usa Xcode, a Apple torna esse processo bem difícil
No Windows, a automação em CI também não é fácil. Se o Electrobun oferecer uma solução melhor, tenho muito interesse
notarize: trueJá fiz assinatura e notarização várias vezes com Electrobun e não tive problemas. Ele também oferece uma escape hatch para casos mais complexos
Se precisar de ajuda, pode me mandar DM no Discord. (Não sou ligado ao Electrobun, mas conheço bem o sofrimento que é o sistema de notarização da Apple)
Se um app em Electron passa de 500 MB, os 14 MB do Electrobun realmente parecem muito pequenos
É uma pena que distribuições além do Ubuntu estejam atualmente fora do escopo de suporte
A discussão relacionada pode ser vista neste comentário da issue