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

Datatable Laravel Package

openskill/datatable

OpenSkill Datatable is a Laravel package for building server-side data tables from Eloquent or query builder sources, with column formatting, search, sorting, filtering, pagination, and AJAX-ready responses for flexible admin interfaces.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. openskill/datatable is a controller/edge-layer adapter, not a domain component. It translates the query-string protocol emitted by client-side table plugins (draw, start, length, order[], search, columns[]) into an Eloquent/Query Builder query and returns the JSON envelope the plugin expects. That places it cleanly outside your domain model: coupling risk is low provided you isolate it. The "modular" claim is its main architectural idea — a driver/strategy layer that lets one server-side contract serve multiple front-end table plugins. That abstraction is genuinely useful as a design pattern, but it is also the part most likely to have drifted from current plugin protocols.

Integration feasibility. Composer-level integration is trivial in principle (add dependency, register the service provider and facade alias manually — the package predates Laravel 5.5 package auto-discovery). In practice, feasibility collapses to a single question: what Laravel major are you on? The package targets Laravel 5.0–5.2 and PHP 5.5/5.6-era idioms. Every Laravel version it supports has been end-of-life for years (5.1 LTS security support ended mid-2018). On Laravel 9/10/11 this is not a port; it is a rewrite with the package as a spec.

Technical risk. High and concentrated in three areas:

  • Abandonment. Last release 2016-01-18, ~52 stars, no evidence of a maintained branch. You are adopting a dependency whose upstream is effectively frozen, and inheriting the full security-patch burden.
  • Framework decay. Removed helpers (str_*, array_get, Input::), facade aliasing changes, and PHP 7+/8 type and deprecation churn will break it, often silently.
  • Query-construction surface. Any package that accepts client-supplied column names and turns them into orderBy/whereRaw deserves a security review before it touches production. Verify identifier whitelisting and parameter binding.

Upside risk is genuinely low — MIT license, small surface area, no exotic transitive dependencies implied, and the fallback (write your own adapter) is a few hundred lines.

Key questions to answer before any decision:

  1. What Laravel and PHP versions are in scope, and is any of that stack still receiving security support?
  2. Which front-end table plugins must be supported? Do their current versions still speak the protocol this package emits?
  3. Does it handle relations/joins in server-side search and sort without N+1 or Cartesian blowups?
  4. How are authorization and per-tenant row scoping applied — can we inject a base query builder, and does it respect it in the count query?
  5. Is there a fork we can own, or a maintainer willing to accept a modern-Laravel PR?
  6. What is the documented test coverage, and does it include the SQL-injection surface?

Integration Approach

Stack fit. Adopt only if you are already running Laravel 5.x and have a concrete, short-lived need. On Laravel 6+ the answer is no — the effort to modernize exceeds the effort to implement the request/response contract directly against DataTables' documented server-side protocol.

Migration path. Two viable plays:

  • Reference, not dependency. Spend a day reading the source to extract (a) the request-parameter schema, (b) the response envelope, (c) the driver abstraction. Then build a thin internal adapter — roughly 200–400 LOC — on your current framework version with your own authorization hooks and tests. You keep the good idea and none of the rot.
  • Vendor and fork. If you have an existing Laravel 5 app already using it, pull the source in-repo (or under a private VCS fork), pin the PHP constraint, and treat it as first-party code. This is the minimum responsible posture for any abandoned dependency.

Compatibility work to verify explicitly: Composer illuminate/* constraints; whether the service provider is auto-discovered or requires config/app.php registration; any reliance on removed global helpers or the Input facade; and a hard pin on the front-end plugin version, since protocol drift between DataTables 1.9/1.10/1.11+ is the most likely silent failure.

Sequencing.

  1. Spike (1–2 days): stand the package up against a representative table — many columns, a join, a filterable relation — on your actual stack.
  2. Contract capture: document the request/response schema in writing. This is the artifact that survives regardless of the build-vs-adopt outcome.
  3. Anti-corruption wrapper: put it behind your own TableRequest/TableResponse DTOs and a single controller trait so no feature code imports the package namespace.
  4. Parity tests: golden-file tests of the JSON envelope and query output, so a swap or upstream change is detectable.
  5. Decide and swap: replace behind the wrapper. The wrapper makes this a non-event.

Operational Impact

Maintenance. Effectively zero upstream. Every bug, CVE-adjacent dependency bump, and framework upgrade becomes your ticket. Budget a standing allowance for a fork you own, not a "set and forget" dependency. The opportunity score here (3.39) reflects real utility in the pattern and near-zero utility in the artifact.

Support. 52 stars and a decade of silence means no vendor, no SLA, no issue triage, no community memory. Internal onboarding documentation must be authored from scratch; a new engineer's search will not surface answers.

Scaling. Server-side processing is the correct pattern for large datasets, so the architectural direction is sound — but the implementation is where it breaks. Watch for: a full COUNT(*) on every request (expensive on large filtered sets), OFFSET pagination degrading linearly on deep pages (keyset pagination is the fix if users sort deep), N+1 queries when sorting or searching on relation columns, and unindexed sort/filter columns. Validate every table with EXPLAIN against production-shaped data volumes before sign-off, and add indexes for each sortable/filterable column.

Failure modes. Ranked by likelihood and blast radius:

  • Composer drift — an unpinned constraint pulls a version that breaks silently on deploy.
  • SQL injection / identifier leakage — client-supplied column names reaching orderBy/whereRaw; also leaks columns (e.g. password_hash) a user shouldn't sort or search on. Whitelist columns server-side, always.
  • Protocol skew — a front-end plugin upgrade changes parameter names; the table renders empty with no error.
  • Authorization gaps — a scoped base query applied to rows but not to the count/aggregate query, yielding row-count disclosure across tenants.
  • Framework upgrade breakage — removed helpers fail at runtime, not compile time.
  • Unbounded requests — no cap on length; a client can request 100k rows and take down the DB.

Ramp-up. For an experienced Laravel developer, half a day to a day to be productive — the concept is familiar and the API is thin. The hidden cost is negative knowledge: engineers waste cycles debugging an abandoned dependency assuming it is maintained. That is a recurring tax, not a one-time one.

Recommendation. Treat openskill/datatable as a design reference, not a dependency. Extract the protocol contract and driver abstraction, implement a small in-house adapter on your supported framework version, and keep it behind an anti-corruption layer so the underlying implementation remains swappable. Approve as a runtime dependency only as a short-lived, vendored, pinned fork within a Laravel 5 application already on an active exit plan.

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.
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
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource