Dragger

by ariestar
5
4
3
2
1
Score: 62/100

Description

The Dragger plugin adds block dragging to the editor so paragraphs, headings, lists, tasks, blockquotes, callouts, tables, code blocks and math blocks can be rearranged directly in place. It handles nested structures by using horizontal position for indent changes and vertical position for drop location, which keeps list and quote editing more controlled. The plugin also supports multi line selection dragging, a visible drop indicator, right click block type conversion with delete actions and configurable handles with different icons, colours, sizes and offsets. Mobile support is built in too, with long press dragging, a bottom toolbar and edge auto scroll during drag. A separate headless core package is published for reuse outside the app.

Reviews

No reviews yet.

Stats

282
stars
89,339
downloads
10
forks
105
days
2
days
51
days
35
total PRs
6
open PRs
13
closed PRs
16
merged PRs
54
total issues
16
open issues
38
closed issues
367
commits

Latest Version

2 months ago

Changelog

Dragger 2.0.0 Release Notes

2026-08-05

中文

发布信息

  • 版本号:2.0.0
  • 变更区间:1.3.4..2.0.0
  • 兼容性:破坏性变更——最低 Obsidian 版本从 1.2.3 提升至 1.13.0,旧版本 Obsidian 无法再使用本插件。升级前请确认你的 Obsidian 版本。

破坏性变更

1) 平台要求提升

  • 最低 Obsidian 版本从 1.2.3 提升到 1.13.0(minAppVersion)。1.13 以下版本的 Obsidian 不再支持,请先升级 Obsidian 再更新插件。[057e538]

2) 设置页迁移到 Obsidian 原生 declarative settings

  • 设置界面从自定义 HTML 迁移到 Obsidian 1.13+ 的原生 declarative settings,外观与交互由 Obsidian 统一渲染。[057e538] [ad3c1e1]
  • 已移除的设置项(设置项从 21 项调整为 19 项):
    • enableCrossFileDrag——跨文件拖拽改为始终可用,不再需要开关;
    • enableListDropHighlight——列表拖放高亮改为始终渲染;
    • multiLineSelectionLongPressMs——并入统一的长按时长设置(mouseRangeSelectLongPressMs);
    • mobileDragModeToggleLocations——移动端工具栏位置开关移除。
  • 新增设置项:mobileDragModeToggleEnabled(移动端拖拽模式开关)。
  • 升级提示:若旧设置文件中包含上述已移除项,它们会被忽略,不会报错。

新特性

1) 多选拖拽(长按多选 + 拖拽源视觉)

  • 长按手柄进入多选拖拽,被选中的多个块作为整体拖拽源,拖拽时保留多选视觉。[ed4d7a9] [7364226]
  • 桌面与移动端统一了"按住进入多选、移动开始拖拽"的双阶段手势计时。[7364226]
  • 选择高亮与复选框渲染改为从引擎的选区行范围派生、以 CM6 decorations 绘制,滚动与重排时保持稳定,不再依赖 DOM 覆盖层。[1fb0e71] [a133292] [90e747c]

2) 块类型菜单交互重构

  • 手柄上点击即可打开块类型菜单(桌面悬停显示手柄、按下打开菜单)。[dfce575] [9d86f80]
  • 菜单定位改为以手柄所在行为准,不再跟随编辑器光标。[b750b6b] [f683b5a]
  • 嵌套的块类型分组改为页面式导航,桌面悬停打开、点击应用,替代原来的双层弹层。[08427d0] [12e843a] [2ee1d75]
  • 移动端菜单稳定性:仅在松开手指时打开菜单、拖拽阶段锁定滚动与页面平移,避免菜单与拖拽互相干扰。[db8fdfc] [9050843] [1e2f7fa]

3) 跨文件拖拽

  • 跨文件拖拽提交按文档身份(Doc)路由,可将块拖到其他打开的笔记中;enableCrossFileDrag 开关已移除,功能始终可用。[19e6744] [4db7f81]

修复

1) 表格单元格编辑冲突(issue #53)

  • 修复 Live Preview 中点击表格单元格会在单元格内出现拖拽手柄并产生缩进的问题。现在单元格嵌套编辑器内完全停用拖拽(引擎新增视图排除选项 enabled),表格仍可通过表头行的手柄整块拖拽。[3f47053]

2) 拖放指示器与几何对齐

  • 拖放指示器(drop seam)改为零布局的 CM6 decoration 渲染,滚动/重排时不再依赖 DOM 覆盖层。[f26776c] [56b340c]
  • 列表缩进步长改为从 Obsidian 渲染 token 读取,拖放指示器渲染在缩进后的目标位置,行距左边缘与列表标记/缩进对齐一致。[7b9d734] [9552596] [e646ae9]
  • 拖拽中光标样式在视图销毁时正确清理。[efc0e83]

3) 移动端

  • 拖拽模式下抑制原生文本选择,避免拖拽与选中互相干扰。[1e2f7fa]
  • 边缘自动滚动改走适配层的滚动端口,与 Obsidian 编辑器滚动协同。[0cb4e56]

工程与依赖

  • 正式消费 md-dragger npm 包(^2.0.1),删除仓库内 vendored 拷贝,平台层改用引擎提供的适配器与运行时。[2b134c5] [d2832e2]
  • 迁移到 pnpm,接入 biome 格式化,开启 verbatimModuleSyntax。[29b84cd] [f02fa50]
  • 语言检测改用 Obsidian getLanguage API,界面翻译接入中文等语言。[eb3edb0]
  • 采用 eslint-plugin-obsidianmd 0.4.1 规则。[b4726e8]

English

Release Info

  • Version: 2.0.0
  • Changes: 1.3.4..2.0.0
  • Compatibility: Breaking change — the minimum Obsidian version is raised from 1.2.3 to 1.13.0; the plugin no longer works on older Obsidian. Upgrade Obsidian first if you are on a version below 1.13.

Breaking Changes

1) Raised Platform Requirement

  • Minimum Obsidian version raised from 1.2.3 to 1.13.0 (minAppVersion). Obsidian below 1.13 is no longer supported; upgrade Obsidian before updating the plugin. [057e538]

2) Settings Migrated to Obsidian Native Declarative Settings

  • The settings UI moved from custom HTML to Obsidian 1.13+ native declarative settings, rendered by Obsidian itself. [057e538] [ad3c1e1]
  • Removed settings (the list changed from 21 to 19 items):
    • enableCrossFileDrag — cross-file dragging is now always available;
    • enableListDropHighlight — the list drop highlight is now always rendered;
    • multiLineSelectionLongPressMs — merged into the unified long-press duration (mouseRangeSelectLongPressMs);
    • mobileDragModeToggleLocations — mobile toolbar position toggle removed.
  • New setting: mobileDragModeToggleEnabled (mobile drag-mode toggle).
  • Upgrade note: leftover removed keys in an old settings file are ignored silently.

New Features

1) Multi-Select Drag (Long-Press Multi-Select + Drag-Source Visuals)

  • Long-pressing a handle enters multi-select drag; the selected blocks form a single drag source with retained visuals. [ed4d7a9] [7364226]
  • Desktop and mobile share a unified two-phase gesture timing (press to select, move to drag). [7364226]
  • Selection highlight and checkboxes are now derived from the engine's selection line ranges and drawn as CM6 decorations, staying stable across scroll and reflow instead of relying on DOM overlays. [1fb0e71] [a133292] [90e747c]

2) Block-Type Menu Interaction Rework

  • Tapping a handle opens the block-type menu (handle on hover, menu on press). [dfce575] [9d86f80]
  • The menu is positioned by the handle's line instead of the editor cursor. [b750b6b] [f683b5a]
  • Nested block-type groups use page-style navigation (hover to open, click to apply) instead of a stacked double popover. [08427d0] [12e843a] [2ee1d75]
  • Mobile menu stability: the menu opens only on pointer-up, and scroll/pan are locked during drag so the menu and drag do not interfere. [db8fdfc] [9050843] [1e2f7fa]

3) Cross-File Drag

  • Cross-file drag commits are routed by document identity; blocks can be dragged into other open notes, and the enableCrossFileDrag toggle has been removed since the feature is always on. [19e6744] [4db7f81]

Fixes

1) Table Cell Editing Conflict (issue #53)

  • Fixed drag handles and indentation appearing inside table cells in Live Preview. Dragging is now fully dormant inside the nested cell editor (the engine gained a view exclusion option enabled), while the table remains draggable as a whole via its header row handle. [3f47053]

2) Drop Indicator and Geometry Alignment

  • The drop seam now renders as a zero-layout CM6 decoration instead of a DOM overlay, staying stable across scroll and reflow. [f26776c] [56b340c]
  • List indent steps are read from Obsidian rendering tokens, the drop indicator renders at the indented target, and line-band left edges align consistently with list markers/indent. [7b9d734] [9552596] [e646ae9]
  • The dragging cursor class is cleared when a view is destroyed. [efc0e83]

3) Mobile

  • Native text selection is suppressed in drag mode so selection and dragging do not fight each other. [1e2f7fa]
  • Edge auto-scroll now goes through the adapter scroll port, coordinating with the Obsidian editor scroll. [0cb4e56]

Engineering and Dependencies

  • Now consumes the md-dragger npm package (^2.0.1), removing the vendored copy; the platform layer uses the engine's adapter and runtime. [2b134c5] [d2832e2]
  • Migrated to pnpm, adopted biome formatting, and enabled verbatimModuleSyntax. [29b84cd] [f02fa50]
  • Language detection now uses the Obsidian getLanguage API; UI translations include Chinese. [eb3edb0]
  • Adopted eslint-plugin-obsidianmd 0.4.1 rules. [b4726e8]

README file from

Github

English 中文

Dragger

Drag and drop any block to rearrange content in Obsidian — just like Notion.

Obsidian Obsidian Community Plugin npm License Release Downloads Stars CI TypeScript Issues Ask DeepWiki

gif

Features

  • 🧱 Block-level drag & drop — paragraphs, headings, lists, tasks, blockquotes, callouts, tables, code blocks, math blocks
  • 📐 Nested drag — horizontal position controls indent level; vertical position controls insertion row
  • 🔗 Multi-line selection drag — click or long-press to select a range, then drag as a group; native checkboxes mark selected blocks on desktop
  • 🎨 Customizable handles — 4 icon styles (dot / grip-dots / grip-lines / square), adjustable size, color, and horizontal offset
  • 📍 Visual drop indicator — glowing line shows exactly where the block will land
  • 📱 Mobile support — long-press drag mode, bottom toolbar block type conversion, edge auto-scroll during drag
  • ⌨️ Keyboard shortcuts — press Escape to exit multi-select mode on desktop
  • 🗑️ Block type menu with delete — convert block types or delete the current block from the context menu

Installation

Community Plugins

Open Settings → Community plugins → Browse, search Dragger, and install.

Manual

Download main.js, manifest.json, and styles.css from the latest release, then copy them into:

<your-vault>/.obsidian/plugins/dragger/

Restart Obsidian and enable the plugin.

Headless core package

Dragger also publishes a platform-agnostic npm core. It does not import Obsidian, CodeMirror, DOM events, or editor dispatch APIs.

npm install md-dragger

Stable entry points:

import { DraggerRuntime } from 'md-dragger/drag';

For another editor platform, provide only input, document access, line locating, and preview rendering:

new DraggerRuntime({
  input,
  document: { getDoc, applyChanges },
  locate: { sourceLineFromInput, targetLineFromPoint },
  preview,
});

Usage

  1. Hover on the left edge of any block to reveal the drag handle
  2. Drag the handle to the target position — a glowing indicator shows where the block will be inserted
  3. Release to drop the block into place

Nested lists & blockquotes: move the cursor horizontally while dragging to control indent level.

Multi-line selection: long-press (touch) or click multiple handles to select a range, then drag the entire selection. Press Escape to exit multi-select.

Mobile text long-press drag: when enabled, long-press a text line or rendered block content to drag a single block directly without reaching for the left handle.

Block type conversion: right-click a handle (desktop) or use the bottom toolbar (mobile) to convert block types or delete the current block.

💡 Tip: Enable line numbers in Obsidian settings for a better experience — the handle appears right at the line-number gutter.

Settings

Setting Description Default
Handle color Follow theme accent or pick a custom color Theme
Handle visibility Hover / Always visible / Hidden Hover
Handle icon ● Dot / ⠿ Grip-dots / ☰ Grip-lines / ■ Square Grip-dots
Handle size 12 – 28 px 20 px
Handle horizontal offset Shift handle left (−80) or right (+80) px 0 px
Indicator color Follow theme accent or pick a custom color Theme
Multi-line selection Enable range-select-then-drag workflow On
Mobile text long-press drag On mobile, long-press a text line or rendered block content to drag a single block directly On
Drag source visual style Shared style set used by drag-source and list-drop highlights (Outline only / Subtle highlight / Filled highlight) Subtle highlight
Drag source highlight Toggle highlight for the block being dragged On
List drop highlight Toggle highlight for list drop target area On

Compatibility

  • Obsidian ≥ 1.0.0
  • Desktop (Windows, macOS, Linux) + Mobile (Android tested)

Roadmap

  • Multi-column layout — drag blocks into side-by-side columns
  • More style customization — handle icons, colors, themes
  • Interaction refinements — better visual feedback, smoother gestures
  • Cross-document drag — move blocks between different notes

Development

npm install
npm run dev       # watch mode with hot reload
npm run build     # production build
npm run test      # run Vitest suite (229 tests)
npm run typecheck # TypeScript type checking
npm run lint -- --max-warnings=0

License

MIT

Contributing

PRs and issues are welcome!

If this plugin helps you, a ⭐ on GitHub would mean a lot.

Community

QQ Group WeChat Donate
QQ Group WeChat

Similar Plugins

info
• Similar plugins are suggested based on the common tags between the plugins.
Editing Toolbar
4 years ago by Cuman
An obsidian toolbar plugin, modified from the Cmenu plugin
Commander
3 months ago by jsmorabito
Commander - Obsidian Plugin | Add Commands to every part of Obsidian's user interface
Custom File Explorer sorting
4 years ago by SebastianMC
Take full control over the order and sorting of folders and notes in File Explorer in Obsidian
Calendar Bases
6 months ago by Edrick Leong
Flexplorer
3 months ago by kh4f
🗃️ Obsidian File Explorer Enhancer
Any Block
3 years ago by LincZero
You can flexibility to create a 'Block' by many means. It also provides many useful features, like `list to table`. (obsidian/markdown-it/vuepress plugin/app)
Beautitab
3 years ago by Andrew McGivery
A plugin for Obsidian.MD that creates a customizable new tab view with beautiful backgrounds, quotes, search, and more.
Plugin Groups
4 years ago by Mocca101
A plugin that allows you to easily group and manage your other plugins in Obsidian.
Markdown Tabs
2 months ago by xhuajin
Create and render a Tabs component in your notes.
Voice
2 months ago by Chris Oguntolu
🔊 The Obsidian Voice plugin lets you listen to your written content being read aloud—mobile-friendly audiobook-like experience. 🎧
Kanban Bases View
6 months ago by I. Welch Canavan
A kanban-style drag-and-drop custom view for Obsidian Bases that allows you to organize your notes into columns based on any property.
Pixel Perfect Image
2 years ago by Johan Sanneblad
Pixel perfect 100% image resizing, copy to clipboard, show image in Finder/Explorer, and much more.
Unicode Search
4 years ago by BambusControl
Simple Unicode character search for Obsidian.md
Base Board
4 months ago by mderazon
Kanban Plugin For Obsidian
Simple Columns
a year ago by Josie
An Obsidian plugin that lets you create easily resizable and customizable columns in your notes.
New 3D Graph
a year ago by Aryan Gupta
Visualize your vault in 3D with a powerful, highly customizable, and filterable graph.
Simple Banner
a year ago by Sandro Ducceschi
Visually enhance your Obsidian notes with a customizable banner. Supports icons and time/date display.
Natural Language Syntax Highlighting
3 years ago by artisticat
Highlight adjectives, nouns, adverbs, verbs, and conjunctions in Obsidian.md
Emoji Magic
4 years ago by simplgy
Makes it easier to add emojis using an improved keyword search
Code Block
4 years ago by Patrik Lindefors
Code block from selection
6 years ago by Dmitry Savosh
Obsidian plugin. Adds code block for the selected text.
Callout Integrator
4 years ago by
A plugin for Obsidian to allow the integration of long blocks of text into callouts.
Better MathJax
3 years ago by GreasyCat
Custom Classes
4 years ago by Lila Rest
A minimal Obsidian plugin that allows you to add your own HTML classes to chosen Markdown elements directly from your notes.
Mobile PDF Exporter
2 months ago by Murat
One-click selectable preview PDF export plugin for Obsidian mobile and desktop.
Metadata Icon
3 years ago by Benature
change metadata entry icon
Spellcheck Toggler
3 years ago by Julian Szachowicz
A plugin for Obsidian which gives you more control over the red-underline spellcheck behaviour.
Auto Correct Capitals Misspellings
2 years ago by Ummel
This plugin automatically corrects words where the first two letters are capitalized and the rest are lower case.
Side-Notes
2 months ago by Fried Fishsticks
Tufte-style sidenotes for Obsidian
Custom Theme Studio
a year ago by @gapmiss
An Obsidian.md plugin to create and tweak custom themes with live CSS editing, element styling, and instant previews. All without leaving Obsidian.
Full Screen Toggle
3 years ago by Donkey Pacific
Fullscreen toggle plugin across all platforms for Obsidian.
Text Wrapper
4 years ago by smx0
Plugin for Obsidian
Root Folder Context Menu
3 years ago by mnaoumov
Obsidian Plugin that enables context menu for vault root folder
Speech To Text Keyboard Helper
3 years ago by mwoz123
Link Structure
a month ago by Dmitry Fert
Obsidian plugin that adds a Structure view for Bases, displaying notes as a hierarchical tree based on the up property. Supports drag-and-drop reorganization with automatic link updates, multi-select, and Templater integration.
Mobile Sidebar Notes
2 months ago by ckep1
Open notes & new tabs in the sidebar on the Obsidian mobile app.
Gay Toolbar
2 months ago by chaskane
Colorful, customizable toolbar for Obsidian, designed for mobile.
Pixel Pets
a year ago by Lucas Jin
Adds cute pixel pets to Obsidian.
Write Good
2 years ago by Mark Hesketh
Obsidian plugin to help improve writing style
Custom Slides
a year ago by David V. Kimball
Customize Obsidian's Slides core plugin's navigation, styles, and behavior.
Sectionals
a month ago by Aaron Bell
Edit Markdown by structure
Proofreader
a year ago by pseudometa (aka Chris Grieser)
AI-based proofreading and stylistic improvements for your writing. Changes are inserted as suggestions directly in the editor, similar to suggested changes in word processing apps.
Canvas Daily Note
3 years ago by Andrew McGivery
A plugin for Obsidian that allows you to add a daily note node to the canvas that will always show todays note.
Nova
8 months ago by Shawn Duggan
Nova - AI plugin for Obsidian that edits your documents directly through natural conversation. Stop copying from chat, start collaborating with AI.
Set View Mode per Note
3 years ago by Alex Davies
Use YAML frontmatter to specify a view mode per note.
Table Line Break Mobile
7 months ago by marcelflymark
Obsidian plugin: Insert a new line break inside a table cell using the <br> HTML element
Are.na unofficial
3 years ago by 0xroko
Unofficial Are.na plugin for Obsidian
Better Order List
3 years ago by Boninall
MantouAI
3 years ago by Morino Pan
MantouAI—— 让Obsidian变身智能助手
Tag Formatter
3 years ago by snsvrno
Configurable Obsidian plugin that hides parent tags.
Expand Selection
6 months ago by Alex Tait
Obsidian plugin to expand your editor selection to lines, sections (recursive), or the entire note
Rich Text Editor Shortcuts
2 years ago by Joshua Wootonn
Create and toggle checkboxes, paste links wrapping your current selection, and toggle underline without leaving the keyboard.
Hemingway Mode
2 years ago by Joaquín Bernal
Duplicate line
a year ago by Marcin Sztolcman
Plugin for Obsidian: duplicate current line, or selection.
Graphic Organizer
6 months ago by Nick Le Guillou - Superhuman Curiosity
Edit Link Alias
8 months ago by mnaoumov
Obsidian Plugin that adds edit link alias command.
Variant Editor
a year ago by Kunal Jain
Obsidian plugin to create variants
Auto Folder Note Paste
a year ago by d7sd6u
Convert your note into folder note upon pasting or drag'n'dropping an attachment
Mode manager
2 years ago by dk949
Better management of reading/editing modes in obsidian
AI Revisionist
2 years ago by Synaptic Labs
My SVGs
8 months ago by Omar Badawy
An Obsidian plugin that Registers your own SVGs into Obsidian's global icon library for use with other plugins or however you want.
Bitcoin Block Stamp
2 years ago by sefiro
Stamp your Obsidian notes with the current Bitcoin block.
Editing Mode Hotkey
2 years ago by Signynt
Obsidian plugin to change the default editing mode (between Live Preview and Source) using a command or hotkey
Regex Line Filter
a year ago by 64MM4-KN1F3
A note filtering plugin for Obsidian
WebDAV Explorer
6 months ago by 蓝星晓夜
WebDAV Server Explorer.
Budget Planner
2 months ago by kalinichenko88
A minimalist budget planning tool for Obsidian. Create, track, and manage budgets using markdown code blocks directly in your notes.
Quick Nav
a year ago by exoticknight
Enhance your editing experience by unleashing the hidden power of shortcuts.
Remove Unused Block IDs
2 years ago by Daniel Geneta
A simple plugin that removes unused block IDs for Obsidian.md
Select word
2 years ago by Connor Espino
List Callouts Improved
12 days ago by Daniel Yim
Create callouts in lists in Obsidian.
Yori Task
4 months ago by yorigo77
task manager, week planner, year planner
Add Attachment
13 days ago by olegg90
Obsidian plugin for adding multi attachments
Simple Editorial
23 days ago by Beppe
A minimal editorial markup plugin for writers using Obsidian.
Chronobars
18 days ago by Daniel Hidefjäll
Create time-based progress bars in Obsidian