voltra/filament-svg-avatar
Swap Filament’s default avatar URL provider for inline SVG avatars. Eliminates external HTTP requests while allowing global config for size, colors, and font family, with optional view publishing and override controls.
composer require voltra/filament-svg-avatar
php artisan vendor:publish --tag="filament-svg-avatar-config"
PanelProvider:
use Voltra\FilamentSvgAvatar\FilamentSvgAvatarPlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
FilamentSvgAvatarPlugin::make()
->backgroundColor('#3b5998')
->textColor('#e9ebee'),
]);
}
Replace default Gravatar/URL-based avatars with inline SVG avatars (no external HTTP requests). Ideal for:
FilamentSvgAvatarPlugin::make()
->backgroundColor('#ff0000') // Override globally
->textColor('#ffffff')
->svgSize(600); // Optional: Adjust SVG dimensions
PanelProvider:
->defaultAvatarProvider(\Voltra\FilamentSvgAvatar\Filament\AvatarProviders\RawSvgAvatarProvider::class)
php artisan vendor:publish --tag=filament-svg-avatar-core-overrides
use Voltra\FilamentSvgAvatar\Filament\AvatarProviders\SvgAvatarsProviders;
SvgAvatarsProviders::make()
->backgroundColor('#00ff00') // Override for specific resources
->textColor('#000000');
SvgAvatarServiceContract:
class CustomSvgAvatarService implements SvgAvatarServiceContract {
public function generateSvg(string $initials, array $config): string {
// Custom SVG logic (e.g., add icons, shapes)
return '<svg>...</svg>';
}
}
$this->app->scoped(SvgAvatarServiceContract::class, CustomSvgAvatarService::class);
Font Availability:
config(['filament-svg-avatar.fontFamily' => 'sans-serif']) or embed fonts via CSS.Plugin vs. Provider Conflicts:
FilamentSvgAvatarPlugin and a custom provider, register the provider after the plugin:
->plugins([FilamentSvgAvatarPlugin::make()])
->defaultAvatarProvider(CustomProvider::class);
Caching Issues:
Cache::remember("svg_avatar_{$userId}", now()->addHours(1), fn() => $svg);
Migration Quirks:
php artisan vendor:publish --tag=filament-svg-avatar-core-overrides --force
src/alt attribute leaks).\Log::info('SVG Avatar Config:', config('filament-svg-avatar'));
php artisan filament:serve to test changes without deploying.Custom SVG Templates:
resources/views/vendor/filament-svg-avatar/avatar.blade.php template to modify SVG structure.<svg ... style="filter: drop-shadow(0 0 4px rgba(0,0,0,0.3));">
Dynamic Colors:
$color = User::find($userId)->theme_color ?? '#3b5998';
FilamentSvgAvatarPlugin::make()->backgroundColor($color);
Fallback Logic:
filament-support to handle missing avatars:
use Filament\Support\Facades\FilamentSupport;
FilamentSupport::avatar($user)->defaultImage('placeholder.svg');
svgSize in config (default: 500) to 300 for faster rendering.aria-label for screen readers:
<svg aria-label="{{ $user->name }} avatar" ...>
How can I help you explore Laravel packages today?