I've been building a JavaScript framework called Voodoo.js, and I'd rather get torn apart in the comments than hear that it looks cool.
How much JavaScript do we actually need to write for everyday interactive interfaces?
For a lot of apps I don't want to build a component tree, configure a bundler, install five libraries, wrap the API, manage state somewhere else, and then wire it all back into HTML.
Voodoo observes the real DOM and connects HTML directives to a fine-grained reactive system built on Proxy.
Voodoo isn't trying to replace React, Vue or Svelte. The target is different: projects where the server already renders the HTML.
Laravel, Django, Rails, PHP, ASP.NET, Node, Go templates — plus small frontends where a full SPA is overkill.
Philosophically it lives somewhere near Alpine.js, HTMX and petite-vue. The difference I was chasing: HTTP, forms, validation, state, components, routing, UI helpers and reactivity should feel like one system, not five glued together.
The goal isn't to make JavaScript disappear. It's to stop writing JavaScript that only restates what the HTML already says.
For most CRUD screens, that's the whole thing. When you need more, plain JavaScript is still right there. Voodoo is meant to be progressive, not restrictive.
The lazy implementation is new Function(expression) or eval(expression). Voodoo does neither.
Expressions are parsed and interpreted by Voodoo itself. That gives the framework control over which syntax is supported and what the expression environment can touch — and honestly it's the most interesting engineering in the project.
The reactive layer uses Proxy, tracking dependencies per object and per property:
Both audiences matter to me: the "paste a script tag" crowd and the "give me proper ESM" crowd.
The backend keeps rendering the app. Voodoo adds the interactive layer. No separate frontend application.
What began as an experiment grew into a large framework: reactivity, directives, components, stores, HTTP, forms, validation, persistence, routing, i18n, UI utilities, animation, drag and drop, charts, streaming, devtools, and a CLI.
That growth is now the problem. The project doesn't need another hundred features — it needs stability.
Current focus: 🔒 Security hardening 🧩 Parser edge cases ✅ Test coverage 📐 API stability 📦 Bundle modularity ⚡ Performance benchmarks 📚 Documentation 🚀 Package and release quality
I'd rather ship a small set of features people can trust in production than a huge one nobody can.
