LearnNewsExamplesServices
Frontmatter
tagName10.0.0-beta.6
nameNeo.mjs v10.0.0-beta.6
publishedAt7/18/2025, 3:31:18 PM
isPrerelease
isDraft

Neo.mjs v10.0.0-beta.6

Neo.mjs v10.0.0-beta.6 Release Notes

This release represents a monumental leap forward, introducing a deeply re-architected reactivity system and a revolutionary VDOM engine that enables surgical, high-performance updates. Building on the foundation of beta.5, this version delivers a state-of-the-art developer experience with a new config system, synchronous batched effects, and the official debut of Functional Components.

✨ Highlights

🚀 Hyper-Optimized VDOM Update Engine

While Neo.mjs has long used a "scoped" VDOM model, this release introduces a revolutionary update aggregation and orchestration engine. This new architecture dramatically enhances performance in complex, real-world scenarios (#7076, #7077).

  • Centralized Orchestration: The new Neo.manager.VDomUpdate singleton acts as a central orchestrator, intelligently merging multiple, simultaneous update requests from different components into a single, atomic transaction.
  • Combined & Asymmetric Payloads: Imagine a toolbar and one of its ten buttons both change state in the same event loop. The new VDOM engine can now generate a single, minimal, asymmetric VDOM payload containing the toolbar's structure and only the updated button's new content. This results in one hyper-efficient update instead of multiple, potentially conflicting ones.
  • Key Benefits: This new model drastically reduces worker traffic, minimizes payload size, and guarantees state integrity for all callbacks, even during complex, overlapping updates.

🧠 Fine-Grained Reactivity & The New Config System

The core of this release is a new, more powerful way to define and manage reactive state.

  • @reactive Decorator: We have introduced a new @reactive decorator (or a _ suffix as a non-decorator alternative) to explicitly flag configs as reactive. This improves code clarity and makes the developer's intent clear.
  • Neo.createConfig(): The logic for creating reactive configs has been separated from the class system's setupClass(). The new Neo.createConfig() method allows for the creation of named, instance-level reactive configs, providing unparalleled flexibility for dynamic state management.

⚡ Synchronous Effects & Atomic Batching

The effect system has been re-engineered for maximum control and performance.

  • Synchronous by Default: Effects now run synchronously by default, providing a more predictable execution flow. The lazy: true option is still available for cases where initial execution needs to be deferred.
  • EffectManager.pause(): The EffectManager can now be paused, giving developers fine-grained control over when dependency tracking is active.
  • Atomic Batching: The EffectBatchManager ensures that all updates triggered by a single, top-level operation (like setData()) are collected, de-duplicated, and executed in a single, atomic batch.

💻 Functional Components & Unified VDOM Lifecycle

This release officially introduces a new, modern paradigm for building UIs in Neo.mjs, supported by a unified lifecycle.

  • New VdomLifecycle Mixin: The core VDOM lifecycle logic has been extracted from component.Base into the new Neo.mixin.VdomLifecycle. This major architectural improvement allows both class-based and functional components to share the exact same robust and predictable lifecycle.
  • Declarative UI: Create components as pure functions using the new defineComponent method. Manage state effortlessly with reactive hooks like useConfig.
  • Real-World Example: The new Email Application (apps/email/view/MainView.mjs) is built entirely with functional components, serving as a comprehensive showcase of this new architecture.

📦 Core Enhancements & Stability

  • Enhanced Mixin System: Mixins are now a first-class citizen for composing component features. They can now contribute directly to the static config of a class, including both reactive and non-reactive properties, which are intelligently merged with the class's own configs (#6905).
  • Improved Update Stability: A small but critical change to updateVdom() now prevents it from queuing any updates before a component is fully constructed (isConstructed is true). This eliminates a whole class of potential race conditions and ensures updates only happen when a component is in a valid rendering state.
  • Neo.gatekeep(): A new Neo.gatekeep() method has been introduced to standardize how singleton and module exports are handled, improving consistency and preventing duplicate instantiations (#7081, #7072).

📚 New Content & Developer Experience

  • Enhanced Live Previews: The LivePreview engine has been overhauled to fully support functional components and modern JavaScript (#7069, #7073).
  • New Framework Comparisons: The documentation now includes new, in-depth comparison articles against other popular frameworks (like React) to better highlight the unique architectural advantages of Neo.mjs.
  • New Tests & Learning Content: This release is backed by a massive suite of new tests covering all aspects of the new reactivity model and VDOM engine. The learning content has also been significantly expanded.

All changes combined into 1 commit: https://github.com/neomjs/neo/commit/7e3aeaa88ee684e3e6f16d9e8dbe0f6149dde5cc