Repository navigation
Releases: yibie/excali-mode
Release list
excali-mode 0.3.0 — Org whiteboards
Org whiteboards inside Emacs
This release introduces excali-board-mode, a derived mode of excali-mode for arranging Org notes and local reference material on a whiteboard.
Keep your Org document on the left and a connected board on the right. The notes remain in Org; the board adds spatial organization.
Linked Org cards
- Bring an existing heading onto a board, display its full subtree, and jump back to its source.
- Edit the source and see the card refresh; double-click for a fixed popup editor.
- Move and resize cards independently of their content, with internal vertical and horizontal scrolling.
- Read formatted headings, lists, tables, code blocks, clickable Org links, and inline local images.
- Start with a standalone Org note on the board and convert it into a heading without entering its title again.
Connections and organization
- Labeled, bound arrows follow cards as they move.
- Create a connected note from a free arrow endpoint.
- Organize cards with named groups and regions, and navigate between them.
Vaults and reliable references
Configure one or more local directories:
(require 'excali-board)
(setq excali-board-vaults
'(("Notes" . "~/Documents/notes/")
("Work" . "~/Documents/work/")))Run M-x excali-board-new while browsing an Org document within a configured vault. The source directory determines the vault automatically; nested roots use the closest match. The board is saved immediately and opens on the right.
- Recursive, vault-bounded discovery of Org sources and attachments.
- Explicit Org-ID-based reference repair after file or heading moves, with duplicate-ID reporting.
- Reverse lookup of boards referencing a heading.
- Safe refresh after external source changes, without overwriting unsaved Org edits.
- Existing boards retain their saved vault roots.
Static media cards
Add PDF first-page previews, image thumbnails, video thumbnails, and audio artwork or fallback icons. Double-click a file card to open the original in another Emacs window.
Poppler and FFmpeg are optional preview helpers. These cards deliberately do not provide in-card playback, media editing, or PDF navigation. Files remain linked rather than embedded in board documents.
Format and scope
Boards remain .excalidraw documents with versioned board metadata, not JSON Canvas files. Rich Org rendering and live references are excali-board features; ordinary drawings remain independent of the optional board mode.
Excali DSL remains one-way: .excalidsl → .excalidraw. This release does not introduce DSL/scene bidirectional synchronization.
Upgrade
- Requires an Emacs 32 build with native Canvas support and the excali native module.
- Rebuild with
makeand restart Emacs: the native module has changed. - Configure
excali-board-vaultsbefore creating boards. This is the single configuration entry point for both single- and multi-vault setups. - Source release: build the platform-specific native module locally.
Configuration and usage · Changelog
Validation
All 506 ERT tests pass against an isolated snapshot of the release contents. The native module builds successfully, and Lisp byte-compilation passes with warnings treated as errors.
excali-mode 0.2.0 — Excali DSL and Org Babel
Excali DSL and Org Babel
This release introduces Excali DSL (.excalidsl), a text authoring language designed for excali-mode, and ob-excali for diagrams inside Org documents.
45-second feature demo
Watch / download the demo — 1080p, 30 fps, English captions, no audio.
The real Emacs recording demonstrates explicit relative node placement, blue fill and dashed-outline styling, and the same styled diagram being generated and updated inside Org Babel. The DSL computes coordinates from your placement rules rather than leaving the arrangement entirely to automatic layout.
Breaking: a new DSL
The former .edsl / excalidraw-dsl grammar has been replaced. Renaming a file alone is not a migration: rewrite its content using the new syntax.
node system "Application"
node system.ui "Interface"
node system.api "API" below system.ui
node database "Database" right of system level with system.api
edge system.ui -> system.api "request" from: bottom to: top
edge system.api -> database "query" from: right to: left
- Explicit
nodeandedgedeclarations; dotted identifiers define containers. - Readable relative placement, including cross-container alignment.
- Appearance in separate
{ ... }blocks, reusable styles, and node/edge defaults. - Joint position/container-size solving with measured text and explicit arrow ports.
- Native editable scenes with bound arrows and labels, deterministic sketch seeds, source-located diagnostics, and atomic scene export.
New: Org Babel
Enable (excali . t) through org-babel-do-load-languages, preserving your other enabled languages. The package directory must be on load-path.
#+begin_src excali :file diagrams/demo.svg :mkdirp yes :results file graphics
node source "Source" { fill: "#dbeafe" }
node result "Result" right of source { fill: "#dcfce7" }
edge source -> result "render"
#+end_src
C-c C-cin Org executes the block and inserts a result file link.C-c 'opens the source in Excali DSL mode.:fileselects SVG, PNG, or editable.excalidrawoutput.- Supports Babel execution directories, directory creation, and standard confirmation /
:evalcontrols. - Failed parsing, layout, or rendering preserves the previous output file and result link.
- No interactive canvas or external rendering process is required; the native excali module is still required.
Fixed
- Direct DSL preview now loads the canvas entry points when the mode was autoloaded independently.
- Preview associations stay in the source buffer, so repeated
C-c C-crefreshes the same canvas. - Installation documentation now includes complete deferred-loading configuration, extension distinctions, and troubleshooting.
Upgrade and try it
- Run
makeafter updating, then restart Emacs or reload the changed libraries.makeregenerates byte-compiled Lisp files. - Associate
.excalidsl, not.excalidraw, withexcali-dsl-mode. Open JSON scenes withM-x excali-open. - Canvas edits do not update DSL source; regenerating a scene replaces manual edits.
- Org sessions,
:varsubstitution, command-line hooks, and automatic execution are not included in this release.
Configuration and usage · Language reference · Org example
Validation
All 368 ERT tests pass against an isolated snapshot of the release contents, including DSL and Babel cold-start tests, native image export, source editing, result links, and failure protection.
Source release; build the platform-specific native module locally as described in the README.
excali-mode 0.1.1
Breaking
- Everything is named
excalinow, notexcal: files (excali.el,
excali-*.el), commands (excali-open,excali-new), the major mode
(excali-mode), options and the module (excali-module). The
repository moved fromexcal-modetoexcali-mode; the old address
redirects. makebyte-compiles the Lisp as well as building the module. Run it
again after pulling: loaded from uncompiled.elfiles, excali runs
several times slower.
New
- Drawing from text: the
.edsllanguage of excalidraw-dsl.
excali-dsl-modefor.edslfiles,C-c C-cdraws the buffer in a
scene beside it (again: refreshes it),excali-dsl-yankand
excali-dsl-insert-fileadd a diagram to the current scene, and
excali-dsl-elementsand friends make diagrams from Lisp. Layout is
automatic and layered; arrows and labels are bound, so the drawing
stays editable. - The official library collection of libraries.excalidraw.com, from
Emacs:C-c l olists it,RETpreviews a library in place of the
list (qgoes back),+adds the item at point andaa whole
library. Items the personal library holds are marked, added ones
light up, and the list marks libraries wholly added. - Library items can be deleted:
din the library browser (C-c l b),
orC-c l dby name. - One scene in several windows, each with its own zoom and scroll;
editing in one redraws the others. - The style panel (
s) follows upstream's properties panel: its
properties in its order and words, only those the selection or tool
takes, then layers, align and actions. Each property opens a panel
of its values; colors open a picker like upstream's, with the fifteen
colors onq..b, the shades of the current color on1..5
and#for a hex code. - Pointer shapes over handles, elements, links and line points, shown
through the canvas image's hot spots so Emacs switches them itself. - Dragging with the right button pans, like the middle one; shift with
a vertical wheel pans sideways.
Fixed
- Wheel panning goes the way Emacs scrolls a buffer on every system and
honorsmouse-wheel-flip-direction. Sideways panning was reversed on
Windows and Linux, and a tilted wheel on Windows panned vertically.
Faster
- Large scenes stay responsive. With 2846 elements: dragging 300 of
them went from 163 ms a frame to 9, a hit test from 30 ms to 1.4, and
rebuilding pointer hot spots after a command from 160 ms to 2. The
module keeps the elements it has read, a render repaints only what
changed, and hot spots are built around the mouse. - Library thumbnails are cached on disk and drawn in the background,
those in view first: a library of 249 icons opens in about 30 ms
instead of blocking for a second.