01 · Measured
On the official board
WildflowerJS debuted strongly on the official Krausest js-framework-benchmark with the Chrome 152 run released September 1, 2026. The results below were all run on the maintainer's hardware.
new Function, which the board flags as an issue. That path is a little slower, and the numbers above include the cost.
Weighted geometric mean slowdown, Chrome 152 · lower is better
Every operation, duration in ms · creating 1,000 rows · lower is better
02 · New Feature
Queries write back
Since 1.3, a query declares where data comes from and keeps it fresh. In 1.5 it declares where data goes. Add to: and the same query sends changes. They land on screen immediately, the server confirms them, and a rejection rolls them back field-by-field.
The write surface is one method
write(item) is the entire write surface. The row updates before the request leaves, isStale reports until the server confirms, and a rejection reverts only the fields the failed write still owns, so overlapping edits fail independently.
A returned record applies as server truth. A temporary id corrects in place with no flicker. Loading flags, races, and rollback bookkeeping are the framework's problem now.
wildflower.query('tasks', {
from: '/api/tasks',
key: 'id',
to: '/api/tasks/:id', // where write() sends changes
body: item => item, // what to send
confirmation: data => data // the reply applies as server truth
});
// in a component action:
this.$tasks.write({ id: 7, done: true });
// on screen now, rolled back if the server says no
Live, against a simulated server with 400 ms latency. Flip the rejection switch and watch a write roll itself back.
03 · New Feature
Computeds go async
A computed property may now return a promise. Same computed: block, same data-bind, same dependency tracking. Bindings keep the last settled value while a new one is in flight and update when it lands.
computed: {
async user() {
const r = await fetch('/api/users/' + this.userId);
return r.json();
}
}
// <h1 data-bind="user.name"></h1> and that's it
No new syntax to learn
Change a dependency and the request relaunches. A superseded request is discarded whole, so a slow response never overwrites a fast one. Errors route to the component's onError like any other computed failure.
Live. Pick the slow profile, then the fast one before it lands: the late response is discarded and the card never goes backwards.
04 · New tier
mini-pool: the games build
Entity pools are WildflowerJS's per-frame rendering primitive, built for simulations, games, and visualizations with thousands of moving entities. The new mini-pool tier ships pools without the list cluster: 55 KB compressed, the whole framework underneath.
nano50.5 KBmini-pool55.0 KBmini73.8 KBlite78.0 KBstandard81.6 KBspa86.1 KBfull98.7 KBThere are seven tiers now, and every one is a single file with state, computeds, components, stores, and forms inside. Pick by the rendering primitives you need.