Why WildflowerJS?
A framework that trusts the browser instead of fighting it. No build step, no transitive dependencies, no lock-in.
The Problem with Modern Frameworks
Today's popular JavaScript frameworks have made web development more complex than it needs to be:
Build Step Required
JSX, TypeScript, Vue SFCs, Svelte components: none of these work in a browser without compilation. You can't just open an HTML file and start coding.
Framework-Specific Syntax
Every framework invents its own way of doing things. Learning React doesn't help you learn Vue. Skills don't transfer.
Library Wrapper Tax
Want to use a datepicker? You need react-datepicker. A chart library? Install vue-chartjs. Every third-party library requires a framework-specific wrapper.
Supply Chain Surface
A modern React or Vue project installs 300+ transitive packages from many maintainers, each one a potential intrusion vector. Your toolchain is now an attack surface.
The WildflowerJS Approach
WildflowerJS takes a different path. Instead of abstracting away the browser, we work with it.
Standard HTML
Your HTML is real HTML. Open it in any editor or browser. No template language, no compilation step. Just HTML with data attributes.
<div data-component="counter">
<span data-bind="count">0</span>
<button data-action="increment">+</button>
</div>
Standard JavaScript
Components are plain JavaScript objects, with no class decorators or preprocessor required. Any JavaScript developer can read this:
wildflower.component('counter', {
state: { count: 0 },
increment() { this.count++; }
});
Native Library Integration
Use any JavaScript library directly without wrappers. Chart.js, Flatpickr, DataTables, or anything that works with the DOM works with WildflowerJS.
No Build Step
Add a script tag and start coding. No webpack or vite, no configuration files. Works for prototypes and production alike.
<script src="wildflower.min.js"></script>
<!-- That's it. Start building. -->
AI-Friendly by Construction
LLMs like Claude, Gemini, and GPT are excellent at HTML, CSS, and JavaScript because those make up most of their training corpus. Framework-specific syntax is a thinner slice. WildflowerJS code is what AI generates cleanly without translation, and what humans can debug without sourcemaps.
TypeScript Where It Counts
Type-safe state, computed properties, and stores ship with the framework. Your existing TS skills transfer directly. The runtime types validator catches binding-shape drift in dev. Template-level type-checking for data-bind expressions is on the roadmap.
Zero Install. Zero Attack Surface.
Every dependency you install is trust extended to a maintainer you've never met, running scripts on your dev machine and in your CI. A typical React + Vite + UI-lib setup pulls in 300+ transitive packages before you write a feature.
Each one is a potential intrusion vector. NPM worms, OAuth chains compromising deploy platforms, postinstall hijacking: the supply chain is now where production code gets compromised, not the deploy.
WildflowerJS users don't have this attack surface, by construction. There is no npm install, no postinstall script, no transitive package graph. The framework is one file you copy or pin by hash.
Zero dependencies is the absence of a problem the rest of the industry has not properly addressed.
Performance Without Compromise
By working with the browser instead of abstracting it away, WildflowerJS achieves excellent performance across the board, from bulk list operations to fine-grained reactive updates.
Direct DOM Updates
No virtual DOM diffing overhead. State changes go straight to the elements that need updating. The browser handles the rest with decades of optimization.
Small Footprint
The full framework ships as a single bundle that includes stores, routing, and SSR. No additional state management library required.
Where WildflowerJS Shines
WildflowerJS is built for reactive web development at any scale. From prototypes to production, solo builders to large teams, the framework's design and performance hold up. Some scenarios it's particularly well-suited to:
Project Types
- Customer-facing SaaS, internal tools, dashboards
- Embedded widgets and interactive components
- Documentation sites with live examples
- Anywhere bundle size and load time matter
Team Priorities
- Shipping product over configuring tooling
- Supply-chain risk treated as a real concern
- AI-assisted code generation that runs as written
- Skills that transfer when frameworks change
The Philosophy
Trust the Platform
Browsers have billions of hours of optimization behind them. The DOM isn't slow; inefficient abstractions are. We work with browser APIs, not against them.
Separation of Concerns
HTML describes structure. CSS describes presentation. JavaScript describes behavior. They work together but stay separate. This isn't old-fashioned; it's sustainable.
Progressive Enhancement
Your HTML works without JavaScript. The framework enhances it. This isn't just about accessibility; it's about resilience.
No Magic
When you read WildflowerJS code, you understand what it does. No transpilation obscures the intent, no build step transforms your logic. What you write is what runs.
How Updates Work
When state changes in WildflowerJS, updates flow directly to the DOM:
There's no intermediate representation, no tree diffing, no reconciliation phase. The framework knows exactly which element displays count, and updates it directly.
Element-Level Precision
Each binding tracks its own dependencies. When count changes:
- Only elements bound to
countupdate - Other bindings don't re-evaluate
- No parent components re-render
- No children are touched
This granularity comes from the context system. Each data-bind, data-show, or data-list has its own context that knows exactly what it depends on and what DOM element it controls.
State Without Ceremony
State in WildflowerJS is just a JavaScript object. No special wrappers, no access patterns to memorize:
// Define state
state: {
count: 0,
user: { name: 'Alice', score: 100 }
}
// Update state by assigning
this.count++
this.user.name = 'Bob'
this.user = { name: 'Charlie', score: 200 }
// All of these trigger reactive updates automatically
Nested properties, array mutations, and complete replacements all work the same way. The reactivity system handles it.
Ready to Try It?
The quickest way to start is with a single script tag:
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/wildflowerjs@1/dist/wildflower.min.js"></script>
</head>
<body>
<div data-component="hello">
<p>Hello, <span data-bind="name">World</span>!</p>
<input data-model="name" placeholder="Enter your name">
</div>
<script>
wildflower.component('hello', {
state: { name: 'World' }
});
</script>
</body>
</html>
That's a complete, reactive application. No build step or configuration; just HTML and JavaScript working together.