
Angular Tooling
- 4.8k installs
- 594 repo stars
- Updated March 23, 2026
- analogjs/angular-skills
angular-tooling is an Angular CLI skill for Angular v20 plus project setup, code generation, dev server, builds, tests, linting, configuration, and package management.
About
angular-tooling documents Angular CLI workflows for Angular v20 plus projects from scaffolding through production builds. Agents create standalone apps with ng new, generate components services directives pipes guards interceptors and other schematics, run ng serve with port host SSL and production configuration options, build development and production bundles with budget and hashing settings, execute unit tests with coverage and headless CI flags, lint with optional fix, configure angular.json architect sections and environment file replacements, add Angular Material PWA SSR and localize packages, update core CLI packages, analyze bundle stats with esbuild-visualizer, and manage persistent CLI cache. The skill explicitly excludes Nx workspace commands, custom Webpack setups, and non-Angular build systems like standalone Vite or direct esbuild. Project structure covers src app routes, public assets, and dist browser output paths. Path alias generation supports feature and shared folder conventions.
- ng new scaffolds standalone Angular v20 plus projects with style, routing, and SSR options.
- ng generate covers components, services, directives, pipes, guards, interceptors, and models.
- ng serve and ng build support dev, production, SSL, budgets, hashing, and source map flags.
- ng test and ng lint include headless CI, coverage, include filters, and auto-fix modes.
- angular.json configuration, ng add packages, ng update, stats-json analysis, and CLI cache.
Angular Tooling by the numbers
- 4,843 all-time installs (skills.sh)
- +60 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #107 of 2,245 Frontend Development skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 4, 2026 (Skillselion catalog sync)
angular-tooling capabilities & compatibility
- Capabilities
- scaffold standalone angular projects with ng new · generate components, services, directives, pipes · run dev server with port, host, ssl, and product · build development and production bundles with an · execute unit tests with headless ci and coverage · configure environments, add angular packages, an · analyze production bundle stats and manage cli p
- Use cases
- frontend · testing · ci cd
- Platforms
- macOS · Windows · Linux
- Runs
- Runs locally
- Pricing
- Free
What angular-tooling says it does
Use Angular CLI and development tools for efficient Angular v20+ development.
Don't use for Nx workspace commands, custom Webpack configurations, or non-Angular CLI build systems like Vite standalone or esbuild direct usage.
ng test --watch=false --browsers=ChromeHeadless
ng build -c production --source-map=false
npx skills add https://github.com/analogjs/angular-skills --skill angular-toolingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4.8k |
|---|---|
| repo stars | ★ 594 |
| Security audit | 3 / 3 scanners passed |
| Last updated | March 23, 2026 |
| Repository | analogjs/angular-skills ↗ |
How do I use Angular CLI correctly for new projects, schematics, local serve, production builds, tests, lint, and angular.json configuration in v20 plus?
Angular CLI reference for Angular v20+ project setup, schematics, serve, build, test, lint, configuration, package adds, and dependency updates.
Who is it for?
Developers and agents working in Angular v20 plus repos who need CLI commands for setup, generation, build, test, and config tasks.
Skip if: Nx workspace commands, custom Webpack configurations, or non-Angular CLI build systems like standalone Vite or direct esbuild usage.
When should I use this skill?
User creates a new Angular project, generates components or services, runs ng serve or ng build, configures angular.json, or updates Angular packages.
What you get
Correct ng commands and configuration patterns for scaffolding, generating artifacts, running serve and build, executing tests, and managing Angular dependencies.
- Schematic collections
- Build configs
- CI/CD snippets
By the numbers
- Documents 6 Angular tooling topic areas in its table of contents
Files
Angular Tooling
Use Angular CLI and development tools for efficient Angular v20+ development.
Project Setup
Create New Project
# Create new standalone project (default in v20+)
ng new my-app
# With specific options
ng new my-app --style=scss --routing --ssr=false
# Skip tests
ng new my-app --skip-tests
# Minimal setup
ng new my-app --minimal --inline-style --inline-templateProject Structure
my-app/
├── src/
│ ├── app/
│ │ ├── app.component.ts
│ │ ├── app.config.ts
│ │ └── app.routes.ts
│ ├── index.html
│ ├── main.ts
│ └── styles.scss
├── public/ # Static assets
├── angular.json # CLI configuration
├── package.json
├── tsconfig.json
└── tsconfig.app.jsonCode Generation
Components
# Generate component
ng generate component features/user-profile
ng g c features/user-profile # Short form
# With options
ng g c shared/button --inline-template --inline-style
ng g c features/dashboard --skip-tests
ng g c features/settings --change-detection=OnPush
# Flat (no folder)
ng g c shared/icon --flat
# Dry run (preview)
ng g c features/checkout --dry-runServices
# Generate service (providedIn: 'root' by default)
ng g service services/auth
ng g s services/user
# Skip tests
ng g s services/api --skip-testsOther Schematics
# Directive
ng g directive directives/highlight
ng g d directives/tooltip
# Pipe
ng g pipe pipes/truncate
ng g p pipes/date-format
# Guard (functional by default)
ng g guard guards/auth
# Interceptor (functional by default)
ng g interceptor interceptors/auth
# Interface
ng g interface models/user
# Enum
ng g enum models/status
# Class
ng g class models/productGenerate with Path Alias
# Components in feature folders
ng g c @features/products/product-list
ng g c @shared/ui/buttonDevelopment Server
# Start dev server
ng serve
ng s # Short form
# With options
ng serve --port 4201
ng serve --open # Open browser
ng serve --host 0.0.0.0 # Expose to network
# Production mode locally
ng serve --configuration=production
# With SSL
ng serve --ssl --ssl-key ./ssl/key.pem --ssl-cert ./ssl/cert.pemBuilding
Development Build
ng buildProduction Build
ng build --configuration=production
ng build -c production # Short form
# With specific options
ng build -c production --source-map=false
ng build -c production --named-chunksBuild Output
dist/my-app/
├── browser/
│ ├── index.html
│ ├── main-[hash].js
│ ├── polyfills-[hash].js
│ └── styles-[hash].css
└── server/ # If SSR enabled
└── main.jsTesting
Unit Tests
# Run tests
ng test
ng t # Short form
# Single run (CI)
ng test --watch=false --browsers=ChromeHeadless
# With coverage
ng test --code-coverage
# Specific file
ng test --include=**/user.service.spec.tsE2E Tests
# Run e2e (if configured)
ng e2eLinting
# Run linter
ng lint
# Fix auto-fixable issues
ng lint --fixConfiguration
angular.json Key Sections
{
"projects": {
"my-app": {
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:application",
"options": {
"outputPath": "dist/my-app",
"index": "src/index.html",
"browser": "src/main.ts",
"polyfills": ["zone.js"],
"tsConfig": "tsconfig.app.json",
"assets": ["{ \"glob\": \"**/*\", \"input\": \"public\" }"],
"styles": ["src/styles.scss"],
"scripts": []
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "500kB",
"maximumError": "1MB"
}
],
"outputHashing": "all"
},
"development": {
"optimization": false,
"extractLicenses": false,
"sourceMap": true
}
}
}
}
}
}
}Environment Configuration
// src/environments/environment.ts
export const environment = {
production: false,
apiUrl: 'http://localhost:3000/api',
};
// src/environments/environment.prod.ts
export const environment = {
production: true,
apiUrl: 'https://api.example.com',
};Configure in angular.json:
{
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
]
}
}
}Adding Libraries
Angular Libraries
# Add Angular Material
ng add @angular/material
# Add Angular PWA
ng add @angular/pwa
# Add Angular SSR
ng add @angular/ssr
# Add Angular Localize
ng add @angular/localizeThird-Party Libraries
# Install and configure
npm install @ngrx/signals
# Some libraries have schematics
ng add @ngrx/storeUpdate Angular
# Check for updates
ng update
# Update Angular core and CLI
ng update @angular/core @angular/cli
# Update all packages
ng update --all
# Force update (skip peer dependency checks)
ng update @angular/core @angular/cli --forcePerformance Analysis
# Build with stats
ng build -c production --stats-json
# Analyze bundle (install esbuild-visualizer)
npx esbuild-visualizer --metadata dist/my-app/browser/stats.json --openCaching
# Enable persistent build cache (default in v20+)
# Configured in angular.json:
{
"cli": {
"cache": {
"enabled": true,
"path": ".angular/cache",
"environment": "all"
}
}
}
# Clear cache
rm -rf .angular/cacheFor advanced configuration, see references/tooling-patterns.md.
Angular Tooling Patterns
Table of Contents
- Custom Schematics
- Build Optimization
- Multi-Project Workspace
- CI/CD Configuration
- Path Aliases
- Proxy Configuration
Custom Schematics
Generate Schematic Collection
# Install schematics CLI
npm install -g @angular-devkit/schematics-cli
# Create schematic collection
schematics blank --name=my-schematicsSimple Component Schematic
// src/my-component/index.ts
import { Rule, SchematicContext, Tree, apply, url, template, move, mergeWith } from '@angular-devkit/schematics';
import { strings } from '@angular-devkit/core';
export function myComponent(options: { name: string; path: string }): Rule {
return (tree: Tree, context: SchematicContext) => {
const templateSource = apply(url('./files'), [
template({
...options,
...strings,
}),
move(options.path),
]);
return mergeWith(templateSource)(tree, context);
};
}Use Custom Schematics
# Link locally
npm link ./my-schematics
# Use
ng generate my-schematics:my-component --name=test --path=src/appBuild Optimization
Budget Configuration
{
"budgets": [
{
"type": "initial",
"maximumWarning": "500kB",
"maximumError": "1MB"
},
{
"type": "anyComponentStyle",
"maximumWarning": "4kB",
"maximumError": "8kB"
},
{
"type": "anyScript",
"maximumWarning": "100kB",
"maximumError": "200kB"
}
]
}Differential Loading
Automatic in v20+ - builds for modern browsers by default.
// .browserslistrc
last 2 Chrome versions
last 2 Firefox versions
last 2 Safari versions
last 2 Edge versionsCode Splitting
// Lazy load routes for automatic code splitting
export const routes: Routes = [
{
path: 'admin',
loadChildren: () => import('./admin/admin.routes').then(m => m.adminRoutes),
},
{
path: 'reports',
loadComponent: () => import('./reports/reports.component').then(m => m.Reports),
},
];Tree Shaking
Ensure proper imports for tree shaking:
// Good - tree shakeable
import { map, filter } from 'rxjs';
// Avoid - imports entire library
import * as rxjs from 'rxjs';Preload Strategy
// app.config.ts
import { provideRouter, withPreloading, PreloadAllModules } from '@angular/router';
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes, withPreloading(PreloadAllModules)),
],
};Multi-Project Workspace
Create Workspace
# Create empty workspace
ng new my-workspace --create-application=false
cd my-workspace
# Add applications
ng generate application main-app
ng generate application admin-app
# Add library
ng generate library shared-ui
ng generate library data-accessWorkspace Structure
my-workspace/
├── projects/
│ ├── main-app/
│ │ └── src/
│ ├── admin-app/
│ │ └── src/
│ ├── shared-ui/
│ │ └── src/
│ └── data-access/
│ └── src/
├── angular.json
└── package.jsonBuild Specific Project
ng build main-app
ng build shared-ui
ng serve admin-appLibrary Configuration
// projects/shared-ui/ng-package.json
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/shared-ui",
"lib": {
"entryFile": "src/public-api.ts"
}
}Using Library in App
// After building library: ng build shared-ui
import { Button } from 'shared-ui';
@Component({
imports: [Button],
template: `<lib-button>Click</lib-button>`,
})
export class App {}CI/CD Configuration
GitHub Actions
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Test
run: npm run test -- --watch=false --browsers=ChromeHeadless --code-coverage
- name: Build
run: npm run build -- -c production
- name: Upload coverage
uses: codecov/codecov-action@v3
with:
files: ./coverage/lcov.infoGitLab CI
# .gitlab-ci.yml
image: node:20
cache:
paths:
- node_modules/
- .angular/cache/
stages:
- install
- test
- build
install:
stage: install
script:
- npm ci
test:
stage: test
script:
- npm run lint
- npm run test -- --watch=false --browsers=ChromeHeadless
build:
stage: build
script:
- npm run build -- -c production
artifacts:
paths:
- dist/Path Aliases
Configure tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@app/*": ["src/app/*"],
"@env/*": ["src/environments/*"],
"@shared/*": ["src/app/shared/*"],
"@features/*": ["src/app/features/*"],
"@core/*": ["src/app/core/*"]
}
}
}Usage
// Instead of relative imports
import { User } from '../../../core/services/user.service';
// Use path alias
import { User } from '@core/services/user.service';Proxy Configuration
Development Proxy
// proxy.conf.json
{
"/api": {
"target": "http://localhost:3000",
"secure": false,
"changeOrigin": true
},
"/auth": {
"target": "http://localhost:4000",
"secure": false,
"pathRewrite": {
"^/auth": ""
}
}
}Configure in angular.json
{
"serve": {
"options": {
"proxyConfig": "proxy.conf.json"
}
}
}Or via CLI
ng serve --proxy-config proxy.conf.jsonCustom Builders
Using esbuild (Default in v20+)
{
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:application",
"options": {
"browser": "src/main.ts"
}
}
}
}SSR Configuration
# Add SSR
ng add @angular/ssr{
"architect": {
"build": {
"options": {
"server": "src/main.server.ts",
"prerender": true,
"ssr": {
"entry": "server.ts"
}
}
}
}
}Debugging
Source Maps
{
"configurations": {
"development": {
"sourceMap": true
},
"production": {
"sourceMap": {
"scripts": true,
"styles": false,
"hidden": true,
"vendor": false
}
}
}
}Verbose Logging
ng build --verbose
ng serve --verboseDebug Tests
# Run tests with debugging
ng test --browsers=Chrome
# In Chrome DevTools, open Sources tab and set breakpointsPackage Scripts
{
"scripts": {
"start": "ng serve",
"build": "ng build",
"build:prod": "ng build -c production",
"test": "ng test",
"test:ci": "ng test --watch=false --browsers=ChromeHeadless --code-coverage",
"lint": "ng lint",
"lint:fix": "ng lint --fix",
"analyze": "ng build -c production --stats-json && npx esbuild-visualizer --metadata dist/my-app/browser/stats.json --open",
"update": "ng update"
}
}Related skills
How it compares
Pick this over generic frontend skills when the stack is Angular and the task involves schematics, monorepo workspaces, or production build tuning.
FAQ
What Angular versions does this skill target?
Angular v20 and newer. Standalone projects are the default in v20 plus, with ng new, generate, serve, build, test, and lint workflows documented.
When should I not use this skill?
Do not use it for Nx workspace commands, custom Webpack configurations, or non-Angular CLI build systems like Vite standalone or direct esbuild.
How do I run Angular tests in CI?
Use ng test --watch=false --browsers=ChromeHeadless for a single headless run, or add --code-coverage for coverage reports.
Is Angular Tooling safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.