Framework Comparison
Where WildflowerJS sits in the landscape of front-end tools, and what you gain (and don't lose) by choosing it.
Feature Matrix
A side-by-side look at capability coverage across five popular approaches to building interactive web UIs.
| Feature | WildflowerJS | Vue | React | Svelte | Solid |
|---|---|---|---|---|---|
| No build step required | Yes | Optional | No | No | Optional (loses JSX) |
| Full reactivity system | Yes | Yes | Yes | Yes | Yes |
| SPA routing | Built-in | Plugin (Vue Router) | Plugin (React Router) | Plugin (SvelteKit) | Plugin (Solid Router) |
| Fine-grained DOM updates | Yes | No (VDOM) | No (VDOM) | Yes (compiled) | Yes (signals) |
| Large application capable | Yes | Yes | Yes | Yes | Yes |
| Standards-based (plain HTML/JS/CSS) | Yes | No (SFC, template DSL) | No (JSX, build required) | No (.svelte, compiler) | No (JSX, compiler) |
| Third-party library friendly | Yes | Mostly | Careful | Mostly | Yes |
| Web component interop | Yes | Mostly | Partial | Yes | Yes |
| SSR / progressive enhancement | Yes | Yes | Yes | Yes (SvelteKit) | Yes (Solid Start) |
| Component state | Built-in | Built-in (ref/reactive) | Built-in (useState) | Built-in ($state) | Built-in (signals) |
| Global stores | Built-in | Plugin (Pinia) | External (Redux, Zustand) | Built-in (Svelte stores) | Built-in (createStore) |
| Computed properties | Built-in (cached) | Built-in (cached) | useMemo | $derived (compiled) | createMemo (cached) |
| Component system | Full | Full | Full | Full | Full |
| Dual list rendering modes (reactive + lightweight) | Yes (data-list + data-pool) | No | No | No | No |
| Transitions / animations | Built-in | Built-in | External (Framer Motion, etc.) | Built-in | External (solid-transition-group) |
| Portals | Built-in | Built-in | Built-in | No | Built-in |
| TypeScript support | Type definitions | Full | Full | Full | Full |
Key Comparisons
vs Solid
Solid and WildflowerJS share the same core idea: fine-grained reactivity that updates the DOM precisely, without a virtual DOM. Solid achieves this through compiled JSX and signals; WildflowerJS achieves it at runtime with standard HTML and data-* attributes. Both deliver excellent performance. The key difference is authoring model: Solid typically requires a build step and JSX compiler (it can run buildless via tagged templates, but that’s not the standard path). WildflowerJS works with a single <script> tag and plain HTML.
vs Svelte
Svelte and WildflowerJS both achieve fine-grained DOM updates without a virtual DOM. The key difference: Svelte requires a compiler that transforms .svelte files into JavaScript at build time. WildflowerJS achieves the same precision at runtime with standard HTML and JavaScript. No compilation step, no custom file format, no build toolchain required.
vs Vue / React
Vue and React provide the same categories of capability that WildflowerJS does: reactivity, components, stores, routing, SSR. The difference is delivery mechanism, not feature set. WildflowerJS delivers those capabilities without a build toolchain, without a virtual DOM, and without framework-specific file formats. You write standard HTML and standard JavaScript, include a script tag, and the framework binds to your markup via data-* attributes.
Two Reactivity Modes (Unique to WildflowerJS)
Every framework on this list has one rendering mode for collections: the reactive one. Whether it's Vue's v-for, React's .map(), Solid's <For>, or Svelte's {#each}, every list item gets the full reactive treatment — proxies, dependency tracking, change detection — whether it needs it or not.
WildflowerJS offers two: data-list for automatic reactivity, and data-pool for explicit control with zero proxy overhead. Same template syntax, different performance profile. Pools handle full CRUD, selection, and bulk operations, all faster than the push-reactive path. They also scale to real-time data, large datasets, and per-frame animation.
No other framework provides this choice for collections. The closest alternatives are manual escape hatches: React's useRef + requestAnimationFrame, Vue's toRaw() + shallowRef(), or dropping to canvas/WebGL. WildflowerJS makes it a first-class, declarative feature with the same binding syntax developers already know.
Positioning Summary
If you need a framework that:
- Works with a single
<script>tag, with no npm, no Webpack, and no Vite - Uses valid HTML that any editor, any server, and any CDN can handle
- Plays nicely with jQuery, D3, Chart.js, and other third-party libraries (no VDOM conflicts)
- Scales from a single interactive widget to a full single-page application
- Provides fine-grained DOM updates without diffing a virtual tree
- Offers two list rendering modes — full reactivity or lightweight pools — so collections don't pay for overhead they don't need
Then WildflowerJS is worth evaluating. Start with the Installation page or jump straight to the Quick Start Tutorial.