WebTop
PublicWebTop turns a website into a Windows EXE.
C++ 2026 Updated 4 weeks ago C++DesktopTooling
| Name | Size |
|---|---|
| builder , directory | |
| core , directory | |
| runtime , directory | |
| scripts , directory | |
| .gitignore | 151 B |
| CMakeLists.txt | 380 B |
| LICENSE | 1.0 KB |
| README.md | 3.8 KB |
WebTop
Turn any website into a Windows desktop executable. Bundles the site inside a CEF-based runtime with an optional built-in AdBlocker
Core Tech Stack
Features
Website-to-App Conversion
- Simple GUI with website URL, app name, output folder, and AdBlocker toggle
- CLI with the same options as the GUI:
--url,--out,--name,--no-adblock - Generated apps are standalone executables with the URL baked in via config injection
Built-in AdBlocker
- Bundled EasyList snapshot, parsed and matched against every network request
- Per-app toggle: enable AdBlocker at build time, or disable it with
--no-adblock - Cosmetic rules (
##) are ignored in this release; network rules (||,@@||,^) are supported
Generated App Experience
- Navigation toolbar with Back / Forward / Reload
- System-tray icon with Show / Hide / Quit
- Per-app persistent cache and cookies at
%APPDATA%\WebTop\<app_name>\
Getting Started
Prerequisites
- Visual Studio 2022 (MSVC, x64)
- CMake: 3.20+
- Qt 6 (Widgets, Concurrent)
- Rust: 1.75+
- Internet access on first build (CEF download)
Quickstart
# Clone repository
git clone https://github.com/Louiml/WebTop.git
cd WebTop
# Download CEF + build the runtime stub
.\scripts\build_stub.ps1
# Configure and build the builder (GUI + CLI)
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH=<path-to-Qt6>
cmake --build build --config Release
# Launch the GUI builder
.\build\Release\webtop_builder.exe
# Or use the CLI directly
.\core\target\release\webtop_cli.exe --url https://example.com --out C:\Apps --name Example
The output folder will contain <name>.exe plus the CEF runtime files (libcef.dll, locales/, Resources/, etc.). Run <name>.exe to launch your site as a desktop app.
Project Layout
webtop/
├── core/ Rust core (FFI lib + CLI). Patches stub, copies CEF, emits output.
├── builder/ Qt6 GUI front-end (C++). Calls Rust via FFI; CLI passthrough.
├── runtime/ CEF runtime stub (C++). Reads embedded config, blocks requests.
├── scripts/ CEF download, stub build, EasyList refresh, CEF bundle.
└── dist/ Built stub.bin + bundled CEF runtime files.
How It Works
The Rust core appends a blob to a copy of stub.bin:
[ stub.exe ]
[ u64 cfg_len ][ cfg_json ] url, app_name, adblock
[ u64 flt_len ][ easylist text ]
[ u64 blob_offset ][ "WBAPP\0\0\0" ] 16-byte trailer
The generated exe reads its own file at startup, locates the WBAPP magic trailer at EOF, and deserializes the config + EasyList filters. If AdBlocker is enabled, CefResourceRequestHandler::OnBeforeResourceLoad cancels any request whose URL matches an EasyList network rule.
Notes / Limitations
- Windows only (CEF binary distribution x64)
- Single-folder output (~200 MB per app due to CEF runtime files)
- AdBlocker matching is a simplified subset of EasyList (no regex, no
$third-party/$domain=options yet) - Tray icon uses the default application icon