Ecosystem
This document explains how the SERIXA ecosystem is organized in a single Git repository, and how it can split into independent Composer packages later without refactoring public APIs or namespaces.
The production Composer package remains serixa/framework (framework/). Everything else depends on it.
| Path | Role |
|---|---|
framework/ | Core UI framework (Serixa\) — runtime only |
packages/cli | Official CLI (serixa/cli) — scaffolding & DX |
packages/* | Optional packages (icons, admin, charts, enterprise rbac/…, …) |
docs/ecosystem-roadmap.md | Phases 1–12 product roadmap (post-v1.0) |
starters/* | Starter kit skeletons |
playground/ | Manual demos |
tools/ | Build, release, benchmark, scripts |
docs/ | Ecosystem + framework documentation |
validation/ | Real-app validation fixtures from pre-1.0 audits |
.github/ | CI workflows |
Local development uses Composer path repositories — not Packagist.
Root (composer.json):
framework, packages/, starters/.test, qa, …) delegate to framework/ via --working-dir=framework.framework/composer.json.Packages / starters:
"repositories": [
{
"type": "path",
"url": "../../framework",
"options": { "symlink": true }
}
],
"require": {
"serixa/framework": "^0.11"
}Avoid generating nested apps inside framework/ with path repos that point back at the framework tree — Composer junctions can recurse through nested vendor/ folders. Prefer siblings: packages/, starters/, or directories outside the clone. See troubleshooting.md.
composer.json, README, LICENSE, CHANGELOG, empty src/ / tests/ / docs/ / CI stub.serixa/framework constraint).| Artifact | Versioning |
|---|---|
serixa/framework | SemVer in framework/CHANGELOG.md + git tags (v0.11.0, …) |
| Monorepo chore (layout only) | Patch tags such as v0.11.1 may annotate repo structure without changing framework APIs |
| Packages | Independent SemVer once implemented; Unreleased until first release |
| Starters | Not published as libraries; versioned with the monorepo until extracted |
Public framework APIs stay frozen across this restructure: namespaces, widget contracts, and CLI command names do not change because of folder moves.
For packages/charts (example):
git subtree split / history filter / fresh repo with copied tree — team choice.composer.json name remains serixa/charts."serixa/charts": "^1.0".packages/charts/** paths.Same pattern for framework/ itself if the ecosystem repo later becomes docs-only.
| Before | After |
|---|---|
/src | /framework/src |
/tests | /framework/tests |
/bin | /framework/bin |
Root composer.json = framework | Root = meta; framework/composer.json = package |
composer qa at root | Root delegates to framework/ |
Application code using Serixa\ via Composer continues to work: only the package root path changed inside this monorepo.
# Clone once
git clone <repo> SERIXA && cd SERIXA
# Install framework deps (also triggered by root post-install)
composer install
# Day-to-day framework work
cd framework
composer qa
php bin/serixa version
# Or from root
composer qaframework/**, keep APIs stable, update framework/CHANGELOG.md.packages/{name}/** until implementation is scheduled.Root workflow runs framework QA on every PR.
Path-filtered workflows under each packages/*/ .github/workflows/ (and root jobs for packages/starters) are prepared so packages and starters can gain real test jobs independently later — without publishing to Packagist yet.