mrbulkinaleksey/api-doc-bundle
A Laravel/PHP API documentation bundle that helps organize endpoint reference pages and serve them from your application. It offers a simple self-hosted way to keep API docs close to your codebase, suitable for small projects and internal services.
Architecture fit — primary blocker. Despite being filed under "Laravel/PHP package," this repository is a fork of nelmio/NelmioApiDocBundle, a Symfony bundle. It ships a Bundle subclass, an extension class, and a DIC-driven config tree, and it is designed to be registered in config/bundles.php and wired into the Symfony kernel. Laravel has no bundle/kernel registration model, no service container tag system matching Symfony's, and no Resources/config convention. There is no adapter, no service provider shim, and no evidence of Laravel-specific work in the fork. The integration feasibility for a Laravel application is effectively zero without a rewrite. For a Symfony application the package is technically installable but functionally redundant against upstream.
Integration feasibility. Composer install from a VCS repository is mechanically possible (repositories: {type: vcs}), but the package exposes no Packagist identity, has zero dependents, and therefore has never been exercised outside its author's machine. Even in a Symfony context, adopting a fork requires a documented divergence rationale — none is present. The fork's value proposition over upstream nelmio/api-doc-bundle is unstated, which for a TPM means the adoption cost is paid with no corresponding benefit.
Technical risk — high and unmitigated.
| Risk | Severity | Rationale |
|---|---|---|
| Abandonment | Critical | Zero stars, zero dependents, single maintainer, no release since 2023-05-26. No bus-factor mitigation. |
| Security patching gap | Critical | Forks do not receive upstream CVEs. Any advisory against nelmio/api-doc-bundle or its transitive deps (e.g. zircote/swagger-php, symfony/*) will not be backported here. |
| Framework mismatch | High | Symfony bundle semantics do not map to Laravel's container; a custom bridge would become your code to own and test. |
| Annotation-based parsing | High | The package's documented model is docblock annotations. PHP 8 attributes and doctrine/annotations deprecation (EOL for annotation reading in modern Symfony) make this generation of the tooling a dead end. |
| Silent divergence | Medium | Without a tracked upstream remote and merge cadence, the fork drifts; you cannot reason about its correctness against a known-good baseline. |
Key questions to force before any decision.
nelmio/api-doc-bundle at the last common commit — is there a diff worth owning?dedoc/scramble, knuckleswtf/scribe, or darkaonline/l5-swagger? Any of these delivers first-class Laravel support today.Recommendation: no-go for adoption. Classify as an evaluation artifact only. The low opportunity score (28.36) is consistent with the evidence: this is a personal mirror with no adoption surface.
Stack fit. Two branches, and the TPM decision differs for each:
dedoc/scramble (attribute/reflection-driven, zero-annotation) or knuckleswtf/scribe (Laravel-native, generates OpenAPI plus human-readable docs), or darkaonline/l5-swagger if the org is already standardized on swagger-php annotations.nelmio/api-doc-bundle, not this fork. Same API surface, live maintenance.Migration path (if a team insists on the fork). Do not add it as a normal dependency. Vendor it behind an internal package (acme/api-docs) that pins the VCS commit, so the fork can be swapped for upstream or a replacement without touching application code. Record the diff against upstream in the internal package README; that diff is the entire justification and should be reviewed at each upgrade.
Compatibility checklist to run in a spike, not in production.
composer.json constraint, and whether the constraint allows the runtime you actually deploy.symfony/framework-bundle, symfony/config, symfony/dependency-injection) — forks age out of the support window fast.doctrine/annotations presence and version; on PHP 8.2+ this pulls deprecation noise into every build.Sequencing. (1) Spike, 3–5 days, timeboxed, one engineer, on a throwaway branch — confirm the framework question and produce a sample spec diffed against the incumbent tool's output. (2) If the spike clears, wrap in the internal package and run it in shadow mode alongside the existing documentation source in CI for one release cycle. (3) Cut over only after the shadow diff is empty or fully explained. (4) Gate the dependency with Dependabot/Renovate plus a quarterly upstream-diff review; if upstream diverges by more than an agreed threshold, escalate as a re-evaluation trigger.
Maintenance. The real cost is not install, it is ownership. A zero-dependent fork means your team is the maintainer. Budget: PHP/Symfony minor-version compatibility work each cycle, spec-format upkeep as OpenAPI evolves, and a permanent line item to re-diff against upstream or migrate off. That is a recurring tax paid for functionality available free from maintained projects.
Support. No community, no issue triage, no security feed, no Stack Overflow corpus. Internal engineers cannot search their way out of a parser bug. Escalation path terminates at one individual with no SLA. For any system on a regulated or customer-facing surface, this fails standard third-party-risk review on the "actively maintained" criterion.
Scaling. Doc generation is a build-time concern, not a runtime one — cost is CI minutes and cache-warm latency, which is manageable. The scaling risk is organizational, not computational: one team's bespoke fork becomes an undeclared platform dependency when a second team copies it, and you inherit N copies of an unmaintained parser with N divergent config dialects.
Failure modes to instrument.
symfony/* or swagger-php. Mitigation: SCA scan (Composer Audit) in CI and a documented exception process; expect to hit this within 12 months.Ramp-up. For a Laravel team: high friction, low transferability. Bundle configuration, DIC tags, and annotation semantics are Symfony idioms; the knowledge gained does not compound into anything reusable, and it is knowledge the team must carry because no external documentation or community exists. For a Symfony team: near-zero ramp-up, but also near-zero reason to choose this fork over upstream — the familiarity argument cuts toward the maintained package. Estimate 1–2 days for a competent Symfony engineer to reproduce the spike, and 3–5 days plus a standing maintenance allocation for a Laravel engineer to discover the bridge is not worth building.
Bottom line for the roadmap. Treat this package as evidence gathering, not as a work item. Close it with a one-paragraph ADR: framework mismatch, no maintenance signal, no dependents, superseded by maintained alternatives in both ecosystems. Reopen only if the organization standardizes on Symfony and the fork demonstrates a documented, maintained divergence from upstream.
How can I help you explore Laravel packages today?