- Path:
packages/angular(Angular library workspace; source underprojects/angular-formio/). Published name:@formio/angular, version inpackage.json. - License: MIT. OSS sync: YES —
ossRepo: { repo: github.com/formio/angular, srcPath: "." }. Everything underprojects/angular-formio/ships publicly. - Module/language: TypeScript, ESM, Angular 21 (peer-supports 16+). Mixed era: standalone components + legacy
NgModule/forRoot. - Purpose: the official Angular wrapper around the
@formio/jsrenderer +@formio/coredata engine. It owns the Angular surface (components, services, DI, routing modules) and the change-detection bridge — not rendering/validation/submission logic, which live in@formio/js.
- Wrap every
@formio/jsevent inngZone.run(...). Renderer callbacks fire outside Angular's zone; an unwrappedformio.on(...)that emits to the view or an@Output()silently leaves the view stale. See angular/ngzone-event-bridge-01. (Theembedentrypoint is a deliberate zone-less exception.) FormioAppConfigis an untyped ([x: string]: any), mutable, app-wide shared singleton. Assignments compile with no type check; producers and consumers of a key live in different packages. Grep both sides before relying on a key; prefer a declared field over another dynamic property. See angular/appconfig-shared-state-01.FormioResourceServiceis a cross-package inheritance surface (subclassed informmanager,pro.formview.io). Treat base-method changes as cross-package; don't edit the look-alikeresources.service.ts(FormioResources) by mistake. See angular/resource-service-inheritance-01.- Exports are barrel-gated per entrypoint. A new symbol is invisible until re-exported through that entrypoint's
index.ts/public_api.ts; moving a symbol across entrypoints is breaking. See angular/secondary-entrypoints-01. - Keep nothing secret/license-gated in source and keep
GOTCHAmarkers opaque —src/is published to the public OSS repo. - Match the file's era. New leaf components → standalone; preserve the
NgModule/forRoot/extendRouterrouting modules andViewEncapsulation.None— don't modernize them without a reason. Adds to/STANDARDS.md; never overrides it.
- Pattern: a renderer component extends
FormioBaseComponentand implementsgetRenderer(). Example:projects/angular-formio/src/components/formio/formio.component.ts— the smallest reference shape. - Pattern: renderer events bridged via
ngZone.runinsideattachFormEvents(); instantiation inrunOutsideAngular. Example:projects/angular-formio/src/FormioBaseComponent.ts—attachFormEvents(markerG-NG04). - Pattern: routing entrypoints expose
forRoot/forChildthat callextendRouter. Example:projects/angular-formio/src/formio.utils.ts— mutates decorator metadata to inject routes.
4 dependents, tier: medium (pro.formview.io, formmanager, @formio/enterprise-builder-angular, formio-portal). See /docs/dependencies/angular.md.
pnpm -F @formio/angular build # ng build angular-formio --configuration production (→ dist/angular-formio)
pnpm -F @formio/angular x:test # ng test — Karma + Jasmine. NOTE: there is no `test` script
pnpm -F @formio/angular check-sync # version parity with projects/angular-formio/package.jsontestis absent andlintis a stub (echo … FIO-11789) —pnpm -F @formio/angular test/lintwill mislead you into thinking it's green. See angular/no-test-lint-wired-01.- "Green" =
build+x:testhere; behavioral green = the consuming apps' suites (pnpm -F pro.formview.io test,pnpm -F formmanager test) — most real coverage lives downstream. - Single spec:
cd packages/angular && pnpm x:test -- --include='**/<name>.spec.ts'(needs a Chrome launcher).
See /docs/gotchas/angular.md. Entries: angular/ngzone-event-bridge-01, angular/appconfig-shared-state-01, angular/resource-service-inheritance-01, angular/secondary-entrypoints-01, angular/no-test-lint-wired-01.
- Editing
FormioResourceService/FormioResourcesor anyFormioAppConfigproperty → this is the Angular app-family behavioral seam withformmanager+pro.formview.io. Grep subclasses (grep -rn "extends FormioResourceService" apps packages) and config-key producers/consumers; verify both apps. See the seam row in/docs/cross-cutting/README.md. - Any rendering/validation/submission behavior question → it's almost certainly
@formio/js, not here. Read/docs/architecture/formio.js.mdand/docs/gotchas/formio.js.mdfirst. - Adding a
formio.on(...)handler or an@Output()→ wrap inngZone.runand test the bound view/output updates, not just the callback. - Angular framework upgrade → lockstep with
formmanager+pro.formview.io; coordinate all three (FIO-11054, FIO-10726). majorbump → coordinate the OSS release (ships to github.com/formio/angular).
- Repo-wide:
/CLAUDE.md,/STANDARDS.md - Architecture:
/docs/architecture/angular.md - Dependencies:
/docs/dependencies/angular.md - Gotchas:
/docs/gotchas/angular.md - Renderer it wraps:
/docs/architecture/formio.js.md