`LayupPlugin` is the main entry point for customizing Layup at the Filament panel level. Every method on the plugin is fluent and returns `$this`, so you can chain them in your panel provider.

```php
use Crumbls\Layup\LayupPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            LayupPlugin::make()
                ->widgets([\App\Layup\Widgets\HeroBlock::class])
                ->withoutWidgets([\Crumbls\Layup\View\EmbedWidget::class])
                ->colors(['primary' => '#3b82f6'])
                ->fonts(['heading' => 'Playfair Display, serif'])
                ->borderRadius('0.5rem'),
        ]);
}
```

Use one plugin instance per panel. Different panels can have completely different widget sets, themes, and configurations.

## Widget management

### `widgets(array $widgets): static`

Register additional widget classes alongside the ones loaded from `config/layup.php`.

```php
LayupPlugin::make()->widgets([
    \App\Layup\Widgets\HeroBlock::class,
    \App\Layup\Widgets\TestimonialCarousel::class,
])
```

Combine with auto-discovery (set `widget_discovery.namespace` in config) when you want the package to scan a directory for you. See [Custom widgets](custom-widgets.md).

### `withoutWidgets(array $widgets): static`

Remove widget types from the picker. Pass the widget class name -- the plugin resolves the type and unregisters it.

```php
LayupPlugin::make()->withoutWidgets([
    \Crumbls\Layup\View\EmbedWidget::class,
    \Crumbls\Layup\View\CodeWidget::class,
])
```

Useful for locking down the editor to a curated subset of widgets, or removing widgets that conflict with your security policy (e.g., raw HTML).

### `withoutConfigWidgets(): static`

Skip loading widgets from `config/layup.php` entirely. Combine with `widgets()` to ship a strictly-curated widget set.

```php
LayupPlugin::make()
    ->withoutConfigWidgets()
    ->widgets([
        \App\Layup\Widgets\Heading::class,
        \App\Layup\Widgets\Paragraph::class,
        \App\Layup\Widgets\Image::class,
    ])
```

This is the cleanest way to ship a "minimal" editor with only your own widgets.

## Theme

### `colors(array $colors): static`

Set the theme colors used by built-in widgets and surfaced as CSS custom properties (`--layup-color-primary`, etc.). Merges with any colors inherited from the Filament panel.

```php
LayupPlugin::make()->colors([
    'primary' => '#3b82f6',
    'secondary' => '#10b981',
    'accent' => '#f59e0b',
])
```

### `darkColors(array $colors): static`

Override dark mode colors. Any color you do not specify here is auto-lightened from its light-mode counterpart.

```php
LayupPlugin::make()
    ->colors(['primary' => '#1e40af'])
    ->darkColors(['primary' => '#60a5fa'])
```

### `fonts(array $fonts): static`

Set font families for the theme. Standard keys are `heading` and `body`, but you can use any key your widgets reference.

```php
LayupPlugin::make()->fonts([
    'heading' => 'Playfair Display, serif',
    'body' => 'Inter, sans-serif',
])
```

### `borderRadius(string $radius): static`

Set the global default border radius. Accepts any valid CSS length (`'0'`, `'0.5rem'`, `'8px'`).

```php
LayupPlugin::make()->borderRadius('0.5rem')
```

### `withoutPanelColors(): static`

By default, Layup inherits the Filament panel's color palette so the editor matches your admin UI. Call this method to disable that inheritance and use only the colors you set explicitly via `colors()`.

```php
LayupPlugin::make()
    ->withoutPanelColors()
    ->colors(['primary' => '#000000'])
```

For the full theme system (CSS custom properties, dark mode generation, the `LayupTheme` singleton), see [Theme system](theme-system.md).

## Multiple panels

Each Filament panel gets its own `LayupPlugin` instance. You can configure them independently:

```php
// AdminPanelProvider.php
LayupPlugin::make()
    ->colors(['primary' => '#1e40af'])
    ->widgets([\App\Layup\Widgets\AdminOnly::class])

// MarketingPanelProvider.php
LayupPlugin::make()
    ->colors(['primary' => '#10b981'])
    ->withoutWidgets([\Crumbls\Layup\View\CodeWidget::class])
```

If you also need separate page tables per panel, see [Swapping the Page model](swapping-the-page-model.md).

---

## Documentation

- [Introduction](https://documentation.crumbls.com/layup/-/index.md)
- [Introduction](https://documentation.crumbls.com/layup/-/introduction.md)
- [v1](https://documentation.crumbls.com/layup/-/_index.md)
- [Installation](https://documentation.crumbls.com/layup/-/installation.md)
- [Contributing to Layup](https://documentation.crumbls.com/layup/-/CONTRIBUTING.md)
- [Usage](https://documentation.crumbls.com/layup/-/usage.md)
- [Configuration](https://documentation.crumbls.com/layup/-/configuration.md)
- [Examples](https://documentation.crumbls.com/layup/-/examples.md)
- [Grid System](https://documentation.crumbls.com/layup/-/grid-system.md)
- [Field-only Installation](https://documentation.crumbls.com/layup/-/field-only-installation.md)
- [Embedding the Field](https://documentation.crumbls.com/layup/-/embedding-the-field.md)
- [Widgets](https://documentation.crumbls.com/layup/-/widgets/_index.md)
- [Getting Started](https://documentation.crumbls.com/layup/-/getting-started/_index.md)
- [Customization](https://documentation.crumbls.com/layup/-/customization/_index.md)
- [API Reference](https://documentation.crumbls.com/layup/-/api-reference/_index.md)
- [Upgrade guide](https://documentation.crumbls.com/layup/-/upgrade-guide.md)
- [Troubleshooting](https://documentation.crumbls.com/layup/-/troubleshooting.md)
- [Changelog](https://documentation.crumbls.com/layup/-/CHANGELOG.md)
- [🔐 Security Policy](https://documentation.crumbls.com/layup/-/SECURITY.md)
- [The MIT License (MIT)](https://documentation.crumbls.com/layup/-/LICENSE.md)
- [Layup Widget Development Guide for AI Agents](https://documentation.crumbls.com/layup/-/AGENTS.md)
- [Layup — Sprint TODO (overnight Feb 23-24)](https://documentation.crumbls.com/layup/-/TODO.md)
- [Vision](https://documentation.crumbls.com/layup/-/VISION.md)
- [Content Widgets](https://documentation.crumbls.com/layup/-/widgets/content.md)
- [Media Widgets](https://documentation.crumbls.com/layup/-/widgets/media.md)
- [Interactive Widgets](https://documentation.crumbls.com/layup/-/widgets/interactive.md)
- [Layout Widgets](https://documentation.crumbls.com/layup/-/widgets/layout.md)
- [Advanced Widgets](https://documentation.crumbls.com/layup/-/widgets/advanced.md)
- [Creating Pages](https://documentation.crumbls.com/layup/-/getting-started/creating-pages.md)
- [Adding Widgets](https://documentation.crumbls.com/layup/-/getting-started/adding-widgets.md)
- [Saving and Publishing](https://documentation.crumbls.com/layup/-/getting-started/publishing.md)
- [Disable the Pages Resource](https://documentation.crumbls.com/layup/-/customization/disable-pages-resource.md)
- [Rendering Content](https://documentation.crumbls.com/layup/-/customization/rendering-content.md)
- [Frontend Rendering](https://documentation.crumbls.com/layup/-/customization/frontend-rendering.md)
- [Creating Custom Widgets](https://documentation.crumbls.com/layup/-/customization/custom-widgets.md)
- [Extending Existing Widgets](https://documentation.crumbls.com/layup/-/customization/extending-widgets.md)
- [Livewire-rendered widgets](https://documentation.crumbls.com/layup/-/customization/livewire-widgets.md)
- [Theme System](https://documentation.crumbls.com/layup/-/customization/theme-system.md)
- [Tailwind Safelist](https://documentation.crumbls.com/layup/-/customization/tailwind-safelist.md)
- [SEO Meta](https://documentation.crumbls.com/layup/-/customization/seo-meta.md)
- [Page Templates](https://documentation.crumbls.com/layup/-/customization/page-templates.md)
- [Revision History](https://documentation.crumbls.com/layup/-/customization/revision-history.md)
- [Swapping the Page Model](https://documentation.crumbls.com/layup/-/customization/swapping-the-page-model.md)
- [Testing](https://documentation.crumbls.com/layup/-/customization/testing.md)
- [Widget Contract](https://documentation.crumbls.com/layup/-/api-reference/widget-contract.md)
- [Models](https://documentation.crumbls.com/layup/-/api-reference/models.md)
- [Service Provider](https://documentation.crumbls.com/layup/-/api-reference/service-provider.md)
- [Support Classes](https://documentation.crumbls.com/layup/-/api-reference/support-classes.md)
- [Commands](https://documentation.crumbls.com/layup/-/api-reference/commands.md)
