Common types shared across the API.
Dimensionsinterface Dimensions {
width: number;
height: number;
}
Positioninterface Position {
x: number;
y: number;
}
WebviewBoundsLogical-pixel rectangle used by child webview positioning.
interface WebviewBounds {
x: number;
y: number;
width: number;
height: number;
}
WebviewCookieinterface WebviewCookie {
name: string;
value: string;
domain?: string;
path?: string;
httpOnly?: boolean;
secure?: boolean;
sameSite?: 'strict' | 'lax' | 'none';
}
HeaderDatainterface HeaderData {
key: string;
value?: string;
}
CustomProtocolRequestThis is the legacy native plain-object shape. The public
BrowserWindow.registerProtocol() callback receives a standard global
Fetch API Request.
interface CustomProtocolRequest {
url: string; // full URL, e.g. "app://localhost/index.html"
method: string; // "GET", "POST", etc.
headers: HeaderData[];
body?: Buffer; // present for POST / PUT
}
CustomProtocolResponseinterface CustomProtocolResponse {
body: Buffer; // response bytes (required)
mimeType?: string; // default: "application/octet-stream"
statusCode?: number; // default: 200
headers?: HeaderData[]; // extra response headers
}
Public protocol handlers may return this legacy shape or a standard global
Fetch API Response.
WebContextOptionsinterface WebContextOptions {
dataDirectory?: string;
allowsAutomation?: boolean;
}
See the WebContext reference.
interface WebviewPageLoadEvent {
event: number;
url?: string;
}
interface WebviewTitleChangedEvent {
event: number;
title?: string;
}
interface WebviewDownloadEvent {
event: number;
url?: string;
success?: boolean;
}
interface WebviewNavigationEvent {
event: number;
url?: string;
}
interface WebviewNewWindowEvent {
event: number;
url?: string;
}
WebviewOptions.ipcNameipcName?: string adds a page-global alias for wry’s built-in window.ipc. For example, { ipcName: 'bindings' } makes window.bindings.postMessage(...) available before page scripts run. window.ipc remains available.
SerializationErrorwebview.expose() uses JSON serialization for static values, arguments, and returned values. Unsupported values reject with an error whose name is SerializationError.
IpcMessageReceived by the webview.onIpcMessage() callback.
interface IpcMessage {
body: Buffer;
method: string;
headers: HeaderData[];
uri: string;
}
Monitorinterface Monitor {
name?: string;
scaleFactor: number;
size: Dimensions;
position: Position;
videoModes: VideoMode[];
}
interface VideoMode {
size: Dimensions;
bitDepth: number;
refreshRate: number;
}
ApplicationEventinterface ApplicationEvent {
event: WebviewApplicationEvent;
customMenuEvent?: CustomMenuEvent;
}
interface CustomMenuEvent {
id: string;
windowId: number;
}
WebviewApplicationEventenum WebviewApplicationEvent {
WindowCloseRequested = 'WindowCloseRequested',
ApplicationCloseRequested = 'ApplicationCloseRequested',
CustomMenuClick = 'CustomMenuClick',
}
FullscreenTypeenum FullscreenType {
Exclusive = 'Exclusive',
Borderless = 'Borderless',
}
Themeenum Theme {
Light = 'Light',
Dark = 'Dark',
}
ProgressBarStateenum ProgressBarState {
None = 'None',
Normal = 'Normal',
Indeterminate = 'Indeterminate',
Paused = 'Paused',
Error = 'Error',
}
CursorTypeSee BrowserWindow cursor section for the full list.
WindowEventTypeNumeric discriminant of the event field in each BrowserWindowEventMap
payload. Values correspond to the order declared in the Rust WindowEventType
enum and are mapped to string event names by the JS layer — normal user code
should key on the string name, not the integer.
| Value | String name | Payload fields |
|---|---|---|
| 0 | move |
x, y (physical px, outer window position) |
| 1 | resize |
width, height (physical px, inner size) |
| 2 | close |
— |
| 3 | focus |
— |
| 4 | blur |
— |
| 5 | mouse-enter |
x, y (physical px, last cursor position) |
| 6 | mouse-leave |
— |
| 7 | mouse-move |
x, y (physical px) |
| 8 | mouse-down |
x, y, button (0=left 1=middle 2=right) |
| 9 | mouse-up |
x, y, button |
| 10 | scroll |
deltaX, deltaY (physical px) |
BrowserWindowEventMapinterface BrowserWindowEventMap {
move: { event: number; x: number; y: number };
resize: { event: number; width: number; height: number };
close: { event: number };
focus: { event: number };
blur: { event: number };
'mouse-enter': { event: number; x: number; y: number };
'mouse-leave': { event: number };
'mouse-move': { event: number; x: number; y: number };
'mouse-down': { event: number; x: number; y: number; button: number };
'mouse-up': { event: number; x: number; y: number; button: number };
scroll: { event: number; deltaX: number; deltaY: number };
}