PHPackages                             spryker/app-kernel - 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. spryker/app-kernel

ActiveLibrary[Framework](/categories/framework)

spryker/app-kernel
==================

AppKernel module

2.4.0(1y ago)07.7k↓50%14proprietaryPHPPHP &gt;=8.2CI passing

Since Oct 11Pushed 1y ago30 watchersCompare

[ Source](https://github.com/spryker/app-kernel)[ Packagist](https://packagist.org/packages/spryker/app-kernel)[ RSS](/packages/spryker-app-kernel/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (35)Versions (16)Used By (4)

AppKernel Module
================

[](#appkernel-module)

[![Latest Stable Version](https://camo.githubusercontent.com/3382f589346332c96c34a132dc18170e99bec152c82b15a84e86a408d3427ed6/68747470733a2f2f706f7365722e707567782e6f72672f737072796b65722f6170702d6b65726e656c2f762f737461626c652e737667)](https://packagist.org/packages/spryker/app-kernel)[![Minimum PHP Version](https://camo.githubusercontent.com/ec21f169d70b69344c67d6f18fa1a24d20476d2f0cd680e8c4a1534c22f34e5f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344253230382e322d3838393242462e737667)](https://php.net/)

Provides SyncAPI and AsyncAPI schema files and the needed code to make the Mini-Framework an App.

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

[](#installation)

```
composer require spryker/app-kernel

```

### Configure

[](#configure)

#### App Identifier

[](#app-identifier)

config/Shared/config\_default.php

```
use Spryker\Shared\AppKernel\AppKernelConstants;

$config[AppKernelConstants::APP_IDENTIFIER] = getenv('APP_IDENTIFIER') ?: 'hello-world';
$config[AppKernelConstants::OPEN_API_SCHEMA_PATH] = 'path/to/your/openApiSchema.yml';

```

### Validating Requests against the OpenAPI Schema

[](#validating-requests-against-the-openapi-schema)

Low level validation can be done by using the `Spryker\Zed\AppKernel\Communication\Plugin\OpenApiSchemaValidatorPlugin` plugin. When this plugin is added to the GlueApplicationDependencyProvider all API requests against this App will be validated against the defined OpenAPI schema.

To enable this, you need to have a well-defined OpenAPI schema file, and you need to add the `OpenApiSchemaValidatorPlugin` plugin to the `getRestApplicationPlugins` method in your GlueApplicationDependencyProvider.

```
use Spryker\Zed\AppKernel\Communication\Plugin\OpenApiSchemaValidatorPlugin;

...

    protected function getRestApplicationPlugins(): array
    {
        return [
            new OpenApiSchemaValidatorPlugin(),
        ];
    }

...
```

Pay intention that this will be a hard validation that gets executed before any other code from your App gets executed. If the validation fails, the request will be rejected with a 400 Bad Request response with a proper message that explains what exactly is wrong in the request.

Make sure you have tests for your API.

### Testing the AppKernel

[](#testing-the-appkernel)

You can test the AppKernel as usual with Codeception. Before that you need to run some commands:

```
composer setup

```

With these commands you've set up the AppKernel and can start the tests

```
vendor/bin/codecept build
vendor/bin/codecept run

```

Documentation
=============

[](#documentation)

Configuration
-------------

[](#configuration)

### AppIdentifier

[](#appidentifier)

Every App needs a unique App Identifier which needs to be configured in the `config/Shared/config_default.php` file after installation.

```
use Spryker\Shared\AppKernel\AppConstants;

$config[AppConstants::APP_IDENTIFIER] = getenv('APP_IDENTIFIER') ?: '1ba6db00-d12c-43c9-9783-936e4cded397';

```

High-Level Architecture
-----------------------

[](#high-level-architecture)

[![alt_text](docs/images/app-kernel-high-level-architecture.svg)](https://docs.spryker.com/)

Features
--------

[](#features)

### Encryption

[](#encryption)

This package comes with a built-in Encryption for data that gets persisted. By default, the encryption is disabled but can be easily enabled. After installation and setup, you can configure the encryption of sensitive data.

### Enable Plugin

[](#enable-plugin)

The encryption will be done with the help of a plugin. You can add the required plugin to the `\Pyz\Client\SecretsManager\SecretsManagerDependencyProvider::getSecretsManagerProviderPlugin()` method on the project level.

Currently, we have an AWS Plugin available for you `\Spryker\Client\SecretsManagerAws\Plugin\SecretsManager\SecretsManagerAwsProviderPlugin` for any other encryption you need to create your own plugin.

You can install the package that contains the plugin with

```
composer require spryker/secrets-manager-aws

```

### Extend the Propel schema

[](#extend-the-propel-schema)

Add a `spy_app_kernel.schema.xml` on the project level to `src/Pyz/AppKernel/Zed/Persistence/Propel/schema` and update the columns you want to be encrypted.

Example

```

```

Next, execute the migrations by running the `docker/sdk console propel:install` command, then these columns will be encrypted.

Plugins
-------

[](#plugins)

This package provides the following plugins

### Glue

[](#glue)

- `\Spryker\Glue\AppKernel\Plugin\RouteProvider\AppKernelRouteProviderPlugin`

#### AppKernelRouteProviderPlugin

[](#appkernelrouteproviderplugin)

This plugin must be added to the `\Pyz\Glue\GlueBackendApiApplication\GlueBackendApiApplicationDependencyProvider::getRouteProviderPlugins()`.

Extension
---------

[](#extension)

In most cases, the default behavior of the AppKernel will be enough. When you need to add or change behavior we provide extension points you can use to change the AppKernel.

This package provides the following extensions.

### Glue

[](#glue-1)

- Configuration validation plugins
- Disconnect validation plugins

#### Configuration validation plugins

[](#configuration-validation-plugins)

This plugin stack can be used to add your own validators for the configuration of the App. This will most likely be useful when you need to validate the passed configuration from the App Store Catalog e.g. checking against the implemented provider if credentials are valid.

You can add your own plugins to the `\Pyz\Glue\AppKernel\AppKernelDependencyProvider::getRequestConfigureValidatorPlugins()` method on the project level.

#### Disconnect validation plugins

[](#disconnect-validation-plugins)

This plugin stack can be used to add your own validators for the disconnect of the App. This can be used e.g. for validating if the App can be disconnected or not.

You can add your own plugins to the `\Pyz\Glue\AppKernel\AppKernelDependencyProvider::getRequestDisconnectValidatorPlugins()` method on the project level.

Zed
---

[](#zed)

Zed offers the following extension points

- `\Spryker\Zed\AppKernelExtension\Dependency\Plugin\AppKernelPlatformPluginInterface`
- `\Spryker\Zed\AppKernelExtension\Dependency\Plugin\ConfigurationBeforeSavePluginInterface`
- `\Spryker\Zed\AppKernelExtension\Dependency\Plugin\ConfigurationAfterSavePluginInterface`
- `\Spryker\Zed\AppKernelExtension\Dependency\Plugin\ConfigurationBeforeDeletePluginInterface`
- `\Spryker\Zed\AppKernelExtension\Dependency\Plugin\ConfigurationAfterDeletePluginInterface`

Both save and delete actions can be extended with a plugin that needs to be executed before and after the AppKernel code is executed.

### AppKernelPlatformPluginInterface

[](#appkernelplatformplugininterface)

You can implement this plugin in the Apps PlatformPlugin. It enables the validation of the configuration that gets passed from the AppStoreCatalog.

### ConfigurationBeforeSavePluginInterface

[](#configurationbeforesaveplugininterface)

You can add your plugins to the `\Pyz\Zed\AppKernel\AppKernelDependencyProvider::getConfigurationBeforeSavePlugins()` method on the project level.

### ConfigurationAfterSavePluginInterface

[](#configurationaftersaveplugininterface)

You can add your plugins to the `\Pyz\Zed\AppKernel\AppKernelDependencyProvider::getConfigurationAfterSavePlugins()` method on the project level.

### ConfigurationBeforeDeletePluginInterface

[](#configurationbeforedeleteplugininterface)

You can add your plugins to the `\Pyz\Zed\AppKernel\AppKernelDependencyProvider::getConfigurationBeforeDeletePlugins()` method on the project level.

### ConfigurationAfterDeletePluginInterface

[](#configurationafterdeleteplugininterface)

You can add your plugins to the `\Pyz\Zed\AppKernel\AppKernelDependencyProvider::getConfigurationAfterDeletePlugins()` method on the project level.

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance41

Moderate activity, may be stable

Popularity23

Limited adoption so far

Community24

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 81.1% 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 ~32 days

Recently: every ~24 days

Total

15

Last Release

493d ago

Major Versions

0.2.2 → 2.0.02024-08-02

1.0.0 → 2.0.12024-08-23

PHP version history (3 changes)0.1.0PHP &gt;=8.0

0.1.1PHP &gt;=8.1

2.2.0PHP &gt;=8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10738957?v=4)[Spryker Bot](/maintainers/spryker-bot)[@spryker-bot](https://github.com/spryker-bot)

---

Top Contributors

[![stereomon](https://avatars.githubusercontent.com/u/1382877?v=4)](https://github.com/stereomon "stereomon (86 commits)")[![vol4onok](https://avatars.githubusercontent.com/u/5063777?v=4)](https://github.com/vol4onok "vol4onok (13 commits)")[![matweew](https://avatars.githubusercontent.com/u/454530?v=4)](https://github.com/matweew "matweew (3 commits)")[![pushokwhite](https://avatars.githubusercontent.com/u/4017411?v=4)](https://github.com/pushokwhite "pushokwhite (2 commits)")[![spryker-release-bot](https://avatars.githubusercontent.com/u/26904324?v=4)](https://github.com/spryker-release-bot "spryker-release-bot (2 commits)")

###  Code Quality

TestsCodeception

Static AnalysisPHPStan, Rector

Type Coverage Yes

### Embed Badge

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

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

###  Alternatives

[spryker/search

Search module

152.8M64](/packages/spryker-search)

PHPackages © 2026

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