# Storage Providers

> Configure AWS S3 (or any S3-compatible provider).

*Canonical: https://makerkit.dev/docs/nextjs-drizzle/storage/providers*

---

The storage package supports multiple cloud providers through unstorage drivers. This guide covers setup for each provider.

## Local Filesystem (Development)

The filesystem driver is enabled by default in development:

```bash {% title=".env.local" %}
# .env.local
STORAGE_PROVIDER=fs
STORAGE_BASE_URL=storage.dev
```

Files are stored locally and served via Next.js static file serving.

**Note:** Filesystem storage is disabled in production (`NODE_ENV === 'production'`).

## AWS S3 (or any S3-compatible provider)

### Environment Variables

```bash {% title=".env.production" %}
# .env.production
STORAGE_PROVIDER=s3
STORAGE_BASE_URL=https://my-bucket.s3.us-east-1.amazonaws.com

STORAGE_S3_ACCESS_KEY_ID=your-access-key
STORAGE_S3_SECRET_ACCESS_KEY=your-secret-key
STORAGE_S3_REGION=us-east-1
STORAGE_S3_BUCKET=my-bucket
```

**Warning:** Do not add the secret access key to the environment variables file. Instead, use your hosting provider to set the environment variable.

## Custom Provider

Register any unstorage-compatible driver:

```typescript {% title="packages/storage/src/registry.ts" %}
import { storageRegistry, createStorage } from '@kit/storage';
import customDriver from './my-custom-driver';

storageRegistry.register('custom', async () => {
  return createStorage({
    driver: customDriver({
      // Driver options
    }),
  });
});
```

Then set:

```bash
STORAGE_PROVIDER=custom
```

---

**Next:** [API Reference](./api-reference)
