Frontmatter
| tagName | 11.5.0 |
| name | Neo.mjs v11.5.0 Release Notes |
| publishedAt | 11/18/2025, 8:28:02 PM |
| isPrerelease | |
| isDraft |
Neo.mjs v11.5.0 Release Notes
This release brings significant advancements in Server-Side Rendering (SSR) capabilities, implementing the foundational "takeover" logic that allows the client-side framework to seamlessly adopt server-rendered state. We also introduce a unified, cross-platform architecture for code highlighting, ensuring consistent behavior between Node.js and the browser. Additionally, this version includes important build script enhancements for better Windows compatibility and updates to the documentation.
✨ Highlights
🚀 SSR Takeover & VDom Integration
- Client-Side Takeover Logic: Implemented the core logic for the framework to "takeover" a server-rendered page without re-hydrating the DOM. The
Managernow injects SSR data (windowId, vnode, cssMap, idCounters) into worker configurations. (Issue #7784) - VDom Worker Synchronization: The VDom worker now accepts
idCountersfrom the server, ensuring that client-side ID generation continues seamlessly from where the server left off, preventing ID collisions. (Issue #7785) - Optimized Theme Loading: The App worker now processes the SSR
cssMapto identify pre-loaded theme files, preventing redundant network requests for CSS that is already present. (Issue #7786) - VdomLifecycle & Application Controller: Enhanced
Application.mjsto handleautoInitVnode: falsefor SSR scenarios, allowing the main view to adopt the server-provided VDOM. (Issue #7787)
To better understand the SEO support topic: By default, Neo.mjs Apps start with an empty body tag and the client-side uses DOM APIs to populate it.
Inside the SSR version, we will get the full html markup directly (better for crawler bots):
This part already renders beautifully:
More important is the "self-healing" hydration aspect: even if there are race-conditions like different store loads arriving at different times, Neo can fully take over the existing app without the need for a re-rendering. Minor delta-updates at most. Meaning: SSR Apps can work for human users too.
🎨 Unified Code Highlighting Architecture
- Universal Highlight.js Bundle: Created a custom, ESM-compatible build of
highlight.jsthat includes only necessary languages (bash,css,javascript,json,scss,xml). This single bundle works in both Node.js and the browser, replacing the main-thread addon. (Issue #7790) - Cross-Platform Highlighting Utility: Introduced
Neo.util.HighlightJsandNeo.util.HighlightJsLineNumbersto handle syntax highlighting and line numbering in any environment (Worker or Node.js). This removes the dependency on the DOM-based main thread addon. (Issue #7789) - Refactored ContentComponent: The Portal's
ContentComponenthas been refactored to use the new synchronous-style highlighting utilities, significantly simplifying the code and removing async dependencies on the main thread. (Issue #7791) - Unified Theming: Consolidated highlighting styles into a flexible SCSS architecture (
resources/scss/src/util/HighlightJs.scss) with theme-specific variable mappings, replacing hardcoded CSS files. (Issue #7791)
🛠️ Build & Compatibility Improvements
- Node.js Compatibility: Added a dynamic import for
fs/promisesindata/Store.mjsand a fallback forXMLHttpRequest, ensuring the Data Store works correctly in Node.js environments. (Issue #7783, #7781, #7782) - Windows Build Support: Updated
buildScripts/buildAll.mjs,createApp.mjs, and Webpack configs to dynamically determine the correct Node.js binary (node.exevsnode), resolving build issues on Windows. (Issue #7795, #7796)
📚 Documentation
- Docs Overhaul: A complete refactoring of
README.mdto align with the v11+ AI-native focus, highlighting the new MCP architecture and platform scale. (Issue #7778)
🐛 Bug Fixes
- Test Suite Fix: Resolved an issue where
ghIntegrationGate.spec.mjswas breaking the Playwright test harness. (Issue #7780)
All changes in 1 commit: https://github.com/neomjs/neo/commit/176ad3a12e43ffb88ffcc7c8946f1847d27d7626