ansango68 downloadsRename files to slug-case (lowercase, no accents, hyphens) and automatically update links using fileManager.renameFile.
Rename files — and everything that links to them — to slug-case (lowercase, no accents, hyphens) right from Obsidian. No script, no terminal: pick a file, a folder, or a multi-selection, review the list, edit it if needed, confirm.
Renaming files by hand to keep a consistent naming convention is tedious, and doing it outside Obsidian breaks wikilinks. This plugin uses Obsidian's own fileManager.renameFile API, so every link pointing to a renamed file is updated automatically — nothing breaks.
old path → new path before anything changes — nothing is renamed without explicit confirmation.-/_), and an opt-in toggle to also rename non-markdown attachments.Not yet on the Community Plugins list — manual install:
main.js, manifest.json and styles.css from the latest release.<your-vault>/.obsidian/plugins/slugify/.In every case a modal shows the full list of renames — editable — before anything is applied.
- or _, used in place of spaces and other non-alphanumeric characters.The plugin calls vault.getFiles() / vault.getMarkdownFiles() to enumerate files in the vault. This is required for its core function (finding which files to rename) — it never reads file contents or sends anything over the network.
main.js and styles.css in each release are signed with GitHub artifact attestations, proving they were built by this repo's release.yml workflow from the tagged source. Verify a downloaded asset with the GitHub CLI:
gh attestation verify main.js --repo ansango/obsidian-slugify
Uses Bun for both package management and running scripts. Bundling still goes through esbuild (the approach recommended by Obsidian's plugin docs).
bun install
bun run dev # watch mode, rebuilds main.js on change
bun run build # type-check + production build (minified, no sourcemap)
bun test # run the test suite
The plugin is plain TypeScript + the Obsidian API — no UI framework, structured under src/:
src/core/ — the Plugin entry point, the confirmation modal, the settings tab, and vault file-tree helpers.src/utils/ — pure logic (slugify, collision detection) decoupled from Obsidian's types so it's unit-testable with bun:test (colocated as logic.test.ts), plus the English/Spanish translations.src/styles/ — the plugin's CSS, copied to the plugin root on every build.MIT