PHPackages                             richtext-core-laravel/laravel - 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. richtext-core-laravel/laravel

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

richtext-core-laravel/laravel
=============================

Official Laravel Blade integration for the Eddyter rich text editor.

v0.0.6(2w ago)06MITPHPPHP ^8.1

Since Jun 12Pushed 2w agoCompare

[ Source](https://github.com/samlik-craxinno/eddyter-laravel-package)[ Packagist](https://packagist.org/packages/richtext-core-laravel/laravel)[ RSS](/packages/richtext-core-laravel-laravel/feed)WikiDiscussions master Synced 1w ago

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

eddyter/laravel
===============

[](#eddyterlaravel)

[![Packagist Version](https://camo.githubusercontent.com/edf6f5b658f7f1f919ffa891783a2252cf6ced00fab8819af4f39aefeeb63a16/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f656464797465722f6c61726176656c2e737667)](https://packagist.org/packages/eddyter/laravel)

Official Laravel Blade integration for the [Eddyter](https://eddyter.com) AI rich text editor — built on [Lexical](https://lexical.dev/) with form binding, dark mode support, and API key authentication.

Drop a full-featured rich text editor into any Blade form with a single component. No React, Vite, or Node.js required in your Laravel app.

[![Eddyter Editor](https://camo.githubusercontent.com/c1672e59dcaa59a184c64caa44056f2241e4deedfdbbf8fb6927c93d13a98f2d/68747470733a2f2f6473636b6a36347230757371672e636c6f756466726f6e742e6e65742f6173736574732f73656f2d73637265656e2e706e67)](https://camo.githubusercontent.com/c1672e59dcaa59a184c64caa44056f2241e4deedfdbbf8fb6927c93d13a98f2d/68747470733a2f2f6473636b6a36347230757371672e636c6f756466726f6e742e6e65742f6173736574732f73656f2d73637265656e2e706e67)

Resources
---------

[](#resources)

- [Docs](https://eddyter.com/docs) — Full API reference and integration guides
- [What is Eddyter? Why Developers Are Switching to This AI Editor (2026)](https://youtu.be/oNHBa-DImZc) — YouTube
- [Integrate Eddyter in 30 Minutes Using AI Tools Cursor, Claude, Lovable](https://youtu.be/5lTjRFjUWgs) — YouTube

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

[](#requirements)

RequirementVersionPHP8.1+Laravel10.x, 11.x, 12.x, 13.xBrowsersEvergreen (Chrome, Edge, Firefox, Safari)The editor SDK is loaded automatically from a version pinned by this package — you never manage SDK versions, CDN URLs, or asset files yourself.

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

[](#installation)

```
composer require eddyter/laravel
php artisan eddyter:install
```

That's it. The install command publishes the required bridge script to `public/vendor/eddyter/`.

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

[](#quick-start)

### 1. Get your API key

[](#1-get-your-api-key)

1. Create an account at [eddyter.com](https://www.eddyter.com/)
2. Navigate to [License Keys](https://www.eddyter.com/user/license-key) in your dashboard
3. Copy your API key

### 2. Add the key to `.env`

[](#2-add-the-key-to-env)

```
EDDYTER_API_KEY=your_browser_key
```

This key is passed to the browser and validated automatically by Eddyter.

### 3. Add the directives to your layout

[](#3-add-the-directives-to-your-layout)

```

    {{ config('app.name') }}

    @eddyterStyles

    @yield('content')

    @eddyterScripts

```

- `@eddyterStyles` — editor stylesheet, place in ``
- `@eddyterScripts` — editor SDK + Laravel bridge, place before ``

Both directives are duplicate-safe; calling them more than once will not output duplicate tags.

### 4. Use the editor in a form

[](#4-use-the-editor-in-a-form)

```

    @csrf

    Save

```

The editor synchronizes its HTML into a hidden textarea, so standard Laravel form submission just works.

### 5. Validate in your controller

[](#5-validate-in-your-controller)

```
public function store(Request $request)
{
    $validated = $request->validate([
        'body' => ['required', 'string'],
    ]);

    Post::create($validated);

    return redirect()->route('posts.index');
}
```

Usage Examples
--------------

[](#usage-examples)

### Edit form with existing content

[](#edit-form-with-existing-content)

```

```

Validation old input is repopulated automatically — nested names included.

### Nested field names

[](#nested-field-names)

```

```

Laravel receives normal nested request data (`$request->input('post.body')`).

### Multiple editors on one page

[](#multiple-editors-on-one-page)

```

```

Each editor gets a unique auto-generated ID.

### With authenticated user (comments &amp; mentions)

[](#with-authenticated-user-comments--mentions)

```

```

### Preview mode (read-only)

[](#preview-mode-read-only)

```

```

### Dark mode

[](#dark-mode)

```

```

Omit the prop to auto-detect a `.dark` class on `` or ``.

### Livewire

[](#livewire)

Wrap the editor in `wire:ignore` so Livewire re-renders don't destroy it:

```

```

Component Props
---------------

[](#component-props)

PropTypeDefaultDescription`name``string`**required**Form field name (supports `post[body]` notation)`id``string`auto-generatedTextarea ID`value``string``null`Initial HTML content`api-key``string``config('eddyter.api_key')`Overrides the global API key`height``string``400px`Minimum editor height`user``array``null`Current user (`id`, `name`, `email`, `avatar`)`mode``string``null``edit` or `preview``dark-mode``bool``null`Explicit dark mode; omit to auto-detect`editor-class``string``null`Class on the editor wrapper`container-class``string``null`Class on the preview container`content-class``string``null`Class on the editable content area`floating-toolbar-class``string``null`Class on the floating toolbar`style``array``null`Inline styles`toolbar``array``null``['mode' => 'sticky'|'static', 'offset' => 20, 'zIndex' => 1000]``editor-options``array``null``['maxHeight' => '600px']``default-font-families``array``null`Font selector list`mention-user-list``array``null`Names for `@mention` suggestions`enable-react-native-bridge``bool``null`RN WebView bridge`verify-key-url``string``null`Optional custom key verification URL`options``array``[]`Catch-all for any SDK optionExtra HTML attributes (e.g. `class`, `wire:ignore`) are forwarded to the editor container.

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

[](#configuration)

The only environment variable you need:

```
EDDYTER_API_KEY=your_browser_key
```

### Global editor defaults (optional)

[](#global-editor-defaults-optional)

Publish the config file:

```
php artisan eddyter:install --config
```

Then set defaults in `config/eddyter.php` — applied to every editor, overridable per component:

```
return [
    'api_key' => env('EDDYTER_API_KEY'),

    'defaults' => [
        'toolbar' => [
            'mode' => 'sticky',
            'offset' => 64,
        ],
        'mentionUserList' => ['Alice', 'Bob'],
    ],
];
```

Config precedence (lowest to highest): global `defaults` → `:options` array → explicit component props.

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

[](#javascript-api)

After `@eddyterScripts` loads, `window.EddyterLaravel` is available:

```
EddyterLaravel.initAll();                          // init dynamically added editors
EddyterLaravel.init(rootElementOrId);              // init one editor
EddyterLaravel.getInstance(rootElementOrId);       // get SDK instance
EddyterLaravel.update(rootElementOrId, options);   // e.g. { darkMode: true }
EddyterLaravel.destroy(rootElementOrId);           // unmount an editor
```

Call `EddyterLaravel.initAll()` after injecting new HTML (Turbo, HTMX, AJAX fragments).

### Custom events

[](#custom-events)

All events bubble from the editor root element:

EventDetail`eddyter:ready``{ instance }``eddyter:change``{ html, instance }``eddyter:focus``{ instance }``eddyter:blur``{ instance }``eddyter:height-change``{ height, instance }``eddyter:auth-success``{ instance }``eddyter:auth-error``{ error, instance }``eddyter:preview-click``{ instance }````
document.addEventListener('eddyter:change', (e) => {
  console.log('HTML:', e.detail.html);
});
```

Advanced: Optional Key Verification
-----------------------------------

[](#advanced-optional-key-verification)

By default, Eddyter validates `EDDYTER_API_KEY` automatically — no Laravel route needed and nothing to configure.

If your application wants its own pre-verification endpoint, pass `verify-key-url`:

```

```

Your route must return:

```
{ "success": true, "message": "Verified" }
```

The request includes the CSRF token when a `` tag is present. This package does **not** ship a verification route or controller.

Alternatively, register a global JavaScript handler (takes precedence over `verify-key-url`):

```
EddyterLaravel.registerVerifyKeyHandler(async (apiKey) => {
  const response = await fetch('/api/verify-key', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ apiKey }),
  });

  return response.json();
});
```

Which package should I use?
---------------------------

[](#which-package-should-i-use)

StackPackageLaravel Blade (server-rendered forms)**`eddyter/laravel`** (this package)Laravel + Inertia + Vue[`@eddyter/vue`](https://www.npmjs.com/package/@eddyter/vue)Laravel + Inertia + React[`eddyter`](https://www.npmjs.com/package/eddyter)Vue / Nuxt[`@eddyter/vue`](https://www.npmjs.com/package/@eddyter/vue)Svelte / SvelteKit[`@eddyter/svelte`](https://www.npmjs.com/package/@eddyter/svelte)Angular[`@eddyter/angular`](https://www.npmjs.com/package/@eddyter/angular)Troubleshooting
---------------

[](#troubleshooting)

SymptomFixEditor area is blankRun `php artisan eddyter:install` and confirm `@eddyterScripts` is in your layoutToolbar looks unstyledConfirm `@eddyterStyles` is in ``Console: "Eddyter SDK is not loaded"`@eddyterScripts` must be in the layout that renders the editorForm submits empty contentDon't remove the hidden textarea; check the browser console for init errorsOld input not repopulatingUse `:value="old('body', $post->body ?? '')"`Editor destroyed by Livewire updateWrap the component in `wire:ignore`API key errorsCheck `EDDYTER_API_KEY` in `.env`, then run `php artisan config:clear`License
-------

[](#license)

Eddyter is proprietary software.

- Commercial use requires a paid license

For commercial licensing, visit [eddyter.com](https://www.eddyter.com/).

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance98

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity36

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

Every ~8 days

Total

5

Last Release

14d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/102540845?v=4)[samlik](/maintainers/samlik)[@Samlik](https://github.com/Samlik)

---

Top Contributors

[![samlik-craxinno](https://avatars.githubusercontent.com/u/270713071?v=4)](https://github.com/samlik-craxinno "samlik-craxinno (6 commits)")

### Embed Badge

![Health badge](/badges/richtext-core-laravel-laravel/health.svg)

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

###  Alternatives

[tallstackui/tallstackui

TallStackUI is a powerful suite of Blade components that elevate your workflow of Livewire applications.

728176.2k14](/packages/tallstackui-tallstackui)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9762.4M134](/packages/roots-acorn)[moonshine/moonshine

Laravel administration panel

1.3k253.1k86](/packages/moonshine-moonshine)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M348](/packages/psalm-plugin-laravel)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M250](/packages/laravel-ai)[pressbooks/pressbooks

Pressbooks is an open source book publishing tool built on a WordPress multisite platform. Pressbooks outputs books in multiple formats, including PDF, EPUB, web, and a variety of XML flavours, using a theming/templating system, driven by CSS.

45444.2k1](/packages/pressbooks-pressbooks)

PHPackages © 2026

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