A research companion for the Blaze renewal effort — analyzing 120+ frameworks to find what Blaze can learn from each.
| Framework | Reactivity | Components | Size | What Blaze Can Learn |
|---|---|---|---|---|
| React | Manual (useState, useEffect) | JSX + hooks | ~40KB | Excellent DevTools, ecosystem as moat |
| Vue | Proxy-based (ref, reactive), auto | SFC .vue | ~33KB | SFC, exemplary docs, progressive adoption |
| Angular | Signals + Zone.js | TS classes + templates | ~90KB+ | Batteries-included (like Meteor!), Signals API |
Key patterns for Blaze: Vue proves that HTML-first + auto reactivity + SFC is the winning DX combination. Angular proves that "all-in-one" is not a flaw. React proves that ecosystem > framework features.
| Framework | Reactivity | Components | Size | What Blaze Can Learn |
|---|---|---|---|---|
| Svelte | Compile-time (Runes: $state, $derived) | SFC .svelte | ~0 runtime | Compile-time optimizations — Spacebars already compiles! |
| Solid | Signals (createSignal, createEffect) | JSX, no re-render | ~7KB | Tracker IS already a signals system |
| Qwik | Fine-grained, lazy | JSX-like with $ boundaries | O(1) JS | Resumability: no hydration |
| Marko | Compile-time, streaming | Extended HTML templates | Tiny runtime | Philosophically closest to Blaze — HTML-first + compiler |
Critical insight: Marko is living proof that the HTML-first + compiler approach can deliver top-tier performance. Blaze and Marko share the same philosophy — but Marko has a modern compiler. That's the roadmap.
| Framework | Size | Angle | What Blaze Can Learn |
|---|---|---|---|
| Preact | 3KB | Ultra-light React-compat | A compat layer captures a segment |
| Inferno | ~9KB | Pure performance, 60fps mobile | Compat API eases migrations |
| Mithril | 8.8KB | All-in-one: routing + XHR + VDOM | Compact batteries included |
| Hyperapp | 1KB | Elm-like, purely functional | Radical minimalism |
| Framework | Current State | What Blaze Can Learn |
|---|---|---|
| Ember | Renaissance with Octane + Glimmer | Automated codemods, 6-week release cycle, stability as a feature |
| Aurelia | Aurelia 2 (rewrite) | Convention-based, respects standards |
| Riot | Niche but active | Micro-components, simple syntax |
| Knockout | Maintenance mode | The ancestor of declarative data-binding — Blaze descends from it spiritually |
| Framework | Language | What Blaze Can Learn |
|---|---|---|
| Elm | Elm (compiles to JS) | TEA architecture, zero runtime errors |
| ReasonReact / ReScript | ReScript → JS | Strong typing eliminates entire classes of bugs |
This is where competition is fiercest for Meteor + Blaze — meta-frameworks offer the "complete app" experience.
| Meta-framework | Base | SSR | Routing | What Blaze/Meteor Can Learn |
|---|---|---|---|---|
| Next.js | React | Server Components, streaming, ISR | File-based | Server Components = server sends UI, not JSON (like Meteor!) |
| Nuxt | Vue | Hybrid (SSR/SSG/SPA) | File-based auto | Auto-imports, "zero-config" DX |
| Remix | React | Streaming, progressive enhancement | Nested routes | Loaders = data fetching co-located with the route |
| SvelteKit | Svelte | Streaming, SSG, SSR | File-based | Simplicity, edge adaptation |
| Astro | Agnostic | Server-first, zero JS by default | File-based | Islands Architecture, 62% Core Web Vitals |
Key insight: Meteor + Blaze IS already a meta-framework (routing, data, auth, build, deploy). The problem isn't the concept — it's the modernity of the implementation.
| Meta-framework | Base | Unique Angle | Blaze Relevance |
|---|---|---|---|
| TanStack Start | React | Full-stack type-safe | End-to-end type-safety |
| Analog | Angular | Angular meta-framework | Even Angular needs a meta-framework |
| Qwik City | Qwik | Resumability everywhere | No hydration = instant interactive |
| Fresh | Deno + Preact | No build step, island-based | Zero-config, islands |
| RedwoodJS | React + Prisma | Full-stack JS/TS app framework | Opinionated full-stack, cells pattern |
| Enhance | Web Components | SSR Web Components | Web standards first |
| Tool | Language | Template | Blaze Relevance |
|---|---|---|---|
| Eleventy (11ty) | JS | Nunjucks, Liquid, etc. | Simplicity, data cascade |
| Gatsby | React | React + GraphQL | GraphQL data layer |
| VitePress | Vue | Markdown + Vue | Documentation sites |
| Hugo | Go | Go templates | Build speed |
| Jekyll | Ruby | Liquid | Original simplicity |
| Zola | Rust | Tera | Build performance |
What Blaze/Meteor can learn from SSGs: The ability to pre-render certain pages/routes as static. A "static export" mode for pages that don't need real-time reactivity.
This is Blaze's natural category — but Blaze needs to reposition itself here with a modern narrative.
| Framework | Approach | Size | What Blaze Can Learn |
|---|---|---|---|
| Alpine.js | Attributes in HTML (x-data, x-bind) | ~15KB | Frictionless onboarding — one script tag and you're off |
| htmx | Server returns HTML, not JSON | ~16KB gz | Server-driven partials via DDP |
| Stimulus | Controllers/targets/actions via data-* | Light | Enhancement over replacement |
| Petite Vue | Vue-like attributes | 6KB | Vue-syntax for progressive enhancement |
| Unpoly | Enhanced links/forms, layers | ~42KB | Modals, overlays, automatic fragments |
| Hotwire / Turbo | Turbo Frames + Streams | Light | Frames = replaceable page sections |
| Livewire | PHP components rendered server-side | — | The model to follow for "server-driven Blaze" |
| Phoenix LiveView | Elixir + WebSocket | — | Closest competitor to Meteor + Blaze |
| Datastar | SSE + HTML attributes | ~13KB | Hypermedia + real-time |
Pure server < ────────────────── > Pure client
htmx LiveView Livewire Stimulus Alpine Blaze Vue/React
Phoenix Laravel Rails Meteor
No client JS Server templates Attributes Reactive components
Server = truth Bidirectional WS data-* Client = truth
Blaze occupies a unique position: it's client-side BUT with a real-time server connection (DDP). It's the best of both worlds.
Blaze = the client-side reactivity of Alpine/Vue + the real-time server connection of LiveView/Livewire — without the round-trip for each interaction.
| Implementation | How It Works | What Blaze Can Learn |
|---|---|---|
| Astro Islands | Static by default, client:load to hydrate | Mark templates as static (no Tracker) |
| Marko partial hydration | Compiler detects what to hydrate | Spacebars compiler could do the same |
| Fresh Islands | Components in islands/ are hydrated | Folder convention for static/reactive |
| Enhance | SSR Web Components | Standards-based |
Opportunity for Blaze: Today every Blaze template is reactive (Tracker observes everything). A "static template" mode where the template renders once without tracking would drastically reduce overhead for static content.
Blaze/Spacebars descends directly from Handlebars/Mustache. Here's the full family:
graph TD M["Mustache (2009)
Logic-less templates, {{ }}"] H["Handlebars (2010)
Helpers, block helpers, partials"] S["Spacebars (2012)
Handlebars + Meteor reactivity"] HO["Hogan.js (Twitter)
Mustache pre-compilation"] D["Dust.js (LinkedIn)
Async, streaming"] M --> H M --> HO M --> D H --> S style S fill:#f6820c,stroke:#f6820c,color:#000
| Engine | Syntax | Logic | Async | Compiles | What Blaze Can Learn |
|---|---|---|---|---|---|
| Handlebars | {{ }} | Helpers, block helpers | No | Yes | The base of Spacebars — stay compatible |
| Mustache | {{ }} | Logic-less | No | Yes | Radical simplicity |
| Liquid | {{ }} / {% %} | Tags, filters | No | Interpreted | Filters — Spacebars doesn't have this |
| Nunjucks | {{ }} / {% %} | Rich (Jinja2-like) | Yes | Yes | Template inheritance |
| EJS | <% %> | Embedded JS | No | Yes | Simple but not HTML-first |
| Pug/Jade | Indentation | Embedded JS | No | Yes | Extreme conciseness |
| Eta | <% %> | Embedded JS | Yes | Yes | Modern, fast, TypeScript |
| Ractive | {{ }} Mustache-like | Two-way binding | No | Yes | Ractive = proto-Blaze — reactive Mustache templates |
| Marko | Extended HTML | Tags, concise syntax | Yes (streaming) | Yes | The modern successor of template-first |
| Feature | Available In | Current Spacebars | Opportunity |
|---|---|---|---|
| Filters / pipes | Liquid, Nunjucks, Twig | No | {{date | formatDate}} |
| Template inheritance | Nunjucks, Twig | No (partials only) | {{#extends "layout"}} |
| Slots / named blocks | Vue, Svelte, Nunjucks | Basic (contentBlock) | Named slots: {{#slot "header"}} |
| Async templates | Marko, Nunjucks, Eta | No | {{#await promise}}...{{/await}} |
| Spread attributes | JSX, Svelte | No | <div {{...attrs}}> |
| Inline expressions | EJS, Pug, all JSX | No (helpers only) | {{items.length}} |
| Tool | Approach | Size | What Blaze Can Learn |
|---|---|---|---|
| Lit | Tagged template literals | ~5KB | Each component = a native Custom Element |
| Stencil | Compiles to Web Components, JSX + TS | Tiny runtime | Compile Spacebars → Custom Elements |
| FAST | Microsoft, performant WC | Variable | Design system tokens |
| Hybrids | Functional Web Components | ~3KB | Functional API for WC |
| Haunted | React hooks for WC | Small | Hooks pattern on WC |
| Polymer | (historical — Google) | — | The ancestor, proved WC work in production |
| Strategy | What It Means | Difficulty | Value |
|---|---|---|---|
| A. Consume WC | Use <my-component> in Spacebars — access Shoelace, Spectrum, etc. | Low | Instant access to WC ecosystem |
| B. Produce WC | Compile Blaze templates to Custom Elements — usable in React, Vue, Angular | High | Blaze components become universal |
| C. Both | Consume AND produce — the long-term ideal | A then B | Full interoperability |
Start with A (low effort, immediate benefit), then build toward B over time. C is the natural result.
This is the heart of the matter for Blaze — Tracker is a reactive primitives system ahead of its time.
| System | Model | Granularity | Annotation | Auto-tracking |
|---|---|---|---|---|
| Tracker (Blaze) | Computation + Dependency | Fine (per reactive source) | None | Yes |
| Solid Signals | createSignal + createEffect | Fine (per signal) | createSignal() | Yes |
| Preact Signals | signal() + effect() | Fine | signal() | Yes |
| Vue Reactivity | ref() / reactive() + Proxy | Fine (per property) | ref() | Yes |
| Svelte Runes | $state + $derived + $effect | Fine (compile-time) | $state | Yes (compiled) |
| Angular Signals | signal() + computed() | Fine | signal() | Yes |
| MobX | observable + autorun | Fine (per property) | @observable | Yes |
| RxJS | Observable + operators | Stream-based | new Observable() | No (push) |
| Jotai | Atoms | Fine (per atom) | atom() | Yes |
| Knockout | Observables + computed | Fine | ko.observable() | Yes |
Tracker is UNIQUE in this landscape because it's the only one that does auto-tracking WITHOUT annotations:
// Solid — you must explicitly create a signal
const [count, setCount] = createSignal(0);
// Vue — you must wrap in ref()
const count = ref(0);
// Svelte — you need the $state rune
let count = $state(0);
// Tracker — NOTHING. Just use a ReactiveVar and it's reactive.
const count = new ReactiveVar(0);
// In a helper: return count.get(); → automatically re-executed
| Gap | What Others Have | Possible Solution |
|---|---|---|
No computed / derived | Solid, Vue, Svelte | Tracker.derived(() => a.get() + b.get()) |
| Awkward cleanup | Solid onCleanup, Vue onUnmounted | Auto-cleanup tied to template lifecycle |
| No explicit batching | Solid batch, Vue nextTick | Tracker.batch(() => { ... }) |
| Hard to debug | Vue DevTools, Solid DevTools | Tracker DevTools with dependency graph |
| Not SSR-friendly | All modern signals | SSR mode without tracking |
| Aspect | Blaze Today | What Others Do | Opportunity |
|---|---|---|---|
| Scoping | Global CSS | Vue/Svelte scoped styles, Shadow DOM | Scoped CSS per template |
| Co-location | CSS in separate file | SFC (template + style together) | .blaze SFC format |
| CSS-in-JS | Not natively supported | styled-components, Emotion | Not a priority |
| Utility-first | Tailwind works | Tailwind everywhere | Already compatible |
| Design systems | No official one | Material UI, Chakra, Mantine | BlazeUI (community) |
<style scoped> in an SFC format)| Framework | Golden Era | Why It Declined | Lesson for Blaze |
|---|---|---|---|
| Backbone.js | 2011-2014 | Too low-level, no data-binding | Data-binding is a must (Blaze has it) |
| AngularJS | 2012-2016 | Complete rewrite, breaking changes | NEVER break compat without a migration path |
| Knockout | 2010-2015 | No ecosystem, performance issues | Good model, bad ecosystem story |
| Polymer | 2015-2019 | Web Components too early | Standards must be mature before going all-in |
| Aurelia 1 | 2015-2020 | Ecosystem too small | The best framework doesn't win without community |
| Ractive | 2013-2017 | Absorbed by Svelte (Rich Harris) | Innovation continues: Ractive → Svelte |
Blaze must follow the Renaissance pattern.
This is the most relevant category for Blaze — because Meteor + Blaze IS a full-stack server-driven framework.
| Framework | Backend | Transport | Rendering | What Blaze Can Learn |
|---|---|---|---|---|
| Meteor + Blaze | Node.js | DDP (WebSocket) | Client-side reactive | — That's us |
| Phoenix LiveView | Elixir | WebSocket | Server-side | Closest competitor. WS sends HTML diffs |
| Laravel Livewire | PHP | AJAX/WS | Server-side, synced | Reactive PHP components |
| Rails Hotwire | Ruby | Turbo Streams (WS) | Server-side | HTML over the wire, simple |
| Blazor | .NET | SignalR (WS) | Server or WASM | Two modes: server-side or WASM |
| Inertia.js | Any | JSON → client | Client-side | Bridge between monoliths and SPAs |
| RedwoodJS | Node.js (Prisma) | GraphQL | React | Cells pattern |
| SpacetimeDB | Rust (DB + logic merged) | WebSocket | Client-side (auto-sync) | The Meteor paradigm pushed to the extreme |
SpacetimeDB is essentially the Meteor model reinvented in 2024 with multiplayer game-level performance.
| Aspect | Meteor + DDP | SpacetimeDB |
|---|---|---|
| Architecture | App server + MongoDB (separate) | DB + server logic merged into a single binary |
| Sync | DDP publications/subscriptions | Automatically publishes updates to clients |
| Performance | Limited by Mongo ↔ Node bridge | 150,000+ tx/sec |
| Proven use case | Real-time apps, prototyping | Production MMORPGs, multiplayer simulators |
SpacetimeDB proves that Meteor's fundamental paradigm — automatic client-server synchronization with reactive subscriptions — is not a relic of the past. It's the future.
Meteor was right in 2012. SpacetimeDB confirms it in 2024: automatic sync is the right model.
Blaze + DDP occupies a position that NOBODY else occupies: fine-grained client-side reactivity WITH real-time server synchronization.
| LiveView | Blaze + DDP Today | Blaze + DDP Tomorrow? |
|---|---|---|
| Server sends HTML diffs | Server sends DATA diffs (DDP) | Same — but better! Only data changes, not HTML |
| Each interaction = round-trip | Local interaction + auto sync | Already faster |
| State entirely on server | Distributed state (client + server) | Optimistic UI already native |
| No offline mode | Possible (minimongo) | True offline-first with minimongo |
↑ Back to top"Meteor + Blaze = LiveView but better: same simplicity, but with true client-side state, offline support, and no round-trip for every click."
| Framework | Approach | What Blaze Can Learn |
|---|---|---|
| Leptos | Signals + Server Functions | Server functions callable from the template |
| Yew | React-like in Rust | WASM for performance-critical parts |
| Dioxus | Multi-platform (web, desktop, mobile) | One renderer, multiple targets |
| Sycamore | Fine-grained reactivity | Performant signals |
| Framework | Language | What Blaze Can Learn |
|---|---|---|
| Elm | Elm | TEA architecture, zero runtime errors |
| ClojureScript + Reagent | Clojure | Immutability, hot-reloading, REPL-driven |
| PureScript Halogen | PureScript | Strong typing, typed components |
| Kotlin/JS + Compose | Kotlin | Compose UI for the web |
Lesson for Blaze: These frameworks prove that language niches can survive with a small, passionate community. Blaze doesn't need to conquer the world — it needs its passionate community.
| Reason | Detail | How Blaze Can Respond |
|---|---|---|
| 1. Employability | React/Vue/Angular in job listings | Blaze can be "in addition to", not "instead of" |
| 2. Ecosystem | npm has everything for React | Web Components interop + use npm directly |
| 3. TypeScript | Standard in 2026 | TS support for helpers, typed templates |
| 4. Tooling | DevTools, HMR, IDE support | Blaze DevTools, HMR, Spacebars LSP |
| 5. Perception | "Blaze is dead" | The renaissance must be visible and marketed |
| Strength | Explanation | Closest Competitor |
|---|---|---|
| 1. Auto-reactivity without annotations | No useState, ref(), $state | Tracker is unique |
| 2. HTML-first | {{helper}} in real HTML | Marko, Alpine (less powerful) |
| 3. Data → UI in real-time | MongoDB → Template automatically | LiveView (but server-side) |
| 4. Native Optimistic UI | Meteor Methods + minimongo | Nobody |
| 5. Offline-ready | minimongo + auto-reconnection | Nobody (natively) |
| Priority | Feature | Inspired By | DX Impact | Difficulty |
|---|---|---|---|---|
| P0 | TypeScript support | Everyone | Very High | High |
| P0 | HMR for templates | Vue, Svelte | Very High | Medium |
| P0 | Modern DevTools | React, Vue | High | High |
| P1 | SFC format (.blaze files) | Vue, Svelte | High | Medium |
| P1 | Scoped styles | Vue, Svelte, Lit | High | Medium |
| P1 | Modern Tracker API | Solid, Preact Signals | Medium-High | Medium |
| P2 | Template expressions | Everyone except Handlebars | Medium | Medium |
| P2 | Async templates | Marko, Nunjucks | Medium | Medium |
| P2 | Web Components interop | Lit, Stencil | Medium | High |
| P3 | Islands / partial hydration | Astro, Marko | Medium | High |
| P3 | Codemods | Ember | Medium | Medium |
| P3 | Static templates (no tracking) | Astro, htmx | Low-Medium | Low |
Blaze is the simplest path from data to UI on the web.
Write HTML. Add
{{helpers}}. Your data is live.
NouseState. Noref(). No$state. No ceremony.
Real-time by default. Offline-capable. Optimistic UI built-in.
The simplicity of Alpine, the reactivity of Solid, the HTML-first philosophy of Marko, the full-stack integration of LiveView — and it already exists.
mindmap
root((Blaze))
HTML-first
Marko
Alpine
htmx
Stimulus
Lit
Auto-reactivity
Solid
Vue
MobX
Knockout
Batteries-included
Ember
Angular
Meteor
Server-integrated
LiveView
Livewire
Hotwire
Inertia
Simplicity-first
Svelte
Alpine
Mithril
VanJS
Preact
Blaze is the only one that sits in ALL of these categories at once. That's its strength — it just needs to be modernized without losing this unique intersection.