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

Voyager Api Auth Laravel Package

joy/voyager-api-auth

Adds API authentication to Laravel's Voyager admin panel. Protects Voyager admin routes and resources for API clients, SPAs, and mobile apps, extending built-in admin auth to JSON requests so you can avoid building separate authentication plumbing.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged by this release. joy/voyager-api-auth remains a satellite module in the Joy Voyager ecosystem — a maintained fork/extension of the Voyager Laravel admin panel, not a standalone auth library. It assumes you already run Joy Voyager as your admin surface and want token-based REST access to the same user/role/permission model (Voyager's BREAD-derived permissions). If our architecture is "Laravel app + Voyager admin + separate SPA/mobile client," conceptual fit is good: one user table, one permission source, one admin UI. If we are not on Joy Voyager specifically, fit is poor — the module's value is almost entirely in its coupling to that host package.

Integration feasibility. Mechanically simple and unchanged: Composer require, service provider, published config, a handful of routes under an API prefix. Realistic spike effort remains 1–2 days for a mid-level Laravel engineer. The blocking question is still the version constraint matrix, and v3.2.39 does not answer it — the release notes are a bare version string with no changelog, no compatibility statement, and no migration notes. We cannot confirm from the release that laravel/framework or php constraints have moved, so the "does its pin intersect with ours" question must still be resolved by reading composer.json at the tag.

Technical risk. Net risk is roughly flat: one data point improved, one new concern introduced.

Risk Severity Why
Adoption signal High Still 8 stars, 0 dependents, single maintainer. Effectively unvalidated in production by anyone we can point to.
Security ownership High Auth is a security-critical path. Still no evidence of a disclosure policy, security review, or external audit. We inherit full liability for token issuance, TTL, revocation, and permission mapping correctness.
Dependency pinning High A hard pin on a low-traffic package can block Laravel/PHP upgrades and, worse, block emergency CVE patches. Unchanged by a patch release.
Release transparency (new) High v3.2.39 ships with an empty changelog. For an auth package this is a material finding: we cannot triage whether a given release contains a security fix, a behavior change to token TTL/revocation, or nothing at all. Every bump becomes a code-diff exercise we perform ourselves.
Maintenance velocity (revised) Medium (was High) A second observed release, numbered 3.2.39, is evidence the maintainer is active and shipping patches. This downgrades "abandoned satellite" from a live concern to a background one. It does not upgrade the adoption signal — activity is not the same as independent validation.

Two readings of 3.2.39 are equally consistent with the data: a maintainer doing responsive patch work, or a maintainer shipping frequently without a changelog discipline that would let us tell the difference. The opportunity: 12.8 score still reflects low upside relative to build-it-yourself.

Key questions to resolve before any commitment.

  • (New) What changed between the release we assessed and v3.2.39? We must diff the tags ourselves — assume no upstream answer will be provided.
  • (New) Is there a stated semver policy? If yes, a patch bump within 3.2.x should carry no breaking changes and no framework-constraint movement, which is mildly reassuring. If there is no policy, "3.2.39" is decoration and we should assume nothing.
  • Which auth mechanism — Sanctum, Passport, or a custom JWT implementation? Custom JWT with hand-rolled refresh/revocation is a materially different risk profile than Sanctum.
  • What are the exact composer.json constraints for laravel/framework, php, and the parent joy-voyager package at tag v3.2.39? Does it support Laravel 11/12?
  • How are Voyager BREAD permissions mapped to API route authorization? Single middleware enforcing it, or per-controller?
  • Does it ship rate limiting, token revocation, refresh rotation, and credential-stuffing guards out of the box, or is that our job?
  • Test coverage and CI status — are there integration tests we can read as a spec?
  • Is the maintainer responsive to issues/PRs, and is there a documented support expectation?

Integration Approach

Stack fit. Unchanged. Adopt only if the answer to "are we on Joy Voyager?" is yes — in that case this module is the path of least resistance, closing the gap between an admin-panel-centric permission model and a headless client without us re-implementing BREAD-aware authorization.

If we are on stock Voyager or no Voyager at all, treat this repository as a reference implementation, not a dependency. Its route definitions, middleware, and permission checks give us a spec for a first-party Sanctum implementation of roughly 300–500 lines that we own outright with no pinning risk and no diff-review tax.

Migration path. Two viable tracks, unchanged:

  1. Adopt-and-wrap. Require the package, pin it in composer.lock, and place an internal AuthService interface in front of every endpoint we expose. Application code calls our interface; the package sits behind it. Preserves the option to swap to first-party Sanctum without touching callers.
  2. Vendor-fork. Fork into our VCS, add CI and tests, take ownership of the patch cadence. With an empty-changelog upstream, this is the more honest framing of adoption — we become the maintainer and the release-notes author.

Track 1 remains the right default. The empty changelog strengthens the case for escalating to Track 2 if a security review surfaces issues we must patch immediately, or if we find ourselves diffing tags more than a couple of times a year.

Compatibility. Verify by installing tag v3.2.39 into a throwaway branch against our current composer.lock, not a greenfield skeleton. A greenfield install tells us nothing. Confirm it resolves alongside our existing guards, session driver, and any Passport/Sanctum usage; guard collisions are a common and confusing failure. Since the release notes assert nothing about framework support, treat compatibility as entirely unverified.

Sequencing.

  1. Provenance check (0.5 day, new): pull tags, diff the previously-assessed release against v3.2.39, and read the committed composer.json at the tag. Record what actually changed. If the diff is large and undocumented, escalate the risk conversation before spending spike time.
  2. Spike (2 days): install in a branch, enumerate endpoints, read the authorization middleware end to end.
  3. Security review (3–5 days): threat-model token lifecycle, permission mapping, and rate limiting. Gate here — do not proceed on a "looks fine."
  4. Decision gate: adopt-and-wrap vs. build-on-Sanctum, informed by the diff, spike, and review.
  5. Instrumentation: structured auth logs (issuance, refresh, denial, revocation) before any traffic.
  6. Contract tests: pin expected request/response shapes so a future swap — or a silent upstream patch — is detectable.
  7. Staged rollout: feature-flagged, internal client first, then external.

Ongoing upgrade discipline (new): every upstream bump requires a diff review plus a contract-test run before merge. Add "reads upstream diff" to the PR template for this dependency so the ritual survives staff turnover.

Operational Impact

Maintenance. Assume we own this code. The v3.2.39 release slightly reduces the probability of dormancy but leaves the cost model essentially intact: roughly 3–5 engineer-days per year for patch review, plus a new recurring per-release cost of diffing and validating undocumented changes. The real exposure is unchanged and is the one to plan for — a security advisory in Laravel or a transitive dependency where the pin prevents us from patching. That is a same-day outage-class event, not a backlog item.

Support. No vendor, no SLA, no paid tier. Support is GitHub issues plus our own on-call. The empty v3.2.39 changelog is a small but concrete demonstration of the support posture: releases arrive without explanation, so questions about what changed are ours to answer. Keep the stakeholder sentence explicit: "this component has no external support contract and no changelog."

Scaling. Unchanged. Token issuance is stateless and horizontal — not the bottleneck. Pressure points are the token/user store (DB or Redis) and unauthenticated endpoint abuse. Require per-IP and per-account rate limiting at the edge or middleware layer, and a defined token TTL + refresh policy before launch. Verify the package does not do a synchronous DB permission lookup on every request in a way that makes the permission table a hot shard.

Failure modes.

  • Silent behavior change in a patch release (new, elevated): with no changelog, a PATCH bump can alter token TTL, revocation semantics, or middleware ordering without notice. Contract tests and per-bump diff review are the only mitigation.
  • Token store unavailable → total auth outage across all API clients. Needs a degradation story and alerting.
  • Permission drift → a BREAD change in the admin UI silently widens or narrows API access. The most insidious failure: it fails open or closed without an error. Mitigate with tests that assert the permission matrix.
  • Composer resolution deadlock → blocks framework upgrades, accumulates CVE debt quietly.
  • Guard collision → session and token auth interfering in ways that are hard to reproduce.
  • Maintainer abandonment → probability lowered by v3.2.39, still not zero, and still no leading indicator other than release silence.

Ramp-up. Reading the codebase is still half a day for a competent Laravel engineer; that is not the cost. The cost is security ownership — someone must be able to answer "is our token revocation correct?" and be right, and now also "what changed in this patch bump?" and be right. Assign a named owner before adoption, or the component becomes an unowned security surface, which remains the worst outcome for an 8-star auth package with an empty changelog.

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.
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin