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.1(2mo ago)616.2k↓32.4%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 2mo 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 1mo ago

READMEChangelog (10)Dependencies (23)Versions (22)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

48

—

FairBetter than 95% of packages

Maintenance67

Regular maintenance activity

Popularity33

Limited adoption so far

Community19

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

Total

21

Last Release

65d 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 (282 commits)")[![carnage](https://avatars.githubusercontent.com/u/846596?v=4)](https://github.com/carnage "carnage (148 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.4k5.6M651](/packages/sylius-sylius)[algolia/algoliasearch-client-php

API powering the features of Algolia.

69433.0M114](/packages/algolia-algoliasearch-client-php)[theodo-group/llphant

LLPhant is a library to help you build Generative AI applications.

1.5k311.5k5](/packages/theodo-group-llphant)[wheelpros/fitment-platform-api

Magento 2 (Open Source)

12.1k1.2k](/packages/wheelpros-fitment-platform-api)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)[commercetools/commercetools-sdk

The official PHP SDK for the commercetools Composable Commerce APIs

19281.5k](/packages/commercetools-commercetools-sdk)

PHPackages © 2026

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