14 comments

  • torginus4 hours ago
    How does this differ from CEF(Chromium Embedded Framework)?<p>That&#x27;s also a fairly pared down version of the Chrome engine, designed for embedding used by tons of projects, like games for their in game lobbies or OBS for their Web overlays.<p>Personally, my problem with CEF is that it keeps Chrome fairly vanilla - and there&#x27;s a <i>lot</i> of things in there that you wouldn&#x27;t want to include in your user app.<p>But there&#x27;s a reason they did it like this - if they really took an axe to Chrome&#x27;s codebase, they&#x27;d basically lose the ability to upstream new versions.<p>Zebkit on the other hand sounds like it&#x27;s gonna be more granular - we&#x27;ll if they cope with this better, but I think there&#x27;s definitely a market for a much more lightweight browser engine that&#x27;s broadly compatible - for example, just getting rid of sandboxes and process isolation would be a huge but incompatbile change.<p>So would be dropping large modules like WebRTC or video playback or webusb or whatever, that I&#x27;m sure 99% of apps don&#x27;t end up using.
    • c-smile17 minutes ago
      &gt; there&#x27;s definitely a market for a much more lightweight browser engine<p>Yep.<p>My sciter[.com] dll is about 18mb on Windows which is 10 times less than zebkit (171.2 Mb). And sciter&#x27;s cold start (window creation, document loading and painting) is around 60ms that is 38 times less than 2.3 seconds of zebkit.
    • Riiiiichard4 hours ago
      I agree with you on the core point: the same layer (zebkit embeds chromium using Content API), staying sync with upstream (it carries 60+ patches), the size reduce (using build options such as turning off features).<p>For the size, I have some more to address: the real weight comes from Blink, V8, skia, network stack and media. WebRTC cannot be dropped since Blink depends on it. Video playback is need by most apps so it stays. And the webusb is small, drop it has little benefit.<p>The main differences are mostly from shape, not the engine: 1. Exposed as a library with bindings (rust, python, JS without node) that can be run in your application&#x27;s own event loop 2. Almost everything in the engine have a hook point such as permission, network, dialog, menus .. 3. Exported Chromium&#x27;s C Library (such as boringssl, zstd, ffmpeg ..) for your app so you do not need compile it or ship it twice such as ELectron. 4. Exported feature rich PDF library (pdfium with improved) 5. Playwright inside, no cdp and no node are required
    • kodablah1 hour ago
      Also note Google actively detects Chromium embedders like CEF via hidden heuristics and doesn&#x27;t allow users to use it to login to any Google account. You are expected to do oauth in your native app instead.<p>If this gets popular, expect Google to block it too.
    • embedding-shape3 hours ago
      &gt; designed for embedding used by tons of projects, like games for their in game lobbies or OBS for their Web overlays.<p>Probably the two biggest user&#x27;s of CEF (in terms of user base exposed to it daily) would be Steam and Spotify. Both relatively fast and efficient, compared to their peers, albeit the UX is another question.
    • qalmakka4 hours ago
      Yes it would be interesting to know what the pros and cons of this are compared to CEF. CEF is a massive PITA so it would be great to have an alternative, honestly
      • Riiiiichard3 hours ago
        Where zebkit easier thane CEF: 1. setup: cargo add zebkit for rust, pip install zebkit for python. Golang bindings is planned 2. your event loop 3. a plain C api with rust, python, and node-free js bindings on the top 4. offscreen rendering 6. batteries: PDFium API, 7000+ API from chroium&#x27;s or its dependencies 7. automation: playwright api in native with no cdp and node required 8. size: well, smaller but not much (1&#x2F;3 smaller than latest electron, measured on linux)<p>Where CEF is still ahead: 1. Maturity: it&#x27;s a product over decade and a big community, zebkit is rather young, but I will keep maintain it 2. platform: zebkit ships linux x64, macos sillicon and windows x64, cef covers mac intels, arm linux and many others. 3. missing pieces: zebkit has no printing, web bluetooth, wideevine and so on<p>Zebkit is still a young project, and I’d love to hear your feedback to help it keep improving.
    • Kwpolska2 hours ago
      Simple: this is slop, CEF is not.
  • joahnn_s4 hours ago
    I don&#x27;t understand. CEF exists; why load it as a shared lib&#x2F;cffi? You just expose your app&#x27;s process to all the issues that a browser can have, including security issues<p>In most languages, CFFI crashes the whole app process since it&#x27;s the same process. Maybe for personal stuff, it can be suitable, but nothing serious
    • cute_boi2 hours ago
      Vibe coder generally want publicity and fame, so they don&#x27;t bother to check what is already available that is not slop, well tested and robust.
    • Riiiiichard4 hours ago
      [flagged]
  • saidnooneever50 minutes ago
    why &#x27;zeb&#x27; ? its a vulgar word for penis. could be better picked since it doesnt seem to relate to anything else in there... maybe its on purpose, which would make me wonder about quality of the project. which it seems other commenters are also debating
  • netshade4 hours ago
    Nice. I&#x27;m a heavy CEF user on ZShot ( <a href="https:&#x2F;&#x2F;zshot-app.com" rel="nofollow">https:&#x2F;&#x2F;zshot-app.com</a> , <a href="https:&#x2F;&#x2F;zshot-cli.com" rel="nofollow">https:&#x2F;&#x2F;zshot-cli.com</a> ), but strongly with you on this sort of thing should be easier to integrate.<p>Also, very much with you in terms of exposing those libs ( like PDFium and FFmpeg ) to consumers, it lowers the shipping burden by quite a bit and just enables so much.<p>A note to anyone going down this road, just as an aside: actually shipping w&#x2F; Chromium ( and especially w&#x2F; FFmpeg ) can get complicated. If you&#x27;re shipping on Mac OS, you&#x27;ll want to worry about notarizing all your helpers along with your main process ( I&#x27;m assuming Zebkit still running w&#x2F; helper processes ). Similar w&#x2F; FFmpeg if you&#x27;re linking to the FFmpeg libs. And, w&#x2F; FFmpeg, just validating that your license compliance is in fact what you want to be shipping w&#x2F; - FFmpeg has GPL and LGPL modes, so making sure you have selected the right one is important. If I recall Blink is LGPL as well, so making sure you meet what&#x27;s required there has some distribution effects that are important.
    • Riiiiichard3 hours ago
      Thanks, that&#x27;s really useful coming from someone shipping CEF in production, and ZShot looks great.<p>And you pointed a real gap: the release archives contain no license or notice files, I will add them in next release. Thank you!
  • amelius4 hours ago
    Will this work as a shared library? I.e., the hundreds of megabytes will be shared between different applications? If not, maybe running on a browser is still the better option?
    • Riiiiichard4 hours ago
      Yes—it’s a shared library, so apps using the same installed copy can share disk space and read-only code pages. Separate bundled copies won’t automatically do that, and each app still has its own runtime memory.<p>A browser is a good choice if it fits your app! Zebkit is for embedding Chromium into a native app while keeping control of the host.
  • prologic5 hours ago
    This is pretty interesting! I&#x27;ve created a web browser for GoNix (<a href="https:&#x2F;&#x2F;gonix.dev" rel="nofollow">https:&#x2F;&#x2F;gonix.dev</a>) using the CEF (Chromium Embedded Framework), which works quite well, but requires shared memory and a pipe, but embedding Chromium as a library sounds even more intriguing. I might give this a go! Thanks for sharing!
    • Riiiiichard4 hours ago
      Thanks! I&#x27;d be interested to hear how it works out for GoNix.<p>One clarification: Zebkit still uses Chromium&#x27;s sandboxed renderer processes and shared memory internally. The embedding interface is a C API: your application links the library, keeps its own window and event loop, and can either embed a web view or receive off-screen frames to draw itself.<p>There&#x27;s no Go binding yet, but the C API should be usable through cgo. If you give it a try, I&#x27;d love to hear where it fits your setup and where the integration gets awkward. Thanks for sharing your use case!
      • prologic4 hours ago
        I&#x27;m sure Claude will do a fine job of creating some Go bindings :D<p>I already noticed Webkit doesn&#x27;t support Wayland on Linux, and some sandbox limitations on Windows.<p>I assume you&#x27;re working on improving this? I think I&#x27;ll just focus on a PoC for macOS right now, and see how that goes!
        • torginus2 hours ago
          Not only does Webkit support Wayland, but WPE Webkit was one of the first apps to get ported, and its basically the poster child for Wayland:<p><a href="https:&#x2F;&#x2F;wpewebkit.org&#x2F;about&#x2F;faq.html" rel="nofollow">https:&#x2F;&#x2F;wpewebkit.org&#x2F;about&#x2F;faq.html</a><p>That said this is not upstream Webkit (but they do try to keep up to date, its just they usually lag due to the customizations they did), but a more cut down version of it that supports a bunch of build config flags, and is used by a ton of embedded devices.<p>It&#x27;s a fairly significantly more lightweight option to Chrome&#x2F;CEF, that does suffer from a somewhat worse DX and compat with web content, but if you can tailor your content to it, rather than looking for a flawless ootb experience, it&#x27;s a worthwhile choice.
        • Riiiiichard4 hours ago
          Yes, I&#x27;m actively maintain this project, If you want to have go bindings, no problem.<p>It has the same sandbox support and limitations as Chromium. It supports X11 default in Linux and with limited Wayland support.<p>It has been tested on M4 macbook and works fine, if you have issues, just post it on the project.
          • prologic3 hours ago
            Just letting you know the PoC worked! ~20MB Go binary on macOS, basic features, but it works. Very nice!
  • anilgulecha3 hours ago
    This is slop, and not really adding value, IMO.<p>I think energies should go towards something like sciterjs, or equivalent tech, with with a small footprint gives a great cross platform DX. I recall the sciterjs author a few years ago tried to put together some donations to open source, but it didn&#x27;t go through.<p>Electrobun was an effort recently (but that too decompresses to ~70MB). There was antjs or something, which seems to have gone nowhere. Small size, scriptable, cross platform, huge library - whoever cracks this has the platform of the future. (No wonder TUIs are doing so well.)
  • swiftcoder4 hours ago
    I love that we&#x27;re calling something that embeds pretty much the whole of Chromium &quot;slim&quot; and &quot;light&quot;. Slightly smaller&#x2F;faster than Electron is not the bar I would necessarily choose to measure software against.
  • rq13 hours ago
    That’s an interesting project name for whoever lives in the Middle East.
  • shinryuu4 hours ago
    What kind of title is this?! Who ever lived in a runtime?
  • opengrass2 hours ago
    .
  • weitzj4 hours ago
    Now please somebody make a Browser in the Terminal. Using libghossty and Kitty graphics.
    • rolls-reus1 hour ago
      how about this?<p><a href="https:&#x2F;&#x2F;github.com&#x2F;zenbu-labs&#x2F;terminal-browser" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;zenbu-labs&#x2F;terminal-browser</a>
  • Riiiiichard5 hours ago
    Electron makes your app live inside its runtime. Its windows, its Node, its packaging. I wanted the opposite: Chromium as a library, the way you&#x27;d add SQLite.<p>zebkit is Blink, V8, PDFium and FFmpeg in one library you link into your own program, in C, Rust, Python or JavaScript. Your app keeps its own event loop, windows and toolkit. Where it needs the web it adds a view. It can be a window, a child of your own window (X11, NSView, HWND), or off-screen with the frames handed to you.<p>Against the latest Electron (45.2.1), on Linux: - 34% smaller (62 MB compressed) - cold start in 2.3 s instead of 6.6 - pages in 29% less memory - same DOM, text-layout and JavaScript speed<p>No Node: your app is native code, or JavaScript run on the engine&#x27;s own V8.<p>Everything the engine would show the user or ask of the system is your app&#x27;s to decide: - permissions, popups, downloads and certificates - network requests, at every stage - the window frame, so the page can be your title bar - menus, dialogs, notifications and tray icons - USB, HID and serial device pickers - screen capture<p>Without your code, a page gets nothing a cautious browser wouldn&#x27;t give it.<p>For automation and AI agents, it speaks CDP as Chromium&#x27;s own DevTools server, so Puppeteer, Playwright and any CDP client connect unchanged. It also runs Playwright&#x27;s API natively inside the engine, with no CDP, no Node and no JSON between processes. A click takes 2 ms instead of 33 ms with Playwright on Chrome over CDP, and a screenshot 12 ms instead of 34. Playwright&#x27;s own clients can attach to that with chromium.connect(), and there&#x27;s an MCP server.<p>It also exports Chromium&#x27;s own C libraries for your app (SQLite, BoringSSL, ICU, HarfBuzz, zstd and others), plus a full PDF API.<p>Chromium 157. Linux, macOS (Apple silicon) and Windows. cargo add zebkit, or pip install zebkit.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;ikey4u&#x2F;zebkit" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ikey4u&#x2F;zebkit</a><p>I&#x27;d love feedback, especially from people who&#x27;ve hit Electron&#x27;s or CEF&#x27;s limits.
    • rafram4 hours ago
      This got auto-flagged for being AI-generated. It would be much better if you wrote this kind of thing yourself. Your motivations and personal perspective on the project are much more interesting than an LLM’s summary of the readme (which is also a pretty tough read).
      • Riiiiichard4 hours ago
        Short version:<p>It packages Chromium as a library you can embed directly into applications to add browser capabilities.<p>It’s trimmed down to be 33% smaller than Electron, with native browser automation APIs for AI agents that run 3–10× faster than tools like Playwright operating over CDP. It also directly exposes 7,000+ functions from Chromium’s bundled libraries for your application to use.
    • ethersteeds4 hours ago
      Does this library model lose chromium&#x27;s process sandbox features? A quick search tells me &quot;Electron applications heavily benefit from Chromium’s sandboxing features, and they have become a foundational pillar of modern Electron security.&quot; It doesn&#x27;t immediately sound like your approach maintains that security.
      • Riiiiichard4 hours ago
        Yes, it has the same process sandbox features like Chromium.
    • peter_d_sherman35 minutes ago
      Hi Riiiiichard!<p>&gt;Electron makes your app live inside its runtime. Its windows, its Node, its packaging. I wanted the opposite: Chromium as a library, the way you&#x27;d add SQLite.<p>First of all, thank you for doing this! This is a great idea! Since I see that your account is relatively new here on HN, one of the first thing that you should understand about the HN message forums is that at this point in time, it is probably about 50% bot comments, and there seem to always be the (agenda-driven!) comments that a given source code repository was &quot;AI generated&quot;, or allude to &#x2F; imply that idea...<p>Yes, there are <i>some</i> AI generated github repositories out there, but whether a given repo is AI generated or not, in whole or in part, is not necessarily a measure of the underlying utility of the software!<p>(In other words, watch out for those comments! Some may be true -- but they are usually agenda-driven and biased as hell -- always do your own research!)<p>OK, getting back to Zebkit -- I think it&#x27;s a brilliant idea!<p>Chromium as a library like SQLite -- brilliant!<p>&gt;zebkit is Blink, V8, PDFium and FFmpeg in one library you link into your own program, in C, Rust, Python or JavaScript. Your app keeps its own event loop, windows and toolkit. Where it needs the web it adds a view. It can be a window, a child of your own window (X11, NSView, HWND), or off-screen with the frames handed to you.<p>Really nice! And no Electron, even better!<p>&gt;Against the latest Electron (45.2.1), on Linux: - 34% smaller (62 MB compressed) - cold start in 2.3 s instead of 6.6 - pages in 29% less memory - same DOM, text-layout and JavaScript speed<p>Again, terrific!<p>&gt;No Node: your app is native code, or JavaScript run on the engine&#x27;s own V8.<p>Excellent! (Node is bloated as hell and many libraries import every unnecessary dependency under the sun... I don&#x27;t mean to trash it, Node is tremendously useful for a variety of tasks, but it is in need of better dependency management...)<p>&gt;Everything the engine would show the user or ask of the system is your app&#x27;s to decide: - permissions, popups, downloads and certificates - network requests, at every stage - the window frame, so the page can be your title bar - menus, dialogs, notifications and tray icons - USB, HID and serial device pickers - screen capture. Without your code, a page gets nothing a cautious browser wouldn&#x27;t give it.<p>That&#x27;s the way to do it!<p>&gt;It also exports Chromium&#x27;s own C libraries for your app (SQLite, BoringSSL, ICU, HarfBuzz, zstd and others), plus a full PDF API.<p>Nice!<p>&gt;I&#x27;d love feedback, especially from people who&#x27;ve hit Electron&#x27;s or CEF&#x27;s limits.<p>From a Software Engineer with 20+ years experience (me!) -- <i>It&#x27;s f&#x27;ing brilliant!</i><p>I&#x27;m sure we&#x27;ll see a lot of great future software written around Zebkit (Fast, responsive non-Electron-based editors are the most immediate ones I can think of , but I&#x27;m sure we&#x27;ll see a whole lot more!)<p>One request if I might -- In the future, you might want to support other JavaScript engines... if so, then the interfaces between Zebkit (JavaScript interface) and V8 (JavaScript implementation) should be as decoupled as possible. That might be a problem because V8 might already be tightly integrated with the rest of the source code. But if Google coded the Chrome&#x2F;Chromium source code correctly, (I don&#x27;t know, haven&#x27;t looked at that code recently), then the Chrome&#x2F;Chromium <i>JavaScript interface</i> with V8 would be coded in such a way to allow easy replacement of V8 with a different JavaScript engine.<p>In other words, the choice of the JavaScript engine would ideally be modular and at the person compiling the code&#x27;s discretion!<p>Anyway, your work is <i>absolutely brilliant!</i><p>(BTW, shoot me an email if you&#x27;d like to have a longer discussion -- peter.d.sherman@gmail.com)
    • kg4 hours ago
      I take it this means you lose the sandboxing from normal chromium&#x2F;electron since it&#x27;s a library being loaded inside the app process? Or does it still spin up i.e. a GPU sandbox process, an I&#x2F;O sandbox process, etc?
  • T3RMINATED5 hours ago
    [dead]