mirror of
https://github.com/mileswolfallen2/miles-web.git
synced 2026-09-08 11:23:17 +00:00
Compare commits
2
Commits
a492cce61a
...
9e88fc2467
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e88fc2467 | ||
|
|
87369419b6 |
@@ -106,6 +106,8 @@
|
||||
<a href="now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -161,6 +161,8 @@
|
||||
<a href="now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -165,6 +165,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -157,6 +157,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
+21
-24
@@ -4,10 +4,10 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Why I Built Gelectron | Miles Wolf Allen</title>
|
||||
<meta name="description" content="Why I built Gelectron — a Firefox-engine alternative to Electron. Memory usage, efficiency, and why bundling Chromium with every app is a problem.">
|
||||
<meta name="description" content="Why I built Gelectron — a drop-in replacement for Electron using native web views instead of bundling Chromium. Memory usage, efficiency, and the problem with bundling a full browser.">
|
||||
<link rel="canonical" href="https://milesallen.site/blog/gelectron-devlog.html">
|
||||
<meta property="og:title" content="Why I Built Gelectron | Miles Wolf Allen">
|
||||
<meta property="og:description" content="Why I built Gelectron — a Firefox-engine alternative to Electron. Memory usage, efficiency, and why bundling Chromium with every app is a problem.">
|
||||
<meta property="og:description" content="Why I built Gelectron — a drop-in replacement for Electron using native web views instead of bundling Chromium. Memory usage, efficiency, and the problem with bundling a full browser.">
|
||||
<meta property="og:image" content="https://milesallen.site/og.png">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="article:published_time" content="2026-03-15">
|
||||
@@ -16,7 +16,7 @@
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
"headline": "Why I Built Gelectron | Miles Wolf Allen",
|
||||
"description": "Why I built Gelectron — a Firefox-engine alternative to Electron. Memory usage, efficiency, and why bundling Chromium with every app is a problem.",
|
||||
"description": "Why I built Gelectron — a drop-in replacement for Electron using native web views instead of bundling Chromium. Memory usage, efficiency, and the problem with bundling a full browser.",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "Miles Wolf Allen",
|
||||
@@ -100,10 +100,10 @@
|
||||
<div class="article-eyebrow">// DEVLOG 005</div>
|
||||
<div class="article-date">2026</div>
|
||||
<h1>Why I Built Gelectron</h1>
|
||||
<p class="article-tagline">Electron bundles Chromium with every app. That's 150-300MB per app, hundreds of MBs of RAM. I thought there had to be a better way.</p>
|
||||
<p class="article-tagline">Electron bundles Chromium with every app. 150-300MB on disk, hundreds of MBs of RAM. Native web views fix that without changing your code.</p>
|
||||
<div class="article-tags">
|
||||
<span class="article-tag">Rust</span>
|
||||
<span class="article-tag">Servo</span>
|
||||
<span class="article-tag">Native</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -120,35 +120,30 @@
|
||||
<p>Chromium keeps multiple processes running: the main process, renderer processes for each window, GPU processes, utility processes. Each one consumes memory. Even when your app is idle, Chromium is still managing tabs you don't have, networking you don't need, and features you'll never use.</p>
|
||||
<p>On my Mac, I routinely have 5-6 apps open at once. If three of them are Electron-based, that's easily 1-1.5GB of RAM just for those apps. On a machine where I'm also running Docker, VS Code, and a browser with 30 tabs... something has to give.</p>
|
||||
|
||||
<h2>Why Not Just Use something else?</h2>
|
||||
<p>There are alternatives to Electron. Tauri uses the system's webview instead of bundling Chromium, which solves the disk space problem. But system webviews are inconsistent — Safari's webview on macOS is different from WebView2 on Windows, which is different from whatever GTK ships on Linux. You lose consistency.</p>
|
||||
<p>I wanted something different. I wanted the consistency of Electron — same rendering engine everywhere — but without the Chromium baggage. That's when I started looking at Servo.</p>
|
||||
<h2>The Native Web View Approach</h2>
|
||||
<p>There are alternatives to Electron. Tauri uses the system's webview, which solves the disk space problem but introduces consistency issues — Safari's webview on macOS is different from WebView2 on Windows, which is different from WebKitGTK on Linux. You lose predictability.</p>
|
||||
<p>I wanted something closer to Electron's developer experience. Same Node.js runtime. Same IPC model. Same APIs. But instead of bundling a full Chromium binary, Gelectron maps Electron's rendering layer to the OS-native web view. WKWebView on macOS/iOS, WebView2 on Windows, WebKitGTK on Linux. Each platform gets its own optimized renderer — no browser to bundle, no 150MB tax.</p>
|
||||
|
||||
<h2>Enter Servo</h2>
|
||||
<p>Servo is Mozilla's next-generation browser engine. It was designed from the ground up for embedding, parallelism, and modern hardware. It uses Stylo for CSS (Rust-powered, parallel style computation) and WebRender for GPU compositing (the same renderer Firefox uses).</p>
|
||||
<p>The key insight is that Servo doesn't bundle a full browser. It's a rendering engine designed to be embedded in other applications. That's exactly what Electron does with Chromium, but Servo is built for this use case rather than having it bolted on.</p>
|
||||
<p>And because it's written in Rust, you get memory safety without a garbage collector. No runtime overhead, no unexpected pauses, no memory leaks from C++ code. The Rust compiler catches whole categories of bugs that would be silent in C++.</p>
|
||||
|
||||
<h2>The Efficiency Argument</h2>
|
||||
<p>Here's what got me excited. Servo's architecture is fundamentally more efficient than Chromium for the embedding use case:</p>
|
||||
<h2>Why Native Web Views Win</h2>
|
||||
<p>The efficiency gains come from not duplicating what the OS already provides:</p>
|
||||
<ul>
|
||||
<li><strong>Parallel CSS layout:</strong> Stylo computes styles in parallel across CPU cores. Chromium does this mostly single-threaded.</li>
|
||||
<li><strong>GPU compositing via WebRender:</strong> The same renderer Firefox uses, designed for efficient GPU utilization from the start.</li>
|
||||
<li><strong>No process-per-tab overhead:</strong> Servo doesn't spawn a new process for every rendering context. Less memory, less overhead.</li>
|
||||
<li><strong>Smaller binary:</strong> Rust static linking produces smaller binaries than Chromium's C++ build system.</li>
|
||||
<li><strong>Designed for embedding:</strong> Unlike Chromium, which had embedding support added later, Servo was built for this.</li>
|
||||
<li><strong>Shared system libraries:</strong> The OS already has its web rendering engine loaded. No need to bundle another one.</li>
|
||||
<li><strong>No process-per-app overhead:</strong> Each Electron app spins up its own Chromium process tree. Native web views share the system renderer.</li>
|
||||
<li><strong>Smaller binary:</strong> No Chromium bundle means binaries measured in megabytes, not hundreds of megabytes.</li>
|
||||
<li><strong>Lower baseline memory:</strong> Without a full browser engine in-process, your app starts with a fraction of Electron's baseline RAM.</li>
|
||||
<li><strong>OS-level optimizations:</strong> Apple, Microsoft, and the GNOME team all optimize their web views for their own platforms. You get that for free.</li>
|
||||
</ul>
|
||||
<p>I'm not claiming Gelectron is faster than Electron today — it is but . It's early, it's experimental, and many APIs are stubs. But the foundation is more efficient. The ceiling is higher. And that's what matters.</p>
|
||||
<p>I'm not claiming Gelectron is faster than Electron today. It's early, experimental, and many APIs are stubs. But the foundation is fundamentally more efficient. The ceiling is higher. And that's what matters.</p>
|
||||
|
||||
<h2>How It Works</h2>
|
||||
<p>Gelectron is a drop-in replacement for Electron. You run <code>gelectron .</code> instead of <code>electron .</code>, and your app should just work. Under the hood:</p>
|
||||
<ul>
|
||||
<li>A JavaScript compatibility layer maps Electron's API surface (BrowserWindow, ipcMain, Menu, Tray, etc.) to Gelectron's internals</li>
|
||||
<li>A Rust N-API addon handles the heavy lifting: window management via winit, native menus via muda, system tray via tray-icon, file dialogs via rfd</li>
|
||||
<li>Servo handles all rendering — HTML, CSS, JavaScript execution</li>
|
||||
<li>The platform's native web view handles all rendering — HTML, CSS, JavaScript execution</li>
|
||||
<li>Node.js runs the main process, just like Electron</li>
|
||||
</ul>
|
||||
<p>The goal is zero changes to existing Electron apps. Same <code>require('electron')</code> imports, same APIs, same code. Just a different engine underneath.</p>
|
||||
<p>The goal is zero changes to existing Electron apps. Same <code>require('electron')</code> imports, same APIs, same code. Just no bundled browser.</p>
|
||||
|
||||
<h2>Where It's At</h2>
|
||||
<p>Let me be clear: Gelectron is very early. This is a proof of concept, not a production tool. Many Electron APIs are stubs. Some things break. Auto-updater doesn't exist yet. Multi-window support is limited.</p>
|
||||
@@ -156,7 +151,7 @@
|
||||
|
||||
<h2>Why It Matters</h2>
|
||||
<p>Desktop apps aren't going away. And the web platform keeps getting more powerful. The question is: how do we build cross-platform desktop apps without burning 300MB of disk and 200MB of RAM per app?</p>
|
||||
<p>Gelectron is my answer to that question. It's early, it's rough, and it might not go anywhere. But if it works — if we can get Electron's developer experience with Servo's efficiency — that changes the economics of desktop app development.</p>
|
||||
<p>Gelectron is my answer to that question. It's early, it's rough, and it might not go anywhere. But if it works — if we can get Electron's developer experience without bundling a full browser — that changes the economics of desktop app development.</p>
|
||||
<p>Smaller apps. Less memory. Same code. That's the dream.</p>
|
||||
|
||||
<blockquote>The best infrastructure is the one you don't notice. If your app framework is using 200MB of RAM, you notice it.</blockquote>
|
||||
@@ -175,6 +170,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -165,6 +165,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -150,6 +150,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -133,6 +133,8 @@
|
||||
<a href="now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
+1480
File diff suppressed because it is too large
Load Diff
+6
-3
@@ -566,6 +566,7 @@
|
||||
<a href="uses.html" style="font-family:var(--font-pixel);font-size:9px;color:var(--tape);text-transform:uppercase;letter-spacing:.08em;transition:color .2s;">Uses</a>
|
||||
<a href="now.html" style="font-family:var(--font-pixel);font-size:9px;color:var(--tape);text-transform:uppercase;letter-spacing:.08em;transition:color .2s;">Now</a>
|
||||
<a href="colophon.html" style="font-family:var(--font-pixel);font-size:9px;color:var(--tape);text-transform:uppercase;letter-spacing:.08em;transition:color .2s;">Colophon</a>
|
||||
<a href="experiments.html" style="font-family:var(--font-pixel);font-size:9px;color:var(--accent);text-transform:uppercase;letter-spacing:.08em;transition:color .2s;">Internet History</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -620,7 +621,7 @@
|
||||
<a class="proj-card reveal" href="projects/gelectron.html">
|
||||
<div class="proj-top"><span class="proj-tag" style="background:var(--tape);color:#000;">EARLY</span><span class="proj-meta">* Rust + Node.js * MIT</span></div>
|
||||
<div class="proj-title">Gelectron</div>
|
||||
<div class="proj-desc">Electron, but lighter. A Firefox-engine alternative powered by Servo. Drop-in replacement — just run gelectron . instead of electron .</div>
|
||||
<div class="proj-desc">Drop-in replacement for Electron using native web views (WKWebView / WebView2 / WebKitGTK) instead of bundling Chromium.</div>
|
||||
</a>
|
||||
<a class="proj-card reveal" href="projects/fedl.html">
|
||||
<div class="proj-top"><span class="proj-tag" style="background:var(--accent);">LIVE</span><span class="proj-meta">* 2196 commits</span></div>
|
||||
@@ -716,8 +717,8 @@
|
||||
<a class="blog-card reveal" href="blog/gelectron-devlog.html">
|
||||
<div class="blog-date">2026</div>
|
||||
<div class="blog-title">Why I Built Gelectron</div>
|
||||
<div class="blog-excerpt">Electron bundles Chromium with every app. 150-300MB per app, hundreds of MBs of RAM. There had to be a better way.</div>
|
||||
<div class="blog-tags"><span class="blog-tag">Rust</span><span class="blog-tag">Servo</span></div>
|
||||
<div class="blog-excerpt">Electron bundles Chromium with every app. 150-300MB per app, hundreds of MBs of RAM. Native web views fix that.</div>
|
||||
<div class="blog-tags"><span class="blog-tag">Rust</span><span class="blog-tag">Native</span></div>
|
||||
</a>
|
||||
<a class="blog-card reveal" href="blog/omniemu-devlog.html">
|
||||
<div class="blog-date">2026</div>
|
||||
@@ -769,6 +770,8 @@
|
||||
<a href="now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Now | Miles Wolf Allen</title>
|
||||
<meta name="description" content="What I'm currently focused on — building Gelectron, maintaining the FEDL, and more.">
|
||||
<meta name="description" content="What I'm currently focused on — building Gelectron, maintaining the FEDL, working on Noto, and more.">
|
||||
<link rel="canonical" href="https://milesallen.site/now.html">
|
||||
<meta property="og:title" content="Now | Miles Wolf Allen">
|
||||
<meta property="og:description" content="What I'm currently focused on — building Gelectron, maintaining the FEDL, and more.">
|
||||
<meta property="og:description" content="What I'm currently focused on — building Gelectron, maintaining the FEDL, working on Noto, and more.">
|
||||
<meta property="og:image" content="https://milesallen.site/og.png">
|
||||
<meta property="og:url" content="https://milesallen.site/now.html">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
@@ -89,8 +89,8 @@
|
||||
<p>The AI isn't a gimmick — it's actually useful. Summarize a page of notes in one tap. Transcribe voice memos automatically. Quiz yourself on what you wrote. Chat with your notes like they're a second brain. Cloud (OpenAI) or local (Ollama), your choice. No subscription nonsense.</p>
|
||||
|
||||
<h2>Building Gelectron</h2>
|
||||
<p>My side project is <strong><a href="https://gelectron.milesallen.site/" target="_blank" style="color:var(--accent);">Gelectron</a></strong> — a Firefox-engine alternative to Electron, powered by Servo. I'm focused on keeping file size and RAM usage really, really low. Electron apps are bloated — a basic Electron app can be 150MB+ and eat 300MB of RAM just to show a window. I want Gelectron to ship at a fraction of that.</p>
|
||||
<p>Drop-in replacement — just run <code>gelectron .</code> instead of <code>electron .</code>. Right now I'm filling out the Electron API compatibility layer (BrowserWindow, IPC, Menu, Tray) and getting the Servo rendering pipeline working. It's a Rust + Node.js project and it's teaching me a ton about browser engines, FFI, and systems programming. Every byte and allocation matters.</p>
|
||||
<p>My side project is <strong><a href="https://gelectron.milesallen.site/" target="_blank" style="color:var(--accent);">Gelectron</a></strong> — a drop-in replacement for Electron that uses native web views (WKWebView / WebView2 / WebKitGTK) instead of bundling Chromium. No 150MB+ binaries. No 300MB of RAM just to show a window. Just your app, running on the OS-native renderer.</p>
|
||||
<p>Drop-in replacement — just run <code>gelectron .</code> instead of <code>electron .</code>. Right now I'm filling out the Electron API compatibility layer (BrowserWindow, IPC, Menu, Tray). It's a Rust + Node.js project and every byte and allocation matters.</p>
|
||||
|
||||
<h2>Maintaining the FEDL</h2>
|
||||
<p>The <strong><a href="https://fedl.site" target="_blank" style="color:var(--accent);">Geometry Dash demon list</a></strong> is still going strong. Nearly 4,000 verified runs, 340+ ranked levels, and a community that keeps me busy. I'm working on better moderation tools and a cleaner submission pipeline.</p>
|
||||
@@ -119,6 +119,8 @@
|
||||
<a href="now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -204,6 +204,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -152,6 +152,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -200,6 +200,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
+10
-8
@@ -4,10 +4,10 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Gelectron | Miles Wolf Allen</title>
|
||||
<meta name="description" content="Gelectron — a Firefox-engine alternative to Electron, powered by Servo. Drop-in replacement for Electron apps, just run gelectron . instead of electron.">
|
||||
<meta name="description" content="Gelectron — drop-in replacement for Electron using native web views (WKWebView / WebView2 / WebKitGTK) instead of bundling Chromium. Just run gelectron . instead of electron .">
|
||||
<link rel="canonical" href="https://milesallen.site/projects/gelectron.html">
|
||||
<meta property="og:title" content="Gelectron | Miles Wolf Allen">
|
||||
<meta property="og:description" content="Gelectron — a Firefox-engine alternative to Electron, powered by Servo. Drop-in replacement for Electron apps.">
|
||||
<meta property="og:description" content="Gelectron — drop-in replacement for Electron using native web views (WKWebView / WebView2 / WebKitGTK) instead of bundling Chromium.">
|
||||
<meta property="og:image" content="https://milesallen.site/og.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Press+Start+2P&family=Space+Mono:wght@400;700&family=Inter:wght@400;500;600;800&display=swap" rel="stylesheet">
|
||||
@@ -59,7 +59,7 @@
|
||||
</div>
|
||||
|
||||
<h1>Gelectron</h1>
|
||||
<p class="tagline">Electron, but lighter. A Firefox-engine alternative powered by Servo. Drop-in replacement — just run gelectron . instead of electron .</p>
|
||||
<p class="tagline">Drop-in replacement for Electron using native web views (WKWebView / WebView2 / WebKitGTK) instead of bundling Chromium. Just run gelectron . instead of electron .</p>
|
||||
|
||||
<div class="project-meta-bar">
|
||||
<a href="https://github.com/mileswolfallen2/gelectron" class="meta-chip primary" target="_blank">
|
||||
@@ -110,9 +110,9 @@
|
||||
<div class="feature-card">
|
||||
<h3>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 10h-1.26A8 8 0 109 20h9a5 5 0 000-10z"/></svg>
|
||||
Servo Engine
|
||||
Native Web Views
|
||||
</h3>
|
||||
<p>Powered by Servo, Mozilla's next-gen browser engine. Uses Gecko's CSS engine (Stylo) and GPU compositor (WebRender) instead of bundling Chromium.</p>
|
||||
<p>Uses the OS-native renderer on every platform — WKWebView on macOS/iOS, WebView2 on Windows, WebKitGTK on Linux. No bundled browser engine.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>
|
||||
@@ -126,14 +126,14 @@
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.66 0 3-4.03 3-9s-1.34-9-3-9m0 18c-1.66 0-3-4.03-3-9s1.34-9 3-9"/></svg>
|
||||
Smaller Binaries
|
||||
</h3>
|
||||
<p>Rust static linking means smaller output than Electron's Chromium bundle. No more 150MB+ binaries for simple apps.</p>
|
||||
<p>No Chromium bundle means binaries are a fraction of Electron's size. Rust static linking keeps them lean. No more 150MB+ apps.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
|
||||
Lower Memory
|
||||
</h3>
|
||||
<p>Servo's architecture is designed for embedding and uses less memory than Chromium. Your users will notice the difference.</p>
|
||||
<p>Native web views don't need a separate Chromium process per window. Less overhead, less RAM, snappier feel. Your users will notice.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>
|
||||
@@ -165,7 +165,7 @@
|
||||
<div class="section-divider"></div>
|
||||
<h2 class="section-title">Status</h2>
|
||||
<div class="desc-text">
|
||||
<p>Gelectron is in very early development. This is an experiment — a proof of concept that Electron apps can run on a non-Chromium engine. Many Electron APIs are currently stubs or incomplete. Some things will break. Some things don't exist yet.</p>
|
||||
<p>Gelectron is in very early development. This is an experiment — a proof of concept that Electron apps can run using native web views instead of bundling Chromium. Many Electron APIs are currently stubs or incomplete. Some things will break. Some things don't exist yet.</p>
|
||||
<p>The goal right now isn't to replace Electron for production apps. It's to explore whether this is possible, learn how Electron's internals work, and build a foundation that could grow into something real.</p>
|
||||
<p>If you're curious, try it out with a simple Electron app. If you find bugs, open an issue. If you want to contribute, even better.</p>
|
||||
</div>
|
||||
@@ -216,6 +216,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -184,6 +184,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -149,6 +149,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -170,6 +170,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -169,6 +169,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -215,6 +215,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -198,6 +198,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -257,6 +257,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
@@ -163,6 +163,8 @@
|
||||
<a href="../now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="../experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
+10
-3
@@ -58,6 +58,7 @@
|
||||
const dot = document.getElementById('cursorDot');
|
||||
const ring = document.getElementById('cursorRing');
|
||||
if (!dot || !ring) return;
|
||||
document.body.classList.add('custom-cursor-enabled');
|
||||
let mx = 0, my = 0, rx = 0, ry = 0;
|
||||
document.addEventListener('mousemove', function(e){
|
||||
mx = e.clientX;
|
||||
@@ -97,12 +98,14 @@
|
||||
function updateIcon(){
|
||||
btn.textContent = document.body.classList.contains('light') ? '\u263E' : '\u2600';
|
||||
}
|
||||
updateIcon();
|
||||
btn.addEventListener('click', function(){
|
||||
function toggleTheme(){
|
||||
document.body.classList.toggle('light');
|
||||
localStorage.setItem('theme', document.body.classList.contains('light') ? 'light' : 'dark');
|
||||
updateIcon();
|
||||
});
|
||||
}
|
||||
updateIcon();
|
||||
btn.addEventListener('click', toggleTheme);
|
||||
window.toggleTheme = toggleTheme;
|
||||
})();
|
||||
|
||||
/* KEYBOARD SHORTCUTS (shared) */
|
||||
@@ -114,6 +117,10 @@
|
||||
window.addEventListener('keydown', function(e){
|
||||
if (e.key === '?') { e.preventDefault(); toggleModal(); }
|
||||
if (e.key === 'Escape') modal.classList.remove('open');
|
||||
if (e.key === 't' || e.key === 'T') {
|
||||
e.preventDefault();
|
||||
if (window.toggleTheme) window.toggleTheme();
|
||||
}
|
||||
});
|
||||
})();
|
||||
})();
|
||||
|
||||
+10
-2
@@ -30,7 +30,15 @@ body::after{
|
||||
::selection{background:var(--accent);color:#000;}
|
||||
a{color:inherit;text-decoration:none;}
|
||||
|
||||
*{cursor:none !important;}
|
||||
body.custom-cursor-enabled *{cursor:none !important;}
|
||||
body.custom-cursor-enabled a,
|
||||
body.custom-cursor-enabled button,
|
||||
body.custom-cursor-enabled input,
|
||||
body.custom-cursor-enabled textarea,
|
||||
body.custom-cursor-enabled select,
|
||||
body.custom-cursor-enabled [role="button"]{
|
||||
cursor:auto !important;
|
||||
}
|
||||
.cursor-dot,.cursor-ring{position:fixed;top:0;left:0;pointer-events:none;z-index:99999;border-radius:50%;}
|
||||
.cursor-dot{
|
||||
width:6px;height:6px;background:var(--accent);
|
||||
@@ -242,7 +250,7 @@ body.light .breadcrumb{color:#888;}
|
||||
position:fixed;top:20px;right:20px;z-index:600;
|
||||
background:none;border:2px solid rgba(255,255,255,0.15);
|
||||
width:40px;height:40px;display:flex;align-items:center;justify-content:center;
|
||||
font-size:16px;cursor:none;transition:all .3s;color:var(--text);
|
||||
font-size:16px;cursor:pointer;transition:all .3s;color:var(--text);
|
||||
}
|
||||
.theme-toggle:hover{border-color:var(--accent);background:rgba(255,61,154,0.1);}
|
||||
@media(max-width:640px){.theme-toggle{display:none;}}
|
||||
|
||||
@@ -132,6 +132,12 @@
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://milesallen.site/experiments.html</loc>
|
||||
<lastmod>2026-07-29</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://milesallen.site/404.html</loc>
|
||||
<lastmod>2026-07-28</lastmod>
|
||||
|
||||
@@ -134,6 +134,8 @@
|
||||
<a href="now.html" style="color:var(--muted);text-decoration:none;">Now</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="colophon.html" style="color:var(--muted);text-decoration:none;">Colophon</a>
|
||||
<span style="color:var(--muted);margin:0 8px;">·</span>
|
||||
<a href="experiments.html" style="color:var(--accent);text-decoration:none;">Internet History</a>
|
||||
</div>
|
||||
Built by Miles · 2026 · Powered by too much coffee and the Konami code
|
||||
</footer>
|
||||
|
||||
Reference in New Issue
Block a user