2.27.0-beta.8
- Excalidraw Automate can optionally load and monitor JavaScript (
.js) files in the Scripts folder, use a.jsstartup script, and store Script Library downloads as either Markdown or JavaScript. Existing scripts can be moved between the two formats while updating startup and pinned-script paths. #2901 - Converting a legacy “.excalidraw” drawing now persists its embedded images as vault attachments during conversion, before the source file can be removed. #2898
- Entering text editing no longer scans and sorts the entire vault for link suggestions; file-link candidates are loaded only after typing
[[. #2907
Excalidraw 2.27.0 Beta Testing Game
2.27.0 has turned into a much bigger release than I originally expected.
There are visible changes — the new searchable settings, new Excalidraw Automate capabilities, JavaScript scripts, improvements inherited from Excalidraw.com, and a number of fixes.
But much of the work is under the hood.
Among other things, I have:
- substantially reworked the save/autosave pipeline;
- changed how Excalidraw is packaged and integrated into Obsidian;
- moved to React 19 and a modern ESM-based Excalidraw build;
- worked with the Excalidraw team to add
ownerDocumentsupport so one Excalidraw runtime can safely serve multiple Obsidian windows; - reworked main-window ↔ popout-window migration;
- substantially reduced the memory cost of popout windows;
- changed how drawings and embedded images are handed over when moving between windows;
- optimized loading of drawings containing many embedded/nested drawings, PDFs and images;
- migrated the settings system to Obsidian’s new declarative/searchable settings;
- reorganized several large parts of the plugin into smaller managers;
- added new Excalidraw Automate APIs and JavaScript script support.
In other words: a lot has changed.
I have done quite a lot of targeted testing while implementing these changes, but there is no realistic way for one person to test every combination of workflows, operating systems, vaults, drawing sizes, scripts, settings, popout windows, mobile devices, and strange things people do with Excalidraw.
So instead of asking everyone to “please test the beta”, let’s make this a little game.
Roll a d20
There are 20 test scenarios below.
If you own a 20-sided die, roll it.
If you don’t, use any online dice roller / random-number generator and generate a number between 1 and 20.
Then test that scenario.
Want to help more? Roll again.
If the scenario doesn’t apply to you — for example, you roll an Excalidraw Automate test but don’t use scripts — simply reroll.
You don’t need to test everything. One carefully tested scenario is already useful.
Please update to the latest 2.27.0 beta before testing.
The 20 scenarios
1 — The boring everyday drawing
Tests: the new Excalidraw runtime and the many internal refactors.
Restart Obsidian and use Excalidraw normally for a few minutes.
- Open an existing drawing.
- Create a new drawing.
- Draw a few shapes and freedraw strokes.
- Add and edit some text.
- Paste or drag in an image.
- Undo and redo a few operations.
- Zoom and pan.
- Close the drawing and reopen it.
If convenient, also try this once while your computer is offline.
Look for: anything that simply feels broken, missing, strangely styled, unresponsive, or fails to survive reopening.
2 — Handwriting torture test
Best for: tablet and pen users, but mouse users can test as well.
Tests: the rewritten save pipeline and autosave performance.
Open a reasonably large drawing and continuously draw/write for several minutes.
Don’t wait for autosave. Just keep writing while Excalidraw does its work in the background.
If you regularly use Excalidraw for handwriting, use it exactly as you normally would.
Look for:
- pauses or stutters that seem to happen periodically;
- pen strokes lagging during autosave;
- unusually high CPU use;
- on tablets, unusual heating compared with your normal experience;
- edits disappearing after closing and reopening.
I am especially interested in whether handwriting feels smoother than 2.26.4 on larger drawings.
3 — Save while still editing
Tests: save coalescing and protection of edits made while a save is already underway.
Use a large drawing if you have one.
- Make a visible edit.
- Trigger a manual save.
- Immediately continue drawing or typing while the save is happening.
- Make several more edits in quick succession.
- Close the drawing fairly quickly afterward.
- Reopen it.
Pass condition: the reopened drawing contains the latest edits, not merely whatever happened to be present when the first save started.
Try being slightly unreasonable. That is the point of this test.
4 — [[ versus the Command Palette
Tests: saving triggered by real Obsidian modals without interrupting inline text editing.
In an Excalidraw text element:
- Type ordinary text for a while.
- Type
[[. - Use the link suggester.
- Select a file, heading, or block.
- Continue typing.
The suggester should not kick you out of text editing.
Then make another unsaved edit and open the Obsidian Command Palette or another real Obsidian modal.
Close/reopen the drawing afterward.
Pass condition:
- inline
[[suggestions remain smooth and usable; - opening a real Obsidian modal safely saves the drawing;
- no text or other recent edits disappear.
If you use a large vault, also notice whether simply entering text editing feels faster than before.
5 — Main window → popout → main window
Desktop only.
Tests: one of the most heavily reworked areas in 2.27.0: window migration.
- Open a drawing in the main Obsidian window.
- Make an edit but don’t deliberately save.
- move the drawing to an Obsidian popout window.
- Immediately continue editing there.
- Undo/redo something.
- Make another unsaved edit.
- Move the drawing back to the main window.
- Continue editing.
- Close and reopen the drawing.
Do this round trip a few times if you’re feeling adventurous.
Look for:
- lost edits;
- a blank or frozen drawing;
- controls that stop working;
- keyboard shortcuts behaving strangely;
- undo history behaving unexpectedly;
- progressively slower migrations after repeated round trips;
- the final reopened drawing not matching what you last saw.
6 — Actually work in a popout
Desktop only.
Tests: Excalidraw’s new cross-document ownerDocument architecture.
Open or create a drawing directly in an Obsidian popout window and actually use it there.
Try:
- pointer/freedraw input;
- text editing;
- keyboard shortcuts;
- copy/paste;
- undo/redo;
- color pickers and popovers;
- context menus;
- tooltips;
- opening the Command Palette;
- a few different fonts if you use them.
If you use custom fonts or CJK fonts, this is an especially useful test.
Look for: anything appearing in the wrong window, menus behind other UI, missing fonts, broken keyboard/pointer handling, or controls that work in the main window but not the popout.
7 — Move a drawing while its images are still loading
Desktop only. Extra points for evil drawings.
Tests: cancellation, progressive image loading, and migration safety.
Use a drawing containing many images, embedded Excalidraw drawings, PDFs, or nested drawings.
- Open it.
- Before everything has finished appearing, move it to a popout.
- Keep interacting with the drawing.
- Move it back while images are still loading if you dare.
- Make an edit during this process.
- Eventually close and reopen it.
Pass condition: Excalidraw remains usable and the edit survives.
Images may appear progressively. That is expected.
Freezes, a permanently empty scene, lost edits, or images that never recover are not expected.
8 — The monster drawing
Tests: the image cache and embedded-scene loading performance work.
Use the nastiest drawing you have: lots of images, nested Excalidraw drawings, PDFs, SVGs, etc.
Open it once after restarting Obsidian.
Then close and reopen it again while the cache is warm.
Look for:
- cached/direct images appearing relatively early;
- whether the drawing becomes usable before every last image is ready;
- missing images;
- images that remain permanently blank;
- loading that never completes;
- obvious regressions compared with 2.26.4.
You don’t need a stopwatch, but rough timings are extremely useful if you happen to know them.
9 — Nested drawings, back navigation and links
Tests: embedded-drawing classification/cache behavior and the refactored link-navigation code.
Create or use a drawing containing another Excalidraw drawing.
- Open the parent.
- Navigate to/open the child.
- Change something obvious in the child.
- Save it.
- Return quickly to the parent.
- Confirm the embedded child updates correctly.
If your drawings contain links to other Excalidraw drawings, frames, groups, or elements, click a few of those as well.
Look for: an embedded Excalidraw drawing suddenly behaving like ordinary Markdown, stale images, links opening the wrong place, or requiring a restart before updates appear.
10 — Editable Markdown image workout
Tests: the refactored Markdown-image controller and persistence.
If you use editable Markdown images:
- Create one.
- Edit its Markdown.
- Immediately switch to another Markdown image and edit that too.
- Duplicate one.
- Convert one between Markdown image and embeddable.
- Change some appearance settings.
- Delete one and respond to the keep/delete-content prompt.
- Close/reopen the drawing.
Pass condition: the right content remains attached to the right image and nothing silently disappears.
This is particularly useful because Markdown-image handling has had subtle timing bugs in the past.
11 — Save, export, blur, reopen
Tests: the rewritten save/export coordination.
Use a drawing containing text and images.
Try a few exports you normally use:
- PNG;
- SVG;
- copy to clipboard;
- PDF, if you use Excalidraw Extras.
If you use automatic SVG/PNG/Excalidraw export, enable it for this test.
Then:
- make an edit;
- switch away from Obsidian so the window loses focus;
- return;
- verify that the drawing was saved and the automatic export updated;
- make another edit and use the normal manual save;
- close/reopen.
Look for: stale exports, missing images/text, duplicated work, or a blur save behaving differently from an ordinary save in a way you can actually see.
12 — Search the new settings
Obsidian 1.13+
Tests: the new declarative/searchable settings UI.
Open Settings → Excalidraw.
Instead of scrolling, search for several things you know exist. For example:
- autosave;
- grid;
- filename;
- embed;
- PDF;
- script;
- pen;
- theme.
Follow some breadcrumbs and links between related settings.
Change a few harmless options and restart Obsidian.
Pass condition:
- search finds what you expect;
- navigation makes sense;
- settings appear only once and on the right page;
- values persist after restart;
- help links and the normal Excalidraw settings toolbar/content still work.
Also report anything that is simply hard to find. This is a UX test as much as a bug test.
13 — Settings that affect other settings
Tests: settings dependencies, persistence, and live drawing state.
Keep a drawing open, zoom in and pan somewhere distinctive.
Then change a few settings that have related/dependent controls, such as:
- grid settings;
- TODO/done icons;
- auto-export formats;
- filename settings;
- Markdown embed defaults;
- custom pens;
- rendering/theme-related settings.
Return to the drawing.
Pass condition: changing a rendering-related setting should not unexpectedly throw you back to a different zoom/scroll position.
Also confirm dependent settings enable/disable or update when you expect them to, and that the values survive restart.
14 — Go back to the old settings UI
Obsidian 1.13+
Tests: the supported legacy-settings fallback.
At the top of Excalidraw settings, turn off Use searchable settings and restart Obsidian.
You should get the previous single-page settings experience.
Change a couple of settings there and verify that they still work.
Then, if you like, switch searchable settings back on and restart again.
Pass condition: both settings UIs operate on the same real settings. Switching UI should not reset or corrupt your configuration.
15 — Stencil library + multiple windows
Especially useful if you have a large custom library.
Tests: stencil-library loading, including simultaneous restored views.
- Open an Excalidraw drawing in the main window.
- Open another in a popout.
- Confirm your stencil library is complete in both.
- Add or remove an item.
- Restart Obsidian with both windows/views restored if your setup allows it.
- Check the library again.
Look for: missing library items, duplicates, an empty library in one window, or changes that disappear after restart.
If you store your library as a vault file, that configuration is particularly useful to test.
16 — Text-to-Diagram history
Tests: the repaired Text-to-Diagram history UI and its behavior across windows.
If you use Text-to-Diagram:
- Open it.
- Create or use an existing conversation.
- Open the history menu.
- Restore an older chat.
- Delete one.
- Close and reopen Text-to-Diagram.
Desktop users: repeat the history-menu test from a popout window.
Look for: the history menu appearing behind the dialog, missing styling, clicks not working, history not restoring/deleting, or the menu appearing in the wrong window.
17 — Color-picker playground
Tests: several upstream Excalidraw changes plus plugin color-picker fixes.
Play with:
- Bucket Fill;
- eyedropper;
- lasso selection in both contain and overlap modes;
- the color palette;
- dragging colors into the top picks strip;
- right-clicking top picks to reset;
- changing the canvas background color.
Then save, close and reopen the drawing.
Pass condition: customized top picks survive when they should, the palette behaves normally, the native picker is usable, and the picker/popover styling follows the current canvas/theme correctly.
18 — Convert an old .excalidraw file
Only if you have a legacy .excalidraw file. Make a backup first.
Tests: the legacy conversion fix in the latest beta.
Use an old .excalidraw drawing that contains embedded/pasted images.
Convert it to the current Markdown-based Excalidraw format.
Then:
- verify the drawing opens correctly;
- verify all embedded images are present;
- check that the required image attachments were created in the vault;
- restart Obsidian and reopen the converted drawing.
Pass condition: no image should disappear because the old source file was removed before its embedded assets were safely persisted.
19 — JavaScript Excalidraw scripts
For Excalidraw Automate / script users.
Tests: new .js script support.
Try one or more of the following:
- put a
.jsExcalidraw script in your Scripts folder; - run it;
- edit the
.jsfile and verify Excalidraw notices the change; - configure a
.jsstartup script; - download a Script Library script as JavaScript instead of Markdown;
- move an existing script between Markdown and JavaScript using the supported workflow;
- check that pinned/startup references still point to the right script.
Also open Excalidraw Automate → Settings for installed scripts and confirm script-provided settings appear there and update appropriately.
Look for: duplicate scripts, scripts not refreshing, broken paths, settings disappearing, or a startup script running from the wrong file.
20 — Excalidraw Automate power-user test
For script authors / adventurous testers.
Tests: the new contextual element-action and autostart APIs.
If you have a script using the new APIs, test:
Selected-element actions
Register a custom action using registerElementActionProvider().
- Select an eligible element.
- Confirm the custom button appears immediately.
- Run the action.
- Run the script again and make sure you do not get duplicate buttons.
- Close/reopen the view.
Autostart
Use registerAutostart().
Try the permission choices:
- Allow
- Deny
- Ask me later
Then open additional Excalidraw views and verify the script behaves according to that choice.
Check the Autostart scripts command/settings and change the permission there as well.
Look for: duplicate actions, stale buttons after deleting/unloading a script, scripts starting despite Deny, permissions not persisting, or scripts failing to attach to newly opened views.
Found something?
Please report it even if you’re not sure whether it is caused by 2.27.0.
The easiest option is simply to reply in this thread.
For something that looks like a reproducible plugin bug, you can also open a GitHub issue:
When reporting a result, please include:
- Scenario number
- Excalidraw version
- Obsidian version
- Operating system / device
- whether you were in the main window or a popout
- what you did
- what you expected
- what happened instead
- screenshot / short screen recording if it helps reproduce the problem
And please report successful tests too.
Something as simple as:
Scenario 5 passed — 2.27.0-beta.x, Windows 11, Obsidian x.x.x. Did five main ↔ popout round trips with edits in between. Everything survived reopening.
is useful information.
Why this matters
2.27.0 is intentionally laying groundwork rather than piling feature after feature onto the existing architecture.
Some of these changes have already produced very substantial improvements in my stress-test drawings — especially save performance, image-heavy drawing load time, popout migration time, and popout memory use.
But the real test is not my vault.
It’s yours.
So roll the die, abuse Excalidraw a little, and tell me what happens. ![]()