PHPackages                             bernskioldmedia/helm-wp - 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. [Framework](/categories/framework)
4. /
5. bernskioldmedia/helm-wp

ActiveProject[Framework](/categories/framework)

bernskioldmedia/helm-wp
=======================

A local development framework for WordPress.

1.0.1(2y ago)168MITShellCI failing

Since Jun 22Pushed 2y ago1 watchersCompare

[ Source](https://github.com/bernskioldmedia/helm-wp)[ Packagist](https://packagist.org/packages/bernskioldmedia/helm-wp)[ Docs](https://bernskioldmedia.com)[ RSS](/packages/bernskioldmedia-helm-wp/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)DependenciesVersions (4)Used By (0)

Helm WP
=======

[](#helm-wp)

Helm is Bernskiold Media's WordPress development framework. It's meant to be loaded as a Composer dev depenency and proves a set of tools to help you develop WordPress themes and plugins. Helm is heavily inspired by/a WordPress adapted fork of Laravel Sail.

Installation
------------

[](#installation)

To install, your project must be using composer. Require the package to your project:

```
composer require --dev bernskioldmedia/helm-wp
```

After installing, place a `docker-compose.yml` file in the root of your project. You can use the following as a starting point:

```
version: '3.3'
services:

    wordpress.test:
        build:
            context: ./wp-content/vendor/bernskioldmedia/helm-wp/runtimes/8.1
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: helm-7.4/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '80:80'
        environment:
            WWWUSER: '${WWWUSER}'
            HELM_WP: 1
            XDEBUG_MODE: '${HELM_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${HELM_XDEBUG_CONFIG:-client_host=host.docker.internal}'
        volumes:
            - '.:/var/www/html'
        networks:
            - helm

    # We try to use the same version of MySQL as the one used in production.
    # Other recipes are available in Notion.
    mariadb:
        image: 'mariadb:10.5'
        ports:
            - '3306:3306'
        environment:
            MYSQL_ROOT_PASSWORD: 'wordpressroot'
            MYSQL_DATABASE: 'wordpress'
            MYSQL_USER: 'wordpress_user'
            MYSQL_PASSWORD: 'wordpress_password'
        volumes:
            - 'helm-mariadb:/var/lib/mysql'
        healthcheck:
            test: [ "CMD", "mysqladmin", "ping", "-pwordpress_password" ]
            retries: 3
            timeout: 5s
        networks:
            - helm

    # Mailpit is a fake SMTP server that catches all emails sent in the application.
    # It has a web interface to view the emails at: http://localhost:8025/
    mailpit:
        image: 'axllent/mailpit:latest'
        ports:
            - '1025:1025'
            - '8025:8025'
        networks:
            - helm

volumes:
    helm-mariadb:
    wordpress:

networks:
    helm:
        driver: bridge
```

Running helm
------------

[](#running-helm)

Helm ships with its own `helm` command. This is a wrapper around the `docker-compose` command that makes it easier to run commands inside the container.

Adapt the path in the command to match your project structure and where composer packages are installed in your project, if you have customized your vendor folder.

For more information on the `helm` command, run `./vendor/bin/helm help`.

### Creating an alias command

[](#creating-an-alias-command)

This alias enables you to just type helm to reach our Helm WP environment instead of having to always type the full path to the `vendor/bin` directory.

```
alias helm='[ -f helm ] && sh helm || sh vendor/bin/helm'
```

### Starting the container

[](#starting-the-container)

To start the container, run:

```
./vendor/bin/helm up
```

### Stopping the container

[](#stopping-the-container)

To stop the container, run:

```
./vendor/bin/helm down
```

### Running commands inside the container

[](#running-commands-inside-the-container)

Helm supports running commands from within the container. This is useful for running Composer commands, WP CLI commands and more.

```
# Composer
./vendor/bin/helm composer ...

# Node
./vendor/bin/helm node ...

# NPM
./vendor/bin/helm npm ...

# PHP Commands
./vendor/bin/helm php ...

# WP-CLI Commands
./vendor/bin/helm wp ...
```

Using a different PHP version
-----------------------------

[](#using-a-different-php-version)

Helm ships with support for PHP versions from 7.4 to 8.2, although we recommend not using 7.4 for anything new as it has been officially deprecated.

To use a different PHP version, change the `context` in the `wordpress.test` service to point to the correct runtime folder. You should also change the `image` to match the runtime folder name.

For example, to use PHP 8.1, change it to:

```
  wordpress.test:
      build:
          context: ./wp-content/vendor/bernskioldmedia/helm-wp/runtimes/8.1
          image: helm-8.1/app
```

The available runtimes are:

- `7.4`
- `8.0`
- `8.1`
- `8.2`

Running Helm Migrate
--------------------

[](#running-helm-migrate)

Helm ships with a helper `helm-migrate` command to help migrate a production database to the local help environment.

It requires a `wp-cli.yml` file in the root of your project. You can use the following as a starting point:

```
@production:
     ssh: user@server.com/path/to/wordpress
```

To migrate the database, run:

```
./vendor/bin/helm-migrate run production
```

For more information on the `helm-migrate` command, run `./vendor/bin/helm-migrate help`.

### WordPress Multisite Support

[](#wordpress-multisite-support)

Helm Migrate supports WordPress Multisite out of the box. To migrate the entire environment you only need to run the run command as above. However, sometimes you only want to migrate one or a few sites in a large network.

To do this, you use the `selection` command along with the envrionment name. It will then ask you for the site IDs.

```
./vendor/bin/helm-migrate selection production
```

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~11 days

Total

2

Last Release

1040d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/51986177e3badf5ae6cd008a309befe4ec88264bd518c1a623bd33f5cebc0fc5?d=identicon)[bernskiold](/maintainers/bernskiold)

---

Top Contributors

[![ErikBernskiold](https://avatars.githubusercontent.com/u/1166728?v=4)](https://github.com/ErikBernskiold "ErikBernskiold (16 commits)")

---

Tags

dockerwordpressframeworkwordpressdockerlocal-development

### Embed Badge

![Health badge](/badges/bernskioldmedia-helm-wp/health.svg)

```
[![Health](https://phpackages.com/badges/bernskioldmedia-helm-wp/health.svg)](https://phpackages.com/packages/bernskioldmedia-helm-wp)
```

###  Alternatives

[themosis/theme

The Themosis framework boilerplate theme.

10449.0k3](/packages/themosis-theme)[wpstarter/framework

The WpStarter Framework - Laravel Framework for WordPress

1810.1k4](/packages/wpstarter-framework)[alleyinteractive/pest-plugin-wordpress

WordPress Pest Integration

263.7k1](/packages/alleyinteractive-pest-plugin-wordpress)

PHPackages © 2026

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