Electrobun v1: Build fast, tiny, and cross-platform desktop apps with TypeScript (blackboard.sh)

171 points by merlindru ↗ HN
I'm building a commercial macOS app with Electrobun [1]. I have previously written the same app with Tauri. I'll say that, while I love Tauri, using Electrobun has been an absolute breeze. I got the same app done in roughly 70% of the time [2]. It's a very productive stack. In no small part due to Electrobun, but also the fact that Bun has tons of DX niceties and a builtin bundler.

Electrobun lets you open/manipulate/close webview windows and communicate with them using typed rpc. It also handles building, code signing, and notarization.

And because I'm using Bun, running an HMR + React + Tailwind server is just one command (`bun ./index.html`) or like 5 lines of code. Pass --console and the webview's console.log()s get streamed to your Terminal too.

There's tons of other things Electrobun does that I haven't even mentioned, because I haven't interacted much with them yet. E.g. I know that it lets you show platform-native notifications, prompts/popups, etc.

There also is a very impressive updating mechanism that relies on a bsdiff implementation written in Zig. You just ship the deltas, so updates to very large apps are just a few KBs most of the time.

It's genuinely a very productive stack and impressive piece of tech.

[1] Not affiliated - I just like the project.

[2]: The API and implementation was clear, so I'll cautiously say this is not a case of "rewrites are always faster". In fact, the Tauri version was a rewrite too :)

39 comments

[ 2.8 ms ] story [ 59.5 ms ] thread
(comment deleted)
Looks very promising, will be building my next project with it. Full TS stack is where I'm most productive. I'm glad we now have a more performant and lean alternative to Electron while not needing to deal with Rust and long compilation steps.
Just finished my first tauri app. Was suprised at long windows build took. I'll defo give this a go
Is it during development builds or release build ?
Neat! Here's the project main page for those interested in more than the release announcement:

https://blackboard.sh/electrobun/docs/

It certainly looks clean enough, and I'm more familiar with zig than rust, so I might give it a shot.

I'm going to production with a new Electron app at my job this week, i wish this had existed a year ago lol. Electron Builder does a pretty good job making the updates and signatures not TOO painful but it hasn't been painless by any stretch.

Looks cool, I'll try this for my next personal desktop project and see how it goes

I see a lot of game devs in discord experimenting with Electrobun to release desktop games.

I think it's going to eat a piece of the Electron pie for Steam indie games.

Most stay with bun after seeing how fast and seamless it is to run typescript games with instant auto reload:

bun --watch game.ts

node has watch mode and runs TypeScript files now too.
I'm wondering about security for this sort of thing. I guess it's like node.js in the sense that while you could load JavaScript code downloaded from the Internet at runtime, you probably shouldn't? Any additional gotchas due to the web view?
The business logic of your app is running in the Main process using Bun runtime. The website you load or the app's frontend is running in a separate sandboxed Renderer process. When I run Electrobun app on macOS, I see that it launches the following processes with the following RAM usage:

- views://mainview (33.7MB) <- your frontend is running here

- react-tailwind-vite-dev Networking (5.4MB)

- react-tail wind-vite-dev Graphics and Media (16.7MB)

- react-tailwind-vite-dev (60.7MB)

no real gotchas. JS is slightly dangerous because of JS, yes. You should never fetch things at runtime to execute if possible - instead, you install absolutely everything you need with npm or bun, and it gets inlined at build time

electrobun ships with an RPC (i think it also does some encryption?) so as long as you use that to communicate between your webview and bun "host process" you should be safe.

/* Looked at the product for which Electrobun was built, co(lab). «Focus on building instead of managing tools. Keep your code, browser, terminal, notes, and git workflow in one unified interface.» Well, a great idea! This is what Emacs mostly gives me. */
size? performance? bun last time I checked alone is 130MB
(comment deleted)
One of the main problems I see with tauri is that system web views just aren’t a great solution for a ui framework. Partly because Linux doesn’t have an official webview implementation, partly because the web views across OS versions have differences (eg. Tauri on Linux had a benchmark saying the boot time was 20+ seconds because of the webview, and win 7 and I think even early versions of win 10 do not use the edge webview).

This is a lot of tradeoffs for saving 100 megs.

I understand that we should be good stewards of our customers’ hardware and not waste things unnecessarily, but also have to balance that with shipping something and not worrying about all the edge cases. Most people in developed countries have Internet connections of 100+ mbps, which means the app will still download in <10 seconds.

Does electrobun support using an embedded chromium for the renderer? I went to the project readme and it was really unclear if that’s a currently-supported option and if so, how to use it.

Why don't any of the major distros have a webview? Seems an obvious move if you want apps and alongside user experience, apps are the biggest barrier to linux adoption
If someone from Electrobun is reading this. Can Electrobun compile to android as well. I want to create a simple application which can take some index.html and pass an adblocker and create an app out of it since I think this idea is pretty cool.

I ended up having to use Ionic to create a html <-> Android app thing within github actions but Ionic doesn't support ad blocking abilities.

they don't support mobile targets at the moment but i'm pretty sure i saw the creator saying it's a "sometime in the future" thing
I guess since Electron apps are 500MB+, 14MB is considered "tiny".
A regular Electron app for macOS (DMG) is ~80MB. Electrobun's DMG is ~16MB.
Once installed, I've found Electron installs tend to balloon from 80-200mb (installer) to 1.5GB or more (Electron + dedicated browser cache)
Are there any numbers on comparison to electron?
i'm not sure how you could have any meaningful comparison here except for comparing bun to node. everything is pretty modular so you can swap things out. i would compare webview to chromium bundle size, but that has tradeoffs too, and electrobun can use chromium (CEF) too. so that's also moot.

what kind of numbers are you looking for?

Moved from the molasses of VSCode to Rust-based Zed, no comparison. The second is snappy, responsive, uses much less memory (I can have 5 Zed open at the same time, no problems), not looking back.
@OP I know it's "just" a webview at the end of the day but I still think the Electrobun website could use a screenshot or two. (Or maybe e.g. a short video of an app comparing the startup times of Electrobun, Tauri, Electron etc.)
Can modern LLMs effectively be used on Electrobun codebases?
How big does a hello world binary compile to with this?
The article mentioned notarizing and stapling as problems with prior frameworks. What's the story here? If you don't use xcode as your ide (and I don't see that this project management is happening inside xcode), Apple makes that stuff really hard. And windows is easier but still hard to automate in CI. If this framework offers better solutions I'm all ears.
Hey HN, Electrobun creator here. Thanks for posting this.

We just hit v1 - stable which means I've locked down the architecture. If you run into any bugs or need specific apis that you miss from Electron or Tauri please open Github issues and I'll prioritize them. I shipped 50,000 lines of code changes stabilizing and polishing electrobun for v1 over the last month.

Here's a video demo of Colab (also open source) (a hybrid web browser + code editor + PTY terminal) that is built with Electrobun https://www.youtube.com/watch?v=WWTCqGmE86w

Electrobun uses the system webview by default, but a lot of the hello worlds feature the bundleCEF option. Because Electrobun is architected to be webview agnostic when servo and ladybird are ready they should be drop-in alternatives.

Electrobun apps also auto generate a zstd self-extraction wrapper and patch files with every release, so your initial download will be much smaller than if you'd used zip and your updates will be as small as 14KB so you can ship as often as you like without you or your users paying the bandwidth tax.

Are the types up to date with the docs? For example, when using BrowserWindow I get typescript errors if trying to pass an object with the key "partition".
was looking for something just like this. Really helpful
impressive work! this might nudge me into building desktop applications.
can you build a single .exe standalone app or standalone installer ? i only see folders or .exes relying on buind in the same folder is the archive