I spent more time fighting React than shipping features, so I stitched together a tiny 350-line thing I call "pfusch".

pfusch [pfʊʃ] is Austrian slang word refering to work that is done carelessly, unprofessionally, or without proper skill, resulting in poor quality or subpar results. And my god, was it done carelessly.

But: No build step, no Vite/Nextjs/WASM/webpack/insert-the-one-millionst-way-to-open-a-website matryoshka, just pfusch('my-widget', {}, () => [html.div('hi')]); and it works. Tests look like pfuschTest('my-widget').flush(). no virtual DOM sermon, no hooks brain gymnastics.

Features:

- Declarative components without JSX or a babel pipeline or anything but a browser. - Tiny API surface: pfusch(name, state, renderFn) and a little test helper. - DOM-first, uses modern browser features instead of reinventing them. - Runs in 2025 browsers with zero deps. Because browsers are really huge, let's stop downloading more, shall we?

Code is here: https://github.com/MatthiasKainer/pfusch/

If you’re happy with your 800KB bundle and dependency roulette, keep scrolling. If you want to build a widget in the time it takes React to finish npm install, kick the tires and tell me what breaks.