PHPackages                             alsous/laravel-filepond - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. alsous/laravel-filepond

ActiveLibrary[File &amp; Storage](/categories/file-storage)

alsous/laravel-filepond
=======================

Laravel 12 FilePond integration — Blade component for single/multiple file uploads with old() support

10PHP

Since May 10Pushed 1mo agoCompare

[ Source](https://github.com/khaledalsous/laravel-filepond)[ Packagist](https://packagist.org/packages/alsous/laravel-filepond)[ RSS](/packages/alsous-laravel-filepond/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (1)Used By (0)

Laravel FilePond
================

[](#laravel-filepond)

Laravel 12 package for [FilePond](https://pqina.nl/filepond/) — Blade component that handles single/multiple uploads, image previews, old() restoration, and in-form deletion.

---

Installation
------------

[](#installation)

```
composer require alsous/laravel-filepond
```

```
php artisan vendor:publish --tag=filepond-config
```

---

How it works
------------

[](#how-it-works)

1. User selects files → FilePond uploads each file immediately to a **temp endpoint** → receives a UUID back.
2. A hidden `` keeps the UUID(s) in the form.
3. User submits the form → your controller receives the UUID(s) → you call `Filepond::getFile($id)` → the file is ready to store permanently.
4. If **validation fails**, `old()` restores the UUID(s) and FilePond re-displays the files — no re-upload needed.
5. Clicking **X** in FilePond removes the file and sends a DELETE to the temp endpoint.

---

Basic usage
-----------

[](#basic-usage)

### Single file

[](#single-file)

```

    @csrf

    Save

```

```
use Alsous\Filepond\Traits\InteractsWithFilepond;

class ProfileController extends Controller
{
    use InteractsWithFilepond;

    public function update(Request $request)
    {
        $request->validate([
            'avatar' => 'required|string',
        ]);

        $file = $this->filepondFile('avatar');   // FilepondFile|null
        $path = $file?->store('avatars');        // stored path

        auth()->user()->update(['avatar' => $path]);
    }
}
```

### Multiple files

[](#multiple-files)

```

```

```
$files = $this->filepondFiles('photos');   // FilepondFile[]

foreach ($files as $file) {
    $path = $file->store('photos');
    Photo::create(['path' => $path, 'user_id' => auth()->id()]);
}
```

---

Component props
---------------

[](#component-props)

PropTypeDefaultDescription`name``string`—Form field name`multiple``bool``false`Allow multiple files`max-file-size``string`—e.g. `"5MB"`, `"500KB"``accepted-file-types``array``[]`e.g. `['image/*']`, `['application/pdf']``max-files``int`—Max files in multiple mode`image-preview``bool``true`Show thumbnail previews for images`include-assets``bool``true`Auto-inject FilePond CSS/JS from CDN`value``string|array`—Pre-populate (UUID or array of UUIDs)`label``string`—Custom idle label (HTML allowed)`disabled``bool``false`Disable the pond`required``bool``false`Mark as required---

old() — automatic after validation failure
------------------------------------------

[](#old--automatic-after-validation-failure)

No extra code needed. The component reads `old('fieldname')` automatically.

```
public function store(Request $request)
{
    $request->validate([
        'document' => 'required|string',
        'title'    => 'required|string|max:255',
    ]);

    // If validation fails here, the user is redirected back.
    // The component will restore the uploaded file automatically.
}
```

```

    @csrf

    @error('title') {{ $message }} @enderror

    @error('document') {{ $message }} @enderror

    Upload

```

---

Pre-populate from a model (edit form)
-------------------------------------

[](#pre-populate-from-a-model-edit-form)

Pass the stored UUID (or array) via `:value`.

```
{{-- Single --}}

{{-- Multiple --}}

```

---

Facade — use without the trait
------------------------------

[](#facade--use-without-the-trait)

```
use Alsous\Filepond\Facades\Filepond;

// Single
$file = Filepond::getFile($request->input('avatar'));
$path = $file?->store('avatars');

// Multiple
$files = Filepond::input($request->input('photos'));
foreach ($files as $file) {
    $file->store('photos');
}
```

---

FilepondFile API
----------------

[](#filepondfile-api)

MethodReturnsDescription`store($path, $disk)``string`Store using Laravel convention`storeAs($path, $name, $disk)``string`Store with custom filename`toUploadedFile()``UploadedFile`Convert to standard Laravel upload`getFilePath()``string`Absolute filesystem path`$file->originalName``string`Original filename`$file->mimeType``string`MIME type`$file->size``int`Size in bytes---

Loading your own assets
-----------------------

[](#loading-your-own-assets)

Set `:include-assets="false"` and load FilePond in your layout ``:

```

```

```

```

---

Configuration (`config/filepond.php`)
-------------------------------------

[](#configuration-configfilepondphp)

```
'temp_disk'       => 'local',          // Storage disk for temp files
'temp_folder'     => 'filepond/temp',  // Folder inside the disk
'route_prefix'    => 'filepond',       // URL prefix: /filepond/process
'middleware'      => ['web'],           // Middleware on FilePond routes
'max_upload_size' => 102400,           // KB — 100 MB default
```

Add `auth` to `middleware` to require authentication on uploads:

```
'middleware' => ['web', 'auth'],
```

---

Artisan commands
----------------

[](#artisan-commands)

```
# Publish config
php artisan vendor:publish --tag=filepond-config

# Publish views (to customise the component template)
php artisan vendor:publish --tag=filepond-views
```

---

Requirements
------------

[](#requirements)

- PHP 8.2+
- Laravel 12

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance61

Regular maintenance activity

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/178702570?v=4)[khaledalsous](/maintainers/khaledalsous)[@khaledalsous](https://github.com/khaledalsous)

---

Top Contributors

[![khaledalsous](https://avatars.githubusercontent.com/u/178702570?v=4)](https://github.com/khaledalsous "khaledalsous (1 commits)")

### Embed Badge

![Health badge](/badges/alsous-laravel-filepond/health.svg)

```
[![Health](https://phpackages.com/badges/alsous-laravel-filepond/health.svg)](https://phpackages.com/packages/alsous-laravel-filepond)
```

###  Alternatives

[glicer/sync-sftp

Sync local files with ftp server

212.7k](/packages/glicer-sync-sftp)[venveo/craft-compress

Create smart zip files from Craft assets on the fly

124.7k](/packages/venveo-craft-compress)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
