@angular/cli vs @microsoft/rush vs create-react-app vs vue-cli
Frontend Project Scaffolding and Monorepo Management Tools
@angular/cli@microsoft/rushcreate-react-appvue-cliSimilar Packages:

Frontend Project Scaffolding and Monorepo Management Tools

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.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
@angular/cli027,0421.54 MB2937 days agoMIT
@microsoft/rush06,439523 kB1,03410 hours agoMIT
create-react-app0103,80839.3 kB2,376a year agoMIT
vue-cli029,626-1,0738 years agoMIT

Frontend Project Scaffolding and Monorepo Management: A Technical Comparison

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.

🚀 Project Initialization: Commands and Setup

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.

  • It sets up TypeScript, testing, and linting by default.
  • You can choose routing and stylesheet formats during setup.
# angular: Initialize a new workspace
ng new my-app --routing --style=scss

@microsoft/rush initializes a monorepo structure rather than a single app.

  • It creates a common config folder and a rush.json file.
  • You typically add individual projects (like React or Node apps) into subfolders later.
# 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.

  • It hidden all build settings behind a single dependency.
  • Note: This tool is no longer recommended for new work.
# cra: Scaffold a React app (Deprecated)
npx create-react-app my-app

vue-cli offers an interactive wizard for Vue projects.

  • You select features like Babel, TypeScript, or PWA via a prompt.
  • It generates a Vue 2 or Vue 3 project based on selection.
# vue: Create a Vue project
vue create my-app

⚙️ Configuration: Ejecting vs. Config Files

How much control do you have over the build process? This varies wildly between these tools.

@angular/cli keeps config in angular.json.

  • You can modify build targets, budgets, and schematics.
  • It does not require ejecting to change most settings.
// 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.

  • It manages shared dependencies and version policies centrally.
  • Build logic is often delegated to the tools inside each project (like Webpack or Vite).
// rush: rush.json
{
  "projects": [
    {
      "packageName": "my-web-app",
      "projectFolder": "apps/my-web-app"
    }
  ]
}

create-react-app hid configuration completely.

  • To customize Webpack, you had to run an "eject" command.
  • Ejecting was irreversible and copied all config files into your repo.
// cra: package.json (before eject)
{
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build"
  }
}

vue-cli uses vue.config.js for overrides.

  • You can chain Webpack config without ejecting.
  • More flexible than CRA, but still abstracts the underlying bundler.
// vue: vue.config.js
module.exports = {
  configureWebpack: {
    output: {
      filename: '[name].[contenthash].js'
    }
  }
};

📦 Monorepo Support: Single App vs. Many Packages

This is where @microsoft/rush stands apart from the others.

@angular/cli supports workspaces with multiple Angular apps.

  • You can generate libraries and applications in one repo.
  • Best for Angular-only ecosystems.
# angular: Generate a library within the workspace
ng generate library my-lib

@microsoft/rush is built for polyglot monorepos.

  • It can manage React, Node, Angular, and other tools together.
  • Handles linking dependencies between projects efficiently.
# rush: Build all projects with dependencies
rush build --to my-web-app

create-react-app has no monorepo support.

  • It is designed for a single application per repository.
  • Using it in a monorepo requires external tools like Turborepo or Nx.
# cra: No native monorepo command
# Must rely on external tooling for multi-project setups

vue-cli focuses on single projects.

  • Like CRA, it does not manage multiple packages natively.
  • Teams often pair it with other tools for larger setups.
# vue: No native monorepo command
# Typically used for standalone Vue applications

🛑 Maintenance Status: Active vs. Deprecated

This is the most critical factor for architectural decisions today.

@angular/cli is actively maintained.

  • It updates alongside the Angular framework.
  • Safe for long-term enterprise use.
# angular: Update the CLI globally
npm install -g @angular/cli@latest

@microsoft/rush is actively maintained by Microsoft.

  • Used internally at Microsoft and many large companies.
  • Stable release cycle with regular patches.
# rush: Update Rush globally
npm install -g @microsoft/rush

create-react-app is officially deprecated.

  • The React team advises against using it for new apps.
  • No new features or security updates are expected.
# cra: Deprecation notice on install
# npm warn deprecated react-scripts@5.0.1

vue-cli is in maintenance mode.

  • The Vue team recommends Vite for Vue 3 projects.
  • Only critical bugs are fixed; no major feature work.
# vue: Maintenance mode notice
# Vue CLI is not recommended for Vue 3 projects anymore

📊 Summary: Capabilities at a Glance

Feature@angular/cli@microsoft/rushcreate-react-appvue-cli
Primary UseAngular AppsMonorepo ManagementReact Apps (Legacy)Vue Apps (Legacy)
Config Styleangular.jsonrush.json + package.jsonHidden (Eject required)vue.config.js
Monorepo✅ (Angular only)✅ (Polyglot)
Status🟢 Active🟢 Active🔴 Deprecated🟡 Maintenance

💡 The Big Picture

@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.

How to Choose: @angular/cli vs @microsoft/rush vs create-react-app vs vue-cli

  • @angular/cli:

    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.

  • @microsoft/rush:

    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.

  • create-react-app:

    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.

  • vue-cli:

    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.

README for @angular/cli

Angular CLI - The CLI tool for Angular.

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.