Strata architecture and SDDMenu
On this page

Ecosystem research

Retrieved 2026-09-17. These are primary sources and design implications, not executed Strata integration results. Online documentation and main branches are mutable and returned differing patch snapshots. Pin released artifacts and source commits in each subsequent spike. Direct npm registry verification was unavailable in the original roadmap audit. The post-SPEC-001 review below adds live registry/source verification for H3/crossws/TypeScript; other sections retain their earlier research scope and are not new M2 experiments.

Post-SPEC-001 consumer review

H3 consumer type compatibility records current npm tags, the post-rc.32 source comparison, upstream override history, published crossws import graph, TS 6.0.3 probes and evaluated alternatives. H3 latest remains rc.32; crossws is 0.4.12; TypeScript latest is 7.0.2 while the qualification target stays 6.0.3. No fixed newer H3 release was found.

The Node runtime recipe is demonstrated. Clean declarations remain blocked; stock Vite decorator lowering is an observed limitation on the measured tuple. SPEC-002 now owns the bounded type-closure experiment. M2 research topics below remain gated, and no public compiler/dependency policy is chosen.

H3 and Nitro

H3's migration guide documents a v1-to-v2 transition: the v2 H3 class integrates routing, and request/response/error APIs change. The site still labels v2 beta, while the maintainer release feed lists v2.0.1-rc.32 at the top, dated September 14; Strata's lockfile resolves that version. Treat it as prerelease; a GitHub “Latest” badge does not establish npm dist-tags or stability.

The current experimental adapter already targets v2. Supporting v1 is a separate interoperability decision, not changing an import or widening a type. Encapsulate registration, event conversion, response/error translation and any version bridge in @strata-sc/h3.

Analog's platform manifest declares nitropack ^2.13.1; the Nitro v2 manifest, versioned 2.13.4 in the retrieved source, declares H3 ^1.15.11. The Nitro release feed also describes a newer H3 v2 line. Inference: “supports H3 v2” does not imply “plugs into Analog's Nitro server.” A pinned Analog fixture must establish its actual dependency graph and supported mounting API.

Strata commit b899c59 records why it avoided h3@2.0.0; that historical commit statement is not independent registry verification. Preserve the tested lockfile baseline rather than selecting a version from its name or a stale banner.

Angular rendering and compilation

Angular SSR provides server, client and prerender modes, request tokens and server rendering integration. These are rendering capabilities; they do not establish a server-exclusive component graph. Analog has its own runtime integration, so Angular CLI server entry points cannot simply be assumed to be Analog extension points.

Incremental hydration uses @defer hydration triggers. hydrate never applies to initial hydration, suppresses nested hydration and still allows dependency fetching on subsequent client rendering. Inference: it neither proves module exclusion nor supplies the required interactive child boundary for a server-only parent.

Deferred loading distinguishes ordinary SSR placeholder behavior from hydration-triggered rendering of deferred content. Its HMR behavior also differs from production. Reuse Angular primitives where they fit; test production builds and do not infer lazy-loading or boundary guarantees from development behavior.

Hydration requirements constrain server/client DOM matching and direct DOM manipulation. Inference: inserting an HTML subtree and calling it “hydrated” is not a proven Angular navigation protocol. Component creation alone does not prove DOM reuse either.

The compatibility table currently lists Angular 22.0.x with TypeScript >=6.0.0 <6.1.0 and Node ^22.22.3 || ^24.15.0 || ^26.0.0; Angular 21.x requires TypeScript below 6. The retrieved page's footer advertises a newer Angular patch than the table row. Use the published target version's own constraints; do not extrapolate support to all 22.x.

Angular DI and Analog server functions

runInInjectionContext permits synchronous inject() calls in its stack frame; it does not preserve that capability across await. createEnvironmentInjector is a public building block for explicit provider hierarchies. Neither API connects an H3 handler to an Analog request automatically. Request ownership, parent lifetime and destruction still need experiments.

Analog's server-function documentation describes serverFn in .server.ts, Standard Schema validation, client resource/mutation helpers, SSR execution in the render's request injector, hydration result transfer, and functional interceptors. It describes server configuration bootstrap and request tokens while withholding the raw H3 event. This is useful prior art, not proof of a public injector hook for arbitrary controllers. Confirm these documented APIs exist in the exact released package chosen for a fixture.

Update 2026-09-24: confirmed in installed Analog 2.7.2 source by SPEC-003. The HTTP server-function path bootstraps a private, process-level createApplication() injector and a per-call child injector that is never destroyed. Neither it nor the SSR render injector is exposed to other Nitro handlers.

Strata will leave internal RPC to those functions. A server-function transform excludes an operation module; it does not establish that an Angular component's compiled template and implementation can be split around interactive descendants.

Analog, Vite and decorators

Analog SSR is enabled by default and configured through its Vite platform plugin and Nitro route rules. Analog API routes retain native H3 handlers and also document schema validation. Avoid rebuilding these for simple endpoints.

The retrieved Analog Angular plugin manifest declares Vite 6/7/8 peers and Angular build peers through 22. These broad ranges do not prove Strata's transform ordering works. Vite's environment plugin API offers environment-aware transforms and state; it is a candidate tool, not a chosen compiler design.

TypeScript's standard decorator semantics differ from legacy decorators and do not provide parameter decorators or emitDecoratorMetadata compatibility. Decorator metadata support explains context.metadata/Symbol.metadata. Strata already uses this model.

Two distinct proofs are required: compilation of Strata's own packages, and compilation of consumer-authored controllers/components. A further unknown is coexistence of standard Strata decorators and Angular AOT processing on the same class. The current generic TypeScript pre-pass must not be assumed safe before Angular template analysis. No public compiler strategy is selected.

Deployment and validation

Analog deployment defaults to a Node server. Its provider guide documents the cloudflare-pages build preset. Current Nitro Cloudflare docs describe Workers and Pages shapes under newer preset spellings and favor Workers. These are version-specific paths, not interchangeable configuration recipes.

Cloudflare's Node compatibility documentation distinguishes native implementations, polyfills and non-functional stubs. nodejs_compat does not prove a server dependency works. Pin compatibility date/flags and test the actual deployment shape.

Standard Schema provides a validator interoperability contract. Strata's future HTTP validation layer should consume that contract while specifying transport parsing, error mapping and execution order itself; no specific validation library is prescribed.

Consequences for the next decisions

  1. Retain the proven consumer runtime evidence; resolve the strict type-contract blocker in SPEC-002 before M2 or any public compiler package decision.
  2. Resolve the H3-major/Analog mounting mismatch and request-injector access with pinned fixtures.
  3. Attempt strict component graph separation and interactive child hydration early, before broad HTTP API expansion. A compiler integration failure is a 1.0 blocker.
  4. Compare document navigation with a router payload protocol experimentally. Neither is selected.
  5. Refresh this research when drafting those specs; record package versions, source commits and reproducible evidence instead of treating mutable documentation as a compatibility matrix.

Source: docs/RESEARCH.md

Generated by Entwine · Markdown remains the source of truth.