PHPackages                             salsadigitalauorg/merlin-framework - 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. [Database &amp; ORM](/categories/database)
4. /
5. salsadigitalauorg/merlin-framework

ActiveLibrary[Database &amp; ORM](/categories/database)

salsadigitalauorg/merlin-framework
==================================

Open source migration framework (markup to structured data)

1.1.0(3y ago)182.8k3[12 issues](https://github.com/salsadigitalauorg/merlin-framework/issues)[2 PRs](https://github.com/salsadigitalauorg/merlin-framework/pulls)PHP

Since Jun 23Pushed 2y ago9 watchersCompare

[ Source](https://github.com/salsadigitalauorg/merlin-framework)[ Packagist](https://packagist.org/packages/salsadigitalauorg/merlin-framework)[ Docs](https://salsadigitalauorg.github.io/merlin-framework/)[ RSS](/packages/salsadigitalauorg-merlin-framework/feed)WikiDiscussions develop Synced 1mo ago

READMEChangelog (8)Dependencies (19)Versions (24)Used By (0)

Merlin
======

[](#merlin)

[![CircleCI](https://camo.githubusercontent.com/3d24e4c3f3e8d53fc7837a0ca1d91fab73bac2cd86718e639bcc2a408edbce91/68747470733a2f2f636972636c6563692e636f6d2f67682f73616c73616469676974616c61756f72672f6d65726c696e2d6672616d65776f726b2e7376673f7374796c653d736869656c64)](https://circleci.com/gh/salsadigitalauorg/merlin-framework)[![License](https://camo.githubusercontent.com/05da57adfadcf2ba4c74f4e0df97b270b2ed946e959a08e336540680dc952bf9/68747470733a2f2f696d672e736869656c64732e696f2f3a6c6963656e73652d676e752d626c75652e737667)](https://opensource.org/licenses/GPL-3.0)

Welcome to Merlin a simple tool to aid content migration from an arbitrary source to a structured format ready for consumption by another system.

Detailed documentation can be found .

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

[](#requirements)

- PHP &gt; 7.2
- Composer (optional)

Installing
----------

[](#installing)

The Merlin framework is expected to be used as a standalone executable, this can be localised to your project or installed globally and added to your path. To download, visit the release page and download the latest bundled .phar executable.

```
curl -s https://github.com/salsadigitalauorg/merlin-framework/releases \
| grep "merlin-framework" \
| cut -d : -f 2,3 \
| tr -d \" \
| wget -qi -

```

### Composer dependency

[](#composer-dependency)

Merlin can be installed as a composer dependency as well, this changes how the application is excuted for your project.

**Add the repository**

```
"repositories": [
  {
    "type": "vcs",
    "url": "https://github.com/salsadigitalauorg/merlin-framework"
  }
]

```

**Add the dependency**

```
composer require salsadigitalauorg/merlin-framework

```

Usage
-----

[](#usage)

There are two primary commands: `crawl` and `generate`.

- `crawl` will run crawl a domain and find URLs on a domain for migration. [Read the crawler docs](https://salsadigitalauorg.github.io/merlin-framework/docs/crawler) and check the [example](https://github.com/salsadigitalauorg/merlin-framework/blob/master/examples/crawler.yml) for more information.
- `generate` will generate structured output based on mapping configuration. [Read the migration docs](https://salsadigitalauorg.github.io/merlin-framework/docs/examples) and check the [example](https://github.com/salsadigitalauorg/merlin-framework/blob/master/examples/basic_page.yml) for more information.

To run the framework you need to specify a command (e.g crawl or generate), a configuration yaml file, and a path to the output, e.g:

```
merlin crawl -c  -o
merlin generate -c  -o

```

### Configuration files

[](#configuration-files)

The configuration file should be treated as a schema file, this contains the paths, domains and mapping information to transform a HTML representation of content into structured JSON.

Example configuration files can be found in the [examples](https://github.com/salsadigitalauorg/merlin-framework/tree/master/examples).

Testing
-------

[](#testing)

The automated testing suite tests standard configuration values against representative HTML structure to make sure that the tool can correctly build the JSON structure.

**Running the tests**

```
./vendor/bin/phpunit

```

Support
-------

[](#support)

We encourage you to file issues with the github issue queue.

License
-------

[](#license)

[![License](https://camo.githubusercontent.com/05da57adfadcf2ba4c74f4e0df97b270b2ed946e959a08e336540680dc952bf9/68747470733a2f2f696d672e736869656c64732e696f2f3a6c6963656e73652d676e752d626c75652e737667)](https://opensource.org/licenses/GPL-3.0)

- [GPL3.0](https://opensource.org/licenses/GPL-3.0)

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance7

Infrequent updates — may be unmaintained

Popularity26

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

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

Recently: every ~232 days

Total

9

Last Release

1292d ago

Major Versions

0.4.3 → 1.0.02022-10-28

### Community

Maintainers

![](https://www.gravatar.com/avatar/9a320969efb03e56f96b4c05e9eb5c574decf76deb9b34c74983cd9675104529?d=identicon)[salsadigital](/maintainers/salsadigital)

---

Top Contributors

[![steveworley](https://avatars.githubusercontent.com/u/1840912?v=4)](https://github.com/steveworley "steveworley (50 commits)")[![stooit](https://avatars.githubusercontent.com/u/1256274?v=4)](https://github.com/stooit "stooit (49 commits)")[![SRowlands](https://avatars.githubusercontent.com/u/122057077?v=4)](https://github.com/SRowlands "SRowlands (36 commits)")[![nickgeorgiou](https://avatars.githubusercontent.com/u/520440?v=4)](https://github.com/nickgeorgiou "nickgeorgiou (12 commits)")[![sonnykt](https://avatars.githubusercontent.com/u/167788?v=4)](https://github.com/sonnykt "sonnykt (5 commits)")[![AlexSkrypnyk](https://avatars.githubusercontent.com/u/378794?v=4)](https://github.com/AlexSkrypnyk "AlexSkrypnyk (5 commits)")[![gargsuchi](https://avatars.githubusercontent.com/u/120015?v=4)](https://github.com/gargsuchi "gargsuchi (4 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

---

Tags

migrationmerlin

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/salsadigitalauorg-merlin-framework/health.svg)

```
[![Health](https://phpackages.com/badges/salsadigitalauorg-merlin-framework/health.svg)](https://phpackages.com/packages/salsadigitalauorg-merlin-framework)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M2.6k](/packages/craftcms-cms)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[drupal/core

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

19462.3M1.3k](/packages/drupal-core)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)

PHPackages © 2026

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