Skip to content

@tauri-apps/api/dpi

Size and position types for working with logical and physical pixels.

Window and webview APIs report sizes and positions in physical pixels (actual screen pixels), while most browser APIs and the window creation options use logical pixels (physical pixels divided by the monitor scale factor). The classes in this module make the unit explicit and convert between the two.

import { getCurrentWindow } from '@tauri-apps/api/window';
const appWindow = getCurrentWindow();
const size = await appWindow.innerSize(); // PhysicalSize
const logical = size.toLogical(await appWindow.scaleFactor());

They also serialize into the shape tauri::Size / tauri::Position expect, so they can be passed straight to your own commands, see Size and Position.

This package is also accessible with window.__TAURI__.dpi when app.withGlobalTauri in tauri.conf.json is set to true.

Defined in: packages/api/src/dpi.ts:259

A position represented in logical pixels. For an explanation of what logical pixels are, see description of LogicalSize.

2.0.0

new LogicalPosition(x: number, y: number): LogicalPosition;

Defined in: packages/api/src/dpi.ts:264

Parameter Type
x number
y number

LogicalPosition

new LogicalPosition(object: {
Logical: {
x: number;
y: number;
};
}): LogicalPosition;

Defined in: packages/api/src/dpi.ts:265

Parameter Type
object { Logical: { x: number; y: number; }; }
object.Logical { x: number; y: number; }
object.Logical.x number
object.Logical.y number

LogicalPosition

new LogicalPosition(object: {
x: number;
y: number;
}): LogicalPosition;

Defined in: packages/api/src/dpi.ts:266

Parameter Type
object { x: number; y: number; }
object.x number
object.y number

LogicalPosition

Property Modifier Type Default value Defined in
type readonly "Logical" 'Logical' packages/api/src/dpi.ts:260
x public number undefined packages/api/src/dpi.ts:261
y public number undefined packages/api/src/dpi.ts:262

__TAURI_TO_IPC_KEY__(): {
x: number;
y: number;
};

Defined in: packages/api/src/dpi.ts:306

{
x: number;
y: number;
}
Name Type Defined in
x number packages/api/src/dpi.ts:308
y number packages/api/src/dpi.ts:309

toJSON(): {
x: number;
y: number;
};

Defined in: packages/api/src/dpi.ts:313

{
x: number;
y: number;
}
Name Type Defined in
x number packages/api/src/dpi.ts:308
y number packages/api/src/dpi.ts:309

toPhysical(scaleFactor: number): PhysicalPosition;

Defined in: packages/api/src/dpi.ts:302

Converts the logical position to a physical one.

import { LogicalPosition } from '@tauri-apps/api/dpi';
import { getCurrentWindow } from '@tauri-apps/api/window';
const appWindow = getCurrentWindow();
const factor = await appWindow.scaleFactor();
const position = new LogicalPosition(400, 500);
const physical = position.toPhysical(factor);
Parameter Type
scaleFactor number

PhysicalPosition

2.0.0


Defined in: packages/api/src/dpi.ts:41

A size represented in logical pixels. Logical pixels are scaled according to the window’s DPI scale. Most browser APIs (i.e. MouseEvent’s clientX) will return logical pixels.

For logical-pixel-based position, see LogicalPosition.

2.0.0

new LogicalSize(width: number, height: number): LogicalSize;

Defined in: packages/api/src/dpi.ts:46

Parameter Type
width number
height number

LogicalSize

new LogicalSize(object: {
Logical: {
height: number;
width: number;
};
}): LogicalSize;

Defined in: packages/api/src/dpi.ts:47

Parameter Type
object { Logical: { height: number; width: number; }; }
object.Logical { height: number; width: number; }
object.Logical.height number
object.Logical.width number

LogicalSize

new LogicalSize(object: {
height: number;
width: number;
}): LogicalSize;

Defined in: packages/api/src/dpi.ts:48

Parameter Type
object { height: number; width: number; }
object.height number
object.width number

LogicalSize

Property Modifier Type Default value Defined in
height public number undefined packages/api/src/dpi.ts:44
type readonly "Logical" 'Logical' packages/api/src/dpi.ts:42
width public number undefined packages/api/src/dpi.ts:43

__TAURI_TO_IPC_KEY__(): {
height: number;
width: number;
};

Defined in: packages/api/src/dpi.ts:88

{
height: number;
width: number;
}
Name Type Defined in
height number packages/api/src/dpi.ts:91
width number packages/api/src/dpi.ts:90

toJSON(): {
height: number;
width: number;
};

Defined in: packages/api/src/dpi.ts:95

{
height: number;
width: number;
}
Name Type Defined in
height number packages/api/src/dpi.ts:91
width number packages/api/src/dpi.ts:90

toPhysical(scaleFactor: number): PhysicalSize;

Defined in: packages/api/src/dpi.ts:84

Converts the logical size to a physical one.

import { LogicalSize } from '@tauri-apps/api/dpi';
import { getCurrentWindow } from '@tauri-apps/api/window';
const appWindow = getCurrentWindow();
const factor = await appWindow.scaleFactor();
const size = new LogicalSize(400, 500);
const physical = size.toPhysical(factor);
Parameter Type
scaleFactor number

PhysicalSize

2.0.0


Defined in: packages/api/src/dpi.ts:326

A position represented in physical pixels.

For an explanation of what physical pixels are, see description of PhysicalSize.

2.0.0

new PhysicalPosition(x: number, y: number): PhysicalPosition;

Defined in: packages/api/src/dpi.ts:331

Parameter Type
x number
y number

PhysicalPosition

new PhysicalPosition(object: {
Physical: {
x: number;
y: number;
};
}): PhysicalPosition;

Defined in: packages/api/src/dpi.ts:332

Parameter Type
object { Physical: { x: number; y: number; }; }
object.Physical { x: number; y: number; }
object.Physical.x number
object.Physical.y number

PhysicalPosition

new PhysicalPosition(object: {
x: number;
y: number;
}): PhysicalPosition;

Defined in: packages/api/src/dpi.ts:333

Parameter Type
object { x: number; y: number; }
object.x number
object.y number

PhysicalPosition

Property Modifier Type Default value Defined in
type readonly "Physical" 'Physical' packages/api/src/dpi.ts:327
x public number undefined packages/api/src/dpi.ts:328
y public number undefined packages/api/src/dpi.ts:329

__TAURI_TO_IPC_KEY__(): {
x: number;
y: number;
};

Defined in: packages/api/src/dpi.ts:373

{
x: number;
y: number;
}
Name Type Defined in
x number packages/api/src/dpi.ts:375
y number packages/api/src/dpi.ts:376

toJSON(): {
x: number;
y: number;
};

Defined in: packages/api/src/dpi.ts:380

{
x: number;
y: number;
}
Name Type Defined in
x number packages/api/src/dpi.ts:375
y number packages/api/src/dpi.ts:376

toLogical(scaleFactor: number): LogicalPosition;

Defined in: packages/api/src/dpi.ts:369

Converts the physical position to a logical one.

import { PhysicalPosition } from '@tauri-apps/api/dpi';
import { getCurrentWindow } from '@tauri-apps/api/window';
const appWindow = getCurrentWindow();
const factor = await appWindow.scaleFactor();
const position = new PhysicalPosition(400, 500);
const logical = position.toLogical(factor);
Parameter Type
scaleFactor number

LogicalPosition

2.0.0


Defined in: packages/api/src/dpi.ts:112

A size represented in physical pixels.

Physical pixels represent actual screen pixels, and are DPI-independent. For high-DPI windows, this means that any point in the window on the screen will have a different position in logical pixels LogicalSize.

For physical-pixel-based position, see PhysicalPosition.

2.0.0

new PhysicalSize(width: number, height: number): PhysicalSize;

Defined in: packages/api/src/dpi.ts:117

Parameter Type
width number
height number

PhysicalSize

new PhysicalSize(object: {
Physical: {
height: number;
width: number;
};
}): PhysicalSize;

Defined in: packages/api/src/dpi.ts:118

Parameter Type
object { Physical: { height: number; width: number; }; }
object.Physical { height: number; width: number; }
object.Physical.height number
object.Physical.width number

PhysicalSize

new PhysicalSize(object: {
height: number;
width: number;
}): PhysicalSize;

Defined in: packages/api/src/dpi.ts:119

Parameter Type
object { height: number; width: number; }
object.height number
object.width number

PhysicalSize

Property Modifier Type Default value Defined in
height public number undefined packages/api/src/dpi.ts:115
type readonly "Physical" 'Physical' packages/api/src/dpi.ts:113
width public number undefined packages/api/src/dpi.ts:114

__TAURI_TO_IPC_KEY__(): {
height: number;
width: number;
};

Defined in: packages/api/src/dpi.ts:157

{
height: number;
width: number;
}
Name Type Defined in
height number packages/api/src/dpi.ts:160
width number packages/api/src/dpi.ts:159

toJSON(): {
height: number;
width: number;
};

Defined in: packages/api/src/dpi.ts:164

{
height: number;
width: number;
}
Name Type Defined in
height number packages/api/src/dpi.ts:160
width number packages/api/src/dpi.ts:159

toLogical(scaleFactor: number): LogicalSize;

Defined in: packages/api/src/dpi.ts:153

Converts the physical size to a logical one.

import { getCurrentWindow } from '@tauri-apps/api/window';
const appWindow = getCurrentWindow();
const factor = await appWindow.scaleFactor();
const size = await appWindow.innerSize(); // PhysicalSize
const logical = size.toLogical(factor);
Parameter Type
scaleFactor number

LogicalSize

2.0.0


Defined in: packages/api/src/dpi.ts:417

A position represented either in physical or in logical pixels.

This type is basically a union type of LogicalPosition and PhysicalPosition but comes in handy when using tauri::Position in Rust as an argument to a command, as this class automatically serializes into a valid format so it can be deserialized correctly into tauri::Position

So instead of

import { invoke } from '@tauri-apps/api/core';
import { LogicalPosition, PhysicalPosition } from '@tauri-apps/api/dpi';
const position: LogicalPosition | PhysicalPosition = someFunction(); // where someFunction returns either LogicalPosition or PhysicalPosition
const validPosition = position instanceof LogicalPosition
? { Logical: { x: position.x, y: position.y } }
: { Physical: { x: position.x, y: position.y } }
await invoke("do_something_with_position", { position: validPosition });

You can just use Position

import { invoke } from '@tauri-apps/api/core';
import { LogicalPosition, PhysicalPosition, Position } from '@tauri-apps/api/dpi';
const position: LogicalPosition | PhysicalPosition = someFunction(); // where someFunction returns either LogicalPosition or PhysicalPosition
const validPosition = new Position(position);
await invoke("do_something_with_position", { position: validPosition });

2.1.0

new Position(position: PhysicalPosition | LogicalPosition): Position;

Defined in: packages/api/src/dpi.ts:420

Parameter Type
position | PhysicalPosition | LogicalPosition

Position

Property Type Defined in
position | PhysicalPosition | LogicalPosition packages/api/src/dpi.ts:418

__TAURI_TO_IPC_KEY__(): {
[key: string]: {
x: number;
y: number;
};
};

Defined in: packages/api/src/dpi.ts:454

{
[key: string]: {
x: number;
y: number;
};
}

toJSON(): {
[key: string]: {
x: number;
y: number;
};
};

Defined in: packages/api/src/dpi.ts:463

{
[key: string]: {
x: number;
y: number;
};
}

toLogical(scaleFactor: number): LogicalPosition;

Defined in: packages/api/src/dpi.ts:433

Converts the wrapped position to a logical one.

Returns the inner value untouched when it already is a LogicalPosition.

Parameter Type Description
scaleFactor number The monitor scale factor, e.g. await appWindow.scaleFactor().

LogicalPosition

2.1.0

toPhysical(scaleFactor: number): PhysicalPosition;

Defined in: packages/api/src/dpi.ts:448

Converts the wrapped position to a physical one.

Returns the inner value untouched when it already is a PhysicalPosition.

Parameter Type Description
scaleFactor number The monitor scale factor, e.g. await appWindow.scaleFactor().

PhysicalPosition

2.1.0


Defined in: packages/api/src/dpi.ts:201

A size represented either in physical or in logical pixels.

This type is basically a union type of LogicalSize and PhysicalSize but comes in handy when using tauri::Size in Rust as an argument to a command, as this class automatically serializes into a valid format so it can be deserialized correctly into tauri::Size

So instead of

import { invoke } from '@tauri-apps/api/core';
import { LogicalSize, PhysicalSize } from '@tauri-apps/api/dpi';
const size: LogicalSize | PhysicalSize = someFunction(); // where someFunction returns either LogicalSize or PhysicalSize
const validSize = size instanceof LogicalSize
? { Logical: { width: size.width, height: size.height } }
: { Physical: { width: size.width, height: size.height } }
await invoke("do_something_with_size", { size: validSize });

You can just use Size

import { invoke } from '@tauri-apps/api/core';
import { LogicalSize, PhysicalSize, Size } from '@tauri-apps/api/dpi';
const size: LogicalSize | PhysicalSize = someFunction(); // where someFunction returns either LogicalSize or PhysicalSize
const validSize = new Size(size);
await invoke("do_something_with_size", { size: validSize });

2.1.0

new Size(size: PhysicalSize | LogicalSize): Size;

Defined in: packages/api/src/dpi.ts:204

Parameter Type
size | PhysicalSize | LogicalSize

Size

Property Type Defined in
size | PhysicalSize | LogicalSize packages/api/src/dpi.ts:202

__TAURI_TO_IPC_KEY__(): {
[key: string]: {
height: number;
width: number;
};
};

Defined in: packages/api/src/dpi.ts:238

{
[key: string]: {
height: number;
width: number;
};
}

toJSON(): {
[key: string]: {
height: number;
width: number;
};
};

Defined in: packages/api/src/dpi.ts:247

{
[key: string]: {
height: number;
width: number;
};
}

toLogical(scaleFactor: number): LogicalSize;

Defined in: packages/api/src/dpi.ts:217

Converts the wrapped size to a logical one.

Returns the inner value untouched when it already is a LogicalSize.

Parameter Type Description
scaleFactor number The monitor scale factor, e.g. await appWindow.scaleFactor().

LogicalSize

2.1.0

toPhysical(scaleFactor: number): PhysicalSize;

Defined in: packages/api/src/dpi.ts:232

Converts the wrapped size to a physical one.

Returns the inner value untouched when it already is a PhysicalSize.

Parameter Type Description
scaleFactor number The monitor scale factor, e.g. await appWindow.scaleFactor().

PhysicalSize

2.1.0


© 2026 Tauri Contributors. CC-BY / MIT