mll-lab/laravel-graphql-voyager
Laravel GraphQL Voyager brings the interactive GraphQL Voyager interface to Laravel, making it easy to visualize and explore your GraphQL schema in the browser. With simple configuration and routes, it helps teams inspect types, relationships, and API structure during development.
Architecture fit: This is a thin developer-tooling integration, not a business-logic dependency. The package registers a route that serves the GraphQL Voyager single-page app and points it at a configurable GraphQL endpoint; it does not touch schema definitions, resolvers, or the GraphQL execution path. That means the blast radius of adopting or dropping it is confined to whatever route it mounts. For a TPM, the relevant architectural question is not "does this fit the framework" but "does this fit our developer-experience and documentation surface, and is the exposure it creates intentional." The 2.3.0 release is a compatibility widening only (Laravel 11 support added); it does not change the integration contract, so any prior decision to use it stands and the work is re-validating where it can be deployed.
Integration feasibility: High, particularly for teams already on Lighthouse — the same maintainer (mll-lab) owns both, so version alignment and schema-shape assumptions are low-friction. The mechanics are standard Laravel: package auto-discovery, publishable config and assets, a route with middleware. The material change in 2.3.0 is that Laravel 11 is now a declared target, removing this package as a blocker in a platform upgrade. Feasibility is conditional on two things the release notes do not establish: whether the Composer constraint is additive (^10|^11) or narrowing (^11 only), and whether the route and asset-publishing behavior was actually exercised under Laravel 11's slim skeleton.
Technical risk:
^11, that is a de facto breaking change shipped as a minor release, and Laravel 10 consumers who run a broad composer update break on next deploy.Key questions:
require constraint? Is the change additive or narrowing?web, or a configurable gate? Who owns changing it?Stack fit: Laravel 10 and 11 on PHP 8.2+, with the strongest fit for Lighthouse-backed GraphQL APIs. Compatibility should be verified against the runtime require block specifically, and dev-only tooling (PHPUnit 11, Collision, static analysis) confirmed as confined to require-dev so it does not leak into the application's resolution graph.
Migration path: For existing Laravel 10 consumers, 2.3.0 should be a no-op composer update — no config changes, no migrations, no application code. For Laravel 11 teams previously blocked by this dependency, treat 2.3.0 as first-time adoption, not an upgrade, and budget time for the exposure and introspection decisions rather than the install. If the constraint narrowed to ^11, hold at 2.2.x and sequence the framework upgrade first rather than pinning both.
Compatibility: Three checks worth the TPM's attention. First, route-cache and config-cache behavior — a published config plus config:cache is where package route regressions surface. Second, asset publishing and serving under the host application's CSP; an SPA pulling its bundle from a published path or a CDN can trip content-security policy in a hardened environment. Third, sub-path deployment — if the app is served under a prefix or behind a proxy, confirm the Voyager route and its asset URLs resolve.
Sequencing:
composer.json diff on the 2.3.0 tag; classify additive vs. narrowing. This single step determines everything downstream.config:cache and route:cache to catch boot-time regressions.Maintenance: Near zero in steady state — one minor version, no new config keys, no schema or data migrations. The meaningful maintenance signal is cadence and longevity: a single-maintainer package at five stars with the last release in April 2024 should be recorded as a standing dependency-health metric. That is tolerable for a dev-only convenience tool; it becomes a documented risk if a customer-facing documentation portal comes to depend on it.
Support: MIT, community-supported, no vendor SLA. There is no commercial backstop, so escalation path is "open an issue and wait." Treat it as best-effort. Do not let it become the only way anyone can understand the schema — export or generate supplementary documentation so knowledge does not live solely in an unsupported viewer.
Scaling: No throughput or capacity implications — the package serves static assets and the graph query runs against your existing GraphQL endpoint. The one scaling-adjacent concern is that a naive introspection query against a large schema can be expensive server-side; repeated unauthenticated hits on a production-exposed viewer are a low-effort amplification vector. This reinforces authenticating the route rather than reasoning about load.
Failure modes:
illuminate/*, the whole application's upgrade stalls and is discovered at the lockfile, late.composer update on Laravel 10 lands on a version that dropped Laravel 10, breaking deploys on the next release.Ramp-up: Very low for engineers — an afternoon to install, publish config and assets, mount the route behind middleware, and verify rendering. The non-obvious cost is the decision work around exposure and introspection, which should be owned by a TPM and security reviewer, not left to whoever runs composer require. Budget half a day for the technical setup and a short review cycle for the exposure policy, and document the environment gate so it is not silently reverted by a future config change.
How can I help you explore Laravel packages today?