webui-dev/webui

GitHub: webui-dev/webui

一个轻量级便携的 GUI 库,允许开发者使用任意已安装的 Web 浏览器作为前端界面,后端搭配任意编程语言。

Stars: 4528 | Forks: 300

![Logo](https://static.pigsec.cn/wp-content/uploads/repos/cas/23/23a15bd9742134c0f3a36f5db3c0fd58b0240772c751eb58f61b968f04896312.svg) # WebUI v2.5.0-beta.4 [![](https://img.shields.io/github/actions/workflow/status/webui-dev/webui/ci.yml?branch=main&style=for-the-badge&logo=githubactions&labelColor=414868&logoColor=C0CAF5)](https://github.com/webui-dev/webui/actions?query=branch%3Amain) [![](https://img.shields.io/github/last-commit/webui-dev/webui?style=for-the-badge&logo=github&logoColor=C0CAF5&labelColor=414868)](https://github.com/webui-dev/webui/pulse) [![](https://img.shields.io/github/v/tag/webui-dev/webui?style=for-the-badge&logo=webtrees&logoColor=C0CAF5&labelColor=414868&color=7664C6)](https://github.com/webui-dev/webui/releases/latest) [![](https://img.shields.io/github/license/webui-dev/webui?style=for-the-badge&logo=opensourcehardware&label=License&logoColor=C0CAF5&labelColor=414868&color=8c73cc)](https://github.com/webui-dev/webui/blob/main/LICENSE) ![Screenshot](https://static.pigsec.cn/wp-content/uploads/repos/cas/dc/dc2995ab9fd8c0211ed570f0be7b9fa99d09b1b3d3bdb1f0e043932774e7cb5b.png) ![Screenshot](/examples/C/frameless/webui_frameless.png) ![Screenshot](/examples/C/frameless/webui_frameless_linux.png)
![GPT](https://static.pigsec.cn/wp-content/uploads/repos/cas/cf/cf76b88c22cb217cd4e86dc23bffcc0d99f18095e1c5800664653543b11b8011.png) ### _向 AI 提问任何关于 WebUI 的问题_ ### [WebUI GPT - C/C++](https://chatgpt.com/g/g-685b01d42208819185a5a7c8ed74fa23-webui-c-c)
## 下载 - [最新稳定版](https://github.com/webui-dev/webui/releases) - [每日构建版](https://github.com/webui-dev/webui/releases/tag/nightly) ## 目录 - [特性](#features) - [展示](#showcase) - [UI 与 Web 技术](#ui--the-web-technologies) - [文档](#documentation) - [构建](#build) - [示例](#examples) - [封装库](#wrappers) - [支持的 Web 浏览器](#supported-web-browsers) - [许可证](#license) ## 文档 - [在线文档](https://webui.me/docs.html#/) ## 特性 - 可移植(*仅需在运行时使用 Web 浏览器,WebView 为可选项*) - 单一头文件 - 轻量级(*仅几 Kb 的库*)且内存占用低 - 快速的二进制 WebSocket 通信协议 - 跨平台与多浏览器支持 - 使用私人配置文件以确保安全 - 跨平台 WebView(*可选*) ## UI 与 Web 技术 [Borislav Stanimirov](https://ibob.bg/) 在 [C++ Conference 2019 (_YouTube_)](https://www.youtube.com/watch?v=bbbcZd4cuxg) 上探讨了在 Web 浏览器中使用 HTML5 作为 GUI 的方法。
![CPPCon](https://static.pigsec.cn/wp-content/uploads/repos/cas/5f/5f274f278cb33f814663872b49b0bbaedb5772b5ac86db3bfac0367df385d70f.png)
### 为什么使用 Web 浏览器? 如今的 Web 浏览器具备了现代 UI 所需的一切功能。Web 浏览器非常成熟且高度优化。因此,将其作为 GUI 将是一个绝佳的选择。虽然老旧的 GUI 库既复杂又过时,但基于 WebView 的应用程序仍然是一个选择。然而,WebView 需要庞大的 SDK 进行构建以及许多依赖项才能运行,并且它只能提供类似于真正 Web 浏览器的部分功能。这就是为什么 WebUI 使用真正的 Web 浏览器,为您提供全面 Web 技术的全部功能,同时保持您的软件轻量级和可移植性。 ### 它是如何工作的?
![Diagram](https://static.pigsec.cn/wp-content/uploads/repos/cas/b0/b0f5908eba821bcf85955c765e24b602129ca3a3d13868fdd5a8dc210cd96293.png)
可以将 WebUI 视为 WebView 控制器,但它不是将 WebView 控制器嵌入到您的程序中(因为这会使最终生成的程序体积庞大,并且由于需要 WebView 运行时而无法移植)。相反,通过使用 WebUI,您只需使用一个小巧的静态/动态库来运行任何已安装的 Web 浏览器并将其作为 GUI,这使得您的程序小巧、快速且可移植。**它唯一需要的只是一个 Web 浏览器**。 ### 运行时依赖比较 | GUI | Windows 依赖 | Linux 依赖 | macOS 依赖 | |-----------|---------|-------|-------| | **Tauri** | WebView2 | GTK/WebKitGTK | WKWebView, WebKit | | **Qt** | Qt 捆绑库 | Qt 捆绑库, libxcb, libxkbcommon... | Qt 捆绑库 | | **Electron** | 内置 Chromium + Node.js | 内置 Chromium + Node.js | 内置 Chromium + Node.js | | **NW.js** | 内置 Chromium + Node.js | 内置 Chromium + Node.js | 内置 Chromium + Node.js | | **WebUI** | **仅需一个 Web 浏览器** | **仅需一个 Web 浏览器** | **仅需一个 Web 浏览器** | ## 构建 WebUI 库 ### Windows | 编译器 | 命令 | |----------|---------| | GCC | `mingw32-make` | | MSVC | `nmake` |
Windows SSL/TLS(可选) 下载并安装 Windows 预编译的 OpenSSL 二进制文件: - **MSVC**: [x64 OpenSSL v3.3.1](https://slproweb.com/download/Win64OpenSSL-3_3_1.msi) 或 [_32位_](https://slproweb.com/download/Win32OpenSSL-3_3_1.msi)。有关更多信息,请参阅 [Wiki 列表](https://wiki.openssl.org/index.php/Binaries)。 - **MinGW**: [适用于 Windows 且带有 OpenSSL 的 Curl](https://curl.se/windows/) ``` # GCC mingw32-make WEBUI_USE_TLS=1 WEBUI_TLS_INCLUDE="C:\curl-xxx-xxx-mingw\curl-xxx-xxx-mingw\include" WEBUI_TLS_LIB="C:\curl-xxx-xxx-mingw\curl-xxx-xxx-mingw\lib" # MSVC nmake WEBUI_USE_TLS=1 WEBUI_TLS_INCLUDE="C:\Program Files\OpenSSL-xxx\include" WEBUI_TLS_LIB="C:\Program Files\OpenSSL-xxx\lib" ```
### Linux | 编译器 | 命令 | |----------|---------| | GCC | `make` | | Clang | `make CC=clang` |
Linux SSL/TLS(可选) ``` sudo apt update sudo apt install libssl-dev # GCC make WEBUI_USE_TLS=1 # Clang make WEBUI_USE_TLS=1 CC=clang ```
### macOS | 编译器 | 命令 | |----------|---------| | 默认 | `make` |
macOS SSL/TLS(可选) ``` brew install openssl make WEBUI_USE_TLS=1 ```
## 最简 WebUI 应用程序 - **C** #include "webui.h" int main() { size_t my_window = webui_new_window(); webui_show(my_window, " Hello World ! "); webui_wait(); return 0; } - **C++** #include "webui.hpp" #include int main() { webui::window my_window; my_window.show(" C++ Hello World ! "); webui::wait(); return 0; } - **更多 C/C++ 示例** - [C](https://github.com/webui-dev/webui/tree/main/examples/C) - [C++](https://github.com/webui-dev/webui/tree/main/examples/C++) - **其他语言** - [封装库列表](#Wrappers) ## 构建 WebUI 应用程序 ### Windows | 编译器 | 类型 | 命令 | |----------|--------|---------| | GCC | 静态链接 | `gcc -Os -Wl,-subsystem=windows my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-static -lws2_32 -Wall -luser32 -static -lole32 -lstdc++ -luuid -o my_application.exe` | | GCC | 动态链接 | `gcc -Wl,-subsystem=windows my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" "webui-2.dll" -lws2_32 -Wall -luser32 -lole32 -o -lstdc++ -luuid my_application.exe` | | MSVC | 静态链接 | `cl my_application.c /I"_PATH_TO_WEBUI_INCLUDE_" /link /LIBPATH:"_PATH_TO_WEBUI_LIB_" /SUBSYSTEM:WINDOWS webui-2-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:my_application.exe` | | MSVC | 动态链接 | `cl my_application.c /I"_PATH_TO_WEBUI_INCLUDE_" /link /LIBPATH:"_PATH_TO_WEBUI_LIB_" /SUBSYSTEM:WINDOWS webui-2.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:my_application.exe` |
带有 SSL/TLS 的 Windows(可选) | 编译器 | 类型 | 命令 | |----------|--------|---------| | GCC | 静态链接 | `gcc -Os -Wl,-subsystem=windows my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure-static -lws2_32 -Wall -luser32 -static -lole32 -lstdc++ -luuid -o my_application.exe` | | GCC | 动态链接 | `gcc -Wl,-subsystem=windows my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" "webui-2-secure.dll" -lws2_32 -Wall -luser32 -lole32 -lstdc++ -luuid -o my_application.exe` | | MSVC | 静态链接 | `cl my_application.c /I"_PATH_TO_WEBUI_INCLUDE_" /link /LIBPATH:"_PATH_TO_WEBUI_LIB_" /SUBSYSTEM:WINDOWS webui-2-secure-static.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:my_application.exe` | | MSVC | 动态链接 | `cl my_application.c /I"_PATH_TO_WEBUI_INCLUDE_" /link /LIBPATH:"_PATH_TO_WEBUI_LIB_" /SUBSYSTEM:WINDOWS webui-2-secure.lib user32.lib Advapi32.lib Shell32.lib Ole32.lib /OUT:my_application.exe` |
### Linux | 编译器 | 类型 | 命令 | |----------|--------|---------| | GCC | 静态链接 | `gcc -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-static -lpthread -lm -ldl -o my_application` | | GCC | 动态链接 | `gcc my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2 -lpthread -lm -ldl -o my_application` | | Clang | 静态链接 | `clang -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-static -lpthread -lm -ldl -o my_application` | | Clang | 动态链接 | `clang my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2 -lpthread -lm -ldl -o my_application` |
带有 SSL/TLS 的 Linux(可选) | 编译器 | 类型 | 命令 | |----------|--------|---------| | GCC | 静态链接 | `gcc -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure-static -lpthread -lm -ldl -o my_application` | | GCC | 动态链接 | `gcc my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure -lpthread -lm -ldl -o my_application` | | Clang | 静态链接 | `clang -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure-static -lpthread -lm -ldl -o my_application` | | Clang | 动态链接 | `clang my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure -lpthread -lm -ldl -o my_application` |
### macOS | 编译器 | 类型 | 命令 | |----------|--------|---------| | Clang | 静态链接 | `clang -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-static -lpthread -lm -framework Cocoa -framework WebKit -o my_application` | | Clang | 动态链接 | `clang my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2 -lpthread -lm -framework Cocoa -framework WebKit -o my_application` |
带有 SSL/TLS 的 macOS(可选) | 编译器 类型 | 命令 | |----------|--------|---------| | Clang | 静态链接 | `clang -Os my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure-static -lpthread -lm -framework Cocoa -framework WebKit -o my_application` | | Clang | 动态链接 | `clang my_application.c -I"_PATH_TO_WEBUI_INCLUDE_" -L"_PATH_TO_WEBUI_LIB_" -lwebui-2-secure -lpthread -lm -framework Cocoa -framework WebKit -o my_application` |
## 封装库 | 语言 | v2.5.0 API | 链接 | | --------------- | ---------- | ---------------------------------------------------- | | Python | ✔️ | [Python-WebUI](https://github.com/webui-dev/python-webui) | | Go | ✔️ | [Go-WebUI](https://github.com/webui-dev/go-webui) | | Zig | ✔️ | [Zig-WebUI](https://github.com/webui-dev/zig-webui) | | Nim | ✔️ | [Nim-WebUI](https://github.com/webui-dev/nim-webui) | | V | ✔️ | [V-WebUI](https://github.com/webui-dev/v-webui) | | Rust | ✔️ | [Rust-WebUI](https://github.com/webui-dev/rust-webui) | | TS / JS (Deno) | ✔️ | [Deno-WebUI](https://github.com/webui-dev/deno-webui) | | TS / JS (Bun) | ✔️ | [Bun-WebUI](https://github.com/webui-dev/bun-webui) | | Swift | ✔️ | [Swift-WebUI](https://github.com/webui-dev/swift-webui) | | Odin | ✔️ | [Odin-WebUI](https://github.com/webui-dev/odin-webui) | | Pascal | ✔️ | [Pascal-WebUI](https://github.com/webui-dev/pascal-webui) | | Purebasic | ✔️ | [Purebasic-WebUI](https://github.com/webui-dev/purebasic-webui) | | - | - | - | | FSharp-WebUI | ✔️ | [FSharp-WebUI](https://github.com/no-waves/FSharp-WebUI) | | Common Lisp | _未完成_ | [cl-webui](https://github.com/garlic0x1/cl-webui) | | Delphi | _未完成_ | [WebUI4Delphi](https://github.com/salvadordf/WebUI4Delphi) | | C# | _未完成_ | [WebUI4CSharp](https://github.com/salvadordf/WebUI4CSharp) | | WebUI.NET | _未完成_ | [WebUI.NET](https://github.com/Juff-Ma/WebUI.NET) | | QuickJS | _未完成_ | [QuickUI](https://github.com/xland/QuickUI) | | PHP | _未完成_ | [PHPWebUiComposer](https://github.com/KingBes/php-webui-composer) | ## 支持的 Web 浏览器 | 浏览器 | Windows | macOS | Linux | | --------------- | --------------- | ------------- | --------------- | | Mozilla Firefox | ✔️ | ✔️ | ✔️ | | Google Chrome | ✔️ | ✔️ | ✔️ | | Microsoft Edge | ✔️ | ✔️ | ✔️ | | Chromium | ✔️ | ✔️ | ✔️ | | Yandex | ✔️ | ✔️ | ✔️ | | Brave | ✔️ | ✔️ | ✔️ | | Vivaldi | ✔️ | ✔️ | ✔️ | | Epic | ✔️ | ✔️ | _不支持_ | | Apple Safari | _不支持_ | _即将支持_ | _不支持_ | | Opera | _即将支持_ | _即将支持_ | _即将支持_ | ## 支持的 WebView(*可选*) | WebView | 状态 | | --------------- | --------------- | | Windows WebView2 | ✔️ | | Linux GTK WebView | ✔️ | | macOS WKWebView | ✔️ | ### 许可证
标签:C/C++, GUI框架, WebSocket, WebView, 事务性I/O, 依赖分析, 可视化界面, 客户端加密, 日志审计, 逆向工具