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

Laravel Graphql Voyager Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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:

  • Schema exposure as the top risk, not the framework bump. Voyager renders the full type graph of your API — every type, field, argument, and relationship. That is effectively an architecture map of your attack surface. If the route is mounted in production without middleware, the default posture is "public schema explorer." This is a configuration and governance decision that must be made explicitly, not inherited from the package default.
  • Introspection dependency. Voyager works by running a GraphQL introspection query against the endpoint. Production GraphQL hardening commonly disables introspection (a standard Lighthouse configuration). Teams that disable introspection will find the viewer silently blank or erroring — a failure that looks like a package bug but is a deliberate security setting. This is the most common "it worked in staging" trap.
  • Constraint ambiguity. "Added: Support Laravel 11" is silent on removals. If the constraint narrowed to ^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.
  • Unverified support. No released evidence of a CI job running the suite against Laravel 11 on PHP 8.2+. Declared support without a green matrix entry is a common source of route/provider boot failures under the slim skeleton.
  • Maintainer concentration. Five stars, a single small maintainer org, and a last release in April 2024. Acceptable for a nice-to-have dev tool; not acceptable as a load-bearing part of an externally committed documentation deliverable without a fallback.

Key questions:

  1. Does v2.3.0 retain Laravel 9/10 in the require constraint? Is the change additive or narrowing?
  2. Is introspection enabled in every environment where this route will be mounted, and if not, is the viewer expected to work at all?
  3. What is the default middleware on the Voyager route as shipped — open, web, or a configurable gate? Who owns changing it?
  4. Will this be enabled in production, or restricted to local/staging? What enforces that boundary?
  5. Is there a CI matrix job for Laravel 11 / PHP 8.2 and 8.3, or is support declaration-only?
  6. What is the maintainer's historical lag on framework majors, and is there a stated deprecation or support policy?

Integration Approach

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:

  1. Read the composer.json diff on the 2.3.0 tag; classify additive vs. narrowing. This single step determines everything downstream.
  2. Confirm a passing Laravel 11 CI job exists. If not, downgrade the support claim from "tested" to "declared" in your risk register.
  3. Decide the exposure policy before writing code: which environments, which middleware, which roles. Route this through security if production is in scope.
  4. Install in a non-production environment with introspection enabled; verify the graph renders and the endpoint config points where intended.
  5. Publish config and assets, then exercise config:cache and route:cache to catch boot-time regressions.
  6. Promote to staging behind the actual middleware; smoke test as an unprivileged user to prove the gate holds.
  7. Roll to production only after step 6 passes, and only if the exposure decision was "yes, authenticated."

Operational Impact

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:

  • Unintended public schema disclosure. The route mounts with permissive defaults and ships to production, exposing the complete API surface to anyone who finds the path. Highest-severity, lowest-effort-to-prevent failure.
  • Silent blank viewer. Introspection disabled in the environment, viewer loads but renders nothing — misdiagnosed as a bug and debugged for hours.
  • Resolution deadlock. If the constraint conflicts with another package pinning illuminate/*, the whole application's upgrade stalls and is discovered at the lockfile, late.
  • Accidental constraint jump. A broad composer update on Laravel 10 lands on a version that dropped Laravel 10, breaking deploys on the next release.
  • Asset/CSP breakage. Published assets blocked by content-security policy or misresolved under a path prefix, producing a page that loads but cannot fetch its bundle.
  • Abandonment. Maintainer stops tracking framework majors; the package becomes the reason a future Laravel upgrade slips.

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.

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
cgv/localized-resource