Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Swagger Bundle Laravel Package

stfalcon-studio/swagger-bundle

A Symfony bundle that integrates swagger-php to generate OpenAPI/Swagger documentation from PHP annotations, helping keep API specs in sync with your code and exposing interactive docs for your endpoints.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Status: Updated for v2.0.0 (breaking). Prior assessment was empty; this is the baseline, written against the v2.0.0 release rather than v1.1.1.

Architecture fit

  • Package identity: stfalcon-studio/SwaggerBundle is a Symfony bundle that wires zircote/swagger-php into a Symfony application (DI extension, routes/controllers, config tree). It is not a Laravel service provider package. Its architectural home is a Symfony kernel, not an Eloquent/HTTP-kernel Laravel app.
  • For our Laravel estate the functional equivalent is darkaonline/l5-swagger (also backed by swagger-php). Choosing this package means either (a) we are running Symfony components or a Symfony sub-application inside our platform, or (b) we are adopting it as a reference/upstream for annotation conventions while using a different runtime integration.
  • Consequently, v2.0.0's headline change — migration to Symfony 8.0 component APIs — is only directly relevant to us if we actually instantiate the bundle in a Symfony kernel. If we are consuming it as a library/reference, the change is mostly a signal about upstream maintenance health.

Integration feasibility

  • The v2.0.0 change is a hard dependency-floor move, not a feature: "Switch to Symfony 8.0." Realistically this means symfony/* constraints at ^8.0, which in turn implies a minimum PHP of 8.4 and removal of Symfony 6.x/7.x support from the constraint range.
  • This collides with Laravel's own dependency graph. Laravel pins Symfony components (symfony/http-foundation, symfony/console, symfony/process, symfony/routing, etc.). While Laravel's framework ships Symfony 7.x, a package requiring symfony/*: ^8.0 will be unsatisfiable alongside laravel/framework — Composer will refuse to resolve, and forcing it (--with-all-dependencies, constraint overrides, replace/provide tricks) is not a supportable production posture.
  • Practical read: v2.0.0 is effectively not installable in a current Laravel application. It becomes installable when our Laravel major version itself moves to Symfony 8 components (expected with the next Laravel major, not the current one). That is a calendar dependency, not an engineering one.
  • Feasibility of staying on v1.1.1 in the interim is high if v1.1.1 remains on the supported branch — the changelog does not say. If v1.1.1 is the last Symfony 6/7-compatible line, we are now maintaining a fork-in-waiting.

Technical risk

  • Dependency-lock deadlock (high): a symfony/*: ^8.0 floor in a Laravel application is unresolvable until the framework major catches up. Any transitive dependency that adopts this line early will hard-block our upgrade path in the other direction too.
  • Thin disclosure (medium-high): the release note is a single line plus an automated changelog link. There is no migration guide, no statement of what breaks, no indication of whether swagger-php was also bumped, and no note on PHP floor, config schema changes, or removed bundle configuration keys. A major version with this little documentation is a governance problem regardless of the code quality.
  • Ecosystem coupling (medium): the bundle's value is entirely mediated by swagger-php and Symfony's DI/config component APIs. A Symfony 8 move likely touches bundle extension/config loading, which is exactly the surface a Laravel-side bridge would depend on.
  • Support window ambiguity (medium): unclear whether v1.x receives security fixes. If not, we are choosing between an unpatched-but-installable version and an installable-only-later version.
  • Low direct blast radius (positive): Swagger generation is developer tooling / documentation pipeline, not a request-path runtime dependency. Even a hard break degrades our docs build, not production traffic. This caps the severity compared with a runtime library.

Key questions

  1. What is the exact composer.json requirement set in v2.0.0 — Symfony constraint range, PHP floor, and swagger-php version?
  2. Does v2.0.0 drop Symfony 6/7, or merely add 8.0 to the allowed range? (Wide-range support would make this a non-event; a hard floor makes it a blocker.)
  3. Is v1.1.1 still supported with security/bug fixes, and for how long? Is there a stated LTS or EOL policy?
  4. Are Laravel applications an intended consumer at all, or is this strictly Symfony? If the latter, we should be tracking l5-swagger instead and treat this repo as a signal only.
  5. What Symfony component APIs changed in the bundle's touched files, and does any of it leak into the public config surface our bridge would consume?
  6. Which Laravel major is projected to ship Symfony 8 components, and is there a published timeline we can sequence against?

Integration Approach

Stack fit

  • Poor-to-conditional for a Laravel-first stack. There is no service provider, no Laravel config publishing, no Artisan integration. Any adoption requires a deliberate adapter layer we would own.
  • Good fit only where we genuinely run Symfony kernels — a Symfony microservice, a legacy Symfony app inside the estate, or a PHP monorepo where a shared OpenAPI generation step spans both frameworks.
  • If our actual need is "OpenAPI generation for Laravel apps," the correct answer is l5-swagger (swagger-php at the same layer), and this bundle is out of scope. That decision should be made explicitly and recorded, not left implicit.

Migration path

  • Do not attempt v1.1.1 → v2.0.0 in any Laravel application now. There is no migration to perform, because there is no valid install target.
  • Correct path for Laravel consumers: pin ^1.1 (or the Laravel-native alternative), document the pin with a reason and an expiry, and open a tracked work item gated on "our Laravel major ships Symfony 8."
  • For any Symfony service we own: evaluate the bump on a branch, run the Swagger/OpenAPI generation diff against the currently committed spec, and require byte-identical (or intentionally-diffed) output before merge.

Compatibility

  • Compatibility is entirely determined by Composer resolution. Run composer why-not stfalcon-studio/swagger-bundle 2.0.0 against each application to get a definitive, per-repo answer rather than reasoning about it — this converts an ambiguous risk into a concrete conflict list.
  • Verify PHP version floor against our CI matrix. If v2.0.0 requires PHP 8.4 and any consumer is on 8.2/8.3, that alone blocks it even in a Symfony context.
  • Check whether swagger-php was bumped in lockstep; if so, annotation attribute behavior and output formatting may shift, which affects snapshot tests.

Sequencing

  1. Now: record the decision. Pin to the last Symfony-7-compatible version in every Laravel repo; add a Dependabot/Renovate hold rule with a comment referencing this assessment so the bump is blocked deliberately rather than accidentally.
  2. Now: confirm whether the v1.x line remains maintained. If not, schedule a fork-or-replace evaluation within one quarter.
  3. Next: if the bundle is genuinely needed, scope the Laravel adapter (service provider + config translation) as its own deliverable with its own test suite; do not fold it into an unrelated feature branch.
  4. Gated on Laravel's Symfony-8 major: re-evaluate v2.x, run the spec-diff check, and lift the hold. Re-evaluate the adapter at that point too — the Symfony 8 config API changes may invalidate it.
  5. Ongoing: treat single-line major release notes as a recurring process gap; add a "major version requires a migration note" check to our dependency intake.

Operational Impact

Maintenance

  • Low ongoing effort if we are not using it: the pin plus a hold rule is a few minutes of setup and effectively zero after that.
  • Non-trivial if we adopt it: we own a bespoke Laravel↔Symfony adapter, which means we absorb both frameworks' upgrade churn through our own code. Every Laravel major and every Symfony major becomes a two-sided migration for us.
  • Upstream bus factor and responsiveness are unverified from a one-line changelog. The version jump from 1.1.1 to 2.0.0 also suggests infrequent, batched releases — fine for a stable docs tool, risky if we depend on timely fixes.

Support

  • No vendor support; community/GitHub only. Our internal answer to "who fixes this at 2am" must be a named owner or the answer is "nobody, and it only affects docs CI."
  • If v1.x is unmaintained, we are on an unsupported line with no patch path. That is acceptable only because the blast radius is documentation generation; it would not be acceptable for a runtime library.
  • Support burden concentrates at upgrade boundaries, not steady state — plan capacity there rather than assuming continuous cost.

Scaling

  • Documentation/spec generation is build-time and off the request path. It does not scale with traffic and adds no runtime latency budget.
  • Scale risk is organizational: one shared generator serving many repos means a single upstream break can invalidate CI across the estate simultaneously. Prefer per-repo generation over a centralized pipeline for a tool with this support profile.
  • Spec size growth is the only real technical scaling vector (large APIs generating thousands of paths); that is a swagger-php characteristic, unchanged by this release.

Failure modes

  • Silent version drift: an automated dependency PR bumps the constraint, Composer fails, someone "fixes" it by loosening the Laravel constraint. This is the highest-likelihood failure and it degrades the whole app's dependency integrity to unblock a docs tool. Mitigate with a hard hold rule and CODEOWNERS on composer.json.
  • Forced resolution: --ignore-platform-reqs or constraint overrides to make v2.0.0 install. Produces an untested framework/component mix; symptoms surface far from the cause.
  • Stale docs, unnoticed: if the generator breaks, OpenAPI output silently stops updating and consumers of that spec (client SDK generation, contract tests, partner integrations) build against a stale contract. Add a freshness check or a CI failure on unchanged-output-with-changed-schema.
  • Fork rot: if we fork v1.x to keep it alive, the fork diverges quietly and future re-convergence on v2.x becomes a rewrite. Time-box any fork and record the exit condition up front.
  • Ramp-up trap: a new engineer sees SwaggerBundle in composer.json and reasonably assumes it is the standard Laravel choice. Document the decision and the pin rationale in the repo, not just in this assessment.

Ramp-up

  • For engineers not using it: near zero — it is not in the request path and should not appear in onboarding for Laravel work.
  • For anyone maintaining a Symfony-side integration: moderate. Symfony bundle configuration, DI extension conventions, and swagger-php attribute syntax are each small but non-obvious; budget roughly a day to first productive change, more if an adapter layer exists.
  • The adapter layer is the real ramp-up cost and should carry its own README, tests, and an explicit note that it exists solely because the upstream package targets Symfony.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager