Frameworks¶
Zen of Languages is still fundamentally organized around language keys, but several ecosystems are important enough to expose as first-class framework analyzers.
That means framework support is modeled as dedicated analyzers such as react, fastapi, or django, with their implementation modules living under frameworks/<key>/... while still plugging into the same registry, detector, and documentation pipeline.
The practical goal is simple: keep parent-language semantics and framework-specific idioms separate.
- TypeScript and JavaScript continue to represent the base languages
- React, Vue, Angular, and Next.js document the framework rules layered on top
- Python continues to represent the base language
- Pydantic, FastAPI, Django, and SQLAlchemy capture the framework-level conventions those ecosystems expect
Supported Framework Analyzers¶
Frontend¶
Python ecosystem¶
Detection Model¶
Framework routing is intentionally conservative:
- high-confidence file extensions like
.vueroute automatically - strong file-name or project markers can route files such as Next.js pages
- import-based heuristics can elevate Python files into framework analyzers
- ambiguous files can still be analyzed by choosing
--language <framework>explicitly
Family-authored bindings¶
Framework analyzers now participate directly in the authored family rollout. Each framework mapping keeps its rule binding as the source of truth, then attaches any testing and projection-family metadata to those same bindings.
- testing-family bindings are authored as
testing_idson individual rules - projection-family bindings are authored as
projection_idson individual rules - verified variants preserve which relationships were explicitly confirmed
- CLI and MCP surfaces expose those bindings through
--perspective testing,--perspective projection, and the MCPperspective/project_asfields
Across the current worktree, all 8 framework mapping modules author both testing and projection-family metadata. That means the rollout now covers every documented framework analyzer, not just the base languages.
Why this split helps¶
Framework analyzers now document and load as their own family, which makes a few things clearer:
- docs match the runtime architecture
- framework rules no longer appear as if they were base-language rules
- detector mappings can stay specific to the framework instead of pretending to be universal language overlays
- future framework additions have one obvious place to live in both code and docs
Why frameworks have their own namespace¶
The repository now distinguishes between core language analyzers and framework analyzers:
- core languages continue to live under
languages/<key>/... - framework analyzers live under
frameworks/<key>/...
Shared loaders, docs generators, and validation scripts understand both namespaces, which keeps framework support explicit without breaking the rest of the product.