Vue.Draggable

Vue 2 drag-and-drop component built on Sortable.js for reorderable lists

Library
npm
v2.24.3
20,576 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
53 /100 Fair
Development Activity 0
Maintenance 32
Community 80
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
67 /100 Good
Architecture 68
Code Quality 62
Innovation 60
Learning Curve 78

Vue.Draggable wraps the battle-tested Sortable.js library in a native Vue 2 component, letting you turn any v-for list into a drag-and-drop reorderable list with a single <draggable> wrapper and a v-model binding. It keeps the DOM and the underlying view-model array in sync automatically, so reordering, moving items between lists, and removing items all flow back into your application state without manual DOM manipulation.

Because it is a thin, faithful wrapper around Sortable.js, it inherits that library’s full feature set — touch support, drag handles, cross-list dragging, auto-scroll, and animation — while exposing them as idiomatic Vue props and events. It also plays well with transition-group for animated reordering and can wrap third-party component libraries (Vuetify, Element UI, Vue Material) via the tag and componentData props, making it a common choice for kanban boards, sortable form builders, and admin dashboards built on Vue 2.

What You Get

  • A <draggable> component that wraps any list of elements and makes them sortable via drag-and-drop
  • Two-way binding via v-model (immutable) or list (mutated via splice) to keep your data array in sync with the UI
  • Full pass-through of Sortable.js options (handles, groups, animation, ghost classes) as component props
  • Cross-list dragging support via the group option, for moving items between separate draggable lists
  • Compatibility with transition-group for animated insert/remove/reorder transitions
  • Header and footer slots for adding non-draggable elements inside the draggable container

Common Use Cases

  • Kanban-style boards where cards move between draggable columns
  • Reorderable admin lists and settings panels (e.g. reordering menu items or form fields)
  • Sortable form builders that let users drag fields into a desired order
  • To-do list and task manager UIs where items can be reordered or moved between lists
  • Wrapping third-party UI library components (Vuetify, Element UI) to make their rendered items draggable

Under The Hood

Architecture The entire component lives in a single ~485-line src/vuedraggable.js file that wraps a native Sortable instance (from the sortablejs dependency) around a rendered root element. On mount, it instantiates Sortable against its own root DOM node, translating Vue props into Sortable’s option object and re-registering Sortable’s onAdd/onUpdate/onRemove/onEnd callbacks as Vue-emitted events; on data changes it reconciles the underlying array (list via in-place splice, or value immutably via emitted input events) so drag operations performed on the DOM propagate back into the Vue reactivity graph. A small util folder holds helpers for computing child component slots and headers/footers around the draggable region.

Tech Stack Targets Vue 2.x only (a companion project, vue.draggable.next, exists for Vue 3) and depends solely on sortablejs at runtime. The dev toolchain is Vue CLI 3 (@vue/cli-service) with Babel for transpilation, @vue/test-utils plus Jest for testing, and a documentation/example app built with the same Vue CLI service.

Code Quality A tests/unit suite built on @vue/test-utils and Jest covers component behavior (list synchronization, event emission), and the project ships coverage reporting (test:coverage + Codecov) in CI. TypeScript consumers get a hand-written .d.ts declaration file (src/vuedraggable.d.ts) rather than being compiled from TypeScript source, so type accuracy depends on manual upkeep rather than the compiler.

API Design The public surface is intentionally small: a single <draggable> component consumed via v-model (or list), with all of Sortable.js’s native options (handle, group, ghost-class, animation, etc.) passed straight through as kebab-case props — meaning any Sortable.js capability is available without the wrapper needing to re-implement or re-document it. This keeps the API idiomatic to Vue while trading a little discoverability (advanced options are documented in Sortable.js’s own README, not restated here).

Used by 21 apps in this directory

PHP
82%
Other

Akaunting

Invoicing Finance

10,149

Open-source online accounting for small businesses and freelancers — invoices, expenses, and reporting without monthly fees or vendor lock-in.

View details
98
Repo Health
73
Technical
63
Dependency
Built with
PHP 82%
Blade 13%
Updated 5 days ago
Python
59%
Apache 2.0

argilla

AI Development · Data Engineering

5,125

Collaborate on high-quality AI training data with a self-hosted annotation platform built for LLMs, NLP, and multimodal models.

View details
65
Repo Health
81
Technical
61
Dependency
Built with
Python 59%
Jupyter Notebook 21%
Updated 1 weeks ago
PHP
73%
MIT

Bagisto

Analytics · Ecommerce

28,186

Open-source Laravel eCommerce platform for building multi-vendor marketplaces, B2B stores, headless commerce, and AI-powered storefronts.

View details
93
Repo Health
75
Technical
67
Dependency
Built with
PHP 73%
Blade 21%
Updated 1 weeks ago
Ruby
50%
Other

Chatwoot

Customer Support

37,254

Open-source omnichannel customer support platform with AI-powered agents, live chat, and self-hosting — a full Intercom and Zendesk alternative.

View details
95
Repo Health
78
Technical
69
Dependency
Built with
Ruby 50%
Vue 25%
JavaScript 22%
Updated 5 days ago
PHP
48%
AGPL 3.0

Crater

Invoicing Finance

8,349

Open source invoicing and billing platform for freelancers and small businesses — create estimates, track expenses, accept Stripe payments, and run recurring invoices from your own server.

View details
54
Repo Health
68
Technical
68
Dependency
Built with
PHP 48%
Vue 40%
Updated 2 years ago
Java
70%
GPL 3.0

DataEase

AI Assistants · Analytics · Data Engineering

24,558

Open-source BI tool with drag-and-drop dashboards, 20+ data source connectors, and AI-powered natural language queries — a self-hosted alternative to Tableau.

View details
94
Repo Health
71
Technical
65
Dependency
Built with
Java 70%
Vue 29%
Updated 4 days ago
TypeScript
79%
Other

Directus

CMS · Low Code Platforms

37,987

Connect any SQL database and get instant REST and GraphQL APIs, a visual management Studio, and a native MCP server for AI agents — free for most organizations.

View details
92
Repo Health
82
Technical
76
Dependency
Built with
TypeScript 79%
Vue 19%
Updated 1 weeks ago
Go
37%
MIT

ezBookkeeping

Invoicing Finance

5,673

Lightweight self-hosted personal finance manager with AI receipt scanning, multi-currency support, and MCP integration for complete data privacy.

View details
88
Repo Health
80
Technical
71
Dependency
Built with
Go 37%
Vue 34%
TypeScript 26%
Updated 5 days ago
Vue
52%
AGPL 3.0

Frappe CRM

CRM

3,613

Open-source CRM with unlimited users, built-in Twilio, Exotel, WhatsApp, and ERPNext integrations — self-host in minutes.

View details
92
Repo Health
68
Technical
77
Dependency
Built with
Vue 52%
Python 34%
JavaScript 11%
Updated 4 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers