PHPackages                             anchour/bedrock - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. anchour/bedrock

AbandonedArchivedProject

anchour/bedrock
===============

A modern WordPress stack

1.4.4(10y ago)175MITPHPPHP &gt;=5.4

Since Dec 18Pushed 10y ago2 watchersCompare

[ Source](https://github.com/anchour/bedrock)[ Packagist](https://packagist.org/packages/anchour/bedrock)[ Docs](http://anchour.com)[ RSS](/packages/anchour-bedrock/feed)WikiDiscussions master Synced 6d ago

READMEChangelogDependencies (13)Versions (43)Used By (0)

[Bedrock](http://roots.io/wordpress-stack/)
===========================================

[](#bedrock)

Version: 1.4.3

Bedrock is a modern WordPress stack that helps you get started with the best development tools and project structure.

This is a fork of [Roots](https://github.com/roots/bedrock), modified to use with deploying sites via [Laravel Forge](https://forge.laravel.com).

What's This For?
----------------

[](#whats-this-for)

This package is intended for use with [Laravel Forge](https://forge.laravel.com). Forge allows you to provision servers that are primarily used with [Laravel](http://laravel.com), but allow you to deploy really anything you want. It comes with:

- Nginx
- PHP 5.5
- MySQL

and more, pre-installed.

Quick Start
-----------

[](#quick-start)

Run `composer create-project anchour/bedrock ` (see [Installation/Usage](#installationusage) for more details)

Features
--------

[](#features)

- Dependency management with [Composer](http://getcomposer.org)
- Better folder structure
- Easy WordPress configuration with environment specific files
- Environment variables with [Dotenv](https://github.com/vlucas/phpdotenv)

Requirements
------------

[](#requirements)

- Git
- PHP &gt;= 5.3.2 (for Composer)

Installation/Usage
------------------

[](#installationusage)

See [Documentation](#documentation) for more details on the steps below.

### Using `create-project`

[](#using-create-project)

Composer's `create-project` command will automatically install the Bedrock project to a directory and run `composer install`.

The `post-install-cmd` and `post-root-package-install` scripts will automatically create `.env` and prompt you about generating salt keys.

Note: To generate salts without a prompt, run `create-project` with `-n` (non-interactive). You can also change the `generate-salts` setting in `composer.json` under `config` in your own fork. The default is `true`.

To skip the scripts completely, `create-project` can be run with `--no-scripts` to disable it.

1. Run `composer create-project anchour/bedrock ` (`path` being the folder to install to)
2. Add theme(s)
3. Access WP Admin at `http://example.com/wp/wp-admin`
4. Set your Nginx or Apache vhost to `/path/to/site/public/`.

### Manually

[](#manually)

1. Clone/Fork repo
2. Run `composer install`
3. Add theme(s)
4. Access WP Admin at `http://example.com/wp/wp-admin`
5. Set your Nginx or Apache vhost to `/path/to/site/public/`.

Documentation
-------------

[](#documentation)

### Folder Structure

[](#folder-structure)

```
├── composer.json
├── config
│   ├── environments
│   │   ├── development.php
│   │   ├── staging.php
│   │   └── production.php
│   └── application.php
├── Gemfile
├── vendor
└── web
    ├── app
    │   ├── mu-plugins
    │   ├── plugins
    │   └── themes
    ├── wp-config.php
    ├── index.php
    └── wp

```

The organization of Bedrock is similar to putting WordPress in its own subdirectory but with some improvements.

- In order not to expose sensitive files in the webroot, Bedrock moves what's required into a `public/` directory including the vendor'd `wp/` source, and the `wp-content` source.
- `wp-content` (or maybe just `content`) has been named `app` to better reflect its contents. It contains application code and not just "static content".
- `wp-config.php` remains in the `public/` because it's required by WP, but it only acts as a loader. The actual configuration files have been moved to `config/` for better separation.
- `vendor/` is where the Composer managed dependencies are installed to.
- `wp/` is where the WordPress core lives. It's also managed by Composer but can't be put under `vendor` due to WP limitations.

### Configuration Files

[](#configuration-files)

The root `public/wp-config.php` is required by WordPress and is only used to load the other main configs. Nothing else should be added to it.

`config/application.php` is the main config file that contains what `wp-config.php` usually would. Base options should be set in there.

For environment specific configuration, use the files under `config/environments`. By default there's is `development`, `staging`, and `production` but these can be whatever you require.

The environment configs are required **before** the main `application` config so anything in an environment config takes precedence over `application`.

Note: You can't re-define constants in PHP. So if you have a base setting in `application.php` and want to override it in `production.php` for example, you have a few options:

- Remove the base option and be sure to define it in every environment it's needed
- Only define the constant in `application.php` if it isn't already defined.

#### Don't want it?

[](#dont-want-it)

You will lose the ability to define environment specific settings.

- Move all configuration into `wp-config.php`
- Manually deal with environment specific options
- Remove `config` directory

### Environment Variables

[](#environment-variables)

[PHP dotenv](https://github.com/vlucas/phpdotenv) is used to load the `.env` file. All variables are then available in your app by `getenv`, `$_SERVER`, or `$_ENV`. The `post-install-cmd` and `post-root-package-install` scripts will automatically generate and set your salts in `.env` when:

1. The `.env` file doesn't exist
2. The `.env` file exists, but doesn't contain anything.

Another benefit of Forge is the ability to set environment variables within the UI. The required vars are as follows.

- DB\_USER
- DB\_NAME
- DB\_PASSWORD

Both the `.env` variables and the ones set within the UI are available in `$_ENV`.

#### Don't want it?

[](#dont-want-it-1)

You will lose the separation between config and code and potentially put secure credentials at risk.

### Composer

[](#composer)

[Composer](http://getcomposer.org) is used to manage dependencies. Bedrock considers any 3rd party library as a dependency including WordPress itself and any plugins.

See these two blogs for more extensive documentation:

- [Using Composer with WordPress](http://roots.io/using-composer-with-wordpress/)
- [WordPress Plugins with Composer](http://roots.io/wordpress-plugins-with-composer/)

Screencast ($): [Using Composer With WordPress](http://roots.io/screencasts/using-composer-with-wordpress/)

#### Plugins

[](#plugins)

[WordPress Packagist](http://wpackagist.org/) is already registered in the `composer.json` file so any plugins from the [WordPress Plugin Directory](http://wordpress.org/plugins/) can easily be required.

To add a plugin, add it under the `require` directive or use `composer require /` from the command line. If it's from WordPress Packagist then the namespace is always `wpackagist-plugin`.

Example: `"wpackagist-plugin/akismet": "dev-trunk"`

Whenever you add a new plugin or update the WP version, run `composer update` to install your new packages.

`plugins`, and `mu-plugins` are Git ignored by default since Composer manages them. If you want to add something to those folders that *isn't* managed by Composer, you need to update `.gitignore` to whitelist them:

`!public/app/plugins/plugin-name`

Note: Some plugins may create files or folders outside of their given scope, or even make modifications to `wp-config.php` and other files in the `app` directory. These files should be added to your `.gitignore` file as they are managed by the plugins themselves, which are managed via Composer. Any modifications to `wp-config.php` that are needed should be moved into `config/application.php`.

#### Updating WP and plugin versions

[](#updating-wp-and-plugin-versions)

Updating your WordPress version (or any plugin) is just a matter of changing the version number in the `composer.json` file.

Then running `composer update` will pull down the new version.

#### Themes

[](#themes)

Themes can also be managed by Composer but should only be done so under two conditions:

1. You're using a parent theme that won't be modified at all
2. You want to separate out your main theme and use that as a standalone package

Under most circumstances we recommend NOT doing #2 and instead keeping your main theme as part of your app's repository.

Just like plugins, WPackagist maintains a Composer mirror of the WP theme directory. To require a theme, just use the `wpackagist-theme` namespace.

#### Don't want it?

[](#dont-want-it-2)

Composer integration is the biggest part of Bedrock, so if you were going to remove it there isn't much point in using Bedrock.

### wp-cron

[](#wp-cron)

Bedrock disables the internal WP Cron via `define('DISABLE_WP_CRON', true);`. If you keep this setting, you'll need to manually set a cron job like the following in your crontab file:

`*/5 * * * * curl http://example.com/wp/wp-cron.php`

WP-CLI
------

[](#wp-cli)

Bedrock works with [WP-CLI](http://wp-cli.org/) just like any other WordPress project would. Previously we required WP-CLI in our `composer.json` file as a dependency. This has been removed since WP-CLI now recommends installing it globally with a `phar` file. It also caused conflicts if you tried using a global install.

The `wp` command will automatically pick up Bedrock's subdirectory install as long as you run commands from within the project's directory (or deeper). Bedrock includes a `wp-cli.yml` file that sets the `path` option to `public/wp`. Use this config file for any further [configuration](http://wp-cli.org/config/).

Contributing
------------

[](#contributing)

Everyone is welcome to help [contribute](CONTRIBUTING.md) and improve this project. There are several ways you can contribute:

- Reporting issues (please read [issue guidelines](https://github.com/necolas/issue-guidelines))
- Suggesting new features
- Writing or refactoring code
- Fixing [issues](https://github.com/anchour/bedrock/issues)

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community18

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor1

Top contributor holds 59.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~24 days

Recently: every ~51 days

Total

36

Last Release

3666d ago

PHP version history (3 changes)1.0.0PHP &gt;=5.3.0

1.1.0PHP &gt;=5.3.2

1.4.2.1PHP &gt;=5.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/d3e5cea0f7b0bdf0011f99fec0b6fd2d05d703d5bd2641315b4474e641c0e44c?d=identicon)[anchour](/maintainers/anchour)

---

Top Contributors

[![swalkinshaw](https://avatars.githubusercontent.com/u/295605?v=4)](https://github.com/swalkinshaw "swalkinshaw (63 commits)")[![mrobit](https://avatars.githubusercontent.com/u/3034051?v=4)](https://github.com/mrobit "mrobit (21 commits)")[![retlehs](https://avatars.githubusercontent.com/u/115911?v=4)](https://github.com/retlehs "retlehs (7 commits)")[![fredriksundstrom](https://avatars.githubusercontent.com/u/1112071?v=4)](https://github.com/fredriksundstrom "fredriksundstrom (2 commits)")[![aaemnnosttv](https://avatars.githubusercontent.com/u/1621608?v=4)](https://github.com/aaemnnosttv "aaemnnosttv (2 commits)")[![BrandonShutter](https://avatars.githubusercontent.com/u/2022885?v=4)](https://github.com/BrandonShutter "BrandonShutter (2 commits)")[![francescolaffi](https://avatars.githubusercontent.com/u/357331?v=4)](https://github.com/francescolaffi "francescolaffi (1 commits)")[![8ig8](https://avatars.githubusercontent.com/u/241335?v=4)](https://github.com/8ig8 "8ig8 (1 commits)")[![jonknapp](https://avatars.githubusercontent.com/u/8836231?v=4)](https://github.com/jonknapp "jonknapp (1 commits)")[![eastmanenator](https://avatars.githubusercontent.com/u/70497?v=4)](https://github.com/eastmanenator "eastmanenator (1 commits)")[![nmec](https://avatars.githubusercontent.com/u/943232?v=4)](https://github.com/nmec "nmec (1 commits)")[![remyvv](https://avatars.githubusercontent.com/u/2862815?v=4)](https://github.com/remyvv "remyvv (1 commits)")[![DArtagan](https://avatars.githubusercontent.com/u/69908?v=4)](https://github.com/DArtagan "DArtagan (1 commits)")[![rslnk](https://avatars.githubusercontent.com/u/5638534?v=4)](https://github.com/rslnk "rslnk (1 commits)")[![benjibee](https://avatars.githubusercontent.com/u/620119?v=4)](https://github.com/benjibee "benjibee (1 commits)")

---

Tags

composerwordpressstackwpvagrant

### Embed Badge

![Health badge](/badges/anchour-bedrock/health.svg)

```
[![Health](https://phpackages.com/badges/anchour-bedrock/health.svg)](https://phpackages.com/packages/anchour-bedrock)
```

###  Alternatives

[ronilaukkarinen/dudestack

A modern WordPress stack

1131.2k](/packages/ronilaukkarinen-dudestack)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
