Skip to content

Package catalog

How packages.json powers the add-ons page and homepage cards.

Overview

The add-on catalog on /addons comes from the packages stream. Entries describe Streams ecosystem packages (Core, UI, API, SDK, and community addons) with Composer metadata and marketing copy.

Stream source

streams/packages.json uses a self source — entries are stored inline in the JSON file under data, not as separate files:

{
    "config": {
        "source": {
            "type": "self"
        }
    }
}

Each entry includes fields such as name, type, enabled, and a composer object with package coordinates.

Entry types

The type field groups catalog entries:

Type Examples
starter Official starter projects
example Demo applications
database Database adapters
client API clients
tools Dev tooling

Only entries with enabled: true should appear in public listings (filter in your Blade/views as needed).

Using entries in views

Pages can query the stream in Blade:

@foreach (Streams::entries('packages')->where('enabled', true)->get() as $package)
    <h3>{{ $package->name }}</h3>
@endforeach

The homepage and /addons page include package cards that link to documentation or external repositories.

Adding a catalog entry

  1. Edit streams/packages.json and add an object to the data array.
  2. Set a unique id, name, type, and enabled.
  3. Add composer JSON with name, description, and repository URL if applicable.
  4. Link to /docs/{package}/introduction when package docs exist on this site.

Related