zareismail/markable
Markable is a Laravel package for adding marks such as likes, bookmarks, or favorites to Eloquent models through polymorphic relationships. It provides simple traits and query helpers to attach, remove, and retrieve marks across your application.
Architecture fit. The package operates at the Eloquent query-builder layer, extending model query construction with reusable scopes. This is a low-coupling position in a Laravel codebase: it does not touch the service container, HTTP kernel, queue, or event pipeline, and it can be adopted model-by-model rather than as an application-wide dependency. For a TPM this is the favourable case — a bounded, reversible dependency with a blast radius limited to the models that opt in.
Integration feasibility. Integration is a single composer require plus (presumably) Laravel package auto-discovery. There is no schema change, no queue worker, no scheduled job, and no external service. The realistic effort is measured in hours, not sprints, and the rollback is a composer remove plus reverting the model changes.
Technical risk. The v1.0.0 notes are small in volume but carry two signals that matter:
Secondary risks: unknown maintainer/bus factor, unstated Laravel and PHP version support matrix, and potential scope-name collisions with existing local scopes on host models.
Key questions.
illuminate/* constraints in composer.json?Stack fit. Targets the standard Laravel + Eloquent stack with Composer. No infrastructural prerequisites. The only meaningful fit question is whether the host application's Laravel version falls inside the package's constraint range — a v1.0.0 release with freshly added versioning should be verified rather than assumed.
Migration path. Greenfield adoption is trivial. For teams that previously copy-pasted equivalent scope logic into app/Models or a trait, the migration is a substitution: delete the local implementation, add the package scope, and diff the generated SQL before and after to confirm equivalence. For teams already using the package pre-1.0, pin to ^1.0 explicitly and audit any query path that relied on the scope before the fix.
Compatibility. Composer versioning now exists, so consumers get a real constraint to pin against. Pin to ^1.0 (not *, not dev-master), commit the lockfile, and let patch releases flow only through the normal dependency-update cadence. Because the package sits on illuminate/database, a Laravel major upgrade is the most likely future break — budget a compatibility check at each framework upgrade.
Sequencing.
Maintenance. Surface area is small and the code is unlikely to require frequent attention. The real maintenance cost is version-watching: a freshly versioned package with a single observable release has no track record of timely framework-compatibility updates. Assign an owner to watch releases and re-verify at each Laravel upgrade.
Support. No stated support model, SLA, or security disclosure process visible in the release notes. For internal tooling or non-critical read paths this is acceptable; for anything on a regulated or revenue-critical surface, the bus factor should be documented as a known accepted risk or mitigated by vendoring the source.
Scaling. Scopes compile into SQL, so there is no runtime interpretation overhead — scaling characteristics are entirely determined by the SQL produced. Two things to watch: (a) scope predicates must be index-aligned, since a scope that filters on an unindexed column will degrade linearly with table growth; (b) scopes that touch relationships can introduce N+1 patterns or unwanted joins if eager loading is not managed at the call site. Neither is a package defect, but both need review at adoption time.
Failure modes.
illuminate/database range that blocks a framework upgrade. Detectable at composer update, non-silent, low impact.Ramp-up. For a developer already fluent in Eloquent, ramp-up is a few hours: read the scope definitions, write the SQL assertions, adopt on one model. For a developer new to Eloquent scopes, add roughly a day to understand query-scope composition and the ordering/precedence rules. No specialist knowledge, no new infrastructure, no on-call implications.
How can I help you explore Laravel packages today?