A minimal tabbed web browser built with Electron. All icons are placeholders generated by a script so you can swap in your own artwork without touching any code.
New in v1.1.0 β Extension support! Surf FED can now load Chrome-style extensions (Manifest V2/V3). See EXTENSIONS.md for the full guide, or click the π§© button in the toolbar to open the Extensions Manager. Three built-in example extensions are included (Ad Blocker, Dark Reader, Page Info).
npm install
npm startelectron-browser/
βββ main.js # Electron main process (creates the window)
βββ preload.js # Safe bridge between main and renderer
βββ index.html # Browser chrome (toolbar, tab bar, webviews)
βββ renderer.js # Tab management, navigation, address bar logic
βββ styles.css # Browser UI styling
βββ assets/
β βββ icons/
β βββ icon.png # 512x512 master app icon (placeholder)
β βββ icon-16x16.png ... icon-1024x1024.png # sized app icons
β βββ ui/
β βββ back.png
β βββ forward.png
β βββ reload.png
β βββ home.png
β βββ new-tab.png
β βββ close.png
βββ build/
β βββ icon.png # source icon electron-builder uses for packaging
βββ scripts/
β βββ make_placeholder_icons.py # regenerates assets/icons/*
β βββ make_ui_icons.py # regenerates assets/icons/ui/*
βββ package.json
βββ extensions/ # Extension support (new)
βββ builtin/ # Extensions that ship with the browser
β βββ ad-blocker/ # declarativeNetRequest ad/tracker blocker
β βββ dark-reader/ # content-script dark theme for pages
β βββ fed-gram/ # Instagram image downloader (toolbar popup)
β βββ page-info/ # popup that shows page metadata
βββ user/ # (empty) drop your own extensions here (dev)
Surf FED supports loading unpacked Chrome extensions (Manifest V2 and V3). Click the π§© button in the toolbar to open the Extensions Manager, where you can enable/disable, load, and remove extensions. Full instructions for adding your own extensions are in EXTENSIONS.md.
Nothing else needs to change β just overwrite files in place, keeping the same filenames and (ideally) the same pixel sizes:
-
App icon (taskbar/dock/window icon): replace the files in
assets/icons/βicon.pngand eachicon-<size>x<size>.png. -
Toolbar icons: replace the files in
assets/icons/ui/βback.png,forward.png,reload.png,home.png,new-tab.png,close.png. Keep them at 24x24 (or update the#toolbar imgsize instyles.cssif you want them bigger/smaller). -
Packaged app icon (
.icofor Windows,.icnsfor macOS): the placeholders only includebuild/icon.png. Before runningnpm run dist, generate the platform-specific formats from your final artwork, e.g. with theelectron-icon-builderpackage:npx electron-icon-builder --input=build/icon.png --output=build --flatten
That produces
build/icon.icoandbuild/icon.icnsalongside the PNG, whichpackage.json'sbuildconfig already points to.
If you ever want a fresh set of placeholders back (e.g. to check sizes), run:
npm run icons # regenerates assets/icons/*
python3 scripts/make_ui_icons.py # regenerates assets/icons/ui/*
npm run distUses electron-builder with the config
already set in package.json (build field).
cd electron-browser
git init
git add .
git commit -m "Initial commit: Electron browser starter with placeholder icons"
git branch -M main
git remote add origin https://github.com/<your-username>/<your-repo>.git
git push -u origin main- The address bar accepts URLs or search terms (falls back to a Google search if it doesn't look like a URL).
- Each tab is a separate
<webview>element with its own back/forward history. - This is a starting point, not a security-hardened browser β before shipping anything real, review Electron's security guidelines.