{"id":45127243,"url":"https://github.com/brnshkr/config","last_synced_at":"2026-03-01T22:05:20.782Z","repository":{"id":335926033,"uuid":"1147494974","full_name":"brnshkr/config","owner":"brnshkr","description":"Centralized collection of configuration and tooling used across all @brnshkr projects","archived":false,"fork":false,"pushed_at":"2026-02-25T21:22:00.000Z","size":935,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-26T00:41:10.690Z","etag":null,"topics":["bun","config","configuration","eslint","node","php","php-cs-fixer","phpstan","rector","setup","stylelint","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brnshkr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-01T20:41:52.000Z","updated_at":"2026-02-25T21:06:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/brnshkr/config","commit_stats":null,"previous_names":["brnshkr/config"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/brnshkr/config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brnshkr%2Fconfig","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brnshkr%2Fconfig/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brnshkr%2Fconfig/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brnshkr%2Fconfig/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brnshkr","download_url":"https://codeload.github.com/brnshkr/config/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brnshkr%2Fconfig/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29983122,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","config","configuration","eslint","node","php","php-cs-fixer","phpstan","rector","setup","stylelint","typescript"],"created_at":"2026-02-19T23:22:32.622Z","updated_at":"2026-03-01T22:05:20.766Z","avatar_url":"https://github.com/brnshkr.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 id=\"top\"\u003e\n  \u003ca href=\"#top\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/brnshkr/brand/refs/heads/master/images/projects/config.png\" alt=\"@brnshkr/config project logo\" title=\"@brnshkr/config\"\u003e\n  \u003c/a\u003e\n\n  [![Semantic Versioning 2.0.0][semver-2.0.0-shield-url]][semver-2.0.0-url]\n  [![MIT License][license-shield-url]][license-url]\n  [![Stars][stars-shield-url]][stars-url]\n  [![Forks][forks-shield-url]][forks-url]\n  [![Issues][issues-shield-url]][issues-url]\n  [![Release][release-shield-url]][release-url]\n\u003c/h1\u003e\n\nCentralized collection of configuration and tooling used across all [@brnshkr][@brnshkr-organization-url] projects.\n\n_[☄️ Bug Reports / Feature Requests »][issues-url]_\n\n\u003c!-- omit in toc --\u003e\n## Table of Contents\n\n\u003c!-- NOTICE: All anchors must not include the emoji to work on github, the ❤️ and ⚙️ for some reason must be url encoded though --\u003e\n- [👋 About the Project](#-about-the-project)\n- [☕ JS](#-js)\n  - [🧰 Prerequisites](#-prerequisites)\n  - [🚀 Installation](#-installation)\n    - [✋ Manual](#-manual)\n    - [🎨 Custom](#-custom)\n  - [👀 Usage](#-usage)\n  - [💻 Development](#-development)\n- [🐘 PHP](#-php)\n  - [🧰 Prerequisites](#-prerequisites-1)\n  - [🚀 Installation](#-installation-1)\n    - [🤖 Automatic](#-automatic)\n    - [✋ Manual](#-manual-1)\n    - [🎨 Custom](#-custom-1)\n  - [👀 Usage](#-usage-1)\n  - [💻 Development](#-development-1)\n- [🔨 TODOs / Roadmap](#-todos--roadmap)\n- [❤️ Contributing](#️-contributing)\n  - [💄 Commit Style](#-commit-style)\n  - [⚙️ Workflows](#️-workflows)\n- [🔖 Versioning](#-versioning)\n- [📃 License](#-license)\n- [🌐 Acknowledgments](#-acknowledgments)\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n## 👋 About the Project\n\n**@brnshkr/config** is a centralized, opinionated collection of shared configuration files, tooling, and workflows for JavaScript and PHP projects. It helps standardizing linting, formatting, static analysis, and development workflows across repositories — reducing setup time, preventing config drift, and improving code quality and consistency.\n\n\u003e ❗ **Note** ❗  \n\u003e While you're more than welcome to use this in your own projects, the configurations are tailored specifically for the [@brnshkr][@brnshkr-organization-url] ecosystem and may not be a perfect fit elsewhere.\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n## ☕ JS\n\n### 🧰 Prerequisites\n\n- Node.js \u003e= v24 or Bun \u003e= 1.3 (Older versions may work, but are untested)\n- Any JavaScript package manager (Bun, Yarn, PNPM, NPM)\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n### 🚀 Installation\n\n\u003c!-- omit in toc --\u003e\n#### Bun\n\n```sh\nbun a -D -E @brnshkr/config\n```\n\n\u003c!-- omit in toc --\u003e\n#### Yarn\n\n```sh\nyarn add -D -E @brnshkr/config\n```\n\n\u003c!-- omit in toc --\u003e\n#### PNPM\n\n```sh\npnpm add -D -E @brnshkr/config\n```\n\n\u003c!-- omit in toc --\u003e\n#### NPM\n\n```sh\nnpm i -D -E @brnshkr/config\n```\n\nThis repository currently only provides one way to integrate configuration files (An automatic setup is planned, See [🔨 TODOs / Roadmap](#-todos--roadmap)):\n\n- [**Manual setup**](#-manual) by copying the example configuration files yourself\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n#### ✋ Manual\n\nTake a look at the `peerDependencies` in the [package.json](./package.json) file and install the ones you need for the modules you want to use.  \nYou can then copy the specific configs to your project:\n\n\u003c!-- omit in toc --\u003e\n##### TypeScript\n\n```sh\ncp -v ./node_modules/@brnshkr/config/conf/tsconfig.json.example ./tsconfig.json\n```\n\n\u003c!-- omit in toc --\u003e\n##### ESLint\n\n```sh\ncp -v ./node_modules/@brnshkr/config/conf/eslint.config.mjs.example ./conf/eslint.config.mjs\n```\n\n\u003c!-- omit in toc --\u003e\n##### Stylelint\n\n```sh\ncp -v ./node_modules/@brnshkr/config/conf/stylelint.config.mjs.example ./conf/stylelint.config.mjs\n```\n\n\u003c!-- omit in toc --\u003e\n##### All\n\n```sh\ncp -v ./node_modules/@brnshkr/config/conf/tsconfig.json.example ./tsconfig.json \\\n  \u0026\u0026 cp -v ./node_modules/@brnshkr/config/conf/eslint.config.mjs.example ./conf/eslint.config.mjs \\\n  \u0026\u0026 cp -v ./node_modules/@brnshkr/config/conf/stylelint.config.mjs.example ./conf/stylelint.config.mjs\n```\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n#### 🎨 Custom\n\nTake a look at the function signatures for exact details.\n\n\u003c!-- omit in toc --\u003e\n##### ESLint\n\n```js\n// ./eslint.config.mjs\n\nimport { getConfig } from '@brnshkr/config/eslint';\n\nexport default getConfig(/* customize */);\n```\n\n\u003c!-- omit in toc --\u003e\n##### Stylelint\n\n```js\n// ./stylelint.config.mjs\n\nimport { getConfig } from '@brnshkr/config/stylelint';\n\nexport default getConfig(/* customize */);\n```\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n### 👀 Usage\n\n\u003c!-- omit in toc --\u003e\n#### Run Tooling\n\nThis package provides **configurations**, not a hard requirement on _how_ you run tools.  \nA few possible ways are listed below:\n\n\u003c!-- omit in toc --\u003e\n##### Option 1 — Run Tools Directly (Most Flexible)\n\n\u003c!-- omit in toc --\u003e\n###### ESLint\n\nExample call, adjust as needed\n\n```sh\nbun eslint --config ./conf/eslint.config.mjs --cache --cache-location ./.cache/eslint.cache.json\n```\n\n\u003c!-- omit in toc --\u003e\n###### Stylelint\n\nExample call, adjust as needed\n\n```sh\nbun stylelint --config ./conf/stylelint.config.mjs --cache --cache-location ./.cache/stylelint.cache.json **/*.{css,ejs,html,less,postcss,scss,svelte,svg,vue}\n```\n\n\u003c!-- omit in toc --\u003e\n##### Option 2 — Run Helper Scripts (Bun Only, @brnshkr Convention)\n\nFor these scripts to work you need to follow the convention of putting your configuration files into the [`./conf`](./conf) directory (Exactly how it is done in this project as well).\n\n\u003c!-- omit in toc --\u003e\n###### ESLint (TypeScript Only)\n\nExpected configuration file: `./conf/eslint.config.ts`\n\n```sh\nbun ./node_modules/@brnshkr/config/dist/scripts/eslint.mjs\n```\n\n\u003c!-- omit in toc --\u003e\n###### Stylelint\n\nExpected configuration file: `./conf/stylelint.config.mjs`\n\n```sh\nbun ./node_modules/@brnshkr/config/dist/scripts/stylelint.mjs\n```\n\n\u003c!-- omit in toc --\u003e\n#### IDE Setup\n\nWhen using the recommended way of putting config files into the `./conf` directory it might be neccesary to instruct your IDE to read these files correctly.  \nIf you need a VSCode setup and have the specific [`extensions`](https://github.com/brnshkr/config/blob/master/.vscode/extensions.json) installed you can take a look at the `Project specific` section in [`./.vscode/settings.json`](https://github.com/brnshkr/config/blob/master/.vscode/settings.json).\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n### 💻 Development\n\n\u003c!-- omit in toc --\u003e\n#### Setup\n\nInstall dependencies and setup git hooks:\n\n```sh\nbun install \\\n  \u0026\u0026 bun install-hooks\n```\n\n\u003c!-- omit in toc --\u003e\n#### Scripts\n\nWe recommend using the scripts provided in the [package.json](./package.json) file as the primary way of running common tasks.  \nHave a look yourself for a full list of available targets.\n\n\u003c!-- omit in toc --\u003e\n##### Common targets\n\nHere are some frequently used examples:\n\n- `bun lint` — Run ESLint, Stylelint and Commitlint\n- `bun inspect:eslint` — Inspect ESLint configuration\n- `bun check` — Run TypeScript checks, linters and Vitest\n- `bun run test` — Run Vitest test suite\n- `bun test-update` — Run Vitest test suite and update snapshots\n- `bun run build` — Build the project and generate types\n- `bun watch` — Build the project in watch mode\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n## 🐘 PHP\n\n### 🧰 Prerequisites\n\n- PHP \u003e= 8.5 (Older versions may work, but are untested)\n- Composer \u003e= 2.9 (Older versions may work, but are untested)\n- PHP Extensions:\n  - `json`\n  - `mbstring`\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n### 🚀 Installation\n\n\u003c!-- omit in toc --\u003e\n#### Composer\n\n```sh\ncomposer req --dev brnshkr/config\n```\n\nThis repository provides two ways to integrate configuration files and setup tools into your project:\n\n- [**Automatic setup**](#-automatic) via the Composer plugin\n- [**Manual setup**](#-manual-1) by copying the example configuration files yourself\n\n#### 🤖 Automatic\n\nIf you allow this package to run as a Composer plugin (Composer will prompt you on first install), several helper commands become available.  \nThe most commonly used is the automatic setup command which installs packages for selected modules, copies example config files into your repository, and can optionally create a `Makefile` and/or a `.gitignore` file.\n\nRun the automatic setup with defaults:\n\n```sh\ncomposer brnshkr:config:setup\n```\n\nRun the automatic setup with all flags enabled:\n\n```sh\ncomposer brnshkr:config:setup -gofacme\n```\n\nTake a look at the [plugin commands](#plugin-commands) section to see a full list of available commands.\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n#### ✋ Manual\n\nTake a look at the `suggest`ed packages in the [composer.json](./composer.json) file and install the ones you need for the modules you want to use.  \nYou can then copy the specific configs to your project:\n\n\u003c!-- omit in toc --\u003e\n##### PHP CS Fixer\n\n```sh\ncp -v ./vendor/brnshkr/config/conf/php-cs-fixer.php.example ./conf/php-cs-fixer.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/php-cs-fixer.dist.php.example ./conf/php-cs-fixer.dist.php\n```\n\n\u003c!-- omit in toc --\u003e\n##### Rector\n\n```sh\ncp -v ./vendor/brnshkr/config/conf/rector.php.example ./conf/rector.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/rector.dist.php.example ./conf/rector.dist.php\n```\n\n\u003c!-- omit in toc --\u003e\n##### PHPStan\n\n```sh\ncp -v ./vendor/brnshkr/config/conf/phpstan.php.example ./conf/phpstan.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/phpstan.dist.php.example ./conf/phpstan.dist.php\n```\n\n\u003c!-- omit in toc --\u003e\n##### Makefile\n\n```sh\ncp -v ./vendor/brnshkr/config/conf/Makefile.example ./Makefile\n```\n\n\u003c!-- omit in toc --\u003e\n##### Gitignore\n\n```sh\ncp -v ./vendor/brnshkr/config/conf/.gitignore.example ./.gitignore\n```\n\n\u003c!-- omit in toc --\u003e\n##### All\n\n```sh\ncp -v ./vendor/brnshkr/config/conf/php-cs-fixer.php.example ./conf/php-cs-fixer.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/php-cs-fixer.dist.php.example ./conf/php-cs-fixer.dist.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/rector.php.example ./conf/rector.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/rector.dist.php.example ./conf/rector.dist.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/phpstan.php.example ./conf/phpstan.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/phpstan.dist.php.example ./conf/phpstan.dist.php \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/Makefile.example ./Makefile \\\n  \u0026\u0026 cp -v ./vendor/brnshkr/config/conf/.gitignore.example ./.gitignore\n```\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n#### 🎨 Custom\n\nTake a look at the function signatures for exact details.\n\n\u003c!-- omit in toc --\u003e\n##### PHP CS Fixer\n\n```php\n// ./php-cs-fixer.dist.php\n\n\u003c?php\n\ndeclare(strict_types=1);\n\nuse Brnshkr\\Config\\PhpCsFixer;\n\nreturn PhpCsFixer::getConfig(/* customize */);\n```\n\n\u003c!-- omit in toc --\u003e\n##### Rector\n\n```php\n// ./rector.dist.php\n\n\u003c?php\n\ndeclare(strict_types=1);\n\nuse Brnshkr\\Config\\Rector;\n\nreturn Rector::getConfig(/* customize */);\n```\n\n\u003c!-- omit in toc --\u003e\n##### PHPStan\n\n```php\n// ./phpstan.dist.php\n\n\u003c?php\n\ndeclare(strict_types=1);\n\nuse Brnshkr\\Config\\PhpStan;\n\nreturn PhpStan::getConfig(/* customize */);\n```\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n### 👀 Usage\n\n\u003c!-- omit in toc --\u003e\n#### Run Tooling\n\nThis package provides **configurations**, not a hard requirement on _how_ you run tools.  \nA few possible ways are listed below:\n\n\u003c!-- omit in toc --\u003e\n##### Option 1 — Run Tools Directly (Most Flexible)\n\n\u003c!-- omit in toc --\u003e\n###### PHP CS Fixer\n\nExample call, adjust as needed\n\n```sh\nphp ./vendor/bin/php-cs-fixer fix -v --show-progress=dots --config ./conf/php-cs-fixer.php\n```\n\n\u003c!-- omit in toc --\u003e\n###### Rector\n\nExample call, adjust as needed\n\n```sh\nphp ./vendor/bin/rector process --config ./conf/rector.php\n```\n\n\u003c!-- omit in toc --\u003e\n###### PHPStan\n\nExample call, adjust as needed\n\n```sh\nphp ./vendor/bin/phpstan analyze --memory-limit=-1 --configuration ./conf/phpstan.php\n```\n\n\u003c!-- omit in toc --\u003e\n##### Option 2 — Run Helper Scripts (Make Only, @brnshkr Convention)\n\nFor these scripts to work you need to follow the convention of putting your configuration files into the [`./conf`](./conf) directory (Exactly how it is done in this project as well).\n\nDo not forget to setup your Makefile with this projects Makefile as a base:\n\n```Makefile\ninclude ./vendor/brnshkr/config/conf/Makefile\n```\n\n\u003c!-- omit in toc --\u003e\n###### PHP CS Fixer\n\nExpected configuration file: `./conf/php-cs-fixer.php`\n\n```sh\nmake php-cs-fixer\n```\n\n\u003c!-- omit in toc --\u003e\n###### Rector\n\nExpected configuration file: `./conf/rector.php`\n\n```sh\nmake rector\n```\n\n\u003c!-- omit in toc --\u003e\n###### PHPStan\n\nExpected configuration file: `./conf/phpstan.php`\n\n```sh\nmake phpstan\n```\n\n\u003c!-- omit in toc --\u003e\n#### IDE Setup\n\nWhen using the recommended way of putting config files into the `./conf` directory it might be neccesary to instruct your IDE to read these files correctly.  \nIf you need a VSCode setup and have the specific [`extensions`](https://github.com/brnshkr/config/blob/master/.vscode/extensions.json) installed you can take a look at the `Project specific` section in [`./.vscode/settings.json`](https://github.com/brnshkr/config/blob/master/.vscode/settings.json).\n\n\u003c!-- omit in toc --\u003e\n#### Plugin Commands\n\nOverview of all commands provided by the composer plugin.  \nFor full usage run `composer help \u003ccommand\u003e`, `composer \u003ccommand\u003e --help` or `composer \u003ccommand\u003e -h`.\n\n| Command | Alias | Description |\n| --- | --- | --- |\n| `brnshkr:config` | `b:c` | Displays the plugin overview and a list of available commands. Useful to quickly discover what the plugin exposes. |\n| `brnshkr:config:setup [\u003cmodules\u003e...]` | `b:c:s` | Interactive setup helper: installs suggested packages for modules, copies example config files, and can create a `Makefile` and/or a `.gitignore` file. |\n| `brnshkr:config:update-php-extensions` | `b:c:upe` | Scans installed packages and updates `composer.json` with required `ext-*` platform packages. |\n| `brnshkr:config:extract-phar \u003cpackage\u003e` | `b:c:ep` | Extracts a `.phar` file from a given vendor package. |\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n### 💻 Development\n\n\u003c!-- omit in toc --\u003e\n#### Setup\n\nInstall dependencies and setup project tooling with the following commands and adjust as needed:\n\n```sh\ncomposer install \\\n  \u0026\u0026 cp -v ./conf/php-cs-fixer.php.example ./conf/php-cs-fixer.php \\\n  \u0026\u0026 cp -v ./conf/rector.php.example ./conf/rector.php \\\n  \u0026\u0026 cp -v ./conf/phpstan.php.example ./conf/phpstan.php\n```\n\n\u003c!-- omit in toc --\u003e\n#### Make\n\nWe recommend using [GNU Make][make-url] as the primary task runner.  \nSee [the Makefile](./conf/Makefile) for a full list of available targets.  \nYou can also run `make help` or simply `make` to view all targets with brief descriptions.\n\nIf you need local overrides, create a `./.local/Makefile` — the main Makefile automatically includes it if present.\n\n\u003c!-- omit in toc --\u003e\n##### Common targets\n\nHere are some frequently used examples (see `make help` for the complete list):\n\n- `make help` — Show available targets and usage\n- `make rector` — Run Rector to apply automated PHP refactorings\n- `make php-cs-fixer` — Run PHP-CS-Fixer to format and fix coding-style issues\n- `make phpstan` — Run PHPStan static analysis\n- `make test` — Run PHPUnit test suite\n- `make test-update` — Run PHPUnit test suite and update snapshots\n- `make check` — Run Rector, PHP-CS-Fixer, PHPStan and PHPUnit\n\n## 🔨 TODOs / Roadmap\n\n- Add setup command for JS package (like `composer brnshkr:config:setup`)\n- Expand [`⚙️ Worflows`](#️-workflows) section in readme\n- Write sections about custom PHPStan and ESLint rules\n- Add all around support for enforcing TypeScript aliases with ESLint\n- Add Vue support\n- Add React support\n- Add Tailwind support via \u003chttps://github.com/schoero/eslint-plugin-better-tailwindcss\u003e\n- Improve test setup\n\nAny help is always greatly appreciated 🙂\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n## ❤️ Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag \"enhancement\".\nDon't forget to give the project a star! Thanks again!\n\n1. Fork the project\n2. Create your feature branch =\u003e `git checkout -b feature/my-new-feature`\n3. Commit your changes =\u003e `git commit -m 'feat(my-new-feature): add some awesome new feature'`\n4. Push to the branch =\u003e `git push origin feature/my-new-feature`\n5. Open a pull request\n\n### 💄 Commit Style\n\nThis project mostly follows the [Conventional Commits](https://www.conventionalcommits.org) specification.  \nThere are only a few differences. The main one is that the scope is required:  \nSo **instead of** this commit message signature: `\u003ctype\u003e[optional scope]: \u003cdescription\u003e`  \nYou **should use** this one: `\u003ctype\u003e\u003cscope\u003e: \u003cdescription\u003e`  \nFurther details can be found in the [Commitlint configuration](https://github.com/brnshkr/config/blob/master/conf/commitlint.config.mjs).\n\n### ⚙️ Workflows\n\nSee [./.github/workflows](https://github.com/brnshkr/config/blob/master/.github/workflows) for more information.\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n## 🔖 Versioning\n\nThis project follows [Semantic Versioning 2.0.0][semver-2.0.0-url].  \nThe NPM and Composer packages are versioned in sync, so a version change does not necessarily indicate a change in a specific package.  \nAlso please note the following additional information:\n\n\u003c!-- omit in toc --\u003e\n### Changes Considered as Breaking Changes\n\n- Version requirement changes of Node.js, Bun, PHP or Composer\n- Changes that might break existing userland configs\n\n\u003c!-- omit in toc --\u003e\n### Changes Considered as Non-Breaking Changes\n\n- Changes regarding used rules and their options\n- Version updates, introduction or removal of dependencies\n- Updates of minimum required versions of optional dependencies\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n## 📃 License\n\nDistributed under the MIT License. See [LICENSE](./LICENSE) for more information.\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n## 🌐 Acknowledgments\n\n- [TypeScript](https://www.typescriptlang.org)\n- [ESLint](https://github.com/eslint/eslint)\n- [Stylelint](https://github.com/stylelint/stylelint)\n- [Commitlint](https://github.com/conventional-changelog/commitlint)\n- [@antfu/eslint-config](https://github.com/antfu/eslint-config)\n- [PHP](https://www.php.net)\n- [PHPStan](https://github.com/phpstan/phpstan)\n- [Rector](https://github.com/rectorphp/rector)\n- [GNU Make](https://www.gnu.org/software/make)\n- [PHP Coding Standards Fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer)\n- [Best-README-Template](https://github.com/othneildrew/Best-README-Template) by [othneildrew](https://github.com/othneildrew)\n- [Choose an Open Source License](https://choosealicense.com)\n- [Shields.io](https://shields.io)\n- \u003ca href=\"https://github.com/brnshkr\"\u003e\n    \u003cimg src=\"https://avatars.githubusercontent.com/u/180693849\" width=\"24\" align=\"center\" alt=\"@brnshkr organization logo\"\u003e\n    @brnshkr organization\n  \u003c/a\u003e\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#top\" title=\"Back to top\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;⬆\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/a\u003e\u003c/p\u003e\n\n\u003c!-- END OF CONTENT --\u003e\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n[@brnshkr-organization-url]: https://github.com/brnshkr\n\n[make-url]: https://www.gnu.org/software/make\n\n[semver-2.0.0-url]: https://semver.org/#semantic-versioning-200\n[semver-2.0.0-shield-url]: https://img.shields.io/badge/semver-2.0.0-blue?label=🔖%20semver\u0026style=flat-square\u0026labelColor=%237f399d\u0026color=%23a5097e\n\n[license-url]: https://github.com/brnshkr/config/blob/master/LICENSE\n[license-shield-url]: https://img.shields.io/github/license/brnshkr/config.svg?label=📃%20license\u0026style=flat-square\u0026labelColor=%237f399d\u0026color=%23a5097e\n\n[stars-url]: https://github.com/brnshkr/config/stargazers\n[stars-shield-url]: https://img.shields.io/github/stars/brnshkr/config.svg?label=⭐%20stars\u0026style=flat-square\u0026labelColor=%237f399d\u0026color=%23a5097e\n\n[forks-url]: https://github.com/brnshkr/config/network/members\n[forks-shield-url]: https://img.shields.io/github/forks/brnshkr/config.svg?label=🍴%20forks\u0026style=flat-square\u0026labelColor=%237f399d\u0026color=%23a5097e\n\n[issues-url]: https://github.com/brnshkr/config/issues\n[issues-shield-url]: https://img.shields.io/github/issues/brnshkr/config.svg?label=🚨%20issues\u0026style=flat-square\u0026labelColor=%237f399d\u0026color=%23a5097e\n\n\u003c!-- NOTICE: Only use packagist version here since both packages are versioned in sync --\u003e\n[release-url]: https://github.com/brnshkr/config/releases\n[release-shield-url]: https://img.shields.io/packagist/v/brnshkr/config?style=flat-square\u0026label=📦%20npm%2Fpackagist\u0026labelColor=7f399d\u0026color=%23a5097e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrnshkr%2Fconfig","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrnshkr%2Fconfig","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrnshkr%2Fconfig/lists"}