The Frontend Landscape in 2026
What Blaze Can Learn From Everyone

A research companion for the Blaze renewal effort — analyzing 120+ frameworks to find what Blaze can learn from each.

1. Main UI Frameworks

Tier 1 — The Giants

FrameworkReactivityComponentsSizeWhat Blaze Can Learn
ReactManual (useState, useEffect)JSX + hooks~40KBExcellent DevTools, ecosystem as moat
VueProxy-based (ref, reactive), autoSFC .vue~33KBSFC, exemplary docs, progressive adoption
AngularSignals + Zone.jsTS 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.

Tier 2 — The Innovators

FrameworkReactivityComponentsSizeWhat Blaze Can Learn
SvelteCompile-time (Runes: $state, $derived)SFC .svelte~0 runtimeCompile-time optimizations — Spacebars already compiles!
SolidSignals (createSignal, createEffect)JSX, no re-render~7KBTracker IS already a signals system
QwikFine-grained, lazyJSX-like with $ boundariesO(1) JSResumability: no hydration
MarkoCompile-time, streamingExtended HTML templatesTiny runtimePhilosophically 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.

Tier 3 — The Compact Ones

FrameworkSizeAngleWhat Blaze Can Learn
Preact3KBUltra-light React-compatA compat layer captures a segment
Inferno~9KBPure performance, 60fps mobileCompat API eases migrations
Mithril8.8KBAll-in-one: routing + XHR + VDOMCompact batteries included
Hyperapp1KBElm-like, purely functionalRadical minimalism

Tier 4 — Veterans in Transition

FrameworkCurrent StateWhat Blaze Can Learn
EmberRenaissance with Octane + GlimmerAutomated codemods, 6-week release cycle, stability as a feature
AureliaAurelia 2 (rewrite)Convention-based, respects standards
RiotNiche but activeMicro-components, simple syntax
KnockoutMaintenance modeThe ancestor of declarative data-binding — Blaze descends from it spiritually

Tier 5 — Typed / Functional

FrameworkLanguageWhat Blaze Can Learn
ElmElm (compiles to JS)TEA architecture, zero runtime errors
ReasonReact / ReScriptReScript → JSStrong typing eliminates entire classes of bugs
↑ Back to top

2. Meta-frameworks

This is where competition is fiercest for Meteor + Blaze — meta-frameworks offer the "complete app" experience.

The Leaders

Meta-frameworkBaseSSRRoutingWhat Blaze/Meteor Can Learn
Next.jsReactServer Components, streaming, ISRFile-basedServer Components = server sends UI, not JSON (like Meteor!)
NuxtVueHybrid (SSR/SSG/SPA)File-based autoAuto-imports, "zero-config" DX
RemixReactStreaming, progressive enhancementNested routesLoaders = data fetching co-located with the route
SvelteKitSvelteStreaming, SSG, SSRFile-basedSimplicity, edge adaptation
AstroAgnosticServer-first, zero JS by defaultFile-basedIslands 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.

The Emerging Ones

Meta-frameworkBaseUnique AngleBlaze Relevance
TanStack StartReactFull-stack type-safeEnd-to-end type-safety
AnalogAngularAngular meta-frameworkEven Angular needs a meta-framework
Qwik CityQwikResumability everywhereNo hydration = instant interactive
FreshDeno + PreactNo build step, island-basedZero-config, islands
RedwoodJSReact + PrismaFull-stack JS/TS app frameworkOpinionated full-stack, cells pattern
EnhanceWeb ComponentsSSR Web ComponentsWeb standards first

Static Site Generators

ToolLanguageTemplateBlaze Relevance
Eleventy (11ty)JSNunjucks, Liquid, etc.Simplicity, data cascade
GatsbyReactReact + GraphQLGraphQL data layer
VitePressVueMarkdown + VueDocumentation sites
HugoGoGo templatesBuild speed
JekyllRubyLiquidOriginal simplicity
ZolaRustTeraBuild 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.

↑ Back to top

3. HTML-first / Lightweight / Progressive Enhancement

This is Blaze's natural category — but Blaze needs to reposition itself here with a modern narrative.

FrameworkApproachSizeWhat Blaze Can Learn
Alpine.jsAttributes in HTML (x-data, x-bind)~15KBFrictionless onboarding — one script tag and you're off
htmxServer returns HTML, not JSON~16KB gzServer-driven partials via DDP
StimulusControllers/targets/actions via data-*LightEnhancement over replacement
Petite VueVue-like attributes6KBVue-syntax for progressive enhancement
UnpolyEnhanced links/forms, layers~42KBModals, overlays, automatic fragments
Hotwire / TurboTurbo Frames + StreamsLightFrames = replaceable page sections
LivewirePHP components rendered server-sideThe model to follow for "server-driven Blaze"
Phoenix LiveViewElixir + WebSocketClosest competitor to Meteor + Blaze
DatastarSSE + HTML attributes~13KBHypermedia + real-time

The HTML-first Spectrum

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.

↑ Back to top

4. Content-oriented / Islands / SSR

The Islands Architecture

ImplementationHow It WorksWhat Blaze Can Learn
Astro IslandsStatic by default, client:load to hydrateMark templates as static (no Tracker)
Marko partial hydrationCompiler detects what to hydrateSpacebars compiler could do the same
Fresh IslandsComponents in islands/ are hydratedFolder convention for static/reactive
EnhanceSSR Web ComponentsStandards-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.

↑ Back to top

5. Templating Engines

Blaze/Spacebars descends directly from Handlebars/Mustache. Here's the full family:

The Mustache → Handlebars → Spacebars Lineage

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

Template Engine Comparison

EngineSyntaxLogicAsyncCompilesWhat Blaze Can Learn
Handlebars{{ }}Helpers, block helpersNoYesThe base of Spacebars — stay compatible
Mustache{{ }}Logic-lessNoYesRadical simplicity
Liquid{{ }} / {% %}Tags, filtersNoInterpretedFilters — Spacebars doesn't have this
Nunjucks{{ }} / {% %}Rich (Jinja2-like)YesYesTemplate inheritance
EJS<% %>Embedded JSNoYesSimple but not HTML-first
Pug/JadeIndentationEmbedded JSNoYesExtreme conciseness
Eta<% %>Embedded JSYesYesModern, fast, TypeScript
Ractive{{ }} Mustache-likeTwo-way bindingNoYesRactive = proto-Blaze — reactive Mustache templates
MarkoExtended HTMLTags, concise syntaxYes (streaming)YesThe modern successor of template-first

Features Spacebars Could Borrow

FeatureAvailable InCurrent SpacebarsOpportunity
Filters / pipesLiquid, Nunjucks, TwigNo{{date | formatDate}}
Template inheritanceNunjucks, TwigNo (partials only){{#extends "layout"}}
Slots / named blocksVue, Svelte, NunjucksBasic (contentBlock)Named slots: {{#slot "header"}}
Async templatesMarko, Nunjucks, EtaNo{{#await promise}}...{{/await}}
Spread attributesJSX, SvelteNo<div {{...attrs}}>
Inline expressionsEJS, Pug, all JSXNo (helpers only){{items.length}}
↑ Back to top

6. Web Components / Standards-based

ToolApproachSizeWhat Blaze Can Learn
LitTagged template literals~5KBEach component = a native Custom Element
StencilCompiles to Web Components, JSX + TSTiny runtimeCompile Spacebars → Custom Elements
FASTMicrosoft, performant WCVariableDesign system tokens
HybridsFunctional Web Components~3KBFunctional API for WC
HauntedReact hooks for WCSmallHooks pattern on WC
Polymer(historical — Google)The ancestor, proved WC work in production

Web Components Strategy for Blaze

StrategyWhat It MeansDifficultyValue
A. Consume WCUse <my-component> in Spacebars — access Shoelace, Spectrum, etc.LowInstant access to WC ecosystem
B. Produce WCCompile Blaze templates to Custom Elements — usable in React, Vue, AngularHighBlaze components become universal
C. BothConsume AND produce — the long-term idealA then BFull interoperability

Start with A (low effort, immediate benefit), then build toward B over time. C is the natural result.

↑ Back to top

7. Reactive Primitives / Micro-libraries

This is the heart of the matter for Blaze — Tracker is a reactive primitives system ahead of its time.

Reactivity Model Comparison

SystemModelGranularityAnnotationAuto-tracking
Tracker (Blaze)Computation + DependencyFine (per reactive source)NoneYes
Solid SignalscreateSignal + createEffectFine (per signal)createSignal()Yes
Preact Signalssignal() + effect()Finesignal()Yes
Vue Reactivityref() / reactive() + ProxyFine (per property)ref()Yes
Svelte Runes$state + $derived + $effectFine (compile-time)$stateYes (compiled)
Angular Signalssignal() + computed()Finesignal()Yes
MobXobservable + autorunFine (per property)@observableYes
RxJSObservable + operatorsStream-basednew Observable()No (push)
JotaiAtomsFine (per atom)atom()Yes
KnockoutObservables + computedFineko.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

What Tracker Lacks vs. Modern Systems

GapWhat Others HavePossible Solution
No computed / derivedSolid, Vue, SvelteTracker.derived(() => a.get() + b.get())
Awkward cleanupSolid onCleanup, Vue onUnmountedAuto-cleanup tied to template lifecycle
No explicit batchingSolid batch, Vue nextTickTracker.batch(() => { ... })
Hard to debugVue DevTools, Solid DevToolsTracker DevTools with dependency graph
Not SSR-friendlyAll modern signalsSSR mode without tracking
↑ Back to top

8. CSS / Design Systems

The State of Styling in Blaze Today

AspectBlaze TodayWhat Others DoOpportunity
ScopingGlobal CSSVue/Svelte scoped styles, Shadow DOMScoped CSS per template
Co-locationCSS in separate fileSFC (template + style together).blaze SFC format
CSS-in-JSNot natively supportedstyled-components, EmotionNot a priority
Utility-firstTailwind worksTailwind everywhereAlready compatible
Design systemsNo official oneMaterial UI, Chakra, MantineBlazeUI (community)

The Pragmatic Approach

  1. Short term: Ensure Tailwind/UnoCSS work perfectly with Blaze (already the case)
  2. Medium term: Scoped styles a la Vue (<style scoped> in an SFC format)
  3. Long term: Optional Shadow DOM via Web Components
↑ Back to top

9. Historical Frameworks — Lessons From the Past

FrameworkGolden EraWhy It DeclinedLesson for Blaze
Backbone.js2011-2014Too low-level, no data-bindingData-binding is a must (Blaze has it)
AngularJS2012-2016Complete rewrite, breaking changesNEVER break compat without a migration path
Knockout2010-2015No ecosystem, performance issuesGood model, bad ecosystem story
Polymer2015-2019Web Components too earlyStandards must be mature before going all-in
Aurelia 12015-2020Ecosystem too smallThe best framework doesn't win without community
Ractive2013-2017Absorbed by Svelte (Rich Harris)Innovation continues: Ractive → Svelte

The Decline Pattern

Popular framework Stagnation no new ideas Ecosystem dries up no packages Developers leave no jobs Framework dies

The Renaissance Pattern (Ember Octane, Vue 3)

Established framework Internal overhaul WITHOUT breaking existing code Progressive migration codemods, compat layer New features attract fresh blood Ecosystem regenerates

Blaze must follow the Renaissance pattern.

↑ Back to top

10. Server-driven UI / Full-stack

This is the most relevant category for Blaze — because Meteor + Blaze IS a full-stack server-driven framework.

Approaches Compared

FrameworkBackendTransportRenderingWhat Blaze Can Learn
Meteor + BlazeNode.jsDDP (WebSocket)Client-side reactive— That's us
Phoenix LiveViewElixirWebSocketServer-sideClosest competitor. WS sends HTML diffs
Laravel LivewirePHPAJAX/WSServer-side, syncedReactive PHP components
Rails HotwireRubyTurbo Streams (WS)Server-sideHTML over the wire, simple
Blazor.NETSignalR (WS)Server or WASMTwo modes: server-side or WASM
Inertia.jsAnyJSON → clientClient-sideBridge between monoliths and SPAs
RedwoodJSNode.js (Prisma)GraphQLReactCells pattern
SpacetimeDBRust (DB + logic merged)WebSocketClient-side (auto-sync)The Meteor paradigm pushed to the extreme

SpacetimeDB — Validating the Meteor Paradigm

SpacetimeDB is essentially the Meteor model reinvented in 2024 with multiplayer game-level performance.

AspectMeteor + DDPSpacetimeDB
ArchitectureApp server + MongoDB (separate)DB + server logic merged into a single binary
SyncDDP publications/subscriptionsAutomatically publishes updates to clients
PerformanceLimited by Mongo ↔ Node bridge150,000+ tx/sec
Proven use caseReal-time apps, prototypingProduction 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.

Where Does Meteor + Blaze Sit?

Server controls rendering Client controls rendering No client reactivity Fine-grained reactivity LiveView Livewire Hotwire Inertia RedwoodJS Next.js Blaze + DDP UNIQUE position

Blaze + DDP occupies a position that NOBODY else occupies: fine-grained client-side reactivity WITH real-time server synchronization.

The "LiveView for JavaScript" Opportunity

LiveViewBlaze + DDP TodayBlaze + DDP Tomorrow?
Server sends HTML diffsServer sends DATA diffs (DDP)Same — but better! Only data changes, not HTML
Each interaction = round-tripLocal interaction + auto syncAlready faster
State entirely on serverDistributed state (client + server)Optimistic UI already native
No offline modePossible (minimongo)True offline-first with minimongo

"Meteor + Blaze = LiveView but better: same simplicity, but with true client-side state, offline support, and no round-trip for every click."

↑ Back to top

11. Language-specific / Niche Frameworks

Rust/WASM — The New Frontier

FrameworkApproachWhat Blaze Can Learn
LeptosSignals + Server FunctionsServer functions callable from the template
YewReact-like in RustWASM for performance-critical parts
DioxusMulti-platform (web, desktop, mobile)One renderer, multiple targets
SycamoreFine-grained reactivityPerformant signals

Compile-to-JS

FrameworkLanguageWhat Blaze Can Learn
ElmElmTEA architecture, zero runtime errors
ClojureScript + ReagentClojureImmutability, hot-reloading, REPL-driven
PureScript HalogenPureScriptStrong typing, typed components
Kotlin/JS + ComposeKotlinCompose 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.

↑ Back to top

12. Strategic Synthesis for Blaze

The 5 Reasons People Choose Another Framework

ReasonDetailHow Blaze Can Respond
1. EmployabilityReact/Vue/Angular in job listingsBlaze can be "in addition to", not "instead of"
2. Ecosystemnpm has everything for ReactWeb Components interop + use npm directly
3. TypeScriptStandard in 2026TS support for helpers, typed templates
4. ToolingDevTools, HMR, IDE supportBlaze DevTools, HMR, Spacebars LSP
5. Perception"Blaze is dead"The renaissance must be visible and marketed

The 5 Unique Strengths Nobody Else Has

StrengthExplanationClosest Competitor
1. Auto-reactivity without annotationsNo useState, ref(), $stateTracker is unique
2. HTML-first{{helper}} in real HTMLMarko, Alpine (less powerful)
3. Data → UI in real-timeMongoDB → Template automaticallyLiveView (but server-side)
4. Native Optimistic UIMeteor Methods + minimongoNobody
5. Offline-readyminimongo + auto-reconnectionNobody (natively)

Priority Borrowing Matrix

PriorityFeatureInspired ByDX ImpactDifficulty
P0TypeScript supportEveryoneVery HighHigh
P0HMR for templatesVue, SvelteVery HighMedium
P0Modern DevToolsReact, VueHighHigh
P1SFC format (.blaze files)Vue, SvelteHighMedium
P1Scoped stylesVue, Svelte, LitHighMedium
P1Modern Tracker APISolid, Preact SignalsMedium-HighMedium
P2Template expressionsEveryone except HandlebarsMediumMedium
P2Async templatesMarko, NunjucksMediumMedium
P2Web Components interopLit, StencilMediumHigh
P3Islands / partial hydrationAstro, MarkoMediumHigh
P3CodemodsEmberMediumMedium
P3Static templates (no tracking)Astro, htmxLow-MediumLow

The Final Pitch

Blaze is the simplest path from data to UI on the web.

Write HTML. Add {{helpers}}. Your data is live.
No useState. No ref(). 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.

Philosophical Allies

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.

↑ Back to top

A research document for the Blaze renewal effort — part of the Meteor ecosystem.

120+ frameworks analyzed. Built with pure HTML5.