Overview
Plugins are a powerful way to extend the core functionality of @dnd-kit. They can be used to add new features, modify existing behavior, or react to drag and drop operations.Built-in Plugins
Several plugins are included by default when creating a newDragDropManager:
Accessibility
Manages ARIA attributes and screen reader announcements for drag and drop operations.
AutoScroller
Automatically scrolls containers when dragging near edges.
Cursor
Updates cursor styles during drag operations.
Debug
Visualize drag shapes, droppable zones, and collisions for debugging.
Feedback
Manages visual feedback during dragging, including top layer promotion and drop animations.
StyleInjector
Centralized style injection with CSP nonce support.
Using Plugins
Theplugins option accepts either an array or a function that receives the default plugins.
Extending defaults
Use the function form to add plugins to the defaults or configure existing ones, without replacing them:Replacing defaults
Pass an array to fully replace the default plugins:Creating a Plugin
To create a custom plugin, extend thePlugin class:
Plugin Lifecycle
- Construction: Plugin instance created with manager reference
- Configuration: Options applied if provided
- Registration: Plugin registered with manager
- Operation: Plugin effects are run
- Cleanup: Plugin destroyed when manager is destroyed
API Reference
Plugin Class
The base class for all plugins:Reference to the drag and drop manager instance.
Optional configuration options for the plugin.
Properties
disabled: Whether the plugin is currently disabledoptions: Current plugin options
Methods
enable(): Enable the plugindisable(): Disable the pluginisDisabled(): Check if plugin is disabledconfigure(options): Update plugin optionsdestroy(): Clean up plugin resourcesregisterEffect(callback): Register a reactive effect
Static Methods
configure(options): Create a configured plugin descriptor
Effects
Plugins can register effects that automatically clean up:Best Practices
- Clean Up Resources: Always clean up listeners and timers in the
destroymethod - Check Disabled State: Check
this.disabledbefore performing operations - Use Type Safety: Leverage TypeScript for better type checking
- Document Options: Clearly document all available options
- Follow Patterns: Study built-in plugins for patterns and conventions