LearnNewsExamplesServices
Frontmatter
tagName11.5.0
nameNeo.mjs v11.5.0 Release Notes
publishedAt11/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 Manager now injects SSR data (windowId, vnode, cssMap, idCounters) into worker configurations. (Issue #7784)
  • VDom Worker Synchronization: The VDom worker now accepts idCounters from 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 cssMap to identify pre-loaded theme files, preventing redundant network requests for CSS that is already present. (Issue #7786)
  • VdomLifecycle & Application Controller: Enhanced Application.mjs to handle autoInitVnode: false for 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.

Screenshot 2025-11-17 at 19 25 14

Inside the SSR version, we will get the full html markup directly (better for crawler bots):

Screenshot 2025-11-17 at 19 19 58

This part already renders beautifully:

Screenshot 2025-11-17 at 19 18 57

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.js that 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.HighlightJs and Neo.util.HighlightJsLineNumbers to 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 ContentComponent has 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/promises in data/Store.mjs and a fallback for XMLHttpRequest, 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.exe vs node), resolving build issues on Windows. (Issue #7795, #7796)

📚 Documentation

  • Docs Overhaul: A complete refactoring of README.md to 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.mjs was breaking the Playwright test harness. (Issue #7780)

All changes in 1 commit: https://github.com/neomjs/neo/commit/176ad3a12e43ffb88ffcc7c8946f1847d27d7626