---
title: Installation
---

# Installation

<div class="documentation__toc"></div>

## Introduction

You can use the Streams Platform as a basis for Laravel projects and leverage it's features just like PyroCMS does.

Before proceeding consider starting your project with a vanilla PyroCMS installation and [remove unneeded addons](/documentation/pyrocms/latest/the-basics/optimizing). You can also [fork PyroCMS](https://github.com/pyrocms/pyrocms) and change the `composer.json` to fit your businesses needs for projects.

> The Streams Platform comes setup and ready right out of the box with PyroCMS.{.notice}

## Installation

### Download with Composer

First download the [package](https://packagist.org/packages/anomaly/streams-platform) by running `composer require anomaly/streams-platform`.

### Register the service provider

Next you need to register the service provider with Laravel. To do this add the following service provider to the **end** of the `providers` section in `config/app.php` just as you would any other Laravel package:

```php
<?php

return [

    // ...

    'providers' => [

        // ...
        
        Anomaly\Streams\Platform\StreamsServiceProvider::class,
    ],


];

```

### Modify the `public/index.php` file

Next you need to modify the `public/index.php` file to use the kernels provided by the Streams Platform. This simply overrides the HTTP kernel with a variant designed to deliver HTTP cache. This is a required change.

```php
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$kernel = \Anomaly\Streams\Platform\Http\CacheKernel::wrap($kernel);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);
```
#### Modify the `bootstrap/app.php` file

The Streams Platform adds low level functionality to the HTTP and console kernels. In order for this to work properly you must register the kernels provided by the Streams Platform in the `bootstrap/app.php` file:

```php
$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    'Anomaly\Streams\Platform\Http\Kernel'
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    'Anomaly\Streams\Platform\Console\Kernel'
);
```

### Run Streams Installer

Lastly you will need to run the install which will install the database tables.

```bash
php artisan install
```

### Configure Users

Your user object must implement `Anomaly\Streams\Platform\User\Contract\UserInterface` in order to ensure compatibility.

Configure your users provider in `config/auth.php`. If you are using the [Users Module](/documentation/users-module) you can use the below configuration:

```php
<?php

return [
  
    // ...
    
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model'  => Anomaly\UsersModule\User\UserModel::class,
        ],
    ],
];
```

### Configure the Guest Role

You must set an instance of `Anomaly\Streams\Platform\User\Contract\RoleInterface` on the `\Anomaly\Streams\Platform\Support\Authorizer` singleton.

The guest role is responsible for authorizing non-logged in users.

```php
public function register(Authorizer $authorizer) {
    $authorizer->setGuest(new GuestRole());
}
```
