forci/static-data-bundle
Forci StaticDataBundle helps Symfony applications manage static and reference data through reusable entities, configurable data sets, and simple CRUD workflows. Keep lookup values centralized and maintainable without duplicating code.
Architecture fit
forci/static-data-bundle is a Symfony bundle backed by Doctrine, not a Laravel package. The evidence in the developer notes is decisive: a *Bundle class registered in config/bundles.php, a DependencyInjection/Configuration.php config tree, Resources/config/services.xml with tagged services, src/Command/ as the primary public API, and static reference rows modeled as Doctrine entities synced into a database. That is a full framework lifecycle — kernel boot, compiler passes, container config tree, Doctrine entity mapping, console commands — none of which Laravel provides. A Laravel application would have to replace every layer: ServiceProvider for the extension, config/*.php for the tree, Eloquent or query-builder models plus migrations for the Doctrine entities, and Artisan commands for the sync CLI. By the time that mapping is complete, essentially none of the original package remains — only the data schema and the idea of idempotent reference-data sync. The capability (define reference data once, sync it deterministically, read it consistently) is legitimately valuable for statuses, categories, country/currency lists, and enum-like lookups. The artifact is not the vehicle for it in a Laravel stack. Note this also revises the "no database dependency required" line in the marketing description — the implementation surface implies Doctrine-backed persistence, which is a materially larger integration footprint than a plain array provider.
Integration feasibility
Manual and poor value-for-effort. A credible integration requires: a custom service provider replacing the DI extension; hand-translating the config tree into Laravel config; deciding whether to pull doctrine/orm (Laravel does not ship Doctrine ORM by default — it ships Illuminate's own ORM plus selected Symfony components); rewriting entity mappings as migrations and Eloquent models or raw tables; and reimplementing each console command as an Artisan command with equivalent idempotency semantics. Discovery cost dominates: 0 stars, 0 dependents, no surfaced README, so there is no usage corpus, no issue history, no Stack Overflow footprint, and no way to confirm sync semantics (does it upsert? does it delete rows removed upstream? is it transactional?) without reading the source end to end. Fund this as a 1–2 day spike with a written deliverable, not as an integration ticket.
Technical risk High, and concentrated in provenance and semantics rather than code quality:
NOASSERTION — a hard gate. No grant of rights is established, and embedded data compilations can carry upstream terms independent of the code license. Legal must resolve before any code or data is vendored.composer.json must be inspected for doctrine/orm, Symfony version floors, and transitive constraints before anything approaches a production dependency.Key questions
Stack fit
Poor as a drop-in; moderate as a reference pattern. The clean seams are (a) the data artifact — the reference rows themselves, and (b) the sync workflow shape — a deterministic, re-runnable command that reconciles a canonical data definition with a persisted table. Both are cheap to reimplement natively and expensive to import: a Laravel-native equivalent is a migration plus an Artisan reference-data:sync command reading a versioned PHP/JSON file in resources/data/, wrapped in a transaction with explicit upsert-and-prune behavior. That yields identical business value with zero framework mismatch. If the host project were actually Symfony + Doctrine, fit improves sharply — normal bundles.php registration, a config block, and the shipped commands — but that is not the brief.
Migration path Do not migrate the bundle; mine it and discard it. Sequence: (1) resolve the license — blocking gate, nothing enters the repository until closed; (2) timeboxed source audit producing a written inventory of the data schema, the public command API, sync semantics, and declared dependencies; (3) extract the data artifact into an application-owned file with a recorded provenance/version stamp; (4) diff against any reference data already in the app to establish overlap and conflicts, and validate against a second independent source where accuracy matters; (5) implement the minimal native sync command and read-side accessor; (6) record the decision not to depend on the package. This converts an unmaintainable, license-ambiguous third-party dependency into license-clean, in-house data with a known schema and known sync behavior — a strictly better operating position and one the team can actually support.
Compatibility
Unverified and likely the decisive blocker. Doctrine ORM is not a Laravel default, so requiring this package drags in doctrine/orm and its Symfony constraints, risking collisions with the framework's pinned Symfony components. If any exploration is warranted, require it dev-only first and run composer why-not / composer outdated to surface constraint collisions before touching production dependencies. Assume no SemVer guarantee; pin an exact commit if any dependency survives past the spike.
Sequencing Phase 0 — license determination (blocking; legal owns it, TPM tracks it as a critical-path dependency). Phase 1 — source audit spike, 1–2 engineer-days, written deliverable: schema, command semantics, dependency inventory. Phase 2 — extract and validate data. Phase 3 — native sync command plus accessor. Phase 4 — no package dependency remains. Define exit criteria up front: terminate if Phase 0 fails, if the data proves non-unique, or if the sync semantics cannot be reconstructed from source. The composite score of 0 and opportunity score of 17.34 already justify treating this as a bounded evaluation rather than a roadmap item.
Maintenance Effectively unmaintained upstream. With no visible release cadence and zero dependents, upstream fixes should be assumed never to arrive — any defect becomes ours. Forking is the only sustainable posture, which means owning a divergent copy of a Symfony bundle running inside Laravel: the highest-friction maintenance shape available. Extraction is strictly cheaper to own, because it removes the framework adapter layer that would generate most of the bug surface.
Support No vendor, no community, no escalation path. Supportability depends entirely on whether extraction succeeds: an owned data artifact plus a small accessor is supportable by any PHP developer on the team; a wrapped Symfony bundle in Laravel is supportable only by whoever performed the original mapping — a single-point-of-failure pattern to avoid by design. Onboarding documentation for the extracted layer is trivially cheap to write and should be a Phase 3 deliverable.
Scaling Reference data is read-mostly and scales well if it is served from a cached, in-process structure. The architectural risk is per-request cost: if lookups resolve through container calls or hit the database on every request, that becomes a silent tax across the whole application. Bind a pre-built singleton or cache the compiled lookup table; keep the data out of the database unless joins are genuinely required. Volumes are small (lookup lists), so no database-backed scaling case is indicated.
Failure modes
Ramp-up Deceptively high for an apparently simple package. There is no documentation to onboard against, so cost is front-loaded into source reading — realistically 1–2 engineer-days for the audit alone — plus legal turnaround on the license, which sits on the critical path and outside engineering's control. Post-extraction, ramp-up for the resulting in-house data layer is under an hour for any team member. Recommendation: do not adopt as a dependency. Run a timeboxed extraction spike gated on license resolution, and proceed only if the data proves uniquely valuable and independently verifiable.
How can I help you explore Laravel packages today?