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.

Get Started View on GitHub

Easily integrates with your favorite frameworks

The FilePond web component works with any JavaScript framework…

…and thanks to Shadow DOM, it plays nicely with CSS frameworks too.

A customelement that just works

The <file-pond> custom element feels right at home on a classic webpage…

<form action="/upload" method="POST">
    <file-pond>
        <label for="my-file">Drop files here</label>
        <input id="my-file" type="file" name="docs" />
    </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 (
        <file-pond entries={myEntries}>
            <label htmlFor="my-file">Drop files here</label>
            <input id="my-file" type="file" name="docs" />
        </file-pond>
    );
}

Natural Motion Engine

The layout engine animates elements to new positions using the power of springs.

The user interface is automagically animated no matter the CSS layout.

Switch up the list layout and give reordering the items a try.

Layout
Springyness

Easily Extendable

Extend FilePonds functionality with 24 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",
    },
  ],
});

Polished Media Previews

If the browser can present it, so can FilePond.

When possible previews are rendered on a separate thread.

Learn about media previews

Headless Mode

Use FilePond without a user interface. Useful for programmatic processing of files or when building a custom UI on top of FilePond core.

import { createFilePondEntryTree, createExtensionManager } from 'filepond';
        
const entryTree = createFilePondEntryTree();

const extensionManager = createExtensionManager(entryTree);

entryTree.entries = [
    new File(/* */)
];

Light and Dark theme

FilePond uses CSS color-scheme to make switching between light and dark mode super easy.

html {
  color-scheme: light;
}

@media (prefers-color-scheme: dark) {
  html {
    color-scheme: dark;
  }
}

Palls with Pintura

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

How to integrate Pintura

Learn more about Pintura

About Pqina

Pqina, run by Rik Schennink, helps more than 10,000 companies worldwide and is rated 4.9 out of 5 stars by 500+ customers.

FilePond is my way of proving the web can rival native apps, as long as we give it the attention it deserves.

Rik Schennink