Uppy Upload Form Field
A powerful chunked file upload field for Filament 4 & 5 using Uppy.js
Author:
Spykapps
Documentation
- Features
- Installation
- Usage
- Panel Plugin (optional)
- Configuration
- Companion Server (for remote sources)
- Translations
- Credits
- License

A powerful chunked file upload field for Filament 4 & 5 using Uppy.js.
#Features
- Chunked uploads — large files through Cloudflare/nginx (5MB chunks)
- S3 compatible — any Laravel disk: local, public, S3, GCS, DO Spaces
- Remote sources — Google Drive, OneDrive, Dropbox via Companion
- Built-in plugins — Webcam, Screen Capture, Audio, Image Editor, Compressor
- Multilingual — 11 languages included, auto-detects locale
- Dark mode — follows Filament theme, not OS
- Modal support — proper z-index in Filament modals
- Single & multiple — smart UI for both modes
- Zero build step — CDN-loaded, no npm needed
#Installation
composer require spykapps/filament-uppy-upload
Publish and register Filament assets:
php artisan filament:assets
#Publishing (optional)
Publish config:
php artisan vendor:publish --tag="uppy-upload-config"
This creates config/uppy-upload.php where you can set defaults for disk, directory, chunk size, companion URL, and more.
Publish translations:
php artisan vendor:publish --tag="uppy-upload-translations"
This creates lang/vendor/uppy-upload/{locale}/uppy.php files for all included languages. Edit them to customize any string.
Publish views:
php artisan vendor:publish --tag="uppy-upload-views"
This creates resources/views/vendor/uppy-upload/ so you can customize the Blade template and CSS.
Publish everything at once:
php artisan vendor:publish --provider="SpykApp\UppyUpload\UppyUploadServiceProvider"
#Usage
#Basic (single file)
use SpykApp\UppyUpload\Forms\Components\UppyUpload;
UppyUpload::make('document')
->directory('documents')
#Multiple files
UppyUpload::make('attachments')
->multiple()
->maxFiles(10)
->directory('attachments')
#Image upload with editor
UppyUpload::make('avatar')
->image()
->imageEditor()
->maxFileSize(5 * 1024 * 1024)
->directory('avatars')
#S3 upload
UppyUpload::make('files')
->disk('s3')
->directory('uploads')
->multiple()
#With remote sources
UppyUpload::make('files')
->companionUrl('https://companion.yoursite.com')
->remoteSources(['GoogleDrive', 'OneDrive', 'Url'])
->directory('imports')
#ZIP files only
UppyUpload::make('archive')
->acceptedFileTypes(['application/zip', 'application/x-zip-compressed'])
->maxFileSize(500 * 1024 * 1024)
->directory('archives')
#All options
UppyUpload::make('files')
->disk('s3') // Any Laravel disk
->directory('uploads') // Storage directory
->multiple() // Allow multiple files
->maxFiles(20) // Max number of files
->minFiles(1) // Min number of files
->maxFileSize(100 * 1024 * 1024) // 100MB max per file
->chunkSize(5 * 1024 * 1024) // 5MB chunks
->acceptedFileTypes(['image/*']) // MIME types
->webcam(false) // Disable webcam
->screenCapture(false) // Disable screen capture
->audio(false) // Disable audio recording
->imageEditor(true) // Enable image editor
->autoOpenFileEditor() // Auto-open editor for images
->dragDrop(true) // Full-page drag & drop
->height(400) // Dashboard height in px
->theme('auto') // 'auto', 'light', or 'dark'
->locale('fr') // Override locale
->note('Upload your documents here') // Custom note text
->companionUrl('https://...') // Companion URL
->remoteSources(['GoogleDrive']) // Remote sources
->uploadEndpoint('/custom/upload') // Custom upload URL
->deleteEndpoint('/custom/delete') // Custom delete URL
#Panel Plugin (optional)
Set panel-level defaults so you don't repeat config on every field:
use SpykApp\UppyUpload\UppyUploadPlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugin(
UppyUploadPlugin::make()
->companionUrl('https://companion.yoursite.com')
->disk('s3')
);
}
#Configuration
After publishing, edit config/uppy-upload.php:
return [
'disk' => env('UPPY_UPLOAD_DISK', 'public'),
'directory' => env('UPPY_UPLOAD_DIRECTORY', 'uploads'),
'chunk_size' => env('UPPY_UPLOAD_CHUNK_SIZE', 5 * 1024 * 1024),
'route_prefix' => env('UPPY_UPLOAD_ROUTE_PREFIX', 'uppy'),
'middleware' => ['web'],
'companion_url' => env('UPPY_COMPANION_URL', null),
'remote_sources' => ['GoogleDrive', 'OneDrive', 'Dropbox', 'Url'],
'uppy_version' => env('UPPY_VERSION', '5.2.1'),
];
Or use .env:
UPPY_UPLOAD_DISK=s3
UPPY_UPLOAD_DIRECTORY=uploads
UPPY_COMPANION_URL=https://companion.yoursite.com
#Companion Server (for remote sources)
Required only if you want Google Drive, OneDrive, Dropbox support.
docker run -d \
--name companion \
--restart unless-stopped \
-p 127.0.0.1:3890:3890 \
-v companion_data:/output \
-e COMPANION_PORT=3890 \
-e COMPANION_SECRET=your-secret-here \
-e COMPANION_DOMAIN=companion.yoursite.com \
-e COMPANION_PROTOCOL=https \
-e COMPANION_DATADIR=/output \
-e COMPANION_UPLOAD_URLS="https://yoursite.com/uppy/.*" \
-e COMPANION_GOOGLE_KEY=your-google-client-id \
-e COMPANION_GOOGLE_SECRET=your-google-secret \
-e COMPANION_ONEDRIVE_KEY=your-azure-client-id \
-e COMPANION_ONEDRIVE_SECRET=your-azure-secret \
transloadit/companion:latest
OAuth redirect URIs:
- Google:
https://companion.yoursite.com/drive/redirect - OneDrive:
https://companion.yoursite.com/onedrive/redirect
#Translations
Included languages: English, Arabic, French, German, Spanish, Portuguese (BR), Dutch, Turkish, Chinese (Simplified), Hindi, Urdu
Adding a new language:
- Publish translations:
php artisan vendor:publish --tag="uppy-upload-translations" - Copy
lang/vendor/uppy-upload/en/uppy.phpto your locale folder, e.g.lang/vendor/uppy-upload/ja/uppy.php - Translate the strings
Uppy's own UI strings (buttons, status messages) are automatically loaded from CDN based on the app locale.
#Credits
#License
The MIT License (MIT). Please see License File for more information.
The author
Spykapps is an open-source development wing focusing on building high-quality Laravel and FilamentPHP packages. We’re currently working on a collection of open-source tools aimed at improving developer experience, UI consistency, and workflow automation within the Filament ecosystem.
From the same author
Flat Theme
A simple theme for FilamentPHP based on flat design.
Author:
Spykapps
Passwordless Login
A highly customizable Filament 4 plugin for passwordless magic link authentication with login page, actions, resource management, and analytics widgets.
Author:
Spykapps
Theme Inverness
A refined, premium theme for Filament inspired by Laravel's signature red aesthetic, featuring tight spacing, subtle shadows, and dynamic primary color accents. Designed for Filament v4 and v5.
Author:
Spykapps
Theme Aberdeen
A refined, minimal Filament theme with tight spacing, subtle shadows, and Brand New Filament warm-amber accents. Designed for Filament v4 and v5.
Author:
Spykapps
Featured Plugins
A selection of plugins curated by the Filament team
Custom Dashboards
Let your users build and share their own dashboards with a drag-and-drop interface. Define your data sources in PHP and let them do the rest.
Filament
Data Lens
Advanced Data Visualization for Laravel Filament - a premium reporting solution enabling custom column creation, sophisticated filtering, and enterprise-grade data insights within admin panels.
Padmission
Advanced Tables (formerly Filter Sets)
Supercharge your tables with powerful features like user-customizable views, quick filters, multi-column sorting, advanced table searching, convenient view management, and more. Compatible with Resource Panel Tables, Relation Managers, Table Widgets, and Table Builder!
Kenneth Sese