evitenic/robusta-table
evitenic/robusta-table is a Laravel package for building robust, feature-rich data tables with minimal code. It supports sorting, filtering, pagination, and customizable columns, making it easy to display and manage tabular data in PHP applications.
composer.json and src/ and look for a Filament plugin class (implements Plugin, make(), ->plugin() registration) versus a plain service provider with a view namespace. That single check determines your entire setup path — do it before writing a line of table code.evitenic/robusta-table, the release commits are under ahmdsb/robusta-table, and the changelog link points at the latter. Run composer show / check Packagist before assuming the vendor prefix. Get the exact name from the composer.json on the default branch of the repo you're actually pulling from, then pin it.composer require it, then read the provider's boot()/register(): it tells you the view namespace, config key, asset tags, and whether anything auto-registers into a Filament panel. Publish whatever tags exist (vendor:publish --tag=...) and read the resulting config file first — for a package this small, the config is the documentation."evitenic/robusta-table": "^3.0" (or the exact 3.0.6). With 3 stars and a single-maintainer history, floating to * or dev-main is how you end up debugging someone else's half-finished refactor on a Friday.orders with columns for ID, customer, total, created date — sortable, searchable, paginated, with a footer sum on total. This exercises the source query, column definitions, and the calculation path (the one thing touched in v3.0.6) in a single screen, so you learn the whole surface area before committing to it across the app.query() / getQuery() / whatever the base class defines). When those two leak into each other, sorting and pagination start disagreeing with what's on screen.Order::query()->with('customer')) and the array/collection source only for small, pre-computed sets (dashboard summaries, report snapshots). Trying to paginate or sort an array source in-memory silently degrades — it "works" in dev with 50 rows and falls over in production with 50,000.selectRaw('SUM(line_total) as order_total'), the column's name/data key must be order_total. A mismatch produces a blank column and a sort link that quietly does nothing — no exception, no log line.vendor/) is what makes future upgrades a composer update instead of a rewrite.fix: table calculation. Drop-in from v3.0.5, no API change — but the implication is that any footer totals your app displayed before the upgrade may have been wrong. After bumping, reconcile every reporting screen against a raw SUM() in tinker, with and without filters/search applied. Don't trust pre-upgrade numbers in screenshots, tickets, or exported reports.with() and expose real (or selectRaw-aliased) columns for anything the user can sort on.evitenic in the repo slug, ahmdsb in the commit URLs, "Filament Package" in the metadata, "Laravel package for Blade tables" in the description. Any one of these being stale means your composer require line, your issue report, or your mental model is wrong. Verify against the actual composer.json.php artisan config:clear. After an upgrade where the table renders blank or unstyled: php artisan view:clear, then re-publish assets, then check whether the view namespace changed. That sequence resolves most "it broke after update" reports.dd() the builder inside the source method and look at the SQL the package appends. One dump beats an hour of reading vendor code — and with a package this small, you will end up reading vendor code eventually, so learn the shape early.vendor/ disappears on the next composer update, and with a package at this maturity level you can't count on upstream accepting a PR promptly.How can I help you explore Laravel packages today?