tranquil-tools/laravel-vue-table-builder

A VueJS/Inertia TableBuilder package for Laravel

Maintainers

Package info

github.com/ComfyCodersBV/laravel-vue-table-builder

Homepage

pkg:composer/tranquil-tools/laravel-vue-table-builder

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-04-08 12:06 UTC

This package is auto-updated.

Last update: 2026-04-08 12:56:32 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

A powerful and flexible table builder package for Laravel with Vue 3, Inertia.js, and shadcn-vue components. Similar to Laravel Splade tables but built for modern Vue 3 applications with beautiful UI components.

Installation

You can install the package via composer:

composer require tranquil-tools/laravel-vue-table-builder

Alter you vite.config.ts to add an @table-builder alias:

import { defineConfig } from 'vite';
import path from 'path';

export default defineConfig({
    plugins: [
        // ...
    ],
    resolve: {
        alias: {

            // Add this:

            '@table-builder': path.resolve(__dirname, 'vendor/tranquil-tools/laravel-vue-table-builder/resources/js'),
        },
    },
});

You can publish the config file with:

php artisan vendor:publish --tag="vue-table-builder-config"

The content of the published config can be viewed here.

Usage

Backend (Laravel)

Create a table class:

use TranquilTools\TableBuilder\AbstractTable;
use TranquilTools\TableBuilder\TableBuilder;
use App\Models\User;

class UsersTable extends AbstractTable
{
    public function for()
    {
        return User::query();
    }

    public function configure(TableBuilder $table)
    {
        $table
            ->defaultSort('name')
            ->withGlobalSearch(columns: ['name', 'email'])
            ->column('id', 'ID')
            ->column('name', 'Name', sortable: true)
            ->column('email', 'Email', sortable: true)
            ->column('created_at', 'Created', sortable: true)
            ->paginate(25);
    }
}

In your controller:

use Inertia\Inertia;

public function index()
{
    return Inertia::render('Users/Index', [
        'table' => \App\Tables\UsersTable::build(),
    ]);
}

Frontend (Vue)

Import the TableBuilder component:

<script setup lang="ts">
import { TableBuilder } from '@/components'
import type { TableData } from '@/types/table-builder'

defineProps<{
  table: TableData
}>()
</script>

<template>
  <div>
    <h1>Users</h1>
    <TableBuilder :table="table" />
  </div>
</template>

Features

  • 🎨 Beautiful UI with shadcn-vue table components
  • 🔍 Sortable columns with visual indicators
  • 📄 Pagination with Inertia.js optimization
  • 🎯 Nested relationship support (e.g., user.company.name)
  • 🚀 Built with TypeScript for type safety
  • ⚡ Optimized navigation with preserve-state and preserve-scroll
  • 📱 Fully responsive design

Changelog

Please see CHANGELOG for more information on what has changed recently.

Credits

License

The MIT License (MIT). Please see License File for more information.