PHPackages                             membrane/membrane - 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. [API Development](/categories/api)
4. /
5. membrane/membrane

ActiveLibrary[API Development](/categories/api)

membrane/membrane
=================

0.10.2(1mo ago)618.2k↑25.5%4[20 issues](https://github.com/membrane-php/membrane-core/issues)[2 PRs](https://github.com/membrane-php/membrane-core/pulls)2MPL-2.0PHPPHP ^8.4.0CI passing

Since Dec 14Pushed 1mo ago2 watchersCompare

[ Source](https://github.com/membrane-php/membrane-core)[ Packagist](https://packagist.org/packages/membrane/membrane)[ RSS](/packages/membrane-membrane/feed)WikiDiscussions main Synced yesterday

READMEChangelog (10)Dependencies (34)Versions (24)Used By (2)

Membrane
========

[](#membrane)

Membrane is a lightweight input validation layer which can be used to answer the question "Is this input something we might be able to process?". Its purpose is to receive "raw" user input and produce a cleaned up, fully validated object or array representing that data, which the rest of your application can use with confidence.

It is not intended to be a fully featured validation library, but instead focus on ensuring that the data you have received looks correct by focusing on data types, ranges and formats.

To put this in context, membrane could be used to validate that a user submitting a request to edit a blog post has:

- an integer id, greater than zero;
- a string title between 10 and 80 characters;
- a string post body at least 25 characters long;
- a list of no more than 5 string tags, each with a length between 3 and 15 characters.

However, it should not be used to validate that:

- the blog post already exists;
- that the user has permission to edit the blog post;
- that the blog post is unpublished and thus still allowed to be edited.

These are all business rules which should be taken care of in a separate layer.

Membrane will usually be your first line between a web request and your application, so I have made the design decision that membrane will *NEVER* throw an exception because of bad user data. Exceptions will only be thrown due to membrane being setup incorrectly by the developer. As such, you will always get a result object back when validating user input even if the input was complete garbage.

###  Health Score

50

—

FairBetter than 95% of packages

Maintenance71

Regular maintenance activity

Popularity34

Limited adoption so far

Community20

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 65.4% 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 ~59 days

Recently: every ~123 days

Total

22

Last Release

42d ago

PHP version history (2 changes)0.1.0PHP ^8.1.0

0.10.1PHP ^8.4.0

### Community

Maintainers

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

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

---

Top Contributors

[![charjr](https://avatars.githubusercontent.com/u/102669158?v=4)](https://github.com/charjr "charjr (284 commits)")[![carnage](https://avatars.githubusercontent.com/u/846596?v=4)](https://github.com/carnage "carnage (149 commits)")[![developers-shared](https://avatars.githubusercontent.com/u/187377206?v=4)](https://github.com/developers-shared "developers-shared (1 commits)")

---

Tags

hacktoberfestmembraneopenapiopenapi-validationopenapi3validation

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

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

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

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.5k5.9M736](/packages/sylius-sylius)[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.7k38.9k](/packages/matomo-matomo)[flow-php/flow

PHP ETL - Extract Transform Load - Data processing framework

85036.3k](/packages/flow-php-flow)[algolia/algoliasearch-client-php

API powering the features of Algolia.

69735.1M159](/packages/algolia-algoliasearch-client-php)[tempest/framework

The PHP framework that gets out of your way.

2.2k34.4k15](/packages/tempest-framework)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.6M574](/packages/shopware-core)

PHPackages © 2026

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