tomatophp/filament-cms-api
A REST API layer for TomatoPHP Filament CMS, exposing pages, posts, media, and content endpoints with token authentication, configurable routes, and resources for headless Laravel applications.
Architecture fit
This release positions the package as a thin, read-only JSON delivery layer over tomatophp/filament-cms. Architecturally that is a clean separation: Filament remains the authoring/admin surface, and this package exposes a headless read API for decoupled frontends (Next.js/Nuxt, mobile apps, static site generation, partner syndication). It is not a general-purpose CMS API — there are no write endpoints, no draft/preview access, no per-user authorization scoping, and no webhook/event surface. Teams expecting content authoring via API will be disappointed; teams wanting a cached, public read model will find the fit good.
The resource/serializer layer being configurable is the most valuable architectural property: it lets us bind our own Eloquent models and API Resources without forking, which materially reduces the long-term maintenance surface.
Integration feasibility
Low code-level effort, moderate platform-level effort. The integration is essentially: composer require, publish config, set route prefix/middleware/page size, optionally override models and resources. No migrations, no schema ownership, no data duplication. The real cost sits in the prerequisites — we must already be on tomatophp/filament-cms ^5.0 and Laravel 12/13.
Technical risk
api/pages routes are removed. The release notes state the pages controller "never shipped," which strongly suggests the removed routes were dead code — but "never shipped" must be verified against our installed tree, not assumed. Any consumer calling /api/pages will now 404.for, menu, root, and trend are non-obvious contract terms; their exact behavior determines whether frontend teams can build nav and landing pages without custom endpoints.Key questions
/api/pages, the FAQ transformer, or the ticket transformer? (Verification task, not an assumption.)for, menu, root, and trend — and who owns that documentation??locale= fall back per-field or per-record, and what is the behavior on a missing translation?Stack fit
Compatible only with a modern Laravel footprint: Laravel 12/13, PHP 8.3/8.4 (per tested matrix), Filament v5 via tomatophp/filament-cms ^5.0. If our application is on Laravel 10/11 or Filament v3/v4, this package is not adoptable without a framework-first program of work.
Migration path
There is no incremental path from a hypothetical v4 install: v5 is gated on the Filament v5 ecosystem bump. For a greenfield integration, the path is trivial (install, configure, ship). For an existing install, sequence as: (1) upgrade filament-cms to ^5.0 and validate the admin surface, (2) upgrade this package, (3) run the endpoint test suite locally, (4) diff the exposed route list before/after and reconcile any consumers of removed routes.
Compatibility work to do before committing
filament-cms version, since the two must move together.php artisan route:list) as a regression baseline so future minor releases can be diffed cheaply.Sequencing
Maintenance Ongoing cost is dominated by the shared-fate dependency on the TomatoPHP Filament v5 line. Every CMS major bump is our major bump. Budget for one coordinated upgrade per major cycle, plus a lightweight review of each minor release (the v5.0.0 note shows the vendor does remove surface area, so minors should not be assumed inert). Our own customization surface — custom models and API Resources — is where regressions will actually originate, so those overrides should be covered by our tests.
Support Single-vendor, community-scale package. Expect to self-serve most issues and to own the API contract we present to our own consumers. Mitigation: keep our overrides thin and concentrated, so the fallback (write a small controller over the CMS models ourselves) remains a realistic exit rather than a rewrite. That exit option is the main thing making this dependency acceptable.
Scaling
Favorable by construction: read-only, paginated, cacheable. Because only published posts and active categories are exposed, responses are effectively immutable between publishes, which makes HTTP caching and CDN offload highly effective. Two things to watch: (a) translation joins under ?locale= can produce N+1 or heavy joins at volume — measure with realistic content, not fixtures; (b) the filter set (search especially) likely maps to unindexed LIKE queries. Validate query plans against production-sized tables before committing to a traffic assumption.
Failure modes
/api/pages consumer — highest-probability incident for this specific release.Ramp-up Genuinely fast for a Laravel-fluent engineer: the package is small, the config is the documentation, and there is no novel paradigm to learn. Estimate roughly half a day to first working endpoint and one to two days to a production-ready integration including middleware, caching, and contract tests — conditional on the Laravel 12/13 and Filament v5 prerequisites already being satisfied. If they are not, ramp-up is not the constraint; the platform upgrade is, and should be estimated and staffed as its own initiative with this package as a downstream beneficiary rather than a driver.
How can I help you explore Laravel packages today?