# dilanx/craco

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/dilanx-craco).**

7,429 stars · 486 forks · TypeScript · Apache-2.0

## Links

- GitHub: https://github.com/dilanx/craco
- Homepage: https://craco.js.org
- awesome-repositories: https://awesome-repositories.com/repository/dilanx-craco.md

## Topics

`configuration` `cra` `create-react-app` `customization` `react`

## Description

Craco is a configuration layer for Create React App that modifies Webpack and Jest settings without requiring the project to eject. It functions as a build tool plugin system and configuration manager, allowing for the injection of custom settings and third-party logic into the frontend build pipeline.

The project utilizes a hook-based architecture and non-destructive configuration merging to override default settings. This allows for Webpack configuration overrides and Jest configuration tuning while maintaining the original source files.

The system covers a broad range of build pipeline extensions, including development server customization and environment-specific configuration logic. It also provides diagnostic capabilities through build process logging to track compilation and configuration execution.

## Tags

### Development Tools & Productivity

- [Custom Build Configurations](https://awesome-repositories.com/f/development-tools-productivity/webpack-asset-generators/custom-build-configurations.md) — Allows for the injection of custom Webpack plugins and bundling settings without ejecting from Create React App.
- [Build Plugin Architectures](https://awesome-repositories.com/f/development-tools-productivity/build-plugin-architectures.md) — Provides a hook-based architecture for adding third-party logic and extensions to a frontend build pipeline.
- [Build Process Interceptors](https://awesome-repositories.com/f/development-tools-productivity/build-process-interceptors.md) — Intercepts the default Create React App build process to inject custom configurations without ejecting.
- [Bundler Configuration Overrides](https://awesome-repositories.com/f/development-tools-productivity/webpack-asset-generators/custom-build-configurations/bundler-configuration-overrides.md) — Enables custom bundling configurations to modify the Webpack build process for development and production. ([source](https://craco.js.org/docs/configuration-api/))
- [Build Script Overrides](https://awesome-repositories.com/f/development-tools-productivity/build-script-overrides.md) — Allows replacing default system entry points with custom scripts to change how the application build is launched.
- [Compilation Setting Configuration](https://awesome-repositories.com/f/development-tools-productivity/build-tooling/build-orchestration-logic/build-orchestration-configuration/build-configuration-systems/compiler-configurations/compilation-setting-configuration.md) — Offers a configuration system for customizing compilation and linting settings without removing default project settings. ([source](https://cdn.jsdelivr.net/gh/dilanx/craco@main/README.md))
- [Development Servers](https://awesome-repositories.com/f/development-tools-productivity/development-servers.md) — Provides options for adjusting local server settings to control how the application is served and debugged. ([source](https://craco.js.org/docs/category/configuration/))
- [Environment Variable Mapping](https://awesome-repositories.com/f/development-tools-productivity/environment-variable-mapping.md) — Provides mechanisms to map specific configuration logic to active environment variables for differentiating build outputs.

### Web Development

- [Create React App Customizations](https://awesome-repositories.com/f/web-development/create-react-app-customizations.md) — Customizes build tools and settings for Create React App projects without requiring the project to eject.
- [React Development](https://awesome-repositories.com/f/web-development/react-development.md) — Tunes the local development server and environment settings to improve the application debugging experience.

### DevOps & Infrastructure

- [Build Plugins](https://awesome-repositories.com/f/devops-infrastructure/cicd-pipeline-automation/core-build-engines/build-tooling/build-pipeline-extensions/build-plugins.md) — Ships a hook system enabling the creation of custom plugins to modify build tool settings and inject custom logic. ([source](https://craco.js.org/docs/plugin-api/getting-started/))
- [Build Optimization](https://awesome-repositories.com/f/devops-infrastructure/cicd-pipeline-automation/core-build-engines/build-optimization.md) — Modifies Webpack bundling configurations and plugins to optimize development and production build processes.

### Programming Languages & Runtimes

- [Configuration Merging](https://awesome-repositories.com/f/programming-languages-runtimes/function-parameter-handling/default-parameter-assignments/configuration-merging.md) — Combines default settings with user-defined overrides using deep object merging to preserve core functionality.

### Software Engineering & Architecture

- [Build Pipeline Extensions](https://awesome-repositories.com/f/software-engineering-architecture/integration-extensibility/extensibility/plugin-architectures/hook-event-orchestration/event-driven-plugin-registries/build-pipeline-extensions.md) — Integrates third-party plugins and custom scripts into the React build process via a configuration layer.
- [Non-Destructive Editing Workflows](https://awesome-repositories.com/f/software-engineering-architecture/non-destructive-editing-workflows.md) — Merges custom user settings into the base configuration without modifying or deleting the original source files.
- [Hook-Based Plugin Systems](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/plugin-module-systems/modular-plugin-architectures/plugin-based-architectures/hook-based-plugin-systems.md) — Implements a hook-based plugin system that allows external plugins to modify configuration objects during the build.
- [Conditional Configuration Blocks](https://awesome-repositories.com/f/software-engineering-architecture/conditional-build-configuration/conditional-configuration-blocks.md) — Executes specific configuration logic based on active environment variables to separate development and production modes. ([source](https://craco.js.org/docs/configuration/getting-started/))

### Testing & Quality Assurance

- [Configuration Overrides](https://awesome-repositories.com/f/testing-quality-assurance/software-testing/testing-frameworks/test-frameworks/test-levels-and-types/integration-testing-suites/test-suite-integrations/jest-presets/configuration-overrides.md) — Provides a way to customize Jest settings for Create React App projects without needing to eject. ([source](https://craco.js.org/docs/configuration-api/))
- [Test Configuration](https://awesome-repositories.com/f/testing-quality-assurance/general-testing-utilities/test-configuration.md) — Adjusts Jest settings and test behaviors to fit specific project requirements without altering core tools.
