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
- Edit
streams/packages.jsonand add an object to thedataarray. - Set a unique
id,name,type, andenabled. - Add
composerJSON withname,description, and repository URL if applicable. - Link to
/docs/{package}/introductionwhen package docs exist on this site.
Related
- Addons — Composer addon discovery in Core
- Core addons reference
- Architecture