Frontmatter
| tagName | 10.0.0-beta.6 |
| name | Neo.mjs v10.0.0-beta.6 |
| publishedAt | 7/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.VDomUpdatesingleton 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.
@reactiveDecorator: We have introduced a new@reactivedecorator (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'ssetupClass(). The newNeo.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: trueoption is still available for cases where initial execution needs to be deferred. EffectManager.pause(): TheEffectManagercan now be paused, giving developers fine-grained control over when dependency tracking is active.- Atomic Batching: The
EffectBatchManagerensures that all updates triggered by a single, top-level operation (likesetData()) 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
VdomLifecycleMixin: The core VDOM lifecycle logic has been extracted fromcomponent.Baseinto the newNeo.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
defineComponentmethod. Manage state effortlessly with reactive hooks likeuseConfig. - 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 configof 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 (isConstructedis 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 newNeo.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