PHPackages                             jardiscore/app - 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. [HTTP &amp; Networking](/categories/http)
4. /
5. jardiscore/app

ActiveLibrary[HTTP &amp; Networking](/categories/http)

jardiscore/app
==============

HTTP delivery layer for Jardis domains — FastRoute routing behind an own interface, a PSR-15 middleware pipeline, and the canonical DomainResponse-to-PSR-7 envelope mapper. No generated domain ever imports it.

v1.0.3(2w ago)05MITPHPPHP &gt;=8.3CI passing

Since Jul 21Pushed 1w agoCompare

[ Source](https://github.com/jardisCore/app)[ Packagist](https://packagist.org/packages/jardiscore/app)[ Docs](https://github.com/jardisCore/app)[ RSS](/packages/jardiscore-app/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (7)Dependencies (36)Versions (6)Used By (0)

Jardis App
==========

[](#jardis-app)

[![Build Status](https://github.com/jardisCore/app/actions/workflows/ci.yml/badge.svg)](https://github.com/jardisCore/app/actions/workflows/ci.yml/badge.svg)[![Latest Version](https://camo.githubusercontent.com/5df56c753e4519416d4accc68a1762fb2f132b70d1eaf8605b0cba24829d55a8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6a6172646973636f72652f6170702e737667)](https://packagist.org/packages/jardiscore/app)[![License: MIT](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667)](LICENSE.md)[![PHP Version](https://camo.githubusercontent.com/ecbf012e3704aed80a710e072f8a2b65afb62dddc90cadf159926d8678d54888/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253345253344382e332d3737374242342e737667)](https://www.php.net/)[![PHPStan Level](https://camo.githubusercontent.com/c51bda247654363d3e30bc352674dd761a9557803a14af0226eb411d6dc0006b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d4c6576656c253230382d627269676874677265656e2e737667)](phpstan.neon)[![PSR-12](https://camo.githubusercontent.com/34b10db0caa29bacd49bda5c437a8de95385f036f3230b31fa605326e18da22c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f64652532305374796c652d5053522d2d31322d626c75652e737667)](phpcs.xml)[![PSR-7](https://camo.githubusercontent.com/89b6884a1ff8300a7d7ba845cfbb3dfd49c6bdb6e6e8c01eb60a770d0faa0af9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5053522d2d372d485454502532304d6573736167652d626c75652e737667)](https://www.php-fig.org/psr/psr-7/)[![PSR-15](https://camo.githubusercontent.com/9fd057b6cf6c6c529701c9d3795a12632a8f3b7c76bdc986e81bfcb4bc1a7bc0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5053522d2d31352d4854545025323048616e646c6572732d626c75652e737667)](https://www.php-fig.org/psr/psr-15/)

> Part of **[Jardis](https://jardis.io)** — the Domain-Driven Design platform for PHP. You model your domain; Jardis generates the production-ready hexagonal code. `jardiscore/kernel` is the runtime the generated code runs on; this package is the HTTP delivery layer around it.

**The Request/Response-Handling offer for Jardis-generated domains.** FastRoute behind an own, narrow interface, a PSR-15 middleware pipeline, one canonical `DomainResponse` → PSR-7 mapper, and a thin bootstrap bridge around the DomainKernel (`BuildDomainKernelFromEnv`) — nothing more.

**Staying is the expected default — leaving is the guaranteed freedom.** No Jardis domain ever imports this package (a mechanically checkable structural property, not a promise — see [Wall Freedom](#wall-freedom) below); a third-party framework can answer the exact same client-facing envelope contract this package implements, without depending on it at all (see `examples/symfony-demo/`).

---

Why Jardis App?
---------------

[](#why-jardis-app)

Between "an HTTP request arrives" and "`$domain->…->process(…)` gets called" there was no Jardis offer — building a Jardis-backed HTTP API meant pulling in Laravel or Symfony just for routing and response mapping. This package closes that gap with a deliberately small core:

- **FastRoute, but swappable.** `nikic/fast-route` sits behind `Contract\RouterInterface` — an implementation detail, not a commitment.
- **PSR-15 pipeline.** Global and per-route middleware, Chain-of-Responsibility ordering (global wraps route-specific), deterministic within each group. Any PSR-15-conformant ecosystem package (auth, CORS, request-id, …) runs without an adapter.
- **One canonical mapper.** Every `DomainResponseInterface` — success or error, domain- or boundary-produced — becomes the same `{status, data, errors, meta}` JSON envelope (`vendor/jardissupport/contracts/docs/response-envelope.md`). No consumer builds this translation by hand again.
- **A thin bootstrap bridge.** Wraps the DomainKernel's own `BuildDomainKernelFromEnv` (ENV → `DomainKernel`) and the Builder-generated domain composition (`App/bootstrap.php`) with the one thing missing: an HTTP entry point around them.
- **A defined boundary-error contract.** 404/405 (with a spec-correct `Allow` header)/500 all answer in the same envelope as a domain error — a client never has to guess whether "404" came from the domain or from no route matching at all.
- **A Raw-Body invariant.** The request body is read from `php://input`exactly once, into a seekable stream; JSON parsing is lazy and never replaces it — `getBody()` stays byte-identical for the whole pipeline (the webhook-HMAC case).

Wall Freedom
------------

[](#wall-freedom)

The "no domain depends on this package" guarantee is a structural property, not an example: `tests/Acceptance/WallFreedomHarnessTest.php` checks every vendored domain's composer dependencies and namespace imports for a dependency on `jardiscore/app` — none exists, and none may. `examples/symfony-demo/`illustrates what that freedom buys a consumer: the same generated domain, answering the same envelope contract, behind Symfony instead of this package's own router — with zero `jardiscore/app` import anywhere in that demo's `composer.json` or code.

---

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

[](#installation)

```
composer require jardiscore/app
```

Quickstart
----------

[](#quickstart)

See [`docs/getting-started.md`](docs/getting-started.md) for the full, runnable `public/index.php` recipe (install → ENV/DomainKernel-Bootstrap → domain registration → first route + handler → start → first request — under 15 minutes with a prepared environment, K6). It also covers API versioning (M9), the `jardissupport/validation` growth path, and the N1 deployment stellschrauben (body-size limits, Trusted-Proxy, `display_errors`).

Examples
--------

[](#examples)

- [`examples/basic/`](examples/basic/) — the recipe above wired against a REAL Builder-generated domain (`Ecommerce`/`Sales`) over MySQL: `GET/POST/PATCH /orders`, the `422` rule-violation payload, 404/405/500 boundary cases, and a real PSR-15 ecosystem middleware.
- [`examples/symfony-demo/`](examples/symfony-demo/) — the N3 austauschbarkeits-illustration: the same fixture domain behind a Symfony front controller, fulfilling the same envelope contract, without importing this package.

---

Requirements
------------

[](#requirements)

- PHP `>=8.3`
- `jardiscore/kernel ^2.0`
- `jardissupport/contracts ^2.0`

Related Packages
----------------

[](#related-packages)

PackagePurpose`jardiscore/kernel`The DomainKernel (`DomainKernel`) + ENV-Packer this package's bootstrap bridge builds on`jardissupport/contracts``DomainResponseInterface`, `ResponseStatus`, the response-envelope contract doc`jardissupport/validation`Object-graph validation — the growth path beyond the handler's own trivial type coercion (F8)---

Documentation
-------------

[](#documentation)

Full documentation, guides, and API reference:

**[docs.jardis.io/en/core/app](https://docs.jardis.io/en/core/app)**

---

License
-------

[](#license)

Jardis is open source under the [MIT License](LICENSE.md). Free for any purpose — commercial or non-commercial.

---

*Jardis — Development with Passion**Built by [Headgent Development](https://headgent.com)*

AI-Assisted Development
-----------------------

[](#ai-assisted-development)

This package ships with a skill for Claude Code, Cursor, Continue, and Aider. Install it in your consuming project:

```
composer require --dev jardis/dev-skills
```

More details:

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance98

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 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.

###  Release Activity

Cadence

Every ~8 days

Total

4

Last Release

17d ago

### Community

Maintainers

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

---

Top Contributors

[![Headgent](https://avatars.githubusercontent.com/u/245725954?v=4)](https://github.com/Headgent "Headgent (13 commits)")

---

Tags

domain-driven-designhexagonal-architecturehttpjardisphppsr-15psr-7routerpsr-7routerpsr-15appDomain Driven DesignHeadgentjardis

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

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

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

###  Alternatives

[guzzlehttp/psr7

PSR-7 message implementation that also provides common utility methods

8.0k1.1B4.6k](/packages/guzzlehttp-psr7)[cakephp/cakephp

The CakePHP framework

8.9k20.4M1.9k](/packages/cakephp-cakephp)[typo3/cms

TYPO3 CMS is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.

1.2k1.9M122](/packages/typo3-cms)[typo3/cms-core

TYPO3 CMS Core

3714.0M5.9k](/packages/typo3-cms-core)[sunrise/http-router

A powerful solution as the foundation of your project.

16852.3k12](/packages/sunrise-http-router)[getgrav/grav

Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS

15.7k89.2k1](/packages/getgrav-grav)

PHPackages © 2026

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