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