We’re live on Product Hunt.

Commit

27c8ef4

So, WildflowerJS has a core reactive model that applies to components, stores, plugins, and their derivatives. Each may have their own features, but the core state reactivity is consistent. You learn it once and you're done. For example:
// Component: reactive UI
wildflower.component('cart', {
  state: { items: [] },
  computed: {
    total() { return this.items.length; }
  }
})

// Store: global shared state
wildflower.store('user', {
  state: { name: '', role: 'guest' },
  computed: {
    isAdmin() { return this.role === 'admin'; }
  }
})

// Plugin: extends the framework
wildflower.plugin({
  name: 'notifications',
  state: { items: [], unreadCount: 0 },
  computed: {
    hasUnread() { return this.unreadCount > 0; }
  },
  add(msg) { this.items.push(msg); this.unreadCount++; }
})
// Access globally: wildflower.$notifications.add(...)

// Thread: a store that runs in a Web Worker
wildflower.thread('orders', {
  state: { rows: [], params: { q: '' } },
  computed: {
    hits() { return this.rows.filter(r => r.name.includes(this.params.q)); }
  }
})

// Trillium view: a three.js scene that is a store
wildflower.three.view('globe', { renderer, scene, camera })
// Bind it like any store: data-bind="$globe.selected.entity.name"
What do you think?

commit 27c8ef4