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

ironshark/laravel-extendable

Add extensibility to Laravel Eloquent models: dynamically attach extra attributes, methods and relationships at runtime without new migrations, letting packages and apps customise core models cleanly and safely.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This package addresses a well-known product need: letting tenants/admins define custom fields on Eloquent models without per-customer schema migrations. The trait-based approach keeps the extension point at the model layer, which is the right seam — it does not impose a new persistence abstraction or service container contract. The tradeoff is that a trait is only a mechanism, not a platform: field definition storage, validation, permissions, admin UI, and queryability are all left to the consuming application. A TPM should treat this as a low-level building block, not a feature.

Integration feasibility. Surface area is small: composer require, publish config/migrations if present, apply the trait to target models, define the backing column(s). Realistically a 1–2 day spike to validate on one model. The blocker is not effort but evidence — with 24 stars, 0 dependents, and a 0.4 score, there is no adoption signal to lean on.

Technical risk. High relative to the value delivered:

  • Maintenance signal is weak. Score 0.4, zero dependents, small star count. Assume single-maintainer / bus factor of one until proven otherwise.
  • Version drift. Laravel majors move fast; confirm the composer.json constraint and whether CI covers current LTS.
  • Storage strategy unknown. JSON column vs side table has very different query and index characteristics. This determines whether custom fields are filterable/sortable at scale or write-only.
  • Validation and mass-assignment gaps. Dynamically defined fields bypass $fillable and $casts unless the package handles it; that is a security and data-integrity surface.
  • Portability. JSON querying differs across MySQL, Postgres, and SQLite — relevant if you support multiple drivers or run SQLite in tests.

Key questions to answer before committing:

  1. Which Laravel and PHP versions are supported, and is that enforced in CI?
  2. What is the persistence model — JSON column, EAV side table, or both? Can custom fields be indexed and queried efficiently?
  3. How are custom fields validated, cast, and protected from mass assignment?
  4. How does it behave under multi-tenancy — are field definitions scoped per tenant?
  5. Last commit date, open issue count, average response time, test coverage.
  6. Does it integrate cleanly with API resources, Nova/Filament, and model events?
  7. What happens to orphaned field data when a field definition is deleted?

Integration Approach

Stack fit. Assumes a conventional Laravel app on MySQL/Postgres with Eloquent models. The package covers the data layer only; plan for your own admin UI (Filament/Nova), validation rules, permissions, and export/reporting hooks. Budget for those explicitly — they often exceed the cost of the package itself.

Migration path. Do not let the trait leak across the codebase. Introduce an internal abstraction (a base model or a wrapper trait) so the vendor trait is referenced in one place. If the package is abandoned, you swap the implementation without touching feature code. Maintain a documented fallback: homegrown JSON-column implementation, or a more established alternative such as spatie/laravel-schemaless-attributes.

Compatibility. Pin the exact version in composer.json, verify framework constraints, and run the full suite in CI against your Laravel version. Consider vendoring via a VCS repository entry or an internal fork so upstream deletion cannot break your build.

Sequencing.

  1. Timeboxed spike on a non-critical model; validate the seven questions above.
  2. Decide: adopt, fork-and-own, or build in-house (~1–2 weeks for a minimal version).
  3. Introduce the internal wrapper abstraction.
  4. Data model review — column type, indexing strategy, growth limits, PII policy for free-form fields.
  5. Admin UI and validation layer.
  6. Staged rollout behind a feature flag on one model, then expand.

Operational Impact

Maintenance. Ownership burden is high relative to code size. Expect to fork if the package is stale — that converts a dependency into an internal asset with its own upkeep. Assign a named owner and add regression tests around the trait's critical paths (persistence, casting, validation, deletion).

Support. Community-only. No SLA, no security advisory channel, no guaranteed CVE response. For anything touching customer data or PII, that is a governance gap you must accept explicitly or mitigate by forking.

Scaling. Custom fields stored in JSON complicate indexing; filtering and sorting on high-cardinality custom fields will degrade as row counts grow. If product requirements include "filter by any custom field," plan for generated columns, side tables, or a search index — none of which this package provides. Watch for unbounded field proliferation: without governance, tenants create dozens of fields and query performance becomes unpredictable.

Failure modes.

  • Package abandoned or deleted upstream (mitigate: fork/vendor).
  • Silent data loss when field definitions are removed or renamed.
  • Schema drift between definition records and stored JSON.
  • Validation bypass allowing malformed or oversized values into production.
  • PII accumulating in untyped, unindexed, unaudited custom fields.
  • Query-plan regressions surfacing only at scale, after rollout.

Ramp-up. Low for engineers fluent in Eloquent — hours, not weeks. The nontrivial cost is product and design alignment: custom fields become visible product surface (admin UI, permissions, exports, reporting, data retention). Write a short design decision record covering field lifecycle, tenancy scoping, and the fork-or-build contingency before the first migration ships.

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.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
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