Azure DevOps Wiki

unlisted

by Vineet Khurana

Edit a git-cloned Azure DevOps wiki as a first-class vault: decoded page titles, .order page tree, ADO formatting toolbar, work item links, and one-click git refresh/sync.

Updated 1mo agoMIT
View on GitHub

Azure DevOps Wiki — Obsidian plugin

Edit a git-cloned Azure DevOps wiki as a first-class Obsidian vault: decoded page titles, .order-aware page tree, ADO rendering (images, [[_TOC_]], Mermaid, work items), the familiar ADO formatting toolbar, and one-click Refresh / Sync for people who have never used git.

Files on disk stay 100% Azure DevOps-native. Encoded file names, root-absolute links, .order files, ::: mermaid blocks — the plugin adapts Obsidian's interface around that format rather than converting your wiki into something else. Push at any moment and the wiki renders correctly in the portal; git diff only ever shows what you actually edited.


Install

You need Git installed (Git for Windows), but you do not need to know how to use it — the plugin downloads the wiki for you.

  1. Make an empty folder for the wiki and open it in Obsidian as a vault (Open folder as vault). Put it somewhere outside OneDrive, Dropbox or Google Drive — they lock files while uploading and will corrupt the repository — and not inside another git repository.

  2. Install the plugin. Either:

    • BRAT (recommended during the beta): install the Obsidian42 – BRAT community plugin, then Add beta plugin and paste this repository's URL. BRAT keeps it updated.
    • Manually: download main.js, manifest.json and styles.css from the latest release into {vault}/.obsidian/plugins/azure-devops-wiki/.
    • From source: npm install && npm run build && npm run install-plugin -- "C:\path\to\vault".
  3. Turn off Restricted mode and enable Azure DevOps Wiki.

  4. Paste your wiki's address. Because the folder is empty, the plugin offers to set it up as soon as it loads. In Azure DevOps open your wiki, click the menu beside its name, choose Clone wiki, and paste the address it shows. The plugin works out the branch, fills in the organization, project and wiki name, and downloads the pages.

    Nothing appeared? Run Set up a wiki in this vault from the Command Palette (Ctrl+P). Already have a clone? Just open it as a vault instead — steps 1 and 4 are for starting fresh.

  5. Run Check vault setup (Ctrl+P). It points Obsidian's link settings at the format ADO uses, stops git rewriting line endings, and warns you if the clone is somewhere that will damage it.

  6. Optional: a personal access token (Settings → Azure DevOps Wiki). Only needed to search work items by title, show their names on hover, and read page comments.


What it does

Pages

Decoded titles everywherePre%2DRelease%3A-Q&A%3F.md reads "Pre-Release: Q&A?" in the explorer, tabs and window title.
One row per pageA page with subpages is a file and a folder on disk; the explorer shows one row that opens the page and still expands.
Wiki pages treeRight sidebar, in .order sequence, drag to reorder, right-click for new subpage / rename / delete / set as home page.
Page order from anywhereRight-click any page in Obsidian's own file explorer for Move up / Move down / Set as wiki home page, or use the two commands. Obsidian's explorer sorts alphabetically and lists folders first, so it cannot show the wiki's order — the Wiki pages tree can, and "Show in the wiki page order" jumps there.
Open wiki pageFuzzy switcher over decoded titles and title paths.
Create / rename / deleteTitles are validated against ADO's rules before anything touches disk; renaming moves the file, the paired folder, the .order entry and every inbound link. A page Obsidian's own New note creates with spaces in its name is re-encoded automatically, so Azure DevOps can open it.

Rendering — in both reading mode and live preview

![x](/.attachments/f.png) images · [Text](/Parent/Child) links · [[_TOC_]] and [[_TOSP_]] (generated fresh on every render, from the text you are typing) · ::: mermaid diagrams · ::: video and ::: query-table placeholders · #123 work items · !123 pull requests · @<mention> · tables that ADO renders but Obsidian would not.

Sync

Get updates brings in what other people published; Publish sends yours. Both sit at the right-hand end of the page toolbar with a count on them, in the ribbon, and in the status bar. Conflicts open a dialog that asks, per page, which version to keep — in those words, not in git's. Nothing destructive is ever run: no reset, no clean, no --force, and a test in the suite fails the build if one ever appears in the source.

Wiki changes paneWhat you have edited but not published yet, and the last 15 changes to the wiki — author, when, and the pages each touched. Click a page to open it.
Unpublished pages are markedA page you have changed is highlighted in the file explorer and the wiki tree, the way an editor marks a modified file. "Changed" means the text differs from what Azure DevOps has — not merely that git noticed the file was rewritten.
Publish refuses a broken new pageA new page whose file name Azure DevOps cannot open would break in the portal for everyone and cannot be fixed there. Publish stops and points at it.

Compatibility checks

Check this page for Azure DevOps problems (or the whole wiki) finds everything that will not survive publication — [[wikilinks]], %%comments%% that would leak, ==highlights==, callouts, footnotes, broken links, Mermaid that ADO's subset cannot draw, page names ADO cannot decode, files past its size limits — and fixes what can be fixed safely. It can also run automatically before every sync.


Commands

Everything is in the Command Palette under "Azure DevOps Wiki". The ones worth binding:

CommandDefault
Refresh from Azure DevOps / Sync to Azure DevOpstoolbar + ribbon buttons + status bar
Show wiki changesribbon button
Open wiki page
Move this page up / down in the wiki order— (also on the file explorer's right-click menu)
Bold / Italic / Insert linkCtrl+B / Ctrl+I / Ctrl+K
Check this page for Azure DevOps problems
Check vault setup

Documentation

DocPurpose
PLAN.mdPhased implementation plan and status
docs/REQUIREMENTS.mdFunctional & non-functional requirements
docs/ARCHITECTURE.mdTechnical design
docs/ADO-WIKI-FORMAT.mdADO wiki on-disk format — ground truth
docs/SYNTAX-MAPPING.mdObsidian ⇄ ADO syntax reference
CLAUDE.mdWorking agreement for AI-assisted development

Development

npm install
npm run dev          # watch build straight into test-vault/ (then Ctrl+R in Obsidian)
npm run build        # type-check + production build
npm test             # unit tests (pure modules + performance budgets)
npm run verify-wiki -- "C:\path\to\a\wiki.wiki"   # read-only audit of a real clone

test-vault/ mirrors a real ADO wiki — encoded names, .order chains, .attachments, and fixture pages for every piece of ADO syntax — and is the safest place to try changes.

Releasing

Tag a version and push it; the workflow in .github/workflows/release.yml builds and attaches main.js, manifest.json and styles.css to a GitHub release.

npm version patch          # bumps package.json, manifest.json and versions.json
git push --follow-tags

Licence

MIT.

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.