Features

Sticky (Pinned) Columns

Pin columns so they stay visible during horizontal scroll — dev defaults, user pinning, and a customizable toolbar trigger.

Sticky columns stay frozen on the left while the rest of the table scrolls horizontally.

Dev-declared default

Mark a column sticky with ->sticky():

TextColumn::make('name')->sticky();

This column is pinned for everyone out of the box.

User-controlled pinning

Enable ->stickableColumns() on the table. A Pin columns dropdown appears in the toolbar (before the column-manager trigger).

  • Checkboxes draft which columns are pinned.
  • Select all / Deselect all shortcuts are included.
  • Changes apply only when the user clicks Apply (the button is disabled when nothing changed).
  • Closing the panel without Apply keeps the draft in memory for that page session.
public function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('name')->sticky(), // seeds initial selection
            TextColumn::make('email'),
            TextColumn::make('created_at'),
        ])
        ->dragReorderableColumns()
        ->stickableColumns();
}

Any ->sticky() calls seed the initial selection. Once a user applies their own choice, that selection is remembered.

Customize the trigger

Customize the toolbar button with ->stickyManagerTriggerAction(), mirroring Filament's columnManagerTriggerAction():

use Filament\Actions\Action;

public function table(Table $table): Table
{
    return $table
        ->columns([...])
        ->stickableColumns()
        ->stickyManagerTriggerAction(fn (Action $action) => $action
            ->label('Pinned columns')
            ->icon('heroicon-o-map-pin')
            ->tooltip('Choose which columns stay visible'));
}

The default trigger is a small gray Filament button labeled Pin columns (translatable via resources/lang).

Behaviour notes

  • Pinned columns are left-pin only in the current version.
  • Pinned headers show a small pin indicator; resize handles are hidden on sticky columns.
  • Sticky columns are excluded from drag-to-reorder; columns cannot be dropped before a sticky column.
  • Header and body cells use opaque backgrounds so horizontally scrolled content does not show through.

Persistence

The user's pinned selection is persisted per user (session + database) alongside widths and order — no extra migration beyond the table_settings table.