A flexible JavaScript File Upload Component that works with every stack
FilePond uploads anything you throw at it, and offers a great, accessible, silky smooth user experience.
Easily integrates with your favorite frameworks
The FilePond web component works with any JavaScript framework…
…and thanks to Shadow DOM, FilePond plays nicely with CSS frameworks too.
Tailwind
Bootstrap
Skeleton
Foundation
Feature highlights
-
Turn anything into a file
Load directories, files, blobs, canvas elements, data transfers, local URLs, remote URLs, and data URLs.
-
Upload sync or async
Synchronous uploading by default, easily expand to async, or chunked uploading with extensions.
-
Add data from anywhere
Supports drag and drop, copy and paste, select with file input, or load files using the API.
-
Accessibile defaults
Tested with AT software like VoiceOver. Correctly moves focus, fully navigable with keyboard, mouse, and touch interaction.
-
Great UX on any device
Finely tuned touch areas, optimised drag and drop functionality. Fully functional and fine-tuned for both mobile and desktop devices.
-
Internationalization
Supports multiple languages, ships with default locale files, every label is customizable.
A custom element that just works
The <file-pond> custom element feels right at home on a classic webpage…
<form action="/upload" method="POST">
<label for="my-file">Document</label>
<file-pond>
<input id="my-file" type="file" name="doc" />
</file-pond>
<button type="submit">Upload</button>
</form>
<script type="module">
import { defineFilePond } from 'filepond';
import { locale } from 'filepond/locales/en-gb.js';
defineFilePond({ locale });
</script>
…and turns into a <Component> when used with a JavaScript framework.
import { defineFilePond } from 'filepond';
import { locale } from 'filepond/locales/en-gb.js';
defineFilePond({ locale });
export default function App() {
const [myEntries, setMyEntries] = useState<FilePondEntry[]>([]);
return (
<label htmlFor="my-file">Document</label>
<file-pond entries={myEntries}>
<input id="my-file" type="file" name="doc" />
</file-pond>
);
}
Animated with the power of springs
FilePond automatically animates the user interface with the power of springs, but of course respects users that prefer reduced motion.
Switch up the list layout, or try reordering the items.
Tree shakeable, extendable, compatible with SSR
Import only the parts you need and extend FilePonds functionality with 25 ready made extensions.
Build your own store, transform, and validation extensions, or start from scratch and create a fully custom extension.
import { defineFilePond } from "filepond";
import { locale } from "filepond/locales/en-gb.js";
import { FileSizeValidator } from "filepond/extensions/file-size-validator.js";
const elements = defineFilePond({
locale,
// Let's limit the file size using the FileSizeValidator extension
extensions: [
FileSizeValidator,
{
maxSize: "10MB",
},
],
});
-
ClipboardSource
Accept files from paste events.
-
DragDropSource
Accept files dropped on a specified element.
-
FileInputSource
Accept files from a specified file input element
-
BlobLoader
Convert Blob sources into Files.
-
CanvasLoader
Convert Canvas sources into Blobs.
-
DataTransferLoader
Convert a DataTransfer into a File tree.
-
URLLoader
Convert URL sources into Files.
-
SimulatedLoader
Simulate File loading.
-
FileExtensionValidator
Validate files based on their extension.
-
FileMimeTypeValidator
Validate files based on their mime type.
-
FileNameValidator
Validate files based on their name.
-
FileSizeValidator
Validate files based on their min and/or max size.
-
ListCountValidator
Validate the file list based on the amount of files in the list.
-
ListSizeValidator
Validate the file listsize based on the total size of the files in the list.
-
MediaResolutionValidator
Validate images and videos based on their width and height values.
-
FileNameTransform
Automatically or manuallye rename files.
-
DataURLStore
Store the encoded data URL of the file.
-
FormPostStore
Store the file object using a form post.
-
ChunkedUploadStore
Store the file object by uploading it in chunks.
-
ObjectURLStore
Store the blob URL of a file.
-
SimulatedStore
Simulate storing a file.
-
TextInputStore
Store a stringified representation of the current entry tree in a specified input element.
-
ValueCallbackStore
Handle storage with a callback function.
-
ConsoleView
Renders the current state of the file tree to the developer console.
-
EntryListView
Renders the current state of the file tree to a specified HTML element.
Polished image and video previews
If the browser can present it, so can FilePond.
For optimal performance media previews are rendered on a separate thread.
Use without interface in headless mode
Use FilePonds programmatic processing of files, or build a custom UI on top of FilePond core.
import { createFilePondEntryTree, createExtensionManager } from 'filepond';
// The EntryTree holds all the files
const entryTree = createFilePondEntryTree();
// The ExtensionManager manages the FilePond extensions ¯\_(ツ)_/¯
const extensionManager = createExtensionManager(entryTree);
// Add files to the mix, and the above objects handle the rest
entryTree.entries = [
new File(/* */)
];
Fits in with light and dark themes
FilePond uses the CSS color-scheme property to make switching between light and dark mode super easy.
Huge palls with Pintura
Pair FilePond with Pintura to unlock the perfect image and video editing experience for your users.
- Five minute install
- Set crop masks and guides
- Control quality with fixed aspect ratios
- Rotate, resize, and flip images
- Annotate, decorate, and redact Images
- Finetune image colors
- A fluid user experience like FilePond
About FilePond
FilePond is built by Rik Schennink at Pqina. Pqina helps more than 10,000 companies worldwide and is rated 4.9 out of 5 stars by 500+ customers.
When given the attention it deserves, the web can rival the native experience.
![]()
![]()