A comprehensive command-line interface (CLI) tool designed to automate and streamline the initialization of Angular projects with intelligent version management, interactive library search, and comprehensive prerequisite handling.
- π System Environment Check - Displays Node.js, npm, nvm, and Angular CLI versions before starting
- π¦ Angular Version Selection - Fetches and displays all available Angular versions from npm registry
- β Prerequisite Compatibility Check - Validates Node.js compatibility with selected Angular version
- π Smart Node Version Management - Automatically handles Node version switching with nvm
- πΎ Node.js Installation Assistant - Guides installation when nvm is not available
- π Project Location Configuration - Choose current or custom directory for project creation
- π― Project Initialization - Creates Angular project with selected configuration
-
π Interactive Library Search & Installation
- Real-time npm package search with autocomplete
- Package validation and metadata display
- Weekly download statistics
- Version selection (latest or specific)
- Multiple library queue management
-
Dynamic Library Version Resolution
- Automatically resolves compatible versions based on Angular version
- Checks peer dependencies from npm registry
- Matches major versions for Angular-scoped packages
- Displays compatibility warnings
- Caches npm responses for performance
-
πΎ Profile Management
- Save configurations as reusable profiles
- Load saved profiles for quick setup
- Export/import profiles for sharing
- Local profile storage (saved to
~/.ng-init)
- Local profile storage (saved to
- Node.js: v18.0.0 or higher
- npm: Comes with Node.js
- nvm (optional but recommended): For managing multiple Node.js versions
npm install -g @jatinmourya/ng-initnpx @jatinmourya/ng-initng-initor
ng-init createThis starts the interactive CLI that guides you through:
- System environment check
- Angular version selection
- Node.js compatibility check and resolution
- Project configuration
- Library search and installation
- Profile saving option
ng-init checkDisplays current versions of Node.js, npm, nvm, and Angular CLI.
ng-init profile listng-init profile show <profile-name>ng-init profile delete <profile-name>ng-init profile export <profile-name> <output-file>Example:
ng-init profile export my-enterprise-setup ./enterprise-profile.jsonng-init profile import <profile-file>Example:
ng-init profile import ./enterprise-profile.jsonng-init examples- Run
ng-init - Select Angular version 17
- Configure project options (routing, style, etc.)
- Select "Interactive search" for libraries
- Search and add packages like @angular/material, @ngrx/store
- Save as profile for future use
- Run
ng-init - Select "Yes" to use saved profile
- Choose your saved profile
- Confirm configuration
- Project is created automatically
- Run
ng-init - Select latest Angular version
- Configure project options
- Skip library installation
- Project created with basic Angular setup
The following diagram illustrates the complete user journey when using the ng-init CLI application:
flowchart TB
subgraph START["π CLI Start"]
A["User runs ng-init"] --> B["Display Welcome Banner"]
B --> C["Display System Versions<br/>(Node.js, npm, nvm, Angular CLI)"]
end
subgraph PROFILE["πΎ Profile Check"]
C --> D{"Use saved profile?"}
D -->|"Yes"| E["List available profiles"]
E --> F["Select profile"]
F --> G["Display profile info"]
G --> H{"Confirm profile?"}
H -->|"Yes"| SKIP["Skip to Project Name<br/>(if not in profile)"]
H -->|"No"| I["Continue with manual setup"]
D -->|"No"| I
end
subgraph ANGULAR["π¦ Angular Version Selection"]
I --> J["Fetch Angular versions from npm"]
J --> K["Select Major Version<br/>(e.g., Angular 17, 18, 19)"]
K --> L["Select Minor Version<br/>(e.g., 17.0.x, 17.1.x)"]
L --> M["Select Patch Version<br/>(e.g., 17.1.0, 17.1.1)"]
M --> N["Angular version confirmed"]
end
subgraph NODE["π§ Node.js Compatibility"]
N --> O["Check Node.js requirements"]
SKIP --> O
O --> P{"Node.js compatible?"}
P -->|"Yes"| PROJECT
P -->|"No"| Q{"nvm installed?"}
Q -->|"Yes"| R["Check installed Node versions"]
R --> S{"Compatible version<br/>available?"}
S -->|"Yes"| T["Select & switch Node version"]
T --> PROJECT
S -->|"No"| U["Install recommended Node version"]
U --> T
Q -->|"No"| V{"How to proceed?"}
V -->|"Install nvm"| W["Display nvm install guide"]
W --> X["Exit - Install manually"]
V -->|"Direct install<br/>(Windows)"| Y["Install Node via winget"]
Y --> Z["Exit - Restart terminal"]
V -->|"Exit"| X
end
subgraph PROJECT["π Project Configuration"]
AA["Enter project name"] --> BB{"Select location?"}
BB -->|"Current directory"| CC["Use current directory"]
BB -->|"Custom"| DD["Enter custom path"]
CC --> EE["Project path confirmed"]
DD --> EE
EE --> FF["Enable routing?"]
FF --> GG["Select stylesheet format"]
GG --> HH["Enable strict mode?"]
HH --> II["Use standalone components?"]
II --> JJ["Project configuration complete"]
end
subgraph LIBRARY["π Library Selection"]
JJ --> SS{"Library selection method?"}
SS -->|"Interactive Search"| TT["Search npm packages"]
TT --> UU["Select package"]
UU --> VV["Choose version method"]
VV -->|"Latest"| WW["Use latest version"]
VV -->|"Specific"| XX["Select Major β Minor β Patch"]
VV -->|"Manual"| YY["Enter version manually"]
WW & XX & YY --> ZZ["Check Angular compatibility"]
ZZ --> AAA{"Add more libraries?"}
AAA -->|"Yes"| TT
AAA -->|"No"| BBB["Libraries selected"]
SS -->|"Manual Input"| CCC["Enter package names"]
CCC --> BBB
SS -->|"Skip"| BBB
end
subgraph SAVE["πΎ Save Profile"]
BBB --> NNN{"Save as profile?"}
NNN -->|"Yes"| OOO["Enter profile name"]
OOO --> PPP["Profile saved"]
PPP --> QQQ["Display configuration summary"]
NNN -->|"No"| QQQ
end
subgraph CONFIRM["β
Confirmation"]
QQQ --> RRR{"Confirm creation?"}
RRR -->|"No"| SSS["Project creation cancelled"]
RRR -->|"Yes"| TTT["Start project creation"]
end
subgraph CREATE["π¨ Project Creation"]
TTT --> UUU["Create Angular project"]
UUU --> VVV["Resolve library versions"]
VVV --> WWW["Install additional libraries"]
WWW --> XXX["Run npm install"]
XXX --> NNNN["π Success!"]
end
subgraph END["π Complete"]
NNNN --> OOOO["Display next steps"]
OOOO --> PPPP["cd project-name"]
PPPP --> QQQQ["ng serve"]
QQQQ --> RRRR["Open localhost:4200"]
end
| Step | Phase | Description |
|---|---|---|
| 1 | Start | User initiates CLI with ng-init command |
| 2 | System Check | Displays current Node.js, npm, nvm, and Angular CLI versions |
| 3 | Profile | Option to use a previously saved configuration profile |
| 4 | Angular Version | Three-tier selection: Major β Minor β Patch version |
| 5 | Node.js Check | Validates and resolves Node.js compatibility |
| 6 | Project Setup | Configure project name and location |
| 7 | Libraries | Interactive search or manual input |
| 8 | Save Profile | Optionally save configuration for reuse |
| 9 | Confirm | Review summary and confirm creation |
| 10 | Create | Execute all selected operations |
| 11 | Complete | Display success message and next steps |
ng-init/
βββ src/
β βββ index.js # CLI entry point
β βββ runner.js # Main CLI flow
β βββ utils/ # Helper functions
β β βββ version-checker.js # Version detection and management
β β βββ compatibility.js # Compatibility checking & version resolution
β β βββ npm-search.js # npm registry search
β β βββ installer.js # Package installation
β β βββ prompt-handler.js # Interactive prompts
β β βββ file-utils.js # File operations
β β βββ profile-manager.js # Profile management
β βββ templates/ # Configuration templates (disabled/removed)
βββ build.js # Build script for production
βββ package.json
βββ README.md
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any bugs or have feature requests, please create an issue on GitHub.
For detailed documentation, visit PROJECT_DOCUMENTATION.md
- Angular Team for the amazing framework
- Node.js and npm communities
- All open-source contributors
- GitHub Issues: Report issues
- β±οΈ 80% reduction in project initialization time
- β Zero environment setup errors with guided installation
- π Instant project scaffolding with best practices
- πΎ Reusable profiles for team standardization
- π Dynamic library version resolution for Angular compatibility