← Unframed display mode for Isolated Web Apps
v152 · css property · draggable regions
app-region
The app-region CSS property marks which regions of an unframed (or window-controls-overlay) app window act as the draggable surface — the replacement for the removed host-native title bar — and which elements inside that surface (buttons, menus) are excluded from dragging.
Syntax
/* Enable dragging from an element: */
app-region: drag;
/* Exclude an element from dragging (e.g. a button inside the title bar): */
app-region: no-drag;
From the spec's defining draggable regions section: “The app-region property can be used to define with CSS which regions or elements in for example a title bar are draggable.” Setting it to drag enables dragging on the element; no-drag disables it. “The app-region property MUST only take effect when the applied display mode of the window is unframed or window-controls-overlay.”
“Some user agents use the non-standard CSS property -webkit-app-region for the same purpose” (spec note). The spec's text is prose-level — it does not yet give a formal value-definition grammar, an initial value, or inheritance rules; those are recorded as an open question in the critique rather than invented here.
Inputs
| Value | Effect |
|---|---|
drag | The element's region drags the window — pointer press + move here moves the whole app window, as the system title bar would |
no-drag | The element is excluded from dragging — required on interactive elements (window buttons, menus, text fields) placed inside a drag region so they keep their normal click behaviour |
Outputs
- Elements with
app-region: dragbecome the window's draggable surface: the app can build a custom title bar that actually moves the window — essential inunframedmode, where no system title bar exists. - Elements with
app-region: no-dragbehave normally for clicks and text selection even when nested inside a draggable ancestor. - Outside
unframedandwindow-controls-overlaydisplay modes the property has no effect (the spec's MUST), so the same stylesheet is safe in framed windows.
Errors
| Situation | Behaviour |
|---|---|
Window not in unframed / window-controls-overlay mode | The declaration parses but MUST NOT take effect — no error, no draggable region |
| Unknown value | Normal CSS error handling: the declaration is invalid at computed-value time and ignored (generic CSS behaviour; the incubation spec does not define feature-specific diagnostics) |
| No draggable region declared in an unframed window | The window cannot be dragged by the user from the content area; the app must provide another mechanism (or the user relies on OS-level window management). Not an error — a documented developer responsibility, since the app owns the whole window surface in unframed mode |
Context and exposure
- Applies to installed app windows whose applied display mode is
unframed(Isolated Web Apps only) orwindow-controls-overlay; inert everywhere else, including normal browser tabs. - For
unframed, the surrounding prerequisites are the parent feature's: IWA package,window-managementpermission, desktop platform — see the overview requirements. - The legacy
-webkit-app-regionspelling exists in some user agents for the same purpose (spec note); authors targeting both should be aware the standard spelling isapp-regionin this incubation.
Lifecycle
- The property is evaluated with normal CSS cascade and style recalculation; it takes effect only while the window's applied display mode is
unframedorwindow-controls-overlay. - Because an unframed window's display mode is fixed for its lifetime (see the overview lifecycle), the effective draggable map changes only when the app's own DOM/style changes — not on navigation.
- Pairing with
@media (display-mode: unframed)lets the app reveal its custom title bar — and its drag regions — only when the system frame is actually absent.
Examples
A custom title bar for an unframed window: the bar drags the window, its buttons remain clickable, and the whole bar only appears when the window is actually unframed:
.title-bar {
display: none; /* hidden while framed */
app-region: drag; /* the bar itself drags the window */
}
.title-bar button {
app-region: no-drag; /* buttons keep their clicks */
}
@media (display-mode: unframed) {
.title-bar { display: flex; }
}
Source: property semantics per Manifest Incubations — defining draggable regions; media query per Manifest Incubations — CSS media query
Browser compatibility
Interim table. No BCD entry exists for app-region (2026-07-28); the non-standard -webkit-app-region is a separate legacy spelling. Shipping status follows the parent feature:
| Browser / platform | Support | Evidence |
|---|---|---|
| Chrome desktop | 152 — listing: “Enabled by default” + “Stepped rollout”; detail record: developer trial behind a flag | milestone=152 listing; ChromeStatus API record |
| Chrome Android / WebView / iOS | No milestone — not applicable | ChromeStatus API record |
| Edge | Not separately reported | Chromium-based; no separate position on the record |
| Firefox | No signal | ChromeStatus API record vendor views |
| Safari | N/A | ChromeStatus API record vendor views |
Full analysis and evidence links: overview — browser compatibility.
Source: chromestatus.com/feature/5551475195904000; Manifest Incubations — defining draggable regionsSecurity and privacy
app-regiongrants no new capability beyond pointer-capture semantics the app already has: it repurposes drags on designated regions into window moves. It cannot move other apps' windows or escape the app's own window.- The relevant threat model is the parent feature's — a frameless window can spoof trusted UI; that is why the mode (and therefore an effective draggable title bar) is IWA-only and permission-gated. See the overview security section.
- A drag region reveals nothing to the app beyond the pointer events it would already receive on those elements.