These tools assist developers in initializing, building, and managing JavaScript and TypeScript projects. @angular/cli and vue-cli are official command-line interfaces tailored for their respective frameworks, handling scaffolding, serving, and building. create-react-app was the long-standing standard for React applications but is now deprecated. @microsoft/rush differs by focusing on monorepo management, coordinating multiple projects within a single repository rather than scaffolding a single app.
Developers often need to choose the right tool to start and manage their codebases. @angular/cli, @microsoft/rush, create-react-app, and vue-cli all play roles in this space, but they solve different problems. Some focus on single-application scaffolding, while others manage complex multi-project repositories. Let's examine how they handle initialization, configuration, and long-term maintenance.
Getting a project running is the first step. Each tool has its own command structure and setup flow.
@angular/cli creates a full Angular workspace with a specific structure.
# angular: Initialize a new workspace
ng new my-app --routing --style=scss
@microsoft/rush initializes a monorepo structure rather than a single app.
rush.json file.# rush: Initialize a monorepo
rush init
# Then add a project
rush add --project my-web-app --to my-web-app
create-react-app used to scaffold a React app with zero config.
# cra: Scaffold a React app (Deprecated)
npx create-react-app my-app
vue-cli offers an interactive wizard for Vue projects.
# vue: Create a Vue project
vue create my-app
How much control do you have over the build process? This varies wildly between these tools.
@angular/cli keeps config in angular.json.
// angular: angular.json
{
"projects": {
"my-app": {
"architect": {
"build": {
"options": {
"outputPath": "dist/my-app"
}
}
}
}
}
}
@microsoft/rush relies on rush.json and per-project package.json files.
// rush: rush.json
{
"projects": [
{
"packageName": "my-web-app",
"projectFolder": "apps/my-web-app"
}
]
}
create-react-app hid configuration completely.
// cra: package.json (before eject)
{
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build"
}
}
vue-cli uses vue.config.js for overrides.
// vue: vue.config.js
module.exports = {
configureWebpack: {
output: {
filename: '[name].[contenthash].js'
}
}
};
This is where @microsoft/rush stands apart from the others.
@angular/cli supports workspaces with multiple Angular apps.
# angular: Generate a library within the workspace
ng generate library my-lib
@microsoft/rush is built for polyglot monorepos.
# rush: Build all projects with dependencies
rush build --to my-web-app
create-react-app has no monorepo support.
# cra: No native monorepo command
# Must rely on external tooling for multi-project setups
vue-cli focuses on single projects.
# vue: No native monorepo command
# Typically used for standalone Vue applications
This is the most critical factor for architectural decisions today.
@angular/cli is actively maintained.
# angular: Update the CLI globally
npm install -g @angular/cli@latest
@microsoft/rush is actively maintained by Microsoft.
# rush: Update Rush globally
npm install -g @microsoft/rush
create-react-app is officially deprecated.
# cra: Deprecation notice on install
# npm warn deprecated react-scripts@5.0.1
vue-cli is in maintenance mode.
# vue: Maintenance mode notice
# Vue CLI is not recommended for Vue 3 projects anymore
| Feature | @angular/cli | @microsoft/rush | create-react-app | vue-cli |
|---|---|---|---|---|
| Primary Use | Angular Apps | Monorepo Management | React Apps (Legacy) | Vue Apps (Legacy) |
| Config Style | angular.json | rush.json + package.json | Hidden (Eject required) | vue.config.js |
| Monorepo | ✅ (Angular only) | ✅ (Polyglot) | ❌ | ❌ |
| Status | 🟢 Active | 🟢 Active | 🔴 Deprecated | 🟡 Maintenance |
@angular/cli is the standard for Angular teams. If you choose Angular, you choose this CLI. It provides a stable, opinionated path for building enterprise applications.
@microsoft/rush is the heavy lifter for large organizations. If you have 50+ packages in one repo, Rush handles the dependency linking and build ordering better than most alternatives. It is not for small apps.
create-react-app should be avoided. It served the community well for years, but the ecosystem has moved to faster, more flexible tools. Starting a new React project with CRA introduces technical debt immediately.
vue-cli is for legacy support. If you are starting fresh with Vue, use Vite. It is faster, simpler, and officially recommended by the Vue core team.
Final Thought: Match the tool to your project scale and framework. For single apps, use framework-specific tools (Angular CLI) or modern bundlers (Vite). For massive repos, use Rush. Avoid deprecated tools like CRA to ensure long-term maintainability.
Choose @angular/cli if you are building an application with Angular. It is the only supported way to manage Angular projects, offering tight integration with the framework's compiler, testing tools, and update mechanisms. It is mandatory for standard Angular development workflows.
Choose @microsoft/rush if you manage a monorepo with many interconnected packages, especially in a large enterprise environment. It excels at handling dependency installation, versioning, and incremental builds across dozens of projects, but it adds complexity that small teams may not need.
Do NOT choose create-react-app for new projects. It is officially deprecated and no longer maintained by the React team. Existing projects should consider migrating to modern alternatives like Vite, Next.js, or Remix for better performance and support.
Choose vue-cli only if you are maintaining a legacy Vue 2 application. For new Vue 3 projects, the official recommendation is to use Vite directly, as Vue CLI is in maintenance mode and lacks the speed and plugin ecosystem of modern tooling.
The sources for this package are in the Angular CLI repository. Please file issues and pull requests against that repository.
Usage information and reference details can be found in repository README file.