# nestjs-minio

> Minio object storage with nestjs

Latest version **2.8.0** (published 2026-04-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install nestjs-minio
pnpm add nestjs-minio
yarn add nestjs-minio
bun add nestjs-minio
```

## Health

**Score 60/100 (C)** — status: active.

Positive: has types; no vulnerabilities; high maintenance score; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 2.8.0 |
| Published | 2026-04-25 |
| First published | 2019-11-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 27.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 87 |
| Author | Rubin Bhandari |
| Maintainers | rubins |
| Keywords | minio, nestjs |

## Links

- npm: https://www.npmjs.com/package/nestjs-minio
- Repository: https://github.com/NestCrafts/nestjs-minio
- Homepage: https://github.com/NestCrafts/nestjs-minio#readme
- Issues: https://github.com/NestCrafts/nestjs-minio/issues
- npm.io page: https://npm.io/package/nestjs-minio

## Dependencies (1)

- [minio](https://npm.io/package/minio.md) ^8.0.7

## Recent versions

- 2.8.0 (latest) — 2026-04-25
- 2.3.0-5 (next) — 2022-12-23
- 2.7.6 — 2026-04-19
- 2.7.5 — 2026-04-19
- 2.7.2 — 2026-04-19
- 2.7.1 — 2026-04-19
- 2.7.0 — 2026-04-19
- 2.6.3 — 2025-12-15
- 2.6.2 — 2024-08-25
- 2.6.1 — 2024-05-10
- 2.5.5 — 2024-04-22
- 2.5.4 — 2023-10-25
- 2.5.1 — 2023-09-15
- 2.5.0 — 2023-06-17
- 2.4.0 — 2023-04-25
- … 46 more at https://npm.io/package/nestjs-minio/versions

## README

<p align="center">
  <a href="http://nestjs.com/" target="blank"><img src="http://kamilmysliwiec.com/public/nest-logo.png#1" alt="Nest Logo" />   </a>
  <a href="https://min.io" target="_blank"><img src="https://min.io/resources/img/logo.svg" width="380"></a>
</p>

<p align="center">Minio Module for Nest framework</p>

<p align="center">
<a href="https://www.npmjs.com/package/nestjs-minio"><img src="https://img.shields.io/npm/v/nestjs-minio" alt="NPM Version" /></a>
<a href="https://img.shields.io/npm/l/nestjs-minio"><img src="https://img.shields.io/npm/l/nestjs-minio" alt="Package License" /></a>
<a href="https://www.npmjs.com/package/nestjs-minio"><img src="https://img.shields.io/npm/dw/nestjs-minio" alt="NPM Downloads" /></a>

</p>

<p align="center">
<a href="https://www.buymeacoffee.com/XbgWxt567" target="_blank"><img src="https://i.imgur.com/CahshSS.png" alt="Buy Me A Coffee" style="height: auto !important;width: auto !important;" ></a>

</p>

## Description

This's a [nest-minio](https://github.com/rubiin/nest-minio) module for [Nest](https://github.com/nestjs/nest).
This quickstart guide will show you how to install the client SDK and execute an example JavaScript program. For a complete list of APIs and examples, please take a look at the [JavaScript Client API Reference](https://docs.min.io/docs/javascript-client-api-reference) documentation.

This document assumes that you have a working [nodejs](http://nodejs.org/) setup in place.

## Installation

```bash
$ npm i --save nestjs-minio
```

## Initialize MinIO Client

You need five items in order to connect to MinIO object storage server.

| Params    | Description                                                                                         |
| :-------- | :-------------------------------------------------------------------------------------------------- |
| endPoint  | URL to object storage service.                                                                      |
| port      | TCP/IP port number. This input is optional. Default value set to `80` for HTTP and `443` for HTTPs. |
| accessKey | Access key is like user ID that uniquely identifies your account.                                   |
| secretKey | Secret key is the password to your account.                                                         |
| useSSL    | Set this value to 'true' to enable secure (HTTPS) access                                            |

Provide the credentials for minio module by importing it as :

```javascript
import { Module } from '@nestjs/common';
import { NestMinioClientController } from './nest-minio-client.controller';
import { NestMinioModule } from '../nest-minio.module';

@Module({
	controllers: [NestMinioClientController],
	imports: [
		NestMinioModule.register({
			isGlobal: true,
			endPoint: 'play.min.io',
			port: 9000,
			useSSL: true,
			accessKey: 'Q3AM3UQ867SPQQA43P2F',
			secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG',
		}),
	],
})
export class NestMinioClientModule {}
```

Then you can use it in the controller or service by injecting it in the controller as:

```javascript

 constructor(@Inject(MINIO_CONNECTION) private readonly minioClient) {}

```

## Multiple Clients In One Module

You can register multiple MinIO clients by importing `NestMinioModule.register(...)` multiple times and assigning a unique `name` to each client.

```typescript
import { Module } from '@nestjs/common';
import { NestMinioModule } from 'nestjs-minio';

@Module({
  imports: [
    NestMinioModule.register({
      name: 'uploads',
      endPoint: 'localhost',
      port: 9000,
      useSSL: false,
      accessKey: 'test',
      secretKey: 'test1234',
    }),
    NestMinioModule.register({
      name: 'archive',
      endPoint: 'localhost',
      port: 9001,
      useSSL: false,
      accessKey: 'archive-user',
      secretKey: 'archive-pass',
    }),
  ],
})
export class StorageModule {}
```

Inject named clients using the decorator:

```typescript
import { Controller } from '@nestjs/common';
import { Client } from 'minio';
import { InjectMinio } from 'nestjs-minio';

@Controller()
export class FilesController {
  constructor(
    @InjectMinio('uploads') private readonly uploadsClient: Client,
    @InjectMinio('archive') private readonly archiveClient: Client,
  ) {}
}
```

## Connection Teardown

`NestMinioService` exposes manual teardown methods so applications can proactively close MinIO connections during graceful shutdown:

```typescript
import { Injectable } from '@nestjs/common';
import { NestMinioService } from 'nestjs-minio';

@Injectable()
export class ShutdownService {
  constructor(private readonly minioService: NestMinioService) {}

  async closeMinio(): Promise<void> {
    await this.minioService.disconnect();
    // Aliases: close() and destroy()
  }
}
```

The module also performs this cleanup automatically on application shutdown.

## Quick Start Example - File Uploader

This example program connects to an object storage server, makes a bucket on the server and then uploads a file to the bucket.

We will use the MinIO server running at https://play.min.io in this example. Feel free to use this service for testing and development. Access credentials shown in this example are open to the public.

```js

import { Controller, Get, Inject } from '@nestjs/common';
import { MINIO_CONNECTION } from '../constants';
import {Client, InjectMinio} from 'minio';

@Controller()
export class NestMinioClientController {
 // use inject token
  constructor(@Inject(MINIO_CONNECTION) private readonly minioClient: Client) {}

  // or use inject decorator
  // constructor(@InjectMinio() private readonly minioClient: Client) {}

  @Get()
  index() {
    const file = '/tmp/app.zip';

    const metaData = {
      'Content-Type': 'application/octet-stream',
      'X-Amz-Meta-Testing': 1234,
      example: 5678,
    };
    // Using fPutObject API upload your file to the bucket europetrip.
    this.minioClient.fPutObject(
      'europetripxxx3',
      'app.zip',
      file,
      metaData,
      function(err, etag) {
        if (err) {
          return console.log(err);
        }
        console.log('File uploaded successfully.');
      },
    );
  }
}


```

---
_Source: https://npm.io/package/nestjs-minio · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
