clean/phpdoc-md
clean/phpdoc-md generates clean Markdown documentation from PHP source code and PHPDoc comments. It parses classes, methods, properties, and docblocks, then outputs readable Markdown suitable for READMEs, wikis, or static docs. Easy to run and integrate into build or CI workflows for up-to-date API...
Architecture fit. clean/phpdoc-md is a standalone, dev-time CLI utility that parses PHPDoc blocks and emits Markdown. It is not a runtime library, service provider, or framework component, so it does not enter the application's request path or container. For a Laravel codebase this positions it as a build/documentation toolchain dependency (require-dev) rather than an architectural commitment — low coupling, low blast radius, and trivially reversible. The output is static Markdown, which composes cleanly with existing docs pipelines (repo /docs, GitHub Pages, MkDocs, Docusaurus, internal wikis). The trade-off is that it is a "second documentation system" alongside any existing phpDocumentor/Scribe/IDE-based approach, so the real architectural question is not integration difficulty but whether a Markdown-first API reference is a gap worth filling at all.
Integration feasibility. High on mechanics, low on confidence. Adoption is a single Composer require plus a wrapper script; a TPM can scope this as a one-sprint spike with a hard go/no-go gate. The friction points are ordinary for a 44-star, single-maintainer package: unknown repository provenance (the registry reports unknown), no release since 2022-11-19, and an implicit dependency on nikic/php-parser or similar AST tooling whose major versions move quickly. Laravel projects are unusually sensitive to transitive parser conflicts because PHPStan, Pint, Rector, and IDE helpers all pull the same packages — a version pin collision here can block upgrades elsewhere in the toolchain.
Technical risk. The dominant risk is abandonment, not correctness. Three years without a release means no support for PHP 8.3/8.4 syntax, readonly properties, enums, first-class callables, or property hooks, and no fixes for parser regressions. Secondary risks: documentation drift (generated output committed but not regenerated), silent partial output (parsers typically skip or mangle unparseable constructs rather than failing loudly, producing docs that look complete but aren't), and the classic single-maintainer bus factor. The 2.02 composite score with an opportunity sub-score of 1.52 reads as "underloved niche utility" — the opportunity signal suggests whitespace in the Markdown-docs niche rather than a package on an upward trajectory. A 44-star footprint also means thin public evidence of edge-case handling; expect to be the first to hit your particular failures.
Key questions for the vendor/owner.
Verdict. Approve as a time-boxed spike in a non-critical repo; do not approve as a load-bearing documentation system without a fork-and-own decision and a named internal owner.
Stack fit. Clean fit at the edges of the stack: composer require --dev clean/phpdoc-md, a thin Composer script or Artisan command wrapping the binary, output to a gitignored or committed /docs/api directory. It should never be a production dependency, never autoloaded at runtime, and never referenced from application code. Keep it in the same tier as Pint and PHPStan — developer tooling with no deploy artifact impact.
Migration path. There is no migration in the traditional sense; this is additive. The pragmatic path is:
app/Services or a single package) and diff the output against hand-written docs to judge quality.If the package proves unusable, the exit is deleting a dev dependency and the generated folder — among the cheapest reversals available.
Compatibility. Gate on a lockfile resolution test before anything else: install into a throwaway branch of the actual monorepo/service and run composer update --dry-run to confirm no parser or PHP constraint conflict with PHPStan, Rector, Laravel Pint, or laravel/framework. Verify behaviour on the oldest and newest PHP versions the team supports. For Laravel 11/12 on PHP 8.3+, assume the package will need patching until proven otherwise. Treat "installs cleanly on our real dependency graph" as the single most informative compatibility signal available given the package's age.
Sequencing.
Do not sequence this ahead of any planned PHP or Laravel major upgrade; land it after, so a parser conflict cannot be mistaken for an upgrade blocker.
Maintenance. Expect to own this. A package with no release in three years and an unresolvable repository is effectively source-available rather than maintained. Budget a named owner and a realistic trickle of ongoing effort — pinning parser versions, patching new-syntax handling, and regenerating docs — or accept it as a disposable tool that gets ripped out when it breaks. The worst outcome is a committed, unreviewed docs folder that nobody regenerates: documentation debt disguised as automation.
Support. No vendor, no SLA, no guaranteed upstream fixes. Support is community-optional at 44 stars, which in practice means self-support. Mitigate by vendoring a fork under an internal namespace if the tool proves valuable, ensuring at least two engineers understand the codebase, and recording the decision in an ADR with explicit revisit triggers (e.g. "re-evaluate on PHP 8.5 or first parser failure").
Scaling. Comfortable within its niche: static generation is linear in codebase size and runs offline. For large Laravel monorepos, watch memory ceilings and generation time — AST-based generators on tens of thousands of files can be slow or memory-hungry, and there is no evidence of optimisation work in recent years. Scope generation per-package or per-namespace rather than repo-wide if runtime becomes a problem. Scaling of output quality is the harder constraint: the more Laravel-idiomatic the code (facades, magic properties, attributes), the less the generated docs will tell you.
Failure modes.
Ramp-up. Very low for consumers (Markdown is universally readable) and low for operators (one command, one CI step). The genuine ramp-up cost is the judgement work: deciding what the docs are for, who reads them, and whether auto-generated API reference beats curated narrative docs for this audience. For most Laravel teams the honest answer is that curated guides and IDE tooling already cover 80% of the need, and this package competes for the remaining slice. Ramp-up is hours; the decision to keep it running is the expensive part.
How can I help you explore Laravel packages today?