# emilkowalski/vaul

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/emilkowalski-vaul).**

8,426 stars · 357 forks · TypeScript · MIT

## Links

- GitHub: https://github.com/emilkowalski/vaul
- Homepage: https://vaul.emilkowal.ski
- awesome-repositories: https://awesome-repositories.com/repository/emilkowalski-vaul.md

## Topics

`dialog` `drawer` `react`

## Description

Vaul is a React drawer component used to create accessible, draggable bottom sheets and slide-up panels. It serves as a mobile-friendly alternative to traditional dialogs and modals by rendering content into a separate DOM node via a portal to avoid layout nesting issues.

The library features configurable snap points that allow panels to lock into specific vertical heights during drag gestures. It supports hierarchical UI layering, enabling the use of nested drawers for complex navigation or multi-level menus.

The component includes an accessibility layer with ARIA announcements and focus management for screen readers. Additional capabilities cover programmatic visibility control, dismissal restrictions, and automatic position adjustments to maintain content visibility when virtual keyboards are active.

## Tags

### User Interface & Experience

- [Sliding Panels](https://awesome-repositories.com/f/user-interface-experience/layout-and-anchoring-systems/sliding-panels.md) — Implements draggable sliding panels as a mobile-friendly alternative to traditional dialogs and modals. ([source](https://vaul.emilkowal.ski/getting-started))
- [Mobile Bottom Sheets](https://awesome-repositories.com/f/user-interface-experience/layout-and-anchoring-systems/sliding-panels/mobile-bottom-sheets.md) — Provides a mobile-friendly slide-up panel as an accessible alternative to traditional dialogs.
- [Accessibility Layers](https://awesome-repositories.com/f/user-interface-experience/accessibility-layers.md) — Implements a dedicated accessibility layer to manage semantic roles and focus states for screen readers.
- [Bottom Sheets](https://awesome-repositories.com/f/user-interface-experience/bottom-sheets.md) — Implements a draggable bottom sheet with configurable snap points for supplementary content.
- [React Components](https://awesome-repositories.com/f/user-interface-experience/component-utilities/ui-frameworks/component-libraries/react-components.md) — Built as a reusable React component integrating portals and state management.
- [Drawer Components](https://awesome-repositories.com/f/user-interface-experience/component-utilities/ui-frameworks/component-libraries/react-components/drawer-components.md) — Provides a high-quality React drawer component for mobile-friendly interfaces.
- [Gesture-Based Dismissal](https://awesome-repositories.com/f/user-interface-experience/drawers/gesture-based-dismissal.md) — Provides gesture-based dismissal and vertical offset interpolation for smooth panel sliding.
- [Nested Layers](https://awesome-repositories.com/f/user-interface-experience/drawers/nested-layers.md) — Supports hierarchical UI layering by enabling the use of nested drawers for complex navigation. ([source](https://vaul.emilkowal.ski/default))
- [Overlay Interaction Design](https://awesome-repositories.com/f/user-interface-experience/overlay-interaction-design.md) — Provides a native app-like feel through draggable panels and precise gesture controls.
- [Edge-Sliding Overlays](https://awesome-repositories.com/f/user-interface-experience/panel-groups/content-panels/full-screen-overlays/edge-sliding-overlays.md) — Provides a sliding screen overlay that serves as a mobile-friendly replacement for standard dialog boxes. ([source](https://vaul.emilkowal.ski/default))
- [Portal Rendering](https://awesome-repositories.com/f/user-interface-experience/portal-rendering.md) — Uses portal rendering to mount the drawer into a separate DOM node to avoid layout constraints.
- [Snap Points](https://awesome-repositories.com/f/user-interface-experience/snap-points.md) — Implements configurable snap points where the panel locks during drag gestures.
- [Keyboard-Aware Behavior](https://awesome-repositories.com/f/user-interface-experience/bottom-sheets/keyboard-aware-behavior.md) — Automatically adjusts the position of the bottom sheet when the virtual keyboard appears.
- [Accessibility Announcements](https://awesome-repositories.com/f/user-interface-experience/drawers/accessibility-announcements.md) — Announces semantic titles and descriptions to screen readers upon opening the drawer. ([source](https://vaul.emilkowal.ski/api))
- [Drawer State Controllers](https://awesome-repositories.com/f/user-interface-experience/drawers/drawer-state-controllers.md) — Provides programmatic controls to manage the open and closed states of the drawer via external triggers. ([source](https://vaul.emilkowal.ski/default))
- [Dismissal Restrictions](https://awesome-repositories.com/f/user-interface-experience/drawers/gesture-based-dismissal/dismissal-restrictions.md) — Prevents drawers from closing via clicks or gestures to ensure the user completes an action. ([source](https://vaul.emilkowal.ski/other))
- [Overlay State Managers](https://awesome-repositories.com/f/user-interface-experience/event-driven-state-managers/overlay-state-managers.md) — Manages the visibility and interaction blocking of the background overlay based on the drawer state.
- [Mobile Accessibility Support](https://awesome-repositories.com/f/user-interface-experience/graphical-user-interfaces/accessibility/mobile-accessibility-support.md) — Ensures mobile accessibility compliance through screen-reader support and focus management.
- [Background Interaction Blocking](https://awesome-repositories.com/f/user-interface-experience/interactivity-mode-coordination/interaction-mode-toggles/background-interaction-blocking.md) — Blocks or allows background interactions to manage user focus while the drawer is open. ([source](https://vaul.emilkowal.ski/other))
- [Keyboard-Relative Positioning](https://awesome-repositories.com/f/user-interface-experience/keyboard-relative-positioning.md) — Provides automatic position adjustments to keep content visible when a virtual keyboard is active. ([source](https://vaul.emilkowal.ski/inputs))
- [Nested Navigation Menus](https://awesome-repositories.com/f/user-interface-experience/nested-navigation-menus.md) — Supports nested drawer systems for creating hierarchical navigation paths on mobile screens.
- [Drawer Dismissal Logic](https://awesome-repositories.com/f/user-interface-experience/overlay-components/popover-overlays/dismissal-behavior-configurators/drawer-dismissal-logic.md) — Allows configuring whether a drawer closes via overlay interaction or requires a manual handle drag. ([source](https://vaul.emilkowal.ski/api))
- [Accessible Floating Overlays](https://awesome-repositories.com/f/user-interface-experience/window-based-overlay-rendering/floating-ui-overlays/accessible-floating-overlays.md) — Offers a floating overlay UI with built-in ARIA announcements and focus management.
