New
- 🚀🎉🍾 Added inline link autocomplete to text element editing and element link editing. Simply start typing "[[" as you would in a normal markdown document.
- ‼️ removed add link button element-link editor on desktop
- ‼️ removed add link from context menu on desktop
- ‼️ added new setting under "Links, transclusion and TODOs" Sync text-element link with text
- The default behavior is OFF, because it feels more natural to manage the element link separately.
- When enabled (ON), Excalidraw matches pre-2.19.0 behavior: the first link in the text body is always copied to the element link field. SVG/PNG exports only keep links when the element link field holds a single link (not links inside the text body). Turn this ON if you rely on text-body links and want the element link to always mirror the first one. Turn it OFF if you manage the element link separately: for metadata like tags, inline link ontologies, or multiple links, e.g., dataview-style notes like '(reminds me of:: [[link]]) #noteToSelf'.
- LaTeX formula is saved to
element.customData.latex. This can be helpful for various automation use cases. - Implemented Color Picker in Custom Pen Settings to pick from the current view's color palette.
- Updated the Scribble Helper script with the new Color Picker to select the text color.
- Updated the Shade Maser script with the new Color Picker to select the shading color.
- Mindmap Builder
- Uses new sidepanel, persistent across different drawings and autostarts with Obsidian.
- You can now configure hotkeys
- Allows editing node text in place
- You can define your own color palette for branches
- Improved auto-layout algorithm to work better with larger subtrees
- Includes inline link suggester
- Image and Embeddable nodes
Fixed
- Floating modal used by Excalidraw scripts did not work correctly in Obisidian popout windows.
- In onPaste if
imageElement.customData.latexis present, it will treat the pasted images as a LaTeX formula, even if copied from Excalidraw.com or another Obsidian Vault.
New & fixed in ExcalidrawAutomate
ea.toClipboard()will now include the DataURL for included images fromea.imagesDict- Implemented Excalidraw Sidepanel API for ExcalidrawAutomate. Scripts can now create custom Obsidian sidepanel tabs in the Excalidraw Sidepanel.
- New Command Palette action: "Open Excalidraw Sidepanel" will toggle the sidepanel visibility.
- The demo script making full use of the new sidepanel API is Mindmap Builder.
- ExcalidrawAutomate full library for LLM training.md includes all necessary training information to use sidepanels.
- Added palette popover helper
showColorPicker()(also used in Pen Settings and Mindmap Builder) to pick from the current view's canvas/element palettes. - Added inline link suggester helper
attachInlineLinkSuggester()returning a KeyBlocker interface so host scripts can suppress their own keydown handlers while the suggester is active.
New functions in ExcalidrawAutomate. See also SidepanelTab type definition.
sidepanelTab: ExcalidrawSidepanelTab | null;
checkForActiveSidepanelTabForScript(scriptName?: string): ExcalidrawSidepanelTab | null;
createSidepanelTab(title: string, persist?: boolean, reveal?: boolean): Promise<ExcalidrawSidepanelTab | null>;
getSidepanelLeaf(): WorkspaceLeaf | null;
toggleSidepanelView(): void;
persistSidepanelTab(): ExcalidrawSidepanelTab | null;
attachInlineLinkSuggester(inputEl: HTMLInputElement, widthWrapper?: HTMLElement): KeyBlocker;
getViewColorPalette(palette: "canvasBackground"|"elementBackground"|"elementStroke"): (string[] | string)[];
showColorPicker(anchorElement: HTMLElement, palette: "canvasBackground"|"elementBackground"|"elementStroke", includeSceneColors: boolean = true): Promise<string | null>;- setView() improvements
- Calling
setView()now picks a sensible target automatically:- It prefers the currently active Excalidraw view.
- If no active Excalidraw view is found (e.g., the user is focused on a different tab like the File Explorer/sidebar), it will fall back to the last active Excalidraw view (as long as it is still available) — typically the drawing the user came from.
- New selector:
"auto"(equivalent to callingsetView()).- Useful when you also want to reveal/focus the view:
setView("auto", true).
- Useful when you also want to reveal/focus the view:
- Deprecated selectors:
"active"and"first"are deprecated and kept only for backward compatibility.- Recommended usage is either
setView(),setView("auto"), orsetView(excalidrawView)(explicitly target a specific view).
- Recommended usage is either
- Calling
setView(view?: ExcalidrawView | "auto" | "first" | "active" | null, show: boolean = false)