Obsidian Release v0.11.11


  • Hover previews now always requires holding Cmd/Ctrl.
  • Markdown auto-pairing for =, ~ and $ now only works when you are selecting text. Auto-pairing as you type was an undesirable behavior that was quite annoying for these characters.
  • Introduced auto-pairing for comments %, also only happens when you are selecting text.
  • Obsidian Sync now no longer cause a few characters of glitching when receiving multiple changes over a high latency network.
  • Obsidian Sync will now ignore files with illegal characters when downloading, rather than constantly running into an error and retrying.
  • File Recovery will now retry saving files that has been edited but was still in the cooldown period.
  • It is now possible to rename .obsidian to .obsidian.nosync to prevent iCloud from syncing the config folder. Make sure to close the app before the rename.

No longer broken

  • Fixed publish unable to upload publish.js.
  • Fixed swapping panes causes one of them to shrink.
  • Disabled plugins now properly disables the previously selected hotkeys.
  • Fixed file property of new URI handler not working without a parent folder.
  • The active pane will now be properly restored between restarts of the app.
  • Pressing End will now properly go to the line end in tables.
  • Fixed title and body flashes to “No file” briefly when switching notes.


  • There is now a mobile emulation flag that can be used to emulate mobile mode. Use app.emulateMobile(true) to turn on emulation and app.emulateMobile(false) to turn off.
  • Officially starting to discourage the use of CodeMirror 5’s API if possible, and migrate to using the Editor interface. The Editor interface supports Obsidian Mobile and will be used to power the future WYSIWYG mode. We will gradually add any missing APIs to ensure feature compatibility with the older CM5 API when possible.

For developers using CodeMirror 5’s API:

If your plugin only does basic things such as:

  • Reading/changing selection with getSelection, getCursor, setCursor, etc.
  • Getting text/line from the editor with getLine, getValue, getRange, etc.
  • Changing text in the editor with replaceSelection, replaceRange, setValue, etc.

Then you can now use MarkdownView.editor instead of MarkdownView.sourceMode.cmEditor and it should just work.

If you do more advanced things with CodeMirror 5’s API, such as inserting widgets, making DOM level changes, adding options, or registering events, then keep your code for CM5 and make your plugin desktop only.