PHPackages                             balintsera/exphpress - 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. [Framework](/categories/framework)
4. /
5. balintsera/exphpress

ActiveLibrary[Framework](/categories/framework)

balintsera/exphpress
====================

A react php clone of the famous Express framework.

30PHPCI failing

Since Mar 3Pushed 6y ago2 watchersCompare

[ Source](https://github.com/balintsera/exphpress)[ Packagist](https://packagist.org/packages/balintsera/exphpress)[ RSS](/packages/balintsera-exphpress/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependenciesVersions (3)Used By (0)

exphpress
=========

[](#exphpress)

Exphpress (pronounced as 'exfress') is a PHP clone of the famous Node.js framework, Express. The goal is a 80% api compatibility with it.

It's just a hobby project for fun, but it can be useful if you need your well-known Express.js and async scalability.

It's already faster then a default Laravel install by more than 9000 times.

Yes, it's more than *9000 times*. 🚀🚀🚀🚀

The reason is simple: while Laravel and every other frameworks by the way die after every request, Exphpress runs continuously and doesn't need to recompile and rerun everything when a request comes in.

And it's only 4 times slower then Express.js and I'll make everything that's possible to gain upon it.

Supported API calls
-------------------

[](#supported-api-calls)

Node.js:

```
const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.use(function (req, res, next) {
  console.log('Example middleware')
  next()
})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))
```

and the same in PHP:

```
$app = new \Exphpress\App();
$port = 8080;

$app->get('/hello', function (ServerRequestInterface $request) {
    return new Response(
        200,
        array(
            'Content-Type' => 'text/plain'
        ),
        'Hello World!'
    );
});

$app->use(function (ServerRequestInterface $request, callable $next) {
    error_log("example middleware");
    return $next($request);
});

$app->listen($port);
```

Run / Install
-------------

[](#run--install)

```
composer require balintsera/exphpress
```

Then organize your project the way you want, all the framework files are located in this package.

Because it has some special needs, like libuv and a pecl extension that wraps libuv, I recommend to use this dockerfile to build and run the example above.

```
FROM php:7.4-cli
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN apt-get update \
    && apt-get install -y libuv1-dev

RUN pecl install uv-0.2.4 \
    && docker-php-ext-enable uv

# install and run composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install --no-dev

CMD [ "php", "./app.php" ]
```

You can utilize this for development too with docker-compose:

```
version: "3"
services:
  exphpress:
    build: .
    ports:
      - 8080:8080
    volumes:
    - ./app.php:/usr/src/app/app.php
```

If you share the source of your app as volumes, you won't need to rebuild the image on every change (but the container still needs to be restarted).

All credits goes to the people who wrote reactPHP and all the other dependencies. Kudos.

###  Health Score

19

—

LowBetter than 9% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity38

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://www.gravatar.com/avatar/0ab3f9b98b8874849b833ccc3b0dd415d8b116654b319d17e687c218e9021e87?d=identicon)[balintsera](/maintainers/balintsera)

---

Top Contributors

[![balintsera](https://avatars.githubusercontent.com/u/8377085?v=4)](https://github.com/balintsera "balintsera (5 commits)")

### Embed Badge

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

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

###  Alternatives

[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k39.6M297](/packages/laravel-dusk)[nineinchnick/edatatables

Grid widget for the Yii Framework, wrapper for the DataTables jQuery plugin

173.2k](/packages/nineinchnick-edatatables)[link-cloud/fast-hyperf

LinkCloud Fast Hyperf

241.2k1](/packages/link-cloud-fast-hyperf)

PHPackages © 2026

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