Engine

Browser Engine Without Chromium: Why v1 Runs on WebKit

Nemo · · 3 min read

Monok is not built on Chromium. Version 1 renders web pages with WebKit, the engine macOS ships for every app through WKWebView, and keeps it behind its own engine boundary in Rust. We started out writing an engine of our own; that work is paused, because a browser people can use every day mattered more than a browser that might render pages in a few years. Here is what each option costs and why v1 landed where it did.

What are the options for building a browser?

Approach Examples What you get What it costs
Fork or embed Chromium Chrome, Edge, Brave, Arc, Vivaldi, Opera; CEF and Electron apps Near-perfect compatibility, years of security work A large engine bundled in the app, and you follow its release train
Use the system’s WebKit Safari; apps using WKWebView on macOS, Monok v1 A small app; the engine is already on the Mac and updated with it You can’t change the engine’s internals
Write an independent engine Gecko, Servo, Ladybird Full control over what the engine does and doesn’t do Compatibility has to be earned feature by feature, over years

Why not embed Chromium?

Chromium is an extraordinary piece of engineering, and it is built to run everything. Bundling it means shipping it: the app carries the whole engine, and its size and update schedule come with it. WebKit is already part of macOS, so a browser built on it ships only its own code. The Monok binary is 6.83 MB (arm64, stripped).

Why did v1 move from its own engine to WebKit?

An independent engine is the honest long road. Servo and Ladybird show it can be done, and they also show how many years it takes before ordinary sites, React apps and sign-in flows work. We decided that the parts that make Monok different are not the engine: they are the Magic Bar instead of an address bar, tabs split into panes, a native terminal next to the page and ad blocking built in. WebKit lets those ship now, on an engine that already handles the real web.

What keeps the door open for another engine?

The shell never talks to WebKit directly. It talks to an engine trait in Rust (navigation, events, downloads, permissions, content rules), and one crate implements that trait with WKWebView. That crate passes the trait’s conformance suite, 12 of 12 checks. Another engine, our own or Chromium, would be another implementation of the same trait, without touching the tabs, panes, terminal or Magic Bar.

Is the own engine dead?

No, it is paused. Early crates for networking, HTML parsing, CSS and layout are still in the repository, unused by v1, and the JavaScript part was never started. The plan for it is in the architecture post. We won’t give dates for it.

What does WebKit mean for memory?

Like every WKWebView browser, pages run in WebKit’s own processes, separate from the app. Measured on an M5 Pro with release 0.1.0: the app process uses 32 MB at idle, and five real sites (Wikipedia, GitHub, Hacker News, MDN, apple.com) came to 673 MB in total, of which the app was 42 MB and the rest was WebKit’s processes. The lightweight browser guide explains how to measure your own.

FAQ

Is Monok based on Chromium?

No. Version 1 uses the WebKit that comes with macOS, through WKWebView, the same engine as Safari.

Then is it just Safari with a different skin?

It shares Safari’s engine, not its interface or features: the window, tabs, panes, Magic Bar, terminal, favorites, blocking and internal pages are Monok’s own code, in Rust.

Will Monok have its own engine?

That is the long-term plan, and it is paused. The engine boundary is there so it can come later.

Can I try it?

Yes. Version 0.1.0 is a signed and notarized download for macOS 14 or later, universal for Apple silicon and Intel.

More in Engine

Contact

Bug reports, sites you want to see working, ideas. We reply by email.