Разработка · 6 мин чтения

Laravel Nova админка или Filament: что выбрать для проекта

За четыре года заказной разработки на Laravel я собирал панели администратора минимум пятью разными способами: руками на Blade, на связке Vue плюс API, на пакетах вроде Backpack, и, конечно, на Laravel Nova и Filament. Если сравнивать по деньгам, скорости разработки и тому, что происходит с проектом через год поддержки, разница между Laravel Nova админкой и Filament куда серьёзнее, чем кажется по рекламным постам в блогах.

Что такое Laravel Nova админка и чем от неё отличается Filament

Nova - официальный пакет от команды Laravel, платный, с закрытым исходным кодом фронтенда. Внутри - SPA на Vue, которое ставится поверх артисан-команд вашего приложения и общается с бэкендом через собственный API-слой. Ставили Nova клиентам, которым нужна была предсказуемая, фирменная админка без сюрпризов - и её действительно не было.

Filament - open-source пакет на Livewire, Alpine.js и Tailwind, полностью бесплатный по MIT-лицензии. Он не тянет отдельный фронтенд-стек: всё рендерится на сервере через Livewire-компоненты, а интерактивность добавляет Alpine. Для меня как для бэкенд-разработчика это ощутимая разница: не нужно держать в голове ещё один JS-фреймворк, весь код резолвится в PHP-классах.

Параметр Laravel Nova Filament
Лицензия Платная, на сайт или пожизненная Бесплатная, MIT
Стек фронтенда Vue (SPA) Livewire + Alpine + Tailwind
Открытый код Только исходники для кастомизации, ядро закрыто Полностью открыт на GitHub
Первый релиз 2018 2021 (v1), сейчас v3
Порог входа Ниже, если знаком с Vue-компонентами Nova Ниже для тех, кто и так пишет на Blade/Livewire

Стоимость лицензии Laravel Nova и совокупная цена владения

Цена лицензии Nova считается по сайтам - актуальные цифры смотрите на официальном сайте Laravel Nova, но по порядку величины это единицы сотен долларов за сайт или разовый платёж за пожизненную лицензию с бессрочным использованием и годом обновлений. Для одного внутреннего проекта сумма не критична, но если у агентства десяток клиентских бэкендов на Nova, лицензии превращаются в постоянную статью расходов.

Filament в этом смысле проще: панель бесплатна, платить можно разве что за платные плагины экосистемы (например, продвинутый billing или spatie-интеграции), но базовый CRUD, формы, таблицы и дашборды - всё без лицензионных ограничений.

Совокупная цена владения складывается не только из лицензии. Я считаю трудозатраты: на типовой внутренний бэкенд с 10-15 ресурсами (заказы, товары, пользователи, статусы оплаты) и на Nova, и на Filament уходит примерно одинаковое время - 3-5 рабочих дней на MVP-версию. Разница вылезает на кастомных виджетах и нестандартных полях: с Filament я трачу меньше времени, потому что не упираюсь в закрытый API компонентов Nova и могу переопределить любой Livewire-компонент напрямую.

Установка и первые впечатления от настройки панели

Установка Filament - одна команда через composer и артисан:

composer require filament/filament
php artisan filament:install --panels
php artisan make:filament-user

Панель уже доступна по адресу /admin, остаётся сгенерировать ресурсы под модели:

php artisan make:filament-resource Order --generate

У Nova установка похожа по духу, но требует привязки composer-репозитория с логином и паролем от лицензии:

composer config repositories.nova '{"type": "composer", "url": "https://nova.laravel.com"}'
composer require laravel/nova
php artisan nova:install
php artisan nova:user

На старте проекта это лишний шаг: нужно завести аккаунт на nova.laravel.com, привязать лицензию к composer auth.json, и только потом собирать образ для CI - на первом деплое я пару раз терял час именно на этом.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Ресурсы, поля и формы: как выглядит код на практике

Вот ресурс заказа на Filament - форма и таблица описываются в одном классе, декларативно:

public static function form(Form $form): Form
{
    return $form->schema([
        TextInput::make('number')->disabled(),
        Select::make('status')
            ->options(OrderStatus::class)
            ->required(),
        TextInput::make('total')->numeric()->prefix('₽'),
    ]);
}

public static function table(Table $table): Table
{
    return $table->columns([
        TextColumn::make('number')->searchable(),
        BadgeColumn::make('status'),
        TextColumn::make('total')->money('rub'),
    ]);
}

Аналог на Nova чуть многословнее и завязан на собственные классы полей:

public function fields(NovaRequest $request)
{
    return [
        Text::make('Number')->readonly(),
        Select::make('Status')->options(OrderStatus::asSelectArray()),
        Currency::make('Total')->currency('RUB'),
    ];
}

По синтаксису разница небольшая, но Filament даёт схему формы и таблицы как отдельные независимые методы, что удобно для переиспользования между несколькими ресурсами - в проекте с интернет-магазином я выносил общий блок полей адреса доставки в трейт и подключал его и к заказам, и к возвратам.

Расширяемость: пакеты, плагины и интеграции с внешними сервисами

У Nova есть маркетплейс инструментов (Nova Tools), но большая часть полезных - платные, и их поддержка часто отстаёт от актуальной версии Laravel на месяц-два после релиза.

У Filament экосистема плагинов заметно шире и почти вся бесплатная: готовые виджеты для spatie/laravel-permission, экспорт в Excel, билдеры конструкторов страниц, интеграции с S3. На одном из проектов я подключал к Filament-панели статусы оплаты из T‑Bank эквайринга и статусы доставки СДЭК - оба кастомных виджета уложились в пару дней, потому что Livewire-компонент легко переопределить без танцев с Vue-сборкой, как пришлось бы делать в Nova.

Если нужна не типовая CRUD-панель, а бэкенд с нестандартной логикой - очередями, вебхуками от эквайринга, синхронизацией остатков - обычно проще сразу заказать разработку бэкенда на Laravel под конкретные процессы, а не пытаться уместить всю бизнес-логику в стандартные ресурсы админки.

Производительность, стек и удобство ежедневной работы

Nova компилирует отдельный Vue-бандл, и при апгрейде Laravel до новой мажорной версии иногда приходится ждать, пока команда Nova выпустит совместимую сборку - на переходе на Laravel 11 я ждал апдейта пакета около трёх недель, пока часть кастомных полей не начала падать с ошибками в консоли браузера.

Filament живёт внутри того же PHP-процесса, что и всё приложение: нет отдельной сборки ассетов под конкретную версию фреймворка, обновления Laravel обычно проходят без сюрпризов. Из минусов - Livewire делает запрос на сервер при каждом взаимодействии с формой, и на слабом хостинге с медленным PHP-FPM это ощущается на больших формах с 20+ полями, особенно если валидация цепляет несколько связанных таблиц.

По UI обе панели выглядят современно и настраиваются под брендинг клиента: логотип, цветовая схема, кастомные иконки - без проблем в обоих случаях.

Когда я беру Nova, а когда Filament - практические кейсы

  • Внутренняя CRM для B2B-клиента с готовым бюджетом на лицензии и требованием фирменного UI - брал Nova, клиента устраивала предсказуемость и официальная поддержка от команды Laravel.
  • Админка интернет-магазина с нестандартными сущностями (промокоды, партнёрские ссылки, статусы возвратов) - Filament, потому что кастомные ресурсы и виджеты собираются быстрее без ограничений закрытого API.
  • Стартап с ограниченным бюджетом на MVP - всегда Filament: экономия на лицензии напрямую снижает смету на бэкенд, который у меня стартует от 100 000 ₽.
  • Проект, где заказчик уже держит несколько сайтов на Nova и не хочет учить команду новому стеку - оставляю Nova ради консистентности между проектами.

Общее правило, которое сложилось на практике: если панель - типовой CRUD с несколькими десятками ресурсов и бюджет на лицензии не проблема, Nova не подведёт. Если нужно быстро прототипировать, часто менять логику форм и не платить за каждый новый сайт клиента, Filament выигрывает по деньгам и скорости итераций.

API и серверная часть под SPA

API / Бэкенд

от 100 000 ₽

Подробнее →

Частые вопросы

Можно ли пользоваться Laravel Nova бесплатно?

Нет, Nova распространяется по платной лицензии на сайт или как разовый платёж за пожизненное использование с годом обновлений - актуальную цену смотрите на официальном сайте пакета. Бесплатной версии или триала без ограничений функций у Nova нет.

Filament подходит для сложных корпоративных панелей с десятками ролей?

Да, я собирал на Filament панели с гибкой системой ролей через spatie/laravel-permission, множественными панелями (отдельно для админов и для менеджеров) и вложенными ресурсами - ограничений по масштабу на практике не встречал, всё упирается в архитектуру самого приложения, а не в возможности пакета.

Можно перейти с Nova на Filament без переписывания всего проекта?

Модели и бизнес-логика останутся без изменений, но ресурсы, поля и формы придётся переписать заново под синтаксис Filament - это не автоматическая миграция. На проекте среднего размера с 15-20 ресурсами перенос занимает обычно полторы-две недели работы одного разработчика.

Что проще освоить разработчику без опыта с Livewire?

Nova ближе тем, кто уже писал на Vue и знаком с компонентным подходом на фронтенде. Filament быстрее осваивают разработчики, которые пишут преимущественно на Blade и PHP - Livewire в этом случае воспринимается как естественное продолжение привычного стека, а не отдельная технология для изучения.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно