Michael Aufreiter
banner
michaelaufreiter.com
Michael Aufreiter
@michaelaufreiter.com
Worked on svedit.dev all summer! Now building editable.website v2 on top of it.

My homepage joined a social network → michaelaufreiter.com.

Previously: postowl.com and letsken.com.
With the latest commit, svedit.dev may have become the first editor that handles ALL inputs before they modify the DOM (no more DOM reconciliation needed - BIG STEP!)

(few workarounds were needed, which I hope can be removed over time — see github.com/michael/web-...)
November 7, 2025 at 10:59 PM
TIL you actually *can* cancel character composition input events.

function oncompositionstart() {
// aborts the IME, that was about to start;
window.getSelection().removeAllRanges();
}

* works in all browsers; this way i can prevent the situation where Svedit gets destroyed.

🥳
October 30, 2025 at 3:18 PM
Is there way I can follow *every* Svelte person in the Bluesky? :D
October 29, 2025 at 4:34 PM
This week is dedicated to documenting and reproducing browser bugs, related to contenteditable et. al.

Issues: github.com/michael/web-...
Repros: github.com/michael/web-...
October 27, 2025 at 4:32 PM
There's a future in which you can ditch the CMS and develop and edit (!) websites and apps *all in Svelte*.

Sneak peek into editable.website v2, powered by svedit.dev.

Full video on Youtube: youtube.com/watch?v=o4kc...
October 27, 2025 at 3:59 PM
Tell me what I'm missing, but I don't understand why types in JavaScript needed a new syntax. JSDoc comments should have been the way. No compile step needed to run a program. Lets you copy and paste a snippet of code and run it in the browser console, etc.

Why we needed .ts?
October 25, 2025 at 6:21 PM
Will be chatting with @paolo.ricciuti.me later today (~4:30pm), and give a short demo on what's new for svedit.dev.

See you there! :)
Later today @paolo.ricciuti.me and @michaelaufreiter.com will join This Week in Svelte to talk about Svedit. youtube.com/live/o4kcABS...
October 24, 2025 at 12:51 PM
Browser mode testing! 🥳
Vitest 4 is out!

- Browser Mode is Stable
- Visual Regression Testing
- Improved Debugging
- Pool Stabilization
- New APIs
- Bug Fixes

Stay updated with our blog post:

vitest.dev/blog/vitest-4
Announcing Vitest 4.0
Vitest 4.0 Release Announcement
vitest.dev
October 22, 2025 at 5:21 PM
A Svedit user asked if there's support inline (uneditable/dynamic) nodes.

Well, not yet. But this morning I spent an hour or so replicating ProseMirror's Dinos example. Not done yet, but kinda works.

Convo: github.com/michael/sved...
PR: github.com/michael/sved...
October 14, 2025 at 8:01 PM
Been working on the design of a storage layer for Svedit docs. A key challenge is sharing parts (e.g. a nav) of a doc (e.g. a page) for reuse.

Svedit (the client) will always see one self-contained doc, but the server might split it up into sub-docs.
github.com/michael/sved...
October 7, 2025 at 7:32 PM
Hey @danabra.mov. Thanks for this inspiring writeup!

Got a two questions:
Shouldn't we force (encourage?) any identity to also run their own server? Only then people truly own their data, no?

What if we purposely didn't solve aggregation at all? It's the layer where people start to game the system
October 7, 2025 at 5:03 PM
I wish SvelteKit could provide/enable an idiomatic way of running stand-alone scripts that "just works" (and robustly respects-or-ignores Svelte/Kit-specific syntax).

vite-node is brittle. :(
October 6, 2025 at 2:11 PM
In Svedit I got Document.svelte.js, holding reactive state that drives the editor.

However, I want to use that Document class outside of Svelte/Kit, like in a Node.js migration script.

What options do I have?
- vite-node?
- move all $state outside of Document?
- ???
October 4, 2025 at 8:43 AM
Reposted by Michael Aufreiter
svelte.dev/packages is now live!

It's a convenient and easily discoverable place to find a sampling of high quality packages in the ecosystem. We hope it will give confidence in the Svelte ecosystem to newcomers and help them get started more easily.
Packages • Svelte
Packages for your Svelte and SvelteKit apps
svelte.dev
October 2, 2025 at 5:01 PM
Svedit 0.5.0 is out.

It's all about better copy and paste.

Try selecting and copying a couple of images in your filesystem and paste them into Svedit.

Oh and since Svedit is growing up now, it's got its own domain.

svedit.dev

Enjoy!
October 1, 2025 at 8:20 PM
You can now select and copy images from your file system and paste them into Svedit.

Depending on your cursor position it will insert the correct node type (e.g. here it creates image grid items)

Try it yourself at svedit.vercel.app
September 26, 2025 at 12:11 PM
Major improvements to copy&paste behavior coming soon to Svedit.

You can already test them at svedit.vercel.app.

If you encounter any serious bugs, let me know, so I can fix them before the 0.5.0 release.
September 24, 2025 at 7:29 PM
Anyone running node:sqlite in production yet?
September 17, 2025 at 2:46 PM
Svedit 0.4.0 introduces schema-aware text annotations.

Here’s how you can now define a custom annotation ‘highlight’. Annotations can also hold properties like any other node (see ‘link’).
September 15, 2025 at 7:47 AM
Amazing new album CHOROPHOBIA (fear of dancing) by WEVAL.

weval.lnk.to/chorophobiaAP
Weval - CHOROPHOBIA
Go to Weval - CHOROPHOBIA.
weval.lnk.to
September 11, 2025 at 10:09 AM
Character composition in iOS Safari works differently than anywhere else, hence it was still broken in Svedit 0.2.0.

However, I just pushed a fix, and now on svedit.vercel.app you should be able to type Korean/Japanese/Chinese. Finally! 🥳
September 8, 2025 at 12:07 PM
Svedit 0.3.0 is a big release focusing on stability & cross-browser compatibility.

You can now use character/word composition (IME), grapheme clusters (emojis) are properly recognized, and lots of bugs related to contenteditable have been fixed.

Demo: svedit.vercel.app
September 3, 2025 at 7:47 PM
It took me way longer than I anticipated, but Svedit 0.3.0 is about to be ready. Stability and cross-browser compatibility should improve by a factor of 10. 🤞

Really happy to finally land this, after two-week-long struggle with making contenteditable behave across browsers.
September 3, 2025 at 9:46 AM
To build an editor on top of contenteditable is like walking on eggshells. So many sneaky browser bugs, like this one in Safari 😱😱😱

svelte.dev/playground/h...
September 3, 2025 at 12:10 AM
Totally forgot that years ago I was credited for contributing to a W3C spec.

w3.org/TR/input-eve...

Now to my surprise I learn that not Safari but Chrome (!) is lacking behind on implementing it.

Means in Safari I can detect the edge case from the quoted tweet. Not in Chrome. :(
Character composition now working in the live demo.

However, when doing a longpress "a" and then confirm by pressing a number, there's no compositionstart event triggered, so I miss that.

Any idea how I can detect this character selection popup, without funky timing heuristics?
August 24, 2025 at 1:10 PM