Skip to content
JackVinati edited this page Oct 19, 2026 · 6 revisions

The current version is 0.2.3, released on 19 October 2026. It frames a diagram with clipping in it, such as a pgfplots curve that runs past its axis, by what shows, where 0.2.2 left a large empty space above or below it. 0.2.2 put the plugin's settings in Obsidian's settings search, and 0.2.1 shortened the wait before a new diagram appears and brought labels in Chinese, Greek, Cyrillic and other scripts. What changed in it, and in every release before it, is in the changelog.

A timeline from 1 September to 19 October 2026: four dots in the first two days, then one dot on 12 October, two on 13 October, one on 15 October, one on 16 October and one on 19 October

The first four releases came out within two days of each other. 0.1.1 to 0.1.3 were about getting the plugin to load and install on iPhone and to build cleanly for the community store. I submitted it to the store on 1 September, and 0.1.3 passed the store's automated review. Then there was no release for six weeks. 0.1.4 and 0.1.5 are the first rounds of fixes since. 0.2.0 came out the same day as 0.1.5 and rebuilt the TeX engine. 0.2.1 came out on 15 October, after six betas through BRAT. The store's automated review of 0.2.1 did not complete, and until a release's review does, the store leaves the plugin out of its list; 0.2.2 followed the next day, a new release for it to review, with the changes its warnings asked for. 0.2.3 came three days later, for a report in Discussions: a pgfplots curve that ran past its axis was framed whole, with a large empty space where it was clipped. The figures, and what comes next, are on the Roadmap.

Where it runs

Platform State
Desktop Works on Windows, which is what I use. macOS and Linux run the same code, and a report from either is welcome.
iPhone and iPad Works: the engine compiles and diagrams render on the device, as checked on an iPhone (below). It is slower than on a desktop, and the first diagram that is not in the cache is the slowest, because it starts the engine.
Android Not tried yet. A report either way is welcome, in Q&A or as an issue.
Obsidian 1.7.2 or later, on every platform.

My iPhone is an iPhone 16 Pro on iOS 27.0.1, with Obsidian 1.14.5. On it I have checked that 0.1.5 and 0.2.0 load and render and that Settings opens, and with 0.1.5 that switching away from the app halfway through a compile works (the diagram finishes when you come back, instead of failing with a timeout). 0.2.1's betas, from beta.2 to beta.4, load and render on it too, and the diagnostics view's Copy button copies its text. Every phone figure on these pages is read off that view. With 0.2.0, on 14 October 2026, the engine started in 134 ms and a circuitikz diagram took 0.27 s of TeX; with Lockdown Mode on, 1.3 s and 7.3 s. 0.2.1's own figures from the phone are still to be read, and will go on the Roadmap. The iPad runs the same build; I have not checked it separately. I have not yet tried a note with twenty diagrams that are not cached, or a PDF export, on the phone. If something gives out on a phone, an issue with the device, the iOS version and the text the diagnostics view's Copy button gives helps more than anything else; the README explains how to get it.

If diagrams are very slow on an iPhone or iPad, the likeliest cause is Lockdown Mode, which runs TeX without the JIT compiler, twenty to thirty times slower. Since 0.2.1 the diagnostics view says whether TeX seems to run with the JIT, and the README says how to exclude Obsidian from Lockdown Mode.

What it can draw

The engine is e-TeX with a LaTeX format, built from TeX Live 2023 (the packages in Ubuntu 24.04): pgf/TikZ 3.1.10, pgfplots 1.18.1, circuitikz 1.6.6, chemfig 1.66, siunitx 3.3.10, tikz-cd, forest, mathtools, xparse and the expl3 layer, with about a hundred TikZ and pgfplots libraries. The full list is in the README, under What is bundled. Accented letters work as typed (most of them, Łódź and Grüße included), and so do ° × ± µ → £ € © ® and siunitx's units. Since 0.2.0, ~ is a non-breaking space, as in LaTeX, accented letters also work where LaTeX makes a name of them (node, coordinate and style names, \label keys), and pgfplotstable loads.

Since 0.2.1, labels in Chinese, Japanese, Korean, Greek, Cyrillic, Arabic, Hebrew, Thai, Devanagari, IPA and emoji are drawn, and so are ¥ ¢ ‰ ½ № typed in a label. The engine has no fonts for them, so TeX sets each character as a box one em wide and the plugin writes the character over it in your system's sans-serif font; in a text width node Chinese and Japanese wrap between characters. RepentStar contributed this, in pull request #2.

What does not work yet

What Why When
\mathfrak, \mathscr TeX compiles them, and then the diagram fails: the converter that turns TeX's output into SVG has a fixed font table, without the Euler or rsfs fonts. No plan yet; in the Ideas thread for votes
The patterns library Draws nothing. The driver writes a reference to the pattern but not the pattern itself. No plan yet
chemfig's \schemestart Loses its bonds. They are already missing in TeX's output, before any JavaScript runs. No plan yet
tikz-feynman, contourlua, external Need LuaTeX, or need to run other programs, and this engine can do neither. tikz-feynhand is bundled and works instead of tikz-feynman. Not possible with this engine
Text in other scripts is not Computer Modern Chinese, Greek, Cyrillic and the rest are drawn in your system's sans-serif, one em for each character, without bold or italic, and full size in a sub- or superscript. In a copied or saved SVG another program draws them in its own sans-serif. Greek letters in math ($\alpha$) are Computer Modern's as before. The README lists the rest. Only a Unicode engine with fonts for these scripts would change it; no plan
\textyen, \textperthousand, \textcircled They come from a text font the SVG converter cannot draw, and the diagram fails. Typed as ¥ ‰, the characters are drawn in sans-serif. No plan yet
Ł and ł in typewriter type Show a ␣ where the stroke should be, because that font has one in its place. No plan yet
Finalize, on a block with %% in the TeX Obsidian ends a %% comment at the next %%, so after finalizing, the rest of that diagram's TeX shows as text in Reading view, and the rest of the note ends up inside a code block. Un-finalize gives the source back. Open
Obsidian Sync Standard Does not sync main.js: it is about 12.2 MB, and that plan syncs files up to 5 MB. Installing the plugin on each device from the community browser works. Since 0.2.1 a device where Sync left an old main.js beside a new manifest.json says so. Smaller in 0.3.0, still over 5 MB
Obsidian Publish Publish runs no community plugins. Finalize the note, or save the diagram as an SVG, and it publishes as ordinary content. Not possible from a plugin

Most of main.js is the TeX engine, so its size hardly moves from one release to the next: 0.2.0's is about 12.2 MB, a little less than 0.1.5's, and 0.2.1's about the same again. It should shrink with TeX Live 2026 in 0.3.0, to about 8.3 MB by an estimate from a test build, still above the Sync Standard limit.

Three horizontal bars: about 12.3 MB for 0.1.0 to 0.1.5, about 12.2 MB for 0.2.0, and a dashed outline of about 8.3 MB for 0.3.0; a line at 5 MB crosses all three

How it is tested and released

Every push to main and every pull request runs the same checks, and so does every release: over 1,400 unit tests, the community store's lint rules, type checks with two versions of TypeScript, a check that the code makes no network requests, and all 44 TeX test diagrams run through the real engine, each of which has to come out byte for byte as recorded. Since 0.2.1, every test diagram, and 33 cases written to break saved preambles, must also come out byte for byte the same when it starts from a saved preamble, kept in memory or read back from storage, as when it is drawn from the start. The build also refuses any syntax that older iOS Safari cannot parse. That one matters: in 0.1.0, a single regular expression that Safari before 16.4 rejects was enough to stop the whole plugin from loading on those iPhones. For the same reason, a test checks that the engine uses nothing newer than WebAssembly 1.0.

Releases are reproducible. Building the tagged commit on any machine gives the same main.js, byte for byte, and the community store checks exactly that. The release workflow runs all of CI again on the tag, publishes the files with build provenance attestations, and puts that version's changelog section at the top of the release notes. The TeX engine is built in a container from pinned upstream sources, and CI rebuilds it and compares it with the copy in the repository.

What is not automated is a real phone. The checks on an iPhone are done by hand, and the ones listed above under "Where it runs" are still to do.

Clone this wiki locally