PHPackages                             codenzia/filament-gantt-lite - 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. codenzia/filament-gantt-lite

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

codenzia/filament-gantt-lite
============================

Lightweight, RTL-first SVG Gantt chart page for Filament v4. Pure in-house code, no third-party Gantt library, full Arabic + English support.

v0.1.0(1w ago)00MITJavaScriptPHP ^8.3CI passing

Since May 29Pushed 1w agoCompare

[ Source](https://github.com/Codenzia/filament-gantt-lite)[ Packagist](https://packagist.org/packages/codenzia/filament-gantt-lite)[ Docs](https://github.com/codenzia/filament-gantt-lite)[ RSS](/packages/codenzia-filament-gantt-lite/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (7)Versions (2)Used By (0)

Filament Gantt Lite — Lightweight, RTL-first SVG Gantt for Filament
===================================================================

[](#filament-gantt-lite--lightweight-rtl-first-svg-gantt-for-filament)

[![Latest Version](https://camo.githubusercontent.com/02fc75d8e4b6abbb3e9efb542988d3aefdadd35806a5b766d0b10a8a483f0556/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636f64656e7a69612f66696c616d656e742d67616e74742d6c6974652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/codenzia/filament-gantt-lite)[![PHP Version](https://camo.githubusercontent.com/0a94417902f29efadbfa7d6b2f0df2a38dbfd56013a8a18b06f63cbdeb3718df/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f636f64656e7a69612f66696c616d656e742d67616e74742d6c6974652e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/codenzia/filament-gantt-lite)[![Filament](https://camo.githubusercontent.com/a4590ecd31837ed0b59c24f0e88d92d9da4b077f18d050fe8aa87d3d95154a57/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d763425323025374325323076352d6635396530623f7374796c653d666c61742d737175617265)](https://filamentphp.com)[![Tests](https://camo.githubusercontent.com/6c642fd9f53ed0bb1f6640cf8e2c39326f4113af6954f8def767f2701edf08af/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74657374732d5065737425323076332d3862356366363f7374796c653d666c61742d737175617265)](https://pestphp.com)[![License](https://camo.githubusercontent.com/9d115868925f0bd8280f52c184f3d3c649a983d1f6fd9028ba9cf49a942a8dcb/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f636f64656e7a69612f66696c616d656e742d67616e74742d6c6974652e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

A **lightweight, RTL-first SVG Gantt chart page for Filament v4/v5**. Pure in-house code — no `dhtmlxGantt`, no `frappe-gantt`, no third-party vendor lock-in. Full Arabic + English support, dark-mode aware, dependency arrows, today line, baseline rendering, holidays, and non-working days — all rendered by a small JS layer over SVG you can read and patch yourself.

> **Why this exists.** Most Filament Gantt plugins wrap a heavyweight commercial JS library, ship 200+ KB of vendor code, and break the moment Filament theming touches them. `filament-gantt-lite` does the opposite — a thin abstract page you extend, an SVG renderer that respects your locale and Tailwind theme, and zero external dependencies. Right-to-left works *by design*, not as an afterthought.

> **Try it live:** A working integration is included in the [Codenzia plugins demo](https://github.com/Codenzia/plugins-demo) at `/admin/demo/gantt-lite`.

---

Features
--------

[](#features)

- **SVG-native rendering** — no Canvas, no third-party library, no vendor build step.
- **RTL-first** — Arabic / Hebrew layouts render flawlessly with mirrored bars, time-axis, and dependency arrows.
- **Three view modes** — Day, Week, Month, switchable at runtime.
- **Dependency arrows** between tasks (FS, supports `dependencies` and `task_dependencies` fields).
- **Today line** auto-positioned on the time axis.
- **Baselines** — toggle planned-vs-actual rendering (translucent baseline rect above the actual bar).
- **Holidays + non-working days** — hatch-fill non-working columns; configurable per-page.
- **Optional sidebar tree** — render groups → tasks in a left rail; pass `[]` to hide.
- **Dark-mode aware** — colours inherit from your Tailwind theme.
- **Pure data model** — pass an array of task rows; subclass implements `getGanttDataArray()`.
- **No build step** — assets are published as plain JS/CSS to `public/`.

---

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

[](#requirements)

DependencyVersionPHP`^8.3`Filament`^4.0 || ^5.0`Livewire`^3.0 || ^4.0`---

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

[](#installation)

```
composer require codenzia/filament-gantt-lite
```

Publish the config file:

```
php artisan vendor:publish --tag=filament-gantt-lite-config
```

Publish the JS/CSS assets to `public/`:

```
php artisan vendor:publish --tag=filament-gantt-lite-assets
```

---

Quick Start
-----------

[](#quick-start)

Extend the abstract `GanttLite` page in your Filament panel and implement `getGanttDataArray()`:

```
namespace App\Filament\Pages;

use Codenzia\FilamentGanttLite\Pages\GanttLite;

class ProjectGantt extends GanttLite
{
    protected static ?string $title = 'Project Schedule';

    protected static ?string $slug = 'projects/gantt';

    public static function shouldRegisterNavigation(): bool
    {
        return true;
    }

    protected function getGanttDataArray(?int $projectId = null, array $assigneeFilter = []): array
    {
        return Task::query()
            ->when($projectId, fn ($q) => $q->where('project_id', $projectId))
            ->get()
            ->map(fn (Task $t) => [
                'id'           => $t->id,
                'name'         => $t->name,
                'start'        => $t->start_date->toDateString(),
                'end'          => $t->due_date->toDateString(),
                'progress'     => $t->progress_percent,
                'dependencies' => $t->dependencies->pluck('id')->all(),
            ])
            ->all();
    }
}
```

That's it — visit your panel and the SVG Gantt renders with proper RTL detection from `app()->getLocale()`.

---

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

[](#configuration)

After publishing, edit `config/filament-gantt-lite.php`:

```
return [
    // 'Day' | 'Week' | 'Month'
    'default_view_mode' => 'Week',

    'bar_height'        => 32,
    'bar_corner_radius' => 8,
    'padding'           => 14,

    'assets' => [
        'js'  => 'js/filament-gantt-lite.js',
        'css' => 'css/filament-gantt-lite.css',
    ],
];
```

---

Task data shape
---------------

[](#task-data-shape)

Each task in the array returned by `getGanttDataArray()` must include `id`, `name`, `start`, `end`. All other fields are optional.

FieldTypeDescription`id`int / stringUnique task identifier`name`stringDisplay label`start``Y-m-d`Start date`end``Y-m-d`End date`progress`int (0-100)Completion % overlay on the bar`color`hex stringOverride bar colour`dependencies`array of idsFS dependency arrows`task_dependencies`array of idsAlias accepted for compatibility`planned_start``Y-m-d`If `isBaselinesEnabled()` is true, renders baseline bar`planned_end``Y-m-d`See above`avatar`URLOptional assignee avatar shown on the bar---

Sidebar tree (optional)
-----------------------

[](#sidebar-tree-optional)

Return a hierarchical tree from `getGanttSidebar()` to render a left rail:

```
protected function getGanttSidebar(): array
{
    return [
        [
            'id'       => 'phase-1',
            'label'    => 'Phase 1 — Discovery',
            'children' => [
                ['id' => 1, 'label' => 'Stakeholder interviews'],
                ['id' => 2, 'label' => 'Audit existing system'],
            ],
        ],
        [
            'id'       => 'phase-2',
            'label'    => 'Phase 2 — Build',
            'children' => [
                ['id' => 3, 'label' => 'Schema design'],
                ['id' => 4, 'label' => 'API endpoints'],
            ],
        ],
    ];
}
```

Return `[]` (the default) to hide the sidebar entirely.

---

Customising the page
--------------------

[](#customising-the-page)

Override these hooks on your subclass:

```
protected function getDefaultViewMode(): string
{
    return 'Day'; // default 'Week'
}

protected function isBaselinesEnabled(): bool
{
    return true; // render planned-vs-actual baseline bars
}

protected function getHolidays(): array
{
    return ['2026-01-01', '2026-12-25'];
}

protected function getNonWorkingDays(): array
{
    return [0, 6]; // Sunday + Saturday (default)
}
```

The full boot config sent to the JS layer can also be overridden via `getGanttBootConfig()`.

---

Livewire events
---------------

[](#livewire-events)

The page emits these events you can hook from other Livewire components:

EventPayloadFired when`gantt-lite:view-mode-changed``mode: 'Day'|'Week'|'Month'`User switches view mode`gantt-lite:refreshed``tasks: array``refreshGantt()` is called---

RTL support
-----------

[](#rtl-support)

RTL detection is automatic via `app()->getLocale() === 'ar'`. The SVG renderer mirrors:

- Time-axis direction (right-to-left day flow)
- Task bar growth
- Dependency arrow heads
- Sidebar tree indentation

To force a specific direction independent of locale, override `getGanttBootConfig()` and set `'rtl' => true/false`.

---

Testing
-------

[](#testing)

```
composer test
```

---

Roadmap
-------

[](#roadmap)

- Drag-to-reschedule task bars (currently read-only).
- Inline resize handles on bars.
- Critical path highlighting.
- Export to PNG / PDF.

---

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance98

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 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

Unknown

Total

1

Last Release

11d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10361843?v=4)[Mohammad El-Haj](/maintainers/mh2x)[@mh2x](https://github.com/mh2x)

---

Top Contributors

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

---

Tags

laravelsvgfilamentarabicrtlgantt

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/codenzia-filament-gantt-lite/health.svg)

```
[![Health](https://phpackages.com/badges/codenzia-filament-gantt-lite/health.svg)](https://phpackages.com/packages/codenzia-filament-gantt-lite)
```

###  Alternatives

[jibaymcs/filament-tour

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

12351.0k](/packages/jibaymcs-filament-tour)[asosick/filament-layout-manager

Allow users to create &amp; customize their own FilamentPHP pages composed of Livewire components

5721.3k3](/packages/asosick-filament-layout-manager)[wsmallnews/filament-nestedset

Filament nestedset tree builder powered by kalnoy/nestedset with Filament v4 and v5 support

196.5k14](/packages/wsmallnews-filament-nestedset)[tapp/filament-form-builder

User facing form builder using Filament components

141.9k2](/packages/tapp-filament-form-builder)[a2insights/filament-saas

Filament Saas for A2Insights

171.5k](/packages/a2insights-filament-saas)

PHPackages © 2026

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