Skip to content
Agentic-first Laravel packages

Laravel, described in configuration.

Model your app in JSON. Get queries, admin UI, and an API that people and AI agents can build on.

How it works

One file per domain.

Everything else reads from it.

  1. 1

    Describe a stream

    Fields, routes, and storage in streams/*.json.

  2. 2

    Add entries

    Flat files, JSON, or a database. Swap storage without code changes.

  3. 3

    Query and render

    Queries, routes, admin UI, and the API share one definition. This site works this way.

{
    "name": "Pages",
    "config": {
        "source": { "format": "html" }
    },
    "routes": [
        { "handle": "view", "uri": "{uri}", "view": "{layout}" }
    ],
    "fields": [
        { "handle": "title", "type": "string", "required": true },
        { "handle": "uri", "type": "string", "unique": true },
        { "handle": "body", "type": "string" }
    ]
}

---

title: Hello
uri: hello
layout: page

---

<h1>{{ $entry->title }}</h1>
<p>Every file in streams/data/pages is an entry.</p>
use Streams\Core\Support\Facades\Streams;

$pages = Streams::entries('pages')
    ->where('uri', 'LIKE', 'docs%')
    ->orderBy('title')
    ->get();

// Swap the flat files for a database adapter later:
// the query does not change.

Packages

Composable by design.

Use one package or all six.

All documentation

Starters and addons

Open-source building blocks.

Starters and addons to build on.

Browse addons

Explore

Have an idea?

Answer a few questions and see how Streams fits.