spatie/filament-simple-stats
Opinionated prebuilt stat widgets for Filament dashboards. Quickly add counts and sums with ready-made Stat widgets powered by Flowframe/laravel-trend, including last 30 days trends (daily/weekly) for models and fields.
Installation (Laravel 10/11/13 compatible):
composer require spatie/filament-simple-stats
Publish the config (if needed):
php artisan vendor:publish --provider="Spatie\FilamentSimpleStats\FilamentSimpleStatsServiceProvider"
First Use Case (Laravel 13+ compatible): Add a stat to a Filament dashboard resource or page:
use Spatie\FilamentSimpleStats\Stat;
public static function getStats(): array
{
return [
Stat::make('Total Users', 'users_count')
->model(User::class),
Stat::make('Active Users', 'active_users_count')
->query(fn () => User::where('last_active_at', '>', now()->subDays(7))->count()),
];
}
Data Source:
Define a getStats() or getWidgets() method in your dashboard/resource class. The package now supports inline laravel-trend (no separate package required for trends).
Basic Model Stats (Laravel 13+):
Stat::make('Orders', 'orders_count')
->model(Order::class)
->description('Total orders in the system');
Order::count() and caches results (configurable).Custom Queries (Laravel 13+):
Stat::make('Revenue', 'revenue')
->query(fn () => Order::sum('amount'))
->description('Total revenue (USD)');
Trend Integration (now inline with laravel-trend):
Stat::make('Monthly Users', 'monthly_users')
->model(User::class)
->trend() // No separate package needed
->description('New users per month');
created_at column (no additional setup for laravel-trend).Dashboard Integration (Laravel 13+):
public static function getWidgets(): array
{
return [
StatWidget::make('Sales Overview', [
Stat::make('Total Sales', 'sales_count')
->model(Order::class),
Stat::make('Avg. Sale', 'avg_sale')
->query(fn () => Order::avg('amount')),
]),
];
}
Stat::make('Users', 'users_count')
->description(fn () => "Total users: " . User::count());
Stat::make('Users', 'users_count')
->icon('heroicon-o-users');
StatWidget::make('User Metrics', [
Stat::make('Total Users', 'users_count'),
Stat::make('Active Users', 'active_users_count'),
]);
Missing getStats()/getWidgets() Method:
getStats() or getWidgets().Stat instances.Trend Data Requirements:
created_at column is required for trends (no additional package needed).created_at timestamp.Caching Issues:
php artisan cache:clear
Stat::make('Live Users', 'live_users')->cache(false);
Laravel 13+ Compatibility:
config/app.php includes:
'providers' => [
// ...
Spatie\FilamentSimpleStats\FilamentSimpleStatsServiceProvider::class,
],
Log Stat Queries:
Enable debug mode in config/filament-simple-stats.php:
'debug' => env('STATS_DEBUG', false),
storage/logs/filament-simple-stats.log.Check Config:
Verify config/filament-simple-stats.php for customizations (e.g., cache duration, default icons).
Custom Stat Classes:
Extend Spatie\FilamentSimpleStats\Stat for reusable logic:
class RevenueStat extends Stat
{
public function __construct()
{
parent::__construct('Revenue', 'revenue');
$this->query(fn () => Order::sum('amount'));
}
}
Override Defaults: Publish the config and modify:
php artisan vendor:publish --tag="filament-simple-stats-config"
cache_duration, default_icon, or trend_options.Localization: Translate stat labels/descriptions using Filament’s localization:
Stat::make('Users', 'users_count')
->label(__('stats.users'))
->description(__('stats.total_users'));
laravel-trend Package Needed:
Trends are now bundled inline—no additional composer require is required.bootstrap/app.php includes:
$app->register(\Spatie\FilamentSimpleStats\FilamentSimpleStatsServiceProvider::class);
How can I help you explore Laravel packages today?