Glin UI
Primitive / MoleculeAdapted from Magic UIbeta

Browser Frame

Generic browser window chrome drawn in CSS with a slot for any content.

Edit on GitHub
app.northwind.io/billing
NS
Northwind StudioTeam plan

Spend

$1,240

Seats

12

Invoices

8

Installation

Install from
pnpm dlx @glinui/cli@latest add browser-frame

Credits. Adapted from Magic UI (MIT, (c) Magic UI). Generic CSS chrome instead of a monolithic SVG, children slot, token colors, glass, RTL, real address text and no bundled media. Attribution details.

Prefer the package?

Usage

Improvements: generic CSS chrome drawn with tokens instead of one SVG, a children slot for real UI (the original only took image or video), real address text, glass, simple mode and no bundled media.

Modes

A titled window and an address bar window.

Release notes
Version 2.8 is live for all workspaces.
glinui.com/docs
Subscribe to product updates.
import { Bell, Stack } from "@phosphor-icons/react"
import { BrowserFrame, IconFrame } from "@glinui/ui"
export function Demo() {
return (
<div className="grid w-full max-w-3xl gap-4 md:grid-cols-2">
<BrowserFrame mode="simple" title="Release notes">
<div className="flex items-center gap-3 p-5 text-sm">
<IconFrame tone="success"><Stack aria-hidden className="size-4" /></IconFrame>
Version 2.8 is live for all workspaces.
</div>
</BrowserFrame>
<BrowserFrame url="glinui.com/docs">
<div className="flex items-center gap-3 p-5 text-sm">
<IconFrame tone="accent"><Bell aria-hidden className="size-4" /></IconFrame>
Subscribe to product updates.
</div>
</BrowserFrame>
</div>
)
}

Accessibility

  • The traffic-light dots are decorative and aria-hidden.
  • The address is a real text element, and children keep their own semantics and focus order.
  • The frame is a labelled group and does not use role=img, so inner content stays reachable.

ARIA Attributes

  • `role=group` with `aria-label`
  • Dots use `aria-hidden`
  • `alt` is required when `src` is used

Reduced Motion

Static chrome with no animation.

API Reference

BrowserFrame

PropTypeRequiredDefaultDescription
variantSurfaceVariant | "default" | "raised" | "frosted"Noambient (glinr)Surface variant. Omit to follow the ambient design style (glinr by default, plain for minimal, glass for glass).
toneSurfaceToneNoneutralColour tone for the vocabulary variants.
mode"default" | "simple"NodefaultAddress bar, or a centered window title only.
urlstringNoglinui.comAddress bar text.
titlestringNo-Window title for simple mode.
src / altstring--Optional image for the viewport. alt is required with src.
frameLabelstringNo-Accessible name of the frame group.
viewportClassNamestringNo-Classes for the content area, for example an aspect ratio.
childrenReactNode--Any content. Wins over src.

Source

Import directly from the package or browse the source on GitHub. Click any file to view it.

Import

import { BrowserFrame } from "@glinui/ui"

Source Files

Dependencies

@glinui/uiclass-variance-authority@phosphor-icons/react

Generated API Snapshot

Beta

Auto-extracted from TypeScript source in packages/ui/src/components/browser-frame.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.

Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata

Primary Props Type

BrowserFrameProps

BrowserFrameProps

PropTypeRequiredDefaultDescription
frameLabelstringNo-Accessible name for the frame region.
mode"default" | "simple"No"default"`default` shows an address bar, `simple` a centered window title only.
titlestringNo-Window title for `simple` mode.
toneSurfaceToneNo--
urlstringNo"glinui.com"Text in the address bar.
variantSurfaceVariant | "default" | "raised" | "frosted"No-Visual variant. Omit for the ambient design style (glinr: lift shell with a raised chrome strip; plain: flat bordered window).
viewportClassNamestringNo-Extra classes for the viewport (content) area.