Releases: neomjs/neo
Neo.mjs v11.13.0 Release Notes
This release enhances the GitHub Workflow MCP server with improved configuration options for managing issue archives. It standardizes how versioned directories are named, ensuring a consistent structure for your project's history.
✨ Highlights
📁 Standardized Archive Directories
We have introduced a new configuration option, versionDirectoryPrefix, to the GitHub Workflow server. This setting unifies the naming convention for all version-based archive directories.
Whether an issue is archived because of a Milestone or a Release Tag, the resulting folder in .github/ISSUE_ARCHIVE/ will now consistently use this prefix (defaulting to 'v', e.g., v1.2.3/). The implementation includes robust logic to handle various input formats, ensuring that version strings are never "double-prefixed" (e.g., avoiding vv1.2.3).
📦 Full Changelog
AI MCP Servers
- Enhancement: Add versionDirectoryPrefix to GitHub Workflow MCP config (Issue #7911, Issue #7912)
- Introduced
versionDirectoryPrefixto control folder naming for both milestones and releases. - Implemented smart prefixing logic to handle raw (
1.2.3) and pre-prefixed (v1.2.3) version strings consistently across Issue and Release syncers.
- Introduced
Neo.mjs v11.12.0 Release Notes
This release focuses on improving the SEO infrastructure of the platform. By enhancing how we generate sitemaps and site metadata, we are paving the way for better discoverability by search engines and AI crawlers. These changes are a preparatory step for the upcoming middleware-based routing deployment, ensuring that external bots can index the entire application tree effectively.
✨ Highlights
🗺️ Middleware-Ready SEO Generation
We have significantly updated the generate-seo-files build tool to support environments using server-side middleware for routing.
- Real Routes: The sitemap generator now produces "clean" URLs (e.g.,
/services) instead of hash-based fragments (e.g.,/#/services). This is critical for crawlers like Googlebot, which prioritize standard URL structures. - Route Mapping: The CLI tool now supports a new
objectsoutput format. This provides a JSON mapping between the public "real" route and the internal client-side route (e.g.,{"route": "/services", "clientSideRoute": "/#/services"}). This mapping enables middleware to correctly resolve incoming requests and serve the appropriate application state. - Categorized Routing: The internal logic now explicitly categorizes routes as
tree(documentation),top-level(SPA roots), orfile(standalone apps/examples), ensuring correct path handling for every type of content.
📦 Full Changelog
Build Scripts & SEO
- Enhance SEO generator to support middleware-compatible routes (Issue #7910)
- Added
useHashoption to route generation to support clean URLs. - Added
objectsformat to CLI for generating route mappings. - Fixed path handling for standalone example apps (no longer prefixed with
/learn).
- Added
Neo.mjs v11.11.0 Release Notes
This release brings a major architectural refactoring to the AI Knowledge Base's ingestion engine. We have transitioned the implementation from a monolithic DatabaseService to a modular, extensible design. By decomposing the system into specialized Parsers and Source Providers, we have significantly improved the platform's ability to ingest and index diverse content types.
✨ Highlights
🧠 Knowledge Base: Modular Architecture
The DatabaseService—previously a "God Class" handling everything from file crawling to embedding—has been refactored into a clean, domain-driven design:
- Parsers (
ai.mcp.server.knowledge_base.parser): Specialized singletons for understanding specific content formats (e.g.,TestParserfor Playwright files,DocumentationParserfor markdown). - Source Providers (
ai.mcp.server.knowledge_base.source): Dedicated classes responsible for crawling specific domains (e.g.,ApiSource,TicketSource,LearningSource). - Vector Service: A dedicated service now handles the heavy lifting of embedding generation and vector database interactions.
This separation of concerns makes the AI infrastructure more robust and easier to extend with new knowledge sources in the future.
🎯 Granular Test Indexing
We have overhauled how automated tests are indexed. Instead of treating a test file as a single chunk of text, the new TestParser intelligently decomposes Playwright specs:
- Header Chunks: Capture high-level context, imports, and
test.describeblocks. - Test Case Chunks: Each
test()function is indexed individually with precise line-number metadata.
This granularity allows AI agents to perform semantic searches for specific test scenarios (e.g., "How do I test grid filtering?") with much higher precision. Previously, an entire test file was indexed as a single monolithic chunk, diluting the semantic signal of individual test cases. Now, the vector search can identify and retrieve the exact test case that matches the query.
⚡ VDom Worker Stability
We resolved a race condition in the VDom worker initialization. Previously, the Neo.vdom.Helper could attempt to initialize its renderer before the global configuration was fully registered. This has been fixed by ensuring initialization waits for the Neo.config to be populated, improving startup stability.
📦 Full Changelog
AI Knowledge Base & Infrastructure
- Split Playwright tests into granular knowledge base chunks for better retrieval (Issue #7901)
- Refactor Knowledge Base parsing logic into domain-specific Singletons (Issue #7902)
- Refactor Knowledge Base crawling logic into Source Providers (Issue #7903)
- Refactor Knowledge Base embedding logic into Vector Service (Issue #7904)
- ai.mcp.server.knowledge-base.source.Base: remove the singleton config (Issue #7905)
- Refactor ApiSource hardcoded path to non-reactive config (Issue #7906)
Core Framework & Workers
- Fix race condition in VDom worker initialization (Issue #7907)
- Refactor vdom.Helper initAsync to use optional chaining (Issue #7908)
All changes in 1 commit: 491f876
Neo.mjs v11.10.0 Release Notes
This release significantly enhances the Agent OS Knowledge Base by expanding its scope to include the entire AI infrastructure, the automated test suite, and a retroactive history of the project. These changes ensure that AI agents have a complete, 360-degree view of the framework—from source code and tests to historical decision-making.
✨ Highlights
📚 Expanded Knowledge Base: Tests & AI Infrastructure
We have bridged the gap between the framework's source code and its supporting ecosystem. The Knowledge Base now indexes:
- AI Infrastructure (
ai/): The Agent OS SDK, MCP servers, and services are now fully indexed. Agents can now query theNeo.ainamespace to understand their own architecture. - Automated Tests (
test/playwright/): Agents can now query for test specifications via semantic search using the newtype: 'test'filter. This allows finding relevant tests by meaning rather than just keywords, helping agents understand how to write and maintain Playwright tests for the framework. - Retroactive History: We have backfilled the repository with tickets and release notes starting from January 1st, 2025 (v8.0.1+). Previously limited to v10+, this expanded history gives agents a deeper context on the framework's evolution and design decisions.
📖 Docs App: AI Namespace Integration
The Docs App has been updated to include the Neo.ai namespace.
- Visualizing the AI SDK: Developers can now browse the class hierarchy of the AI infrastructure (e.g.,
Neo.ai.mcp.server.knowledge-base.Server). - Smart Filtering: We implemented intelligent filtering (via the new
doesNotStartWithoperator and@ignoreDocstag) to ensure only relevant classes are displayed, keeping the navigation tree clean.
🧹 Standardization & Code Quality
We have enforced stricter coding guidelines to improve documentation quality and consistency:
- JSDoc Standardization: The
@ summarytag is now mandatory as the first tag for all classes, ensuring concise high-level descriptions. - MCP Tool Signatures: All MCP server tools now use standardized method signatures with default object arguments, improving robustness and error handling.
📦 Full Changelog
AI Knowledge Base & Infrastructure
- Index
ai/directory in Knowledge Base via JSDoc (Issue #7896) - Index
test/playwright/in Knowledge Base as raw source (Issue #7897) - Enhance query_documents tool with limit parameter and updated JSDoc (Issue #7883)
- MCP servers: inconsistencies inside className configs (Issue #7895)
Docs App & JSDoc
- Clean up Docs App structure by filtering invalid AI modules and pruning empty folders (Issue #7899)
- Support
@ignoreDocsJSDoc tag to exclude files from Docs app structure (Issue #7900) - Update Coding Guidelines to mandate @ summary as first tag (Issue #7894)
- Update Coding Guidelines for Class Top-Level JSDoc Comments and @ summary Tag (Issue #7890)
- Update Coding Guidelines for JSDoc and Refactor GitHub Workflow MCP (Issue #7889)
- Add Class-Level JSDoc Comments to GitHub Workflow MCP Server (Issue #7891)
- Review and Update JSDoc Comments in Memory Core MCP Server (Issue #7892)
- Review and Update JSDoc Comments in Knowledge Base MCP Server (Issue #7893)
Core Framework Enhancements
- Add 'doesNotStartWith' operator to Neo.collection.Filter (Issue #7898)
- Standardize MCP Tool Method Signatures with Default Objects (Issue #7888)
Workflow Enhancements
- Enforce "Propose-First" workflow and Labeling in create_issue tool description (Issue #7884)
- [AI] Streamline create_issue workflow instruction (Issue #7886)
All changes in 1 commit: 0cbc9f9
Neo.mjs v11.9.0 Release Notes
Happy Birthday, Neo.mjs! 🎉
Today, November 23, 2025, marks exactly 6 years since the General Availability (GA) of Neo.mjs on November 23, 2019.
We wanted to make this anniversary release special. Six years ago, we reimagined web development with a multi-threaded, worker-first architecture. Today, we are reimagining it again with the Agent OS.
This release moves beyond the "Tool Use" era into a future where agents are first-class citizens—autonomous developers capable of executing code, managing their own infrastructure, and understanding complex context. We have solidified this vision with a comprehensive documentation overhaul, a unified "Neo-Native" AI architecture, and foundational features for the next generation of spatial web apps.
✨ Highlights
📘 Agent OS: The Comprehensive Manual
We have cemented the "Agent OS" vision with a complete suite of documentation. New guides cover everything from the high-level "Agent OS" concept to deep dives into each MCP server.
- Agent OS Introduction: The high-level vision and architecture.
- Code Execution Guide: A definitive guide to the "Thick Client" pattern (
ai/services.mjs), including a real-world case study on self-healing database schemas. - Real-World Showcase: While v11.8 introduced the concept, v11.9 delivers the proof. We've added concrete examples like
ai/examples/debug_session_state.mjs(a "Thick Client" diagnostic tool) andai/examples/migrate_timestamps.mjs(an autonomous migration utility), proving how agents can maintain their own infrastructure. - Server Guides: Detailed architecture breakdowns for the Knowledge Base, Memory Core, and GitHub Workflow servers.
- Philosophy: We've documented the "Why" behind our Context Engineering and "Save-Then-Respond" protocols.
🏗 Unified MCP Architecture & The Runner Pattern
We've completely re-architected our AI infrastructure, paying down technical debt by refactoring all three MCP servers (memory-core, knowledge-base, github-workflow) to use a robust Runner Pattern.
Instead of monolithic scripts, we now have a clear separation of concerns:
- The Runner (
mcp-stdio.mjs): A lightweight entry point responsible for CLI argument parsing (commander), global config setup, and error trapping. It acts as the "main" function. - The Server (
Server.mjs): A pureNeo.core.Baseclass that encapsulates the application logic. It leverages the framework's powerful lifecycle hooks (initAsync,ready) to orchestrate complex dependency chains (Database -> Auth -> Transport) without race conditions.
This Neo-Native approach means our AI backend services now share the same DNA as our frontend components—making them easier to test, extend, and maintain.
🪟 Neo.manager.Window: The "God View"
We introduced Neo.manager.Window, a new core manager in the App Worker that tracks the exact geometry of all connected browser windows.
- Geometry Tracking: Automatically tracks
screenX,screenY,width, andheightfor every window. - Spatial Awareness: Enables
getWindowAt(x, y)queries, a prerequisite for cross-window drag-and-drop. - Reactive Updates: Extends
Neo.manager.Basefor full observability of window state changes.
🧠 Memory Core: Parallel Sessions & Eventual Consistency
We have upgraded the Memory Core's synchronization engine to move beyond the single-agent "happy path" and fully support Parallel Agent Sessions.
- Eventual Consistency: The system now employs a robust consistency model that can track multiple agents working simultaneously without corrupting the context window.
- Drift Detection: Intelligent logic automatically compares raw memory logs against cached summaries. If a parallel session adds new memories or crashes unexpectedly, the next agent will detect the "drift" and self-heal the summary on startup.
- Numeric Timestamps: We refactored the storage engine to use numeric timestamps (milliseconds), resolving critical compatibility issues with ChromaDB range queries and ensuring precise session discovery.
📦 Full Changelog
Agent OS & Documentation
- [Docs] Re-position Neo.mjs as "Agent Operating System" in Schema and Metadata (Issue #7844)
- Epic: Documentation Overhaul for MCP & Agent OS Architecture (Issue #7848)
- Docs: Create Guide for "Introduction to MCP & Agent OS" (Issue #7849)
- Docs: Create Guide for "The Knowledge Base Server" (Issue #7850)
- Docs: Create Guide for "The Memory Core Server" (Issue #7851)
- Docs: Create Guide for "The GitHub Workflow Server" (Issue #7852)
- Docs: Create Guide for "Code Execution with MCP" (Issue #7853)
- Enhance Knowledge Base MCP Server Guide (Issue #7854)
- Enhance Knowledge Base Guide with 'Why' and Use Cases (Issue #7855)
- Polish Knowledge Base Guide: Config Details & Storytelling (Issue #7856)
- Enhance Memory Core MCP Server Documentation (Issue #7857)
- Documentation: Comprehensive Guide for GitHub Workflow MCP Server (Issue #7858)
- Documentation: Enhance "Code Execution with MCP" Guide (Issue #7859)
- Documentation: Update GitHubWorkflow.md to reference Knowledge Base Server (Issue #7860)
- Enhance Code Execution Guide with Real-World Case Study (Issue #7876)
- Update MCP guides code blocks to be readonly (Issue #7877)
- Enhance README.md with links to new MCP guides and Code Execution section (Issue #7879)
AI Infrastructure (Refactoring & Enhancements)
- Refactor Memory Core MCP Server to use Neo.core.Base class architecture (Issue #7869)
- Refactor Knowledge Base MCP Server to use Neo.core.Base architecture (Issue #7871)
- Refactor GitHub Workflow MCP Server to use Neo.core.Base architecture (Issue #7872)
- Improve Session Summarization to Handle Parallel and Recent Sessions (Issue #7861)
- Add capability to force summarize all sessions (Issue #7862)
- Refactor SessionService for better error handling and config management (Issue #7864)
- Refactor Memory Core to use numeric timestamps for ChromaDB compatibility (Issue #7865)
- Refactor MemoryService to use crypto-based IDs (Issue #7867)
- Implement consistent error handling for Memory Core MCP tools (Issue #7868)
- Standardize version reporting across MCP servers (Issue #7873)
Core Framework
- Feat: Create Neo.manager.Window for Multi-Window Geometry Tracking (Issue #7845)
- Refactor Neo.manager.Window to extend Neo.manager.Base (Issue #7875)
- Docs: Clarify distinction between Non-Reactive Configs and Class Fields in Neo.core.Base (Issue #7870)
- Remove duplicate contains() method in Rectangle.mjs (Issue #7874)
- Add Markdown and YAML to Highlight.js build configuration (Issue #7878)
Bug Fixes
- Bug: Prevent SessionService from summarizing the active session (Issue #7866)
Here is the example of the code execution pattern where Gemini 3 fixed a running MCP server via run-time tool composition scripts:
All changes in 1 commit: 08ad5e1
Neo.mjs v11.8.0 Release Notes
This release marks a pivotal shift in our AI strategy, transitioning Neo.mjs from a "Tool Use" architecture to a true "Agent OS", inspired by Anthropic's Code Execution pattern. We have introduced a standalone, type-safe AI SDK (ai/services.mjs) that enables agents to import and execute framework services directly in Node.js. This "Thick Client" approach allows for complex, autonomous workflows—demonstrated by our new Self-Healing Repository proof of concept—where agents can monitor, plan, and fix bugs without human intervention.
✨ Highlights
🤖 The Agent OS: Code Execution & Safe SDK
- Standalone AI SDK: We've decoupled our intelligent services (Knowledge Base, Memory Core, GitHub Workflow) from the MCP transport layer. Agents can now import
ai/services.mjsto access these capabilities directly as a Node.js library. (Issue #7831, #7832) - "TypeScript without TypeScript": We achieved the holy grail of JavaScript development: robust type safety without a compilation step. By dynamically wrapping our SDK with Zod schemas generated from our OpenAPI specs, we enforce strict contracts at runtime. This preserves our Zero-Build Dev Mode and Web Standards philosophy—allowing agents (and humans) to script complex logic directly in the browser console or Node.js without setting up a TS toolchain. (Issue #7843)
- Self-Healing Repository: A groundbreaking demo script (
ai/examples/self-healing.mjs) that autonomously monitors GitHub for bugs, queries the codebase for context, formulates a plan, and proposes a fix—all in a single execution cycle. (Issue #7833)
📂 New Agent Examples
We've added a suite of examples to demonstrate the power of the new Agent OS SDK:
ai/examples/self-healing.mjs: The flagship autonomous maintenance demo.ai/examples/smart-search.mjs: Demonstrates programmatically querying and filtering the Knowledge Base.ai/examples/db-backup.mjs: Programmable database backup using the exposed SDK.ai/examples/db-restore.mjs: Restoration utility for the Knowledge Base or Memory Core.ai/examples/test-safety.mjs: A verification script proving our runtime type safety catches invalid inputs.
⚙️ Core Framework Optimizations
- Faster Builds: The
highlight.jsbuild script now skips unnecessary regeneration if the target files exist, significantly speeding up thebuildAllprocess. (Issue #7823) - Robust App Initialization: Fixed potential race conditions in the App worker by initializing
Neo.appsmaps early and optimizing window-specific events (onVisibilityChange,onOrientationChange) to use direct lookups. (Issue #7827) - UUID Window IDs: Moved from timestamp-based IDs to
crypto.randomUUID()for robust, collision-free window identification. (Issue #7828) - SSR Optimization: The
Stylesheetaddon now intelligently skips FontAwesome and global theme loading during Server-Side Rendering to prevent redundant network requests. (Issue #7829)
🛡️ Robust AI Infrastructure
- Hybrid Database Lifecycle: Refactored the database services to support External, Managed, and Shared modes without deadlocks. (Issue #7836)
- JSON Parsing Resilience: The Session Service now gracefully handles and strips Markdown code blocks from LLM responses, ensuring reliable JSON parsing. (Issue #7825, #7826)
- Schema & Backup fixes: Fixed schema validation errors in the
list_issuestool and enabled programmable database backups via the SDK. (Issue #7839, #7841)
📦 Full Changelog
- [MCP] Support issue comments in create_comment tool (Issue #7821)
- Optimize highlight.js build to skip unnecessary regeneration (Issue #7823)
- Neo.ai.mcp.server.github-workflow.services: alphabetical method ordering (Issue #7824)
- Fix JSON parsing in SessionService summarization (Issue #7825)
- Extract JSON parsing logic into Neo.util.Json (Issue #7826)
- Initialize Neo.apps in App worker and optimize window-specific events (Issue #7827)
- Use crypto.randomUUID() for windowId generation (Issue #7828)
- Optimize Stylesheet addon for SSR mode (Issue #7829)
- Exploration: Enable AI Agent Code Execution with Standalone AI SDK (Issue #7831)
- Expansion: Unified AI SDK for Memory and GitHub Services (Issue #7832)
- Demo: Self-Healing Repository Script (Agent OS) (Issue #7833)
- Refactor: Robust Hybrid Database Lifecycle for AI Services (Issue #7836)
- Cleanup redundant awaits in self-healing example (Issue #7837)
- Fix ChromaDB warning: No embedding function configuration found (Issue #7838)
- Enhance AI SDK: Fix ChromaDB warnings and enable programmable backups (Issue #7839)
- Optimize SessionService.summarizeSessions with Promise.all (Issue #7840)
- Fix list_issues tool schema validation error (Issue #7841)
- examples.tableFiltering: changing the operator and then the number value for "lucky number" does not honor the new operator (Issue #7842)
- [AI] Implement Runtime Type Safety for AI SDK via OpenAPI Wrappers (Issue #7843)
All changes in 1 commit: db234f9
Neo.mjs v11.7.0 Release Notes
This release introduces a foundational architectural enhancement for multi-window application support, refactoring core systems to rely on windowId instead of appName. This change enables multiple instances of the same application to coexist across different windows without conflict, a critical requirement for advanced desktop-like web experiences. We have also significantly expanded our AI-Native capabilities, documenting the use of custom MCP servers and the latest Gemini models.
✨ Highlights
🖥️ Multi-Window Architecture Refactoring
- Neo.apps by Window ID: The central
Neo.appsregistry has been refactored to key applications by their uniquewindowIdrather than theirappName. This solves a critical issue where multiple instances of the same app (e.g., in a shared worker context) would overwrite each other. A newNeo.appsByNameregistry has been introduced to look up apps by name when needed. (Issue #7820) - Precision DOM Updates: The
Neo.applyDeltasmethod has been updated to acceptwindowIdinstead ofappName. This ensures that DOM updates—such as those triggered by plugins or direct manipulations—are routed to the correct browser window, eliminating ambiguity in multi-window setups. (Issue #7822) - Robust Cross-Window Communication: Child apps (like the SharedDialog demos) now correctly identify their specific parent window instance using
openerId, ensuring reliable communication even when multiple parent instances exist.
🤖 AI-Native Development & Documentation
- "I Am Gemini 3": We've published a comprehensive blog post detailing how Neo.mjs is built using a "Team of AI Agents" architecture. This post showcases the power of our custom MCP servers (
knowledge-base,memory-core,github-workflow) and how they enable high-velocity, architectural evolution. (Issue #7817) - Tooling Visibility: The blog post was updated to highlight the importance of the
chrome-devtoolsMCP server, bridging the gap between high-level code abstractions and runtime DOM reality. (Issue #7818)
🧪 Testing Suite Updates
- Test Context Alignment: The Playwright test suite
setup.mjshas been updated to align with the newwindowId-based architecture, ensuring unit tests run with a valid window context (defaulting to1). This prevents regressions and ensures our tests accurately reflect the new multi-window reality. (Issue #7822)
📦 Full Changelog
- Blog: I Am Gemini 3. I Am Not a Chatbot. I Am a Contributor. (Issue #7817)
- Blog Update: Add chrome-devtools to MCP tooling list (Issue #7818)
- Add the Gemini 3 blog post to the portal app (Issue #7819)
- Refactor Neo.apps to support multi-window instances (Issue #7820)
- Refactor Neo.applyDeltas to use windowId instead of appName (Issue #7822)
All changes in 1 commit: 97180f5
Neo.mjs v11.6.1 Release Notes
This patch release focuses on critical stability improvements, regression fixes, and architectural enhancements to the MCP server infrastructure.
✨ Highlights
🛡️ Security & Stability
- Race Condition Fix: Resolved a race condition where the App Worker could attempt to use Main Thread remote methods (like
Stylesheet) before they were fully registered.Neo.Mainnow deterministic awaits the initialization of all addons before signaling readiness to the Worker Manager. (Issue #7815) - XSS Mitigation: Refactored
labelTextandvalueLabelinCheckBoxandTextFieldto strictly separate text content from VDOM structures. The unsafe use of.html(innerHTML) has been removed in favor of a secure VDOM-based approach. (Issue #7812, #7813)
🐛 Regression Fixes
- Layout Bindings: Restored the ability to use data bindings on layout configurations (e.g.,
bind: {activeIndex: ...}) by replacing the deprecatedparseConfigmethod with the newcreateBindingsAPI insrc/layout/Base.mjs. (Issue #7814) - Value Label Rendering: Fixed a regression in
Neo.filter.BooleanContainerwhere icons were rendering as escaped strings instead of HTML elements. ThevalueLabelconfig now supports VDOM objects and arrays for rich content. (Issue #7812)
🤖 MCP Server Updates
- API Compliance: Updated all MCP servers (GitHub Workflow, Memory Core, Knowledge Base) to use the new
McpServerclass from the SDK, resolving deprecation warnings. (Issue #7808) - Dynamic Versioning: Servers now dynamically pull their version from
package.jsoninstead of using a hardcoded value. (Issue #7809) - Configurable Models: The Gemini model name in
SessionServiceis now configurable viaconfig.mjs. (Issue #7811) - Data Path Clarity: Renamed ChromaDB data directories to
chroma-neo-knowledge-baseandchroma-neo-memory-corefor better clarity and consistency. (Issue #7810)
🛠️ Build Tooling
- Webpack Warnings: Suppressed a "Critical dependency" warning in
HighlightJs.mjsby explicitly ignoring the dynamic import of the runtime library. (Issue #7816)
📦 Full Changelog
- Refactor: Rename Server to McpServer in MCP implementations (Issue #7808)
- Refactor: Use npm package version in MCP servers (Issue #7809)
- Refactor: Rename ChromaDB data directories for clarity (Issue #7810)
- Refactor: Move hardcoded Gemini model name to config in SessionService (Issue #7811)
- Fix regression: Enable HTML rendering in form field labels (valueLabel) (Issue #7812)
- Refactor: Enhance labelText to support VDOM and remove innerHTML usage (Issue #7813)
- Fix regression: Replace deprecated parseConfig with createBindings in Layout.mjs (Issue #7814)
- Fix race condition: Await addon initialization in Neo.Main (Issue #7815)
- Fix Webpack critical dependency warning in HighlightJs dynamic import (Issue #7816)
All changes in 1 commit: eae4b0e
Neo.mjs v11.6.0 Release Notes
This release introduces significant enhancements to the configurability and robustness of our MCP (Model Context Protocol) servers, making them more flexible for diverse deployment scenarios. It also includes critical stability fixes for the Memory Core and a major architectural improvement for Server-Side Rendering (SSR) hydration.
✨ Highlights
🚀 SSR Hydration Stability & Self-Healing
- VNode ID Namespacing: We have implemented a robust namespacing strategy for server-generated VNodes (
neo-ssr-vnode-X). This critical change decouples server-side ID generation from client-side counters. - Improved Hydration: Previously, discrepancies between server data (e.g., a store with 10 items) and client data (e.g., the same store loading 20 items) could lead to DOM ID collisions and hydration failures. By using namespaced IDs for the initial SSR render, the client can safely "take over" the existing DOM, sync it into the Virtual DOM, and perform self-healing patches without conflicts. This ensures a seamless transition from static HTML to a fully interactive application, even when data states diverge. (Issue #7800, #7798)
🤖 MCP Server Configurability & Architecture
- Standardized CLI & Configuration: We have unified the startup architecture across all three MCP servers (GitHub Workflow, Memory Core, Knowledge Base). Each server now uses
commanderfor robust CLI argument parsing, supporting:--config <path>: Load a custom configuration file (JSON or JS/MJS).--debug: Enable debug logging via a standardized flag.- Proxy-based Config: Implemented a clean architectural pattern separating the configuration service from the data, ensuring safe and extensible access to config values. (Issue #7802, #7803, #7804, #7805, #7801)
🧠 Memory Core Enhancements
- Robust Session Management: Fixed a critical stability issue where
add_memorywould fail if thesessionIdwas omitted. The server now intelligently auto-generates a session ID if one is not provided. - Session Visibility: The
healthcheckendpoint now exposes thecurrentSessionId, allowing agents to easily discover their session context. (Issue #7806)
🔄 Workflow Improvements
- Cleaner Issue Syncing: The
IssueSyncerservice has been improved to correctly strip the "Activity Log" section when pushing updates back to GitHub. This prevents read-only historical data from being duplicated or polluting the issue body on the remote. (Issue #7793) - Bug Fixes: Resolved a missing import in
IssueService. (Issue #7797)
🛠️ Core Framework Refactoring
- Configuration Cleanup: Removed deprecated configurations
Neo.config.isInsideSiesta(as we have fully migrated to Playwright) andNeo.config.isMiddleware. (Issue #7799, #7798)
📦 Full Changelog
- Neo.ai.mcp.server.github-workflow.services.sync.IssueSyncer: pushToGitHub() exclude activity log (Issue #7793)
- ai.mcp.server.github-workflow.services.IssueService: listIssues() uses 2 not imported constants (Issue #7797)
- Neo.config.isMiddleware (Issue #7798)
- Remove Neo.config.isInsideSiesta (Issue #7799)
- worker.Manager: createWorkers() => remove passing idCounter to the vdom worker (Issue #7800)
- Refactor services to use config directly instead of DEFAULT_QUERY_LIMITS (Issue #7801)
- Add CLI argument parsing to GitHub Workflow MCP Server (Issue #7802)
- Support --debug flag via commander in GitHub Workflow MCP Server (Issue #7803)
- Add CLI argument parsing and Config refactoring to Memory Core MCP Server (Issue #7804)
- Add CLI argument parsing and Config refactoring to Knowledge Base MCP Server (Issue #7805)
- Fix add_memory failure when sessionId is omitted (Issue #7806)
All changes in 1 commit: 28ef215
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: 176ad3a