npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

multipart-ts

v1.4.1

Published

TypeScript library for multipart data parsing and creation

Readme

Multipart.ts

Documentation GitHub NPM Downloads Licence Test Coverage: 100%

A library for parsing and creating multipart data in Node.js and browsers, with built-in TypeScript support, zero dependencies, and no need for polyfills.

Documentation

Features

  • Parse any kind of multipart/*, e.g. multipart/mixed, multipart/form-data, multipart/byteranges, etc.
  • Create multipart messages with arbitrary parts
  • Initialise a Multipart instance directly from FormData
  • Serialise a Multipart instance into bytes (Uint8Array)
  • Compatible with both Node.js and browsers, without requiring polyfills
  • Zero dependencies — lightweight and efficient

Getting started

Install via NPM:

npm i multipart-ts

Import as native ESM:

import {Multipart} from "multipart-ts";

This library exclusively uses Uint8Array, which ensures it works seamlessly in both Node.js and browsers.

In Node.js, Buffer can be used interchangeably with Uint8Array in most cases, as it inherits from it.

In the browser, use TextEncoder and TextDecoder to convert between strings and Uint8Array.

Example

node:http

This Node.js example sets up a simple HTTP server that parses multipart messages from POST requests and responds with an example multipart message to GET requests.

import http from "node:http";
import {Component, Multipart} from "multipart-ts";

http.createServer(async (req, res) => {
    // Parse multipart request body
    if (req.method === "POST" && req.headers["content-type"]) {
        // Get the request body
        const body: Uint8Array[] = [];
        for await (const chunk of req)
            body.push(chunk);

        // Create a Blob to hold the Content-Type header (which includes the boundary) and the body
        const blob = new Blob(body, {type: req.headers["content-type"]});
        // Parse multipart from the blob
        const multipart = await Multipart.blob(blob);
        console.log(multipart);

        res.end("Parsed!");
    }
    // Return a multipart response
    else if (req.method === "GET") {
        const multipart = new Multipart(
            [
                new Component({
                    "X-Foo": "Bar Baz",
                    "Content-Type": "text/plain"
                }, Buffer.from("Hello world!")),

                // You can add nested multipart components
                new Multipart([
                    new Component({"Content-Type": "application/json"}, Buffer.from(JSON.stringify({foo: "bar"}))),
                    new Component({}, [0x66, 0x6f, 0x6f, 0x20, 0x62, 0x61, 0x72])
                ])
            ],
            "your-custom-boundary", // or omit to generate a random one
            "multipart/mixed"
        );
        // use the content-type header generated by the multipart
        res.setHeader("Content-Type", multipart.headers.get("Content-Type")!);
        // send the multipart body bytes
        res.end(multipart.body);
    }
    else res.end();
}).listen(3000);

Browser

A minimal example demonstrating the creation, serialisation, and parsing of a simple multipart message. This can also be done the same way in Node.js.

import {Multipart, Component} from "multipart-ts";

// Create
const multipart = new Multipart(
    [new Component({"Content-Type": "text/plain"}, new TextEncoder().encode("Hello world!"))],
    "your-custom-boundary", // or omit to generate a random one
    "multipart/mixed"
);

// Serialise
const data: Uint8Array = multipart.bytes();

// Parse
const parsed: Multipart = Multipart.parse(data);

console.log(new TextDecoder().decode(parsed.parts[0].body)); // Hello world!

Licence

Copyright © 2024–2025 Zefir Kirilov.

This project is licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0). A copy of the licence text is included in the repository.