PHPackages                             zeeshantariq/filament-sticky-columns - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. zeeshantariq/filament-sticky-columns

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

zeeshantariq/filament-sticky-columns
====================================

Sticky / frozen table columns for Filament v3, v4, and v5

v1.0.7(1mo ago)11633↑147.6%2[1 issues](https://github.com/zeeshantariq08/filament-sticky-columns/issues)[1 PRs](https://github.com/zeeshantariq08/filament-sticky-columns/pulls)MITJavaScriptPHP ^8.1

Since Apr 13Pushed 1mo agoCompare

[ Source](https://github.com/zeeshantariq08/filament-sticky-columns)[ Packagist](https://packagist.org/packages/zeeshantariq/filament-sticky-columns)[ Docs](https://github.com/zeeshantariq/filament-sticky-columns)[ RSS](/packages/zeeshantariq-filament-sticky-columns/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (6)Versions (9)Used By (0)

Filament Sticky Columns
=======================

[](#filament-sticky-columns)

[![Latest Version on Packagist](https://camo.githubusercontent.com/817784a05445dc32898ba5a5619d83b50ff1d77e917732122785a984074d1fd8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7a65657368616e74617269712f66696c616d656e742d737469636b792d636f6c756d6e732e737667)](https://packagist.org/packages/zeeshantariq/filament-sticky-columns)[![Total Downloads](https://camo.githubusercontent.com/3bc31995413341b114d64fefda428ea2e23c9d961d248a2e78049920530169cb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7a65657368616e74617269712f66696c616d656e742d737469636b792d636f6c756d6e732e737667)](https://packagist.org/packages/zeeshantariq/filament-sticky-columns)[![License](https://camo.githubusercontent.com/22f69fe749dce84f9483903a9872bad02ff042763092d0ecf71e21923fe43c8d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f7a65657368616e74617269712f66696c616d656e742d737469636b792d636f6c756d6e732e737667)](LICENSE.md)

Sticky (frozen) table columns for **Filament v3, v4, and v5**.

Pin one or more columns to the left or right edge while the rest of the table scrolls horizontally — just like Excel or Google Sheets.

---

Features
--------

[](#features)

- 📌 Stick columns to the **left** or **right**
- 🌗 **Dark-mode** aware — inherits Filament panel surface colours automatically
- 🔢 Multiple sticky columns with **auto-computed offsets**
- 🌊 **Scroll shadow** indicator so users know content is scrolled beneath
- ⚡️ Works with **Livewire v3 and v4** (Filament v3–v5)
- 🧩 Use **`StickyColumn`** drop-in, or add stickiness to **any** column using **`->sticky()`**
- 🔧 Zero config required; publish only when you need to override defaults

---

Requirements
------------

[](#requirements)

DependencyVersionPHP≥ 8.1Laravel≥ 10Filament^3.0 || ^4.0 || ^5.0---

Installation
------------

[](#installation)

### Install from Packagist

[](#install-from-packagist)

```
composer require zeeshantariq/filament-sticky-columns
```

### Recommended (Vite) — no `filament:assets`, no hard refresh

[](#recommended-vite--no-filamentassets-no-hard-refresh)

If your Filament panel uses a Vite theme (`->viteTheme(...)`), import the package CSS/JS into your theme build. This gives you automatic cache-busting (hashed filenames) and avoids running `php artisan filament:assets`.

Add to your Filament theme CSS (example: `resources/css/filament/admin/theme.css`):

```
@import "../../../../vendor/zeeshantariq/filament-sticky-columns/resources/css/filament-sticky-columns.css";
```

Import the JS in a file that is loaded by your panel (example: a Filament theme JS entry, or your panel JS bundle):

```
import '../../../../vendor/zeeshantariq/filament-sticky-columns/resources/js/filament-sticky-columns.js'
```

Then rebuild your assets:

```
npm run dev
# or
npm run build
```

### Publish config

[](#publish-config)

```
php artisan vendor:publish --tag="filament-sticky-columns-config"
```

### Publish assets (Filament assets pipeline)

[](#publish-assets-filament-assets-pipeline)

This package also registers JS/CSS via Filament assets.

Filament v3/v4 publish all registered assets with this command:

```
php artisan filament:assets
```

**Cache busting (no hard refresh):** asset filenames include your installed package version and the built files’ last-modified time, so after `composer update` or a fresh install, run `php artisan filament:assets` (or rely on `filament:upgrade` in your app’s Composer scripts) and do a **normal** page reload — the browser should request new CSS/JS URLs automatically.

---

Usage
-----

[](#usage)

### Option A — `StickyColumn` drop-in

[](#option-a--stickycolumn-drop-in)

`StickyColumn` is a drop-in replacement for Filament’s `TextColumn`. It is sticky **left** by default.

```
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
use ZeeshanTariq\FilamentStickyColumns\Columns\StickyColumn;

public function table(Table $table): Table
{
    return $table->columns([

        // Sticky LEFT (default)
        StickyColumn::make('id')->sortable(),
        StickyColumn::make('name')->searchable(),

        // Regular scrollable columns
        TextColumn::make('email'),
        TextColumn::make('phone'),
        TextColumn::make('department'),

        // Sticky RIGHT
        StickyColumn::make('status')->right()->badge(),

    ]);
}
```

---

### Option B — Sticky any column with `->sticky()` / `->stickyRight()`

[](#option-b--sticky-any-column-with--sticky---stickyright)

This package registers macros on `Filament\Tables\Columns\Column`, so you can pin **any** column type without switching to `StickyColumn`.

```
use Filament\Tables\Table;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\ImageColumn;
use Filament\Tables\Columns\TextColumn;

public function table(Table $table): Table
{
    return $table->columns([
        TextColumn::make('id')->label('ID')->sticky(),
        ImageColumn::make('avatar')->circular()->sticky(),
        TextColumn::make('name')->searchable()->sticky(),

        TextColumn::make('email'),
        TextColumn::make('phone'),

        IconColumn::make('active')->boolean()->stickyRight(),
    ]);
}
```

---

### Option C — Manual offsets

[](#option-c--manual-offsets)

When auto-compute isn't accurate (e.g. beside a checkbox column):

```
StickyColumn::make('id')->sticky(offset: 0),    // starts at 0
StickyColumn::make('name')->sticky(offset: 60), // after a 60 px ID column
```

---

API reference
-------------

[](#api-reference)

### `StickyColumn`

[](#stickycolumn)

```
StickyColumn::make('name')                 // sticky left
StickyColumn::make('name')->right()        // sticky right
StickyColumn::make('name')->sticky()       // sticky left (explicit)
StickyColumn::make('name')->stickyRight()  // sticky right
StickyColumn::make('name')->sticky(offset: 120)
```

### Column macros

[](#column-macros)

```
TextColumn::make('name')->sticky(condition: true, offset: null, zIndex: null)
TextColumn::make('actions')->stickyRight(condition: true, offset: null, zIndex: null)
```

---

Configuration
-------------

[](#configuration)

```
// config/filament-sticky-columns.php
return [
    'z_index'      => 10,                        // z-index for sticky cells
    'background'   => 'auto',                    // 'auto' = Filament surface colour
    'shadow'       => true,                      // directional scroll shadow
    'shadow_color' => 'rgba(0, 0, 0, 0.12)',     // shadow CSS colour
];
```

---

Manual refresh
--------------

[](#manual-refresh)

If you dynamically add columns or swap table content outside of normal Livewire updates:

```
window.FilamentStickyColumns.refresh();
```

---

Troubleshooting
---------------

[](#troubleshooting)

### Sticky columns not applying

[](#sticky-columns-not-applying)

Checklist:

- Make sure the assets are published:

```
php artisan filament:assets
```

- **Filament v4 note (important)**:

    - Filament v4 renders table **cells** using `extraHeaderAttributes()` (``) and `extraCellAttributes()` (``).
    - `extraAttributes()` is applied to **inner** column markup (e.g. `TextColumn`’s wrapper), which is not always enough for sticky positioning.
    - When debugging, ensure you can see `data-sticky="left"` / `data-sticky="right"` on the actual `` / `` elements in your table (not only on a nested ``).
- If you use the Filament assets pipeline, refresh once after publishing.
- If you use Vite (recommended), you should not need hard refresh because Vite cache-busts.
- Inspect the table DOM and confirm your sticky columns have `data-sticky="left"` / `data-sticky="right"` somewhere inside the cell.

### Offsets look wrong

[](#offsets-look-wrong)

If you use selection/checkbox columns or very dynamic columns, auto offsets can be off. Use manual offsets:

```
TextColumn::make('id')->sticky(offset: 0)
TextColumn::make('name')->sticky(offset: 80)
```

---

Changelog
---------

[](#changelog)

See [CHANGELOG.md](CHANGELOG.md).

License
-------

[](#license)

MIT — see [LICENSE.md](LICENSE.md).

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance89

Actively maintained with recent releases

Popularity27

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

8

Last Release

50d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f47cff8ce3f93868b40ac01d5b9a7f4d254434b55d6850cf064b6bbf868fdab7?d=identicon)[zeeshantariq08](/maintainers/zeeshantariq08)

---

Top Contributors

[![zeeshantariq08](https://avatars.githubusercontent.com/u/46603062?v=4)](https://github.com/zeeshantariq08 "zeeshantariq08 (3 commits)")

---

Tags

laraveltablefilamentcolumnsstickypinnedfrozen

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/zeeshantariq-filament-sticky-columns/health.svg)

```
[![Health](https://phpackages.com/badges/zeeshantariq-filament-sticky-columns/health.svg)](https://phpackages.com/packages/zeeshantariq-filament-sticky-columns)
```

###  Alternatives

[ysfkaya/filament-phone-input

A phone input component for Laravel Filament

3131.2M25](/packages/ysfkaya-filament-phone-input)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3913.7k](/packages/rawilk-profile-filament-plugin)[dotswan/filament-map-picker

Easily pick and retrieve geo-coordinates using a map-based interface in your Filament applications.

127173.7k3](/packages/dotswan-filament-map-picker)[stephenjude/filament-feature-flags

Filament implementation of feature flags and segmentation with Laravel Pennant.

122157.7k1](/packages/stephenjude-filament-feature-flags)[creagia/filament-code-field

A Filamentphp input field to edit or view code data.

57301.3k3](/packages/creagia-filament-code-field)[jibaymcs/filament-tour

Bring the power of DriverJs to your Filament panels and start a tour !

12351.0k](/packages/jibaymcs-filament-tour)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
