PHPackages                             friendsofphp/pickle - 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. friendsofphp/pickle

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

friendsofphp/pickle
===================

Installer for PHP extension, supports pecl package or install from src tree directly

v0.7.11(3y ago)1.7k3.3k87[33 issues](https://github.com/FriendsOfPHP/pickle/issues)[5 PRs](https://github.com/FriendsOfPHP/pickle/pulls)BSD-3-ClausePHPPHP &gt;=7.2

Since Jul 11Pushed 2y ago52 watchersCompare

[ Source](https://github.com/FriendsOfPHP/pickle)[ Packagist](https://packagist.org/packages/friendsofphp/pickle)[ Docs](https://github.com/FriendsOfPHP/pickle)[ RSS](/packages/friendsofphp-pickle/feed)WikiDiscussions master Synced 4d ago

READMEChangelog (10)Dependencies (11)Versions (24)Used By (0)

pickle - PHP Extension installer [![SensioLabsInsight](https://camo.githubusercontent.com/ba8699cb526a1ed011c0b44fa19d47bb6af69e753f6134a32ca40e5fc616497d/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f37653135336430342d373962652d343765362d623265652d3630636463323636356464352f736d616c6c2e706e67)](https://insight.sensiolabs.com/projects/7e153d04-79be-47e6-b2ee-60cdc2665dd5)
=======================================================================================================================================================================================================================================================================================================================================================================================================================

[](#pickle---php-extension-installer-)

Pickle installs PHP extensions easily on all platforms.

[![Code Climate](https://camo.githubusercontent.com/163529909f69bdf34530a9462e1044c1e807b1e4ddef06e4c5fd4da0161c6d5e/68747470733a2f2f636f6465636c696d6174652e636f6d2f6769746875622f467269656e64734f665048502f7069636b6c652e737667)](https://codeclimate.com/github/FriendsOfPHP/pickle)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/69dcf92f03e104f189573f60f8b6565f5c6be55997e385062868923be61768b0/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f467269656e64734f665048502f7069636b6c652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/FriendsOfPHP/pickle/?branch=master)[![Code Coverage](https://camo.githubusercontent.com/5412d5b5ddc1a802ee8aa9e20d84b12cf45125c46c71cd7e91f9eb2ef1fc2002/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f467269656e64734f665048502f7069636b6c652f6261646765732f636f7665726167652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/FriendsOfPHP/pickle/?branch=master)[![Build Status](https://github.com/FriendsOfPHP/pickle/workflows/Tests/badge.svg?branch=master)](https://github.com/FriendsOfPHP/pickle/actions?query=workflow%3ATests)

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

[](#installation)

Grab the latest phar at

```
wget https://github.com/FriendsOfPHP/pickle/releases/latest/download/pickle.phar
```

and run using

```
$ php pickle.phar
```

or add the execute flag

```
$ chmod +x pickle.phar
```

then run as:

```
$ pickle.phar info apcu
```

You can also rename the phar to "pickle"

```
$ mv pickle.phar pickle
```

so it can be called using pickle only.

And finally you can add it to your path or copy it in /usr/local/bin or your favorite binary directory.

On windows, use

```
$ php pickle.phar
```

or create a .bat containing:

```
@echo OFF
setlocal DISABLEDELAYEDEXPANSION
c:\path\to\php.exe "c:\path\to\pickle.phar" %*

```

If someone would be kind enough to write an installer script, we would be eternally thankful :)

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

[](#introduction)

Pickle is a new PHP extension installer. It is based on Composer and the plan is to get Composer to fully support it. See [composer/composer#2898 (comment)](https://github.com/composer/composer/pull/2898#issuecomment-48439196) for the Composer part of the discussions.

Pickle fully supports existing extensions in , running the following will install the latest available version of the memcache extension:

```
$ pickle install memcache
```

Windows is fully supported, to install binaries or from the sources (work in progress and given that you have a working build environment in place).

The concept behind Pickle is to ease the life of both developers and end users.

For end users, nothing changes much except that Pickle is based on modern concepts and works with multiple protocols (git or http(s) URLs).

For developers, it drastically reduces the release work. Extension meta information is not duplicated anymore. Configuration options, files to package etc. are automatically fetched from the sources and the respective files are updated during the release process. There is no risk anymore of forgetting to update the version here or there, or to neglect to include a file.

Installation From Sources
-------------------------

[](#installation-from-sources)

While the phar usage is recommended, one is indeed able to use it from git.

Clone this repository and install the dependencies with [Composer](http://getcomposer.org/):

```
$ composer install
```

If you like to create your own phar from the pickle sources, you will need to install Box (). Then clone the repository and run the following commands:

```
$ cd pickle
$ composer install --no-dev --optimize-autoloader
$ php -d phar.readonly=0 box.phar build
```

Usage
-----

[](#usage)

Usage is pretty straightforward. For example, to install the memcache extension run the following command:

```
$ bin/pickle install memcache
```

If you need to install a specific version of an extension, you may do so:

```
$ bin/pickle install redis@5.3.2
```

You can also use pickle from your extension directory, the following command:

```
$ cd myext
$ bin/pickle install
```

A list of the commands is available using:

```
$ bin/pickle list
```

To get extended help for a given command, use:

```
$ bin/pickle help install
```

To convert a package (based on package.xml current PECL installer), use:

```
$ bin/pickle convert /home/pierre/myext/
```

Or run it from the extension source directory.

Contributing
------------

[](#contributing)

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

To ensure a consistent code base, you should make sure the code follows the [PSR-1](http://www.php-fig.org/psr/psr-1/) and [PSR-2](http://www.php-fig.org/psr/psr-2/) coding standards.

To check CS issues, you can use the `cs-check` composer command:

```
$ composer run cs-check
```

To automatically fix CS issues, you can use the `cs-fix` composer command:

```
$ composer run cs-fix
```

Support
-------

[](#support)

Support is available via the [issue tracker](https://github.com/FriendsOfPHP/pickle/issues) in the Github project page or via [IRC, EFNet, channel `#pickle`](http://chat.efnet.org/).

Running tests
-------------

[](#running-tests)

You should run the tests by setting the `PICKLE_PECL_TESTSERVER` environment variable to `yes` (or `true` or `1`). This implies that test are executed using a well-defined environment instead of using a live web server.

```
# On Unix-like systems
export PICKLE_PECL_TESTSERVER=yes
# On Windows systems
set PICKLE_PECL_TESTSERVER=yes
```

Unit tests are written using [atoum](https://github.com/atoum/atoum). You will get atoum, among other dependencies, when running `composer install`. To run tests, you will need to run the following command:

```
$ vendor/bin/atoum

# To run tests in a loop, ideal to do TDD
$ vendor/bin/atoum --loop
```

There are also some [Behat](https://github.com/behat/behat) tests. You will get Behat, among other dependencies, when running `composer install`. To run tests, you will need to run the following command:

```
$ vendor/bin/behat

# To choose the test suite you want to run
$ vendor/bin/behat -s pickle
```

Behat tests also test the phar, generate it prior to run the full test as described here (composer install --no-dev mode).

Pickle is covered using 4 Behat tests suites:

- `pickle` runs tests against pickle's sources
- `pickle_phar` runs tests against pickle's Phar which you have to manually build
- `pecl` tests PECL extensions conversion with pickle's sources
- `phar_pecl` tests PECL extensions conversion with pickle's Phar

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity43

Moderate usage in the ecosystem

Community36

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

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

Recently: every ~74 days

Total

19

Last Release

1435d ago

PHP version history (3 changes)v0.1.0PHP ~5.4

v0.3.0PHP &gt;=5.4

v0.5.0PHP &gt;=7.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/6e9d7ece045fc89575e083ee4852edf31218df403c84f41a0de01863dae982f5?d=identicon)[mlocati](/maintainers/mlocati)

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

![](https://avatars.githubusercontent.com/u/282408?v=4)[Pierre Joye](/maintainers/pierrejoye)[@pierrejoye](https://github.com/pierrejoye)

---

Top Contributors

[![weltling](https://avatars.githubusercontent.com/u/22016?v=4)](https://github.com/weltling "weltling (245 commits)")[![pierrejoye](https://avatars.githubusercontent.com/u/282408?v=4)](https://github.com/pierrejoye "pierrejoye (229 commits)")[![jubianchi](https://avatars.githubusercontent.com/u/327237?v=4)](https://github.com/jubianchi "jubianchi (89 commits)")[![mlocati](https://avatars.githubusercontent.com/u/928116?v=4)](https://github.com/mlocati "mlocati (70 commits)")[![Hywan](https://avatars.githubusercontent.com/u/946104?v=4)](https://github.com/Hywan "Hywan (46 commits)")[![pborreli](https://avatars.githubusercontent.com/u/77759?v=4)](https://github.com/pborreli "pborreli (32 commits)")[![Seldaek](https://avatars.githubusercontent.com/u/183678?v=4)](https://github.com/Seldaek "Seldaek (8 commits)")[![keradus](https://avatars.githubusercontent.com/u/2716794?v=4)](https://github.com/keradus "keradus (5 commits)")[![ruudk](https://avatars.githubusercontent.com/u/104180?v=4)](https://github.com/ruudk "ruudk (5 commits)")[![harikt](https://avatars.githubusercontent.com/u/120454?v=4)](https://github.com/harikt "harikt (4 commits)")[![cmb69](https://avatars.githubusercontent.com/u/2306138?v=4)](https://github.com/cmb69 "cmb69 (4 commits)")[![mcfedr](https://avatars.githubusercontent.com/u/704356?v=4)](https://github.com/mcfedr "mcfedr (2 commits)")[![hrs-o](https://avatars.githubusercontent.com/u/7277266?v=4)](https://github.com/hrs-o "hrs-o (2 commits)")[![tntrex](https://avatars.githubusercontent.com/u/3947942?v=4)](https://github.com/tntrex "tntrex (1 commits)")[![TomasVotruba](https://avatars.githubusercontent.com/u/924196?v=4)](https://github.com/TomasVotruba "TomasVotruba (1 commits)")[![vstokarev](https://avatars.githubusercontent.com/u/6095904?v=4)](https://github.com/vstokarev "vstokarev (1 commits)")[![adhocore](https://avatars.githubusercontent.com/u/2908547?v=4)](https://github.com/adhocore "adhocore (1 commits)")[![zluiten](https://avatars.githubusercontent.com/u/1336070?v=4)](https://github.com/zluiten "zluiten (1 commits)")[![desrosj](https://avatars.githubusercontent.com/u/359867?v=4)](https://github.com/desrosj "desrosj (1 commits)")[![duncan3dc](https://avatars.githubusercontent.com/u/546811?v=4)](https://github.com/duncan3dc "duncan3dc (1 commits)")

###  Code Quality

TestsBehat

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/friendsofphp-pickle/health.svg)

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

###  Alternatives

[roave/backward-compatibility-check

Tool to compare two revisions of a public API to check for BC breaks

5953.3M56](/packages/roave-backward-compatibility-check)[ramsey/conventional-commits

A PHP library for creating and validating commit messages according to the Conventional Commits specification. Includes a CaptainHook action!

1931.2M122](/packages/ramsey-conventional-commits)[php-soap/wsdl

Deals with WSDLs

173.5M12](/packages/php-soap-wsdl)[magento/composer

Magento composer library helps to instantiate Composer application and run composer commands.

317.7M8](/packages/magento-composer)[netgen/layouts-core

Netgen Layouts enables you to build and manage complex web pages in a simpler way and with less coding. This is the core of Netgen Layouts, its heart and soul.

3689.4k10](/packages/netgen-layouts-core)[symfony/ai-bundle

Integration bundle for Symfony AI components

30282.3k6](/packages/symfony-ai-bundle)

PHPackages © 2026

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