Skip to content
CAI
Software that uses CAICheck a score

tauri-apps/wry

67.6

Adequate · 30 September 2026

13.5k

lines of production code

Rust

with Kotlin

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Wry is a cross-platform WebView rendering library for Rust that provides a unified API to embed web content on Windows, macOS, iOS, Linux, and Android. It manages platform-specific native webview backends while exposing consistent features such as custom protocol handling, JavaScript-to-native IPC, and permission management. The system also supports advanced interactions including file drag-and-drop, download handling, and WebAssembly execution across all supported operating systems.

How it got here

2020–2021 — Initial release and benchmarking infrastructure

6 changes.

This period covers the initial release of the Wry WebView rendering library, establishing its cross-platform core for Windows, macOS, Linux, and Android. It also introduces key features such as custom protocol workarounds and permission handlers, alongside the development of a comprehensive benchmarking suite to measure performance and memory usage.

2023–2024 — Android support and cross-platform drag-and-drop

9 changes.

This period focused on introducing initial Android backend support with a new Kotlin-based bridge and expanding cross-platform capabilities by implementing file drag-and-drop and download handling for Windows, macOS, and Linux. Concurrently, the project modernized its macOS and iOS WebKit integrations by refactoring to use the objc2 library and improving the robustness of custom protocol handlers.

Features

Add custom protocol example with WebAssembly support

The custom protocol example now includes a complete set of client-side files (index.html, subpage.html, and script.js) that demonstrate loading and executing WebAssembly modules via the custom protocol. The example features navigation between pages and includes a fallback mechanism for older WebViews that do not support \WebAssembly.instantiateStreaming\.

_examples/custom\protocol · high confidence

Add iOS WKWebView bindings via objc2

The iOS platform now includes generated bindings for the WebKit framework, enabling Rust code to interact with WKWebView on iOS devices. This change introduces the \WKWebView\ class and related enums (such as \WKMediaPlaybackState\ and \WKFullscreenState\) using the \objc2\ crate, mirroring the structure previously available for macOS. Users can now instantiate and configure web views on iOS, set navigation and UI delegates, and load content via standard WebKit methods.

src/wkwebview/ios · high confidence

Android WebView bridge implementation in Kotlin

The Android platform support now uses a new Kotlin-based bridge (\src/android/kotlin\) to manage the WebView lifecycle, JavaScript execution, and native interactions. This includes \WryActivity\ for handling activity states and back navigation, \RustWebView\ for script evaluation and asset loading, and dedicated clients (\RustWebChromeClient\, \RustWebViewClient\) for managing permissions, file picking, and URL interception. The implementation also introduces a structured logging system (\Logger\) and a permission helper (\PermissionHelper\) to streamline Android permission requests, replacing previous Android-specific integration methods.

src/android/kotlin · high confidence

Initial Android backend implementation

Introduces the Android platform support for the library, including the JNI bindings, main pipe communication channel, and activity management required to host webviews on Android devices.

src/android · high confidence

Initial release of Wry WebView rendering library

This entry marks the initial release of Wry, a cross-platform WebView rendering library for Rust. The repository is established with core build infrastructure (build.rs, rustfmt.toml, .gitignore), licensing (Apache-2.0, MIT, SPDX), and documentation (README, MOBILE.md, SECURITY.md). The codebase includes the initial implementation of the WebView API, supporting Windows (WebView2), macOS/iOS (WKWebView), Linux (GTK/WebKitGTK), and Android, along with a logo and automated dependency update configuration via Renovate.

(repo-wide) · high confidence

New and updated examples demonstrating core WebView capabilities

The examples directory now includes a comprehensive set of demonstrations for the library's features. New additions include \async\_custom\_protocol.rs\ for asynchronous protocol handling, \cookies.rs\ for managing webview cookies, \permission\_handler.rs\ for handling web permissions, \reparent.rs\ for moving webviews between windows, and \streaming.rs\ for video streaming with range requests. Existing examples have been updated to reflect current APIs: \custom\_protocol.rs\ now uses the synchronous handler, \custom\_titlebar.rs\ supports touch dragging, \gtk\_multiwebview.rs\ demonstrates adding webviews to \gtk::Fixed\, and \multiwebview.rs\ and \wgpu.rs\ show child webview integration with winit.

examples · high confidence

New benchmarking infrastructure for Wry

The bench directory now includes a complete Rust-based benchmarking suite. This adds tools to execute benchmarks (run\_benchmark.rs), which measure execution time, binary size, maximum memory usage, thread counts, and system call counts (via strace and mprof) for Wry examples. It also includes a utility (build\_benchmark\_jsons.rs) to aggregate these results into JSON files for historical tracking on GitHub Pages, and shared utilities (utils.rs) to handle platform detection, path resolution, and output parsing.

bench · high confidence

New download and drag-and-drop handling for macOS webviews

The \wkwebview\ backend now includes dedicated modules for managing file downloads and drag-and-drop interactions on macOS. The new \download.rs\ module implements the \WKDownloadDelegate\ protocol to intercept navigation-based downloads, allowing the application to determine the save location (defaulting to the system Downloads directory) and handle success or failure callbacks. The \drag\_drop.rs\ module implements the \NSDraggingDestination\ protocol to capture file drops, extracting file paths and coordinates to emit \DragDropEvent\ notifications (Enter, Over, Drop, Leave) to the host application. These changes enable users to save files initiated from web content and drop local files into the webview with proper event handling.

src/wkwebview · high confidence

WebView2 custom protocol workaround and permission handler API

The library now includes a custom protocol workaround mechanism (\custom\_protocol\_workaround.rs\) to support non-standard protocols on WebView2 (Windows 10+) and Android by intercepting and rewriting HTTP/HTTPS URIs. Additionally, a new cross-platform permission handler API is introduced, allowing applications to grant or deny permissions such as microphone, camera, geolocation, notifications, and clipboard access via \WebViewBuilder::with\_permission\_handler\.

src · high confidence

Windows file drag-and-drop support for WebView2

The WebView2 backend on Windows now supports handling file drag-and-drop events. A new \drag\_drop.rs\ module implements the \IDropTarget\ interface to intercept file drops, allowing applications to receive \DragDropEvent\ notifications (such as Enter, Hover, and Drop) with file paths and cursor positions. This replaces the previous behavior where file drops were either ignored or handled by the browser, enabling custom application logic for dragged files within the webview.

src/webview2 · high confidence

Architecture

Refactor macOS WebKit integration to use objc2 and improve custom protocol robustness

The macOS WebKit backend has been refactored to use the \objc2\ library, replacing the previous Objective-C runtime bindings. This change introduces new, dedicated delegate classes for navigation, downloads, UI interactions, and IPC, while also adding a specific observer for document title changes. A key improvement is the robustness of the custom URL scheme handler, which now validates task and webview state to prevent crashes and race conditions during async protocol responses. Additionally, the webview class now supports configurable traffic light insets for window controls and allows custom input accessory views on iOS.

src/wkwebview/class · high confidence

Behavioural changes

WebKitGTK backend refactored with new drag-and-drop and synthetic mouse event handling

The WebKitGTK backend has been restructured to improve maintainability and fix platform-specific issues. A new drag-and-drop implementation (\drag\_drop.rs\) now correctly handles file drops on Wayland and Linux, resolving previous issues where drop events were not firing. Additionally, a synthetic mouse event system (\synthetic\_mouse\_events.rs\) has been added to support back/forward navigation buttons on mice by translating specific button presses into JavaScript mouse events. The core module (\mod.rs\) and web context (\web\_context.rs\) have been refactored to use the \http\ crate for request handling, migrate to the \dpi\ crate for sizing, and properly configure the \WebsiteDataManager\ cache directories, ensuring better compatibility with modern GTK and WebKitGTK versions.

src/webkitgtk · high confidence

Fixes

Fix Android IPC null pointer exception

Resolves a crash on Android where calling \ipc.postMessage(null)\ would trigger a null pointer exception. The implementation now safely handles null messages by checking for null before processing, ensuring stable communication between JavaScript and native code.

repository · high confidence

Test coverage

Added benchmark test suite for CPU-intensive and custom protocol scenarios

Added new benchmark tests in the \bench/tests\ directory, including \cpu\_intensive\, \custom\_protocol\, and \hello\_world\ examples. These tests exercise WebView functionality such as custom protocols, IPC handlers, and web workers to measure performance under CPU-intensive loads, providing a baseline for regression testing.

bench/tests · high confidence

Dependencies

Wry 0.57.0 release with Rust 2024 edition and major dependency updates

The Wry library has been updated to version 0.57.0, migrating the crate to the Rust 2024 edition and raising the minimum supported Rust version (MSRV) to 1.85. This release introduces significant dependency upgrades, including updating the Windows bindings (\windows\ and \windows-core\) to version 0.62, upgrading the WebView2 COM bindings (\webview2-com\) to 0.39, and updating the macOS/iOS Objective-C bindings (\objc2\ and related crates) to version 0.6.4. Additionally, the Linux dependencies have been updated, with \webkit2gtk\ moving to version 2.0.2 and \gtk\ to 0.18, while the \http\ crate has been upgraded to version 1.1. A new \bench\ directory has also been added to the project structure to support benchmarking.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 64 → 68 (+3.5)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 89 → 89 (-0.0)
  • Architecture 99 → 99 (+0.5)
  • Maturity 52 → 52 (+0.1)
  • Readiness 89 → 91 (+1.8)
  • Security 54 → 67 (+13.0)
  • Event Sourcing 100 → 100 (+0.0)
  • Performance 100 (new)

Resolved (4)

  • Documentation: no installation or build instructions (README.md)
  • Hotspot: src/android/binding.rs (src/android/binding.rs)
  • Off-boarding risk: anonymized user #1
  • Orphaned knowledge (src/wkwebview/ios/WKWebView.rs)

New (3)

  • Dependency hygiene PARTLY measured — Cargo dependencies read, dependency currency not (crates.io unreachable)
  • Off-boarding risk: anonymized user #1
  • Platform-specific configuration methods are split between Builder and Runtime extensions for macOS/Darwin. with_traffic_light_inset is available on the builder (Darwin), but set_traffic_light_inset is available on the runtime (MacOS). This forces users to know which platform trait to use for configuration vs. modification, and creates a naming inconsistency (with_ vs set_) for the same concept.

Changes since last survey

  • 5 commits — 3 feature/other, 2 fixes

By area

  • src/wkwebview — 2 commits
  • (root) — 1 commit
  • .changes/conditional-linux-ipc-bridge.md — 1 commit
  • .changes/macos-background-activation.md — 1 commit

Notable commits

  • fix: fix(macos): avoid activating hidden or unfocused webviews (#1866)
  • fix: fix(webkitgtk): only inject IPC bridge with handler (#1839)
  • change: chore: migrate once_cell to std (#1861)
  • change: chore: migrate to edition 2024 (#1847)
  • change: enhance: log eval errors (#1868)

Architecture

  • Unchanged — 0 containers · 1 contexts · 0 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

tauri-apps/wry was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit cab3eace983007a16f132c14a34d0a220c707bea — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.