PHPackages                             bmack/site-importer - 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. bmack/site-importer

ActiveTypo3-cms-extension[Database &amp; ORM](/categories/database)

bmack/site-importer
===================

Imports records from a Yaml file structure into the TYPO3 database

2.1.0(1y ago)2383.2k↓37.2%6[1 issues](https://github.com/bmack/site-importer/issues)GPL-2.0+PHPPHP ^8.1

Since Dec 27Pushed 4mo ago3 watchersCompare

[ Source](https://github.com/bmack/site-importer)[ Packagist](https://packagist.org/packages/bmack/site-importer)[ RSS](/packages/bmack-site-importer/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (2)Versions (12)Used By (0)

TYPO3 Site Importer
===================

[](#typo3-site-importer)

Built on top of TYPO3 and TYPO3 Console.

Introduction
------------

[](#introduction)

When it comes to deployment with TYPO3 projects, one tedious issue with TYPO3 is that certain configuration is stored within the database.

While TYPO3 is doing a better job over and over again, there are still some remaining issues left:

### sys\_domain

[](#sys_domain)

Domain records are the most problematic issues. On a multi-site project (multiple websites in one installation), it is very annoying to set up domain records over and over again, and keep them in sync. This little tool will help out to overcome this issue.

### sys\_template

[](#sys_template)

Basic TypoScript information has to be still loaded from the database.

Since TYPO3 v8, there are good solutions such as the "bolt" extension, which does not need to have a sys\_template record anymore.

One change of a single database field inside the page solves the issue for most of our projects.

### sys\_language

[](#sys_language)

Most of our projects have a lot of langauges, however we add them to production first to ensure that all IDs are the same throughout the system.

Basic Usage
-----------

[](#basic-usage)

Our deployment setups use composer, .env and TYPO3 console. Deployment runs through ansible or deployer, or completely transparent via platform.sh.

For our needs, we need to add the domain records to all of our projects, depending on the environment, usually a local, testing, staging and production system.

In order to make use of the site importer, require this package via composer

`composer req bmack/site-importer`

After that, create a yaml file somewhere in your project repository. Our setups usually look like this:

```
bin/
conf/
web/
var/
vendor/
composer.json
composer.lock

```

In this case, create a file `conf/site_dev.yaml` for the local setup. It looks like this

```
domains:
  mode: "replace"
  table: "sys_domain"
  entries:
    - { domainName: "myproject.local", pid: 1 }
    - { domainName: "myproject-ch.local", pid: 1 }
    - { domainName: "myproject-microsite.local", pid: 13056 }

```

Other files for staging, production etc. can be created accordingly.

The option `mode` describes whether to truncate the database table before the entries are added. but could also be set to `append` or `update`. If set to `append` the entries will be written as pure insert without regard whether the record already exists.

If `mode` is set to `replace` the table is first truncated, then entries are inserted.

If `mode` is set to `update` the following happens:

- A check is made if the entry contains a `uid` property. If it does not, the entry is inserted as a new record (like it would happen if `mode` was set to `append`).
- If entry does contain a `uid` property, the script checks if the record exist in the table and if it does, an SQL update is done to update the record. If it does not exist, it is inserted.

The file accepts more than one table, thus, all language records could be added as well, however this could be done in a generic `sites.yaml` file which works for all environments.

When deploying, simply call `bin/typo3cms siteimport:fromfile conf/site_dev.yaml` to import the configured recordsets.

### platform.sh

[](#platformsh)

For platform.sh we use `bin/typo3cms siteimport:fromfile conf/site_$PLATFORM_BRANCH.yaml`in the post-deploy hook to replace the records for a specific branch.

###  Health Score

53

—

FairBetter than 97% of packages

Maintenance60

Regular maintenance activity

Popularity40

Moderate usage in the ecosystem

Community18

Small or concentrated contributor base

Maturity78

Established project with proven stability

 Bus Factor1

Top contributor holds 58.3% 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 ~257 days

Recently: every ~268 days

Total

11

Last Release

493d ago

Major Versions

v0.5.1 → 1.0.02022-02-01

1.2.0 → 2.0.02024-07-26

PHP version history (6 changes)v0.1.0PHP &gt;=7.0 &lt;7.3

v0.3.0PHP &gt;=7.0 &lt;7.4

v0.4.0PHP &gt;=7.0 &lt;7.5

1.0.0PHP &gt;=7.2 &lt;7.5

1.2.0PHP ^7.2 || ^8.1

2.0.0PHP ^8.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/165630?v=4)[Benni Mack](/maintainers/bmack)[@bmack](https://github.com/bmack)

---

Top Contributors

[![bmack](https://avatars.githubusercontent.com/u/165630?v=4)](https://github.com/bmack "bmack (21 commits)")[![alexanderschnitzler](https://avatars.githubusercontent.com/u/711459?v=4)](https://github.com/alexanderschnitzler "alexanderschnitzler (4 commits)")[![rosty-matviiv](https://avatars.githubusercontent.com/u/50489886?v=4)](https://github.com/rosty-matviiv "rosty-matviiv (3 commits)")[![NamelessCoder](https://avatars.githubusercontent.com/u/2228052?v=4)](https://github.com/NamelessCoder "NamelessCoder (3 commits)")[![sabbelasichon](https://avatars.githubusercontent.com/u/13050560?v=4)](https://github.com/sabbelasichon "sabbelasichon (2 commits)")[![Voronov](https://avatars.githubusercontent.com/u/3194685?v=4)](https://github.com/Voronov "Voronov (1 commits)")[![manuelselbach](https://avatars.githubusercontent.com/u/4679794?v=4)](https://github.com/manuelselbach "manuelselbach (1 commits)")[![Patta](https://avatars.githubusercontent.com/u/2151127?v=4)](https://github.com/Patta "Patta (1 commits)")

### Embed Badge

![Health badge](/badges/bmack-site-importer/health.svg)

```
[![Health](https://phpackages.com/badges/bmack-site-importer/health.svg)](https://phpackages.com/packages/bmack-site-importer)
```

###  Alternatives

[ryangjchandler/orbit

A flat-file database driver for Eloquent.

922256.2k5](/packages/ryangjchandler-orbit)[kimai/kimai

Kimai - Time Tracking

4.6k7.4k1](/packages/kimai-kimai)[pixelfederation/doctrine-resettable-em-bundle

Symfony bundle for decorating default entity managers using a resettable decorator.

20113.5k](/packages/pixelfederation-doctrine-resettable-em-bundle)[rcsofttech/audit-trail-bundle

Enterprise-grade, high-performance Symfony audit trail bundle. Automatically track Doctrine entity changes with split-phase architecture, multiple transports (HTTP, Queue, Doctrine), and sensitive data masking.

1022.4k](/packages/rcsofttech-audit-trail-bundle)[perplorm/perpl

Perpl is an improved and still maintained fork of Propel2, an open-source Object-Relational Mapping (ORM) for PHP.

203.7k](/packages/perplorm-perpl)

PHPackages © 2026

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