cms-lab
Roadmap
What recently landed, what is planned next, and the research-stage ideas under consideration. Each item links to its GitHub issue. Priorities shift with real feedback, so this is a direction, not a commitment.
Now
Recently shipped and on the latest main.
- Custom rule APIchecks.custom for project-specific invariants, with declarative asserts and a functional escape hatch.
- Payload CMS adapter@cms-lab/payload fetches and normalizes Payload REST content for the same route, field, SEO, and image checks.
- Duplicate route detectionCMS-ROUTE-DUPLICATE flags two published documents that resolve to the same path; only one wins at runtime.
- Canonical, OG, and JSON-LD checksOpt-in route-level SEO: canonical link validation, Open Graph / X (Twitter) card fields, and JSON-LD structured data.
- Localization completenesschecks.localization flags content groups missing a published translation in a configured locale.
- Status-aware relationshipsCMS-RELATIONSHIP-UNPUBLISHED flags a published document whose relationships resolve only to drafts.
- Soft-404 detectionFlags 2xx responses whose body looks like a not-found page via checks.routes.soft404.
- Baseline and compareAccept current diagnostics as a baseline and diff two scan reports, so a first run only surfaces new drift.
Next
Planned and scoped, not yet built.
- Parallel CMS document fetchFetch collections concurrently with a bounded pool to speed up scans of large multi-collection catalogs.
- Streaming scan for large catalogsYield diagnostics as they are produced instead of buffering the full document set in memory.
- Watch mode for local developmentcms-lab watch re-runs the scan as content and config change during local dev.
Later / research
Worth doing once the design and real-world need are clearer.
- Schema-to-code drift detectionCompare CMS schema against the fields the app reads, to catch renamed or removed fields before they break a page.
- Content-scoped visual regressionCatch content changes that visually break a route without changing its status code.
- Synthetic content fuzzingGenerate edge-case content (empty, oversized, missing relations) to surface fragile rendering paths.
Shipped history
The full release history lives in CHANGELOG.md. Recent releases added relationship checks, grouped diagnostic summaries, expanded secret redaction, and the GitHub Action.
Suggest something
Have a check or adapter you need? Open a discussion or an issue. Real use cases move items up this list. See the docs to get started.