{"id":37263334,"url":"https://github.com/wp-spaghetti/wp-boot","last_synced_at":"2026-05-03T23:01:12.070Z","repository":{"id":329774061,"uuid":"1120636833","full_name":"wp-spaghetti/wp-boot","owner":"wp-spaghetti","description":"WP Boot is a lightweight Composer-based WordPress management system designed for scenarios where you need to manage an existing WordPress installation without restructuring its directory layout","archived":false,"fork":false,"pushed_at":"2026-03-26T23:20:24.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T02:19:22.305Z","etag":null,"topics":["bedrock","wordplate","wordpress","wpstarter"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wp-spaghetti.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":".github/SUPPORT.md","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},"funding":{"github":["frugan-dev"],"buy_me_a_coffee":"frugan"}},"created_at":"2025-12-21T16:26:03.000Z","updated_at":"2026-03-26T23:20:27.000Z","dependencies_parsed_at":"2026-01-16T00:00:10.922Z","dependency_job_id":null,"html_url":"https://github.com/wp-spaghetti/wp-boot","commit_stats":null,"previous_names":["wp-spaghetti/wp-boot"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/wp-spaghetti/wp-boot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wp-spaghetti%2Fwp-boot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wp-spaghetti%2Fwp-boot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wp-spaghetti%2Fwp-boot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wp-spaghetti%2Fwp-boot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wp-spaghetti","download_url":"https://codeload.github.com/wp-spaghetti/wp-boot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wp-spaghetti%2Fwp-boot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32587823,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: 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":["bedrock","wordplate","wordpress","wpstarter"],"created_at":"2026-01-15T23:48:24.548Z","updated_at":"2026-05-03T23:01:12.056Z","avatar_url":"https://github.com/wp-spaghetti.png","language":"PHP","funding_links":["https://github.com/sponsors/frugan-dev","https://buymeacoffee.com/frugan"],"categories":[],"sub_categories":[],"readme":"![PHP Version](https://img.shields.io/packagist/php-v/wp-spaghetti/wp-boot)\n![Packagist Downloads](https://img.shields.io/packagist/dt/wp-spaghetti/wp-boot)\n![Packagist Stars](https://img.shields.io/packagist/stars/wp-spaghetti/wp-boot)\n![GitHub Actions Workflow Status](https://github.com/wp-spaghetti/wp-boot/actions/workflows/release.yml/badge.svg)\n![Coverage Status](https://img.shields.io/codecov/c/github/wp-spaghetti/wp-boot)\n![Known Vulnerabilities](https://snyk.io/test/github/wp-spaghetti/wp-boot/badge.svg)\n![GitHub Issues](https://img.shields.io/github/issues/wp-spaghetti/wp-boot)\n\n![GitHub Release](https://img.shields.io/github/v/release/wp-spaghetti/wp-boot)\n![License](https://img.shields.io/github/license/wp-spaghetti/wp-boot)\n\u003c!--\nQlty @see https://github.com/badges/shields/issues/11192\n![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/wp-spaghetti/wp-boot/total)\n![Code Climate](https://img.shields.io/codeclimate/maintainability/wp-spaghetti/wp-boot)\n![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)\n--\u003e\n\n# WP Boot\n\n**WP Boot** is a lightweight Composer-based WordPress management system designed for scenarios where you need to manage an existing WordPress installation without restructuring its directory layout.\n\n## Requirements\n\n- PHP \u003e= 8.1\n- Composer\n- **rsync** - Used to sync WordPress core files from vendor to public directory\n\n## Why WP Boot?\n\nWhile robust solutions like [Bedrock](https://roots.io/bedrock/), [WP Starter](https://github.com/wecodemore/wpstarter), and [Wordplate](https://github.com/vinkla/wordplate) offer excellent WordPress management through Composer, they typically require significant structural changes to the WordPress directory layout. \n\nWP Boot was created for situations where:\n\n- You're working with an **existing WordPress installation** that cannot be heavily modified\n- You need to **version control** an already-deployed WordPress site\n- You want to **dockerize** a traditional WordPress setup without restructuring\n- You need a quick, minimal-impact solution for dependency management\n\n## How It Works\n\nWP Boot uses **rsync** to synchronize WordPress core files from the Composer vendor directory to your public directory, keeping the standard WordPress structure intact.\n\nIt only modifies the `wp-config.php` file, adding a simple bootstrap block:\n\n```php\n// BEGIN WP Boot - Do not remove this block\n// @see https://github.com/wp-spaghetti/wp-boot\nuse function Env\\env;\n\nrequire_once dirname(__DIR__).'/private/wp-boot/bootstrap.php';\n// END WP Boot - Do not remove this block\n\ndefine('DB_NAME', env('DB_NAME'));\ndefine('DB_USER', env('DB_USER'));\ndefine('DB_PASSWORD', env('DB_PASSWORD'));\ndefine('DB_HOST', env('DB_HOST'));\n```\n\nThis approach allows you to:\n\n- Manage WordPress core, plugins, and themes via Composer\n- Use environment variables for configuration (`.env` files)\n- Keep the standard WordPress directory structure intact\n\n## Installation\n\n```bash\ncomposer create-project wp-spaghetti/wp-boot private/wp-boot\ncd private/wp-boot\ncp .env.dist .env\n# Edit .env with your configuration\n# IMPORTANT: Set WP_BOOT_SYNC_ENABLED=true to enable WordPress sync\n```\n\n**Note:** During `composer create-project`, WordPress core will be downloaded to `vendor/wordpress/`, but files will **not** be synced to your `public/` directory until you set `WP_BOOT_SYNC_ENABLED=true` in your `.env` file.\n\nThis gives you time to:\n1. Review and configure your `.env` file\n2. Verify the target `public/` directory exists and is correct\n3. Decide when to sync WordPress files\n\nOnce configured, run:\n\n```bash\ncomposer install  # or composer update\n```\n\nThis will trigger the sync script and copy WordPress core files to `../../public/`.\n\nThen add the bootstrap block to your `wp-config.php` file (see \"How It Works\" section above).\n\n### Directory Structure\n\nAfter installation, your project structure will look like this:\n\n```\nyour-project/\n├── private/\n│   └── wp-boot/\n│       ├── vendor/\n│       │   └── wordpress/          # WordPress core managed by Composer\n│       ├── .env                     # Environment configuration\n│       ├── bootstrap.php\n│       ├── composer.json\n│       └── post-cmd.sh              # rsync sync script\n└── public/                          # Your WordPress public directory\n    ├── wp-admin/                    # Synced from vendor/wordpress\n    ├── wp-includes/                 # Synced from vendor/wordpress\n    ├── wp-content/\n    │   ├── plugins/                 # Managed by Composer\n    │   ├── themes/                  # Managed by Composer\n    │   └── uploads/                 # User uploads (not managed)\n    ├── wp-config.php                # Modified to include bootstrap\n    └── index.php                    # Synced from vendor/wordpress\n```\n\nThe `post-cmd.sh` script automatically syncs WordPress core files from `private/wp-boot/vendor/wordpress/` to `public/` after every `composer install` or `composer update`.\n\n## Optional: Installing Language Packs\n\nWP Boot includes [WP Translation Downloader](https://github.com/inpsyde/wp-translation-downloader), a Composer plugin that automatically downloads translations from the WordPress.org API for all installed WordPress packages (core, plugins, and themes).\n\n**1. Add your desired languages to `composer.json`:**\n\nIn the `extra.wp-translation-downloader.languages` array, add the locale codes you need:\n\n```json\n{\n  \"extra\": {\n    \"wp-translation-downloader\": {\n      \"languages\": [\n        \"it_IT\"\n      ]\n    }\n  }\n}\n```\n\nThen run `composer update` — translations will be automatically downloaded to `public/wp-content/languages/`.\n\n**2. Configure WordPress to use the language in `.env`:**\n\n```env\nWPLANG=it_IT\n```\n\nFor more information: https://github.com/inpsyde/wp-translation-downloader\n\n## Optional: Disallow Search Engine Indexing in Non-Production\n\nWordPress 5.5+ includes native environment detection via `WP_ENVIRONMENT_TYPE`. Wp-boot automatically sets this based on your `WP_ENV` value in `.env`.\n\nTo prevent search engines from indexing staging/development sites, create this file:\n\n**`public/wp-content/mu-plugins/disallow-indexing.php`**\n```php\n\u003c?php\n/**\n * Plugin Name: Disallow Indexing (Non-Production)\n * Description: Automatically disallows search engine indexing in non-production environments\n */\n\nif (wp_get_environment_type() !== 'production' \u0026\u0026 !is_admin()) {\n    add_action('pre_option_blog_public', '__return_zero');\n}\n```\n\nThis automatically sets \"Discourage search engines\" in Settings → Reading for non-production environments.\n\n## When NOT to Use WP Boot\n\nFor new projects or when you have full control over the infrastructure, consider these more robust alternatives:\n\n- **[Bedrock](https://roots.io/bedrock/)** - Modern WordPress stack with improved folder structure\n- **[WP Starter](https://github.com/wecodemore/wpstarter)** - Composer-based WordPress setup with flexible configuration\n- **[Wordplate](https://github.com/vinkla/wordplate)** - Modern WordPress stack with Laravel-inspired structure\n- **[WordPress Project](https://github.com/johnpbloch/wordpress-project)** - Minimal Composer-based WordPress installer\n- **[WP Bootstrap](https://github.com/eriktorsner/wp-bootstrap)** - Utils for bootstrapping a WordPress installation\n\n## References\n\n- [Research: Bedrock vs WP Starter](https://discourse.roots.io/t/research-bedrock-vs-wp-starter-by-gmazzap/14044/4)\n- [Installing WordPress via Composer](https://wp-yoda.com/en/wordpress/installing-wordpress-via-composer/)\n- [Installing WordPress in separate directory via Composer](https://github.com/renakdup/installing-wordpress-in-separate-directory-via-composer)\n- [Gist by gemmadlou](https://gist.github.com/gemmadlou/6fc40583318430f77eda54ebea91c2a1)\n\n## Changelog\n\nPlease see [CHANGELOG](CHANGELOG.md) for a detailed list of changes for each release.\n\nWe follow [Semantic Versioning](https://semver.org/) and use [Conventional Commits](https://www.conventionalcommits.org/) to automatically generate our changelog.\n\n### Release Process\n\n- **Major versions** (1.0.0 → 2.0.0): Breaking changes\n- **Minor versions** (1.0.0 → 1.1.0): New features, backward compatible\n- **Patch versions** (1.0.0 → 1.0.1): Bug fixes, backward compatible\n\nAll releases are automatically created when changes are pushed to the `main` branch, based on commit message conventions.\n\n## Contributing\n\nFor your contributions please use:\n\n- [Conventional Commits](https://www.conventionalcommits.org)\n- [git-flow workflow](https://danielkummer.github.io/git-flow-cheatsheet/)\n- [Pull request workflow](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project)\n\nSee [CONTRIBUTING](.github/CONTRIBUTING.md) for detailed guidelines.\n\n## Sponsor\n\n[\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" width=\"200\" alt=\"Buy Me A Coffee\"\u003e](https://buymeacoff.ee/frugan)\n\n## License\n\n(ɔ) Copyleft 2026 [Frugan](https://frugan.it).  \n[GNU GPLv3](https://choosealicense.com/licenses/gpl-3.0/), see [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwp-spaghetti%2Fwp-boot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwp-spaghetti%2Fwp-boot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwp-spaghetti%2Fwp-boot/lists"}