Pop Up UI component as a Picture-in-Picture window.
Zero config. Live style sync. Built for modern frameworks.
A comprehensive API designed for real-world use cases — from simple pop-outs to complex editor workflows.
MutationObserver keeps styles, themes, and CSS-in-JS changes synced in real time.
Works both ways — industry-standard API with `open` prop for full state control.
Three DOM strategies. Move preserves state, portal keeps component tree intact.
Windows adapt to content size automatically. Use `isInsidePip` for responsive PiP layouts.
Cmd+S, Cmd+K, and all shortcuts keep working inside the PiP window.
Firefox & Safari fallback to new tab, or your custom handler (e.g. a modal).
Works in Next.js, Remix, and Vite out of the box. No hydration mismatches.
Named registry lets any trigger connect to any wrapper — no shared context needed.
Generic-typed hooks, full IntelliSense, zero type casting needed.
Tiptap, Monaco, CodeMirror — pop out any editor while preserving state, undo history.
We have pre-built examples and detailed recipes for almost every common developer requirement.
Wrap your component, code lines, a trigger — you're done.
import { PipWrapper, PipTrigger } from '@pip-it-up/react';
export function App() { return ( <PipWrapper copyStyles="sync"> <PipTrigger /> <MyEditor /> </PipWrapper> );}Built on the Document PiP API with graceful fallbacks.
| Browser | Version | Status |
|---|---|---|
| Chrome | 116+ | ✓ Full Support |
| Edge | 116+ | ✓ Full Support |
| Firefox | N/A | ⚠ Fallback |
| Safari | N/A | ⚠ Fallback |
* Requires HTTPS and a user gesture (click/keypress) to open. Firefox & Safari fall back or trigger your custom layout handler gracefully.
A complete solution — if your wrapper exceeds browser API.
| Feature | @pip-it-up/react | react-pip | picture-in-picture |
|---|---|---|---|
| Document PiP API | ✓ | ~ | ~ |
| Style sync (live) | ✓ | ✗ | ✗ |
| Portal mode | ✓ | ✗ | ✗ |
| Controlled + uncontrolled | ✓ | ✗ | ✗ |
| Decoupled trigger | ✓ | ✗ | ✗ |
| Keyboard forwarding | ✓ | ✗ | ✗ |
| Fixed-size guard | ✓ | ✗ | ✗ |
| SSR-safe | ✓ | ~ | ~ |
| Framework-agnostic core | ✓ | ✗ | ✗ |
| TypeScript-first | ✓ | ~ | ✗ |
Follow our dotted trail to the future of Picture-in-Picture.
TypeScript-first core, full IntelliSense, generic-typed hooks out of the box.
Released `@pip-it-up/react` with declarative PipWrapper and PipTrigger components.
Keep the floating PiP window alive and syncing state seamlessly while navigating between pages.
Have a feature request or want to contribute? Open an issue on GitHub →