Tiny Dragger
approvedby LiShaocheng
Drag and rearrange Markdown blocks inside a note. - This plugin has not been manually reviewed by Obsidian staff.
Tiny Dragger
Tiny Dragger is an Obsidian desktop plugin that rearranges Markdown blocks inside the current file. Hover a block to show a gutter handle, drag to move or nest it, and click the handle for convert / copy / cut / delete. It does not drag between files.
Block detection, moves, indent, and basic type conversion use the MIT md-dragger engine (the same domain as Dragger). Handles, menus, native multi-block selection, settings, and translations are implemented in this plugin.
- Display name: Tiny Dragger
- Plugin ID:
tiny-dragger - Minimum Obsidian version: 1.13.0
- License: GPL-3.0 (the
md-draggerdependency is MIT) - UI language: Follows the Obsidian app language. Codes starting with
zhshow Simplified Chinese. All other languages show English.
Install
In Obsidian, open Settings → Community plugins, search for Tiny Dragger, then install and enable it. Desktop only.
To skip the community directory or install a development build, see “Build from source” at the end.
Usage
Works in Source mode and Live Preview. Reading view has no handles.
Handle
Hover a block. A four-dot handle appears over the left gutter (it does not shrink the text column):
- Click the dots to open the block menu. The handle stays on that block until the menu closes.
- Press and drag the dots to move the block.
Drag
- Single block: do not select text. Hover the four dots, hold the left button, and drag.
- Multiple blocks: select the text of several blocks with the editor’s native selection, then drag from the four-dot handle of a block inside that selection. Dragging from a handle outside the selection moves only that one block.
- Lists: each list row moves on its own. Nested children are not taken unless you select those rows too. Selecting several nested rows (for example three indented items) moves them together.
- Nesting: while dragging lists, quotes, or callouts, move horizontally to change indent. The drop guide shifts with the target indent. A mostly vertical drag keeps the original indent.
- Press Escape to cancel.
Block menu
Click the four dots (without dragging) to convert, copy, cut, or delete. Convert targets are paragraph, H1–H6, bulleted / numbered / task list, quote, [!info] / [!warning] / [!danger] / [!example], code block, or math block — with copy / cut / delete below a separator. Same-type conversions do nothing. When a multi-block native selection includes the gripped block, these actions apply to that whole payload (same rules as drag); otherwise they apply only to the gripped block.
Settings
Under Obsidian Settings → Tiny Dragger:
| Setting | Description | Default |
|---|---|---|
| Handle color | Theme accent, or a custom color picker | Theme |
| Handle size | 12–28 px, step 2 | 20 |
| Handle horizontal offset | −20 to 20 px | 0 |
Known limits
- Desktop only. No handles in reading view or on mobile.
- Block boundaries follow
md-draggerand may not match Live Preview widgets exactly. - Inline
$…$math is not a block. YAML frontmatter is not draggable. - No cross-file or cross-pane dragging.
Development
For people who change the code, install locally, or publish a release. Plugin users can skip this chapter.
Build from source
Requires Node.js. On Windows, run this in Git Bash or WSL (PowerShell cannot run ./build.sh directly).
git clone https://github.com/exbob/obsidian-tiny-dragger.git
cd obsidian-tiny-dragger
npm install
./build.sh
Then copy tiny-dragger/ into the vault at .obsidian/plugins/tiny-dragger/. That directory contains main.js, manifest.json, and styles.css. Enable Tiny Dragger under Settings → Community plugins.
./build.sh clean only deletes main.js, main.js.map (if present), and ./tiny-dragger/. It does not build. ./build.sh and bash build.sh are the same.
Develop and check
npm run dev # watch source and rebuild
npm test # unit tests
npx tsc --noEmit # typecheck
npm run build # production build (writes main.js at the repo root only)
./build.sh # production build and write tiny-dragger/
Publish a new version
Bump version in manifest.json and package.json, add the mapping in versions.json, push, and create a GitHub Release from tiny-dragger/’s main.js, manifest.json, and styles.css. The release tag must match the version exactly (for example 1.0.0, with no v prefix). See the Obsidian plugin publishing docs.
Project layout
build.sh
esbuild.config.mjs
manifest.json
styles.css
tiny-dragger/ # install directory to copy into a vault
src/
main.ts
settings.ts
constants.ts
i18n/
engine/ # md-dragger wrappers
services/ # editor host, drag session
ui/ # gutter, menu, settings
tests/
docs/superpowers/specs/
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.