Skip to main content

Qt native WebView bridge with PySide6 bindings

Project description

FIT WebView Bridge

🇬🇧 English | 🇮🇹 Italiano

Description

FIT WebView Bridge is a cross‑platform Qt widget (C++/Objective‑C++) with PySide6 bindings that wraps the OS‑native web engines:

  • Windows → Edge WebView2
  • macOS → WKWebView
  • Linux → WebKitGTK (with GStreamer for codecs)

It exposes a unified Python API for browser control and enables forensic viewing/capture of content, including media requiring proprietary codecs (e.g., H.264/AAC), without custom QtWebEngine builds or codec redistribution burdens (system codecs are used). All controls (UI and app logic) are delegated to the PySide window.

Why this project

QtWebEngine (Chromium) does not enable proprietary codecs by default, and redistributing them requires licensing. Alternatives (building QtWebEngine with codecs or using QtWebView/QML) have portability/control limitations. The chosen path is to leverage native engines, achieving codec compatibility and full control via a Python API.

Repository layout

fit-webview-bridge/
├─ CMakeLists.txt
├─ cmake/                   # Find*.cmake, toolchains, helpers
├─ include/fitwvb/          # Public headers (API)
├─ src/
│  ├─ core/                 # Facade / common interfaces
│  ├─ win/                  # Edge WebView2 backend (C++)
│  ├─ macos/                # WKWebView backend (Obj-C++)
│  └─ linux/                # WebKitGTK backend (C++)
├─ bindings/pyside6/        # Shiboken6: typesystem & config
├─ tests/                   # Unit / integration
└─ examples/                # Minimal PySide6 demo app

Interface (methods/slots + signals)

Methods / slots

  • load(url)
  • back()
  • forward()
  • reload()
  • stop()
  • setHtml(html, baseUrl)
  • evalJs(script, callback)

Signals

  • urlChanged(QUrl)
  • titleChanged(QString)
  • loadProgress(int)
  • loadFinished(bool)
  • consoleMessage(QString)

Note: the API is uniform across OSes; implementations delegate to the native engine.

Prerequisites

Common

  • CMake (>= 3.24 recommended)
  • Ninja (generator)
  • Python 3.9+
  • PySide6 and Shiboken6 (for Python bindings)
  • Platform build toolchain

Windows

  • MSVC (Visual Studio 2022 or Build Tools) and Windows SDK
  • Microsoft Edge WebView2 Runtime
  • WebView2 SDK (NuGet/vcpkg)

macOS

  • Xcode + Command Line Tools
  • Objective‑C++ enabled (.mm)
  • Frameworks: WebKit, Cocoa

Linux

  • GCC/Clang, pkg-config
  • WebKitGTK dev packages (e.g., webkit2gtk-4.1 or distro equivalent)
  • GStreamer (base + required plugins for codecs)

Build (indicative)

git clone https://github.com/fit-project/fit-webview-bridge.git
cd fit-webview-bridge
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_PYSIDE6_BINDINGS=ON
cmake --build build
# (optional) ctest --test-dir build

Examples

PySide6 samples in examples/ demonstrate URL loading, JS injection, and signal handling.

Codec & licensing notes

The project does not redistribute proprietary codecs: it leverages codecs already provided by the OS. End‑user usage must comply with the relevant licenses/formats.

Project status

Initial/alpha (API subject to change).

Fit Web — Project rationale and options for proprietary codecs

Fit Web is the FIT project's scraper module designed to forensically acquire and preserve web content: https://github.com/fit-project/fit-web.

Like the other modules, Fit Web is based on PySide (Qt for Python). It currently uses QtWebEngine, which is a Chromium wrapper.

The problem

By default, Chromium does not enable proprietary audio/video codecs, notably H.264 and AAC.

Options considered

1) Build QtWebEngine with proprietary codecs

Enable the -webengine-proprietary-codecs option.
Documentation: https://doc.qt.io/qt-6/qtwebengine-overview.html

Drawbacks

  • Must be done for all supported operating systems.
  • The build requires very powerful machines (e.g., difficulties on a MacBook Air M2 with 16 GB RAM).
  • Licensing: distributing H.264 and AAC requires a license.

2) Use QtWebView

QtWebView relies on the OS’s native web APIs; for proprietary‑codec content it uses the system’s codecs.
Pros: no custom builds, no direct license handling.
Cons: the UI layer is QML, geared toward lightweight (often mobile) UIs, so it doesn’t provide full browser control compared to QtWebEngine.

Documentation: https://doc.qt.io/qt-6/qtwebview-index.html

3) Implement a native Qt widget (C/C++) per OS

Develop a Qt widget (usable from PySide6) that embeds the system’s web engine:

  • Windows → Edge WebView2
  • macOS → WKWebView
  • Linux → WebKitGTK (with GStreamer for codecs)

Advantages

  • No redistribution licensing: leverage the codecs already provided by the OS.
  • A common API can be exposed to PySide6.
  • More control than QtWebView, without QML’s limitations.

Disadvantages

  • Medium‑to‑high complexity to implement.
  • Requires C++ and, on macOS, Objective‑C++.
  • Requires custom CMake to include libraries and linking.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fit_webview_bridge-0.1.1a6.tar.gz (13.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fit_webview_bridge-0.1.1a6-cp313-cp313-macosx_11_0_arm64.whl (56.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

fit_webview_bridge-0.1.1a6-cp312-cp312-macosx_11_0_arm64.whl (56.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

fit_webview_bridge-0.1.1a6-cp311-cp311-macosx_11_0_arm64.whl (56.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file fit_webview_bridge-0.1.1a6.tar.gz.

File metadata

  • Download URL: fit_webview_bridge-0.1.1a6.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for fit_webview_bridge-0.1.1a6.tar.gz
Algorithm Hash digest
SHA256 240e5de14edf097f1164ea43e15a7e45b5ed9d4c5a22789a70f82c13212fe2c1
MD5 bdce90e374438bb54222c0fac27242fd
BLAKE2b-256 cb7f10bc3d59359000f73c6663f1dd7a4fd422a48ee8c4b339c81cbb4bb025b4

See more details on using hashes here.

File details

Details for the file fit_webview_bridge-0.1.1a6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fit_webview_bridge-0.1.1a6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 09e01b258463a2521499a2c5267a7e9ad8b15f507c25180684b2f660b381558b
MD5 79ea1b5c961d1b9103576727f62eacf1
BLAKE2b-256 469e4d605e39d42f7c89eb22a5cefeb2b1c82d97cc721d028fb65da42a26dde0

See more details on using hashes here.

File details

Details for the file fit_webview_bridge-0.1.1a6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fit_webview_bridge-0.1.1a6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3eeee616754796566a511eb2e9d6a9d083dc4fd927a4a0c66332f41fe2051f00
MD5 28d59d799cbacabde97fbd7bb99a735e
BLAKE2b-256 65965976441fb7dce26c810bf5daff9e6cbb3512ba9cde4282ece7f49d8017ca

See more details on using hashes here.

File details

Details for the file fit_webview_bridge-0.1.1a6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fit_webview_bridge-0.1.1a6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d7ba99b79452413dd42f7d6e3a9b70a2d21189eedc6f4efa3874292b2ccf433
MD5 03693718075652b575bba18cbe89df2a
BLAKE2b-256 24cc9b6453e5da0d46e19b091c5c5f709e46d4d2c6a678a8747ad3c443c70ac1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page