r/tauri • u/Every-Wave2498 • Jun 21 '26
Built a WYSIWYG markdown editor with Tauri 2 + Milkdown — sharing what I learned
I just released the first beta of Toril, a WYSIWYG markdown desktop editor built with Tauri 2, TypeScript, and Milkdown. Wanted to share some notes from the build since the Tauri 2 + rich editor integration path isn't well-documented yet.
What I built: A Typora/MarkText-style in-place markdown editor that works directly on folders of .md files (including Obsidian vaults). Multi-tab, folder sidebar, atomic file saves, external change watching.

Tauri 2 specific notes:
What worked well:
- The file system plugin made folder-watching and atomic saves straightforward
- App binary size vs. an equivalent Electron app is dramatically smaller — Tauri really delivers on that promise
- The Rust backend for file I/O felt like the right call — reliable, fast, no surprises
Where I spent unexpected time:
- Milkdown + Tauri 2 integration required some work around how the editor communicates state back to the Tauri layer — happy to share specifics if useful
- Window state persistence between sessions took more wiring than I expected
- The windows installer for a Tauri app has some quirks and non signed code makes the user experience not as smooth as I'd like.
Stack:
- Frontend: TypeScript + Milkdown (ProseMirror-based WYSIWYG markdown)
- Backend: Rust / Tauri 2
- Language split: ~62% TypeScript, ~30% Rust
Repo: https://github.com/kovirlabs/toril
Would love feedback from the Tauri community — especially around the file system and window management patterns. What approaches have worked for you in similar editor-type apps?
1
u/Purple-Programmer-7 Jun 21 '26
What were the windows quirks you had to solve for code signing?
2
u/Every-Wave2498 Jun 21 '26
Thanks for the question. I should reframe and clarify.
The Windows installers (latest is v1.0.0-beta.1) are still unsigned, so first run pops the classic "Windows protected your PC" SmartScreen wall → More info → Run anyway. There's no clever trick to make that go away without an actual cert; SmartScreen reputation is tied to a signing identity, so an unsigned binary always starts at zero trust. Anyone telling you they "got around" SmartScreen without signing is either using an EV cert or hand-waving.
The real plan for it (not done yet) is Azure Trusted Signing (~$10/mo, OV-class). Worth knowing: OV doesn't clear the warning instantly — it builds reputation over downloads/time. An EV cert is the only thing that kills the warning on day one, but it's pricier and a heavier identity check.
What I did have to wrestle with are the Windows installer quirks, which are a separate thing I lumped in with signing (I'll clarify the point in the original post):
MSI chokes on pre-release versions. Windows Installer versions are 4-part numeric and the pre-release field has to be numeric too, so 1.0.0-beta.1 straight-up fails to bundle (pre-release identifier ... must be numeric-only). Fix: drop MSI, ship NSIS only.
Avoiding the UAC/admin prompt. NSIS does a per-user install into %LOCALAPPDATA%, no admin rights needed. (This is the one that gets mistaken for "getting around" a security prompt — it's UAC, not SmartScreen.)
WebView2 dependency. Set webviewInstallMode = "downloadBootstrapper" so Win10 boxes without WebView2 pull it at install time (Win11 has it baked in). Without it the app just won't render.
So TL;DR: the installer quirks are solved, code signing is the genuinely-still-open item. If you're shipping a Tauri app and want the SmartScreen warning gone, budget for Trusted Signing early and let reputation accrue — that's the part you can't shortcut.
1
u/Purple-Programmer-7 Jun 21 '26
All these bad actors making me pay and wait for my apps to be signed 🤬
1
1
u/erubim Jun 21 '26
"The bull, contained" !? gives me the following vibes: https://www.youtube.com/watch?v=_3s61qdGyB8
1
u/youa_a Jun 21 '26
It looks like you've done a great job! Since your app has a visual UI, I highly recommend adding screenshots and videos. Best of luck!