An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
webview
A tiny cross-platform webview library for C/C++ to build modern cross-platform GUIs.
The goal of the project is to create a common HTML5 UI abstraction layer for the most widely used platforms.
It supports two-way JavaScript bindings (to call JavaScript from C/C++ and to call C/C++ from JavaScript).
NoteLanguage binding for Go has moved. Versions <= 0.1.1 are available in this repository.
Platform Support
Platform
Technologies
Linux
GTK, WebKitGTK
macOS
Cocoa, WebKit
Windows
Windows API, WebView2
Documentation
The most up-to-date documentation is right in the source code. Improving the documentation is a continuous effort and you are more than welcome to contribute.
Prerequisites
Your compiler must support minimum C++11.
This project uses CMake and Ninja, and while recommended for your convenience, these tools aren't required for using the library.
Linux and BSD
The GTK and WebKitGTK libraries are required for development and distribution. You need to check your package repositories regarding which packages to install.
Packages
Debian:
WebKitGTK 6.0, GTK 4:
Development: apt install libgtk-4-dev libwebkitgtk-6.0-dev
Production: apt install libgtk-4-1 libwebkitgtk-6.0-4
WebKitGTK 4.1, GTK 3, libsoup 3:
Development: apt install libgtk-3-dev libwebkit2gtk-4.1-dev
Production: apt install libgtk-3-0 libwebkit2gtk-4.1-0
WebKitGTK 4.0, GTK 3, libsoup 2:
Development: apt install libgtk-3-dev libwebkit2gtk-4.0-dev
Production: apt install libgtk-3-0 libwebkit2gtk-4.0-37
Fedora:
WebKitGTK 6.0, GTK 4:
Development: dnf install gtk4-devel webkitgtk6.0-devel
Production: dnf install gtk4 webkitgtk6.0
WebKitGTK 4.1, GTK 3, libsoup 3:
Development: dnf install gtk3-devel webkit2gtk4.1-devel
Production: dnf install gtk3 webkit2gtk4.1
WebKitGTK 4.0, GTK 3, libsoup 2:
Development: dnf install gtk3-devel webkit2gtk4.0-devel
Production: dnf install gtk3 webkit2gtk4.0
FreeBSD:
GTK 4: pkg install webkit2-gtk4
GTK 3: pkg install webkit2-gtk3
Library Dependencies
Linux:
Use pkg-config with --cflags and --libs to get the compiler/linker options for one of these sets of modules:
gtk4 webkitgtk-6.0
gtk+-3.0 webkit2gtk-4.1
gtk+-3.0 webkit2gtk-4.0
Link libraries: dl
macOS:
Link frameworks: WebKit
Link libraries: dl
Windows:
WebView2 from NuGet.
Windows libraries: advapi32 ole32 shell32 shlwapi user32 version
BSD
Execution on BSD-based systems may require adding the wxallowed option (see mount(8)) to your fstab to bypass W^X memory protection for your executable. Please see if it works without disabling this security feature first.
Windows
Your compiler must support C++14 and we recommend to pair it with an up-to-date Windows 10 SDK.
For Visual C++ we recommend Visual Studio 2022 or later. There are some requirements when using MinGW-w64.
Developers and end-users must have the WebView2 runtime installed on their system for any version of Windows before Windows 11.
Getting Started
If you are a developer of this project then please go to the development section.
You will have a working app, but you are encouraged to explore the available examples.
Create the following files in a new directory:
.gitignore:
# Build artifacts
/build
C++ Example
CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)
project(example LANGUAGES CXX)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
include(FetchContent)
FetchContent_Declare(
webview
GIT_REPOSITORY https://github.com/webview/webview
GIT_TAG 0.12.0)
FetchContent_MakeAvailable(webview)
add_executable(example WIN32)
target_sources(example PRIVATE main.cc)
target_link_libraries(example PRIVATE webview::core)
main.cc:
#include "webview/webview.h"
#include <iostream>
#ifdef _WIN32
int WINAPI WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/,
LPSTR /*lpCmdLine*/, int /*nCmdShow*/) {
#else
int main() {
#endif
try {
webview::webview w(false, nullptr);
w.set_title("Basic Example");
w.set_size(480, 320, WEBVIEW_HINT_NONE);
w.set_html("Thanks for using webview!");
w.run();
} catch (const webview::exception &e) {
std::cerr << e.what() << '\n';
return 1;
}
return 0;
}
C Example
CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)
project(example LANGUAGES C CXX)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
include(FetchContent)
FetchContent_Declare(
webview
GIT_REPOSITORY https://github.com/webview/webview
GIT_TAG 0.12.0)
FetchContent_MakeAvailable(webview)
add_executable(example WIN32)
target_sources(example PRIVATE main.c)
target_link_libraries(example PRIVATE webview::core_static)
main.c:
#include "webview/webview.h"
#include <stddef.h>
#ifdef _WIN32
#include <windows.h>
#endif
#ifdef _WIN32
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine,
int nCmdShow) {
(void)hInst;
(void)hPrevInst;
(void)lpCmdLine;
(void)nCmdShow;
#else
int main(void) {
#endif
webview_t w = webview_create(0, NULL);
webview_set_title(w, "Basic Example");
webview_set_size(w, 480, 320, WEBVIEW_HINT_NONE);
webview_set_html(w, "Thanks for using webview!");
webview_run(w);
webview_destroy(w);
return 0;
}
Building the Example
Build the project:
cmake -G Ninja -B build -S . -D CMAKE_BUILD_TYPE=Release
cmake --build build
Find the executable in the build/bin directory.
Building Amalgamated Library
An amalgamated library can be built when building the project using CMake, or the amalgamate.py script can be invoked directly.
The latter is described below.
python3 scripts/amalgamate/amalgamate.py --base core --search include --output webview_amalgamation.h src
See python3 scripts/amalgamate/amalgamate.py --help for script usage.
Non-CMa
Read the full README on GitHub