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 Folklore Laravel Package

folklore/laravel-folklore

A Laravel package from folklore that integrates with your app via Composer. It follows standard Laravel package conventions for configuration and setup; see the repository README for installation steps and usage details.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

Assessment reflects v1.1.7. No architectural change in this release; the structural findings below stand.

folklore/laravel-folklore is not a general-purpose library — it is the shared application foundation for sites built by one agency. It bundles four things that would normally be separate decisions:

Layer Contents Coupling cost
Domain core Contracts, Entities, Repositories, JsonDataCast High — dictates how every model, query and JSON column is written
Feature modules Pages/blocks, medias (via folklore/laravel-mediatheque), users + custom repository auth provider High — touches routing, storage and authentication
Third-party glue Customer.io, Google Maps/Places/Drive, PubNub broadcaster, PubSubHubbub Medium — but is where most supply-chain and PII risk sits
Developer tooling make:* generators, view composers, Panneau fields/resources Medium — bakes vendor conventions into scaffolding

The design intent stated in AGENTS.md ("a module a site doesn't use must cost it nothing: no side effects at boot, no heavy mandatory dependency") is the right principle and is still the single most important thing to verify. If it holds, the package is a buffet. If it does not, adopting any one module means inheriting Google, PubNub and Customer.io SDKs. Note the v1.1.7 notes reinforce the modular intent — Google Places and request-helper fixes are scoped to the modules that use them — but they are not evidence that unused modules are free at boot.

Architecturally, the fit is good only for a Laravel app that intends to be a Folklore-shaped app: entity/repository pattern, pages and blocks, mediatheque-backed media. For any other codebase this is an opinionated framework layered on a framework.

Integration feasibility

Feasible, with conditions. v1.1.7 improves two of them:

  • Runtime constraints are current, not legacy. Despite the description calling it a "Laravel 5 package", AGENTS.md specifies PHP ^8.3 and Laravel 11–13. Treat the description as stale metadata and read composer.json as the source of truth. Any estate on Laravel 10 or PHP 8.2 must upgrade first — that is a prerequisite project, not a line item.
  • Guzzle 8 is now supported — on Laravel 13 only. v1.1.7 widens the constraint to ^7.15.2|^8.0.1, closing the highest-probability install blocker for a Laravel 13 estate. The constraint is now asymmetric by design: Laravel 11 and 12 sites stay on Guzzle 7, Laravel 13 sites can move to Guzzle 8. This is a sensible resolution of the framework's own version gate rather than a free choice for us — we cannot "pick" Guzzle 8 on Laravel 12.
  • Security floor raised. The new minimums (7.15.2 / 8.0.1) are pinned deliberately to include the fix for GHSA-v5mv-p594-2x33, which the media download host checks depend on. That is good supply-chain hygiene and worth crediting, but it converts a routine patch bump into a mandatory upgrade for any site locked below those versions. Our dependency floor must be checked against it in Phase 0.
  • Second package to vet. Medias depend on folklore/laravel-mediatheque. That doubles the review surface (storage drivers, image handling, upload validation) and the upgrade surface. Its Guzzle constraint must be verified alongside this one.
  • Auth is the sharp edge. Replacing Laravel's Eloquent user provider with a repository provider is a security-sensitive change touching login, password reset, remember-me and session invalidation. This needs its own threat model and regression suite, not a code review.
  • CI hygiene improved again. v1.1.7 adds lowest-accepted Guzzle 7 and Guzzle 8 runs and prints installed Guzzle versions per job. Running CI against lowest accepted versions is the specific practice that surfaces dependency-floor conflicts early; the maintainers are now doing it for the dependency we flagged as most likely to conflict.
  • Distribution is still the blocker. Zero stars and zero tracked dependents means no community, no public issue history to mine, and no Stack Overflow corpus. Support is a commercial relationship, not an ecosystem.

Technical risk

  1. Vendor lock-in (high, structural). Repositories, entities, JsonDataCast, generators and view composers are load-bearing conventions. Exit cost is a re-implementation project across the whole app, not a dependency swap.
  2. Bus factor (high). Effectively one maintainer group. Roadmap lives in issue #1 of a repo with no external users. If the relationship ends, we inherit maintenance of a package we did not design. Weak positive signal: #57/#58 show the maintainers tracking ecosystem changes (Laravel 13 shipping Guzzle 8) and merging fixes on a useful cadence — evidence of engagement, not of durability.
  3. Dual Guzzle major versions (medium, new). Supporting Guzzle 7 and 8 simultaneously means two error-handling code paths. v1.1.7 already needed version-dependent behaviour in MakesRequests because Guzzle 8 only exposes a response on some exceptions. Expect this fork to be a recurring source of conditional logic, and expect Guzzle 7 to be dropped on the maintainers' schedule, not ours.
  4. Silent behavioural change in request helpers (medium, new). MakesRequests no longer fails on Guzzle request exceptions, and on Laravel 11 requestJson()/requestData() now return a Laravel response where callers may previously have caught a PSR-7 object. The release says Guzzle 7 sites "see no change", but this is exactly the class of change that alters caller-side error handling without a version-major signal. Anyone already on the package should test the exception path, not just the happy path.
  5. Accepted static-analysis debt (medium). phpstan-baseline.neon ships known Larastan errors; the "never add new errors" rule is good governance but the baseline is real debt on day one.
  6. Optional-module leakage (medium, unverified). Whether Google/PubNub/Customer.io sit in require, suggest, or require-dev determines whether "unused" modules are actually free. v1.1.7 does not change this and the notes do not clarify it.
  7. Shipped migrations (medium). src/migrations means schema changes arrive from a dependency. Ordering, rollback and prod-migration review need an explicit process.
  8. Third-party PII (medium). Customer.io and Google Drive integrations need DPA/GDPR and OAuth-scope review before any customer data flows.
  9. Legacy-flavoured modules (low–medium). PubSubHubbub and a PubNub broadcaster are unusual choices versus Reverb/Pusher; check whether they are maintained or vestigial.

Verdict: Conditional, marginally improved. Viable as a foundation if we are deliberately building a Folklore-style application and have a contractual relationship with the maintainers. Not viable as a utility dependency pulled into an existing or non-Folklore codebase. The Laravel 13 install blocker is now cleared and dependency-floor discipline is demonstrably in place; nothing about lock-in, bus factor or support has changed.

Key questions

  • Is folklore/laravel-mediatheque public, maintained, and on the same Laravel 11–13 and Guzzle 7/8 matrix?
  • Are the optional modules (suggest/require-dev) genuinely zero-cost at boot, and is there a test proving it?
  • Who is the named maintainer, what is the SLA, and what happens on relationship exit — source escrow, fork rights, or licence to modify?
  • What is the planned deprecation date for Guzzle 7 support, and will it be tied to Laravel 11/12 EOL or to Guzzle's own?
  • Does the v1.1.7 MakesRequests change alter exception handling for callers already on Laravel 11 + Guzzle 7, or only for Guzzle 8? Which response type (PSR-7 vs Laravel) do we get in each combination?
  • Has the repository auth provider been reviewed for password reset, remember-me, session invalidation and rate limiting?
  • Which migrations does the package own, and how are they versioned against our app migrations in production?
  • What is the documented upgrade path across Laravel majors (11→12→13), and is there an UPGRADE.md?
  • Are translations overridable without forking (lang/vendor publishing)?

Integration Approach

Stack fit

Greenfield Laravel 11–13 on PHP 8.3+, MySQL 8, using a pages/blocks CMS model and mediatheque-backed media: strong fit, low friction. An existing Laravel app with Eloquent models, query scopes and its own auth: poor fit — the repository/entity layer would be a parallel architecture, not a refactor.

Migration path

Do not retrofit. The realistic paths are:

  • Greenfield adoption — the intended use. Lowest risk, highest leverage, and now viable on Laravel 13.
  • Fork-and-own — vendor the package under an internal namespace if the relationship is strategic but not exclusive. Buys continuity at the cost of merge overhead on every upstream fix.
  • Cherry-pick — copy the two or three modules actually needed (e.g. JsonDataCast, view composers) and drop the rest. Rejects the buffet framing but removes most lock-in. Note this forfeits upstream updates, including advisory-driven security floors like the one in v1.1.7.

Compatibility

  • Hard gates: PHP ^8.3, Laravel 11–13. Anything older blocks adoption outright.
  • Guzzle: ^7.15.2|^8.0.1, with Guzzle 8 reachable only under Laravel 13. Verify our lock file already meets the 7.15.2 floor or that the upgrade is scheduled; a security-pinned floor is not negotiable. Run composer why-not guzzlehttp/guzzle 7.15.2 across the full intended dependency set, and repeat for 8.0.1 if we are targeting Laravel 13.
  • Confirm laravel-panneau is only required when the Panneau module is used; CI runs a dedicated job against it (1.3), which suggests it is a soft dependency — validate.
  • Check collision risk: package migrations, translation namespaces, view namespaces and the repository auth provider driver name must not collide with app-level equivalents.
  • Pin to a known version (v1.1.7 or later) in the spike so Guzzle-version-specific behaviour is reproducible; record the installed Guzzle major in test output, as the package's own CI now does.

Sequencing

Phase Work Exit criteria
0. Diligence (1–2 wks) Read composer.json for hard vs optional deps; install into a throwaway Laravel 13 app; run composer test; inventory migrations, translations, config keys, service providers Dependency tree contains no unexpected SDKs; providers are conditional; published config/migration list is complete; Guzzle floor satisfied in the target lock file
1. Feasibility spike (2 wks) Build one vertical slice — a page with blocks and an uploaded media — plus login through the repository provider; exercise a failing external request through MakesRequests Slice passes our own tests; auth threat model reviewed and signed off; exception-handling behaviour documented for both Guzzle majors
2. Pilot (1 project, 4–6 wks) One greenfield site, or one isolated module in an existing app (e.g. JsonDataCast only) No production incidents attributable to the package; upgrade to next Laravel patch is routine; Guzzle 7→8 transition rehearsed if on Laravel 13
3. Standardise Document conventions, add generators to our templates, decide fork-vs-depend Runbook, on-call notes, and an owner named in the platform team
4. Expand Second and third sites Time-to-first-feature measurably lower than baseline

Gate between Phase 1 and 2: if the auth provider cannot be adopted with confidence, adopt the domain core only and keep Laravel's native auth.

Operational Impact

Maintenance

Ongoing cost is dominated by lock-in, not by patch frequency. v1.1.7 is a low-risk patch with no upgrade steps for Guzzle 7 sites, which is the right shape. Budget for:

  • An owner in the platform team responsible for version pinning and Laravel major upgrades, coordinated with the maintainers' release cadence.
  • Security-floor tracking (new). The Guzzle minimums are now advisory-driven. We need to know when our pin drops below a patched floor — through Dependabot/Renovate or a scheduled composer outdated review — rather than discovering it in a package release note.
  • Guzzle-major divergence watch. While the package supports both majors, our test matrix should reflect the one we actually run. If we are on Laravel 13, test on Guzzle 8 and treat Guzzle 7 as untested-by-us.
  • A standing rule that the package's conventions (entities, repositories, JsonDataCast) are enforced in review — otherwise the codebase drifts into a hybrid that is worse than either approach.
  • Pint and Larastan run in our CI too, so formatting and static-analysis regressions surface on our side before they reach a PR.
  • Baseline file maintenance: when we upgrade Laravel, expect unmatched-baseline noise and the Testbench cache-clear dance documented in AGENTS.md.

Support

There is no community support channel. Zero stars, zero dependents, no public issue corpus. Support is whatever the maintainer relationship provides — get it in writing: response time, security-patch commitment, notice period for breaking changes, and a commitment to ship composer constraints that reflect patched dependency versions. Their own rule ("avoid breaking changes: deprecate before removing") is good intent but unenforceable without a contract or a fork right. v1.1.7 is a reasonable data point on responsiveness; one release is not an SLA.

Secondary support obligations we absorb: folklore/laravel-mediatheque, plus the Google, PubNub and Customer.io SDKs.

Scaling

  • Query behaviour: repositories hide Eloquent. N+1s and missing indexes move out of sight of the developer writing the controller. Add query-count assertions in tests for hot paths.
  • JSON columns: JsonDataCast encourages schemaless JSON. Convenient early, painful at volume — no indexes, no constraints, migration-by-backfill. Cap its use to genuinely variable attributes.
  • Medias: image processing and storage are the first thing to saturate under load. The v1.1.7 advisory touches the media download host checks, which is a reminder that media handling is network-facing — confirm whether processing is queued or synchronous before launch, and load-test uploads specifically.
  • Broadcasting: PubNub is an external fan-out dependency with per-message pricing and its own rate limits. If realtime is on the roadmap, compare against Reverb/Pusher before committing.

Failure modes

Failure Blast radius Mitigation
Maintainer stops releasing Whole app pinned to an ageing Laravel Fork right in contract; vendor the package internally
Laravel major upgrade unsupported Blocks platform upgrade across all adopting sites Track their CI matrix as our earliest signal; keep a fork branch current
Guzzle floor bump breaks our lock file Blocks install or forces a wider dependency upgrade mid-sprint Advisory-driven floor review on a schedule; pin and test before a package release forces it
Guzzle 7 support dropped while we are on Laravel 12 Package upgrade becomes gated on a Laravel major upgrade we have not scheduled Ask for the Guzzle 7 EOL plan now; keep our position tied to Laravel 11/12 EOL dates, not theirs
Request-helper error-handling regression Silent failures or uncaught exceptions in Google/media calls Contract tests on the exception path for both Guzzle majors; wrap each integration in an internal adapter
repository auth provider regression Login outage / auth bypass Own regression suite around the provider; canary deploy; fallback to native provider
Package migration conflicts in prod Failed deploy or partial schema state Review package migrations like app migrations; test rollback on a prod-like DB
Optional module boot side effects Latency or failures in sites not using the module Explicit test asserting providers are not registered when the module is disabled
Third-party API change (Google/Customer.io/PubNub) Feature-level outage, possible PII spill Wrap each in an internal adapter; key rotation and quota alerts

Ramp-up

Non-trivial and under-documented for humans. AGENTS.md is written for AI coding agents and contributors — it is excellent on workflow, CI and conventions, but it does not teach a new engineer why entities differ from models or how pages and blocks compose. Expect:

  • 1–2 weeks for a mid-level Laravel engineer to be productive in the entity/repository idiom.
  • A written internal onboarding doc as a Phase 3 deliverable — do not assume upstream docs will appear.
  • Code review load concentrated on the one or two engineers who have internalised the conventions; plan for that bottleneck explicitly.
  • Dependency-version judgement is part of the ramp-up, not just application code: engineers need to know why the Guzzle major matters and when it is safe to move.
  • Agent-assisted development is well supported (the repo is optimised for it), which partially offsets the ramp-up — but only for engineers who can already tell when the generated code is wrong.
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.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels