Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated Apr 29, 2024

Custom Plugin

You can create your custom pluggable for Storage. This may be helpful if you want to integrate your app with a custom storage backend.

To create a plugin implement the StorageProvider interface:

import { Storage, StorageProvider } from 'aws-amplify';
export default class MyStorageProvider implements StorageProvider {
// category and provider name
static category = 'Storage';
static providerName = 'MyStorage';
// you need to implement these seven methods
// configure your provider
configure(config: object): object;
// copy object, optional
src: { key: string; identityId: string; level: 'public' | 'protected' | 'private' },
dest: { key: string; level: 'public' | 'protected' | 'private' },
): Promise<any>
// get object/pre-signed url from storage
get(key: string, options?): Promise<String|Object>
// upload storage object
put(key: string, object, options?): Promise<Object>
// remove object
remove(key: string, options?): Promise<any>
// list objects for the path
list(path, options?): Promise<any>
// return 'Storage';
getCategory(): string;
// return the name of you provider
getProviderName(): string;

You can now register your pluggable:

// add the plugin
Storage.addPluggable(new MyStorageProvider());
// get the plugin
// remove the plugin
// send configuration into Amplify
[MyStorageProvider.providerName]: {
// My Storage provider configuration

You can pass in your custom provider class to the Storage function to get Typescript support:

class MyStorageProvider implements StorageProvider {
get(key: string, config: { config1: number; }): Promise<{ key: string }>;
// will automatically use the return type from the provider's function signature
const getResult: Promise<{ key: string }> = Storage.get<MyStorageProvider>('key', {
provider: 'MyStorage',
config1: 123,

The default provider (Amazon S3) is in use when you call Storage.put( ) unless you specify a different provider: Storage.put(key, object, {provider: 'MyStorage'}).