PHPackages                             sparkison/cmsmove - 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. [DevOps &amp; Deployment](/categories/devops)
4. /
5. sparkison/cmsmove

AbandonedArchivedLibrary[DevOps &amp; Deployment](/categories/devops)

sparkison/cmsmove
=================

CMSMove - automated CMS deployment.

1.0.63(6y ago)3981[3 PRs](https://github.com/sparkison/cmsmove/pulls)GPLPHPPHP &gt;=5.6.0

Since Nov 18Pushed 4y ago1 watchersCompare

[ Source](https://github.com/sparkison/cmsmove)[ Packagist](https://packagist.org/packages/sparkison/cmsmove)[ RSS](/packages/sparkison-cmsmove/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (10)Dependencies (4)Versions (57)Used By (0)

cmsmove
=======

[](#cmsmove)

Automated deployment for popular content management systems

Currently supported systems:

- [Craft CMS](https://craftcms.com/) - versions 2 and 3.
- [ExpressionEngine (2 and 3)](http://expressionengine.com/)
- [Laravel 5.x](https://laravel.com/) - tested up to 5.8, currently still utilizes the `laravel53` config command however.
- [WordPress](https://wordpress.org/)

*We've been using extensively for the frameworks mentioned above. If you run into any issues please let us know so that we can get them fixed.*

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

[](#requirements)

- [Composer](https://getcomposer.org/) (*optional if you opt to use the pre-compiled `phar` file in the [releases](https://github.com/sparkison/cmsmove/releases) tab*)

Installation instructions
-------------------------

[](#installation-instructions)

1. Ensure that the `~/.composer/vendor/bin` is available in your terminal PATH.

    1. `sudo nano ~/.bash_profile`
    2. Make sure you have a line similar to the following: `export PATH="~/.composer/vendor/bin:$PATH"`
2. Require `cmsmove` globally by using this command:

    `composer global require sparkison/cmsmove`
3. Change to a project directory, such as `~/Sites/mysite.dev`, and run `cmsmove config ` where `` is one of the configured CMS for cmsmove\*

\*See [Usage](#usage) below for more information

Usage
-----

[](#usage)

#### Getting started

[](#getting-started)

After installing either the `phar` file or using the global `composer` install, ensure you can issue the `cmsmove` from the command line.

To use **cmsmove** you must first add a config file and an ignore file. To bootstrap these items, `cd` into your projects root working directory and issue:

- `cmsmove config ` where `` is one of the supported CMS systems
    - Currently support options for `` are `craft`, `laravel53`, `wordpress`, `ee2` and `ee3`

This will generate the required `moveConfig.json` and `rsync.ignore` files. The `moveConfig.json` file will contain all the needed variables for pushing and pulling. The `rsync.ignore` file will contain a list of files/folders to ignore. Add items to this list as needed.

#### Configure moveConfig.json

[](#configure-moveconfigjson)

This is a `JSON` file use to get the needed variables for accessing the local installation and database as well the configured remote hosts

Example config file:

```
{
  "type": "craft",
  "mappings": {
    "app": "craft",
    "www": "public",
    "config": "config",
    "plugins": "plugins",
    "templates": "templates",
    "custom": {
      "uploads": {
        "type": "public",
        "directory": "uploads"
      },
      "assets": {
        "type": "public",
        "directory": "dist"
      }
    }
  },
  "environments": {
    "local": {
      "root": "/Users/MY_USER_NAME/Sites/mysite.dev",
      "db": "local_db_dev",
      "dbHost": "localhost",
      "dbUser": "root",
      "dbPass": "root",
      "dbPort": "3306"
    },
    "staging": {
      "host": "REMOTE HOST OR IP",
      "root" : "/home/user",
      "public": "public_html",
      "user": "SSH USER NAME",
      "password": "SSH PASSWORD",
      "keyfile": "SSH KEY FILE (takes precedence over the password field)",
      "port": "22",
      "db": "REMOTE DATABASE NAME",
      "dbHost": "localhost",
      "dbUser": "REMOTE DATABASE USER",
      "dbPass": "REMOTE DATABASE PASSWORD",
      "dbPort": "3306"
    },
    "production": {
      "host": "",
      "root" : "/home/mysite",
      "public": "public_html",
      "user": "",
      "password": "",
      "keyfile": "",
      "port": "22",
      "db": "",
      "dbHost": "localhost",
      "dbUser": "",
      "dbPass": "",
      "dbPort": "3306"
    }
  }
}
```

##### Configuration notes:

[](#configuration-notes)

**Required:** The following fields are required:

- `type` tells **cmsmove** what framework is being used.
- `mappings` contains information for the local setup; this section is typically framework specific
    - `app` the application main folder
    - `www` the public folder
    - The rest of the items in this list are framework specific
- `environments` the various environments (e.g. local, staging, production)
    - `local` this is the only required environment for accessing the local database, all other environments are optional, and can be named whatever you like

**App not above root:** If the app and public folder are one in the same simply set `mappings.www` as an empty string, and set `mappings.app` as the public folder. Additionally, set the `environments..root` to your remote host public folder and leave `environments..public` as an empty string.

**Adding custom directories for syncing:**Within the `mappings.custom` array of the config file add a `key => array` mapping for your custom directory. The custom directory must contain two key/value pairs: `type` and `directory`.

Issuing `cmsmove push staging custom` will present you with a prompt of your configured custom directories to choose from E.g.

```
...
    "custom": {
      "uploads": {
        "type": "public",
        "directory": "uploads"
      },
      "assets": {
        "type": "public",
        "directory": "dist"
      }
    }
...
```

Using the example above, issuing `cmsmove push staging custom` will give a prompt similar to the following:

```
[0] uploads
[1] assets
>

```

Entering 0 at the prompt would push the "uploads" directory from the local to the remote configured public directory. While entering 1 would push the assets directory. Additionally, you can specify a specific file as apposed to a directory using the following syntax:

```
...
    "custom": {
      ...
      "env": {
        "type": "root",
        "file": "y",
        "directory": ".env"
      }
      ...
    }
...
```

Note that the `file` parameter just needs to be a "truthy" variable. For example "yes", "y" and "true" are all valid.

Updating
--------

[](#updating)

Simply issue the following command: `composer global update sparkison/cmsmove`To view the currently installed version issue: `cmsmove --version`

### Contributing

[](#contributing)

Pull requests, contributions, issues and feature requests are always welcome... Although I would prefer a pull request for new features... ;)

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity72

Established project with proven stability

 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 ~21 days

Recently: every ~0 days

Total

53

Last Release

2428d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/3ca838697e3c8e86fa2439fa9c318ef385dd3851dce2031c08c8ed677103c48f?d=identicon)[sparkison](/maintainers/sparkison)

---

Top Contributors

[![nerdymind-dev](https://avatars.githubusercontent.com/u/31485582?v=4)](https://github.com/nerdymind-dev "nerdymind-dev (1 commits)")

---

Tags

laravelwordpressexpressionengineCraftcraft cmscmsmovesparkisonautomated deploymentlaravelphp

### Embed Badge

![Health badge](/badges/sparkison-cmsmove/health.svg)

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

###  Alternatives

[laravel/framework

The Laravel Framework.

34.8k543.8M19.7k](/packages/laravel-framework)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.6M559](/packages/shopware-core)[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.7k38.9k](/packages/matomo-matomo)[shopware/platform

The Shopware e-commerce core

3.4k1.5M3](/packages/shopware-platform)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

21866.0M1.7k](/packages/drupal-core)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6942.5M412](/packages/drupal-core-recommended)

PHPackages © 2026

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