---
tagName: 11.5.0
name: Neo.mjs v11.5.0 Release Notes
publishedAt: '2025-11-18T20:28:02Z'
isPrerelease: false
isDraft: false
---
# 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.
<img width="561" height="92" alt="Screenshot 2025-11-17 at 19 25 14" src="https://github.com/user-attachments/assets/eca02ca5-812b-4332-8b59-35df077cdb19" />

Inside the SSR version, we will get the full html markup directly (better for crawler bots):
<img width="1041" height="914" alt="Screenshot 2025-11-17 at 19 19 58" src="https://github.com/user-attachments/assets/9575b67e-9ce9-458b-8942-672564b4f820" />

This part already renders beautifully:
<img width="1021" height="904" alt="Screenshot 2025-11-17 at 19 18 57" src="https://github.com/user-attachments/assets/e596f1b4-ab77-4cb9-a6ee-e5b82d5e7e11" />

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
