Skip to content

Choosing a frontend: React or Angular

NetForge ships one ASP.NET Core backend with a choice of two first-class frontends. Both are held to the same quality bar — designed loading/empty/error states, full light/dark parity, mobile layouts, i18n + RTL — and both are fully tier-aware: Community and Pro strip or keep exactly the same subsystems from either client.

React (default)Angular
FrameworkReact 19Angular 22
ToolingVite 8 · TypeScript 6Angular CLI · TypeScript
UI systemTailwind v4 + shadcn/uiAngular Material (Material Design 3)
RoutingFile-system routes (generouted)Angular Router
Data / stateTanStack Query · ZustandSignals · resource() · services
FormsReact Hook Form + ZodReactive Forms
ChartsRechartsngx-charts / Material

The backend, database, auth, permissions, settings, and every Pro subsystem are identical either way — only the client project differs. Try them side by side: the React demo and the Angular demo run the same backend.

Picking a frontend at scaffold time

The frontend is a single flag — --frontend react (the default) or --frontend angular:

bash
netforge new            # the wizard asks "Frontend? React / Angular"
bash
dotnet new netforge -n MyApp --frontend angular
bash
# VS Code / Visual Studio → "New NetForge Project" → pick React or Angular

In the web configurator it's a toggle at the top of the build form. The choice is available in both editions — there's no "Angular is Pro" gate.

What differs in the generated app

  • The client projectnetforge.client (React) or netforge.angular.client (Angular). Only the one you picked is scaffolded.
  • Dev serverdotnet run launches the client for you via SpaProxy: Vite on https://localhost:3000 for React, the Angular CLI on https://localhost:4200 for Angular. Browse the app URL either way.
  • Production serving — React ships a single runtime-i18n bundle served as static assets. Angular's i18n is compile-time (one build per locale), so dotnet publish builds every locale and serves /{locale}/… path-based; the bare root redirects to the visitor's Accept-Language match.

Everything else — the vertical-slice backend, the Features/{Domain}/ shape, permissions, the DataGrid and form layers, theming, i18n keys — is shared. A feature you add on the backend is consumed the same way from either client.

Angular conventions

Working in the Angular client? Its own agent guide lives at netforge.angular.client/.claude/CLAUDE.md, and the same design-system rules apply — push Material 3 to its best via --mat-sys-* tokens rather than fighting it.

Next steps

Questions? Discussions · Contact · NetForge Community is MIT-licensed; Pro unlocks with a GitHub sponsorship.