neo.mjs 11.3.0 → 11.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/.sync-metadata.json +40 -15
- package/ServiceWorker.mjs +2 -2
- package/apps/portal/index.html +348 -18
- package/apps/portal/sitemap.xml +49 -1
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/buildScripts/generateSeoFiles.mjs +81 -1
- package/package.json +69 -43
- package/src/DefaultConfig.mjs +2 -2
- package/src/main/addon/DocumentHead.mjs +22 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"lastSync": "2025-11-
|
|
3
|
-
"releasesLastFetched": "2025-11-
|
|
2
|
+
"lastSync": "2025-11-15T13:00:05.810Z",
|
|
3
|
+
"releasesLastFetched": "2025-11-15T13:00:05.820Z",
|
|
4
4
|
"pushFailures": [],
|
|
5
5
|
"issues": {
|
|
6
6
|
"3789": {
|
|
@@ -3238,11 +3238,11 @@
|
|
|
3238
3238
|
"contentHash": "a1fa805f214faadb9c569eb237cd0d3b6fcf56638f7c5b4426a505309a8b479b"
|
|
3239
3239
|
},
|
|
3240
3240
|
"7249": {
|
|
3241
|
-
"state": "
|
|
3241
|
+
"state": "CLOSED",
|
|
3242
3242
|
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7249.md",
|
|
3243
|
-
"closedAt":
|
|
3244
|
-
"updatedAt": "2025-
|
|
3245
|
-
"contentHash": "
|
|
3243
|
+
"closedAt": "2025-11-15T09:45:18Z",
|
|
3244
|
+
"updatedAt": "2025-11-15T09:45:18Z",
|
|
3245
|
+
"contentHash": "4036e122ae18e253a64675831ea5c0ec2c585f7ac826a4e6373781763bebcfd3"
|
|
3246
3246
|
},
|
|
3247
3247
|
"7250": {
|
|
3248
3248
|
"state": "CLOSED",
|
|
@@ -4540,11 +4540,11 @@
|
|
|
4540
4540
|
"contentHash": "136f4d56fd536eca1a0297d5d52f17855a325623aac845bf875353a110530077"
|
|
4541
4541
|
},
|
|
4542
4542
|
"7489": {
|
|
4543
|
-
"state": "
|
|
4543
|
+
"state": "CLOSED",
|
|
4544
4544
|
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7489.md",
|
|
4545
|
-
"closedAt":
|
|
4546
|
-
"updatedAt": "2025-
|
|
4547
|
-
"contentHash": "
|
|
4545
|
+
"closedAt": "2025-11-15T09:44:33Z",
|
|
4546
|
+
"updatedAt": "2025-11-15T09:44:33Z",
|
|
4547
|
+
"contentHash": "423007a56532f4d57142bb685125f9f5e7bf1a3749370d1c7267cc945e48d37c"
|
|
4548
4548
|
},
|
|
4549
4549
|
"7491": {
|
|
4550
4550
|
"state": "CLOSED",
|
|
@@ -6326,38 +6326,59 @@
|
|
|
6326
6326
|
},
|
|
6327
6327
|
"7769": {
|
|
6328
6328
|
"state": "CLOSED",
|
|
6329
|
-
"path": "/Users/Shared/github/neomjs/neo/.github/
|
|
6329
|
+
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.3.0/issue-7769.md",
|
|
6330
6330
|
"closedAt": "2025-11-13T22:12:31Z",
|
|
6331
6331
|
"updatedAt": "2025-11-13T22:12:31Z",
|
|
6332
6332
|
"contentHash": "7c2a6b46c1de475ba4a5c585d2f8fa397aa7bceb8e86767906145c9cd0c33219"
|
|
6333
6333
|
},
|
|
6334
6334
|
"7770": {
|
|
6335
6335
|
"state": "CLOSED",
|
|
6336
|
-
"path": "/Users/Shared/github/neomjs/neo/.github/
|
|
6336
|
+
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.3.0/issue-7770.md",
|
|
6337
6337
|
"closedAt": "2025-11-13T22:17:28Z",
|
|
6338
6338
|
"updatedAt": "2025-11-13T22:17:28Z",
|
|
6339
6339
|
"contentHash": "7575cb7f05c4aa45189926563059610b8588fc7e6455a4f2a4bb9e030d188f9e"
|
|
6340
6340
|
},
|
|
6341
6341
|
"7771": {
|
|
6342
6342
|
"state": "CLOSED",
|
|
6343
|
-
"path": "/Users/Shared/github/neomjs/neo/.github/
|
|
6343
|
+
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.3.0/issue-7771.md",
|
|
6344
6344
|
"closedAt": "2025-11-13T22:54:46Z",
|
|
6345
6345
|
"updatedAt": "2025-11-13T22:54:46Z",
|
|
6346
6346
|
"contentHash": "262498b1110113a15db6536f3fe79d8eff910724095bfdf166b5fb885766bd7d"
|
|
6347
6347
|
},
|
|
6348
6348
|
"7772": {
|
|
6349
6349
|
"state": "CLOSED",
|
|
6350
|
-
"path": "/Users/Shared/github/neomjs/neo/.github/
|
|
6350
|
+
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.3.0/issue-7772.md",
|
|
6351
6351
|
"closedAt": "2025-11-14T11:41:20Z",
|
|
6352
6352
|
"updatedAt": "2025-11-14T11:41:20Z",
|
|
6353
6353
|
"contentHash": "59a12299ce0880d4942ee5509f3f8935c1306bcec067997dbbd7f758dcb1d13c"
|
|
6354
6354
|
},
|
|
6355
6355
|
"7773": {
|
|
6356
6356
|
"state": "CLOSED",
|
|
6357
|
-
"path": "/Users/Shared/github/neomjs/neo/.github/
|
|
6357
|
+
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE_ARCHIVE/11.3.0/issue-7773.md",
|
|
6358
6358
|
"closedAt": "2025-11-14T15:01:57Z",
|
|
6359
6359
|
"updatedAt": "2025-11-14T15:01:57Z",
|
|
6360
6360
|
"contentHash": "41b089e9c0e49db562fd044c6e66f3bafd89cc9f2e5cb2b29cf8658886d2650c"
|
|
6361
|
+
},
|
|
6362
|
+
"7775": {
|
|
6363
|
+
"state": "CLOSED",
|
|
6364
|
+
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7775.md",
|
|
6365
|
+
"closedAt": "2025-11-15T09:41:42Z",
|
|
6366
|
+
"updatedAt": "2025-11-15T09:41:42Z",
|
|
6367
|
+
"contentHash": "4657193d7084aa82709796c45c1b3a0f5d06d14ef9fa6f1d7d4941a8d744325f"
|
|
6368
|
+
},
|
|
6369
|
+
"7776": {
|
|
6370
|
+
"state": "CLOSED",
|
|
6371
|
+
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7776.md",
|
|
6372
|
+
"closedAt": "2025-11-15T12:30:46Z",
|
|
6373
|
+
"updatedAt": "2025-11-15T12:30:46Z",
|
|
6374
|
+
"contentHash": "09aa6166ff62f457cdad47c69025b57d0843e0f6f17840ddc1138293cdeb1ad3"
|
|
6375
|
+
},
|
|
6376
|
+
"7777": {
|
|
6377
|
+
"state": "CLOSED",
|
|
6378
|
+
"path": "/Users/Shared/github/neomjs/neo/.github/ISSUE/issue-7777.md",
|
|
6379
|
+
"closedAt": "2025-11-15T12:51:55Z",
|
|
6380
|
+
"updatedAt": "2025-11-15T12:51:55Z",
|
|
6381
|
+
"contentHash": "0946c291adc1caa5adf38c109ab8f0be915fc7d6a438fac4c39df4009122d73a"
|
|
6361
6382
|
}
|
|
6362
6383
|
},
|
|
6363
6384
|
"releases": {
|
|
@@ -6516,6 +6537,10 @@
|
|
|
6516
6537
|
"11.2.0": {
|
|
6517
6538
|
"publishedAt": "2025-11-13T13:36:25Z",
|
|
6518
6539
|
"contentHash": "2cfc4b0c38c71ec9058af53248b522da9960d48f8d7abfaae0de7e70596b49c6"
|
|
6540
|
+
},
|
|
6541
|
+
"11.3.0": {
|
|
6542
|
+
"publishedAt": "2025-11-14T15:35:01Z",
|
|
6543
|
+
"contentHash": "1ef00564052ebc80568c4677df4414fa38e922d02e251f43da9fd876562b11fb"
|
|
6519
6544
|
}
|
|
6520
6545
|
}
|
|
6521
6546
|
}
|
package/ServiceWorker.mjs
CHANGED
package/apps/portal/index.html
CHANGED
|
@@ -6,24 +6,354 @@
|
|
|
6
6
|
<title>Neo.mjs</title>
|
|
7
7
|
<meta name="description" content="Solve your toughest UI performance challenges with Neo.mjs: a multi-threaded JavaScript platform for extreme real-time web applications, complex dashboards, and unmatched developer productivity.">
|
|
8
8
|
<meta name="robots" content="index, follow">
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
9
|
+
<!-- Schema 1: Neo.mjs as a Runtime Framework -->
|
|
10
|
+
<script type="application/ld+json" data-schema-name="runtime-framework">
|
|
11
|
+
{
|
|
12
|
+
"@context": "https://schema.org",
|
|
13
|
+
"@type": "SoftwareApplication",
|
|
14
|
+
"name": "Neo.mjs",
|
|
15
|
+
"alternateName": "Neo.mjs Framework",
|
|
16
|
+
"url": "https://neomjs.com/",
|
|
17
|
+
"description": "Multi-threaded JavaScript framework for real-time web applications, trading dashboards, and multi-window interfaces. Built on web workers with zero-build development mode.",
|
|
18
|
+
"applicationCategory": "JavaScript Framework",
|
|
19
|
+
"operatingSystem": "Web Browser",
|
|
20
|
+
"offers": {
|
|
21
|
+
"@type": "Offer",
|
|
22
|
+
"price": "0",
|
|
23
|
+
"priceCurrency": "USD"
|
|
24
|
+
},
|
|
25
|
+
"author": {
|
|
26
|
+
"@type": "Organization",
|
|
27
|
+
"name": "Neo.mjs",
|
|
28
|
+
"url": "https://neomjs.com"
|
|
29
|
+
},
|
|
30
|
+
"sameAs": [
|
|
31
|
+
"https://github.com/neomjs/neo",
|
|
32
|
+
"https://www.npmjs.com/package/neo.mjs",
|
|
33
|
+
"https://discord.gg/6p8paPq",
|
|
34
|
+
"https://www.linkedin.com/company/neo-mjs/"
|
|
35
|
+
],
|
|
36
|
+
"citation": [
|
|
37
|
+
{
|
|
38
|
+
"@type": "CreativeWork",
|
|
39
|
+
"name": "Benchmarking Frontends in 2025: Stop Measuring Page Loads, Start Measuring Resilience",
|
|
40
|
+
"url": "https://neomjs.com/#/learn/blog/benchmarking-frontends-2025",
|
|
41
|
+
"description": "Empirical performance data showing Neo.mjs 7-11x faster than React+AG Grid for large-scale data operations, maintaining perfect 60 FPS under concurrent load while competitors freeze.",
|
|
42
|
+
"keywords": ["performance benchmarks", "data grid performance", "UI resilience", "main thread bottleneck", "multi-threading advantage", "empirical data"]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"@type": "CreativeWork",
|
|
46
|
+
"name": "How JSON Blueprints & Shared Workers Power Next-Gen AI Interfaces",
|
|
47
|
+
"url": "https://neomjs.com/#/learn/blog/json-blueprints-and-shared-workers",
|
|
48
|
+
"description": "Why JSON is the superior UI definition language for modern interfaces, and how Neo.mjs leverages HTTP/3 with unbundled ES modules for production deployments.",
|
|
49
|
+
"keywords": ["JSON blueprints", "HTML streaming alternative", "HTTP/3", "QUIC", "unbundled deployment", "zero-build", "dist/esm", "shared workers", "multi-window applications"]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"@type": "CreativeWork",
|
|
53
|
+
"name": "The VDOM Revolution: From JSON Blueprints to Flawless UI",
|
|
54
|
+
"url": "https://neomjs.com/#/learn/blog/v10-deep-dive-vdom-revolution",
|
|
55
|
+
"description": "How Neo.mjs uses asymmetric rendering with JSON blueprints to create secure and performance-optimized UIs off the main thread, eliminating XSS vulnerabilities by default.",
|
|
56
|
+
"keywords": ["JSON blueprints", "asymmetric VDOM", "off-thread rendering", "secure by default", "XSS prevention", "DomApiRenderer"]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"@type": "CreativeWork",
|
|
60
|
+
"name": "Designing a State Manager for Performance: Hierarchical Reactivity",
|
|
61
|
+
"url": "https://neomjs.com/#/learn/blog/v10-deep-dive-state-provider",
|
|
62
|
+
"description": "Neo.mjs's hierarchical state management eliminates the React Context performance tax through fine-grained reactivity executed in web workers.",
|
|
63
|
+
"keywords": ["state management", "hierarchical reactivity", "context API alternative", "performance optimization", "zero memoization tax"]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"@type": "CreativeWork",
|
|
67
|
+
"name": "Deep Dive: Named vs. Anonymous State - A New Era of Component Reactivity",
|
|
68
|
+
"url": "https://neomjs.com/#/learn/blog/v10-deep-dive-reactivity",
|
|
69
|
+
"description": "The two-tier reactivity system that unifies push and pull paradigms, eliminating the need for useMemo and useCallback while providing direct mutability with immutable update pipelines.",
|
|
70
|
+
"keywords": ["reactivity system", "two-tier reactivity", "named configs", "anonymous configs", "push-pull paradigm", "memoization-free"]
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"featureList": [
|
|
74
|
+
"Multi-threaded architecture using Web Workers",
|
|
75
|
+
"Native multi-window application support with shared workers",
|
|
76
|
+
"Zero-build development mode: no bundlers or HMR needed, just reload the page",
|
|
77
|
+
"Live-code editing and app creation directly in the browser's dev tools console",
|
|
78
|
+
"Simplified debugging: the browser uses your source code directly, no source maps needed",
|
|
79
|
+
"JSON-based component definitions (no JSX compilation)",
|
|
80
|
+
"Real-time data handling off the main thread",
|
|
81
|
+
"Enterprise-grade component library",
|
|
82
|
+
"Multi-monitor trading dashboard support",
|
|
83
|
+
"Multi-window IDE support (browser-based development environments)",
|
|
84
|
+
"Multi-window email clients (Outlook-like experiences in the browser)",
|
|
85
|
+
"Multi-window LLM interfaces (chat across multiple screens)",
|
|
86
|
+
"Jank-free UI regardless of workload",
|
|
87
|
+
"HTTP/3 and QUIC ready for efficient network performance",
|
|
88
|
+
"Advanced service worker with predictive caching and version-based cache clearing"
|
|
89
|
+
],
|
|
90
|
+
"keywords": [
|
|
91
|
+
"angular-alternative",
|
|
92
|
+
"browser-based-ide",
|
|
93
|
+
"browser-email-client",
|
|
94
|
+
"css",
|
|
95
|
+
"data-visualization",
|
|
96
|
+
"desktop-class-web-applications",
|
|
97
|
+
"desktop-like",
|
|
98
|
+
"developer-productivity",
|
|
99
|
+
"dynamic-imports",
|
|
100
|
+
"ecmascript",
|
|
101
|
+
"enterprise",
|
|
102
|
+
"esm-production",
|
|
103
|
+
"framework",
|
|
104
|
+
"frontend",
|
|
105
|
+
"html-streaming-alternative",
|
|
106
|
+
"http3",
|
|
107
|
+
"javascript",
|
|
108
|
+
"json",
|
|
109
|
+
"json-blueprints",
|
|
110
|
+
"monaco-editor",
|
|
111
|
+
"multi-threaded",
|
|
112
|
+
"multi-window",
|
|
113
|
+
"multi-window-applications",
|
|
114
|
+
"multi-window-ide",
|
|
115
|
+
"native-like",
|
|
116
|
+
"no-bundling",
|
|
117
|
+
"no-jank",
|
|
118
|
+
"no-transpilation",
|
|
119
|
+
"offscreencanvas",
|
|
120
|
+
"outlook-alternative-browser",
|
|
121
|
+
"performance",
|
|
122
|
+
"pwa",
|
|
123
|
+
"predictive-caching",
|
|
124
|
+
"progressive-web-app",
|
|
125
|
+
"quic",
|
|
126
|
+
"react-alternative",
|
|
127
|
+
"realtime",
|
|
128
|
+
"scalability",
|
|
129
|
+
"security",
|
|
130
|
+
"sharedworker",
|
|
131
|
+
"single-page-application",
|
|
132
|
+
"smooth-ui",
|
|
133
|
+
"spa",
|
|
134
|
+
"ssg-json",
|
|
135
|
+
"trading-dashboard-framework",
|
|
136
|
+
"ui-responsiveness",
|
|
137
|
+
"virtual-dom",
|
|
138
|
+
"vue-alternative",
|
|
139
|
+
"web-app",
|
|
140
|
+
"web-based-email-client",
|
|
141
|
+
"web-based-ide",
|
|
142
|
+
"webworker",
|
|
143
|
+
"xss-resistant",
|
|
144
|
+
"zero-build-development"
|
|
145
|
+
],
|
|
146
|
+
"screenshot": "https://neomjs.com/resources/images/neo-screenshot.png",
|
|
147
|
+
"programmingLanguage": "JavaScript",
|
|
148
|
+
"runtimePlatform": "Web Browser"
|
|
149
|
+
}
|
|
150
|
+
</script>
|
|
151
|
+
|
|
152
|
+
<!-- Schema 2: Neo.mjs as an AI-Native Development Platform -->
|
|
153
|
+
<script type="application/ld+json" data-schema-name="ai-native-platform">
|
|
154
|
+
{
|
|
155
|
+
"@context": "https://schema.org",
|
|
156
|
+
"@type": "SoftwareApplication",
|
|
157
|
+
"name": "Neo.mjs AI-Native Development Platform",
|
|
158
|
+
"alternateName": "Neo.mjs",
|
|
159
|
+
"url": "https://neomjs.com/",
|
|
160
|
+
"description": "Solve your toughest UI performance challenges with Neo.mjs: an AI-native, multi-threaded JavaScript platform for extreme real-time web applications, complex dashboards, multi-window IDEs, browser-based email clients, multi-screen LLM interfaces, and unmatched developer productivity. Features three Model Context Protocol (MCP) servers for AI-powered development.",
|
|
161
|
+
"applicationCategory": "DeveloperApplication",
|
|
162
|
+
"operatingSystem": ["Windows", "macOS", "Linux"],
|
|
163
|
+
"offers": {
|
|
164
|
+
"@type": "Offer",
|
|
165
|
+
"price": "0",
|
|
166
|
+
"priceCurrency": "USD"
|
|
167
|
+
},
|
|
168
|
+
"author": {
|
|
169
|
+
"@type": "Organization",
|
|
170
|
+
"name": "Neo.mjs",
|
|
171
|
+
"url": "https://neomjs.com"
|
|
172
|
+
},
|
|
173
|
+
"sameAs": [
|
|
174
|
+
"https://github.com/neomjs/neo",
|
|
175
|
+
"https://www.npmjs.com/package/neo.mjs",
|
|
176
|
+
"https://discord.gg/6p8paPq",
|
|
177
|
+
"https://www.linkedin.com/company/neo-mjs/"
|
|
178
|
+
],
|
|
179
|
+
"featureList": [
|
|
180
|
+
"AI-native architecture with three dedicated MCP servers",
|
|
181
|
+
"Local AI Knowledge Base with semantic search (ChromaDB + Gemini embeddings)",
|
|
182
|
+
"Memory Core for agent learning and session continuity",
|
|
183
|
+
"GitHub Workflow Server for autonomous PR reviews",
|
|
184
|
+
"Context engineering with RAG (Retrieval-Augmented Generation)",
|
|
185
|
+
"Agent-agnostic protocol supporting Claude, Gemini, and custom AI agents",
|
|
186
|
+
"Self-documenting codebase with automated JSDoc analysis",
|
|
187
|
+
"Zero-build development eliminating bundler complexity",
|
|
188
|
+
"Multi-threaded JavaScript preventing UI blocking",
|
|
189
|
+
"JSON Blueprint architecture for AI-parseable component definitions",
|
|
190
|
+
"dist/esm build for unbundled, HTTP/3-ready production deployments",
|
|
191
|
+
"Dynamic ES module imports for on-demand loading of AI-generated UI components",
|
|
192
|
+
"JSON blueprints as a lightweight alternative to HTML streaming for AI-driven UIs"
|
|
193
|
+
],
|
|
194
|
+
"softwareRequirements": "Node.js, ChromaDB, GitHub CLI (optional)",
|
|
195
|
+
"releaseNotes": "https://github.com/neomjs/neo/releases",
|
|
196
|
+
"downloadUrl": "https://github.com/neomjs/neo",
|
|
197
|
+
"installUrl": "https://github.com/neomjs/neo#installation",
|
|
198
|
+
"screenshot": "https://raw.githubusercontent.com/neomjs/pages/master/resources_pub/website/blog/ContextEngineering.png",
|
|
199
|
+
"citation": [
|
|
200
|
+
{
|
|
201
|
+
"@type": "CreativeWork",
|
|
202
|
+
"name": "388 Tickets in 6 Weeks: Context Engineering Done Right",
|
|
203
|
+
"url": "https://neomjs.com/#/learn/blog/context-engineering-done-right",
|
|
204
|
+
"description": "How Neo.mjs achieved impossible development velocity with three dedicated MCP servers: Knowledge Base with semantic search, Memory Core for agent learning, and GitHub Workflow Server for autonomous PR reviews.",
|
|
205
|
+
"keywords": ["context engineering", "MCP servers", "AI development", "knowledge base", "autonomous code review", "agent memory", "GitHub automation", "388 tickets"]
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"@type": "CreativeWork",
|
|
209
|
+
"name": "AI-Native, Not AI-Assisted: A Platform That Answers Your Questions",
|
|
210
|
+
"url": "https://neomjs.com/#/learn/blog/ai-native-platform-answers-questions",
|
|
211
|
+
"description": "Inside the conversational code architecture of Neo.mjs and how it changes developer experience through semantic search, RAG knowledge base, and formal agent protocols.",
|
|
212
|
+
"keywords": ["AI-native development", "semantic code search", "RAG knowledge base", "agent protocol", "retrieval-augmented generation", "ChromaDB", "Gemini embeddings"]
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"@type": "CreativeWork",
|
|
216
|
+
"name": "How JSON Blueprints & Shared Workers Power Next-Gen AI Interfaces",
|
|
217
|
+
"url": "https://neomjs.com/#/learn/blog/json-blueprints-and-shared-workers",
|
|
218
|
+
"description": "Why JSON is AI's native language for UI generation, enabling LLMs to create complex interfaces more reliably than HTML, with practical examples of server-side generation.",
|
|
219
|
+
"keywords": ["AI-generated UI", "JSON blueprints", "LLM UI generation", "AI-parseable components", "server-side generation", "SSG", "AI interfaces"]
|
|
220
|
+
}
|
|
221
|
+
],
|
|
222
|
+
"keywords": [
|
|
223
|
+
"ai-agents",
|
|
224
|
+
"ai-code-review",
|
|
225
|
+
"ai-interfaces",
|
|
226
|
+
"ai-native",
|
|
227
|
+
"context-engineering",
|
|
228
|
+
"gemini",
|
|
229
|
+
"genai",
|
|
230
|
+
"generative-ai",
|
|
231
|
+
"llm-ui-framework",
|
|
232
|
+
"low-code-ui",
|
|
233
|
+
"mcp",
|
|
234
|
+
"mcp-server",
|
|
235
|
+
"model-context-protocol",
|
|
236
|
+
"multi-screen-ai-chat",
|
|
237
|
+
"multi-window-llm-interface",
|
|
238
|
+
"next-gen-ai-interfaces",
|
|
239
|
+
"rag-knowledge-base",
|
|
240
|
+
"semantic-code-search"
|
|
241
|
+
]
|
|
242
|
+
}
|
|
243
|
+
</script>
|
|
244
|
+
|
|
245
|
+
<!-- FAQ Schema for Common Questions -->
|
|
246
|
+
<script type="application/ld+json" data-schema-name="faq">
|
|
247
|
+
{
|
|
248
|
+
"@context": "https://schema.org",
|
|
249
|
+
"@type": "FAQPage",
|
|
250
|
+
"mainEntity": [
|
|
251
|
+
{
|
|
252
|
+
"@type": "Question",
|
|
253
|
+
"name": "What makes Neo.mjs different from React, Angular, or Vue?",
|
|
254
|
+
"acceptedAnswer": {
|
|
255
|
+
"@type": "Answer",
|
|
256
|
+
"text": "Neo.mjs is fundamentally different in three ways: (1) It's AI-native from the ground up with three dedicated MCP servers for AI collaboration, (2) It uses true multi-threading via web workers, moving all application logic off the main thread for jank-free UI, and (3) It has native multi-window support with shared workers, making it ideal for trading platforms, multi-window IDEs, browser-based email clients like Outlook, multi-screen LLM interfaces, and multi-monitor applications. Unlike React/Angular/Vue which run single-threaded and require complex workarounds for multi-window apps, Neo.mjs was designed for these use cases from day one."
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"@type": "Question",
|
|
261
|
+
"name": "What is Neo.mjs best used for?",
|
|
262
|
+
"acceptedAnswer": {
|
|
263
|
+
"@type": "Answer",
|
|
264
|
+
"text": "Neo.mjs excels at multi-window applications including: financial trading platforms and dashboards, browser-based IDEs and development environments (the Neo.mjs website itself is a multi-window IDE), browser-based email clients that rival desktop applications like Outlook, multi-screen LLM and AI chat interfaces, real-time control rooms and monitoring systems, and any data-intensive application where UI responsiveness is critical. It's ideal for complex enterprise applications requiring 10k+ row data grids and guaranteed UI performance regardless of computational workload."
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"@type": "Question",
|
|
269
|
+
"name": "How does Neo.mjs support AI-powered development?",
|
|
270
|
+
"acceptedAnswer": {
|
|
271
|
+
"@type": "Answer",
|
|
272
|
+
"text": "Neo.mjs includes three Model Context Protocol (MCP) servers: (1) Knowledge Base Server with semantic search over the entire codebase using ChromaDB and Gemini embeddings, (2) Memory Core Server that gives AI agents persistent memory across sessions, and (3) GitHub Workflow Server for autonomous PR reviews and issue management. This enables AI agents like Claude or Gemini to understand the codebase deeply, learn from past decisions, and participate directly in development workflows."
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"@type": "Question",
|
|
277
|
+
"name": "What is the 'zero-build' development mode?",
|
|
278
|
+
"acceptedAnswer": {
|
|
279
|
+
"@type": "Answer",
|
|
280
|
+
"text": "Neo.mjs runs natively in browsers using ES modules without requiring webpack, vite, or any bundler during development. This eliminates the abstraction layer and build step, providing instant hot-reload and ensuring your code evolves with web standards rather than build tool configurations. Production builds are available but optional."
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"@type": "Question",
|
|
285
|
+
"name": "How does Neo.mjs handle multi-window applications?",
|
|
286
|
+
"acceptedAnswer": {
|
|
287
|
+
"@type": "Answer",
|
|
288
|
+
"text": "Neo.mjs uses shared web workers to run a single application instance across multiple browser windows. All windows share the same application state and data in real-time. Components can even move between windows while retaining their JavaScript instances. This enables desktop-class experiences like multi-window IDEs (the Neo.mjs portal itself demonstrates this), browser-based email clients that match Outlook's multi-window capabilities, and multi-screen LLM chat interfaces. This is native functionality, not a third-party add-on, making it ideal for financial trading platforms, creative suites, and any application benefiting from multi-monitor workflows."
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"@type": "Question",
|
|
293
|
+
"name": "Why use JSON instead of JSX for components?",
|
|
294
|
+
"acceptedAnswer": {
|
|
295
|
+
"@type": "Answer",
|
|
296
|
+
"text": "JSON-based component definitions (JSON Blueprints) are immediately parseable by AI agents without requiring knowledge of JSX syntax or build tools. They're native JavaScript data structures, not a custom templating language that needs transpilation. This makes the codebase more transparent to AI, enables better tooling, and eliminates the need for Babel/SWC during development. For AI-native development, this transparency is critical."
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"@type": "Question",
|
|
301
|
+
"name": "Can I use Neo.mjs without AI agents?",
|
|
302
|
+
"acceptedAnswer": {
|
|
303
|
+
"@type": "Answer",
|
|
304
|
+
"text": "Absolutely. The AI-native architecture benefits human developers too: semantic code search helps you find relevant examples, the knowledge base serves as intelligent documentation, and the zero-build workflow provides instant feedback. The MCP servers are optional tools that enhance productivity but aren't required to build applications."
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"@type": "Question",
|
|
309
|
+
"name": "Can Neo.mjs build browser-based IDEs and email clients?",
|
|
310
|
+
"acceptedAnswer": {
|
|
311
|
+
"@type": "Answer",
|
|
312
|
+
"text": "Yes. Neo.mjs's multi-window architecture with shared state makes it uniquely suited for complex applications like browser-based IDEs (the Neo.mjs portal website is itself a multi-window IDE demonstrating this capability) and email clients that rival desktop applications like Outlook. Unlike traditional frameworks that struggle with multi-window state synchronization, Neo.mjs was designed from the ground up for these use cases, with components that can move between windows while maintaining their state and instances."
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"@type": "Question",
|
|
317
|
+
"name": "How does Neo.mjs handle multi-screen LLM and AI chat interfaces?",
|
|
318
|
+
"acceptedAnswer": {
|
|
319
|
+
"@type": "Answer",
|
|
320
|
+
"text": "Neo.mjs is ideal for multi-screen LLM interfaces where you might have chat conversations on one monitor, document analysis on another, and tool outputs on a third. All windows share the same application state via shared web workers, ensuring real-time synchronization. The multi-threaded architecture ensures that processing LLM responses, streaming tokens, or running complex AI operations never blocks the UI, maintaining smooth interactions across all screens."
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"@type": "Question",
|
|
325
|
+
"name": "What's the performance difference with multi-threading?",
|
|
326
|
+
"acceptedAnswer": {
|
|
327
|
+
"@type": "Answer",
|
|
328
|
+
"text": "By running application logic in a separate web worker, the main thread remains dedicated solely to rendering. This means complex operations like sorting 10,000 rows, processing real-time data feeds, or running expensive calculations cannot block or slow down the UI. Traditional single-threaded frameworks like React can freeze the UI during heavy computations. Neo.mjs guarantees smooth 60fps UI regardless of application workload."
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"@type": "Question",
|
|
333
|
+
"name": "How does Neo.mjs leverage modern web standards like HTTP/3?",
|
|
334
|
+
"acceptedAnswer": {
|
|
335
|
+
"@type": "Answer",
|
|
336
|
+
"text": "Neo.mjs is designed for the future of the web. It features a 'dist/esm' build that serves each component as a separate, minified ES module, completely avoiding traditional bundling. This architecture is optimized for HTTP/3 and QUIC, which eliminate head-of-line blocking and make it highly efficient to load many small files. This results in faster, more modular, and more cacheable applications, moving away from monolithic bundles and embracing the native module system of the browser."
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"@type": "Question",
|
|
341
|
+
"name": "How does Neo.mjs compare to traditional Server-Side Rendering (SSR) or HTML streaming?",
|
|
342
|
+
"acceptedAnswer": {
|
|
343
|
+
"@type": "Answer",
|
|
344
|
+
"text": "Instead of streaming HTML from the server, Neo.mjs uses a 'JSON Blueprint' approach. The server sends a lightweight JSON object that describes the UI, and the powerful client-side engine constructs the components. This is far more efficient for complex, interactive applications, as it drastically reduces payload size and offloads rendering work from the server. It's similar to how JSON replaced XML for APIs—a more efficient and modern way to communicate structured data for rich applications."
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"@type": "Question",
|
|
349
|
+
"name": "What is the role of the Service Worker in Neo.mjs?",
|
|
350
|
+
"acceptedAnswer": {
|
|
351
|
+
"@type": "Answer",
|
|
352
|
+
"text": "The Neo.mjs Service Worker is a key part of its performance strategy. It goes beyond simple asset caching, offering version-based cache clearing, predictive caching of assets for future user actions, and granular cache management instructed by the App Worker. This ensures that all application modules, including shared workers and third-party libraries, are served with near-zero latency after the initial load, enabling an instant-on experience for users."
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
]
|
|
356
|
+
}
|
|
27
357
|
</script>
|
|
28
358
|
<link rel="icon" href="./resources/images/neo_logo_favicon.svg">
|
|
29
359
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Source+Sans+3:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,500;0,8..60,600;0,8..60,700;1,8..60,400;1,8..60,500;1,8..60,600;1,8..60,700&display=swap">
|
package/apps/portal/sitemap.xml
CHANGED
|
@@ -3,26 +3,32 @@
|
|
|
3
3
|
<url>
|
|
4
4
|
<loc>https://neomjs.com/#/about-us</loc>
|
|
5
5
|
<lastmod>2025-11-14T12:41:08+01:00</lastmod>
|
|
6
|
+
<priority>0.7</priority>
|
|
6
7
|
</url>
|
|
7
8
|
<url>
|
|
8
9
|
<loc>https://neomjs.com/#/blog</loc>
|
|
9
10
|
<lastmod>2025-11-14T12:41:08+01:00</lastmod>
|
|
11
|
+
<priority>0.8</priority>
|
|
10
12
|
</url>
|
|
11
13
|
<url>
|
|
12
14
|
<loc>https://neomjs.com/#/docs</loc>
|
|
13
15
|
<lastmod>2025-11-14T12:41:08+01:00</lastmod>
|
|
16
|
+
<priority>0.9</priority>
|
|
14
17
|
</url>
|
|
15
18
|
<url>
|
|
16
19
|
<loc>https://neomjs.com/#/examples</loc>
|
|
17
20
|
<lastmod>2025-11-14T12:41:08+01:00</lastmod>
|
|
21
|
+
<priority>0.9</priority>
|
|
18
22
|
</url>
|
|
19
23
|
<url>
|
|
20
24
|
<loc>https://neomjs.com/#/home</loc>
|
|
21
25
|
<lastmod>2025-11-14T12:41:08+01:00</lastmod>
|
|
26
|
+
<priority>1.0</priority>
|
|
22
27
|
</url>
|
|
23
28
|
<url>
|
|
24
29
|
<loc>https://neomjs.com/#/services</loc>
|
|
25
30
|
<lastmod>2025-11-14T12:41:08+01:00</lastmod>
|
|
31
|
+
<priority>0.7</priority>
|
|
26
32
|
</url>
|
|
27
33
|
<url>
|
|
28
34
|
<loc>https://neomjs.com/#/learn/UsingTheseTopics</loc>
|
|
@@ -31,46 +37,57 @@
|
|
|
31
37
|
<url>
|
|
32
38
|
<loc>https://neomjs.com/#/learn/benefits/Introduction</loc>
|
|
33
39
|
<lastmod>2025-09-15T13:47:23+02:00</lastmod>
|
|
40
|
+
<priority>0.9</priority>
|
|
34
41
|
</url>
|
|
35
42
|
<url>
|
|
36
43
|
<loc>https://neomjs.com/#/learn/benefits/OffTheMainThread</loc>
|
|
37
44
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
45
|
+
<priority>0.9</priority>
|
|
38
46
|
</url>
|
|
39
47
|
<url>
|
|
40
48
|
<loc>https://neomjs.com/#/learn/benefits/FourEnvironments</loc>
|
|
41
49
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
50
|
+
<priority>0.9</priority>
|
|
42
51
|
</url>
|
|
43
52
|
<url>
|
|
44
53
|
<loc>https://neomjs.com/#/learn/benefits/ConfigSystem</loc>
|
|
45
54
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
55
|
+
<priority>0.9</priority>
|
|
46
56
|
</url>
|
|
47
57
|
<url>
|
|
48
58
|
<loc>https://neomjs.com/#/learn/benefits/RPCLayer</loc>
|
|
49
59
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
60
|
+
<priority>0.9</priority>
|
|
50
61
|
</url>
|
|
51
62
|
<url>
|
|
52
63
|
<loc>https://neomjs.com/#/learn/benefits/Speed</loc>
|
|
53
64
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
65
|
+
<priority>0.9</priority>
|
|
54
66
|
</url>
|
|
55
67
|
<url>
|
|
56
68
|
<loc>https://neomjs.com/#/learn/benefits/MultiWindow</loc>
|
|
57
69
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
70
|
+
<priority>0.9</priority>
|
|
58
71
|
</url>
|
|
59
72
|
<url>
|
|
60
73
|
<loc>https://neomjs.com/#/learn/benefits/Quick</loc>
|
|
61
74
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
75
|
+
<priority>0.9</priority>
|
|
62
76
|
</url>
|
|
63
77
|
<url>
|
|
64
78
|
<loc>https://neomjs.com/#/learn/benefits/Effort</loc>
|
|
65
79
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
80
|
+
<priority>0.9</priority>
|
|
66
81
|
</url>
|
|
67
82
|
<url>
|
|
68
83
|
<loc>https://neomjs.com/#/learn/benefits/FormsEngine</loc>
|
|
69
84
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
85
|
+
<priority>0.9</priority>
|
|
70
86
|
</url>
|
|
71
87
|
<url>
|
|
72
88
|
<loc>https://neomjs.com/#/learn/benefits/Features</loc>
|
|
73
89
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
90
|
+
<priority>0.9</priority>
|
|
74
91
|
</url>
|
|
75
92
|
<url>
|
|
76
93
|
<loc>https://neomjs.com/#/learn/comparisons/Overview</loc>
|
|
@@ -79,70 +96,87 @@
|
|
|
79
96
|
<url>
|
|
80
97
|
<loc>https://neomjs.com/#/learn/comparisons/NeoVsReact</loc>
|
|
81
98
|
<lastmod>2025-08-04T05:11:22+02:00</lastmod>
|
|
99
|
+
<priority>0.8</priority>
|
|
82
100
|
</url>
|
|
83
101
|
<url>
|
|
84
102
|
<loc>https://neomjs.com/#/learn/comparisons/NeoVsAngular</loc>
|
|
85
103
|
<lastmod>2025-08-04T05:11:22+02:00</lastmod>
|
|
104
|
+
<priority>0.8</priority>
|
|
86
105
|
</url>
|
|
87
106
|
<url>
|
|
88
107
|
<loc>https://neomjs.com/#/learn/comparisons/NeoVsVue</loc>
|
|
89
108
|
<lastmod>2025-08-04T05:11:22+02:00</lastmod>
|
|
109
|
+
<priority>0.8</priority>
|
|
90
110
|
</url>
|
|
91
111
|
<url>
|
|
92
112
|
<loc>https://neomjs.com/#/learn/comparisons/NeoVsSolid</loc>
|
|
93
113
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
114
|
+
<priority>0.8</priority>
|
|
94
115
|
</url>
|
|
95
116
|
<url>
|
|
96
117
|
<loc>https://neomjs.com/#/learn/comparisons/NeoVsNextJs</loc>
|
|
97
118
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
119
|
+
<priority>0.8</priority>
|
|
98
120
|
</url>
|
|
99
121
|
<url>
|
|
100
122
|
<loc>https://neomjs.com/#/learn/comparisons/NeoVsExtJs</loc>
|
|
101
123
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
124
|
+
<priority>0.8</priority>
|
|
102
125
|
</url>
|
|
103
126
|
<url>
|
|
104
127
|
<loc>https://neomjs.com/#/learn/gettingstarted/Setup</loc>
|
|
105
128
|
<lastmod>2025-08-02T12:17:36+02:00</lastmod>
|
|
129
|
+
<priority>0.9</priority>
|
|
106
130
|
</url>
|
|
107
131
|
<url>
|
|
108
132
|
<loc>https://neomjs.com/#/learn/gettingstarted/Workspaces</loc>
|
|
109
133
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
134
|
+
<priority>0.9</priority>
|
|
110
135
|
</url>
|
|
111
136
|
<url>
|
|
112
137
|
<loc>https://neomjs.com/#/learn/gettingstarted/DescribingTheUI</loc>
|
|
113
138
|
<lastmod>2025-07-28T13:02:27+02:00</lastmod>
|
|
139
|
+
<priority>0.9</priority>
|
|
114
140
|
</url>
|
|
115
141
|
<url>
|
|
116
142
|
<loc>https://neomjs.com/#/learn/gettingstarted/Events</loc>
|
|
117
143
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
144
|
+
<priority>0.8</priority>
|
|
118
145
|
</url>
|
|
119
146
|
<url>
|
|
120
147
|
<loc>https://neomjs.com/#/learn/gettingstarted/References</loc>
|
|
121
148
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
149
|
+
<priority>0.8</priority>
|
|
122
150
|
</url>
|
|
123
151
|
<url>
|
|
124
152
|
<loc>https://neomjs.com/#/learn/gettingstarted/Extending</loc>
|
|
125
153
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
154
|
+
<priority>0.8</priority>
|
|
126
155
|
</url>
|
|
127
156
|
<url>
|
|
128
157
|
<loc>https://neomjs.com/#/learn/gettingstarted/Config</loc>
|
|
129
158
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
159
|
+
<priority>0.8</priority>
|
|
130
160
|
</url>
|
|
131
161
|
<url>
|
|
132
162
|
<loc>https://neomjs.com/#/learn/gettingstarted/ComponentModels</loc>
|
|
133
163
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
164
|
+
<priority>0.8</priority>
|
|
134
165
|
</url>
|
|
135
166
|
<url>
|
|
136
167
|
<loc>https://neomjs.com/#/learn/gettingstarted/CreatingYourFirstApp</loc>
|
|
137
168
|
<lastmod>2025-10-09T13:06:12+02:00</lastmod>
|
|
169
|
+
<priority>0.9</priority>
|
|
138
170
|
</url>
|
|
139
171
|
<url>
|
|
140
172
|
<loc>https://neomjs.com/#/learn/guides/fundamentals/CodebaseOverview</loc>
|
|
141
173
|
<lastmod>2025-11-03T14:00:38+01:00</lastmod>
|
|
174
|
+
<priority>1.0</priority>
|
|
142
175
|
</url>
|
|
143
176
|
<url>
|
|
144
177
|
<loc>https://neomjs.com/#/learn/guides/fundamentals/ApplicationBootstrap</loc>
|
|
145
178
|
<lastmod>2025-07-31T21:54:15+02:00</lastmod>
|
|
179
|
+
<priority>0.9</priority>
|
|
146
180
|
</url>
|
|
147
181
|
<url>
|
|
148
182
|
<loc>https://neomjs.com/#/learn/guides/fundamentals/InstanceLifecycle</loc>
|
|
@@ -167,14 +201,17 @@
|
|
|
167
201
|
<url>
|
|
168
202
|
<loc>https://neomjs.com/#/learn/guides/fundamentals/MainThreadAddons</loc>
|
|
169
203
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
204
|
+
<priority>0.9</priority>
|
|
170
205
|
</url>
|
|
171
206
|
<url>
|
|
172
207
|
<loc>https://neomjs.com/#/learn/guides/uibuildingblocks/ComponentsAndContainers</loc>
|
|
173
208
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
209
|
+
<priority>0.8</priority>
|
|
174
210
|
</url>
|
|
175
211
|
<url>
|
|
176
212
|
<loc>https://neomjs.com/#/learn/guides/uibuildingblocks/Layouts</loc>
|
|
177
213
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
214
|
+
<priority>0.8</priority>
|
|
178
215
|
</url>
|
|
179
216
|
<url>
|
|
180
217
|
<loc>https://neomjs.com/#/learn/guides/uibuildingblocks/CustomComponents</loc>
|
|
@@ -207,6 +244,7 @@
|
|
|
207
244
|
<url>
|
|
208
245
|
<loc>https://neomjs.com/#/learn/guides/datahandling/Grids</loc>
|
|
209
246
|
<lastmod>2025-08-11T09:35:25+02:00</lastmod>
|
|
247
|
+
<priority>0.8</priority>
|
|
210
248
|
</url>
|
|
211
249
|
<url>
|
|
212
250
|
<loc>https://neomjs.com/#/learn/guides/datahandling/Tables</loc>
|
|
@@ -219,6 +257,7 @@
|
|
|
219
257
|
<url>
|
|
220
258
|
<loc>https://neomjs.com/#/learn/guides/userinteraction/Forms</loc>
|
|
221
259
|
<lastmod>2025-07-15T21:37:07+02:00</lastmod>
|
|
260
|
+
<priority>0.8</priority>
|
|
222
261
|
</url>
|
|
223
262
|
<url>
|
|
224
263
|
<loc>https://neomjs.com/#/learn/guides/userinteraction/form_fields/ComboBox</loc>
|
|
@@ -323,38 +362,47 @@
|
|
|
323
362
|
<url>
|
|
324
363
|
<loc>https://neomjs.com/#/learn/blog/context-engineering-done-right</loc>
|
|
325
364
|
<lastmod>2025-11-10T10:51:09+01:00</lastmod>
|
|
365
|
+
<priority>0.9</priority>
|
|
326
366
|
</url>
|
|
327
367
|
<url>
|
|
328
368
|
<loc>https://neomjs.com/#/learn/blog/ai-native-platform-answers-questions</loc>
|
|
329
369
|
<lastmod>2025-09-23T14:31:59+02:00</lastmod>
|
|
370
|
+
<priority>0.9</priority>
|
|
330
371
|
</url>
|
|
331
372
|
<url>
|
|
332
373
|
<loc>https://neomjs.com/#/learn/blog/v10-deep-dive-state-provider</loc>
|
|
333
374
|
<lastmod>2025-09-17T12:16:45+02:00</lastmod>
|
|
375
|
+
<priority>0.9</priority>
|
|
334
376
|
</url>
|
|
335
377
|
<url>
|
|
336
378
|
<loc>https://neomjs.com/#/learn/blog/benchmarking-frontends-2025</loc>
|
|
337
379
|
<lastmod>2025-08-18T11:30:41+02:00</lastmod>
|
|
380
|
+
<priority>0.9</priority>
|
|
338
381
|
</url>
|
|
339
382
|
<url>
|
|
340
383
|
<loc>https://neomjs.com/#/learn/blog/v10-deep-dive-vdom-revolution</loc>
|
|
341
384
|
<lastmod>2025-08-04T12:18:02+02:00</lastmod>
|
|
385
|
+
<priority>0.9</priority>
|
|
342
386
|
</url>
|
|
343
387
|
<url>
|
|
344
388
|
<loc>https://neomjs.com/#/learn/blog/v10-deep-dive-functional-components</loc>
|
|
345
389
|
<lastmod>2025-07-28T09:31:03+02:00</lastmod>
|
|
390
|
+
<priority>0.9</priority>
|
|
346
391
|
</url>
|
|
347
392
|
<url>
|
|
348
393
|
<loc>https://neomjs.com/#/learn/blog/v10-deep-dive-reactivity</loc>
|
|
349
394
|
<lastmod>2025-07-27T21:29:42+02:00</lastmod>
|
|
395
|
+
<priority>0.9</priority>
|
|
350
396
|
</url>
|
|
351
397
|
<url>
|
|
352
398
|
<loc>https://neomjs.com/#/learn/blog/v10-post1-love-story</loc>
|
|
353
399
|
<lastmod>2025-07-27T21:29:42+02:00</lastmod>
|
|
400
|
+
<priority>0.9</priority>
|
|
354
401
|
</url>
|
|
355
402
|
<url>
|
|
356
403
|
<loc>https://neomjs.com/#/learn/blog/json-blueprints-and-shared-workers</loc>
|
|
357
404
|
<lastmod>2025-09-21T19:58:28+02:00</lastmod>
|
|
405
|
+
<priority>0.9</priority>
|
|
358
406
|
</url>
|
|
359
407
|
<url>
|
|
360
408
|
<loc>https://neomjs.com/apps/colors/index.html</loc>
|
|
@@ -378,7 +426,7 @@
|
|
|
378
426
|
</url>
|
|
379
427
|
<url>
|
|
380
428
|
<loc>https://neomjs.com/apps/portal/index.html</loc>
|
|
381
|
-
<lastmod>2025-11-
|
|
429
|
+
<lastmod>2025-11-15T13:51:44+01:00</lastmod>
|
|
382
430
|
</url>
|
|
383
431
|
<url>
|
|
384
432
|
<loc>https://neomjs.com/apps/realworld/index.html</loc>
|
|
@@ -21,6 +21,80 @@ const TOP_LEVEL_ROUTES = [
|
|
|
21
21
|
'/services'
|
|
22
22
|
];
|
|
23
23
|
|
|
24
|
+
const PRIORITIES = new Map([
|
|
25
|
+
// Top-level pages
|
|
26
|
+
['/home' , 1.0],
|
|
27
|
+
['/docs' , 0.9],
|
|
28
|
+
['/examples', 0.9],
|
|
29
|
+
['/blog' , 0.8],
|
|
30
|
+
['/about-us', 0.7],
|
|
31
|
+
['/services', 0.7],
|
|
32
|
+
|
|
33
|
+
// High-value content
|
|
34
|
+
['guides/fundamentals/CodebaseOverview' , 1.0],
|
|
35
|
+
|
|
36
|
+
['benefits/ConfigSystem' , 0.9],
|
|
37
|
+
['benefits/Effort' , 0.9],
|
|
38
|
+
['benefits/Features' , 0.9],
|
|
39
|
+
['benefits/FormsEngine' , 0.9],
|
|
40
|
+
['benefits/FourEnvironments' , 0.9],
|
|
41
|
+
['benefits/Introduction' , 0.9],
|
|
42
|
+
['benefits/MultiWindow' , 0.9],
|
|
43
|
+
['benefits/OffTheMainThread' , 0.9],
|
|
44
|
+
['benefits/Quick' , 0.9],
|
|
45
|
+
['benefits/RPCLayer' , 0.9],
|
|
46
|
+
['benefits/Speed' , 0.9],
|
|
47
|
+
|
|
48
|
+
['blog/context-engineering-done-right' , 0.9],
|
|
49
|
+
['blog/ai-native-platform-answers-questions' , 0.9],
|
|
50
|
+
['blog/v10-deep-dive-state-provider' , 0.9],
|
|
51
|
+
['blog/benchmarking-frontends-2025' , 0.9],
|
|
52
|
+
['blog/v10-deep-dive-vdom-revolution' , 0.9],
|
|
53
|
+
['blog/v10-deep-dive-functional-components' , 0.9],
|
|
54
|
+
['blog/v10-deep-dive-reactivity' , 0.9],
|
|
55
|
+
['blog/v10-post1-love-story' , 0.9],
|
|
56
|
+
['blog/json-blueprints-and-shared-workers' , 0.9],
|
|
57
|
+
|
|
58
|
+
['comparisons/NeoVsAngular' , 0.8],
|
|
59
|
+
['comparisons/NeoVsExtJs' , 0.8],
|
|
60
|
+
['comparisons/NeoVsNextJs' , 0.8],
|
|
61
|
+
['comparisons/NeoVsReact' , 0.8],
|
|
62
|
+
['comparisons/NeoVsSolid' , 0.8],
|
|
63
|
+
['comparisons/NeoVsVue' , 0.8],
|
|
64
|
+
|
|
65
|
+
['gettingstarted/ComponentModels' , 0.8],
|
|
66
|
+
['gettingstarted/Config' , 0.8],
|
|
67
|
+
['gettingstarted/CreatingYourFirstApp' , 0.9],
|
|
68
|
+
['gettingstarted/DescribingTheUI' , 0.9],
|
|
69
|
+
['gettingstarted/Events' , 0.8],
|
|
70
|
+
['gettingstarted/Extending' , 0.8],
|
|
71
|
+
['gettingstarted/References' , 0.8],
|
|
72
|
+
['gettingstarted/Setup' , 0.9],
|
|
73
|
+
['gettingstarted/Workspaces' , 0.9],
|
|
74
|
+
|
|
75
|
+
['guides/fundamentals/ApplicationBootstrap' , 0.9],
|
|
76
|
+
['guides/fundamentals/MainThreadAddons' , 0.9],
|
|
77
|
+
|
|
78
|
+
// Other important guides
|
|
79
|
+
['guides/uibuildingblocks/ComponentsAndContainers', 0.8],
|
|
80
|
+
['guides/uibuildingblocks/Layouts' , 0.8],
|
|
81
|
+
['guides/datahandling/Grids' , 0.8],
|
|
82
|
+
['guides/userinteraction/Forms' , 0.8]
|
|
83
|
+
]);
|
|
84
|
+
|
|
85
|
+
const DEFAULT_PRIORITY = 0.5;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Gets the priority for a given route ID.
|
|
89
|
+
* @param {String} id The route ID
|
|
90
|
+
* @returns {Number} The priority value
|
|
91
|
+
*/
|
|
92
|
+
function getPriority(id) {
|
|
93
|
+
// Normalize ID by removing .md extension if present
|
|
94
|
+
const cleanId = id.endsWith('.md') ? id.slice(0, -3) : id;
|
|
95
|
+
return PRIORITIES.get(cleanId) || DEFAULT_PRIORITY;
|
|
96
|
+
}
|
|
97
|
+
|
|
24
98
|
/**
|
|
25
99
|
* Gets last modified dates for multiple files in a batch (more efficient).
|
|
26
100
|
* @param {String[]} filePaths - Array of absolute file paths
|
|
@@ -299,12 +373,18 @@ export async function getSitemapXml(options={}) {
|
|
|
299
373
|
lastmod = lastModMap.get(key);
|
|
300
374
|
}
|
|
301
375
|
|
|
376
|
+
const priority = getPriority(id);
|
|
377
|
+
|
|
302
378
|
const lastmodXml = lastmod
|
|
303
379
|
? `\n <lastmod>${lastmod}</lastmod>`
|
|
304
380
|
: '';
|
|
305
381
|
|
|
382
|
+
const priorityXml = priority !== DEFAULT_PRIORITY
|
|
383
|
+
? `\n <priority>${priority.toFixed(1)}</priority>`
|
|
384
|
+
: '';
|
|
385
|
+
|
|
306
386
|
return ` <url>
|
|
307
|
-
<loc>${url}</loc>${lastmodXml}
|
|
387
|
+
<loc>${url}</loc>${lastmodXml}${priorityXml}
|
|
308
388
|
</url>`;
|
|
309
389
|
}).join('\n');
|
|
310
390
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name" : "neo.mjs",
|
|
3
|
-
"version" : "11.
|
|
3
|
+
"version" : "11.4.0",
|
|
4
4
|
"description": "Neo.mjs: The AI-native web platform for building ultra-fast, desktop-like web applications. It features a truly multi-threaded architecture, an enterprise-grade component library, and a zero-builds development mode. Architected for AI collaboration from the ground up, it includes three dedicated Model Context Protocol (MCP) servers.",
|
|
5
5
|
"type" : "module",
|
|
6
6
|
"repository": {
|
|
@@ -39,52 +39,78 @@
|
|
|
39
39
|
"watch-themes" : "node ./buildScripts/watchThemes.mjs"
|
|
40
40
|
},
|
|
41
41
|
"keywords": [
|
|
42
|
-
"javascript",
|
|
43
|
-
"frontend",
|
|
44
|
-
"framework",
|
|
45
|
-
"performance",
|
|
46
|
-
"ui-responsiveness",
|
|
47
|
-
"no-jank",
|
|
48
|
-
"smooth-ui",
|
|
49
|
-
"scalability",
|
|
50
|
-
"enterprise",
|
|
51
|
-
"multi-threaded",
|
|
52
|
-
"desktop-like",
|
|
53
|
-
"native-like",
|
|
54
|
-
"web-app",
|
|
55
|
-
"offscreencanvas",
|
|
56
|
-
"sharedworker",
|
|
57
|
-
"webworker",
|
|
58
|
-
"virtual-dom",
|
|
59
|
-
"ecmascript",
|
|
60
|
-
"css",
|
|
61
|
-
"json",
|
|
62
|
-
"react-alternative",
|
|
63
|
-
"angular-alternative",
|
|
64
|
-
"vue-alternative",
|
|
65
|
-
"zero-build",
|
|
66
|
-
"no-transpilation",
|
|
67
|
-
"security",
|
|
68
|
-
"xss-resistant",
|
|
69
|
-
"realtime",
|
|
70
|
-
"data-visualization",
|
|
71
|
-
"single-page-application",
|
|
72
|
-
"spa",
|
|
73
|
-
"ai-native",
|
|
74
42
|
"ai-agents",
|
|
43
|
+
"ai-code-review",
|
|
44
|
+
"ai-interfaces",
|
|
45
|
+
"ai-native",
|
|
46
|
+
"angular-alternative",
|
|
47
|
+
"browser-email-client",
|
|
48
|
+
"browser-based-ide",
|
|
75
49
|
"context-engineering",
|
|
76
|
-
"
|
|
77
|
-
"
|
|
50
|
+
"css",
|
|
51
|
+
"data-visualization",
|
|
52
|
+
"desktop-class-web-applications",
|
|
53
|
+
"desktop-like",
|
|
54
|
+
"developer-productivity",
|
|
55
|
+
"dynamic-imports",
|
|
56
|
+
"ecmascript",
|
|
57
|
+
"enterprise",
|
|
58
|
+
"esm-production",
|
|
59
|
+
"framework",
|
|
60
|
+
"frontend",
|
|
78
61
|
"gemini",
|
|
79
|
-
"generative-ai",
|
|
80
62
|
"genai",
|
|
81
|
-
"ai
|
|
63
|
+
"generative-ai",
|
|
64
|
+
"html-streaming-alternative",
|
|
65
|
+
"http3",
|
|
66
|
+
"javascript",
|
|
67
|
+
"json",
|
|
82
68
|
"json-blueprints",
|
|
69
|
+
"llm-ui-framework",
|
|
83
70
|
"low-code-ui",
|
|
71
|
+
"mcp",
|
|
72
|
+
"mcp-server",
|
|
73
|
+
"model-context-protocol",
|
|
74
|
+
"monaco-editor",
|
|
75
|
+
"multi-screen-ai-chat",
|
|
76
|
+
"multi-threaded",
|
|
84
77
|
"multi-window",
|
|
78
|
+
"multi-window-applications",
|
|
79
|
+
"multi-window-ide",
|
|
80
|
+
"multi-window-llm-interface",
|
|
81
|
+
"native-like",
|
|
82
|
+
"next-gen-ai-interfaces",
|
|
83
|
+
"no-bundling",
|
|
84
|
+
"no-jank",
|
|
85
|
+
"no-transpilation",
|
|
86
|
+
"offscreencanvas",
|
|
87
|
+
"outlook-alternative-browser",
|
|
88
|
+
"performance",
|
|
85
89
|
"pwa",
|
|
90
|
+
"predictive-caching",
|
|
86
91
|
"progressive-web-app",
|
|
87
|
-
"
|
|
92
|
+
"quic",
|
|
93
|
+
"rag-knowledge-base",
|
|
94
|
+
"react-alternative",
|
|
95
|
+
"realtime",
|
|
96
|
+
"scalability",
|
|
97
|
+
"security",
|
|
98
|
+
"semantic-code-search",
|
|
99
|
+
"sharedworker",
|
|
100
|
+
"single-page-application",
|
|
101
|
+
"smooth-ui",
|
|
102
|
+
"spa",
|
|
103
|
+
"ssg-json",
|
|
104
|
+
"trading-dashboard-framework",
|
|
105
|
+
"ui-responsiveness",
|
|
106
|
+
"virtual-dom",
|
|
107
|
+
"vue-alternative",
|
|
108
|
+
"web-app",
|
|
109
|
+
"web-based-email-client",
|
|
110
|
+
"web-based-ide",
|
|
111
|
+
"webworker",
|
|
112
|
+
"xss-resistant",
|
|
113
|
+
"zero-build-development"
|
|
88
114
|
],
|
|
89
115
|
"author" : "Tobias Uhlig",
|
|
90
116
|
"license": "MIT",
|
|
@@ -93,16 +119,16 @@
|
|
|
93
119
|
},
|
|
94
120
|
"homepage" : "https://neomjs.com/",
|
|
95
121
|
"devDependencies": {
|
|
96
|
-
"@chroma-core/default-embed" : "^0.1.
|
|
122
|
+
"@chroma-core/default-embed" : "^0.1.9",
|
|
97
123
|
"@fortawesome/fontawesome-free": "^7.1.0",
|
|
98
124
|
"@google/generative-ai" : "^0.24.1",
|
|
99
|
-
"@modelcontextprotocol/sdk" : "^1.
|
|
125
|
+
"@modelcontextprotocol/sdk" : "^1.22.0",
|
|
100
126
|
"@playwright/test" : "^1.56.1",
|
|
101
127
|
"acorn" : "^8.15.0",
|
|
102
128
|
"astring" : "^1.9.0",
|
|
103
129
|
"autoprefixer" : "^10.4.22",
|
|
104
130
|
"chalk" : "^5.6.2",
|
|
105
|
-
"chromadb" : "^3.1.
|
|
131
|
+
"chromadb" : "^3.1.4",
|
|
106
132
|
"clean-webpack-plugin" : "^4.0.0",
|
|
107
133
|
"commander" : "^14.0.2",
|
|
108
134
|
"cssnano" : "^7.1.2",
|
|
@@ -115,9 +141,9 @@
|
|
|
115
141
|
"gray-matter" : "^4.0.3",
|
|
116
142
|
"highlightjs-line-numbers.js" : "^2.9.1",
|
|
117
143
|
"html-minifier-terser" : "^7.2.0",
|
|
118
|
-
"inquirer" : "^12.11.
|
|
144
|
+
"inquirer" : "^12.11.1",
|
|
119
145
|
"jsdoc-api" : "^9.3.5",
|
|
120
|
-
"js-yaml" : "^4.1.
|
|
146
|
+
"js-yaml" : "^4.1.1",
|
|
121
147
|
"marked" : "^17.0.0",
|
|
122
148
|
"monaco-editor" : "0.50.0",
|
|
123
149
|
"neo-jsdoc-x" : "^1.0.8",
|
package/src/DefaultConfig.mjs
CHANGED
|
@@ -299,12 +299,12 @@ const DefaultConfig = {
|
|
|
299
299
|
useVdomWorker: true,
|
|
300
300
|
/**
|
|
301
301
|
* buildScripts/injectPackageVersion.mjs will update this value
|
|
302
|
-
* @default '11.
|
|
302
|
+
* @default '11.4.0'
|
|
303
303
|
* @memberOf! module:Neo
|
|
304
304
|
* @name config.version
|
|
305
305
|
* @type String
|
|
306
306
|
*/
|
|
307
|
-
version: '11.
|
|
307
|
+
version: '11.4.0'
|
|
308
308
|
};
|
|
309
309
|
|
|
310
310
|
Object.assign(DefaultConfig, {
|
|
@@ -60,11 +60,18 @@ class DocumentHead extends Base {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
|
-
* Retrieves and parses the content of
|
|
63
|
+
* Retrieves and parses the content of a ld+json script tag.
|
|
64
|
+
* Can find a specific script tag by name, or the first one if no name is provided.
|
|
65
|
+
* @param {Object} [config={}]
|
|
66
|
+
* @param {String} [config.name] The value of the 'data-schema-name' attribute to select a specific script.
|
|
64
67
|
* @returns {Object|null} The parsed JSON data, or null if the tag is not found or parsing fails.
|
|
65
68
|
*/
|
|
66
|
-
getLdJson() {
|
|
67
|
-
let
|
|
69
|
+
getLdJson({name}={}) {
|
|
70
|
+
let selector = name
|
|
71
|
+
? `script[type="application/ld+json"][data-schema-name="${name}"]`
|
|
72
|
+
: 'script[type="application/ld+json"]';
|
|
73
|
+
|
|
74
|
+
let script = document.head.querySelector(selector);
|
|
68
75
|
|
|
69
76
|
if (script) {
|
|
70
77
|
try {
|
|
@@ -150,16 +157,25 @@ class DocumentHead extends Base {
|
|
|
150
157
|
}
|
|
151
158
|
|
|
152
159
|
/**
|
|
153
|
-
* Creates or updates
|
|
160
|
+
* Creates or updates a ld+json script tag with new structured data.
|
|
161
|
+
* Can target a specific script tag by name.
|
|
154
162
|
* @param {Object} data
|
|
163
|
+
* @param {String} [data.name] The value for the 'data-schema-name' attribute to select a specific script.
|
|
155
164
|
* @param {Object} data.value The JavaScript object to be stringified and set as the script's content.
|
|
156
165
|
*/
|
|
157
|
-
setLdJson({value}) {
|
|
158
|
-
let
|
|
166
|
+
setLdJson({name, value}) {
|
|
167
|
+
let selector = name
|
|
168
|
+
? `script[type="application/ld+json"][data-schema-name="${name}"]`
|
|
169
|
+
: 'script[type="application/ld+json"]';
|
|
170
|
+
|
|
171
|
+
let script = document.head.querySelector(selector);
|
|
159
172
|
|
|
160
173
|
if (!script) {
|
|
161
174
|
script = document.createElement('script');
|
|
162
175
|
script.type = 'application/ld+json';
|
|
176
|
+
if (name) {
|
|
177
|
+
script.dataset.schemaName = name
|
|
178
|
+
}
|
|
163
179
|
document.head.appendChild(script)
|
|
164
180
|
}
|
|
165
181
|
|