PHPackages                             playbloom/satisfy - 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. playbloom/satisfy

ActiveProject

playbloom/satisfy
=================

Satis composer repository manager with a Web UI

3.7.0(2y ago)54510.6k112[6 issues](https://github.com/project-satisfy/satisfy/issues)[2 PRs](https://github.com/project-satisfy/satisfy/pulls)MITPHPPHP ^8.1,&lt;8.3CI passing

Since May 12Pushed 11mo ago16 watchersCompare

[ Source](https://github.com/project-satisfy/satisfy)[ Packagist](https://packagist.org/packages/playbloom/satisfy)[ RSS](/packages/playbloom-satisfy/feed)WikiDiscussions main Synced 2mo ago

READMEChangelog (10)Dependencies (33)Versions (39)Used By (0)

Satisfy [![Build Status](https://camo.githubusercontent.com/86f0006baacdda493c3b1b8fdc8573f89c42891578ea50cbb4eb4cb97fb87272/68747470733a2f2f7472617669732d63692e6f72672f6c75646f666c657572792f736174697366792e737667)](https://travis-ci.org/ludofleury/satisfy)
=================================================================================================================================================================================================================================================================

[](#satisfy-)

[Satis Composer repository manager](http://getcomposer.org/doc/articles/handling-private-packages-with-satis.md) with a simple web UI.

 [![Satis: list composer repositories](https://camo.githubusercontent.com/e7da2c55549dd0df3b5023b081ca6955078f4656bd5f1914b75496191c398d4d/687474703a2f2f70726f6a6563742d736174697366792e6769746875622e696f2f736174697366792f696d616765732f6c6973742e706e67)](https://camo.githubusercontent.com/e7da2c55549dd0df3b5023b081ca6955078f4656bd5f1914b75496191c398d4d/687474703a2f2f70726f6a6563742d736174697366792e6769746875622e696f2f736174697366792f696d616765732f6c6973742e706e67) [![Satis: add a new composer repository](https://camo.githubusercontent.com/505470ac01dd710dfa070457d66f5a5fbefcd5203c782c413e4bcf3058804c69/687474703a2f2f70726f6a6563742d736174697366792e6769746875622e696f2f736174697366792f696d616765732f6372656174652e706e67)](https://camo.githubusercontent.com/505470ac01dd710dfa070457d66f5a5fbefcd5203c782c413e4bcf3058804c69/687474703a2f2f70726f6a6563742d736174697366792e6769746875622e696f2f736174697366792f696d616765732f6372656174652e706e67) [![Satis: update an existing composer repository](https://camo.githubusercontent.com/852d147bc7739e16eded71922623d81759142d885a8ca307af56208d07b0e873/687474703a2f2f70726f6a6563742d736174697366792e6769746875622e696f2f736174697366792f696d616765732f7570646174652e706e67)](https://camo.githubusercontent.com/852d147bc7739e16eded71922623d81759142d885a8ca307af56208d07b0e873/687474703a2f2f70726f6a6563742d736174697366792e6769746875622e696f2f736174697366792f696d616765732f7570646174652e706e67)

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

[](#introduction)

Satisfy provides:

- a Web UI: A CRUD to manage your satis configuration file
- a simple security layer with a login form
- a webhook endpoints for the most popular version control systems
- Satis itself

Satisfy ease your satis configuration management. It provides a simple web UI over Satis to avoid a hand-editing of the satis.json configuration file. All repositories from a composer.lock file can also be imported via upload.

How it works?
-------------

[](#how-it-works)

Basically, it just reads/writes the satis.json file and provides a web CRUD.

- On each HTTP request, the satis.json is loaded.
- If a write occurs in this file, a backup is made in var/satis/

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

[](#installation)

### Composer

[](#composer)

- Clone project `git clone https://github.com/project-satisfy/satisfy.git`
- Download composer `wget http://getcomposer.org/composer.phar`
- Install `php composer.phar install -n`

### Satis configuration

[](#satis-configuration)

- Either define your [default/existing satis configuration](http://getcomposer.org/doc/articles/handling-private-packages-with-satis.md)
- or use interactice satis CLI tool `./bin/satis init`
- or submit form at /admin/configuration

By default, the `satis.json` file is expected at the project root, but You can set another path under the parameter `satis_filename`.

### Application configuration

[](#application-configuration)

- Customize `app/config/parameters.yml` according to your needs.

### Security

[](#security)

You can restrict the access setting `admin.auth` parameter (in `app/config/parameters.yml`) to `true`. Set authorized users in `admin.users` config array.

Run Satisfy
-----------

[](#run-satisfy)

Create a web server pointing to the `public` directory. Browse to »/admin/« to manage the `satis.json`. To serve the `package.json` it is required to run Satis first.

### Satis packages definition generation

[](#satis-packages-definition-generation)

Since Satisfy does only manages the Satis configuration file, it is necessary to build the package definitions using Satis.

A bin shortcut to Satis is already included in Satisfy, so run the following command to generate the files in the web folder.

```
./bin/satis build

```

### Automatically build a single package using WebHooks

[](#automatically-build-a-single-package-using-webhooks)

For example, you can trigger a package generation for your BitBucket project by setting up a BitBucket webhook to connect back to \[your-satis-url\]/webhook/bitbucket every time you do a code push. This is more efficient than doing a full build and avoids you having to run full builds on a frequent schedule or logging in to the admin interface just to force a build.

Prebuilt docker image
---------------------

[](#prebuilt-docker-image)

You can run satisfy using prebuilt docker image. Here is an example how to setup it.

1. Create dir for configuration files
2. Add parameters.yml file, can be copied from config/parameters.yml.dist
3. Add auth.json with all required composer authentication tokens
4. Add simple satis.json with basic information
5. Create docker-compose.yml using example below
6. Start containers `docker-compose up`
7. Access container shell `docker-compose exec php bash`
8. Run initial build `./bin/satis build`
9. Open satis page on `http://localhost:8000`

```
version: '3'
services:
  php:
    image: ghcr.io/project-satisfy/satisfy:latest
    ports:
      - "${APP_PORT:-8000}:80"
    volumes:
      - ./satis.json:/var/www/html/satis.json
      - ./parameters.yml:/var/www/html/config/parameters.yml
      - ./auth.json:/var/www/.composer/auth.json:ro
    environment:
      APP_ENV: ${APP_ENV:-dev}
      APP_DEBUG: ${APP_DEBUG:-1}

```

Authors
-------

[](#authors)

- Ludovic Fleury -  -
- Julius Beckmann -  -
- Ramūnas Dronga -

License
-------

[](#license)

Satisfy is licensed under the MIT License - see the LICENSE file for details

###  Health Score

54

—

FairBetter than 97% of packages

Maintenance37

Infrequent updates — may be unmaintained

Popularity44

Moderate usage in the ecosystem

Community31

Small or concentrated contributor base

Maturity90

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 65.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 ~87 days

Recently: every ~39 days

Total

38

Last Release

785d ago

Major Versions

1.0.0 → 2.0.02015-09-09

2.1.0 → 3.0-rc12017-08-14

PHP version history (6 changes)3.0-rc1PHP ^7.0

3.1PHP ^7.1

3.2.1PHP ^7.2

3.2.8PHP ^7.3||^8.0

3.5.0PHP ^8.0

3.6.0PHP ^8.1,&lt;8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/e893ccc6f340d86cfafd86f52bb79a424bcf85377d88026eb7924a26ad8d3636?d=identicon)[ludofleury](/maintainers/ludofleury)

---

Top Contributors

[![ramunasd](https://avatars.githubusercontent.com/u/150403?v=4)](https://github.com/ramunasd "ramunasd (264 commits)")[![ludofleury](https://avatars.githubusercontent.com/u/187038?v=4)](https://github.com/ludofleury "ludofleury (50 commits)")[![h4cc](https://avatars.githubusercontent.com/u/2981491?v=4)](https://github.com/h4cc "h4cc (18 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (13 commits)")[![pitpit](https://avatars.githubusercontent.com/u/283481?v=4)](https://github.com/pitpit "pitpit (7 commits)")[![psobeich](https://avatars.githubusercontent.com/u/8857454?v=4)](https://github.com/psobeich "psobeich (6 commits)")[![kevindierkx](https://avatars.githubusercontent.com/u/2406615?v=4)](https://github.com/kevindierkx "kevindierkx (5 commits)")[![oh4real](https://avatars.githubusercontent.com/u/152303?v=4)](https://github.com/oh4real "oh4real (4 commits)")[![wilfriedwolf](https://avatars.githubusercontent.com/u/23700116?v=4)](https://github.com/wilfriedwolf "wilfriedwolf (3 commits)")[![breaker92](https://avatars.githubusercontent.com/u/9318890?v=4)](https://github.com/breaker92 "breaker92 (3 commits)")[![ihor-sviziev](https://avatars.githubusercontent.com/u/1873745?v=4)](https://github.com/ihor-sviziev "ihor-sviziev (3 commits)")[![mrardon](https://avatars.githubusercontent.com/u/634533?v=4)](https://github.com/mrardon "mrardon (3 commits)")[![rabauss](https://avatars.githubusercontent.com/u/14016098?v=4)](https://github.com/rabauss "rabauss (3 commits)")[![tucksaun](https://avatars.githubusercontent.com/u/870118?v=4)](https://github.com/tucksaun "tucksaun (3 commits)")[![pixelbrackets](https://avatars.githubusercontent.com/u/1592995?v=4)](https://github.com/pixelbrackets "pixelbrackets (2 commits)")[![mrcnpdlk](https://avatars.githubusercontent.com/u/22945316?v=4)](https://github.com/mrcnpdlk "mrcnpdlk (2 commits)")[![gerdemann](https://avatars.githubusercontent.com/u/690536?v=4)](https://github.com/gerdemann "gerdemann (2 commits)")[![eslym](https://avatars.githubusercontent.com/u/3667594?v=4)](https://github.com/eslym "eslym (1 commits)")[![clanofartisans](https://avatars.githubusercontent.com/u/12788345?v=4)](https://github.com/clanofartisans "clanofartisans (1 commits)")[![pmlt](https://avatars.githubusercontent.com/u/1267967?v=4)](https://github.com/pmlt "pmlt (1 commits)")

---

Tags

composercomposer-packagessatiscomposeruibackendsatispackagiststatic-packagist

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/playbloom-satisfy/health.svg)

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

###  Alternatives

[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)[ec-cube/ec-cube

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)[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)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)[chameleon-system/chameleon-base

The Chameleon System core.

1026.5k3](/packages/chameleon-system-chameleon-base)

PHPackages © 2026

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