Laravel The world's most powerful Laravel development platform.

The Streams Platform is a comprehensive suite of tooling, services, and utilities for building powerful applications in record time with Laravel.

We've taken great care in making sure to remain 100% transparent to Laravel.

  • We love, use, and promote everything you love about Laravel.
  • Mix and match Streams in Laravel and vice versa.
  • Works well within deployment environments.
  • Leverage composer to manage common addon dependencies.
Laravel



Application Engine The Streams Platform is kind of like the heart of Pyro.

Streams is a package that provides Pyro's addon architecture, UI builders, numerous services, heightened HTTP and console kernels, and much much more.

Browse Code

Rapid Development Quickly scaffold components with Artisan.

Our CLI tools let you build addons and data structures literally in seconds. Just tweak as needed and ship it.

Lightning fast time to market means you can say yes more often to those customer needs that just can't be found on the shelf.

  • Drastically reduce time to market for anything.
  • Best-practice design patterns by default.
  • Perfect for prototyping and delivery alike.
  • 99% of what you need from a single command.

Transparent Workflow A familiar workflow made better.

Streams leverages migrations to build up the database and models automatically using field types and field assignments.

  • Schema is automated for you based on stream components.
  • Models are generated for you ready to extend and put to work.
  • Entry models directly extend Eloquent.
  • Push project addons to GitHub and other dev machines.
  • Leverage composer to manage common addon dependencies.

// Create an addon.
php artisan make:addon pyro.module.products

// Create a stream within your addon.
php artisan make:addon products pyro.module.products

-----------------------------------------------------------------------------

// Behold.
ls -R addons/default/pyro/products-module/

// PSR-4
composer.json

// Stream and field / assignment migrations.
./migrations/2017_01_09_062245_pyro.module.products__create_products_fields.php
./migrations/2017_01_09_062257_pyro.module.products__create_products_stream.php

// Basic addon translation file.
./resources/lang/en/addon.php

// Default CRUD routes.
./resources/routes/products.php

// Module class and service provider.
./src/ProductsModule.php
./src/ProductsModuleServiceProvider.php

// Default admin controller for CRUD.
./src/Http/Controller/Admin/ProductsController.php

// Basic entry interfaces.
./src/Product/Contract/ProductInterface.php
./src/Product/Contract/ProductRepositoryInterface.php

// Common entry services and entry model.
./src/Product/ProductCollection.php
./src/Product/ProductModel.php
./src/Product/ProductPresenter.php
./src/Product/ProductRouter.php
./src/Product/ProductCriteria.php
./src/Product/ProductObserver.php
./src/Product/ProductRepository.php

// Common entry UI for CRUD.
./src/Product/Form/ProductFormBuilder.php
./src/Product/Table/ProductTableBuilder.php

-----------------------------------------------------------------------------

// Migrate as you go.
php artisan artisan migrate:refresh --addon=pyro.module.products
                



Assets Asset management you'll love.

Our Asset service extends the Assetic package and integrates seamlessly into addons and Laravel.

Read Documentation

<?php

use Anomaly\Streams\Platform\Database\Migration\Migration;

class AnomalyModuleProductsCreateProductsFields extends Migration
{

    protected $fields = [
        'name'             => 'anomaly.field_type.text',
        'slug'             => [
            'type'   => 'anomaly.field_type.slug',
            'config' => [
                'type'    => '-',
                'slugify' => 'name',
            ],
        ],
        'description'      => 'anomaly.field_type.wysiwyg',
        'tags'             => 'anomaly.field_type.tags',
        'images'           => 'anomaly.field_type.files',
        'featured'         => 'anomaly.field_type.boolean',
        'enabled'          => [
            'type'   => 'anomaly.field_type.boolean',
            'config' => [
                'default_value' => true,
            ],
        ],
    ];
}

----------------------------------------------------------------------

<?php

use Anomaly\Streams\Platform\Database\Migration\Migration;

class AnomalyModuleProductsCreateProductsStream extends Migration
{

    protected $stream = [
        'slug'         => 'products',
        'title_column' => 'name',
        'translatable' => true,
        'trashable'    => true,
    ];

    protected $assignments = [
        'str_id'           => [
            'required' => true,
            'unique'   => true,
        ],
        'name'             => [
            'required'     => true,
            'translatable' => true,
        ],
        'slug'             => [
            'required' => true,
            'unique'   => true,
        ],
        'description'      => [
            'translatable' => true,
        ],
        'tags',
        'images',
        'enabled',
        'featured',
    ];
}

Streams Hassle free data structures.

Streams are custom data structures that extend Eloquent. No nasty EAV models here just Laravel models on steroids.

  • Automatic event driven table management.
  • Streams generate Entry models that extend Eloquent.
  • Inherits all the functionality of Eloquent.


Fields Powerful input / output.

Fields use Field Types to define storage format, data mutation, validation, input UI, and more.

  • Automatic event driven schema management.
  • Mega powerful data input output control.

Assignments Versatile model attributes.

When you assign a field to a stream you create an attribute for that model.

  • Automatic event driven schema management.
  • Data input and output backed by field types.
  • Integrated with Laravel's native model attribute system.



Images Painless image manipulation.

Our Image service extends the Intervention package and integrates seamlessly into addons and Laravel.

Read Documentation

Let's Get Started

You've only scratched the surface. Ready to learn more?




Documentation

View Documentation



Video Tutorials

View Tutorials



Discussion Forum

View Forum