Multer

Streamlined multipart/form-data file upload handling for Express and Node.js APIs.

Library
npm
v2.5.0
12,088 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
86 /100 Excellent
Development Activity 96
Maintenance 72
Community 76
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
82 /100 Excellent
Architecture 78
Code Quality 84
Innovation 80
Learning Curve 85

Multer is the de facto standard middleware for handling multipart/form-data in Node.js, most commonly used to accept file uploads in Express applications. Built on top of busboy for streaming performance, it parses incoming multipart requests and attaches parsed text fields to req.body and uploaded files to req.file or req.files, with pluggable storage engines for writing to disk or buffering in memory.

With over 12,000 GitHub stars and tens of millions of weekly npm downloads, Multer has become the default choice any time a Node.js backend needs to accept uploaded files — profile pictures, documents, CSV imports, or attachments — without hand-rolling a multipart parser.

What You Get

  • Drop-in Express/Connect middleware for parsing multipart/form-data requests
  • Built-in DiskStorage and MemoryStorage engines, plus a documented StorageEngine interface for custom storage (S3, GCS, databases)
  • Field-level upload strategies via .single(), .array(), .fields(), .any(), and .none()
  • Configurable limits (file size, file count, field count, part count) to guard against DoS uploads
  • Typed MulterError codes for granular error handling

Common Use Cases

  • Accepting profile picture or avatar uploads in a REST API
  • Handling document/CSV/PDF attachment uploads alongside form text fields
  • Building admin dashboards or CMS backends that accept bulk file uploads
  • Streaming uploaded files directly into custom storage backends (S3-compatible object storage) via a custom StorageEngine

Under The Hood

Architecture: Multer’s architecture centers on a factory pattern: the exported multer() function (index.js) constructs a Multer instance holding shared config (storage engine, limits, fileFilter), and instance methods like .single(), .array(), .fields(), .none(), .any() each call _makeMiddleware() to produce an Express-compatible (req, res, next) handler via lib/make-middleware.js. That core middleware wires a busboy parser to the request stream, using a Counter (lib/counter.js, an EventEmitter-based pending-writes counter) to track in-flight file writes and a FileAppender (lib/file-appender.js) that abstracts the three request-shape strategies (VALUE/ARRAY/OBJECT/NONE) for attaching parsed files to req.file/req.files. Storage is delegated to a pluggable StorageEngine interface (storage/disk.js, storage/memory.js) implementing _handleFile/_removeFile, and any failed or aborted upload triggers remove-uploaded-files.js to clean up partially-written files before calling next(err) with a MulterError.

Tech Stack: The library is plain CommonJS JavaScript (no build step, no TypeScript — 100% JS per GitHub language stats) targeting Node >= 10.16.0. Runtime dependencies are minimal and purpose-built: busboy (the actual multipart stream parser Multer wraps), type-is (content-type sniffing to short-circuit non-multipart requests), append-field (nested/bracket-notation form field parsing), and concat-stream. Dev tooling uses standard for linting/formatting (no ESLint/Prettier config), mocha + nyc for tests and coverage, and express/form-data/fs-temp/testdata-w3c-json-form as test fixtures. CI (.github/workflows/ci.yml) runs the full mocha suite across 17 Node.js versions (10.x through 26.x), reflecting a strong backward-compatibility commitment for an Express-ecosystem package.

Code Quality: Test coverage is substantial: 19 spec files under test/ totaling ~2,484 lines covering disk/memory storage, field/file limits, error handling, Express integration, Unicode filenames, nesting depth, and orphaned-file cleanup — run via mocha --check-leaks with nyc coverage reporting to Coveralls in CI. Code style is consistent (var-based ES5-leaning style enforced by standard), functions are small and single-purpose, and error paths are explicit via a dedicated MulterError type with a fixed errorMessages map (lib/multer-error.js) rather than generic thrown errors. Edge-case handling is notably careful — make-middleware.js guards against double-invoking next(), drains the request stream on error to avoid EPIPE, and listens for aborted/close to avoid hangs on client disconnects — the kind of defensive stream handling expected of infrastructure-grade middleware maintained by the Express org.

API Design: Multer’s public API is deliberately narrow and mirrors Express’s own middleware conventions, minimizing the learning curve: multer(opts).single/array/fields/any/none() returns a standard (req, res, next) middleware with no unusual invocation pattern. The dest shorthand covers the common case in one line, while storage unlocks full control via a documented (StorageEngine.md) three-function interface (_handleFile, _removeFile, plus a constructor) that third-party packages (multer-s3, multer-gridfs-storage, etc.) implement. Trade-offs: there’s no bundled TypeScript definitions (community-maintained via @types/multer on DefinitelyTyped), and file objects are loosely-typed plain objects assembled by string-keyed Object.defineProperty/spread rather than a class, which keeps things flexible but offers no compile-time safety without external types.

Used by 44 apps in this directory

JavaScript
81%
MIT

localforge

AI Agents · AI Code Assistants · Developer Tools

401

A local, multi-provider AI coding agent with a real desktop and web UI — bring your own Anthropic, OpenAI, Gemini, Bedrock, or local Ollama keys and let it read, edit, and run code in your own project folder.

View details
41
Repo Health
54
Technical
73
Dependency
Built with
JavaScript 81%
CSS 12%
Updated 1 years ago
TypeScript
87%
MIT

medusa

Ecommerce

36,897

The most flexible open-source commerce platform — build B2C, B2B, and marketplace applications with modular, composable commerce primitives.

View details
94
Repo Health
87
Technical
63
Dependency
Built with
TypeScript 87%
JavaScript 12%
Updated 6 days ago
JavaScript
94%
AGPL 3.0

MyApi

AI Agents

23

A privacy-first personal API gateway for AI agents — connect your services once, issue scoped tokens to agents like OpenClaw, Hermes, or Claude Code, and keep a full audit trail instead of scattering raw credentials across .env files.

View details
37
Repo Health
64
Technical
73
Dependency
Built with
JavaScript 94%
Updated 2 weeks ago
TypeScript
92%
Other

n8n

Automation · No Code Platforms

208,437

Code when you need it, UI when you don't — the workflow automation platform built for technical teams who refuse to choose.

View details
95
Repo Health
87
Technical
62
Dependency
Built with
TypeScript 92%
Updated 6 days ago
TypeScript
97%
Other

nango

Authentication · Automation · Developer Tools

12,963

Build product integrations with AI using 800+ APIs — auth, proxy, and TypeScript functions on production-grade infrastructure.

View details
94
Repo Health
85
Technical
67
Dependency
Built with
TypeScript 97%
Updated 6 days ago
TypeScript
99%
Other

NocoBase

Low Code Platforms · No Code Platforms

24,686

Open-source AI + no-code platform that lets coding agents and people collaborate to build business systems fast on proven infrastructure.

View details
94
Repo Health
81
Technical
63
Dependency
Built with
TypeScript 99%
Updated 5 days ago
TypeScript
65%
Other

NocoDB

Databases · Low Code Platforms · No Code Platforms

65,340

Turn any SQL database into a collaborative no-code spreadsheet with automatic REST APIs and real-time views.

View details
91
Repo Health
77
Technical
63
Dependency
Built with
TypeScript 65%
Vue 30%
Updated 5 days ago
JavaScript
88%
GPL 3.0

NodeBB

Community

15,242

Modern Node.js forum software with real-time WebSockets, multi-database support, and a plugin ecosystem — the community platform built for the open web and the Fediverse.

View details
97
Repo Health
78
Technical
70
Dependency
Built with
JavaScript 88%
Go Template 11%
Updated 5 days ago
TypeScript
98%
Other

Novu

Developer Tools

40,195

Open-source communication infrastructure that connects your products and AI agents to every channel your users live on — Inbox, Email, SMS, Push, Chat, and more.

View details
93
Repo Health
80
Technical
64
Dependency
Built with
TypeScript 98%
Updated 5 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers