PHPackages                             keboola/storage-backend - 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. keboola/storage-backend

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

keboola/storage-backend
=======================

33392[21 PRs](https://github.com/keboola/storage-backend/pulls)PHPCI passing

Since Feb 9Pushed 1mo ago13 watchersCompare

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

READMEChangelog (10)DependenciesVersions (54)Used By (0)

storage-backend
===============

[](#storage-backend)

Storage backend related tools monorepo

Packages included in this repo:
-------------------------------

[](#packages-included-in-this-repo)

Package nameDescription[keboola/php-datatypes](https://github.com/keboola/php-datatypes)datatype definitions, validation and SQL statement generation[keboola/table-backend-utils](https://github.com/keboola/php-table-backend-utils)Common stuff for table backends (Snowflake, Synapse, Redshift, Exasol, Teradata, BigQuery) shared between apps.[keboola/db-import-export](https://github.com/keboola/php-db-import-export)Load/Import CSV, Load/Import CSV, Unload/Export, supports: `S3`,`ABS`,`GCS`, `Snowflake`, `Synapse`, `Teradata`, `Exasol`, `BigQuery`Adding new repository
---------------------

[](#adding-new-repository)

If you want to add a new repository to monorep, please follow the [instructions](adopt-new-repository.md).

Provisioning of resources
-------------------------

[](#provisioning-of-resources)

Some libraries need to install backend drivers that are stored on S3 for this purpose we create a [cloudformation template](provisioning/AWS/aws-resources.yaml). This cloudformation template is managed manually on the corresponding AWS stack for CI. When adding a new library to the monorepo, we can use the base role for building and use as in [main.yml](.github/workflows/main.yml) on line 32, or add the new role to the cloudformation template and assign the necessary resources to it.

```
      -
        name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ env.AWS_CREDENTIALS_ROLE_TO_ASSUME }}
          aws-region: ${{ env.AWS_CREDENTIALS_REGION }}
```

How to use monorepo and packages
--------------------------------

[](#how-to-use-monorepo-and-packages)

We maintaining the monorepo with the [symplify/monorepo-builder](https://github.com/symplify/monorepo-builder).

To download drivers stored on S3 use AWS\_ACCESS\_KEY\_ID and AWS\_SECRET\_ACCESS\_KEY (Export them or use --build-arg option in docker compose build command) from the AWS account "Dev - Main Legacy" -&gt; create user namesurname-kbc-drivers-download and add policy "DriversDownload").

The base docker service is `dev`To install dependencies use:

```
docker compose build dev
docker compose run dev composer install

docker compose run dev vendor/bin/monorepo-builder
```

The individual package services in the monorepo are then prefixed with the word `dev-`. So if we want to install composer for example for the `php-table-backend-utils` package we use the command:

```
docker compose build dev-php-table-backend-utils
docker compose run dev-php-table-backend-utils composer install
```

and run for example unit tests like this:

```
docker compose run dev-php-table-backend-utils composer tests-unit
```

By separating the packages and installing each of them separately when we run the previous command. Because the other packages in monorep are installed from [packagist.org](https://packagist.org/), so individual customizations are not shared between packages.

For example, `php-table-backend-utils` required on `php-datypes`, but if I make a change to `php-datatypes` and call `docker compose run dev-php-table-backend-utils composer tests-unit` the changes will not be reflected in the `php-table-backend-utils` tests.

Running tests locally
---------------------

[](#running-tests-locally)

To be able to run tests to include all changes and packages requested via composer we can use global phpunit.

`docker compose run dev vendor/bin/phpunit packages/php-table-backend-utils/tests/Unit/`

However, by creating a new CLI interpreter in PHPStorm we will achieve that the changes will be reflected in the whole monorepo.

So for each lib we will create our own interpreter. Also add env variables for each interpreter separately when creating a new interpreter.

For example for lib `php-table-backend-utils` as seen in the picture.

[![Cli interpreter in phpstorm](cli-interpreter-table-utils.png?raw=true "Cli interpreter in phpstorm")](cli-interpreter-table-utils.png?raw=true)

1. Then you need to configure Test Framework in `PHP->Test Frameworks`
2. Click on + and select PHPUnit by Remote Interpreter [![PHPUnit by Remote Interpreter](add-phpunit-local.png?raw=true "PHPUnit by Remote Interpreter")](add-phpunit-local.png?raw=true)
3. And in path to script select the path to `keboola/storage-backend/vendor/autoload.php` [![Path to autoload](path-to-autload.png?raw=true "Path to autoload")](path-to-autload.png?raw=true)
4. Click ok

Release
=======

[](#release)

If you want to release a new version of a package, you need to

- merge the PR to `main`
- on **main** branch create and push tag `/`. So e.g. `php-datatypes/7.7.0` if you want to release `php-datatypes` in version `7.7.0`

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance60

Regular maintenance activity

Popularity20

Limited adoption so far

Community23

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/101dbf2551a0709ddab522f97669f13a2c4cc2d0a1e8d009f3af6ba80accb1a9?d=identicon)[Keboola](/maintainers/Keboola)

---

Top Contributors

[![zajca](https://avatars.githubusercontent.com/u/180148?v=4)](https://github.com/zajca "zajca (1239 commits)")[![jirkasemmler](https://avatars.githubusercontent.com/u/13363655?v=4)](https://github.com/jirkasemmler "jirkasemmler (560 commits)")[![romanbracinik](https://avatars.githubusercontent.com/u/6448364?v=4)](https://github.com/romanbracinik "romanbracinik (304 commits)")[![tomasfejfar](https://avatars.githubusercontent.com/u/642928?v=4)](https://github.com/tomasfejfar "tomasfejfar (86 commits)")[![martinjunger](https://avatars.githubusercontent.com/u/84506613?v=4)](https://github.com/martinjunger "martinjunger (72 commits)")[![martinsifra](https://avatars.githubusercontent.com/u/1210906?v=4)](https://github.com/martinsifra "martinsifra (55 commits)")[![vojtabiberle](https://avatars.githubusercontent.com/u/528942?v=4)](https://github.com/vojtabiberle "vojtabiberle (53 commits)")[![ondrajodas](https://avatars.githubusercontent.com/u/12143866?v=4)](https://github.com/ondrajodas "ondrajodas (51 commits)")[![pivnicek](https://avatars.githubusercontent.com/u/569139?v=4)](https://github.com/pivnicek "pivnicek (50 commits)")[![ondrejhlavacek](https://avatars.githubusercontent.com/u/497675?v=4)](https://github.com/ondrejhlavacek "ondrejhlavacek (45 commits)")[![ErikZigo](https://avatars.githubusercontent.com/u/1726727?v=4)](https://github.com/ErikZigo "ErikZigo (42 commits)")[![yustme](https://avatars.githubusercontent.com/u/5272798?v=4)](https://github.com/yustme "yustme (26 commits)")[![martinjandl](https://avatars.githubusercontent.com/u/18183860?v=4)](https://github.com/martinjandl "martinjandl (20 commits)")[![ujovlado](https://avatars.githubusercontent.com/u/419849?v=4)](https://github.com/ujovlado "ujovlado (5 commits)")[![Halama](https://avatars.githubusercontent.com/u/903531?v=4)](https://github.com/Halama "Halama (5 commits)")[![devin-ai-integration[bot]](https://avatars.githubusercontent.com/in/811515?v=4)](https://github.com/devin-ai-integration[bot] "devin-ai-integration[bot] (3 commits)")[![themark147](https://avatars.githubusercontent.com/u/17779619?v=4)](https://github.com/themark147 "themark147 (2 commits)")[![AdamVyborny](https://avatars.githubusercontent.com/u/27994036?v=4)](https://github.com/AdamVyborny "AdamVyborny (2 commits)")[![pepamartinec](https://avatars.githubusercontent.com/u/271753?v=4)](https://github.com/pepamartinec "pepamartinec (2 commits)")

### Embed Badge

![Health badge](/badges/keboola-storage-backend/health.svg)

```
[![Health](https://phpackages.com/badges/keboola-storage-backend/health.svg)](https://phpackages.com/packages/keboola-storage-backend)
```

###  Alternatives

[doctrine/orm

Object-Relational-Mapper for PHP

10.2k285.3M6.2k](/packages/doctrine-orm)[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k115.1M102](/packages/jdorn-sql-formatter)[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[mongodb/mongodb

MongoDB driver library

1.6k64.0M546](/packages/mongodb-mongodb)[ramsey/uuid-doctrine

Use ramsey/uuid as a Doctrine field type.

90340.3M211](/packages/ramsey-uuid-doctrine)[reliese/laravel

Reliese Components for Laravel Framework code generation.

1.7k3.4M16](/packages/reliese-laravel)

PHPackages © 2026

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