PHPackages                             angelitolm/happor - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. angelitolm/happor

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

angelitolm/happor
=================

Simple Repository Generator

29JavaScript

Since Jul 4Pushed 6y ago1 watchersCompare

[ Source](https://github.com/angelitolm/happor)[ Packagist](https://packagist.org/packages/angelitolm/happor)[ RSS](/packages/angelitolm-happor/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (1)Used By (0)

Happor
======

[](#happor)

Is the little Composer repository generator based on Satis.

[![Happor](https://camo.githubusercontent.com/e22380f08184fc1278bcd1e028dceb307e87d5506f06b10eb6eed8f741fccb86/68747470733a2f2f73636f6e74656e742d6d6961332d312e78782e666263646e2e6e65742f762f74312e302d392f35303436373839395f3536353636333038303536393536385f373730363235323239343938323939313837325f6e2e706e673f5f6e635f6361743d313039265f6e635f6f633d41516d37694759724a56507a77645631762d69516c6672567938755741553261343579566938596b4c2d5178547234454f3454536254387a416d384472465842443041265f6e635f68743d73636f6e74656e742d6d6961332d312e7878266f683d3965363163313566353030373565386532303232656537396664633830626464266f653d3544374142354336)](https://camo.githubusercontent.com/e22380f08184fc1278bcd1e028dceb307e87d5506f06b10eb6eed8f741fccb86/68747470733a2f2f73636f6e74656e742d6d6961332d312e78782e666263646e2e6e65742f762f74312e302d392f35303436373839395f3536353636333038303536393536385f373730363235323239343938323939313837325f6e2e706e673f5f6e635f6361743d313039265f6e635f6f633d41516d37694759724a56507a77645631762d69516c6672567938755741553261343579566938596b4c2d5178547234454f3454536254387a416d384472465842443041265f6e635f68743d73636f6e74656e742d6d6961332d312e7878266f683d3965363163313566353030373565386532303232656537396664633830626464266f653d3544374142354336)

[![Build Status](https://camo.githubusercontent.com/770aad8227e550bb1958b38bce5430dea32f4bb9/68747470733a2f2f7472617669732d63692e6f72672f636f6d706f7365722f73617469732e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/angelitolm/happor)[![codecov](https://camo.githubusercontent.com/98acb1573f5e05041077f2e102ced22a64194b63/68747470733a2f2f636f6465636f762e696f2f67682f636f6d706f7365722f73617469732f6272616e63682f6d61737465722f67726170682f62616467652e737667)](https://codecov.io/gh/angelitolm/happor)

[](#run-from-source)Run from source
-----------------------------------

[](#run-from-source)

- Install happor: `composer create-project angelitolm/happor:dev-master`
- Build a repository: `php bin/happor build  `

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

[](#installation)

### Step 1

[](#step-1)

The first step is to clone it from github

```
composer create-project angelitolm/happor --stability=dev --keep-vcs
```

### Step 2

[](#step-2)

Once it is finished we will initialize it so that it creates the configuration file (it could be done manually, too, but take advantage of the tool).

```
bin/happor init
```

We will assign the name and url of our local repository. The URL must have been previously created in a vhost beforehand.

**Example:**

```
    ServerAdmin admin@happor.example.com
    ServerName happor.example.com
    ErrorLog /var/log/error-happor.log
    LogLevel warn
    CustomLog /var/log/access-happor.log combined
    DocumentRoot /var/www/html/happor/web

       DirectoryIndex index.html index.php
       Options Indexes FollowSymLinks MultiViews
       AllowOverride all
       Order deny,allow
       Deny from all
       Allow from all

```

When initializing it, a file named happor.json has been created with this content:

```
{
    "name": "Happor, The little PHP Package Repository",
    "homepage": "http://happor.example.com",
    "repositories": [],
    "require-all": true
}
```

### Step 3

[](#step-3)

Now it's time to add modules that are from remote repositories, which are those that will be served from Happor instead of using the original remote repository.

For that, while it can also be done manually, we will continue with the console of Happor. For the example I have created two modules (only the basic structure) that have their private repositories in Github).

```
bin/happor add git@github.com:symfony/symfony-standard.git
```

**Manual example:**

We must edit the file happor.json and add the following:

```
{
    "type": "vcs",
    "url": "git@github.com:symfony/symfony-standard.git"
}
```

Staying as follows:

```
{
    "name": "Happor, The little PHP Package Repository",
    "homepage": "http://happor.example.com",
    "repositories": [
        {
            "type": "vcs",
            "url": "git@github.com:symfony/symfony-standard.git"
        }
    ],
    "require-all": true
}
```

### Step 4

[](#step-4)

Assuming we have added all the repositories that we needed, now we have to do our first build. For this, we execute:

```
bin/happor build happor.json web -n
```

To understand the command:

- **bin/happor:** is the console.
- **build:** is the command that we are wanting to execute.
- **happor.json:** the name of the file from which the parameters will be taken.
- **web:** the directory in which the build and the web interface will be created.
- **-n:** we use the parameter to take credentials of the user who is executing the command (the ssh keys, for example, to access the repositories added).

Now we can navigate with our browser our instance of Happor and we would have the packages that we had added.

[](#run-as-docker-container)Run as Docker container
---------------------------------------------------

[](#run-as-docker-container)

Pull the image:

```
docker pull composer/happor
```

Run the image:

```
docker run --rm -it -v /build:/build composer/happor
```

> Note: by default it will look for a configuration file named `happor.json`inside the `/build` directory and dump the generated output files in `/build/output`.

Run the image (with Composer cache from host):

```
docker run --rm -it -v /build:/build -v $COMPOSER_HOME:/composer composer/happor
```

If you want to run the image without implicitly running Happor, you have to override the entrypoint specified in the `Dockerfile`:

```
docker run --rm -it --entrypoint /bin/sh composer/happor
```

[](#purge)Purge
---------------

[](#purge)

If you choose to archive packages as part of your build, over time you can be left with useless files. With the `purge` command, you can delete these files.

```
php bin/happor purge
```

> Note: don't do this unless you are certain your projects no longer reference any of these archives in their `composer.lock` files.

[](#updating)Updating
---------------------

[](#updating)

Updating Happor is as simple as running `git pull && composer update` in the Happor directory.

If you are running Happor as a Docker container, simply pull the latest image.

[](#contributing)Contributing
-----------------------------

[](#contributing)

Please note that this project is released with a [Contributor Code of Conduct](http://contributor-covenant.org/version/1/4/). By participating in this project you agree to abide by its terms.

Fork the project, create a feature branch, and send us a pull request.

[](#authors)Authors
-------------------

[](#authors)

See the list of [contributors](https://github.com/angelitolm/happor/contributors) who participate(d) in this project.

[](#license)License
-------------------

[](#license)

Happor is licensed under the MIT License - see the [LICENSE](https://github.com/angelitolm/happor/blob/master/LICENSE) file for details

###  Health Score

19

—

LowBetter than 9% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 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.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/14825189?v=4)[Angel Labrada Massó](/maintainers/angelitolm)[@angelitolm](https://github.com/angelitolm)

---

Top Contributors

[![angelitolm](https://avatars.githubusercontent.com/u/14825189?v=4)](https://github.com/angelitolm "angelitolm (32 commits)")

---

Tags

install

### Embed Badge

![Health badge](/badges/angelitolm-happor/health.svg)

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

###  Alternatives

[league/pipeline

A plug and play pipeline implementation.

1.0k16.8M84](/packages/league-pipeline)[awcodes/light-switch

Plugin to add theme switching (light/dark/system) to the auth pages for Filament Panels

48103.3k2](/packages/awcodes-light-switch)

PHPackages © 2026

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