PHPackages                             mortogo321/laravel-quill - 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. [Templating &amp; Views](/categories/templating)
4. /
5. mortogo321/laravel-quill

ActiveLibrary[Templating &amp; Views](/categories/templating)

mortogo321/laravel-quill
========================

Laravel package for Quill WYSIWYG editor with full support for Quill 2.x

v1.0.0(5mo ago)00MITPHPPHP ^8.2

Since Dec 12Pushed 2mo agoCompare

[ Source](https://github.com/mortogo321/laravel-quill)[ Packagist](https://packagist.org/packages/mortogo321/laravel-quill)[ Docs](https://github.com/mortogo321/laravel-quill)[ GitHub Sponsors](https://github.com/sponsors/mortogo321)[ RSS](/packages/mortogo321-laravel-quill/feed)WikiDiscussions main Synced 1mo ago

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

Laravel Quill
=============

[](#laravel-quill)

A Laravel package for seamless integration with **Quill 2.x** WYSIWYG editor.

[![Latest Stable Version](https://camo.githubusercontent.com/97836efdbf14c5b34275f9f1c614b34cc98a3b07f0e4852c821eec4762050d8b/68747470733a2f2f706f7365722e707567782e6f72672f6d6f72746f676f3332312f6c61726176656c2d7175696c6c2f762f737461626c65)](https://packagist.org/packages/mortogo321/laravel-quill)[![Total Downloads](https://camo.githubusercontent.com/c51956b718a673da89107b6fd545ccd90c3b4fddb4f6fdef46a684e90107625a/68747470733a2f2f706f7365722e707567782e6f72672f6d6f72746f676f3332312f6c61726176656c2d7175696c6c2f646f776e6c6f616473)](https://packagist.org/packages/mortogo321/laravel-quill)[![License](https://camo.githubusercontent.com/915ed9264f4bf322b5f7c4eeb3f12c63fa8c119ba043f3f6be1d81f5eeb6417a/68747470733a2f2f706f7365722e707567782e6f72672f6d6f72746f676f3332312f6c61726176656c2d7175696c6c2f6c6963656e7365)](https://packagist.org/packages/mortogo321/laravel-quill)[![PHP Version Require](https://camo.githubusercontent.com/632e457b3629fa68d1016448c5fbb8b36d4b24ff30fb0b924ec4b72f4130c20c/68747470733a2f2f706f7365722e707567782e6f72672f6d6f72746f676f3332312f6c61726176656c2d7175696c6c2f726571756972652f706870)](https://packagist.org/packages/mortogo321/laravel-quill)

Features
--------

[](#features)

- Full support for Quill 2.x
- Blade components for easy integration
- Image upload handling with storage support
- Delta format conversion utilities
- Content sanitization
- Validation rules
- Configurable toolbar presets
- Dark mode support
- CDN or local assets

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

[](#requirements)

- PHP 8.2+
- Laravel 10.x, 11.x, or 12.x

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

[](#installation)

Install the package via Composer:

```
composer require mortogo321/laravel-quill
```

Publish the assets and configuration:

```
# Publish everything
php artisan vendor:publish --tag=quill

# Or publish individually
php artisan vendor:publish --tag=quill-config
php artisan vendor:publish --tag=quill-assets
php artisan vendor:publish --tag=quill-views
```

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

[](#quick-start)

### 1. Include Assets

[](#1-include-assets)

Add the styles and scripts to your layout:

```

    @quillStyles

    @quillScripts

```

### 2. Use the Editor Component

[](#2-use-the-editor-component)

```

    @csrf

    Save

```

### 3. Display Content

[](#3-display-content)

```

```

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

[](#configuration)

The configuration file is located at `config/quill.php`. Key options include:

### Theme

[](#theme)

```
'theme' => 'snow', // or 'bubble'
```

### CDN Settings

[](#cdn-settings)

```
'cdn' => [
    'enabled' => true,
    'version' => '2.0.2',
],
```

### Toolbar Presets

[](#toolbar-presets)

Three built-in presets: `minimal`, `basic`, `full`

```

```

### Custom Toolbar

[](#custom-toolbar)

```

```

### Image Uploads

[](#image-uploads)

Configure upload settings in `config/quill.php`:

```
'uploads' => [
    'enabled' => true,
    'disk' => 'public',
    'path' => 'quill-uploads',
    'max_size' => 2048, // KB
    'allowed_types' => ['image/jpeg', 'image/png', 'image/gif', 'image/webp'],
],
```

Editor Component
----------------

[](#editor-component)

### Available Props

[](#available-props)

PropTypeDefaultDescription`name`stringrequiredForm input name`id`stringautoEditor element ID`value`stringnullInitial content (Delta JSON or HTML)`placeholder`stringconfigPlaceholder text`theme`string'snow'Quill theme ('snow' or 'bubble')`toolbar`string/arrayconfigToolbar preset or custom config`read-only`boolfalseRead-only mode`height`string'300px'Editor height`required`boolfalseHTML5 required attribute`upload-url`stringautoCustom upload endpoint`formats`array\[\]Allowed formats`modules`array\[\]Additional Quill modules`debug`boolfalseEnable debug mode### Examples

[](#examples)

**Basic Editor:**

```

```

**With Initial Content:**

```

```

**Read-Only:**

```

```

**Custom Height:**

```

```

**Bubble Theme:**

```

```

Viewer Component
----------------

[](#viewer-component)

### Available Props

[](#available-props-1)

PropTypeDefaultDescription`content`stringnullContent (Delta JSON or HTML)`delta`arraynullDelta object directly`sanitize`booltrueSanitize HTML output`class`stringnullAdditional CSS classes### Examples

[](#examples-1)

**Display Delta Content:**

```

```

**Display with Custom Class:**

```

```

**Without Sanitization:**

```

```

Validation Rules
----------------

[](#validation-rules)

### QuillContent

[](#quillcontent)

Validate Quill content with length constraints:

```
use Mortogo321\LaravelQuill\Rules\QuillContent;

$request->validate([
    'content' => ['required', new QuillContent(minLength: 10, maxLength: 5000)],
]);

// Using static methods
$request->validate([
    'content' => [QuillContent::required()],
    'summary' => [QuillContent::max(500)],
    'bio' => [QuillContent::between(50, 1000)],
]);
```

### QuillDelta

[](#quilldelta)

Validate Delta structure and allowed formats:

```
use Mortogo321\LaravelQuill\Rules\QuillDelta;

$request->validate([
    'content' => [new QuillDelta()],
]);

// Restrict formats
$request->validate([
    'content' => [QuillDelta::onlyFormats(['bold', 'italic', 'link'])],
]);

// Disallow media
$request->validate([
    'content' => [QuillDelta::withoutImages()],
    'comment' => [QuillDelta::plainTextOnly()],
]);
```

Facade Methods
--------------

[](#facade-methods)

The `Quill` facade provides utility methods:

```
use Mortogo321\LaravelQuill\Facades\Quill;

// Convert Delta to HTML
$html = Quill::deltaToHtml($deltaJson);

// Convert HTML to Delta
$delta = Quill::htmlToDelta($html);

// Sanitize HTML
$clean = Quill::sanitize($html);

// Get configuration
$config = Quill::getConfig('theme');
```

JavaScript API
--------------

[](#javascript-api)

The `LaravelQuill` object is available globally:

```
// Initialize all editors
LaravelQuill.init();

// Get an editor instance
const quill = LaravelQuill.getEditor('quill-content');

// Get content
const delta = LaravelQuill.getContents('quill-content');
const html = LaravelQuill.getHTML('quill-content');

// Set content
LaravelQuill.setContents('quill-content', delta);
LaravelQuill.setContents('quill-content', 'HTML content');

// Enable/disable
LaravelQuill.setEnabled('quill-content', false);

// Focus/blur
LaravelQuill.focus('quill-content');
LaravelQuill.blur('quill-content');
```

### Events

[](#events)

```
document.getElementById('quill-content').addEventListener('quill-init', (e) => {
    console.log('Editor initialized', e.detail.quill);
});

document.getElementById('quill-content').addEventListener('quill-change', (e) => {
    console.log('Content changed', e.detail.delta, e.detail.html);
});
```

Customization
-------------

[](#customization)

### Custom Upload Handler

[](#custom-upload-handler)

Override the upload endpoint:

```

```

### Custom Styling

[](#custom-styling)

Publish the CSS and modify `public/vendor/quill/css/laravel-quill.css`, or use CSS variables:

```
.quill-editor-wrapper {
    --quill-editor-height: 400px;
    --quill-border-color: #e2e8f0;
    --quill-border-radius: 8px;
    --quill-focus-color: #3b82f6;
    --quill-toolbar-bg: #f8fafc;
}
```

Environment Variables
---------------------

[](#environment-variables)

```
QUILL_THEME=snow
QUILL_CDN_ENABLED=true
QUILL_VERSION=2.0.2
QUILL_UPLOAD_DISK=public
QUILL_UPLOAD_PATH=quill-uploads
QUILL_MAX_UPLOAD_SIZE=2048
```

Security
--------

[](#security)

The package includes built-in content sanitization. Configure allowed tags and attributes in `config/quill.php`:

```
'sanitize' => [
    'enabled' => true,
    'allowed_tags' => ['p', 'br', 'strong', 'em', ...],
    'allowed_attributes' => [
        'a' => ['href', 'target', 'rel'],
        'img' => ['src', 'alt', 'width', 'height', 'class'],
        // ...
    ],
],
```

License
-------

[](#license)

MIT License. See [LICENSE](LICENSE) for more information.

Credits
-------

[](#credits)

- [Mor](https://github.com/mortogo321)
- [Quill](https://quilljs.com/)

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance80

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity47

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

Unknown

Total

1

Last Release

152d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/111abf5668131990b02e1b535794c862bf60dd94d688f6f99a2f3f8eaa9732e9?d=identicon)[mortogo321](/maintainers/mortogo321)

---

Top Contributors

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

---

Tags

laraveleditorwysiwygtext-editorrich textquillBlade componentquill2

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/mortogo321-laravel-quill/health.svg)

```
[![Health](https://phpackages.com/badges/mortogo321-laravel-quill/health.svg)](https://phpackages.com/packages/mortogo321-laravel-quill)
```

###  Alternatives

[mati365/ckeditor5-livewire

CKEditor 5 integration for Laravel Livewire

413.9k](/packages/mati365-ckeditor5-livewire)[malzariey/filament-lexical-editor

Implementation of meta's lexical editor in FilamentPHP, a modern, extensible text editor framework.

1516.7k](/packages/malzariey-filament-lexical-editor)[ktquez/laravel-tinymce

TinyMCE editor for Laravel and Lumen Framework

2525.4k](/packages/ktquez-laravel-tinymce)[techguy/laravel-ckeditor

JavaScript WYSIWYG web text editor (for laravel).

1113.5k](/packages/techguy-laravel-ckeditor)

PHPackages © 2026

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