PHPackages                             kahusoftware/filament-ckeditor-field - 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. kahusoftware/filament-ckeditor-field

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

kahusoftware/filament-ckeditor-field
====================================

A basic CKEditor 5 form field configured with non-premium features.

v1.0.4(7mo ago)1616.2k↑11.9%10MITPHPPHP ^8.1CI passing

Since Sep 30Pushed 2w ago2 watchersCompare

[ Source](https://github.com/Kahu-Software-LLC/filament-ckeditor-field)[ Packagist](https://packagist.org/packages/kahusoftware/filament-ckeditor-field)[ Docs](https://github.com/kahu-software-llc/filament-ckeditor-field)[ RSS](/packages/kahusoftware-filament-ckeditor-field/feed)WikiDiscussions 1.x Synced 2w ago

READMEChangelog (10)Dependencies (8)Versions (28)Used By (0)

Filament CKEditor Field
=======================

[](#filament-ckeditor-field)

[![Latest Version on Packagist](https://camo.githubusercontent.com/1f7717b58c687b4c2e9de6c9fae0311e4b16ee2385081c2f8ecaaa1fb46ca44e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6b616875736f6674776172652f66696c616d656e742d636b656469746f722d6669656c642e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/kahusoftware/filament-ckeditor-field)[![GitHub Tests Action Status](https://camo.githubusercontent.com/ff060df3e7ef7fc6f44a96e7b08ab5a4170595ebe4dd6d0bf10864577490e3d5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6b6168752d736f6674776172652d6c6c632f66696c616d656e742d636b656469746f722d6669656c642f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/kahu-software-llc/filament-ckeditor-field/actions?query=workflow%3Arun-tests+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/d972a683a5b6042d772453895a6e2818a3ac63a18508d2dea212e56ce614528c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6b616875736f6674776172652f66696c616d656e742d636b656469746f722d6669656c642e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/kahusoftware/filament-ckeditor-field)[![License](https://camo.githubusercontent.com/c304ef6f0c04f361e9e00b041eb546e2fb8677ec991ae2a2b28542e4233bb7f9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6b616875736f6674776172652f66696c616d656e742d636b656469746f722d6669656c642e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

[![Plumb score](https://camo.githubusercontent.com/8ce4146621b2cc9ce4478abb7f40252953be984b08806c18afb35e393df4a85c/68747470733a2f2f706c756d627068702e6465762f6261646765732f6b616875736f6674776172652f66696c616d656e742d636b656469746f722d6669656c642f636f6d706f736974652e737667)](https://plumbphp.dev/kahusoftware/filament-ckeditor-field)[![Plumb security score](https://camo.githubusercontent.com/377680abd0338f54a295e2b1275a7211eadd796611ad91f7f5b2c53bd05d239e/68747470733a2f2f706c756d627068702e6465762f6261646765732f6b616875736f6674776172652f66696c616d656e742d636b656469746f722d6669656c642f73656375726974792e737667)](https://plumbphp.dev/kahusoftware/filament-ckeditor-field)[![Plumb maintenance score](https://camo.githubusercontent.com/2eaed3c25a75b958655c698dcfb5003f616bf9cbbf54cf1c073bd3c7803a73d0/68747470733a2f2f706c756d627068702e6465762f6261646765732f6b616875736f6674776172652f66696c616d656e742d636b656469746f722d6669656c642f6d61696e74656e616e63652e737667)](https://plumbphp.dev/kahusoftware/filament-ckeditor-field)[![Plumb ecosystem score](https://camo.githubusercontent.com/a1866332e1241643a1c5b05f0be6ec5aaf72eece4be517229614fa8db8865560/68747470733a2f2f706c756d627068702e6465762f6261646765732f6b616875736f6674776172652f66696c616d656e742d636b656469746f722d6669656c642f65636f73797374656d2e737667)](https://plumbphp.dev/kahusoftware/filament-ckeditor-field)[![Scanned by Plumb](https://camo.githubusercontent.com/bba8ee896d1b119d29e54ed313cae532cfea64a16c900b0b3668dc945083631c/68747470733a2f2f706c756d627068702e6465762f6261646765732f6b616875736f6674776172652f66696c616d656e742d636b656469746f722d6669656c642f7363616e6e65642e737667)](https://plumbphp.dev/kahusoftware/filament-ckeditor-field)

> **Note:** This branch (`1.x`) is specifically for FilamentPHP 3.x. If you're using FilamentPHP 4.x, please use the [`2.x` branch](https://github.com/kahu-software-llc/filament-ckeditor-field/tree/2.x).

[![](https://camo.githubusercontent.com/e2f216affecd03b9baa89db07593414468b02198efaa45a6bbba2898a2ca0b17/68747470733a2f2f63646e2e6b616875736f6674776172652e636f6d2f75706c6f6164732f6b6168752d736f6674776172652d6c6c632d636b656469746f722d6669656c642e6a7067)](https://camo.githubusercontent.com/e2f216affecd03b9baa89db07593414468b02198efaa45a6bbba2898a2ca0b17/68747470733a2f2f63646e2e6b616875736f6674776172652e636f6d2f75706c6f6164732f6b6168752d736f6674776172652d6c6c632d636b656469746f722d6669656c642e6a7067)

Features
--------

[](#features)

- CKEditor 5 integration for FilamentPHP 3 forms
- Works anywhere Livewire renders, including panels, repeaters and standalone components
- Image upload support with configurable upload URLs
- Full control over image upload handling - you implement your own upload endpoint
- Full control over the editor configuration from config, a service provider, or per field
- Fixed or minimum editing area height, and support for Filament's `autofocus()`
- Helper for finding images removed from a document, so storage can be reconciled on save
- Highly customizable with fluent API
- Non-premium features only (free and open-source)
- Easy to configure and use

Table of contents
-----------------

[](#table-of-contents)

- [Filament CKEditor Field](#filament-ckeditor-field)
- [Features](#features)
- [Table of contents](#table-of-contents)
- [Installation](#installation)
- [Usage](#usage)
- [Configuration](#configuration)
    - [Editor options](#editor-options)
        - [Upgrading from 1.0.x](#upgrading-from-10x)
        - [Where to set them](#where-to-set-them)
        - [How options merge](#how-options-merge)
        - [Plugins and toolbar items](#plugins-and-toolbar-items)
        - [JavaScript expressions](#javascript-expressions)
    - [Available methods](#available-methods)
        - [uploadUrl(`string` | `Closure` | `null` $uploadUrl)](#uploadurlstring--closure--null-uploadurl)
        - [name(`string` $name)](#namestring-name)
        - [placeholder(`string` $placeholder)](#placeholderstring-placeholder)
        - [height(`string` | `Closure` | `null` $height)](#heightstring--closure--null-height)
        - [minHeight(`string` | `Closure` | `null` $minHeight)](#minheightstring--closure--null-minheight)
        - [editorOptions(`array` | `Closure` $options)](#editoroptionsarray--closure-options)
        - [disablePlugins(`array` | `Closure` $plugins)](#disablepluginsarray--closure-plugins)
        - [enablePlugins(`array` | `Closure` $plugins)](#enablepluginsarray--closure-plugins)
        - [disableToolbarItems(`array` | `Closure` $items)](#disabletoolbaritemsarray--closure-items)
    - [Cleaning up removed images](#cleaning-up-removed-images)
    - [Inherited field methods](#inherited-field-methods)
- [Testing](#testing)
- [Changelog](#changelog)
- [Contributing](#contributing)
- [Security Vulnerabilities](#security-vulnerabilities)
- [Credits](#credits)
- [License](#license)

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

[](#installation)

You can install the field via composer:

```
composer require kahusoftware/filament-ckeditor-field
```

You can publish the config file with:

```
php artisan vendor:publish --tag="filament-ckeditor-field-config"
```

Usage
-----

[](#usage)

Basic usage:

```
use Kahusoftware\FilamentCkeditorField\CKEditor;

CKEditor::make('content')
    ->uploadUrl(null)
```

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

[](#configuration)

This is the contents of the published config file:

```
return [
    /**
     * Image upload enabled
     */
    'upload_enabled' => true,

    /**
     * Image URL to upload to if one is not specified on the form field's ->uploadUrl() method
     */
    'upload_url' => null,

    /**
     * Everything the CKEditor instance is built from: plugins, toolbar,
     * htmlSupport, headings, styles and so on. See "Editor options" below.
     */
    'editor' => [
        'plugins' => [/* ... */],
        'upload_only_plugins' => ['ImageInsert', 'ImageUpload', 'SimpleUploadAdapter'],
        'upload_only_toolbar_items' => ['insertImage'],
        'disabled_plugins' => [],
        'disabled_toolbar_items' => [],
        'options' => [/* ... */],
    ],
];
```

### Editor options

[](#editor-options)

The full CKEditor configuration lives under the `editor` key of the config file. Publish the config to see and edit the complete defaults.

Any key the published config omits falls back to the package default, so a partial `editor` block is always safe: declaring only `disabled_plugins`, for example, leaves the default plugin list, toolbar and option groups intact.

Useful references while editing:

- [Editor options under `options`](https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editorconfig-EditorConfig.html)
- [Toolbar item names](https://ckeditor.com/docs/ckeditor5/latest/getting-started/setup/toolbar.html)
- [Feature documentation per plugin](https://ckeditor.com/docs/ckeditor5/latest/features/index.html)

#### Upgrading from 1.0.x

[](#upgrading-from-10x)

A config file published before 1.1.0 has no `editor` key and keeps working unchanged: the package defaults apply, and the editor behaves exactly as it did before the configuration was extracted. To see and edit the full defaults, republish the config:

```
php artisan vendor:publish --tag="filament-ckeditor-field-config" --force
```

`--force` overwrites the existing file, so re-apply any `upload_enabled` or `upload_url` customizations afterwards. Alternatively, add just the `editor`keys you want to change; everything omitted falls back to the defaults.

#### Where to set them

[](#where-to-set-them)

Options resolve in four layers, and later layers win: the package defaults, then the published config file, then `CKEditor::configureUsing()`, then the methods on an individual field.

**1. Application wide, in the published config file.**

```
// config/filament-ckeditor-field.php
'editor' => [
    'disabled_plugins' => ['FontColor', 'FontBackgroundColor', 'Highlight'],
    'disabled_toolbar_items' => ['fontColor', 'fontBackgroundColor', 'highlight'],
],
```

**2. Application wide, in a service provider.**

```
use Kahusoftware\FilamentCkeditorField\CKEditor;

public function boot(): void
{
    CKEditor::configureUsing(fn (CKEditor $field) => $field
        ->disablePlugins(['FontColor', 'FontBackgroundColor', 'Highlight'])
        ->disableToolbarItems(['fontColor', 'fontBackgroundColor', 'highlight']));
}
```

**3. On a single field.**

```
CKEditor::make('content')
    ->editorOptions([
        'menuBar' => ['isVisible' => false],
    ])
    ->disableToolbarItems(['insertTable'])
```

#### How options merge

[](#how-options-merge)

String-keyed arrays merge recursively, while list-shaped arrays are replaced outright. Overriding a list therefore swaps it wholesale rather than appending to it, and passing an empty array clears it.

```
// Replaces the seven default sizes with two, rather than adding to them.
->editorOptions(['fontSize' => ['options' => [12, 16]]])

// Leaves link.addTargetToExternalLinks untouched.
->editorOptions(['link' => ['defaultProtocol' => 'http://']])
```

#### Plugins and toolbar items

[](#plugins-and-toolbar-items)

Plugins are named as strings and resolved against the JavaScript `window` scope at runtime. Names that are not bundled are skipped, so removing plugins is always safe while adding one requires it to be present in the bundle.

Removing a toolbar item hides its button. Removing a **plugin** switches the feature off entirely, which also hands whatever markup it owned back to [General HTML Support](https://ckeditor.com/docs/ckeditor5/latest/features/html/general-html-support.html). That distinction matters: an `htmlSupport.disallow` rule has no effect while the plugin that owns the markup is still active, because the plugin's own converters handle it first. To strip markup rather than merely hide a button, disable the plugin *and* disallow the markup.

```
CKEditor::make('content')
    ->disablePlugins(['FontColor', 'FontBackgroundColor', 'Highlight'])
    ->disableToolbarItems(['fontColor', 'fontBackgroundColor', 'highlight'])
    ->editorOptions([
        'htmlSupport' => [
            'allow' => [[
                'name' => 'js:/^.*$/',
                'classes' => true,
                'attributes' => true,
                // An explicit allowlist, rather than `true` for every style.
                'styles' => ['text-align', 'font-size', 'font-family'],
            ]],
            'disallow' => [
                ['name' => 'js:/^(font|mark)$/'],
                ['attributes' => ['bgcolor', 'color']],
                ['styles' => ['color', 'background', 'background-color']],
            ],
        ],
    ])
```

A toolbar item is also dropped when the plugin behind it is not in the resolved plugin list, so disabling a plugin never leaves a dead button that CKEditor would report as `toolbarview-item-unavailable`. The `disableToolbarItems()` call above is therefore optional; it is kept to show both methods side by side. Items this package does not recognise, such as buttons from a custom build, always pass through.

Separators (`|`) left with nothing to divide are dropped automatically, so removing items never leaves stray dividers in the toolbar.

#### JavaScript expressions

[](#javascript-expressions)

Some CKEditor options expect values that JSON cannot express, such as the regular expression in `htmlSupport`. Prefix a string with `js:` and it is written into the page as a bare JavaScript expression instead of a quoted string:

```
'name' => 'js:/^.*$/',
```

At runtime you can also pass a `Filament\Support\RawJs` instance. In the config file use the `js:` string form, because objects do not survive `php artisan config:cache`.

> **Note**A `js:` value is emitted verbatim. Only use it for values you control, never for user input.

### Available methods

[](#available-methods)

#### uploadUrl(`string` | `Closure` | `null` $uploadUrl)

[](#uploadurlstring--closure--null-uploadurl)

Sets the URL endpoint for image uploads. If not specified, the default upload URL from the config file will be used.

`uploadUrl` (Default: `null`)

> **Note:** This field gives you freedom to handle image uploads yourself. You are responsible for creating your own upload endpoint that handles file validation, storage, and returns the appropriate response format. This design allows you to implement your own business logic, security measures, and storage solutions (local filesystem, S3, cloud storage, etc.).

This field uses CKEditor's [Custom Upload Adapter](https://ckeditor.com/docs/ckeditor5/latest/framework/deep-dive/upload-adapter.html), which requires your upload endpoint to return a JSON response containing the uploaded image URL(s).

**Expected Response Format:**

Your upload endpoint must return a JSON response with one of the following formats:

**Single image response:**

```
{
    "url": "https://example.com/uploads/image.jpg"
}
```

**Responsive images response:**

```
{
    "urls": {
        "default": "https://example.com/uploads/image.jpg",
        "500": "https://example.com/uploads/image1.jpg",
        "1000": "https://example.com/uploads/image2.jpg"
    }
}
```

**Example Laravel Controller:**

```
use Illuminate\Http\Request;

public function uploadImage(Request $request)
{
    $request->validate([
        'upload' => 'required|image|max:2048',
    ]);

    $path = $request->file('upload')->store('uploads', 'public');
    $url = asset('storage/' . $path);

    return response()->json([
        'url' => $url
    ]);
}
```

For more details, see the [CKEditor Custom Upload Adapter documentation](https://ckeditor.com/docs/ckeditor5/latest/framework/deep-dive/upload-adapter.html#passing-additional-data-to-the-response).

#### name(`string` $name)

[](#namestring-name)

Sets the name of the field. This will be used as the form field name.

`name` (Default: `'ckeditor'`)

#### placeholder(`string` $placeholder)

[](#placeholderstring-placeholder)

Sets the placeholder text displayed in the editor when it's empty.

`placeholder` (Default: `'Type or paste your content here...'`)

#### height(`string` | `Closure` | `null` $height)

[](#heightstring--closure--null-height)

Fixes the editing area to the given CSS height, scrolling internally once content outgrows it. Without it the editor grows with its content.

```
CKEditor::make('content')
    ->height('400px')
```

#### minHeight(`string` | `Closure` | `null` $minHeight)

[](#minheightstring--closure--null-minheight)

Lets the editing area start at the given CSS height while still growing with its content.

```
CKEditor::make('content')
    ->minHeight('10rem')
```

#### editorOptions(`array` | `Closure` $options)

[](#editoroptionsarray--closure-options)

Merges options over the resolved editor configuration for this field. See [How options merge](#how-options-merge). Can be called more than once, with later calls taking precedence.

```
CKEditor::make('content')
    ->editorOptions(['menuBar' => ['isVisible' => false]])
```

#### disablePlugins(`array` | `Closure` $plugins)

[](#disablepluginsarray--closure-plugins)

Removes plugins from the resolved plugin list, switching those features off. Toolbar items belonging to a removed plugin are dropped along with it.

```
CKEditor::make('content')
    ->disablePlugins(['FontColor', 'FontBackgroundColor', 'Highlight'])
```

#### enablePlugins(`array` | `Closure` $plugins)

[](#enablepluginsarray--closure-plugins)

Re-enables plugins that the config file or a `configureUsing` callback disabled.

```
CKEditor::make('content')
    ->enablePlugins(['Highlight'])
```

#### disableToolbarItems(`array` | `Closure` $items)

[](#disabletoolbaritemsarray--closure-items)

Removes items from the toolbar, leaving the underlying plugins active. Orphaned separators are dropped automatically.

```
CKEditor::make('content')
    ->disableToolbarItems(['insertTable', 'codeBlock'])
```

### Cleaning up removed images

[](#cleaning-up-removed-images)

Uploaded images stay in storage when they are later deleted from the editor. That is deliberate while editing: undo and redo need the file to still exist, so the earliest safe moment to reconcile storage is when the record is saved.

`CKEditor::findRemovedImages()` compares the previously saved document with the one about to be saved and returns the image URLs that disappeared:

```
use Kahusoftware\FilamentCkeditorField\CKEditor;

$removed = CKEditor::findRemovedImages($oldHtml, $newHtml, urlPrefix: '/storage/uploads/');
```

The package never deletes files itself, mirroring how uploads work: you own the endpoint, so you own the cleanup. The optional `urlPrefix` restricts the result to your own uploads, so external or hotlinked images can never end up on a deletion list.

In a panel resource, capture the removed URLs before saving and delete after the save succeeds:

```
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Kahusoftware\FilamentCkeditorField\CKEditor;

class EditPost extends EditRecord
{
    protected static string $resource = PostResource::class;

    /** @var array */
    protected array $removedImages = [];

    protected function mutateFormDataBeforeSave(array $data): array
    {
        $this->removedImages = CKEditor::findRemovedImages(
            $this->record->getOriginal('content'),
            $data['content'] ?? null,
            urlPrefix: asset('storage/uploads'),
        );

        return $data;
    }

    protected function afterSave(): void
    {
        foreach ($this->removedImages as $url) {
            Storage::disk('public')->delete(Str::after($url, '/storage/'));
        }
    }
}
```

In a standalone Livewire component the same shape applies:

```
public function save(): void
{
    $data = $this->form->getState();

    $removed = CKEditor::findRemovedImages(
        $this->post->getOriginal('content'),
        $data['content'] ?? null,
        urlPrefix: asset('storage/uploads'),
    );

    $this->post->update($data);

    foreach ($removed as $url) {
        Storage::disk('public')->delete(Str::after($url, '/storage/'));
    }
}
```

Deleting only after a successful save keeps the files available if validation or the save itself fails.

### Inherited field methods

[](#inherited-field-methods)

The field extends Filament's base `Field`, so everything a standard form field supports works here without package code, including:

```
CKEditor::make('content')
    ->label('Body')
    ->autofocus()          // focuses the editor once it has initialised
    ->required()
    ->disabled()
    ->hidden()
    ->helperText('Shown under the field')
    ->columnSpanFull()
```

See the [Filament form field documentation](https://filamentphp.com/docs/forms/fields/getting-started)for the full list.

Testing
-------

[](#testing)

```
composer test
```

The test suite uses PestPHP and includes unit tests for field instantiation, method chaining, and configuration, as well as feature tests for rendering the field within Livewire components.

Changelog
---------

[](#changelog)

Please see [CHANGELOG](https://github.com/Kahu-Software-LLC/filament-ckeditor-field/blob/1.x/CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](https://github.com/Kahu-Software-LLC/filament-ckeditor-field/blob/1.x/CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please email  any security vulnerabilities to ensure they're promptly addressed.

Credits
-------

[](#credits)

- [Thomas Johnson](https://github.com/tominal)
- [All Contributors](https://github.com/Kahu-Software-LLC/filament-ckeditor-field/graphs/contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](https://github.com/Kahu-Software-LLC/filament-ckeditor-field/blob/1.x/LICENSE.md) for more information.

---

\* *This open-source plugin is not affiliated with, endorsed, or sponsored by CKSource, and any references to CKEditor are solely for descriptive purposes under their respective copyrights and trademarks.*

We do encourage you to check out CKEditor's premium features for your own implementation of CKEditor as the developers have worked hard to bring us a wonderful rich editor.

###  Health Score

52

—

FairBetter than 96% of packages

Maintenance82

Actively maintained with recent releases

Popularity38

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 96% 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 ~29 days

Recently: every ~13 days

Total

17

Last Release

215d ago

Major Versions

v0.0.7-alpha → v2.0.0-beta2025-11-13

v1.0.2 → v2.0.1-beta2025-11-24

PHP version history (2 changes)v0.0.1-alphaPHP ^8.1

v2.0.1-betaPHP ^8.2|^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/8497308?v=4)[tom](/maintainers/tominal)[@tominal](https://github.com/tominal)

---

Top Contributors

[![tominal](https://avatars.githubusercontent.com/u/8497308?v=4)](https://github.com/tominal "tominal (190 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (8 commits)")

---

Tags

ckeditor5filamentphpfilamentphp-pluginhacktoberfestlaravelKahu-Software-LLCkahusoftwarefilament-ckeditor-field

###  Code Quality

TestsPest

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/kahusoftware-filament-ckeditor-field/health.svg)

```
[![Health](https://phpackages.com/badges/kahusoftware-filament-ckeditor-field/health.svg)](https://phpackages.com/packages/kahusoftware-filament-ckeditor-field)
```

###  Alternatives

[codewithdennis/filament-select-tree

The multi-level select field enables you to make single selections from a predefined list of options that are organized into multiple levels or depths.

329575.9k35](/packages/codewithdennis-filament-select-tree)[awcodes/richer-editor

A collection of extensions and tools to enhance the Filament Rich Editor field.

4018.1k11](/packages/awcodes-richer-editor)[schmeits/filament-character-counter

This is a Filament character counter TextField and Textarea form field for Filament v4 and v5

34245.4k17](/packages/schmeits-filament-character-counter)[biostate/filament-menu-builder

An Elegant Menu Builder for FilamentPHP

7034.3k2](/packages/biostate-filament-menu-builder)[codebar-ag/laravel-filament-json-field

A Laravel Filament JSON Field integration with CodeMirror support

1127.0k](/packages/codebar-ag-laravel-filament-json-field)[tonegabes/filament-better-options

Filament form components for better radio and checkbox options.

1612.9k](/packages/tonegabes-filament-better-options)

PHPackages © 2026

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